見出し画像

巨大娘防衛SLGが進捗96%くらいに(ここで反省)

えー、youtubeに投稿してたら規約違反で1週間投稿できなくなっちゃったんで、ひとまずニコニコに投稿しておきますと。
謹慎明けになったらまたあちらにも投稿したい所存ですが。
ニコニコの皆さん、お見知りおきを、なんて。

12月の1日くらいから大体作り始めて来た、巨大娘退治ゲーもそろそろ本当に作業の底が見えて来たかなという感じなんですが、
まあ分からん、残り15%って所から一ヶ月掛かってるからな……
これ、本来は12月から始めて1月の1日くらいには完成させたいな、毎月で1本出す、みたいな予定だったんですよ。
それがまぁ今年2021年は毎月1本ゲームを出すのだけども、
ひとまず初めの1本は2ヶ月くらいは掛かっても仕方ないかな、つって1月一杯は許容しようとかなって。
で、いま3月ですからね……

で、なんでこうなったかをきちんと反省しないといけない、いけないんですが、
それをやりがちなのが大概「作品が完成した後」なんですよね。
私もそうするのが相応しいだろうと思って、前のエロゲ……ありすの乳頭エロトラップダンジョンを出した後に、
プログラムをリファクタリングついでにさぁ改修しに掛かるぞって、これで数ヶ月掛かって、
しかもやってられねぇとポシャったんですが、
本当に反省やらが捗るのって、実は作品を出した後じゃなくて、
もうその影響を受けて後悔真っ最中の、まさに発売時期が伸び伸びになってやっと追い込みになった末期、
まさに今だと思うんですよ。
だからyoutubeのアップロード禁止になってるにも関わらず、こうして今、今だ、なんつって音声を録ってる訳ですけども。

それで今回なんでこんなに時間が掛かったかと言うと、仕方無い面もあるんですよ。
やっぱ同人エロゲとして発売するものだから、コンテンツ的に一月は無理だわ。
無理だわなんだけど、早めていく事は可能だと思って、
例えばいま一番反省しているのは、画面遷移の方法ですね。

今回、巨大娘によって都市がむちゃくちゃに壊されるぞという事で、
まず街グラの実装ですね、
ここをええい、いいやろ、つってあんまり調べずに強引に自力実装したのもあって、
でそこはそれで済んで、どうだ、自分なりにやってもそこそこちゃんと出来るもんだろうなんつって、
それは良いんですが、
大体そうした時の困りごとってのは後から出て来るんですよね。

巨大娘と戦う戦闘場面から、倒してHに持ち込む場面、あるいはOPの会話場面。
これどうすんの、どう遷移すんのって話で。

同時にプログラムの本道的にはきっちり機能ごとにファイルを分けて適時読み込むべきなんですが、
もうそもそも軽い内容だから、思いつきで書いていったら良いじゃねえかとやっていて。
Javaとかの規約でも言うじゃん、なんだっけ、1クラス800行までにしたら切り分けろとかって。
じゃあ逆を言ったら”1ファイル”800行までだったら分ける必要無いだろう、みたいな。

これは功罪、良い面と悪い面があると思って、
これは実際、本当に初めの書き出しは凄く上手くいった。
もう初めの1週間で40~50%は進んだんじゃねえか、って思うほどで。
この数値から毎月1本出せるなあ、とか踏んでいたのですが。

まあどっこいゲームの……まぁ大体の物事の進捗というのは、後に行くほど加速度的に
難しく、進捗率が上がらなくなるという事で。二次関数的にって事ですかね。

今になってちょっと切り分けたりしてるんですが、うーん……まぁ適時リファクタリングしながら進め、
そうしたら(後で使い回す用事も無いのに)凝りすぎてその分が手間って事も無くなるから、
って意味ではこれでも正解なのかな……

ともかく、そんな風にして思いつきでガシガシプログラムを1ファイルに書き込んでいくって流れで、
まずちょっと巨大娘との戦闘を作りましたよと。
そしてHシーンですよと、ここで同じ1ファイルに書き込み続けたくは無かったんですね。
そしたら画面遷移じゃんと。
あぁ、Electronっていう、言わばデスクトップ起動のブラウザ環境でJavaScript書いてゲーム作ってるんですが、
画面遷移させてまったく別のページ扱いでやったら、処理切り分けられるじゃん。
画面遷移って事は少しは引き継ぐデータもあるだろうけど、それはURLのGET方式とか、
いくらでもあんだろ、引き渡す方法は……と。

ただこれが単純に情報を持ってページを移って、って訳にいかないのに途中で気付く。
なぜならこの巨大娘によって壊れた街並みですよ。
自力で実装したせいもあるんですが、15レイヤーくらいに分かれていて、実はこれ。
全部で数十MBくらいになってますし、しかも壊れ方もランダムって訳で。
どう引き渡せば良かろうな、というのが一つの争点になった。

でそこでまた独自実装を閃く訳ですよ。
ええっと必要な画面は、戦闘、H、会話だと。
だったら始めにアプリケーションを開いた時に3つもう画面作れば良いじゃんって。
さきほどブラウザ環境って言いましたが、要は別ウィンドー扱いで3つ作っちゃうんですね。
で、初めは会話ですから、会話ウィンドーを表示して、残り2つは非表示にする。
会話終わって戦闘へ行くなら、会話ウィンドー非表示にして戦闘ウィンドーを表示と。
これの何が良いかって、ウィンドーは見えないだけで別に閉じてないですから、
ウィンドーごとに別にデータを持っておける、消える事が無いんですね。
だから遷移ぽく見えるけど、実は遷移もしてなくて、あっちにあった物をこっちに寄せて来て、
手前にあったものをちょっとあっちにどける、くらいの話で。

するとそもそも遷移してませんから、戦闘で壊れた街並も保存され続けると。
やったじゃん。

……所がこれが、今になって困っていますねえ……
まず始めに3つのウィンドーを読んでメイン以外は非表示にって事ですが、
これつまり、初めの起動時に最低限必要な物はバックグラウンドで読み込む処理と、
そしてゲームをいざ表示した、プレイヤー的には”初めて”現れた時に
読み込む処理ってのがあるんですね。
あと例えば非表示の時はゲーム進行を止めないといけない、
当たり前ですね、プレイヤー的には見えてないウィンドーで、いつの間にか会話とか戦闘終わってたら訳分かんないですから。

こんな実装を考えた段階で、少しその辺りも気にしてたんですが、
これがお終い頃になって結構ゴチャゴチャして来ましたねえ……

バックグラウンドでの読み込みとかも、特に今回、街並が15レイヤー数十MBって事ですから、
必要な場面もあるかと思うんですが、でもこれ”必要なら”出来ると良いねって話で、
あんま必要ないページごとに備え付きなのはどうあっても混乱します。
そこの実装はウィンドーの表示/非表示とか離れた所に、一つ、根太い仕組みとして用意したかったですね……
例えば自分もよく調べてないんですが、service workerみたいな技術が考えられるかと思います……

OPでの会話を見終わってから戦闘へ進むか、OP飛ばして戦闘へ進むか、って選択肢があるんですが、
これがこのバックグラウンドとか初期化の関係で、なんか幾つも分岐しちゃってたりして。
初期化がですよ。数パターンあるっていう。
これ今回はセーブとか無い、比較的小規模だから何とかなってますが、
次回以降は絶対課題だよなあって。

で、終わり頃になって困ったってのはそういう、コード的に良き所が見付かりにくくなるって所じゃなく、
今まさに不安な事でもあるんですが、
ゲームの進行上、プレイによっては割とすぐH→戦闘だったり、戦闘→Hだったりで、
すぐさま移行を繰り返す時があるんですが、
この切り替えの時に……微妙に、挙動がおかしいのですよね。

なんか切り替えに時間が掛かったり。非表示なってる物が表示されるだけなんだから重いってこたぁ無いと思うんですが、
どうなってるのかな。でバグの原因になりそうだからここは詳しく調べないと、って事で数日くらい掛かりそうだっていうね。
下手したらごく稀に初期化がされない、すっぽ抜けるような事が。

だから独自実装でいけるじゃん! って経験は凄く楽しい、”俺が”やったったぜ、という物があるものですが、
広く安定性を求めた時には曲者ではあるよなぁと。
ただそこの安定処理を求めたら結局、Unityとかの標準のコンポーネントやったら良いよねって事で、
それをするつもりはあんま無いんですが。
バランス見極めつつ、ノウハウ築きつつ、でもやっぱ自分の考えた処理でやって行きたい、って事ですね…… 行けるんか?

実を言うと、canvasとそれを描画するライブラリ、今だとPixi.jsとかが定番でしょうが、
そういうのを使っていなくて、DOMを生成してるっていう、原理的には20年以上前のブラウザゲームでも出来るぞ、っていう
もので作っていて、やっぱそこでも迷いが生じる訳ですが。
ただうーん、これもありすの乳頭エロトラップダンジョンを一回作って、あれもDOMだったんですが、
それをリファクタリングする時にcanvasにしようかなとか考えて。
案外これも一長一短かなと思ったんで。
やるなら全部ゲームエンジンが面倒見てくれる上でロジック組んだ方が良いですよね。
だからこれはUnityとまでは行きませんが、RPGツクールMVの改造やら、phaserやらになっていくと思うんですが。
そっちは今のところ良いかなぁと……

まあ明確にマズったなぁというのは画面遷移だったなという事で。

逆にコレ、別にこうでも行けるだろと踏んで、今のところ成功してるのはパラメーターですかね。
ゲームエンジンだとパラメーターも完全にまぁデータとして持つんでしょうが、
自分はDOMを直に生成するんで、だったらHTMLにdata-XXXみたいに書いておけば良いじゃんって。
戦車とかを生産して出撃さすなら、戦車を形どるHTMLに、
攻撃力や移動力とかを、data-power、data-move、更に生産コストはdata-costとかで書いておくんですね。
で生産時には、そこからコピーしてHTMLに埋め込む、と。
案外これはJavaScriptのプロトタイプオブジェクト指向ってのに沿ってるんじゃないだろうかと。

でゲーム形式にもよるんでしょうが、今回ここはバッドノウハウかに見せ掛け、
明朗で、開発終盤になるまで手が掛からなかったので、
これは案外良いなあと。
これは次回も続けようかなあと思いましたね……
まぁ分からん、もっともっと規模が大きいSLGやら、オブジェクトが出まくるSTGとかだと
悪い面の方が目立ちそうだけど。


でまぁ今回一番の痛手となった? 画面遷移、次回はどうするってのをまだ全然決めてないんですが、一画面に全部の処理詰め込むのも、それはそれで問題が出そうなんだよな。
まぁこうして、どうですかね、毎月出すハズが初めの一本から3ヶ月以上掛かってる自分ですが、
一本出すごとにノウハウを何かしら築いて、1週間ずつでも完成を早めていけたら。
4本だしたら大体1ヶ月完成が早くなるって事ですから。
5本目は2ヶ月で完成できてるかも知れない……

そんな甘くも無いかもですが、そうなれたら良いよなあと。そういう事でした。


この記事が気に入ったらサポートをしてみませんか?