From d9fe0baea60f48531871bc8ef610cba65e24cec5 Mon Sep 17 00:00:00 2001 From: scawful Date: Thu, 25 Jan 2024 19:25:09 -0500 Subject: [PATCH] IceRod housekeeping --- Items/ice_rod.asm | 137 ++++++++++++++++++++++------------------------ 1 file changed, 64 insertions(+), 73 deletions(-) diff --git a/Items/ice_rod.asm b/Items/ice_rod.asm index 7e5f7e9..7a58b93 100644 --- a/Items/ice_rod.asm +++ b/Items/ice_rod.asm @@ -5,93 +5,83 @@ ;=========================================================== +IceRodTileRam = $03EF + +; Ancilla_CheckTileCollision_Targeted_continue +org $088A5D + JSL $0EFBA0 + +org $0EFBA0 ; main code LinkItem_IceRod: { - org $088a5d ; jsl to main code - jsl $0efba0 + ; load native value + STA $03E4, X : TAY + + ; check if you're on overworld + LDA $008C : BNE $01 + RTL + ; disable other flying object icing water (boomerang, sword beam) + LDA $03A3 : CMP #$06 : BEQ $01 + RTL + + ; check if ice shot #1 only is used (disable 2nd shot to ice) + CPX #$04 : BEQ $01 + RTL - org $0efba0 ; main code - STA $03E4,x ; load native value - TAY - LDA $008C ; check if you're on overworld - BNE $01 - RTL - LDA $03A3 ; disable other flying object icing water (boomerang, sword beam) - CMP #$06 - BEQ $01 - RTL - CPX #$04 ; check if ice shot #1 only is used (disable 2nd shot to ice) - BEQ $01 - RTL - LDA $03E8 ; check if ice shot is on water tiles - CMP #$08 - BEQ $08 - LDA $03E8 ; check if ice shot is on native unused, edited blocks - CMP #$03 - BEQ $01 + ; check if ice shot is on water tiles + LDA $03E8 : CMP #$08 : BEQ .on_water_tiles + + ; check if ice shot is on native unused, edited blocks + LDA $03E8 : CMP #$03 : BEQ $01 RTL - LDA $0303 ; double check if really ice shot is used - CMP #$06 - BEQ $01 +.on_water_tiles + ; double check if really ice shot is used + LDA $0303 : CMP #$06 : BEQ $01 RTL - LDA $0304 - CMP #$06 - BEQ $01 + + LDA $0304 : CMP #$06 : BEQ $01 RTL + TXA STA $7ED004 ; store native x value into ram to regain after code - LDA $4212 ; wait for vblank to enable dma transfer - AND #$80 - BEQ $F9 + + ; wait for vblank to enable dma transfer + LDA $4212 : AND #$80 : BEQ $F9 + REP #$30 - LDA $2116 - STA $7ED005 ; store native value to regain later - LDA $00 ; calculation procedure to get correct x,y coordinates for new tile - SEC - SBC $0708 - AND $070A + LDA $2116 : STA $7ED005 ; store native value to regain later + + ; calculation procedure to get correct x,y coordinates for new tile + LDA $00 : SEC : SBC $0708 : AND $070A ASL A ASL A ASL A STA $06 - LDA $02 - SEC - SBC $070C - AND $070E - ORA $06 + LDA $02 : SEC : SBC $070C : AND $070E : ORA $06 TAX - LDA #$00B7 - STA $7E2000,x ; store new 16x16 ice tile into ram (property of tile!) - CLC - STZ $02 ; calculation procedure to get 8x8 vram map address (look of tile) + LDA #$00B7 : STA $7E2000, X ; store new 16x16 ice tile into ram (property of tile!) + CLC : STZ $02 ; calculation procedure to get 8x8 vram map address (look of tile) TXA - AND #$003F - CMP #$0020 - BCC $05 - LDA #$0400 - STA $02 + AND #$003F : CMP #$0020 : BCC $05 + LDA #$0400 : STA $02 TXA - AND #$0FFF - CMP #$0800 - BCC $07 - LDA $02 - ADC #$07FF - STA $02 + AND #$0FFF : CMP #$0800 : BCC $07 + LDA $02 : ADC #$07FF : STA $02 TXA - AND #$001F - ADC $02 - STA $02 + AND #$001F : ADC $02 : STA $02 TXA AND #$0780 LSR A ADC $02 STA $2116 ; store vram address for upper tile part (8x16) to $2116 STA $7ED007 + ; Palette set here LDA #$1D83 ; load new ice tiles STA $7ED000 STA $7ED002 JSR $FD00 ; jsr to dma vram transfer for upper ice tile part + REP #$30 LDA $7ED007 ; regain vram address ADC #$0020 ; add 20 for lower part (8x16) and store to $2116 @@ -103,9 +93,12 @@ LinkItem_IceRod: LDA $7ED004 ; regain native x-value TAX RTL +} - org $0efd00 ; vram dma transfer +org $0EFD00 ; vram dma transfer +VramDmaTransfer: +{ LDA #$007E ; load origin of bytes to transfer (7E/d000) STA $4304 LDA #$D000 @@ -119,27 +112,26 @@ LinkItem_IceRod: STA $4300 STA $420B ; make dma transfer RTS +} - ; bug fix to not swim through tiles but jump onto them - - org $07dc9e - jsl $0efc80 +; bug fix to not swim through tiles but jump onto them +org $07DC9E + JSL $0EFC80 nop - org $0efc80 +org $0EFC80 LDA $0A TSB $0343 TSB $0348 RTL - ; bug fix to stop gliding on shallow water when leaving ice tile - - org $07dd1b - jsl $0efc90 +; bug fix to stop gliding on shallow water when leaving ice tile +org $07DD1B + JSL $0EFC90 nop - org $0efc90 +org $0EFC90 LDA $0A TSB $0359 LDA $0350 @@ -149,12 +141,11 @@ LinkItem_IceRod: RTL - org $0e95dc ; get a 0e written here (first byte) to enable gliding on new tiles +org $0E95DC ; get a 0e written here (first byte) to enable gliding on new tiles ASL $5757 - org $0f85b8 ; get new tile values (83 1d) written 4 times here +org $0F85B8 ; get new tile values (83 1d) written 4 times here STA $1D,s STA $1D,s STA $1D,s STA $1D,s -}