獅子戦争で アルテマDの"たたかう"にST異常を追加効果としてプラスする改造をしてみました。 下記の例では、アルテマDが"たたかう"またはカウンター発動で反撃時に、 石化、吸血、沈黙、混乱、暗闇がそれぞれ25%の確率で発動するようになります。 ("たたかう"自体の追加効果が発動するかどうかを計算して、 発動した場合に上記の計算に移るため、 追加効果が発動しなかった場合には、どのST異常も発動しない。) 下記はBOOT.BINで、0x088a8630がバイナリエディタで開いたときの0x000A4684、 0x088a8688がバイナリエディタで開いたときの0x000A46DCになります。 j $088a8688 # 088a8630:0a22a1a2 ※1へ nop # 088a8634:00000000 元あった命令をつぶす。 lui v0, $092c # 088a8688:3c02092c v0=$092c0000 ※1 lw v0, $a138(v0) # 088a868c:8c42a138 v0=$092ba138 自分のパラメータのアドレスをv0レジスタにロード addiu t2, zero, $009a # 088a8690:240a009a t2=$0000009a アルテマDのジョブNo.をt2レジスタにロード。ここの9aを別のジョブNo.に変えると、別のジョブno.で発動。 lbu t1, $0003(v0) # 088a8694:90490003 自分のジョブNo.のアドレスをt1レジスタにロード nop # 088a8698:00000000 bne t1, t2, $088a9e54 # 088a869c:152a05ed t1とt2が等しくないとき(自分がアルテマDでないとき)※3へ nop # 088a86a0:00000000 lui v0, $092c # 088a86a4:3c02092c v0=$092c0000 addiu t2, zero, $0020 # 088a86a8:240a0020 t2=$00000020 t2レジスタにすべてのST異常追加効果が25%で発動する値(20)をロード nop # 088a86ac:00000000 sb t2, $a189(v0) # 088a86b0:a04aa189 [092ba189] アビリティの追加効果の種別のアドレスにt2レジスタの値をストア addiu t2, zero, $00bc # 088a86b4:240a00bc t2=$000000bc t2レジスタに、追加効果フラグ2に設定すると、石化、吸血、沈黙、混乱、暗闇の追加効果になる値(bc)をストア j $088a9e50 # 088a86b8:0a22a794 ※2へ。なぜこんなことをしているかというとまとまった空きアドレスがみつからなかったので、既存の関数の間をぬって自作を追加しているため。 sb t2, $a18b(v0) # 088a9e50:a04aa18b アビリティの追加効果フラグ2のアドレスにt2レジスタの値をストア。※2 lui v0, $092c # 088a9e54:3c02092c v0=$092c0000 088a8630でつぶした元あった命令※3 lw v0, $a104(v0) # 088a9e58:8c42a104 v0=$092ba104 088a8634でつぶした元あった命令 j $088a8638 # 088a9e5c:0a22a18e 自作にとばす前の命令+2行目の命令へ nop # 088a9e60:00000000