フラッピー ( Flappy ) :ゲーム動作/ HTML5


FireFox では激重い
 

対応ブラウザ / Google Chrome のみ確認

HTML5 版ではエクスポータのバグがあるため動作が不安定、アプリがフリーズする、一部エフェクトが使えないなど制限があります。


ここで公開している HTML5 版はエクスポータのデバッグ用途としてビルドされているため、ゲーム動作に致命的バグがあることを承知でビルドし公開しています。判明したエクスポータのバグについては CT に逐一報告しています。

[最新版]

フラッピー(クローン):マップエディタ付属、マップ保存機能無し、動作確認用

ゲーム実装に関するメモ

フラッピーをまったく知らなかったが結構複雑なルールがあります。当初は倉庫番みたいなシンプルなものだと思っていました。

動画を見ながらクローンとして真似して作っていたけど、オリジナルの動作仕様が細かい部分まで分からなかったため、途中から独自解釈・独自実装として作られてます。というわけで厳密なゲームクローンではありません。また一部動作は意図的にオリジナルとは異なるように作られています。

例えばキノコは投げて壁などに当たると、オリジナルでは重力の影響で下に落ちる(らしい)。オリジナルでは下に落ちたキノコはまた拾える、キノコは複数投げることができるなど。この辺りの実装は全部省きました。キノコに関しては独自ゲーム実装を施して有ります。

一度投げたキノコは投げてどこかに当たったら消滅、ボタンを押している間だけキノコは操作できます。ボタンを離したらその地点でキノコは破裂しやはり消滅します。複数キノコを同時に投げることも出来ません。投げたキノコを操作できるけど、操作は応答性能をわざと鈍くして有ります。そしてキノコはプレイヤー動作を確実に一旦停止してからじゃないと投げることができない「ストッピング」ルールを採用、キノコはボールを上から落としたら破壊される、ボール運搬中でもキノコとボールが接触したらキノコは破壊される…などなど。基本的にキノコは消滅しやすいアイテムとして定義を変えて有ります。操作できる飛び道具な時点で強力な武器であり、ゲーム攻略の難易度にかなり影響を与えるアイテムなのでキノコは基本的に消えやすいアイテムとします。

キノコ以外、他にもオリジナルと異なる部分は幾つかあって、そういう部分は基本的に自分で考えて作られた独自実装です。ゲームルールにも確実に影響があると思われ、パズルとしてマップを作る場合独自のマップ検証が必要となります。青いボールを置く青い床は複数設置することができたり、オリジナルのフラッピーには無いゲーム要素なども備えています。

重力で落ちてくるボールに関してはたぶんオリジナルよりもできることが多いはず。独自の操作テクニックが存在し、キノコに頼らないで攻略したりアクション性がやや高くなることを指向しています。

その他メモ

マップデータに追加要素、古いマップ形式と互換性あり
ゲームモードに関する設定の保存
マップごとに異なったゲームルールを採用させたいので、そのためのセーブデータ拡張を実装
ゲームルールに沿った形での複数ゲームエンド
重力実装に関する変更と各種動作改善、バグ解消、移動に関するセキュリティやや多め
敵やオブジェクト全般とのコリジョン実装
落ちてくるボールも押して軌道を変更できる(たぶん独自仕様)
落ちてくるボールにプレイヤーが激突すると自機をロスト
ボールは上方向には運べない(下左右のみ)
敵は触るとアウトだが、キノコをぶつけて眠らせると触れるし運べる(上にも運搬可能)
取ったキノコは投げることができる
投げたキノコは操作できる
キノコを敵にぶつけると敵は眠りに落ちる
寝ている敵に触っても無害
敵はランダムで行動停止するタイミングがあり、このタイミングで敵を触っても無害
敵が動き出した時に接触しているとプレイヤーは自機をロスト
カニは狭いところが嫌い(という設定を独自に設けた)
カニは狭いところに入り込むとランダムでスーパー化(変身)する
スーパー化したカニは普通のカニの二倍の速度でランダムに動きまわる(かなり速い)
カニは複数居る場合一匹がスーパー化すると他のカニも感染してスーパー化する率が高くなります

GameEngineV3o:動作チェック:キノコ実装だがHTML5では機能せず

キノコが当たった時に効果音が聞こえるからコリジョン判定とイベントは動いているはず。キノコが当たった後、敵が動作を止めない辺りのロジックが一切機能してない。該当するイベントラインを見つけ出すのは少々困難が伴なうか。

Sample_Group:バグ無し

Sample_Group2:バグ無し

Sample_Group3:バグ発見!

Sample_Group4:バグ発見!

トリッキーな記述はバグりやすい…か、オブジェクトを破壊するタイミングとほぼ同時にループを回すとループが無視されている。オブジェクト破壊命令をループの実行後にしたのが04だが、やはりループイベントは無視されている。本来オブジェクトは破壊フラグが立ってもすぐに破壊されず、ゲームループの一番最後に破壊フラグが立ったオブジェクトは一括して破壊される仕様になっているはず。その仕様を使ったイベントを組んでいるためPC版では確実に動作させることができる動作が、HTML5版では動作してない。

ObjectDestroyIssue:バグ無し

しかしさらに単純化したら問題は発生しない。オブジェクトグループを利用しないとダメなのか?

ObjectDestroyIssue2:バグ無し

オブジェクトグループを使ってオブジェクトグループに対してonEachLoopを使ったが別に問題がない。えー

ObjectDestroyIssue3:バグ無し

もうすこし工夫してみたがやはりバグは発生しない。

ObjectDestroyIssue4:バグ無し

???再現性がわからなくなってきた???しかし条件をまとめてみるとどうもコリジョン絡みのようだ。フラグをコンディションにしたイベントだと確実に実行されることは上の4つの例が示している。コリジョンを検出させようとすると無視されるという事は、コリジョン関連になにかある。ってことは既知のコリジョン絡みでバグが起こっている可能性か。

問題なし
http://prester.org/html5/ObjectDestroyIssue5/ObjectDestroyIssue5.html

PCとHTML5で共通しておかしい動作をする(解釈が間違えている?)

ObjectDestroyIssue6:??

イベントは二行まで絞った。オブジェクトグループのコリジョン検出になにかある感じ。しかもHTML5だけではなくCF2.5も同じ動作なのでバグと言うより仕様?一応報告してくる。だいぶ問題に肉薄してきた。というわけで要領を得たのでエクスポータなどのバグを回避しながら改変してもう一度ビルドしてみた。

FlappyCloneGameEngineBeta_v03p:キノコ動作(しかし眠らせてからボールを落とすとたぶんフリーズする)

結局コリジョン関連のバグ治らないと完全には動かない模様。

GameEngineV3L:動作チェック:新しい重力関連の実装を動作チェック

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です