Home > スポンサー広告 > TempAR - 0xC2 with パッドコード

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメント: -

Home > スポンサー広告 > TempAR - 0xC2 with パッドコード

Home > TempAR Usage > TempAR - 0xC2 with パッドコード

TempAR - 0xC2 with パッドコード


TempAR 1.63 Betaにユーザーコードを走らせることが出来る
0xC2コードタイプが追加されたので早速使ってみた。

CWCheatジョーカー(パッド)コード+0xC2で走らせることが出来たら
カメラ関数にフックしなくてもカメラ座標だけを書き換えるだけで
流用可能な汎用カメラ操作コードが出来るのではないかと期待して
いたが、やっぱりラインタイプ(_L _M _N)を複数同時使うのは無理が
あったようだ。
(注:v1.62から最後の行のラインタイプをコード全体に反映するように
仕様が変更されたらしい。TempAR作者に突っ込まれました。)



コード作成前のイメージとしてはこんな感じ。
_L 0xD0000001 0x10000008 STARTを押下時2行実行
_N 0xC2000000 0x00000008 コード宣言 8byte
_N 0x******** 0x******** 実行部分


PSPAR jokerも試してみる。
_M 0x9A000000 0x00000008 STARTを押下時コード実行しつつ下へ進む。
_N 0xC2000000 0x00000008 コード宣言 8byte
_N 0x******** 0x******** 実行部分
_M 0xD2000000 0x00000000 条件判定ブロック終端


全く動く気配が無い。やっぱりダメか?…
ダメ元でTerminator行(0xD2)の_Mを_Nに変えてみたら動いた。
全部Nにしても動くようだ。そこまで戻す必要は無いのだが。
となるとこの場合における_Mと_Nの違いは、オフセットアドレスだけか。



TempAR 1.62からの変更で、コード最終行のline typeを全体に反映する仕様とは?
_C0 3 line types complex test
_L 0xD0000002 0x10000008 スタートボタンを押下時3行実行
_N 0xC2000000 0x00000008 コード宣言 8byte
_N 0x******** 0x******** 実行部分
_M 0xD2000000 0x00000000 条件判定ブロック終端

このようなコードをTempARはどのように解釈するか。
_L 1行目
_N 2-3行目
_M 4行目

最終行のline typeのみを拾うとのことなので次のように解釈される。

_M 1行目
_M 2-3行目
_M 4行目

エンジンが違ってもcode typeが偶々重なれば別の動作として動く行もあるかもしれないが
たいていの場合全く動かないか、予期しない動作が発生するはず。

結論は、1コードは1種類のline typeで完結する必要があるということ。
CWCheat形式ならCWCheat形式で最後まで_Lを使用。
PSPAR形式ならPSPAR形式で最後まで_Mを使用。
PSPAR-EXTENDED形式ならPSPAR-EXTENDED形式で最後まで_Nを使用。
1コード中に他の形式を混ぜてはいけない。
これはあくまでも1コード内の制約で有り、コード毎に独立しているので
他のコードを別形式にして同時に複数の種類を動かしても問題ない。

0xC2とパッドコードを併用したい場合には、CWCheat形式のジョーカーコードでは無く
PSPAR形式のジョーカーコードを使う必要がある。



PSPAR形式のジョーカーコード等について簡単に触れてみる。


PSPARにおけるジョーカーコード
■Real Addressing

PSPARのアドレスはリアルアドレス。
CWCheatのような仮想アドレスを使う場合は0x08800000を加算
したものを使わなくてはならない。

_L 0x00001000 = _M 0x08801000
■Line Type

PSPARエンジンで動くコードはラインタイプを_Mに指定する。
ラインタイプとはCWCheat形式の場合、先頭の_Lのこと。
0xC2コードはPSPAR拡張エンジンで動くので_Nを指定する。
■Joker Code ★を押したとき

_C0 equall
_M 0x9A000000 0x00000001 パッドが1(セレクトボタン)だったら~以下実行
_M 0x******** 0x******** 命令部分
_M 0xD2000000 0x00000000 終端コード
■Joker Code ★を押してないとき

_C0 Not
_M 0xAA000000 0x00000001 パッドが1(セレクトボタン)でなければ~以下実行
_M 0x******** 0x******** 命令部分
_M 0xD2000000 0x00000000 終端コード
■Fake Address

0x0A000000 ボタン
0x0A000004 X-Axis (アナログスティック横方向)
0x0A000008 Y-Axis (アナログスティック縦方向)

アドレスの前に0x9(equal)か0xA(not equal)を付けてパッド判定させる。
■パッド値

ボタンと数字の組み合わせはCWCheatと同じ。データ長は16bit。

0x00000000 赤字部分にパッドの値が入る

ボタン同時押しは加算すればいい。
CodeMaker for CWCheat】を使うのが簡単。
詳しくはTempAR同梱のReadme.htmlのButton Activatorsを参照。
■Terminator Code

CWCheat形式と違って実行する部分の行数を数える必要が無い分
終端を明示する必要がある。SCSIのターミネータみたいなもん。
Terminator Codeには複数の役割がある。コードの状態をロードする、
ブロックで区切る、ループを指定回数実行させる、オフセットをクリアするなど。

_M 0xD0000000 0x00000000 直前のコードステータスをロード
_M 0xD1000000 0x00000000 ループ
_M 0xD2000000 0x00000000 D0とD1の機能+オフセットクリアなど







関連記事
スポンサーサイト

コメント: -

Home > TempAR Usage > TempAR - 0xC2 with パッドコード

Return to page top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。