キーコンフィグなど


今回のロボワンに出した分の機体のプログラムをアップしました。
ファイルはこちら



コントローラーのキーコンフィグに関して、自分なりの落ち着きどころが見つかったのでご紹介します。


【起動方法】

ロボ本体スイッチ→Wiiリモコンリンクボタン→LEDでリンク確認→[START]→
 →(※ここでAボタン押しっぱなしで直立モード→再度[START]で解除)
  →ファイティングポーズ→準備OK

※をはさんだ事で、何も考えずただスタートを押した場合には通常起動になり、
意識的にAボタンを押しっぱなしにすることで、直立不動になります。
この機能はレギュレーション判定用の計測時や記念撮影などに便利です。


【セレクトボタン】

・[SELECT]1回押し※で、全サーボ脱力→再度[SELECT]で起き上がり
・[SELECT]長押しで、ただの起き上がり。

※の全サーボ脱力は、絡まり時やロック時、投げられ時などに必要な機能です。
 ロボワンのルールにもこの機能は入れた方がよいと書いてあるので入れておきました。


【スタートボタン】

・今回は1回押しでそのままガッツポーズになっています。
・十字ボタンなどと組み合わせることで、
 発動を急がないモーションを複数組み込むことができます。


【十字キー】

・前後左右がそのまま前進・後退・左右カニ歩き移動になります。
・斜めに入力すると、旋回します。
・前進歩行中からの斜めに追加入力で、
 スラローム歩行を割り当てることができます。


【ABボタン】

Aが右手、Bが左手のパンチに対応しています。
・AB同時押しでダブルパンチ
・十字キーと組み合わせることで、横払いパンチ下段パンチ・キックを発動できます。
・十字キー下とAB同時押しでしゃがみガードを発動します。
 ちなみにしゃがみからキー解放でジャブを発動しますが、いまのところ飾りです。




プログラム内でちょっとだけ注意したことは、
キーが多くなりすぎてコマンドの受付にタイムラグが出すぎないようにすることです。
入力キーの分岐を組み、1回のチェック数を大幅に減らしました。

V121が31以下なら、十字キーしか押されていない、つまり純粋な移動である、
という分岐が可能だったのが、大助かりでした。
(実際のファミコンも同じような分岐を意図して設計されたと思われます。)

また、どのキーを押しても必ず意図に近い行動が発動するよう、
入力ミスになるキーの組み合わせをなくしました。
たとえば、前進しながらパンチボタンを押した場合には、
これまでは入力を受け付けませんでしたが、通常パンチと判断するようにしています。
この処置はカンタンな割にとても重要でファミコンの良作級に操作が小気味よくなりました。




実際のプログラムを解説抜きですがご紹介します。


[F05ngw_Main130223]のメインループから抜粋
----
JUMPIF(V126,=,12,WAKEUP) ;(セレクトボタン)起き上がり
JUMPIF(V126,=,3,WAKEUP) ;(STARTボタン)えいえいおー!
JUMPIF(V121,<,31,QUICKMOVE) ; 十字キーのみなら移動系コマンド
JUMP(ATTACK1) ; 入力が32以上なら、ボタンが押されているのでアタック系コマンド

----

[F09ngw_ATK130223]アタック分岐から抜粋
;┌──< 【KEYCHECK】入力されたキーの判定 >──────────────┐
:KEYCHECK
;
JUMPIF(V121,<,31,EXIT)
JUMPIF(V121,=,98,GUARD_SHAGAMI_P);(↓ABボタン)しゃがみガード
JUMPIF(V121,=,64,F_STRAIGHT_RP);(Aボタン)右ストレート
JUMPIF(V121,<,39,KEY_0_38)
JUMPIF(V121,<,67,KEY_39_66)
JUMPIF(V121,<,75,KEY_67_74)
JUMP(KEY_75_106)
;
:KEY_0_38
JUMPIF(V121,=,34,L_GEDAN_K);(↓Bボタン)左あしばらい
JUMPIF(V121,=,38,L_GEDAN_K);(↓→Bボタン)左あしばらい
JUMP(F_STRAIGHT_LP);(Bボタン・↑Bボタン・→Bボタン・↑→Bボタン)左ストレート
;
:KEY_39_66
JUMPIF(V121,=,40,L_HARAI_P);(←Bボタン)ひだり払い裏拳
JUMPIF(V121,=,41,L_HARAI_P);(↑←Bボタン) ひだり払い裏拳
JUMPIF(V121,=,42,L_GEDAN_K);(↓←Bボタン)左あしばらい
JUMPIF(V121,=,66,R_GEDAN_P) ;(↓Aボタン)右下段パンチ
JUMP(F_STRAIGHT_RP);(Aボタン)(↑Aボタン)右ストレート
;
:KEY_67_74
JUMPIF(V121,=,68,R_HARAI_P);(→Aボタン)みぎ払い裏拳
JUMPIF(V121,=,69,R_HARAI_P);(↑→Aボタン)みぎ払い裏拳
JUMPIF(V121,=,72,F_STRAIGHT_RP);(←Aボタン)右ストレート
JUMPIF(V121,=,73,F_STRAIGHT_RP);(↑←Aボタン)右ストレート
JUMP(R_GEDAN_P) ;(↓→Aボタン・↓←Aボタン)右下段パンチ
;
:KEY_75_106
JUMPIF(V121,=,102,GUARD_SHAGAMI_P) ;(↓→ABボタン)しゃがみガード
JUMPIF(V121,=,106,GUARD_SHAGAMI_P) ;(↓←ABボタン)しゃがみガード
JUMP(F_DOUBLE_P)
;(ABボタン・↑ABボタン・→ABボタン・↑→ABボタン・←ABボタン・↑←ABボタン)ダブルパンチ


0.01秒でも即座に反応してほしいガードやパンチは、分岐とは関係なく最初の判別で処理しています。
ボタンと発動コマンドの関連性はなるべく自分の直感的に合うようにしたので、新たに覚える必要もありませんし、思い通りに発動させることができます。

レトロゲームの「空手道」が反面教師で、理想はやっぱり理想はマリオです。
動かしているだけで楽しい、気持ちいいという、あの感じが目標です。




ということで、キーコンフィグと分岐プログラムは、ファミコン用の格闘ゲームでも作っているような楽しい作業でした。

次回はXEMNESに導入した「状態コミュニケーション」についてです。
スポンサーサイト

テーマ : 自然科学
ジャンル : 学問・文化・芸術

コメントの投稿

非公開コメント

プロフィール

二名川(ニナガワ)

Author:二名川(ニナガワ)
ホビーロボットをレトロゲームが発展したものと捉えて楽しく遊び倒します。
子供が夢を見ている時間帯に稼働します。

宣伝:電子出版しました。
「コンソロイド ガイドブック」
46107_CONSOLOID_GUID_FACE_200.jpg





■作成中の機体
汎用ヒト型決戦遊具 ~RX計画~
RX-7.5 ゼロタンク
RRf-0.6 ゼニィ
RXM-7.9 ゼムネス
RX-7.5R 量産型ゼロタンク
RX-7.5Fp ファミタンク仮設1号
RX-7.7 ゼロキャノン
RX-7.8 ゼログレイ
SMS-0.1 ゼロライナー
以下続く

ブログ内検索
最近の記事
最近のコメント
カテゴリ
月別アーカイブ
リンク