mugen日記

CATEGORY PAGE

続 triggerで直死

  • CATEGORYmugen記述
  • PUBLISHED ON2018/ 06/ 19/ 22:00
  • COMMENT0
http://samsara01.blog.fc2.com/blog-entry-22004.html
大体言いたいことはオキ氏が言ってるけど、私の方でも説明しとくとvar(60)やfvar(40)の発展型ですね
アレって()内で指定した数値をチェックする処理が間違ってるのが原因なんですけど、そもそもチェック処理自体を消せばvar(100)やらvar(-100)やらを指定できるようになる

なので
[state ]
type=null
trigger1=var(-7):=0
とすると自分のaliveに0が書き込まれる

欠点としては、自分のvar(0)を基準にしか見れないことだけど、上手く引数に渡す値を調整してやれば一応任意のアドレスも見れる
もっと言うと0x407E8Eをmov [ebx],ediに置き換えれば引数に渡した値をそのままアドレスと見なせる
そこまでやると普通の用途には使いづらいけどね

続きで実現方法について雑に解説

<追記>
任意アドレス見るならdrab氏が言ってる奴の方がいいね
http://drabs.blog40.fc2.com/blog-entry-1670.html

triggerで直死

  • CATEGORYmugen記述
  • PUBLISHED ON2018/ 06/ 17/ 11:09
  • COMMENT0
http://drabs.blog40.fc2.com/blog-entry-1667.html
http://melon-eat-pierrot.seesaa.net/article/460033522.html
そこまで考えが至らなかったけど、そういや可能ですねこれ

http://drabs.blog40.fc2.com/blog-entry-1456.html
で、前デバッガでこの辺りのコード書き換えて遊んでたのを思い出した

20180617013646.png
ってことでtriggerで直死ができました
もう全部これでいいや


<追記>
var:=
0x407E81:TEST EBX,EBX
0x407E83:JL SHORT 00407EA0
0x407E85:CMP EBX,3C
0x407E88:JG SHORT 00407EA0
0x407E8A:MOV EDX,DWORD PTR SS:[ESP+4C]
0x407E8E:MOV DWORD PTR DS:[EBX*4+EDX+0E40],EDI

favr:=
0x407F86:EST EBX,EBX
0x407F88:JL SHORT 00407FA9
0x407F8A:CMP EBX,28
0x407F8D:JG SHORT 00407FA9
0x407F8F:FLD DWORD PTR SS:[ESP+10]
0x407F93:MOV EAX,DWORD PTR SS:[ESP+4C]
0x407F97:FSTP DWORD PTR DS:[EBX*4+EAX+0F30]

var
0x47B7DF:TEST EAX,EAX
0x47B7E1:JL SHORT 0047B7F8
0x47B7E3:CMP EAX,3B
0x47B7E6:JG SHORT 0047B7F8
0x47B7E8:MOV EDX,DWORD PTR DS:[EAX*4+ESI+0E40]

fvar
0x47B842:TEST EDX,EDX
0x47B844:JL SHORT 0047B85B
0x47B846:CMP EDX,27
0x47B849:JG SHORT 0047B85B
0x47B84B:FLD DWORD PTR DS:[EDX*4+ESI+0F30]

ここ弄っとけば単純な参照、代入は変数で可能っぽい

DBOAメモ

  • CATEGORYmugen記述
  • PUBLISHED ON2018/ 06/ 16/ 13:43
  • COMMENT3
いい加減覚えるかーってことで改めて調べてたら理解した
参考になりそうな記事が見つからなかったんで実行手順をメモっとく
ついでに意味もなく解析手順も書いとく

続 DLL

  • CATEGORYmugen記述
  • PUBLISHED ON2018/ 05/ 13/ 02:01
  • COMMENT0
前少し触って放置してたDLLを暇つぶしに弄ってた
大体どうすればいいかは理解したからメモっとく

[[[0x4B5B4C]+0xCD0]+0x40C]:defが存在するフォルダのパス(1p)
[[[0x4B5B4C]+0xCD0]+0x123C]:defが存在するフォルダのパス(2p)

調べてないから入ってるパスがdefのパスなのかは知らんけど、少なくともパスが入ってることは確か
ひとまず実行対象のdllのパスはコイツを基準にすればよさそうだね
LoadLibraryの呼び方はdrab氏がブログで書いてる通り、dllパス格納位置の先頭アドレスをpushしてcall [0x49F12C]するだけ

強制ステ返し

  • CATEGORYmugen記述
  • PUBLISHED ON2018/ 04/ 10/ 00:00
  • COMMENT0
stateno弄れば次の行動時に自動でステ移動されるのは知ってたけど、相手のステート読んでる最中だと相手のステート間を移動するっていうchangestateの挙動取るよね
それだと困る場合もあるんで強制的にselfstateする方法を調べてた

0x46e98a周辺で必要そうなコード
mov dword ptr ds:[edi+0xbec],edx
mov dword ptr ds:[edi+0xbf0],-1
mov eax,dword ptr ds:[edi]
add eax,0x3b4
mov dword ptr ds:[edi+0x964],eax
mov dword ptr ds:[edi+0x13c0],edx
mov ecx,dword ptr ds:[edi]
mov edx,dword ptr ds:[edi+0x13bc]
mov eax,dword ptr ds:[ecx+0x3cc]
mov dword ptr ds:[edx],eax

0x440ba9周辺で必要そうなコード
mov eax,dword ptr ds:[esi+0xbf4]
mov dword ptr ds:[esi+0xbf4],edi
mov dword ptr ds:[esi+0xbf8],eax
mov dword ptr ds:[esi+0xdfc],0

まとめるとこう
[アドレス+0xbec]:0
[アドレス+0xbf0]:-1
[アドレス+0x13c0]:0
[アドレス+0x964]:[アドレス]+0x3b4
[[アドレス+0x13bc]]:[[アドレス]+0x3cc]
[アドレス+0xbf4]:返す先のステート番号
[アドレス+0xbf8]:現在のステート番号
[アドレス+0xdfc]:0

上記のアドレスを汎用コードで弄ってみて問題なくステート返せることは確認できた
0x440ba9周辺のはstatenoとtimeだから必要ないんなら弄らんでもOKかな
どっか弄り忘れててステート返した後にバグるかもしれんけど、簡単に動かした限り問題なさそう

ってことで前から考えてた「相手ヘルパーに極力干渉しない混線」を本格的に作ろうかなぁと
あんま神キャラ作るの好きじゃないんで、どこまでモチベ維持できるかの勝負になりそうだが

<追記>
盛大にコピーミスってて色々抜けてたのを修正

続 消去召喚の回避

  • CATEGORYmugen記述
  • PUBLISHED ON2017/ 10/ 25/ 22:44
  • COMMENT0
http://sinomugen.blog.fc2.com/blog-entry-103.html
完全に記事書くの忘れてたけど残像アドレスもリセットされるっぽいね
まあよく考えたら強制タゲで任意領域のタゲ取れるから強制destroyいらんわな

以下、リセット部分のコード抜粋
mov eax,dword ptr ss:[ebp+1394]
mov dword ptr ds:[eax+18],0
mov dword ptr ds:[eax+8],0
mov dword ptr ss:[ebp+1394],0
mov dword ptr ss:[ebp+13b4],0
mov dword ptr ss:[ebp+13ac],0

消去召喚の回避

  • CATEGORYmugen記述
  • PUBLISHED ON2017/ 08/ 25/ 00:22
  • COMMENT0
息抜きも兼ねて調べてた
具体的には0x471051の辺り
雑に眺めたけど+0x13ACと+0x13B4が初期化されるのが原因なんかな
他のところも初期化されるっぽいけど少なくともdestroyself実行後にヘルパーかexplod出すと落ちるのは回避できた

ってことで混線設置の強化できそうね
今まではヘルパーもexplodも出さないヘルパーから設置せざるを得なかったんだが本体からでも強制destroyできるわけだし
ヘルパーの占領を回避しつつ開幕混線が可能になったんで中々の調査結果だわ

現在elemの判定のアドレス

  • CATEGORYmugen記述
  • PUBLISHED ON2017/ 08/ 02/ 22:15
  • COMMENT0
[[[アドレス+0x13BC]+0x10]+0x28]:攻撃判定
[[[アドレス+0x13BC]+0x10]+0x2C]:被弾判定
Clsn付け消ししたら数値入ってたり0だったりするから多分あってる
anim検索の速度上げられるね

ってことでコードまとめも再更新
var(0)&1で攻撃判定、var(0)&2で被弾判定の有無を調べられるように変更

現在elemの被弾判定

  • CATEGORYmugen記述
  • PUBLISHED ON2017/ 07/ 29/ 13:14
  • COMMENT0
[[[[[アドレス+0x13BC]+0x10]+0x2C]+0x8]+0x4~0x13]
多分ここでよさそう
Clsn2[1]がある場合は0x14~0x17を飛ばして0x18以降にあるっぽいね

具体的にはこう


で、実験に使ったairがこれ


調べた場所は0x004350DD~0x0043522Aの辺り
ようやく放置してたアマ貫を搭載できそうですなぁ

<追記>
clsn2自体がない場合[[[アドレス+0x13BC]+0x10]+0x2C]が0みたい
その辺考慮しとかないとダメだね

<追記2>
汎用コードまとめ更新
指定プレイヤーの被弾判定を調べてくれるのを作った

自身のアドレス取得

  • CATEGORYmugen記述
  • PUBLISHED ON2017/ 04/ 13/ 00:11
  • COMMENT0
ってことで息抜きに
ebxに自分のアドレス入ってね?ってことで、そいつをtimeにぶち込んだだけ
とりあえず1~5pで動作確認取ったけど、ちゃんと自分の領域書き換えられてるし別にいいでしょ
…ただまあ、そもそもこれだけでいいならとっくの昔にdrab氏がやってるよねって気がするんで、多分なんか問題ありそう

mov [ebx+DFC],ebx
add esp,14
pop esi
add esp,400
mov dword ptr [esp],4713f3
retn

<追記>
無垢のコード覗いたらebx利用しとるやん
つーことはこの方法でも大丈夫そう

捏造式AI起動

  • CATEGORYmugen記述
  • PUBLISHED ON2016/ 12/ 08/ 19:52
  • COMMENT0
アザゼリオンに搭載したんですが、多分これが一番早いと思います
割と真面目な話、行動開始直後からAI起動できるんで最速なんじゃね?

アドレス取得

  • CATEGORYmugen記述
  • PUBLISHED ON2016/ 12/ 03/ 10:56
  • COMMENT0
ウチのコード式アドレス取得をコピペしてもいいんすよ…
L霊夢の改変なんだけど、やってることは大体こんな感じ
全プレイヤーのtimeとhitpausetimeにアドレス書き込んでるだけですね
で、タッグ用に埋め込むコード調整したり事後処理したりで終わりと
別にtimeやらhitpausetimeやらは弄っても問題ないでしょって思ってるけどどうなんだろ