RECT WINDERプレイ動画

これが最終系なのか……!?
 
おめがさんとRemovey.sさんが超絶プレイをやってくれました。

体当たりボス撃破1


゚д゚)ポカーン
本当にやってしまわれた……。
 
ただ、相打ちだとゲームオーバー扱いになってしまうようです。
そうだったのか……。
 

体当たりボス撃破2


゚д゚)・∵. ポワーン
ば、化け物か……。
いや、もう、動きがニュータイプ並みの回避です。
(特に第6形態のところ)
 
今度はシールドがある状態で体当たり。
 
しかし、問題発生。

見れば分かりますが、無限バグです(゚∀゚) 時間が3600を超えてもゲームは終了しません。

なんてこった。
というか、公然とバグを晒すなんてヒドイ〜 。・゚・(*ノД`*)・゚・。
公開処刑プレイです。
 

0点ボス撃破

隣でそれを観察していたRemovey.s君。
体当たり破壊時に点が入っていないことに気づいたらしく、
「これはゼロ点ボス撃破プレイが出来るんじゃね!?」
と狂気乱舞。

「1000点撃破」以上の難易度を持つプレイを実現してしまいました。
 
……感無量です。
今度、何かおごらせてください。
 
 

教訓

教訓めいたこと。
    * デバックは徹底的にする(抜け穴をつぶす。より確実な条件を作るのも手。今回であれば、時間3600で強制的にゲームオーバー/クリア等)
    * 共通の処理は共通にする(バグの温床を減らす)

今回のバグは、

  • ボスがゲームの状態遷移をハンドリングしていた

ということが原因っぽいですね。
 
ボスなどの敵キャラは、シーンにぶら下がっているものであり、
ボスからシーンの状態を変えるのは設計的に問題ありですね。
例えば、シーンが常にボスの状態をチェックして、
ボスの状態が変化したら状態遷移を行う、
という方法を取るべきなのかもしれません。
 
ソースコードを見ると、721行目あたりで、

	g_gamemain.state = g_gamemain.STATE_GAMECLEAR;

というように、グローバルでシーンにアクセスできるようにしていたためです。
 
ただ、敵キャラから、シーンに「通知」するという手法もアリで、
その場合は、

共通の処理は共通にする(バグの温床を減らす)

ということも重要ですね。
 

    * 何らかのプレイングでゲーム結果に差が生まれる場合、それはゲームシステムとして有効な深みをもたらす。(倍率バグは本来の仕様にはないが、結果として高/低スコアプレイにおいて深みをもたらした。これは体当たりのゼロ点も同様。)

それまでに取った行動により、結果に変化を加えることが、
ゲームに波をもたらし、プレイヤーに感情の揺らぎを与えることができる。
 
うーん、これを意識してできるようになると、かなりの確率で面白いゲームが作れそうですね。
 
 
あと、プレイ動画を見てて気づいたこと。

アイテムをうまくキャッチできてないことが結構ありました。
 
なので、アイテムなどのプラスアイテムは当たり判定を大きくした方が良いかな、と思いました。
(逆に敵弾などのマイナスは当たり判定を小さくする)