[IPSwitch]書きたいコード

Hack

3.1.0

関数名が参照できるのが3.1.0までなので、以後のバージョンには3.1.0から移植するという手がとられている。

ほとんどメモ代わりみたいな感じですが、なんかうまく弄れたら教えてください。

UpdateLocalDifficulty

; __int64 __fastcall Cmn::Def::Coop::UpdateLocalDifficulty(Cmn::Def::Coop *__hidden this, int, bool) EXPORT _ZN3Cmn3Def4Coop21UpdateLocalDifficultyEib _ZN3Cmn3Def4Coop21UpdateLocalDifficultyEib ; __unwind { CMP W0, #0x63 ; 5: if ( (signed int)result <= 99 ) MOV W8, #5 MOV W9, #0xA ; 6: v2 = 5; ; 8: v2 = 10; CSEL W8, W9, W8, GT ; 9: v3 = v2 + result; MOV W9, #0xC8 ADD W8, W8, W0 ; 10: if ( v3 > 200 ) CMP W8, #0xC8 ; 11: v3 = 200; CSEL W8, W9, W8, GT ; 12: if ( a2 & 1 ) TST W1, #1 ; 13: result = (unsigned int)v3; ; 15: result = (unsigned int)result; CSEL W0, W0, W8, EQ RET ; } // starts at 9FF00 ; End of function Cmn::Def::Coop::UpdateLocalDifficulty(int,bool)

キケン度を更新するコード。

200%以上にも設定できるはずだが、xmlで定義されていないのでクラッシュするか単にキケン度MAXと同じ仕様になる可能性が高い。

setCoopLocalDifficultAndStage

; __int64 __fastcall Cnet::SystemGameAtomicCloneObj::setCoopLocalDifficultAndStage(Cnet::SystemGameAtomicCloneObj *__hidden this, int, int, bool) EXPORT _ZN4Cnet24SystemGameAtomicCloneObj29setCoopLocalDifficultAndStageEiib _ZN4Cnet24SystemGameAtomicCloneObj29setCoopLocalDifficultAndStageEiib var_28= -0x28 var_20= -0x20 var_10= -0x10 var_s0= 0 ; __unwind { SUB SP, SP, #0x40 STP X22, X21, [SP,#0x30+var_20] STP X20, X19, [SP,#0x30+var_10] STP X29, X30, [SP,#0x30+var_s0] ADD X29, SP, #0x30 ; 8: v4 = this; MOV X22, X0 ; 12: v9 = *(_QWORD *)(*(__int64 (**)(void))(**((_QWORD **)this + 14) + 104LL))(); LDR X0, [X22,#0x70] LDR X8, [X0] LDR X8, [X8,#0x68] ; 9: v5 = a4; MOV W19, W3 ; 10: v6 = a3; MOV W20, W2 ; 11: v7 = a2; MOV W21, W1 BLR X8 LDR X8, [X0] STR X8, [SP,#0x30+var_28] ; 13: LOWORD(v9) = v7; AND W8, W19, #1 STRH W21, [SP,#0x30+var_28] ; 14: WORD1(v9) = v6; STRH W20, [SP,#0x30+var_28+2] ; 15: BYTE6(v9) = v5 & 1; STRB W8, [SP,#0x30+var_28+6] ; 16: return (*(__int64 (**)(void))(**((_QWORD **)v4 + 14) + 112LL))(); LDR X0, [X22,#0x70] LDR X8, [X0] LDR X8, [X8,#0x70] ADD X1, SP, #0x30+var_28 BLR X8 LDP X29, X30, [SP,#0x30+var_s0] LDP X20, X19, [SP,#0x30+var_10] LDP X22, X21, [SP,#0x30+var_20] ADD SP, SP, #0x40 RET ; } // starts at 1EC14C ; End of function Cnet::SystemGameAtomicCloneObj::setCoopLocalDifficultAndStage(int,int,bool)

おそらくホストがパケットを送信して他のメンバーにキケン度とステージを指定する関数。

ここを弄れば選択したステージと違うステージを遊ぶことができるかもしれない。

PacketSeqEventCoopSetting

; __int64 __fastcall Cnet::PacketSeqEventCoopSetting::PacketSeqEventCoopSetting(Cnet::PacketSeqEventCoopSetting *__hidden this) EXPORT _ZN4Cnet25PacketSeqEventCoopSettingC2Ev _ZN4Cnet25PacketSeqEventCoopSettingC2Ev var_10= -0x10 var_s0= 0 ; __unwind { STR X19, [SP,#-0x10+var_10]! STP X29, X30, [SP,#0x10+var_s0] ADD X29, SP, #0x10 ; 5: v1 = this; MOV X19, X0 ; 10: memset((char *)this + 20, 0LL, 84LL); MOV W8, #1 MOV W2, #0x54 ADD X0, X19, #0x14 ; 6: *(_BYTE *)this = 1; MOV W1, WZR STRB W8, [X19] ; 7: *((_BYTE *)this + 17) = 0; STRB WZR, [X19,#0x11] ; 8: *(_QWORD *)((char *)this + 9) = 0LL; STUR XZR, [X19,#9] ; 9: *(_QWORD *)((char *)this + 1) = 0LL; STUR XZR, [X19,#1] BL .memset ; 11: result = sead::Random::getU32((sead::Random *)sead::GlobalRandom::sInstance); ADRP X8, #off_41565B0@PAGE LDR X8, [X8,#off_41565B0@PAGEOFF] LDR X0, [X8] ; this BL _ZN4sead6Random6getU32Ev ; sead::Random::getU32(void) ; 12: *((_DWORD *)v1 + 11) = result; STR W0, [X19,#0x2C] LDP X29, X30, [SP,#0x10+var_s0] LDR X19, [SP+0x10+var_10],#0x20 RET ; } // starts at 208C34 ; End of function Cnet::PacketSeqEventCoopSetting::PacketSeqEventCoopSetting(void)

イベント情報をパケットで送信している関数。

setBGM

; __int64 __fastcall Cnet::PacketSeqEventCoopSetting::setBGM(Cnet::PacketSeqEventCoopSetting *__hidden this, int) EXPORT _ZN4Cnet25PacketSeqEventCoopSetting6setBGMEi _ZN4Cnet25PacketSeqEventCoopSetting6setBGMEi ; __unwind { STRH W1, [X0,#4] RET ; } // starts at 208C98 ; End of function Cnet::PacketSeqEventCoopSetting::setBGM(int)

おそらくBGMを変更できる関数。ver3.0.0の段階では一種類しかないので弄れない。

setStage

; __int64 __fastcall Cnet::PacketSeqEventCoopSetting::setStage(Cnet::PacketSeqEventCoopSetting *__hidden this, __int16) EXPORT _ZN4Cnet25PacketSeqEventCoopSetting8setStageEs _ZN4Cnet25PacketSeqEventCoopSetting8setStageEs ; __unwind { STRH W1, [X0,#2] RET ; } // starts at 208C88 ; End of function Cnet::PacketSeqEventCoopSetting::setStage(short)

ステージを設定している場所。

パケットを受け取ってからの動作の気もするので、ここを弄ると一人だけ違うステージに飛ばされるかもしれない。

コメント

タイトルとURLをコピーしました