Home > スポンサー広告 > TempAR - パッドコード3 数値増減コードとして使う

スポンサーサイト

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

コメント: -

Home > スポンサー広告 > TempAR - パッドコード3 数値増減コードとして使う

Home > TempAR Usage > TempAR - パッドコード3 数値増減コードとして使う

TempAR - パッドコード3 数値増減コードとして使う


パッドで↑を押したら数値を1加算したいと思っても
そのままではあっというまに10単位で加算してしまいます。
やり方は何通りもありますが、簡単な方法を紹介します。


_C0 0x20 Reset
_M 0x7A000004 0x000000A0
_M 0xDA000000 0x08801000
_M 0xD4000000 0x00000001
_M 0xD7000000 0x08801000
_M 0xD3000000 0x00000000
_M 0xD0000000 0x00000000
_M 0x78801000 0x00000020
_M 0x08801000 0x00000000
_M 0xD9000000 0x08801010
_M 0xD4000000 0x00000001
_M 0xD6000000 0x08801010
_M 0xD2000000 0x00000000
■コードの1行毎の解説

_M 0x7A000004 0x000000A0
アナログX方向がA0より大きければ実行ステータスtrueにする。

_M 0xDA000000 0x08801000
アドレス0x08801000から値を16bit読み込み。

_M 0xD4000000 0x00000001
読み込んだ値に1を加算。

_M 0xD7000000 0x08801000
アドレス0x08801000に値を16bit書き込み。オフセット+2加算。

_M 0xD3000000 0x00000000
オフセットを0にする。

_M 0xD0000000 0x00000000
実行ステータスを1つ前に戻す。

_M 0x78801000 0x00000020
アドレス0x08801000の値が20より大きければ実行ステータスtrue

_M 0x08801000 0x00000000
アドレス0x08801000をゼロクリア。

_M 0xD9000000 0x08801010
アドレス0x08801010から値を32bit読み込み。

_M 0xD4000000 0x00000001
読み込んだ値に1を加算。

_M 0xD6000000 0x08801010
アドレス0x08801010に値を32bit書き込み。オフセット+4加算。

_M 0xD2000000 0x00000000
ループ。オフセット、レジスタクリア。
■コードのおおまかな流れ

1.
0x08801000 アナログ右を押した際に+1する

2.
0x08801000 +0x20貯まった

3.
0x08801000 0で書き込んでゼロクリアする

4.
0x08801010 本命のアドレスに+1 (つまり1/0x20進行)

以下1-4繰り返し。


本当に書き込みたいアドレスに直接書き込まず
空き領域を用意して、空き領域に数値を加算して
一定の数字まで加算したら、本命のアドレスに+1
するようにするだけです。

加算しすぎて無効な数字にならないように
書き込む範囲を0x7や0x8で制限すれば
より実践向きになるでしょう。


最後に、TH2DTで作ったマップスクロールコードを紹介します。
アナログパッドでマップをスクロールさせることが出来るコードです。
ヒントを横に書くので、コードを作る際の参考にでもしてください。

・Baseコードで空き領域にマップの座標読み込みコード
 を作成します。アドレスはこちらで用意したものに置き換えます。

・ON/OFFコードで、元のコードをジャンプに書き換え/復元します。

・Axisコードでアナログパッド値を検知
 各方向に倒したらその方向に+1
 5が貯まったら、0クリアして、実際の座標に+1
 左方向と下方向は座標-1する。

_C0 @ Base
_M 0x08801B00 0x3C110880 # lui s1, $0880
_M 0x08801B04 0x0A21A2B4 # j $08868ad0
_M 0x08801B08 0x963115B0 # lhu s1, $15b0(s1)
_M 0x08801B10 0x3C050880 # lui a1, $0880
_M 0x08801B14 0x0A21A2AE # j $08868ab8
_M 0x08801B18 0x94A515B2 # lhu a1, $15b2(a1)
_C0 = OFF-Select ON-Start
_M 0x9A000000 0x00000001 # if PAD SELECT
_M 0x08868AB0 0x8FA40088 # lw a0, $0088(sp)
_M 0x08868AB4 0x86A5000E # lh a1, $000e(s5)
_M 0x08868AC8 0x00A42821 # addu a1, a1, a0
_M 0x08868ACC 0x86B1000C # lh s1, $000c(s5)
_M 0xD2000000 0x00000000
_M 0x9A000000 0x00000008 # if PAD START
_M 0x68868ACC 0x00A42821 # IF NOT addu a1, a1, a0
_M 0xD9000000 0x09DBF8EC # 32bit load from 0x09DBF8EC (マップ座標ロード)
_M 0xD6000000 0x088015B0 # 32bit store at 0x088015B0 and add offset +4
_M 0xDC000000 0xFFFFFFFC # add offset -4
_M 0x088015B4 0x00000000 # Xテンポラリ初期化
_M 0x088015B8 0x00000000 # Yテンポラリ初期化
_M 0x08868AB0 0x0A2006C4 # j $08801B10
_M 0x08868AB4 0x8FA40088 # lw a0, $0088(sp)
_M 0x08868AC8 0x0A2006C0 # j $08801B00
_M 0x08868ACC 0x00A42821 # addu a1, a1, a0
_M 0xD2000000 0x00000000
_C0 ! Axis
_M 0x7A000004 0x000000B0 # X-Axis Right > 0xB0
_M 0xDA000000 0x088015B4 # 16bit load from 088015B4
_M 0xD4000000 0x00000001 # add 1 to value
_M 0xD7000000 0x088015B4 # 16bit store at 0x088015B4 and add offset +2
_M 0xDC000000 0xFFFFFFFE # add offset -2
_M 0xD0000000 0x00000000
_M 0x788015B4 0x00000005 # value at 088015B4 > 0x5 (スピード1/5)
_M 0x188015B4 0x00000000 # 16bit store 0 at 088015B4
_M 0x888015B0 0x00000012 # value at 088015B0 < 0x12 (マップX座標右端)
_M 0xDA000000 0x088015B0 # 16bit load from 0x088015B0
_M 0xD4000000 0x00000001 # add 1 to value (マップX座標+1)
_M 0xD7000000 0x088015B0 # 16bit store at 0x088015B0 and add offset +2
_M 0xD2000000 0x00000000
_M 0x8A000004 0x00000050 # X-Axis Left < 0x50
_M 0xDA000000 0x088015B6 # 16bit load from 0x088015B6
_M 0xD4000000 0x00000001 # add 1 to value
_M 0xD7000000 0x088015B6 # 16bit store at 0x088015B6 and add offset +2
_M 0xDC000000 0xFFFFFFFE # add offset -2
_M 0xD0000000 0x00000000
_M 0x788015B6 0x00000005 # value at 088015B6 > 0x5 (スピード1/5)
_M 0x188015B6 0x00000000 # 16bit store 0 at 088015B6
_M 0x788015B0 0x00000000 # value at 088015B0 > 0 (マップX座標左端)
_M 0xDA000000 0x088015B0 # 16bit load from 0x088015B0
_M 0xD4000000 0xFFFFFFFF # add value -1 (マップX座標-1)
_M 0xD7000000 0x088015B0 # 16bit store at 0x088015B0
_M 0xD2000000 0x00000000
_M 0x7A000008 0x000000A0 # Y-Axis > 0xA0
_M 0xDA000000 0x088015B8 # 16bit load from 0x088015B8
_M 0xD4000000 0x00000001 # add 1 to value
_M 0xD7000000 0x088015B8 # 16bit store at 0x088015B8 and add offset +2
_M 0xDC000000 0xFFFFFFFE # add offset -2
_M 0xD0000000 0x00000000
_M 0x788015B8 0x00000005 # value at 0x088015B8 > 0x5 (スピード1/5)
_M 0x188015B8 0x00000000 # 16bit store 0 at 0x088015B8
_M 0x888015B2 0x00000012 # value at 0x088015B2 < 0x12 (マップY座標下端)
_M 0xDA000000 0x088015B2 # 16bit load from 0x088015B2
_M 0xD4000000 0x00000001 # add 1 to value (マップY座標+1)
_M 0xD7000000 0x088015B2 # 16bit store at 0x088015B2
_M 0xD2000000 0x00000000
_M 0x8A000008 0x00000060 # Y-Axis < 0x60
_M 0xDA000000 0x088015BA # 16bit load 0x088015BA
_M 0xD4000000 0x00000001 # add 1 to value
_M 0xD7000000 0x088015BA # 16bit store at 0x088015BA and add offset +2
_M 0xDC000000 0xFFFFFFFE # add offset -2
_M 0xD0000000 0x00000000
_M 0x788015BA 0x00000005 # value at 0x088015BA > 0x5 (スピード1/5)
_M 0x188015BA 0x00000000 # 16bit store 0 at 0x088015BA
_M 0x788015B2 0x00000000 # value at 0x088015B2 > 0 (マップY座標上端)
_M 0xDA000000 0x088015B2 # 16bit load from 0x088015B2
_M 0xD4000000 0xFFFFFFFF # add -1 to value (マップY座標-1)
_M 0xD7000000 0x088015B2 # 16bit store at 0x088015B2
_M 0xD2000000 0x00000000





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

コメント: -

Home > TempAR Usage > TempAR - パッドコード3 数値増減コードとして使う

Return to page top

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