diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 3dc7894..38c2f24 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -114,8 +114,12 @@ function hexto555(h) = ((((h&$FF)/8)<<10)|(((h>>8&$FF)/8)<<5)|(((h>>16&$FF)/8)<< !MULTIWORLD_SPRITEITEM_PLAYER_ID = "$7EC099" !MULTIWORLD_HUD_TIMER = "$7EC09A" !MULTIWORLD_HUD_DELAY = "#120" +!MULTIWORLD_ITEM_ID = "$7EC09B" ; for lua scripts? !Dungeon_ChestData = "$01E96C" +!FLAG_OW_MIXED = $04 +!FLAG_OW_CROSSED = $02 + incsrc hooks.asm incsrc treekid.asm incsrc spriteswap.asm diff --git a/doortables.asm b/doortables.asm index 8ee0dd6..eae1643 100644 --- a/doortables.asm +++ b/doortables.asm @@ -582,6 +582,8 @@ dw $00bc, $00a2, $00a3, $00c2, $001a, $0049, $0014, $008c dw $009f, $0066, $005d, $00a8, $00a9, $00aa, $00b9, $0052 ; HC West Hall, TR Dash Bridge, TR Hub, Pod Arena, GT Petting Zoo, Ice Spike Cross dw $0050, $00c5, $00c6, $0009, $0003, $002a, $007d, $005e +; Sewer Drop, Mire Cross, GT Crystal Circles +dw $0011, $00b2, $003d dw $ffff ; dungeon tables diff --git a/entrances.asm b/entrances.asm index 4abb65d..6ad367b 100644 --- a/entrances.asm +++ b/entrances.asm @@ -216,12 +216,12 @@ RTL AnimatedEntranceFix: ;when an entrance animation tries to start PHA : PHX LDA.l InvertedMode : BEQ + ;If we are in inverted mode - LDA.l OWMode+1 : CMP #$01 : BEQ + ;If we are in Mixed OW shuffle mode - LDA $8A : AND #$40 : BNE + ;and in the light world - PLX : PLA - STZ $04C6 ; skip it. - LDA #$00 - RTL + LDA.l OWMode+1 : AND.b #!FLAG_OW_MIXED : BNE + ;If we are in Mixed OW shuffle mode + LDA $8A : AND #$40 : BNE + ;and in the light world + PLX : PLA + STZ $04C6 ; skip it. + LDA #$00 + RTL + PLX : PLA STA $02E4 ;what we wrote over diff --git a/flute.asm b/flute.asm index ac4bea9..354b1d2 100644 --- a/flute.asm +++ b/flute.asm @@ -61,8 +61,8 @@ FluteBoy: JML.l FluteBoy_Continue ;-------------------------------------------------------------------------------- FreeDuckCheck: - LDA.l OWMode+1 : CMP.b #$01 : BEQ .skipInvertedCheck - LDA.l InvertedMode : BEQ .done + LDA.l OWMode+1 : AND.b #!FLAG_OW_MIXED : BNE .skipInvertedCheck + LDA.l InvertedMode : BEQ .done .skipInvertedCheck LDA $7EF34C : CMP.b #$03 : BEQ .done ; flute is already active diff --git a/hooks.asm b/hooks.asm index 5e5b783..ab19d5d 100755 --- a/hooks.asm +++ b/hooks.asm @@ -2483,7 +2483,7 @@ JSL BirdTravel_LoadTargetAreaMusic BRA + : NOP #14 : + ;-------------------------------------------------------------------------------- org $02B027 ; <- Bank02.asm:7535-7541 -JSL Overworld_DetermineMusicSFX +JSL Overworld_DetermineMusic BRA + : NOP #42 : + ;================================================================================ diff --git a/hudadditions.asm b/hudadditions.asm index eb223e3..b21fa78 100644 --- a/hudadditions.asm +++ b/hudadditions.asm @@ -26,7 +26,7 @@ HudAdditions: ++ LDX $1B : BNE + ; if outdoors - lda.l OWMode : and #$0300 : bne ++ : rts ; Skip if vanilla ow rando + lda.l OWMode : and.w #((!FLAG_OW_CROSSED+!FLAG_OW_MIXED)<<8)+$ff : bne ++ : rts ; Skip if vanilla ow rando ++ lda $7ef36d : and #$00ff : beq ++ lda $7ef3ca : and #$00ff : beq +++ lda #$2d60 : bra .owdisplay diff --git a/invertedmaps.asm b/invertedmaps.asm index 1a89e3f..683b87d 100644 --- a/invertedmaps.asm +++ b/invertedmaps.asm @@ -93,8 +93,8 @@ LDA.l OWTileMapAlt+3 : AND #$0001 : BEQ .notInverted LDA #$0034 : STA $2BE0 .notInverted LDA.l OWTileMapAlt+3 : AND #$0002 : BEQ .return -LDA.l OWMode : AND #$00FF : BEQ .return - LDA $2BE0 : STA $38B4 ;adding convenient WDM portal in OW Shuffle + LDA.l OWMode : AND #$00FF : BEQ .return + LDA $2BE0 : STA $38B4 ;adding convenient WDM portal in OW Shuffle .return RTS } @@ -969,8 +969,8 @@ LDA.l OWTileMapAlt+$43 : AND #$0001 : BEQ .owshuffle LDA #$0212 : STA $2BE0 ; portal .owshuffle LDA.l OWTileMapAlt+$43 : AND #$0002 : BEQ .return -LDA.l OWMode : AND #$00FF : BEQ .return - LDA $2BE0 : STA $38B4 ; adding convenient WDM portal in OW Shuffle + LDA.l OWMode : AND #$00FF : BEQ .return + LDA $2BE0 : STA $38B4 ; adding convenient WDM portal in OW Shuffle .return RTS } diff --git a/msu.asm b/msu.asm index 41ccf74..34fce32 100644 --- a/msu.asm +++ b/msu.asm @@ -76,7 +76,7 @@ ; ; Additional tracks ; -; 60 - Light World OW (after ped pull) +; 60 - Light World OW (after aga kill) ; 61 - Dark World OW (with all crystals) ; ;======================================= @@ -250,7 +250,8 @@ CheckMusicLoadRequest: BRA .check_fallback-3 .lightworld PHA - LDA $7EF300 : AND.b #$40 : BEQ + + ;LDA $7EF300 : AND.b #$40 : BEQ + ; ped pull + LDA $7EF3C5 : CMP.b #03 : BNE + ; aga1 killed PLA LDA.b #60 : BRA .check_fallback-3 + diff --git a/music.asm b/music.asm index e0e71e9..0d8a1dc 100644 --- a/music.asm +++ b/music.asm @@ -16,7 +16,7 @@ PreOverworld_LoadProperties_ChooseMusic: ; if we are in the light world go ahead and set chosen selection ;LDA $7EF3CA : BEQ .checkInverted+4 - + JSL Overworld_DetermineMusicSFX + + JSL Overworld_DetermineMusic .lastCheck LDA $0132 : CMP.b #$F2 : BNE + @@ -57,7 +57,8 @@ Overworld_FinishMirrorWarp: LDA.b #$80 : STA $9B - JSL Overworld_DetermineMusicSFX + JSL Overworld_DetermineAmbientSFX + JSL Overworld_DetermineMusic .done STX $012C @@ -74,14 +75,15 @@ Overworld_FinishMirrorWarp: ;-------------------------------------------------------------------------------- BirdTravel_LoadTargetAreaMusic: - JSL Overworld_DetermineMusicSFX + JSL Overworld_DetermineAmbientSFX + JSL Overworld_DetermineMusic + STZ $04C8 ; Clear peg puzzle count RTL ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- ;X to be set to music track to load -;$012D to be set to any ambient SFX for the area -Overworld_DetermineMusicSFX: +Overworld_DetermineMusic: LDA $7EF3C5 : CMP.b #$02 : !BGE + LDX.b #$03 ; If phase < 2, play the rain music BRA .done @@ -91,7 +93,6 @@ Overworld_DetermineMusicSFX: CMP.b #$47 : BEQ .darkMountain LDX.b #$02 ; hyrule field theme - LDA.b #$05 : STA $012D LDA $7EF3CA : BEQ + LDX.b #$09 ; default dark world theme @@ -113,15 +114,7 @@ Overworld_DetermineMusicSFX: LDX #$0F ; dark woods theme BRA .bunny - ; Misery Mire rain SFX - + CMP.b #$70 : BNE .bunny - LDA $7EF2F0 : AND.b #$20 : BNE .bunny - LDA.b #$01 : CMP $0131 : BEQ + - STA $012D : BRA .bunny - + STZ $012D : BRA .bunny - .darkMountain - LDA.b #$09 : STA $012D ; set storm ambient SFX LDX.b #$0D ; dark mountain theme .bunny @@ -134,6 +127,36 @@ Overworld_DetermineMusicSFX: RTL ;-------------------------------------------------------------------------------- +;-------------------------------------------------------------------------------- +;$012D to be set to any ambient SFX for the area +Overworld_DetermineAmbientSFX: + LDA $7EF3C5 : CMP.b #$02 : !BGE + + BRA .done ; rain state sfx handled elsewhere + + + LDA $8A : CMP.b #$43 : BEQ .darkMountain + CMP.b #$45 : BEQ .darkMountain + CMP.b #$47 : BEQ .darkMountain + + CMP.b #$70 : BEQ .mire + + LDA.b #$05 : BRA .setSfx ; silence + +.mire + LDA $7EF2F0 : AND.b #$20 : BNE .done + LDA.b #$01 : BRA .setSfx ; Misery Mire rain SFX + +.darkMountain + LDA.b #$09 : BRA .setSfx ; set storm ambient SFX + +.setSfx + CMP $0131 : BEQ + + STA $012D + + STZ $012D + +.done + RTL +;-------------------------------------------------------------------------------- + ;-------------------------------------------------------------------------------- ;0 = Is Kakariko Overworld ;1 = Not Kakariko Overworld diff --git a/newhud.asm b/newhud.asm index 9ef3013..9c36f2d 100644 --- a/newhud.asm +++ b/newhud.asm @@ -1,319 +1,309 @@ -NewDrawHud: -SEP #$30 -;================================================================================ -; Draw bomb count -!BOMBCOUNT_DRAW_ADDRESS = "$7EC75A" -!INFINITE_BOMBS = "$7F50C9" -;================================================================================ - - LDA !INFINITE_BOMBS : BNE .infinite_bombs - .finite_bombs - LDA.l SpecialWeapons : CMP #$01 : BNE .normal - LDA.l !BOMB_LEVEL : BEQ .no_bombs - .normal - LDA.l $7EF343 ; bombs - JSR HudHexToDec2Digit ;requires 8 bit registers! - REP #$20 - LDX.b $06 : TXA : ORA.w #$2400 : STA !BOMBCOUNT_DRAW_ADDRESS ; Draw bombs 10 digit - LDX.b $07 : TXA : ORA.w #$2400 : STA !BOMBCOUNT_DRAW_ADDRESS+2 ; Draw bombs 1 digit - BRA + - - .no_bombs - REP #$20 - LDA.w #$207F : STA !BOMBCOUNT_DRAW_ADDRESS - STA !BOMBCOUNT_DRAW_ADDRESS+2 - BRA + - - .infinite_bombs - REP #$20 - LDA.w #$2431 : STA !BOMBCOUNT_DRAW_ADDRESS ; infinity (left half) - INC A : STA !BOMBCOUNT_DRAW_ADDRESS+2 ; infinity (right half) - + - -;================================================================================ -; Draw rupee counter -!RUPEE_DRAW_ADDRESS = "$7EC750" -;================================================================================ - - LDA.l $7EF362 ; Drawing bombs (above) always ends with 16-bit A, so, no need to REP here - JSR HudHexToDec4Digit - LDX.b $04 : TXA : ORA.w #$2400 : STA !RUPEE_DRAW_ADDRESS ; 1000s - LDX.b $05 : TXA : ORA.w #$2400 : STA !RUPEE_DRAW_ADDRESS+2 ; 100s - LDX.b $06 : TXA : ORA.w #$2400 : STA !RUPEE_DRAW_ADDRESS+4 ; 10s - LDX.b $07 : TXA : ORA.w #$2400 : STA !RUPEE_DRAW_ADDRESS+6 ; 1s - -;================================================================================ -; Draw arrow count -!ARROWCOUNT_DRAW_ADDRESS = "$7EC760" -!INFINITE_ARROWS = "$7F50C8" -;================================================================================ - - SEP #$20 - LDA.l ArrowMode : BNE + - LDA !INFINITE_ARROWS : BNE .infinite_arrows - .finite_arrows - LDA.l $7EF377 ; arrows - JSR HudHexToDec2Digit - REP #$20 - LDX.b $06 : TXA : ORA.w #$2400 : STA !ARROWCOUNT_DRAW_ADDRESS ; Draw arrows 10 digit - LDX.b $07 : TXA : ORA.w #$2400 : STA !ARROWCOUNT_DRAW_ADDRESS+2 ; Draw arrows 1 digit - BRA + - - .infinite_arrows - REP #$20 - LDA.w #$2431 : STA !ARROWCOUNT_DRAW_ADDRESS ; infinity (left half) - INC A : STA !ARROWCOUNT_DRAW_ADDRESS+2 ; infinity (right half) - + - -;================================================================================ -; Draw Goal Item Indicator -!GOAL_COUNTER = "$7EF418" -!GOAL_DRAW_ADDRESS = "$7EC72A" -;================================================================================ - - SEP #$20 - LDA.l GoalItemRequirement : BNE + : JMP .done : + ; Star Meter - - LDA.l !GOAL_COUNTER - JSR HudHexToDec3Digit - REP #$20 - - LDA.l GoalItemIcon : STA !GOAL_DRAW_ADDRESS ; draw star icon - - LDX.b $05 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+2 ; draw 100's digit - LDX.b $06 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+4 ; draw 10's digit - LDX.b $07 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+6 ; draw 1's digit - - SEP #$20 - LDA.l GoalItemRequirement : CMP.b #$FF : BEQ .skip - - LDA.l GoalItemRequirement - JSR HudHexToDec3Digit - REP #$20 - LDA.w #$2830 : STA !GOAL_DRAW_ADDRESS+8 ; draw slash - LDX.b $05 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+10 ; draw 100's digit - LDX.b $06 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+12 ; draw 10's digit - LDX.b $07 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+14 ; draw 1's digit - BRA .done - .skip - REP #$20 - LDA.w #$207F ; transparent tile - STA !GOAL_DRAW_ADDRESS+8 - STA !GOAL_DRAW_ADDRESS+10 - STA !GOAL_DRAW_ADDRESS+12 - .done - -;================================================================================ -; Draw Dungeon Compass Counts -;================================================================================ - REP #$20 - LDA.l CompassMode : AND #$00FF : BEQ + ; skip if CompassMode is 0. - JSL.l DrawDungeonCompassCounts ; compasses.asm - + - -;================================================================================ -; Draw key count -!KEYS = "$7EF36F" -!KEY_DIGITS_ADDRESS = "$7EC764" -!KEY_ICON_ADDRESS = "$7EC726" -;================================================================================ - SEP #$20 - LDA.l !KEYS : CMP.b #$FF : BEQ .not_in_dungeon - .in_dungeon - JSR HudHexToDec2Digit : REP #$20 - - ; if 10s digit is 0, draw transparent tile instead of 0 - LDX.b $06 : TXA : CPX.b #$90 : BNE + - LDA.w #$007F - + - ORA.w #$2400 : STA !KEY_DIGITS_ADDRESS - - ; 1s digit - LDX.b $07 : TXA : ORA.w #$2400 : STA !KEY_DIGITS_ADDRESS+2 - BRA .done_keys - - .not_in_dungeon - REP #$20 - - ;in the overworld, draw transparent tiles instead of key count - LDA.w #$247F : STA !KEY_DIGITS_ADDRESS : STA !KEY_DIGITS_ADDRESS+2 - STA !KEY_ICON_ADDRESS - - .done_keys - - - - -;-------------------------------------------------------------------------------- -; Draw pendant/crystal icon -;-------------------------------------------------------------------------------- -!PRIZE_ICON = $7EC742 -!P_ICON = $296C -!C_ICON = $295F - - SEP #$20 - LDA.b $1B : BEQ .noprize - - LDX.w $040C - CPX #$1A : !BGE .noprize - CPX #$04 : !BLT .noprize - CPX #$08 : BEQ .noprize - - LDA $10 : CMP #$12 : BEQ .noprize - - REP #$20 - - LDA.l MapMode - BEQ .drawprize - - LDA.l $7EF368 - AND.l DungeonItemMasks,X - BEQ .noprize - -.drawprize - TXA : LSR : TAX - LDA.l CrystalPendantFlags_2, X - AND.w #$0040 : BNE .is_crystal - - LDA.w #!P_ICON - BRA .doneprize - -.is_crystal - LDA.w #!C_ICON - BRA .doneprize - -.noprize - REP #$20 - LDA.w #$207F - -.doneprize - STA.l !PRIZE_ICON - -;-------------------------------------------------------------------------------- -; Draw Magic Meter -!INFINITE_MAGIC = "$7F50CA" -!DrawMagicMeter_mp_tilemap = "$0DFE0F" -;-------------------------------------------------------------------------------- - LDA $7EF36E : AND #$00FF ; crap we wrote over when placing the hook for OnDrawHud - !ADD #$0007 - AND #$FFF8 - TAX ; end of crap - - LDA !INFINITE_MAGIC : AND.w #$00FF : BNE + : JMP .green : + - SEP #$20 : LDA.b #$80 : STA $7EF36E : REP #$30 ; set magic to max - LDX.w #$0080 ; load full magic meter graphics - LDA $1A : AND.w #$000C : LSR #2 - BEQ .red - CMP.w #0001 : BEQ .yellow - CMP.w #0002 : BNE + : JMP .green : + - .blue - LDA !DrawMagicMeter_mp_tilemap+0, X : AND.w #$EFFF : STA $7EC746 - LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$EFFF : STA $7EC786 - LDA !DrawMagicMeter_mp_tilemap+4, X : AND.w #$EFFF : STA $7EC7C6 - LDA !DrawMagicMeter_mp_tilemap+6, X : AND.w #$EFFF : STA $7EC806 - RTL - .red - LDA !DrawMagicMeter_mp_tilemap+0, X : AND.w #$E7FF : STA $7EC746 - LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$E7FF : STA $7EC786 - LDA !DrawMagicMeter_mp_tilemap+4, X : AND.w #$E7FF : STA $7EC7C6 - LDA !DrawMagicMeter_mp_tilemap+6, X : AND.w #$E7FF : STA $7EC806 - RTL - .yellow - LDA !DrawMagicMeter_mp_tilemap+0, X : AND.w #$EBFF : STA $7EC746 - LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$EBFF : STA $7EC786 - LDA !DrawMagicMeter_mp_tilemap+4, X : AND.w #$EBFF : STA $7EC7C6 - LDA !DrawMagicMeter_mp_tilemap+6, X : AND.w #$EBFF : STA $7EC806 - RTL - .orange - LDA !DrawMagicMeter_mp_tilemap+0, X : AND.w #$E3FF : STA $7EC746 - LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$E3FF : STA $7EC786 - LDA !DrawMagicMeter_mp_tilemap+4, X : AND.w #$E3FF : STA $7EC7C6 - LDA !DrawMagicMeter_mp_tilemap+6, X : AND.w #$E3FF : STA $7EC806 - RTL - .green - LDA !DrawMagicMeter_mp_tilemap+0, X : STA $7EC746 - LDA !DrawMagicMeter_mp_tilemap+2, X : STA $7EC786 - LDA !DrawMagicMeter_mp_tilemap+4, X : STA $7EC7C6 - LDA !DrawMagicMeter_mp_tilemap+6, X : STA $7EC806 -RTL - -;================================================================================ -; 16-bit A, 8-bit X -; in: A(b) - Byte to Convert -; out: $04 - $07 (high - low) -;================================================================================ -HudHexToDec4Digit: - LDY.b #$90 - - - CMP.w #1000 : !BLT + - INY - SBC.w #1000 : BRA - - + - STY $04 : LDY #$90 ; Store 1000s digit & reset Y - - - CMP.w #100 : !BLT + - INY - SBC.w #100 : BRA - - + - STY $05 : LDY #$90 ; Store 100s digit & reset Y - - - CMP.w #10 : !BLT + - INY - SBC.w #10 : BRA - - + - STY $06 : LDY #$90 ; Store 10s digit & reset Y - CMP.w #1 : !BLT + - - - INY - DEC : BNE - - + - STY $07 ; Store 1s digit -RTS - -;================================================================================ -; 8-bit registers -; in: A(b) - Byte to Convert -; out: $05 - $07 (high - low) -;================================================================================ -HudHexToDec3Digit: ; this may be overkill, could have used the 4 digit one... - LDY.b #$90 - - - CMP.b #100 : !BLT + - INY - SBC.b #100 : BRA - - + - STY $05 : LDY.b #$90 ; Store 100s digit and reset Y - - - CMP.b #10 : !BLT + - INY - SBC.b #10 : BRA - - + - STY $06 : LDY #$90 ; Store 10s digit and reset Y - CMP.b #1 : !BLT + - - - INY - DEC : BNE - - + - STY $07 ; Store 1s digit -RTS - -;================================================================================ -; 8-bit registers -; in: A(b) - Byte to Convert -; out: $06 - $07 (high - low) -;================================================================================ -HudHexToDec2Digit: - LDY.b #$90 - - - CMP.b #10 : !BLT + - INY - SBC.b #10 : BRA - - + - STY $06 : LDY #$90 ; Store 10s digit and reset Y - CMP.b #1 : !BLT + - - - INY - DEC : BNE - - + - STY $07 ; Store 1s digit -RTS +NewDrawHud: +SEP #$30 +;================================================================================ +; Draw bomb count +!BOMBCOUNT_DRAW_ADDRESS = "$7EC75A" +!INFINITE_BOMBS = "$7F50C9" +;================================================================================ + + LDA !INFINITE_BOMBS : BNE .infinite_bombs + .finite_bombs + LDA.l $7EF343 ; bombs + JSR HudHexToDec2Digit ;requires 8 bit registers! + REP #$20 + LDX.b $06 : TXA : ORA.w #$2400 : STA !BOMBCOUNT_DRAW_ADDRESS ; Draw bombs 10 digit + LDX.b $07 : TXA : ORA.w #$2400 : STA !BOMBCOUNT_DRAW_ADDRESS+2 ; Draw bombs 1 digit + BRA + + + .infinite_bombs + REP #$20 + LDA.w #$2431 : STA !BOMBCOUNT_DRAW_ADDRESS ; infinity (left half) + INC A : STA !BOMBCOUNT_DRAW_ADDRESS+2 ; infinity (right half) + + + +;================================================================================ +; Draw rupee counter +!RUPEE_DRAW_ADDRESS = "$7EC750" +;================================================================================ + + LDA.l $7EF362 ; Drawing bombs (above) always ends with 16-bit A, so, no need to REP here + JSR HudHexToDec4Digit + LDX.b $04 : TXA : ORA.w #$2400 : STA !RUPEE_DRAW_ADDRESS ; 1000s + LDX.b $05 : TXA : ORA.w #$2400 : STA !RUPEE_DRAW_ADDRESS+2 ; 100s + LDX.b $06 : TXA : ORA.w #$2400 : STA !RUPEE_DRAW_ADDRESS+4 ; 10s + LDX.b $07 : TXA : ORA.w #$2400 : STA !RUPEE_DRAW_ADDRESS+6 ; 1s + +;================================================================================ +; Draw arrow count +!ARROWCOUNT_DRAW_ADDRESS = "$7EC760" +!INFINITE_ARROWS = "$7F50C8" +;================================================================================ + + SEP #$20 + LDA.l ArrowMode : BNE + + LDA !INFINITE_ARROWS : BNE .infinite_arrows + .finite_arrows + LDA.l $7EF377 ; arrows + JSR HudHexToDec2Digit + REP #$20 + LDX.b $06 : TXA : ORA.w #$2400 : STA !ARROWCOUNT_DRAW_ADDRESS ; Draw arrows 10 digit + LDX.b $07 : TXA : ORA.w #$2400 : STA !ARROWCOUNT_DRAW_ADDRESS+2 ; Draw arrows 1 digit + BRA + + + .infinite_arrows + REP #$20 + LDA.w #$2431 : STA !ARROWCOUNT_DRAW_ADDRESS ; infinity (left half) + INC A : STA !ARROWCOUNT_DRAW_ADDRESS+2 ; infinity (right half) + + + +;================================================================================ +; Draw Goal Item Indicator +!GOAL_COUNTER = "$7EF418" +!GOAL_DRAW_ADDRESS = "$7EC72A" +;================================================================================ + + SEP #$20 + LDA.l GoalItemRequirement : BNE + : JMP .done : + ; Star Meter + + LDA.l !GOAL_COUNTER + JSR HudHexToDec3Digit + REP #$20 + + LDA.l GoalItemIcon : STA !GOAL_DRAW_ADDRESS ; draw star icon + + LDX.b $05 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+2 ; draw 100's digit + LDX.b $06 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+4 ; draw 10's digit + LDX.b $07 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+6 ; draw 1's digit + + SEP #$20 + LDA.l GoalItemRequirement : CMP.b #$FF : BEQ .skip + + LDA.l GoalItemRequirement + JSR HudHexToDec3Digit + REP #$20 + LDA.w #$2830 : STA !GOAL_DRAW_ADDRESS+8 ; draw slash + LDX.b $05 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+10 ; draw 100's digit + LDX.b $06 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+12 ; draw 10's digit + LDX.b $07 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+14 ; draw 1's digit + BRA .done + .skip + REP #$20 + LDA.w #$207F ; transparent tile + STA !GOAL_DRAW_ADDRESS+8 + STA !GOAL_DRAW_ADDRESS+10 + STA !GOAL_DRAW_ADDRESS+12 + .done + +;================================================================================ +; Draw Dungeon Compass Counts +;================================================================================ + REP #$20 + LDA.l CompassMode : AND #$00FF : BEQ + ; skip if CompassMode is 0. + JSL.l DrawDungeonCompassCounts ; compasses.asm + + + +;================================================================================ +; Draw key count +!KEYS = "$7EF36F" +!KEY_DIGITS_ADDRESS = "$7EC764" +!KEY_ICON_ADDRESS = "$7EC726" +;================================================================================ + SEP #$20 + LDA.l !KEYS : CMP.b #$FF : BEQ .not_in_dungeon + .in_dungeon + JSR HudHexToDec2Digit : REP #$20 + + ; if 10s digit is 0, draw transparent tile instead of 0 + LDX.b $06 : TXA : CPX.b #$90 : BNE + + LDA.w #$007F + + + ORA.w #$2400 : STA !KEY_DIGITS_ADDRESS + + ; 1s digit + LDX.b $07 : TXA : ORA.w #$2400 : STA !KEY_DIGITS_ADDRESS+2 + BRA .done_keys + + .not_in_dungeon + REP #$20 + + ;in the overworld, draw transparent tiles instead of key count + LDA.w #$247F : STA !KEY_DIGITS_ADDRESS : STA !KEY_DIGITS_ADDRESS+2 + STA !KEY_ICON_ADDRESS + + .done_keys + + + + +;-------------------------------------------------------------------------------- +; Draw pendant/crystal icon +;-------------------------------------------------------------------------------- +!PRIZE_ICON = $7EC742 +!P_ICON = $296C +!C_ICON = $295F + + SEP #$20 + LDA.b $1B : BEQ .noprize + + LDX.w $040C + CPX #$1A : !BGE .noprize + CPX #$04 : !BLT .noprize + CPX #$08 : BEQ .noprize + + LDA $10 : CMP #$12 : BEQ .noprize + + LDA.l MapMode + REP #$20 + BEQ .drawprize + + LDA.l $7EF368 + AND.l DungeonItemMasks,X + BEQ .noprize + +.drawprize + TXA : LSR : TAX + LDA.l CrystalPendantFlags_2, X + AND.w #$0040 : BNE .is_crystal + + LDA.w #!P_ICON + BRA .doneprize + +.is_crystal + LDA.w #!C_ICON + BRA .doneprize + +.noprize + REP #$20 + LDA.w #$207F + +.doneprize + STA.l !PRIZE_ICON + +;-------------------------------------------------------------------------------- +; Draw Magic Meter +!INFINITE_MAGIC = "$7F50CA" +!DrawMagicMeter_mp_tilemap = "$0DFE0F" +;-------------------------------------------------------------------------------- + LDA $7EF36E : AND #$00FF ; crap we wrote over when placing the hook for OnDrawHud + !ADD #$0007 + AND #$FFF8 + TAX ; end of crap + + LDA !INFINITE_MAGIC : AND.w #$00FF : BNE + : JMP .green : + + SEP #$20 : LDA.b #$80 : STA $7EF36E : REP #$30 ; set magic to max + LDX.w #$0080 ; load full magic meter graphics + LDA $1A : AND.w #$000C : LSR #2 + BEQ .red + CMP.w #0001 : BEQ .yellow + CMP.w #0002 : BNE + : JMP .green : + + .blue + LDA !DrawMagicMeter_mp_tilemap+0, X : AND.w #$EFFF : STA $7EC746 + LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$EFFF : STA $7EC786 + LDA !DrawMagicMeter_mp_tilemap+4, X : AND.w #$EFFF : STA $7EC7C6 + LDA !DrawMagicMeter_mp_tilemap+6, X : AND.w #$EFFF : STA $7EC806 + RTL + .red + LDA !DrawMagicMeter_mp_tilemap+0, X : AND.w #$E7FF : STA $7EC746 + LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$E7FF : STA $7EC786 + LDA !DrawMagicMeter_mp_tilemap+4, X : AND.w #$E7FF : STA $7EC7C6 + LDA !DrawMagicMeter_mp_tilemap+6, X : AND.w #$E7FF : STA $7EC806 + RTL + .yellow + LDA !DrawMagicMeter_mp_tilemap+0, X : AND.w #$EBFF : STA $7EC746 + LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$EBFF : STA $7EC786 + LDA !DrawMagicMeter_mp_tilemap+4, X : AND.w #$EBFF : STA $7EC7C6 + LDA !DrawMagicMeter_mp_tilemap+6, X : AND.w #$EBFF : STA $7EC806 + RTL + .orange + LDA !DrawMagicMeter_mp_tilemap+0, X : AND.w #$E3FF : STA $7EC746 + LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$E3FF : STA $7EC786 + LDA !DrawMagicMeter_mp_tilemap+4, X : AND.w #$E3FF : STA $7EC7C6 + LDA !DrawMagicMeter_mp_tilemap+6, X : AND.w #$E3FF : STA $7EC806 + RTL + .green + LDA !DrawMagicMeter_mp_tilemap+0, X : STA $7EC746 + LDA !DrawMagicMeter_mp_tilemap+2, X : STA $7EC786 + LDA !DrawMagicMeter_mp_tilemap+4, X : STA $7EC7C6 + LDA !DrawMagicMeter_mp_tilemap+6, X : STA $7EC806 +RTL + +;================================================================================ +; 16-bit A, 8-bit X +; in: A(b) - Byte to Convert +; out: $04 - $07 (high - low) +;================================================================================ +HudHexToDec4Digit: + LDY.b #$90 + - + CMP.w #1000 : !BLT + + INY + SBC.w #1000 : BRA - + + + STY $04 : LDY #$90 ; Store 1000s digit & reset Y + - + CMP.w #100 : !BLT + + INY + SBC.w #100 : BRA - + + + STY $05 : LDY #$90 ; Store 100s digit & reset Y + - + CMP.w #10 : !BLT + + INY + SBC.w #10 : BRA - + + + STY $06 : LDY #$90 ; Store 10s digit & reset Y + CMP.w #1 : !BLT + + - + INY + DEC : BNE - + + + STY $07 ; Store 1s digit +RTS + +;================================================================================ +; 8-bit registers +; in: A(b) - Byte to Convert +; out: $05 - $07 (high - low) +;================================================================================ +HudHexToDec3Digit: ; this may be overkill, could have used the 4 digit one... + LDY.b #$90 + - + CMP.b #100 : !BLT + + INY + SBC.b #100 : BRA - + + + STY $05 : LDY.b #$90 ; Store 100s digit and reset Y + - + CMP.b #10 : !BLT + + INY + SBC.b #10 : BRA - + + + STY $06 : LDY #$90 ; Store 10s digit and reset Y + CMP.b #1 : !BLT + + - + INY + DEC : BNE - + + + STY $07 ; Store 1s digit +RTS + +;================================================================================ +; 8-bit registers +; in: A(b) - Byte to Convert +; out: $06 - $07 (high - low) +;================================================================================ +HudHexToDec2Digit: + LDY.b #$90 + - + CMP.b #10 : !BLT + + INY + SBC.b #10 : BRA - + + + STY $06 : LDY #$90 ; Store 10s digit and reset Y + CMP.b #1 : !BLT + + - + INY + DEC : BNE - + + + STY $07 ; Store 1s digit +RTS diff --git a/newitems.asm b/newitems.asm index 0994cd7..ea4db59 100755 --- a/newitems.asm +++ b/newitems.asm @@ -468,6 +468,7 @@ AddReceivedItemExpanded: JSR IncrementItemCounters + LDA $02D8 ; Item Value + STA !MULTIWORLD_ITEM_ID CMP.b #$16 : BEQ .bottle ; Bottle CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle diff --git a/overrides.asm b/overrides.asm index caf860a..d48f907 100644 --- a/overrides.asm +++ b/overrides.asm @@ -35,11 +35,7 @@ rtl OnFileLoadOverride: jsl OnFileLoad ; what I wrote over - lda.l DRFlags : and #$80 : beq + ;flag is off - lda $7ef086 : ora #$80 : sta $7ef086 - + lda.l DRFlags : and #$40 : beq + ;flag is off - lda $7ef036 : ora #$80 : sta $7ef036 - + lda.l DRFlags : and #$02 : beq + + + lda.l DRFlags : and #$02 : beq + ; Mirror Scroll lda $7ef353 : bne + lda #$01 : sta $7ef353 + rtl diff --git a/owrando.asm b/owrando.asm index b3f9af8..a739ca9 100644 --- a/owrando.asm +++ b/owrando.asm @@ -338,23 +338,27 @@ OWNewDestination: sep #$30 : lda OWOppSlotOffset,y : !add $04 : asl : and #$7f : sta $700 ; crossed OW shuffle - lda.l OWMode+1 : and #$ff : cmp #$02 : bne .return - ldx $05 : lda.l OWTileWorldAssoc,x : sta.l $7ef3ca ; change world + LDA.l OWMode+1 : AND.b #!FLAG_OW_CROSSED : beq .return + ldx $05 : lda.l OWTileWorldAssoc,x : cmp.l $7ef3ca : beq .return + sta.l $7ef3ca ; change world + lda #$38 : sta $012f ; play sfx - #$3b is an alternative - ; toggle bunny mode - lda $7ef357 : bne .nobunny - lda.l InvertedMode : bne .inverted - lda $7ef3ca : and.b #$40 : bra + - .inverted lda $7ef3ca : and.b #$40 : eor #$40 - + cmp #$40 : bne .nobunny - ; turn into bunny - lda $5d : cmp #$17 : beq .return - lda #$17 : sta $5d - lda #$01 : sta $02e0 - bra .return - .nobunny - lda $5d : cmp #$17 : bne .return - stz $5d : stz $2e0 + ; toggle bunny mode + + lda $7ef357 : bne .nobunny + lda.l InvertedMode : bne .inverted + lda $7ef3ca : and.b #$40 : bra + + .inverted lda $7ef3ca : and.b #$40 : eor #$40 + + cmp #$40 : bne .nobunny + ; turn into bunny + lda $5d : cmp #$04 : beq + ; if swimming, continue + lda #$17 : sta $5d + + lda #$01 : sta $02e0 : sta $56 + bra .return + + .nobunny + lda $5d : cmp #$17 : bne + ; retain current state unless bunny + stz $5d + + stz $02e0 : stz $56 .return lda $05 : sta $8a diff --git a/roomloading.asm b/roomloading.asm index 55fbfc9..9a77437 100644 --- a/roomloading.asm +++ b/roomloading.asm @@ -15,9 +15,6 @@ LoadRoomHook: dl IcePalaceBombosNE ; 03 dl CastleEastEntrance ; 04 dl CastleWestEntrance ; 05 - dl PoDFallingBridge ; 06 - dl PoDArena ; 07 - dl MireBKPond ; 08 NoCallback: RTL @@ -92,138 +89,11 @@ CastleEastEntrance: ; new solution (see Rain Prevention) CastleWestEntrance: ; new solution (see Rain Prevention) RTL -PoDFallingBridge: - LDA.l DRFlags : AND #$10 : BNE + : RTL : + - - REP #$20 ; 16 A - LDA.w #$08e1 ; square peg - %writeTileAt(5,7,0,1) - %writeTileAt(11,7,0,1) - INC ;horizontal rail - %writeTileAt(6,7,0,1) - %writeTileAt(7,7,0,1) - %writeTileAt(8,7,0,1) - %writeTileAt(9,7,0,1) - %writeTileAt(10,7,0,1) - SEP #$20 ; 8 A - - REP #$20 ; 16 A - LDA.w #$08e0 ; corner top left - %writeTileAt(5,6,0,1) - %writeTileAt(10,6,0,1) - LDA.w #$48e0 ; corner top right - %writeTileAt(6,6,0,1) - %writeTileAt(11,6,0,1) - LDA.w #$08f4 ; top mid - %writeTileAt(7,6,0,1) - %writeTileAt(8,6,0,1) - %writeTileAt(9,6,0,1) - - LDA.w #$08f1 ; corner mid left - %writeTileAt(5,7,0,1) - %writeTileAt(10,7,0,1) - LDA.w #$48f1 ; corner mid right - %writeTileAt(6,7,0,1) - %writeTileAt(11,7,0,1) - LDA.w #$08f2 ; mid mid - %writeTileAt(7,7,0,1) - %writeTileAt(8,7,0,1) - %writeTileAt(9,7,0,1) - - LDA.w #$08e4 ; corner lower left - %writeTileAt(5,8,0,1) - %writeTileAt(10,8,0,1) - LDA.w #$48e4 ; corner lower right - %writeTileAt(6,8,0,1) - %writeTileAt(11,8,0,1) - LDA.w #$08e5 ; lower mid - %writeTileAt(7,8,0,1) - %writeTileAt(8,8,0,1) - %writeTileAt(9,8,0,1) - SEP #$20 ; 8 A - RTL - -;08e0 48e0 08f4 08f4 08e0 48e0 -;08f1 48f1 08f2 08f2 08f1 48f1 -;08e4 48e4 08e5 08e5 08e4 48e4 -; -;(54,42) 22,10,1,1 42 85 2720 2742 156C -;(54,43) 22,11,1,1 43 87 2784 2806 15EC -;(54,44) 22,12,1,1 44 89 2848 2870 166C -PoDArena: - LDA.l DRFlags : AND #$10 : BNE + : RTL : + - - REP #$20 ; 16 A - LDA.w #$08e0 ; corner top left - %writeTileAt(22,10,1,1) - %writeTileAt(25,10,1,1) - LDA.w #$48e0 ; corner top right - %writeTileAt(23,10,1,1) - %writeTileAt(26,10,1,1) - LDA.w #$08f4 ; top mid - %writeTileAt(24,10,1,1) - - LDA.w #$08f1 ; corner mid left - %writeTileAt(22,11,1,1) - %writeTileAt(25,11,1,1) - LDA.w #$48f1 ; corner mid right - %writeTileAt(23,11,1,1) - %writeTileAt(26,11,1,1) - LDA.w #$08f2 ; mid mid - %writeTileAt(24,11,1,1) - - LDA.w #$08e4 ; corner lower left - %writeTileAt(22,12,1,1) - %writeTileAt(25,12,1,1) - LDA.w #$48e4 ; corner lower right - %writeTileAt(23,12,1,1) - %writeTileAt(26,12,1,1) - LDA.w #$08e5 ; lower mid - %writeTileAt(24,12,1,1) - SEP #$20 ; 8 A - RTL - -MireBKPond: - LDA.l DRFlags : AND #$10 : BNE + : RTL : + - - REP #$20 ; 16 A - LDA.w #$08e0 ; corner top left - %writeTileAt(13,11,1,1) - %writeTileAt(17,11,1,1) - LDA.w #$48e0 ; corner top right - %writeTileAt(14,11,1,1) - %writeTileAt(18,11,1,1) - LDA.w #$08f4 ; top mid - %writeTileAt(15,11,1,1) - %writeTileAt(16,11,1,1) - - LDA.w #$08f1 ; corner mid left - %writeTileAt(13,12,1,1) - %writeTileAt(17,12,1,1) - LDA.w #$48f1 ; corner mid right - %writeTileAt(14,12,1,1) - %writeTileAt(18,12,1,1) - LDA.w #$08f2 ; mid mid - %writeTileAt(15,12,1,1) - %writeTileAt(16,12,1,1) - - LDA.w #$08e4 ; corner lower left - %writeTileAt(13,13,1,1) - %writeTileAt(17,13,1,1) - LDA.w #$48e4 ; corner lower right - %writeTileAt(14,13,1,1) - %writeTileAt(18,13,1,1) - LDA.w #$08e5 ; lower mid - %writeTileAt(15,13,1,1) - %writeTileAt(16,13,1,1) - SEP #$20 ; 8 A - RTL - RoomCallbackTable: ; 0 1 2 3 4 5 6 7 8 9 A B C D E F db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00 ; 00x - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $06, $00, $00, $00, $00, $00 ; 01x - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $00 ; 02x + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 01x + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 02x db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 03x db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 04x db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 05x @@ -234,7 +104,7 @@ RoomCallbackTable: db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Ax db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Bx db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Cx - db $00, $08, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $00 ; 0Dx + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $00 ; 0Dx db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Ex db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Fx db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Fx