CV64: Fix DeathLink Nitro explosions hitting you at times they shouldn't #4158
This commit is contained in:
parent
c9e63a836a
commit
7916d1e67c
|
@ -197,6 +197,23 @@ deathlink_nitro_edition = [
|
|||
0xA168FFFD, # SB T0, 0xFFFD (T3)
|
||||
]
|
||||
|
||||
deathlink_nitro_state_checker = [
|
||||
# Checks to see if the player is in an alright state before exploding them. If not, then the Nitro explosion spawn
|
||||
# code will be aborted, and they should eventually explode after getting out of that state.
|
||||
#
|
||||
# Invalid states so far include: interacting/going through a door, being grabbed by a vampire.
|
||||
0x90880009, # LBU T0, 0x0009 (A0)
|
||||
0x24090005, # ADDIU T1, R0, 0x0005
|
||||
0x11090005, # BEQ T0, T1, [forward 0x05]
|
||||
0x24090002, # ADDIU T1, R0, 0x0002
|
||||
0x11090003, # BEQ T0, T1, [forward 0x03]
|
||||
0x00000000, # NOP
|
||||
0x08000660, # J 0x80001980
|
||||
0x00000000, # NOP
|
||||
0x03E00008, # JR RA
|
||||
0xAC400048 # SW R0, 0x0048 (V0)
|
||||
]
|
||||
|
||||
launch_fall_killer = [
|
||||
# Custom code to force the instant fall death if at a high enough falling speed after getting killed by something
|
||||
# that launches you (whether it be the Nitro explosion or a Big Toss hit). The game doesn't normally run the check
|
||||
|
|
|
@ -357,8 +357,12 @@ class CV64PatchExtensions(APPatchExtension):
|
|||
|
||||
# Make received DeathLinks blow you to smithereens instead of kill you normally.
|
||||
if options["death_link"] == DeathLink.option_explosive:
|
||||
rom_data.write_int32(0x27A70, 0x10000008) # B [forward 0x08]
|
||||
rom_data.write_int32s(0xBFC0D0, patches.deathlink_nitro_edition)
|
||||
rom_data.write_int32(0x27A70, 0x10000008) # B [forward 0x08]
|
||||
rom_data.write_int32(0x27AA0, 0x0C0FFA78) # JAL 0x803FE9E0
|
||||
rom_data.write_int32s(0xBFE9E0, patches.deathlink_nitro_state_checker)
|
||||
# NOP the function call to subtract Nitro from the inventory after exploding, just in case.
|
||||
rom_data.write_int32(0x32DBC, 0x00000000)
|
||||
|
||||
# Set the DeathLink ROM flag if it's on at all.
|
||||
if options["death_link"] != DeathLink.option_off:
|
||||
|
|
Loading…
Reference in New Issue