絶賛ゲーム製作作業中です。とはいってもずっとバトルを作っているのみ。 とりあえず、トリエル戦だけ一通り作ってしまえばザコ戦(言い方が悪い)とかパピルス戦も それを元にして作れば何とかなるんじゃないかと思っています。

トリエル戦では途中から「みのがす」の選択肢の中が「にがす」と「にげる」のうち「にげる」が消えます。 じゃあ戦闘の進行度によってそういう分岐を作らないといけない。

「にがす」を繰り返しているとトリエルさんのセリフが変わっていく。ある一定のところまで来ると BGMが消えて、トリエルさんの攻撃がなくなる。そこは分岐を作って敵のターンを飛ばさないといけない。

なんていう風に分岐を作りまくっていたら見事なスパゲッティの出来上がり。 条件分岐とラベル(プログラムの決めた地点まで飛ぶこと)があちこちに設置されており、 プログラム内をビュンビュン飛び回るコードとなっています。ぼくはゲームを作っているのかスパゲッティを作っているのか…。

ただ、自分で書いたコードだから一応自分では読めるし処理も追えます。 だからこれでいいかなあと思っていたんだが…。

ゲームオーバー処理はバトルシステムを作る作業の最初の方で作っており、 HPが0以下になったら自分のソウルがバリッと割れて散乱、GAMEOVERと表示されてセリフが流れて、セーブした地点まで戻される。

この処理を、トリエルさんを倒したときの処理に使えるよなと思ってソウルの位置を変えてトリエルさんのソウルを作って、 GAMEOVERという表示をさせないとかBGMを流さないとか、そういうのをちょこっと変えました。


こんな画面。この後バリーンとソウルが割れて画面がバトル前のフィールドに戻る、という感じになっています。

だが自分は非常にものぐさ野郎なので、GAMEOVERの画面を作るときに他の処理が平行して行われていても(バトル中なのでバトルの処理は絶賛続行中)、 どうせ最後にセーブした地点に戻る処理を入れる、ロードをされるから動いてる処理は全部中断されるから個々の処理を止める処理をちゃんと書かずに ロードされるまでHPが0になったら「待つ」という処理しか書いていなかったのです。

待つ、ウェイトをかける、そうやって待っている間にロードされるから実質そこで処理は終わったようなもの。 だがトリエルさんを倒したときは本当にちゃんとそこでバトルが終わった処理を書いていかないといけないのである! というか普通は自分が死んだときもそうするだろ!!

その処理をちゃんと書いていなかったせいで、トリエルさんを倒したときの画面になるとなぜか自分のソウルがフェードアウトしていくという 現象が起こってしまい、だけどそれがどこの処理のせいでそうなるのか全く分からず途方にくれていました。

ソウルを消す処理を、あちこちで削除してみたけど…それでも、消えてしまう。なんでや?

そこで、テストプレイ中に「F8」を押すとどのピクチャが表示されているか、そのピクチャ番号やどのSEが再生されているかのファイル名などが 見られるモードに切り替わるので、そこで今どのイベントのどの行が実行されているかが表示されていることに気づきました。知らなかったの!?

というわけで、トリエルさんを倒してソウルが割れてフィールド画面に戻るまでの処理をF8キーを押しながら それらの表示を見つつ、その様子を録画してリアルタイムで参照できるようにガンバって原因を究明しました。


んでまあ、さっきバトル終了処理はちゃんと作ってなかったとか言ったんだけど中途半端にだけは作ってあり、 その処理にちゃんと飛んでいて、バトル終了したならソウルの表示を消しますという処理までちゃんと行われてしまっていたのでいた。

だけどトリエルさんのソウルが消えるときはまだ表示されていなければいけなかったので、 トリエルさんを倒していたらまた「待つ」処理を入れるということでさらに分岐が増えたのであった。

スパゲッティ、大盛りで!!

2019年7月22日
◆目次に戻る◆






inserted by FC2 system