帽子世界のマップは、パノラマを使用した一枚絵方式を採用しています。
しかし当たり判定やジャンプ処理は横スクロールアクション系となっていて、処理的に一枚絵方式とあまり相性が良くありません。
横スクロールアクション系の挙動にするなら、チップ方式にしたほうが良いからです。簡単に例えると、スーパーマリオのステージは一枚の絵で作るより、ブロックを並べて作ったほうが良い、みたいな感じでしょうか。
だったら、どうして相性の悪いもの同士を組み合わせてるの?って話ですが。
シームレス戦闘にしようとしてたせいですね。
シームレス戦闘は豊富な戦闘シチュエーションを盛り込める利点があります。
扉を開けようとすると上から金網がガシャーンと落ちてきて、後ろから巨大ロボットがドシーンドシーンと歩いてくる、みたいな戦闘前演出なんかもシームレスだったら簡単にできます。
では実際にマップでどのような処理をしているのか見てみましょう。
断罪の遺跡の判定処理は、エディタだとこんな感じになってます。
上キーでジャンプ、下キーでしゃがむ為、上下移動できない。要するにコントロールを制限するだけで横スクロールアクション挙動に見せかけているだけなのです。
マップエディタ下段にイベントが4つありますけど、これが高低差と場所移動のイベントになります。
まず高低差イベントはこんな感じになっていて。
イベントの名前が「ground_level_minus」となっていると通常イベントの挙動から外れ、条件スイッチ1の番号×4ドット分だけ地面が下になるよう処理されます。この場合だとスイッチNo100なので、地面は下400ピクセルということになります。まぁ穴ですね。
条件スイッチ2は有効範囲を示していて、図だとスイッチNo17なので設置した場所から右17マスがその穴の範囲ということになります。
場所移動イベントは、落下の場合は通常とは違う処理にしています。
普通の場所移動ならデフォのイベント処理でも問題ありませんが、落下となると場所移動の際にジャンプ中フラグやどの高さから落下しているか、などの情報を送らないといけないからです。
イベントの名前が「pit」となっていると通常イベントの挙動から外れ以下略。
有効範囲を17マスにせず3イベントに分けたのは、落ちた先の座標を3パターンに分けるためですね。要するに画面左端に落ちたら、移動先も画面左端になるように…って感じです。
大雑把ですが、穴処理はこんな感じです。
では、細かな当たり判定はどうなっているんでしょう。
ラヴィのホームはこんな感じになってます。
地面にある木の幹に高低差イベントを設置しています。
イベント内容は先ほどの穴とだいたい同じです。
高さ25ピクセル以下は歩いて通れるようにスクリプトで制御していて、それ以上は障害物となりジャンプで飛び越える必要が出てきます。
とまあ、こんな感じです。
要するに当たり判定は全てイベントで処理してたってことですね。
通常のイベント処理からは外れているので、高低差情報を読み取るとイベントは削除されてマップ負荷を抑えます。
マップ全体が坂道になってるエリアは、いちいちイベントを一個一個置くのは面倒なので、一括してスクリプトで傾斜を計算するようにしています。墓場町1丁目とかですね。
これだけなら別にそこまで労力でもなかったんですけど、ホーミングする仲間の挙動がえらく面倒だった記憶が。飛び越えられるかどうかの計算とか。
1/2の拍手お返事です。
■ショッタっ娘に変装するイベントもあるで~!あんま役に立ってないけど。
■ベル日記書いていいかみんなに相談してみますわ。
■ゼルダはまず時系列がカオスですもんね…あたしゃネコ目リンクはまったく別物と思ってましたもん。まさかあれも同じ時系列だったなんて…
昨年は帽子世界本当に楽しかったです(某所に投票をば)
久々に見たら帽子修正参加出来なかったので気長にお待ちしています
あとベルが男の娘に見えたのは末期でしょうかね…?(主に胸的な意味で)