船の移動処理について

けっこう前につくったやつなんですが、せっかくなのでネタとして書いておきます。
ネット上でウディタの船コモンを探すと、けっこうチップ処理とかタイルセット入れ替えとかで海チップを通行可能にしている人が多いみたいですね。
まぁそれでもいいっちゃいいんですが、私としてはチップ処理やタイルセット入れ替えを頻繁に行いたくない(設定が面倒だし、なんとなくスタイリッシュじゃない気がする)ので、船コモンは変数呼び出し値の移動を使ってます。
ウディタでは主人公の座標を取得する変数呼び出し値があって、それをいじることで主人公を移動させることができるという裏ワザチックなものがあります。
具体的な使い方はこんな感じ。
■変数操作: CSelf10[一時変数A] = 9180000 + 0
■変数操作: CSelf11[一時変数B] = 9180001 + 0
■変数操作: V[CSelf10[一時変数A]] = CSelf21[移動先X] + 0
■変数操作: V[CSelf11[一時変数B]] = CSelf22[移動先Y] + 0
9180000が主人公のX座標(標準)、9180001が主人公のY座標(標準)の呼び出しコードです。
これを適当な変数に「データを呼ばない」状態で入れてから「X番の変数呼び出し」を使って呼び出すと、主人公が変数に入力した座標までスィーって感じで移動します。面白いのでぜひやってみてください。
この変数呼び出し値には以下のような特徴があります。
・タイルの通行設定を無視して移動できる
・移動速度も反映される
・ただし方向転換は自動では反映されない
ということで、船コモンを変数呼び出し値を使ってつくる場合には、「移動時の方向キー入力を禁止」したうえで、キー入力を使ってコモンイベントで主人公の移動を自分で管理することになります。
つまり、並列実行イベントを使って、移動時の方向キー入力を禁止し、方向キーのキー入力を受け付け、入力された移動先に海チップがあるかどうか判定し、海チップがあるなら変数呼び出し値を使って主人公を移動させるわけですね。
なんだか七面倒くさそうな話ですが、自分で移動管理する分、細かいところまで設定できるので便利です。飛行系の乗り物まで作る人は少ないかもしれませんが、それもこのイベントをちょっと改造するだけで簡単に実現できそうですね。また、自分もローグの崖のときにはお世話になりましたが、一歩の挙動が命となるローグライクなんかでは必須の技術なんではないかと思います。
オマケ。主人公の方向もこんな感じで変えられます。
■変数操作: CSelf10[一時変数A] = 9180006 + 0
■変数操作: V[CSelf10[一時変数A]] = CSelf25[向き] + 0
オマケのオマケ。
変数呼び出し値にはいろいろ夢があって、裏技的なことがけっこうできるんですが、UDB操作なんかは実用性がある方なんではないかと。
■変数操作: CSelf10[一時変数A] = 1000000000 + 0
■変数操作: V[CSelf10[一時変数A]] = 1 + 0
分かりづらいですが、1000000000~がUDBの呼び出し値で、これに同様にして数値を入力してやることで、ゲーム中にUDBをいじることができたりします。もっとも、セーブ&ロードで初期化されてしまうので、一時的な使用しかできませんが。
ちなみに私は、スフィアンマスターズの他国マスター的なのをつくる際、このUDBの呼び出し値を使って敵データを自動生成したりしていました。
- 関連記事
スポンサーサイト