Home > TempAR Usage Archive

TempAR Usage Archive

スポンサーサイト

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

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

  • Author : もっきゅもきゅ
  • 2011-09-05 (Mon)
  • TempAR Usage

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


Continue reading

  • Comments (Close): -
  • TrackBack (Close): -

TempAR - パッドコード2 アナログ

  • Author : もっきゅもきゅ
  • 2011-09-05 (Mon)
  • TempAR Usage

TempARではアナログパッドもパッドコードとして使えます。
…と、Readme.htmlに説明が書いてあるのですが、以前は
さっぱり使い方が分かりませんでした。

今回はアナログパッドのパッドコードに関する話ですが
いきなりパッドコードの使い方の話に入る前に
Fake Addressに何が書かれているか、
Fake Addressから値をコピーして別アドレスに値を書き込み、
その値を確認することを通じて、Fake Addressをもう少し
理解してみたいと思います。


Continue reading

  • Comments (Close): -
  • TrackBack (Close): -

TempAR - パッドコード1 デジタル&ビットマスク

  • Author : もっきゅもきゅ
  • 2011-09-05 (Mon)
  • TempAR Usage

TH2DTでマップスクロールコードを作りましたがその際、
アナログパッドのFake Address(TempAR)を利用してみました。

デジタルの十字キーでスクロール方向を決めるようにすると十字キーで
キャラが動いてしまうためアナログパッドを使うのが最良だと判断しました。
コード利用中はキャラ移動が無効になるように別途コードを用意すれば
アナログパッドを使用しなくても可能ですが、その分だけコードが長くなるので
絶対必要というわけで無ければなるべく短く抑えたいのが人情。


Continue reading

  • Comments (Close): -
  • TrackBack (Close): -

TempAR - 0xC1 コードタイプ さんぷる?

  • Author : もっきゅもきゅ
  • 2011-08-28 (Sun)
  • TempAR Usage

まだTH2DTをやってます。

ウィッチというクラスはNukerのはずなのにダメージがいまいちで、
属性魔法で敵の弱点属性を突いても割合でダメージが増えるだけ。
何より詠唱時間が非常に長く、詠唱速度装備を揃える頃には
ゲームが終わってしまいます。

他のクラスと比較しても利点が無く、無属性全体攻撃無詠唱の鳳凰と
FF11よろしく弱体が付属してる忍術が使える「くノ一」だけいれば
いいんじゃね?と思ってしまいます。

「世界樹の迷宮3」の特異点定理スキルを再現してみようかと思う今日この頃。
おおよそ形は出来てますが、弱点をどうするか悩み中。
もともと弱点という属性が無いのでこちらで弱点を設定しなくてはなりません。
弱点が1つなら簡単なのですが、複数弱点だと管理が面倒くさい。
流れとしてはこんな感じ?

01.敵1の属性値ロード。
02.比較して最小値を検出。
03.最小値と同じ値が入っているアドレスをどこかにアレイでストア。
04.アドレスから属性を割り出してどこかにアレイでストア。
05.プレイヤーが使用した魔法と魔法リストを照合し属性を特定する。
06.プレイヤーの魔法属性と敵弱点属性をチェック。
07.弱点属性ならダメージなど操作。
08.敵2へループ。

耐性が均一の敵の場合、全属性が弱点ということに。
もう改造コードというか


本題に移ります。
TempARの0xC1コードタイプを使ってコードを作ってみました。
例のごとくTH2DTなのですが。


Continue reading

  • Comments (Close): -
  • TrackBack (Close): -

TempAR - 0xD0 コードタイプ さんぷる?

  • Author : もっきゅもきゅ
  • 2011-08-19 (Fri)
  • TempAR Usage

0xD0コードのサンプル。
分かりやすいかどうか分からないが。

■サンプル

_S *
_G TempAR Test

_C0 --- 0xD0 * 1 -------
_M 0xD3000000 0x08801000 # オフセットを08801000に設定
_M 0xD5000000 0x11111111 # レジスターに値0x11111111を設定

_M 0xC0000000 0x00000001 # ループ+1回
_M 0x40000000 0x00000001 # オフセット0+現在オフセットのアドレスの値が1より大きい時
_M 0x30000000 0x00000004 # オフセット0+現在オフセットのアドレスの値が4より小さい時

_M 0xDC000000 0x00000004 # 現在オフセットに+4
#(初回は0x08801004 2回目は0880100Cになる)
_M 0xD6000000 0x00000000 # オフセット0+現在オフセットに値を書き込む。
# その後現在オフセット+4
_M 0xDC000000 0xFFFFFFF8 # 現在オフセット-8

_M 0xD0000000 0x00000000 # 実行ステータス1つ前をロード
_M 0xDC000000 0x00000008 # 現在オフセット+8

_M 0xD2000000 0x00000000 # フルターミネータ
# (ループ終端+ループ終了時レジスタ+オフセットクリア)


_C0 --- 0xD0 * 2 -------
_M 0xD3000000 0x08801000 # オフセットを08801000に設定
_M 0xD5000000 0x11111111 # レジスターに値0x11111111を設定

_M 0xC0000000 0x00000001 # ループ+1回
_M 0x40000000 0x00000001 # オフセット0+現在オフセットのアドレスの値が1より大きい時
_M 0x30000000 0x00000004 # オフセット0+現在オフセットのアドレスの値が4より小さい時

_M 0xDC000000 0x00000004 # 現在オフセットに+4
#(初回は0x08801004 2回目は0880100Cになる)
_M 0xD6000000 0x00000000 # オフセット0+現在オフセットに値を書き込む。
# その後現在オフセット+4
_M 0xDC000000 0xFFFFFFF8 # 現在オフセット-8

_M 0xD0000000 0x00000000 # 実行ステータス1つ前をロード
_M 0xD0000000 0x00000000 # 実行ステータス1つ前をロード

_M 0xDC000000 0x00000008 # 現在オフセット+8

_M 0xD2000000 0x00000000 # フルターミネータ
# (ループ終端+ループ終了時レジスタ+オフセットクリア)
■0xD0 * 1の結果
0x08801000と0x08801008の値を見に来るので
ここに手動で数値を入れる。

0x08801000 0x00000000 # if v>1 then true else false → 0なのでfalse
# if v<4 then true else false → 0なのでtrue

0x08801004 0x00000000 # falseなので書き込まない。
0x08801008 0x00000002 # 1つ前のfalseをロード+2なのでtrue。
0x0880100C 0x00000000 # 既にfalseなのでその後がtureでも実行しない。書き込まない



■0xD0 * 2の結果

0x08801000 0x00000000 # if v>1 then true else false → 0なのでfalse
# if v<4 then true else false → 0なのでtrue

0x08801004 0x00000000 # falseなので書き込まない。
0x08801008 0x00000002 # 2つ前のステータスをロード。初期状態なのでtrue。2なのでtrue。
0x0880100C 0x11111111 # trueなので書き込む。


実行ステータスがスタックされていると考え、
0xD0が多段に並んでいるとその数だけ1つ前に戻ると考える。

ループ+条件判定のコードを組んだ場合
途中で1度でも失敗すると、それ以降のループが実行されないが
適切に0xD0を設定すると、意図したとおりにループが回る。



あと分からないコードタイプは0xC1と0xC4かな。


0xC1は0xC2と違い、アドレスに命令を書き込まないといけない。
引数で直接数値をぶち込めるので、lui oriで数値をセットしなくて良い分
コード行数を若干減らせるのが利点かな?
空きアドレスの管理が不要な0xC2の便利さが若干勝るか。

0xC4は一番謎。
使い方は一応分かったとして、使い道がさっぱり分からん。


■tests.dbより

_C0 Call Function With Arguments Codes (0xC1)
_N 0x08802000 0x00857821 # Expected Result:
_N 0x08802004 0x01E67823 # 0x08802000 = 0x00857821
_N 0x08802008 0x03E00008 # 0x08802004 = 0x01E67823
_N 0x0880200C 0xACEF0000 # 0x08802008 = 0x03E00008
_N 0xC1000004 0x08802000 # 0x0880200C = 0xACEF0000
_N 0x55555555 0x22222222 # 0x08802010 = 0x11111111
_N 0x66666666 0x08802010 #


0x08802000 addu t7, a0, a1
0x08802004 subu t7, t7, a2
0x08802008 jr ra
0x0880200C sw t7, $0000(a3)

0xC1000004 4は引数の個数
0x08802000 実行アドレス

0x55555555 a0=0x55555555
0x22222222 a1=0x22222222
0x66666666 a2=0x66666666
0x08801000 a3=0x08802010

0x08802000 t7=0x55555555+0x22222222=0x77777777
0x08802004 t7=0x77777777-0x66666666=0x11111111
0x08802008 jr ra
0x0880200C sw 0x11111111,(0x08802010)






  • Comments (Close): -
  • TrackBack (Close): -

TempAR - 0xD0コード

  • Author : もっきゅもきゅ
  • 2011-08-17 (Wed)
  • TempAR Usage

今まで有効な使い道がいまいち分かってなかったので
コードタイプ「0xD0」を使っていなかったのだが
少しテストしてみたらやっと理解できた。


Type 0xD0
Terminator
D0000000 00000000

Loads the previous execution status.
If none exists, the execution status stays at 'execute codes'.


Loads the previous execution status. の意味を今まで間違えて捉えていた。


■0xD0なし

1 条件式1
_M 0x9A000000 0x00000001 # if Pad = SELECT only

2 条件式2
_M 0x9A000000 0x00000008 # if Pad = START only

3 実行式1
_M 0x08801000 0x00000001 # store 08801000 = 00000001
_M 0xD2000000 0x00000000
■0xD0あり

1 条件式1
_M 0x9A000000 0x00000001 # if Pad = SELECT only

2 条件式2
_M 0x9A000000 0x00000008 # if Pad = START only

_M 0xD0000000 0x00000000 # Loads the previous execution status.

3 実行式1
_M 0x08801000 0x00000001 # store 08801000 = 00000001
_M 0xD2000000 0x00000000


コードは1-2-3の順に処理されるが、処理の際、
実行ステータスのtrue/falseで実行するか無視されるかが決まる。
条件式を満たせばtrueで条件式を満たさなければfalse。
条件式を単純に並べた場合、上から処理して途中で満たさないものがあれば
falseになり、次の行からは処理が実行されず、行だけを進める。

上記の例では、STARTとSELECTが押されていないと実行式1で実行されないが
STARTとSELECTの同時押しではだめで、STARTとSELECTがそれぞれ
単独で押されて、かつ同時押しされていない状態にしないといけない。
つまり実際には不可能。(同時押ししたい場合はマスクを使う)

0xD0なしの場合は、条件式2でfalseになっているので実行式1は当然書き込まない。
0xD0ありの場合は、条件式2の1つ前の条件式1のステータスをロードするので
SELECTさえ押されれば、実行式1で書き込みが達成される。

ここまではコードの説明通りなので使い始めてすぐに理解できていた。

では次のような式になっていた場合はどうだろうか。

条件式1
条件式2
条件式3

パッド分岐1
実行式1

0xD0

パッド分岐2
実行式2

0xD0

パッド分岐3
実行式3

0xD2


条件式1-2-3を全て満たしている状態でパッド分岐させたい場合には
分岐の直前に0xD0を挟めば分岐2が目的通りに動くところまでは理解できる。

分岐3は0xD0が「1つ前の実行ステータスをロード」ということから考えると
パッド分岐1の時のステータスをロードしているように思えるが実が違う。
条件式3のステータスをロードしているようだ。

「1つ前の実行ステータス」とある通り式では無く、どうやら実行ステータススタック
みたいなものを想像すれば良いみたいだ。


条件式1
条件式2
条件式3

パッド分岐1

0xD0 分岐1のステータスをリムーブし、1つ前(条件式3)の実行ステータスをロード
パッド分岐2

0xD0 分岐2のステータスをリムーブし、1つ前(条件式3)の実行ステータスをロード
パッド分岐3
0xD2


リムーブ(除去、MTGでよく出てくる単語)という表現が適当かは分からないが、
そう捉えると分かりやすい。
違う言い方をすると、0xD0がORで、使わない場合がAND。
0xD0を使えば、並列で条件式が組めるのでコード短縮に役立つ。

…自分みたいな無駄に長い変態コードを作る人にとっては\( ̄∇ ̄|||)/



  • Comments (Close): -
  • TrackBack (Close): -

TempAR - CWC/PSPAR形式短縮コード(シリアル)

  • Author : もっきゅもきゅ
  • 2011-06-05 (Sun)
  • TempAR Usage

『PSPAR 短縮コード』で検索してきている方がいるみたいなので
短縮コードについて書いてみます。

まず、『短縮コード』というのは何でしょうか。
他にも『圧縮コード』『シリアルコード』『シリアル化』とも呼ばれるようですね。
英語だと『Multi-Address Write』と呼ばれるようです。
英語の方が端的で動作が想像しやすい名前ですね。
いわゆる『通常書き込み』を『複数のアドレス』にまとめて処理したいときに使います。
フラグをまとめてONにする場合や、全アイテム所持等でよく使われます。

アドレスずらしの部分が最初はちょっと分かりにくいので
実際の動作結果を見て覚えるのが手っ取り早いと思います。
コードサンプルとその結果の違いを見て覚えていきましょう。

サンプルコードは実際に動かすことが可能です。
[Decoder]タブで、アドレス0x00001000を表示させ動きを確認してください。

基本を理解出来れば値増分の部分も理解出来ると思いますので
増分についての説明は省略します。


Continue reading

  • Comments (Close): -
  • TrackBack (Close): -

TempAR - CWC/PSPAR形式ポインターコード1

  • Author : もっきゅもきゅ
  • 2011-06-02 (Thu)
  • TempAR Usage
05/28 初稿
06/02 CWC形式のサンプルと早見表を画像で追加。


CWC形式のポインターコードはぱっと見で分かりにくいですよね。
ポインターコードが必要なゲームばっかりでもないので触れる機会そのものが
少なく不慣れというのも一因でしょう。

(これを書き始めたのは多重ポインターのあるゲームを久しぶりに見たからで
書き方をまるっきり忘れてたのが発端ですw)

CWC形式の場合、種類とは言っても一部のフラグが変わるだけなのですが。
シングルポインターでも(8/16/32)*(正/逆)で6種類もあります。

PSPAR形式なら1種類だけ覚えればOKです。(PMEtanも同様)
多重を表現するのも繰り返すだけなので簡単です。

欠点として少しコードが長くなることが挙げられますが
自分用にさっとコードを作りたいときはPSPAR形式だと
見た目も分かりやすく、メンテナンスしやすいのでおすすめです。

実アドレス表記というハードルがありますが、使っているうちに慣れますし
PSPLINKで解析する際は実アドレスしか使えないので何かと都合がいいのです。

他人に公開したいのであればその時にCWC形式に変換すればいいので
試してみてはどうでしょうか。

とはいってもポインターコード生成ツールを使う人が大半だと
思うのであまり出番は無いかも。orz





Continue reading

  • Comments (Close): -
  • TrackBack (Close): -

TempAR - 色定義ファイル

  • Author : もっきゅもきゅ
  • 2011-05-25 (Wed)
  • TempAR Usage

TempAR1.63betaの少し前のバージョンアップで画面配色変更用
定義ファイルが2つ更新されました。
その定義ファイルを含めた適用時の画面サンプルを掲載してみました。

デフォルトから変えたことが無いという方は画像を参考に別の色を
試してみてはどうでしょうか~。



[PRX]タブから『Load color file』を選び、←→で数字を変更して×ボタンを押す。
気に入った色があったら適用した状態で『Save Setting』を押し、設定を保存する。



Continue reading

  • Comments (Close): -
  • TrackBack (Close): -

TempAR - 0xC2 でカメラ操作コード

  • Author : もっきゅもきゅ
  • 2011-05-21 (Sat)
  • TempAR Usage

TempAR 1.63に搭載された0xC2コードタイプを使用して
実際にカメラ操作コードを作ってみる。

ワークで操作するだけなので可動範囲が設定されていれば
その範囲内でしか動かすことは出来ない。

制限解除は別の話。


Continue reading

  • Comments (Close): -
  • TrackBack (Close): -

TempAR - 0xC2 with パッドコード

  • Author : もっきゅもきゅ
  • 2011-05-21 (Sat)
  • TempAR Usage

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形式のジョーカーコードを使う必要がある。



Continue reading

  • Comments (Close): -
  • TrackBack (Close): -

TempAR - tempar_autooff.prxの使い方

  • Author : もっきゅもきゅ
  • 2011-05-16 (Mon)
  • TempAR Usage

『tempar_autooff.prx 使い方』での検索アクセスがあるようなので書いておく。

TempAR 1.61で新規実装されたtempar_autooff.prxの使い方について。
(TempAR 1.63 Beta 20110516 ver で本体に統合されました。→ TempAR 1.63 Beta)


3つのprxの機能的使い分け

◆tempar.prx      → 通常版
◆tempar_autooff.prx  → 通常版-いくつか機能削除+コード復元機能
◇tempar_lite.prx   → POPS用

tempar.prxとtempar_autooff.prxは同時に使えません(排他利用)。
同時にONにした場合はgame.txtの上にあるものが優先されます。

tempar_autooff.prxはtempar_lite.prxをベースに幾つかの機能が削除されています
とは言っても、一般の人には関係無い機能なのでコード使用には支障ありません。
関係があるのはスクリーンショット撮影機能くらい?
ファイル名の通り、コード復元機能を擁しています。

復元機能

×でコードをOFFにするだけで、そのコードが書き換える前の数値に自動的に復元します。
復元するタイミングは即時ですが、コードに条件分岐が含まれる場合は条件分岐が影響します。

使い道として、プログラムコードを復元したい場合などが想定されます。
プログラムが同じアドレスに同じ内容のプログラムを複数回ロードする
ことは普通無いのでプログラムコードを元に戻したい場合はゲームを
リセットするしか方法がありませんでした。(若しくは復元用コードを用意するか。)
tempar_autooff.prxを使えばリセットの必要がありません。

注意点としては、復元タイミングとゲームのプログラムの判定の仕方により
ゲームが進まない現象などが発生することがあります。

例) 
1.敵(もしくは自分)のHPを0にするコードを有効にする
2.敵のHPが0になる
3.コードを無効にする。敵の体力が元に戻る。
4.死亡判定で永久ループ。
5.ループ中にHP0にして正常復帰可能な場合もある。




  • Comments (Close): -
  • TrackBack (Close): -

TempAR - PSPAR形式 0xCF コードタイプ

  • Author : もっきゅもきゅ
  • 2011-05-05 (Thu)
  • TempAR Usage


フォルダー化して、畳んだ状態。()内の数のアイテムを収納している。


『TempAR コード まとめるやり方』でサーチしてアクセスしている方が
いるようなので書いてみました。

TempARで使えるPAPARコード形式で、0xCFというコードタイプがあります。
書き込みや比較や条件判定といったメモリに関与するような効果は無く、
コードをフォルダー化する働きのみが有り、コードのON/OFFの利便性に貢献します。

不要であれば、何も考えずに0xCF行を削除するだけです
削除することで不都合が生じることはありません。

フォルダー化するとすっきりして使いやすくなると思いますので
試してみてはいかがでしょうか。


Continue reading

  • Comments (Close): -
  • TrackBack (Close): -

TempARたん

  • Author : もっきゅもきゅ
  • 2011-03-22 (Tue)
  • TempAR Usage

TempARの使い方前編・後編とPSPlinkコマンド表をとりあえず書き終えました。
TempARがとても使いやすく気に入ったので布教活動みたいなつもりで書きました。
TempARの使用者が増えると嬉しいな。

記事の反省としては…
初めて触る人や英語が苦手の人にもなるべく分かりやすいように画像を多めに配置しました。
画像が多すぎて記事が長く伸びているせいで、ある程度慣れている人には長ったらしく
冗長であるとは自覚しています。シンプルなのはwikiに任せたっ。

後編はサーチのサンプルに悩みました。
PSPLinkは初心者向きではありませんが、前項と連続した内容を扱うことで
ステップアップ出来るように配慮したつもりです。
でもデバッガを触ったことが無い人にはちょっと厳しいかな…
WindowsマシンがあるならCheatEngineのデバッガのように機能が絞られているもので
チュートリアル(英語)を行い、基礎を習得しておくと理解が楽になるので触ってみてください、
としか言えないですね。
(スペシャルねこまんまのサンプル=チュートリアルでもいいですね)

サーチ例はあれで良かったのかな。
・所持金…固定値でサーチ出来るデータの代表として。最初の入り口ですね。
・フラグ…数値が見えないが固定値サーチ可能な場合があることを書きたかった。
・斬れ味…数値が見えないデータで変動サーチの出番ですね。
・体力 …ポインターアドレスの探し方ですね。昔はデバッガで遡ってベースアドレスを
     探して、とやっていましたが今はツールで一発…便利だわー
・無敵化…解析不要でサーチで可能な範囲の無敵の例。

他に考えていたのは、モンハンの攻撃力。
表示されている数字をサーチしても見つかるのは表示用のアドレスであり
内部は違う数字で管理されているので解析が前提ですし、
左シフトで○○n倍とかゲーム内時間操作とか高速化まで踏み込むと
既にTempARと全く関係が無くなっているわけで
そもそもTempARの使い方であってゲーム解析講座をするつもりはありませんしね。

まあ、書き始めた当初の予想より内容を濃くすることが出来たのでおおむね満足しています。


  • Comments (Close): -
  • TrackBack (Close): -

Home > TempAR Usage Archive

Return to page top

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