今回は技術的なことなのであんまり面白くない内容なのですが・・・
先月から今日までの進捗です。
⭐️正騎士試験編のアップデートについて
先月末に、安定化のための目処がついたのでテスト後アップデート・・・と書いたと思うのですが、テストに出したところ不具合が見つかりまして(汗
どうやらLive2dなどで負荷をかけた後にロードしようとするとフリーズしちゃったりするみたいで、というか確実にしてしまうという・・・。コンフィグなど(行動画面では設定コマンド)も同様で、こちらは通常画面に戻る際に(やはりロードするので)固まっちゃう現象がありました。
で、これは後から見つかったのですが、バトルなども結構負荷がかかるようです。ロードではたくさんのデータを読み込んだりするんで、やはりおっつかなくなってしまうのではという素人な見解。
データ読み込みが途中で止まっちゃうんですよね。
元々ティラノのゲームエンジン自体が、小規模から中規模のゲームを想定していると開発側の方が言ってらっしゃったのを思い出します。
このゲーム自体が大規模なのかそうでないのかはわからないんですが、ノベルゲームにしてはちょっと重いかもですよね・・・。
;----ここから素人が四苦八苦した話・・・ゲームエンジンの技術的な話も出てきます。進捗には関係ないので興味のない方は飛ばしてください;-----------
Twitterでも呟いてますが、解決方法を模索しました。
結果リロードした後ならば動いてくれることがわかったのですが(多分、私がデバッグで気づかなかったのはこまめにリロードしてテストしちゃってたからかもしれない・・・)、リロードした後にどうやって元の画面に戻ってくるのか、そもそもメニュー画面開いた時にどうやってリロードすんのとか、また問題が出てきまして。
できるだけ正攻法で(エンジンのスクリプトを使って)解決したかったんですけど・・・やはり無理でした。なので、あんまりやりたくなかったけど、エンジン内のjavascriptをいじって、role機能のボタンでメニューボタンを自作、その機能内に現状セーブ機能とフラグを追加するシナリオへジャンプする機能を追加。フラグ追加シナリオでリロードさせて、リロードした時にとおるfirst.ks内に現状画面に戻るタグを入れました。
こうすればロードの時に一度リロードして戻って来れます。
これで解決かというとそうではなく。ロードしている途中に、閉じるで強制終了されたりすると次にゲーム始めた時にフラグがオフされてないので、以前ロードしようとした画面になってしまうわけです。正常に始められない・・・。
じゃあfirst.ksに最初起動した時フラグオフするスクリプトを入れればいい・・・が、そうすると今度はロードするときにフラグオフしちゃう。
それならfirst.ksじゃないシナリオファイルにロードするときだけ飛ばせばいいんじゃない?って思って一番最初のURLであるindex.html内を弄ろうとしたが・・・index.htmlからはティラノ変数にアクセスできなくて最初の時とロードの時とで場合わけができない(困。できそうな感じがするのだけど・・・誰か知ってたら教えてください。
で、考えた挙句結局kag.js内のbackTitle:〜を複製して名前を変更、location.hrefのリンク先をindex.htmlではなくindex_2.htmlに変更。ロードの機能に追加することで、index.htmlではなく独自に作ったurlに飛ばして、さらにfirst.ksではなく違うシナリオに飛ばしロードが可能になりました。
同じやり方でまた違う独自のindexを作ってリロード後に現状のゲーム画面に戻る機能(初期化機能)も作れました。
やったー!これで解決⭐️
とか思ってたら、これ、作ったロード機能を使った後に再読み込みすると元々のindex.htmlではなく使ってた独自のindexに飛んじゃう・・・。そんでfirst.ksにも飛ばない・・・。
いや、再読み込みしないでください!とか言えばいいんじゃね?終わる時は閉じるボタンで・・・とか・・・とプレイヤーさん任せなことを不届きに考えたりしましたが・・・。いやいや、それは開発側としてどうなの?って自問自答したりして・・・。
で、結局色々調べた挙句、locationのurlを置換するメソッド、
history.replaceState( "hoge", "null", "./index.html" ) ;
にたどり着きました。長くかかったなあ・・・。もっと知識があったなら・・・もっと短期間で解決できたかもなのになあと不甲斐なさにもじもじしましたが、とりあえず解決しました!今度こそやたー!!!!!
完全文系の自分ですが、ゲームを作るために頑張ります・・・。
ついでに、ロードする時にmake.ksをとおるのですが、初期化するたびにロード画面が同じでは「?」と思われるかもと、新しいautoload機能を作って新しいタグを生成。make.ksを通らないロード機能を使えるようにしました。
(そんなの簡単じゃん何言ってんの?とか言われそうだけど、make.ksを通らないロード機能はこんなふうに作りました。
autoloadの機能はkag.tag_system.jsにある。
tyrano.plugin.kag.tag.autoload=
{vital:[],pm:{title:""},
start:function(pm){var game_data=$.getStorage(
this.kag.config.projectID+"_tyrano_auto_save",this.kag.config.configSave);
this.kag.menu.loadAutoSave()}};
ここのthis.kag.menu.loadAutoSave()の中身を変更します。
この機能の中身はkag.menu.jsにあるです。
loadAutoSave:
function(){
var data=$.getStorage(this.kag.config.projectID+"_tyrano_auto_save",this.kag.config.configSave);
if(data)data=JSON.parse(data);
else return false;
this.loadGameData($.extend(true,{},data),{"auto_next":"yes"})},
まだです。このthis.loadGameDataがさらに下の方にあるので検索。
loadGameData:function(data,options){
var auto_next="no";
if(typeof options=="undefined")options=
{bgm_over:"false"};
〜長いので割愛。
var insert={name:"call",pm:{storage:"make.ks","auto_next":auto_next},val:""};this.kag.clearTmpVariable();
this.kag.ftag.nextOrderWithIndex(data.current_order_index,data.stat.current_scenario,true,insert,"yes")},
storage:"make.ks"の部分を違うシナリオ名にすればmake.ks以外をとおるようになります。
一番最初のautoloadがタグ名なので、autoloadを変更してそれ以外の二つのメソッドの名前(loadAutoSaveとloadGameData)をそれぞれ変更すればmake.ks以外をとおる独自のロードタグを作ることができます。
まあ・・・改変は自己責任なのでその辺は・・・。
ちなみに、非公式のtyranowikiさんのページにはすっごくお世話になりました・・・涙
私が見つけた方法なぞ大したものじゃないけど、役に立つなら書き込みたいがどうなんだろ・・・?)
;---------------------------------------
できればエンジンの中身は弄りたくなかったんですよ・・・予期せぬ何かあったら困るからさ。
ですが、どうしても初期化の措置を入れなければいけなかったのでエンジンのjavascriptを一部変更して初期化のシステムを作りました。一週間?かかったな・・・。
この初期化の処置ですが、ゲーム内の要所に入れることでメモリを回復させてフリーズを防ぎます。ロードの機能にも追加したのでLive2dなどの後にもロード機能が問題なく動作します。ゲームの流れを阻害せずに入れる場所を決め、現在は動作確認テストに入っています。
本当につまんない作業(爆 なんですが、ここでちゃんとシステムを安定させておかないと後々とてもじゃないがプレイできたもんじゃないぜみたいなのができる可能性があるので・・・安心して開発できるように今が頑張りどきです。カーニバル編に早く着手できるように、次はアプデ詐欺にならないようにしたいです・・・。
ちなみにカーニバル編はというと。長くなったので次の記事にて・・・明日にでも書きます。。