Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; . . · .
- ; . · · O
- ; · . · · . ·
- ;
- ; Wavy-Ice hack for Metroid
- ; -------- ---- --- -------
- ; by snarfblam
- ; (at gmail.com)
- ;
- ; Allows combining of wave beam and ice beam.
- ; Also increases strength of ice, wavy-ice, and
- ; bombs.
- ;
- ; WARNING: THIS CODE IS NOT COMPATIBLE WITH
- ; AND UNEXPANDED ROM!
- ; WARNING: THIS CODE IS NOT COMPATIBLE WITH
- ; EDITROID 3.0. If you want to use
- ; wavy-ice with a super-expanded
- ; ROM, wait until Editroid 3.0 comes
- ; out. I'll provide a compatible
- ; wavy-ice hack.
- ;
- ; Things I Felt Like Saying
- ; ------ - ---- ---- ------
- ; - This code is designed to be assembled with
- ; snarfblASM. If you want to use another assembler,
- ; feel free to break the code up into several files,
- ; assemble them separately, and insert them
- ; individually.
- ; - This code is designed to work with an expanded
- ; metroid ROM. If you want to use it with an un-
- ; expanded ROM you need to:
- ; - Move the NEW code to a different location where
- ; there is free memory
- ; - Change all .PATCH directives to use bank 07
- ; instead of 0F.
- ;===========================================
- ; Allow weapon combining
- ; ----- ------ ---------
- ; NOPs out the code that removes one beam
- ; when the play aquires another.
- ;===========================================
- .PATCH 0F:DBD2
- NOP ; LDA $6878
- NOP
- NOP
- NOP ; AND #$3F
- NOP
- NOP ; STA $6878
- NOP
- NOP
- ;===========================================
- ; New Behavior
- ; --- --------
- ; Calls the appropriate routine to update
- ; beam projectiles.
- ;===========================================
- ; Hijack
- ; ------
- .PATCH 0F:D5C5
- JMP $C6B9
- ; New code
- ; --- ----
- ; Updates ice with wave behavior if the player has ice+wave, otherwise
- ; updates with normal ice behavior
- .PATCH 0F:C6B9
- LDA $6878 ; Check equipment
- AND #$40 ; Has wave?
- BEQ NoWave
- JMP $D52C ; Yes: UpdateWaveBullet
- ;(normally UpdateWaveBullet isn't called when you have ice, even if you do have wave)
- NoWave:
- JMP $D4EB ; No: UpdateBullet
- ;===========================================
- ; New Damage
- ; --- ------
- ; Specifies damage amount for wave+ice. Also
- ; increases damage dealt by bombs and
- ; vanilla ice. Heh.
- ;===========================================
- ; Hijack
- ; ------
- .PATCH 0F:F5EE
- JMP $C6C6
- ; New Code
- ; --- ----
- .PATCH 0F:C6C6
- ; Y: Weapon type
- ; 1 = Normal
- ; 2 = Wave
- ; 3 = Ice or Wavy-ice
- ; A = Bomb
- ; B = Missile (I think)
- ; X: Enemy index
- ; 40B,X: enemy health
- LDY $040E,X ; Get projectile that hit enemy
- LDA $6878 ; Get current equipment
- CPY #$03 ; If Ice...
- BNE NotIce
- Ice:
- AND #$C0 ; Does the player have wave and ice beams?
- BNE Damage4 ; If so, 4 damage
- BEQ Damage2 ; Else, 2 damage
- NotIce:
- ; Includes vanilla-beam, bomb, wave, and missile
- CPY #$0A ; Bomb = 4 Damage
- BEQ Damage4
- CPY #$02 ; Wave = 2 Damage
- BEQ Damage2
- BIT $0A ; Not-a-boss = 1 Damage
- BVC Damage1
- IsABoss:
- CPY #$0B ; Vanilla-beam = 1 damage
- BNE Damage1 ; (missile will fall thru and do 4 damage)
- Damage4:
- DEC $040B,X
- BEQ exitRoutine
- Damage3:
- DEC $040B,X
- BEQ exitRoutine
- Damage2:
- DEC $040B,X
- BEQ exitRoutine
- Damage1:
- DEC $040B,X
- exitRoutine:
- ; Return to F60F (this is the code that checks if enemies has
- ; 0 HP and if so, kills him)
- JMP $F60F
- ; Original code
- ; -------- ----
- ; Included for comparison
- ; cpy #$02 ; Was enemy hit by wave?
- ; beq +
- ; bit $0A ; ?? (Might be a check for boss)
- ; bvc ++ ; If not, do 1 damage
- ; ldy $040E,x
- ; cpy #$0B ; Was enemy hit by missile?
- ; bne ++ ; If not, do 1 damage
- ; dec EnHitPoints,x ; Do 4 damage
- ; beq +++
- ; dec EnHitPoints,x
- ; beq +++
- ;* dec EnHitPoints,x ; Do 2 damage
- ; beq ++
- ;* dec EnHitPoints,x ; Do 1 damage
Add Comment
Please, Sign In to add comment