オートモードの挙動を改善する【ティラノスクリプト】
システムボタンなどから開始できるオートモード、ティラノデフォルトではこのような動きになっています。
これが気に入らないので、↓のように改善します。
コード全体
/**
* オートモードからの復帰判定
*/
let is_auto = false
$(document).off("mousedown")
$(document).on("mousedown", function(e) {
const that = TYRANO.kag.key_mouse
is_auto = TYRANO.kag.stat.is_auto
that.clearSkip();
var target = null;
//中央クリック
if (e.which == 2) {
target = that.map_mouse["center"];
}else if(e.which == 3){
//右クリック
target = that.map_mouse["right"];
}
if(typeof target=="function"){
target();
}else{
if(that[target]){
that[target]();
}
}
});
/**
* オートモード対応
* レイヤークリック時の動作
*/
let layer_obj_click = $(".layer_event_click");
layer_obj_click.off("click")
layer_obj_click.click(function(e){
if(that.kag.tmp.ready_audio==false){
if($.isNeedClickAudio()){
that.kag.readyAudio();
that.kag.tmp.ready_audio = true;
if(that.kag.stat.is_adding_text == true){
that.kag.stat.is_click_text = true;
return false;
}
that.kag.ftag.nextOrder();
return false;
}
}
if(that.is_swipe){
that.is_swipe = false;
return false;
}
if(that.kag.stat.is_hide_message == true){
that.kag.layer.showMessageLayers();
return false;
}
//テキスト再生中にクリックされた場合、文字列を進めて終了にする
if(that.kag.stat.is_adding_text == true){
that.kag.stat.is_click_text = true;
return false;;
}
//テキストマッハ表示時もリターン。
if(that.kag.stat.is_click_text == true){
return false;
}
if(that.kag.stat.is_stop == true){
return false;
}
//フキダシ表示の場合は一回非表示にする。
if(that.kag.stat.fuki.active==true){
that.kag.layer.hideMessageLayers();
}
//ここから変更
if(!is_auto){
//オートモードからの復帰じゃないとき(=非オートモード)はそのまま進める
that.kag.ftag.nextOrder();
}else if(!that.kag.stat.is_adding_text && !that.kag.tmp.is_vo_play){
//オートモードからの復帰のときはテキスト&ボイス進行中じゃなければ進める
that.kag.ftag.nextOrder();
}
//ここまで変更
})
//オートモード拡張
tyrano.plugin.kag.tag.autostart = {
pm : {},
start : function(pm) {
if (this.kag.stat.is_auto == true) {
return false;
}
this.kag.readyAudio();
//[p][l] の処理に、オート判定が入ってます
this.kag.stat.is_auto = true;
//ここから変更
if(this.kag.tmp.sleep_game === null){
if(!this.kag.stat.is_adding_text && !this.kag.tmp.is_vo_play){
this.kag.ftag.nextOrder();
}else{
//テキスト表示中orボイス再生中にオート開始したときは再度クリック待ちを挟んでおく
this.kag.ftag.startTag("l")
}
}else{
//sleepgame中はそのまま進める
this.kag.ftag.nextOrder();
}
//ここまで変更
}
}
TYRANO.kag.ftag.master_tag.autostart = TYRANO.kag.tag.autostart
TYRANO.kag.ftag.master_tag.autostart.kag = TYRANO.kag
tyrano.plugin.kag.tag.autostop = {
pm : {
next:"true"
},
start : function(pm) {
const _is_auto = this.kag.stat.is_auto
this.kag.stat.is_auto = false;
this.kag.stat.is_wait_auto = false;
if(pm.next=="true"){
//ここから変更
//テキスト表示中orボイス再生中にオート停止したときは何もしない
if(!this.kag.stat.is_adding_text && !this.kag.tmp.is_vo_play){
this.kag.ftag.nextOrder();
}else if(!_is_auto){
this.kag.ftag.nextOrder();
}
//ここまで変更
}
}
}
TYRANO.kag.ftag.master_tag.autostop = TYRANO.kag.tag.autostop
TYRANO.kag.ftag.master_tag.autostop.kag = TYRANO.kag
このコードを適当なjsファイルとして保存して、first.ksとかでloadjsすればオートモードの挙動が変わります。
以下、何をしているか知りたい方向け
解説
オートモードの挙動は複数の関数に跨って設定されているので、いじる箇所も多いですがひとつずつ見ていきましょう。
オートモードからの復帰を判定する変数を定義
/**
* オートモードからの復帰判定
*/
let is_auto = false
まずはこちら。「is_auto」という変数を定義しています。
この変数は、「オートモードが解除されたか」の判定をするのに使います。詳細は後述
ゲーム画面をクリックしたときの動作
$(document).off("mousedown")
$(document).on("mousedown", function(e) {
const that = TYRANO.kag.key_mouse
is_auto = TYRANO.kag.stat.is_auto //ここを追加
that.clearSkip();
var target = null;
//中央クリック
if (e.which == 2) {
target = that.map_mouse["center"];
}else if(e.which == 3){
//右クリック
target = that.map_mouse["right"];
}
if(typeof target=="function"){
target();
}else{
if(that[target]){
that[target]();
}
}
});
コメント入れてるところを追加しています。
ここでは、「クリックした時点のオートモードの状態」を先程定義した「is_auto」変数に代入しています。
これにより、「今はオートモードから通常のメッセージ進行モードに戻ったタイミングか」がわかるわけです。
レイヤークリック時の動作
/**
* オートモード対応
* レイヤークリック時の動作
*/
let layer_obj_click = $(".layer_event_click");
layer_obj_click.off("click")
layer_obj_click.click(function(e){
if(that.kag.tmp.ready_audio==false){
if($.isNeedClickAudio()){
that.kag.readyAudio();
that.kag.tmp.ready_audio = true;
if(that.kag.stat.is_adding_text == true){
that.kag.stat.is_click_text = true;
return false;
}
that.kag.ftag.nextOrder();
return false;
}
}
if(that.is_swipe){
that.is_swipe = false;
return false;
}
if(that.kag.stat.is_hide_message == true){
that.kag.layer.showMessageLayers();
return false;
}
//テキスト再生中にクリックされた場合、文字列を進めて終了にする
if(that.kag.stat.is_adding_text == true){
that.kag.stat.is_click_text = true;
return false;;
}
//テキストマッハ表示時もリターン。
if(that.kag.stat.is_click_text == true){
return false;
}
if(that.kag.stat.is_stop == true){
return false;
}
//フキダシ表示の場合は一回非表示にする。
if(that.kag.stat.fuki.active==true){
that.kag.layer.hideMessageLayers();
}
//ここから変更
if(!is_auto){
//オートモードからの復帰じゃないとき(=非オートモード)はそのまま進める
that.kag.ftag.nextOrder();
}else if(!that.kag.stat.is_adding_text && !that.kag.tmp.is_vo_play){
//オートモードからの復帰のときはテキスト&ボイス進行中じゃなければ進める
that.kag.ftag.nextOrder();
}
//ここまで変更
})
続いては、ゲーム画面をクリックしたときの動作の定義です。
コメントのある部分を変更しています。
「オートモードから通常モードに変わったタイミング」であれば、「メッセージ表示中」または「ボイス再生中」かを判定し、「メッセージ表示中でなく、かつボイス再生中でもない」場合にのみ次のメッセージに進めます。
「オートモードから通常モードに変わったタイミング」でない場合は、そのままメッセージを進めます。通常の、「クリックしてメッセージ進行」の動作ですね。
[autostart]タグの拡張
//オートモード拡張
tyrano.plugin.kag.tag.autostart = {
pm : {},
start : function(pm) {
if (this.kag.stat.is_auto == true) {
return false;
}
this.kag.readyAudio();
//[p][l] の処理に、オート判定が入ってます
this.kag.stat.is_auto = true;
//ここから変更
if(this.kag.tmp.sleep_game === null){
if(!this.kag.stat.is_adding_text && !this.kag.tmp.is_vo_play){
this.kag.ftag.nextOrder();
}else{
//テキスト表示中orボイス再生中にオート開始したときは再度クリック待ちを挟んでおく
this.kag.ftag.startTag("l")
}
}else{
//sleepgame中はそのまま進める
this.kag.ftag.nextOrder();
}
//ここまで変更
}
}
TYRANO.kag.ftag.master_tag.autostart = TYRANO.kag.tag.autostart
TYRANO.kag.ftag.master_tag.autostart.kag = TYRANO.kag
続いて[autostart]タグをいじっていきます。
これもコメントを入れているところです。
「sleepgame中でない」場合、かつ「メッセージ表示中でなくボイス再生中でない」場合に「オートモード開始」したときは、そのままメッセージを進めます。
「メッセージ表示中またはボイス再生中」の場合に「オートモード開始」したときは、クリック待ちの処理を挟むことで「オートモード待機時間経過後に次のメッセージに進む」処理となります。
[autostop]タグの拡張
tyrano.plugin.kag.tag.autostop = {
pm : {
next:"true"
},
start : function(pm) {
const _is_auto = this.kag.stat.is_auto
this.kag.stat.is_auto = false;
this.kag.stat.is_wait_auto = false;
if(pm.next=="true"){
//ここから変更
//テキスト表示中orボイス再生中にオート停止したときは何もしない
if(!this.kag.stat.is_adding_text && !this.kag.tmp.is_vo_play){
this.kag.ftag.nextOrder();
}else if(!_is_auto){
this.kag.ftag.nextOrder();
}
//ここまで変更
}
}
}
TYRANO.kag.ftag.master_tag.autostop = TYRANO.kag.tag.autostop
TYRANO.kag.ftag.master_tag.autostop.kag = TYRANO.kag
最後、[autostop]タグをいじります。
これもこれまでと同じようなことをしています。
「メッセージ表示中でなく、かつボイス再生中でない」場合に「オートモード終了」したときは、そのまま次のメッセージに進めます。
「メッセージ表示中またはボイス再生中」の場合に「オートモード終了」したときは、さらに「オートモードから通常モードに変更したタイミングか」を判定し、偽であれば次のメッセージに進みます。
通常の、クリックでメッセージ進行の処理ですね。
そんなかんじで…影響する範囲が小さい割にいじる箇所が多いですが、ひとつひとつ見ていけば理解できると思います。では~
サポートをしていただけると私がたいへんよろこびます。 ちなみに欲しい物リストはこちら→https://www.amazon.jp/hz/wishlist/ls/2DBRPE55L3SQC?ref_=wl_share