diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index e5b8a57..f46fce5 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -237,6 +237,7 @@ incsrc contrib.asm org $A38000 incsrc stats/main.asm +incsrc menu/overworldmap.asm ; overwrites some code in bank 0A incsrc doorrando.asm ; bank 27 likely A7 in the future ;bank 28/A8 for keydropshuffle incsrc keydrop/potsanity.asm diff --git a/bugfixes.asm b/bugfixes.asm index 4a2dcba..ff550b2 100644 --- a/bugfixes.asm +++ b/bugfixes.asm @@ -127,10 +127,9 @@ RTL ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- -;Fix for PoD causing accidental Exploration Glitch -PodEGFix: +;Fix for SQ jumping causing accidental Exploration Glitch +SQEGFix: LDA Bugfix_PodEG : BNE .done - LDA $040C : CMP.b #$0C : BNE .done ;check if we are in PoD STZ $047A ;disarm exploration glitch .done RTL @@ -200,3 +199,18 @@ LDA $1B : BNE + LDA $8C : CMP.b #$97 + RTL + +;-------------------------------------------------------------------------------- +FixJingleGlitch: + LDA.b $11 + BEQ .set_doors + + LDA.l AllowAccidentalMajorGlitch + BEQ .exit + +.set_doors + LDA.b #$05 + STA.b $11 + +.exit + RTL diff --git a/darkworldspawn.asm b/darkworldspawn.asm index 693bab6..abd4f51 100644 --- a/darkworldspawn.asm +++ b/darkworldspawn.asm @@ -53,8 +53,9 @@ DoWorldFix_Inverted: .aga1Alive LDA #$40 : STA $7EF3CA ; set flag to dark world LDA $7EF3CC - CMP #$07 : BNE .done ; clear frog - CMP #$08 : BNE .done ; clear dwarf - consider flute implications + CMP #$07 : BEQ .clear ; clear frog + CMP #$08 : BEQ .clear ; clear dwarf - consider flute implications + BRA .done .clear LDA.b #$00 : STA $7EF3CC ; clear follower .done diff --git a/entrances.asm b/entrances.asm index 2b2f171..35db47e 100644 --- a/entrances.asm +++ b/entrances.asm @@ -24,11 +24,12 @@ LockAgahnimDoors: LDA $7EF2C3 : AND.w #$0020 : BNE .unlock ; Check if GT overlay is already on or not LDA $0308 : AND.w #$0080 : BEQ ++ ;If we are holding an item + + .locked LDA #$0001 : RTL ;Keep the door locked ++ SEP #$30 JSL $099B6F ;Add tower break seal - LDA $7EF2C3 : ORA #$20 : STA $7EF2C3 ; activate GT overlay REP #$30 LDA #$0001 ;Prevent door from opening that frame otherwise it glitchy RTL @@ -39,6 +40,17 @@ LockAgahnimDoors: LDA.w #$0000 ; fallback to never locked RTL +;--------------------------------------------------------------------------------- +FlagAgahnimDoor: + LDA.l InvertedMode : BEQ .vanilla + + LDA $7EF2C3 : ORA #$20 : STA $7EF2C3 ; activate GT overlay + +.vanilla + LDA.b #$28 : STA.b $72 + RTL + + ;-------------------------------------------------------------------------------- LockAgahnimDoorsCore: LDA $22 : CMP.w #1992 : !BLT + ; door too far left, skip diff --git a/events.asm b/events.asm index ccf297f..913818f 100644 --- a/events.asm +++ b/events.asm @@ -37,7 +37,7 @@ RTL OnDungeonExit: PHA : PHP SEP #$20 ; set 8-bit accumulator - JSL.l PodEGFix + JSL.l SQEGFix PLP : PLA STA $040C : STZ $04AC ; thing we wrote over @@ -50,8 +50,8 @@ OnDungeonExit: RTL ;-------------------------------------------------------------------------------- OnQuit: - JSL.l PodEGFix - + JSL.l SQEGFix + LDA.b #$00 : STA $7F5035 ; bandaid patch bug with mirroring away from text LDA.b #$10 : STA $1C ; thing we wrote over RTL ;-------------------------------------------------------------------------------- @@ -184,6 +184,7 @@ OnInitFileSelect: RTL ;-------------------------------------------------------------------------------- OnLinkDamaged: + JSL.l IncrementDamageTakenCounter_Arb JSL.l FlipperKill JML.l OHKOTimer @@ -197,8 +198,17 @@ RTL ;-------------------------------------------------------------------------------- OnLinkDamagedFromPit: JSL.l OHKOTimer - LDA.b #$14 : STA $11 ; thing we wrote over -RTL + + LDA.l AllowAccidentalMajorGlitch + BEQ ++ +-- LDA.b #$14 : STA $11 ; thing we wrote over + + RTL + +++ LDA.b $10 : CMP.b #$12 : BNE -- + + STZ.b $11 + RTL ;-------------------------------------------------------------------------------- OnLinkDamagedFromPitOutdoors: JML.l OHKOTimer ; make sure this is last diff --git a/hooks.asm b/hooks.asm index 414336c..e2195c3 100755 --- a/hooks.asm +++ b/hooks.asm @@ -1079,6 +1079,9 @@ JSL.l InitializeBottles ;================================================================================ ; Agahnim Doors Fix ;-------------------------------------------------------------------------------- +org $099BBA +JSL FlagAgahnimDoor + org $1BBC94 ; <- DBC94 - Bank1B.asm : 201 (LDA $7EF3C5 : AND.w #$000F : CMP.w #$0003 : BCS BRANCH_EPSILON) JSL.l LockAgahnimDoors : BNE Overworld_Entrance_BRANCH_EPSILON : NOP #6 @@ -1526,6 +1529,9 @@ org $1DBAB1 ; <- EBAB1 - sprite_sidenexx.asm : 314 (JSL GetRandomInt : AND.b #$0 JSL.l RNG_Trinexx org $1DBAC3 ; <- EBAC3 - sprite_sidenexx.asm : 323 (JSL GetRandomInt : AND.b #$0F : ADD.b #$0C : STA $02 : STZ $03) JSL.l RNG_Trinexx +;-------------------------------------------------------------------------------- +org $6F9B8 ; <- 379B8 - bank06.asm : 6693 (JSL GetRandomInt : PLY : AND $FA5C, Y : BNE BRANCH_MU) +JSL.l RNG_Enemy_Drops ;================================================================================ ; HUD Changes ;-------------------------------------------------------------------------------- @@ -1822,13 +1828,13 @@ LDA CrystalPendantFlags_2, X ;NOP #10 ;CLC ;================================================================================ -org $0AC5BB ; < 545BB - Bank0A.asm:1856 - (LDA $7EF3C7 : CMP.b #$03 : BNE .fail) -JSL.l OverworldMap_CheckObject : RTS -org $0AC5D8 ; < 545D8 - Bank0A.asm:1885 - (LDA $7EF3C7 : CMP.b #$07 : BNE OverworldMap_CheckPendant_fail) -JSL.l OverworldMap_CheckObject : RTS +;org $0AC5BB ; < 545BB - Bank0A.asm:1856 - (LDA $7EF3C7 : CMP.b #$03 : BNE .fail) +;JSL.l OverworldMap_CheckObject : RTS +;org $0AC5D8 ; < 545D8 - Bank0A.asm:1885 - (LDA $7EF3C7 : CMP.b #$07 : BNE OverworldMap_CheckPendant_fail) +;JSL.l OverworldMap_CheckObject : RTS ;================================================================================ org $0AC53e ; <- 5453E - Bank0A.asm:1771 - (LDA $0AC50D, X : STA $0D) -JSL.l GetCrystalNumber +LDA.l CrystalNumberTable, X ;================================================================================ ; EVERY INSTANCE OF STA $7EF3C7 IN THE ENTIRE CODEBASE org $029D51 ; <- 11D51 @@ -1864,34 +1870,35 @@ JSL.l GetMapMode org $0AC01A ; <- 5401A JSL.l GetMapMode -org $0AC037 ; <- 54037 -JSL.l GetMapMode -org $0AC079 ; <- 54079 -JSL.l GetMapMode -org $0AC0B8 ; <- 540B8 x -JSL.l GetMapMode -org $0AC0F8 ; <- 540F8 -JSL.l GetMapMode -org $0AC137 ; <- 54137 -JSL.l GetMapMode -org $0AC179 ; <- 54179 -JSL.l GetMapMode -org $0AC1B3 ; <- 541B3 -JSL.l GetMapMode -org $0AC1F5 ; <- 541F5 -JSL.l GetMapMode -org $0AC22F ; <- 5422F -JSL.l GetMapMode -org $0AC271 ; <- 54271 -JSL.l GetMapMode -org $0AC2AB ; <- 542AB -JSL.l GetMapMode -org $0AC2ED ; <- 542ED -JSL.l GetMapMode -org $0AC327 ; <- 54327 -JSL.l GetMapMode -org $0AC369 ; <- 54369 -JSL.l GetMapMode +;Overwritten +;org $0AC037 ; <- 54037 +;JSL.l GetMapMode +;org $0AC079 ; <- 54079 +;JSL.l GetMapMode +;org $0AC0B8 ; <- 540B8 x +;JSL.l GetMapMode +;org $0AC0F8 ; <- 540F8 +;JSL.l GetMapMode +;org $0AC137 ; <- 54137 +;JSL.l GetMapMode +;org $0AC179 ; <- 54179 +;JSL.l GetMapMode +;org $0AC1B3 ; <- 541B3 +;JSL.l GetMapMode +;org $0AC1F5 ; <- 541F5 +;JSL.l GetMapMode +;org $0AC22F ; <- 5422F +;JSL.l GetMapMode +;org $0AC271 ; <- 54271 +;JSL.l GetMapMode +;org $0AC2AB ; <- 542AB +;JSL.l GetMapMode +;org $0AC2ED ; <- 542ED +;JSL.l GetMapMode +;org $0AC327 ; <- 54327 +;JSL.l GetMapMode +;org $0AC369 ; <- 54369 +;JSL.l GetMapMode org $0DC849 ; <- 6C849 JSL.l GetMapMode @@ -2766,8 +2773,6 @@ JSL FastTextScroll : NOP org $01FFEE : JSL IncrementDamageTakenCounter_Eight ; overworld pit org $079506 : JSL IncrementDamageTakenCounter_Eight ; underworld pit -org $0780C6 : JSL IncrementDamageTakenCounter_Arb - org $07B0B1 : JSL IncrementMagicUseCounter ;================================================================================ @@ -2786,6 +2791,13 @@ org $0AEEF2 org $008BE5 ; hijack stripes for boss GFX transfer JSL DoDungeonMapBossIcon +;================================================================================ + +org $01C4B8 : JSL FixJingleGlitch +org $01C536 : JSL FixJingleGlitch +org $01C592 : JSL FixJingleGlitch +org $01C65F : JSL FixJingleGlitch + ;================================================================================ ; Terrorpin AI fix ;-------------------------------------------------------------------------------- diff --git a/menu/overworldmap.asm b/menu/overworldmap.asm new file mode 100644 index 0000000..9bd111a --- /dev/null +++ b/menu/overworldmap.asm @@ -0,0 +1,299 @@ +; adding support for up to 13 markers +!MC_FLAG = "$7F5420" +!INVENTORY_MAP = "$7EF368" +!INVENTORY_COMPASS = "$7EF364" +!MAP_OVERLAY = "$7EF414" ; [2] + +; tables +org $0ABDF6 +WorldMapIcon_posx_vanilla: +dw $0F31 ; prize1 +dw $08D0 ; prize2 +dw $0108 +dw $0F40 + +dw $0082 +dw $0F11 +dw $01D0 +dw $0100 + +dw $0CA0 +dw $0759 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FFFF ; reserved - not used +dw $FFFF +dw $FFFF + +org $0ABE16 +WorldMapIcon_posy_vanilla: +dw $0620 ; prize1 +dw $0080 ; prize2 +dw $0D70 +dw $0620 + +dw $00B0 +dw $0103 +dw $0780 +dw $0CA0 + +dw $0DA0 +dw $0ED0 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FFFF ; reserved - not used +dw $FFFF +dw $FFFF + +org $0ABE36 +WorldMapIcon_posx_located: +dw $FF00 ; prize1 +dw $FF00 ; prize2 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FF00 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FF00 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FFFF ; reserved - not used +dw $FFFF +dw $FFFF + +org $0ABE56 +WorldMapIcon_posy_located: +dw $FF00 ; prize1 +dw $FF00 ; prize2 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FF00 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FF00 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FFFF ; reserved - not used +dw $FFFF +dw $FFFF + +org $0ABE76 +WorldMapIcon_tile: +db $38, $62 ; green pendant +db $32, $60 ; red pendant +db $34, $60 ; blue pendant +db $34, $64 ; crystal + +db $34, $64 ; crystal +db $34, $64 ; crystal +db $34, $64 ; crystal +db $34, $64 ; crystal + +db $34, $64 ; crystal +db $34, $64 ; crystal +db $32, $66 ; skull looking thing +db $00, $00 ; red x + +db $00, $00 ; red x +db $00, $00 ; unused red x's +db $00, $00 +db $00, $00 + +org $0ABE96 +CompassExists: +; dw $37FC ; todo: convert to two bytes with masks? so much extra code... +; eastern hera desert pod skull trock thieves mire ice swamp gt at escape +db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00, $00 + +; 0 = light world, 1 = dark world +org $0ABEA6 +WorldCompassMask: +db $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00, $00 + +; eastern desert hera pod skull trock thieves mire ice swamp gt at escape x1 x2 x3 + +; refs +org $0AC59B +WorldMapIcon_AdjustCoordinate: +org $0AC3B1 +WorldMap_CalculateOAMCoordinates: +org $0AC52E +WorldMap_HandleSpriteBlink: +org $0ABF70 +WorldMap_RedXChars: + +org $0AC02B +DrawPrizesOverride: +LDX.b #$FF +.loopStart + INX : PHX + JSR OverworldMap_CheckForPrize + BCC + : JMP .skip_draw : + + + TXA : ASL A : TAX + LDA.l !MC_FLAG + AND #$01 : BNE + + LDA.l WorldMapIcon_posx_vanilla+1, X : STA.l $7EC10B + LDA.l WorldMapIcon_posx_vanilla, X : STA.l $7EC10A + LDA.l WorldMapIcon_posy_vanilla+1, X : STA.l $7EC109 + LDA.l WorldMapIcon_posy_vanilla, X : STA.l $7EC108 + BRA .adjustment + + LDA.l WorldMapIcon_posx_located+1, X : STA.l $7EC10B + LDA.l WorldMapIcon_posx_located, X : STA.l $7EC10A + LDA.l WorldMapIcon_posy_located+1, X : STA.l $7EC109 + LDA.l WorldMapIcon_posy_located, X : STA.l $7EC108 + .adjustment + LDA.l WorldMapIcon_tile+1, X : BEQ .dont_adjust + CMP.b #$64 : BEQ .is_crystal + LDA.b $1A : AND.b #$10 : BNE .skip_draw + .is_crystal + JSR WorldMapIcon_AdjustCoordinate + .dont_adjust + JSR WorldMap_CalculateOAMCoordinates + BCC .skip_draw + PLX : PHX : TXA : ASL A : TAX + LDA.l WorldMapIcon_tile+1, X : BEQ .is_red_x + LDA.l !MC_FLAG : CMP.b #$01 : BEQ .is_red_x + LDA.l WorldMapIcon_tile+1, X : STA.b $0D + LDA.l WorldMapIcon_tile, X : STA.b $0C + LDA.b #$02 : BRA .continue + .is_red_x + LDA.b $1A : LSR #3 : AND.b #$03 : TAX + LDA.l WorldMap_RedXChars,X : STA.b $0D + LDA.b #$32 : STA.b $0C : LDA.b #$00 + .continue + STA.b $0B + PLX : PHX + JSR WorldMap_HandleSpriteBlink + .skip_draw + ; end of loop + PLX : CPX #12 : BCS + : JMP .loopStart : + + + PLA : STA.l $7EC10B + PLA : STA.l $7EC10A + PLA : STA.l $7EC109 + PLA : STA.l $7EC108 + RTS + + +; X - the index of the prize marker +OverworldMap_CheckForPrize: +PHX + LDA #$00 : STA.l !MC_FLAG + JSR OverworldMap_CheckForCompass + BCC + + LDA.l !MC_FLAG : ORA #$01 : STA.l !MC_FLAG + LDA $7EF3CA : AND #$40 : BNE ++ ; is the compass position on LW or DW? + LDA.l WorldCompassMask, X : BEQ + : JMP .fail + ++ LDA.l WorldCompassMask, X : BNE + : JMP .fail + + JSR OverworldMap_CheckForMap + BCC + + LDA.l !MC_FLAG : ORA #$02 : STA.l !MC_FLAG + + + LDA.l !MC_FLAG : BEQ .fail + CMP #$02 : BNE .checkIfObtained + LDA $7EF3CA : AND #$40 : BNE + + CPX #3 : BCS .fail : BRA .checkIfObtained + + CPX #10 : BCS .fail + CPX #3 : BCC .fail + + .checkIfObtained + LDA.l MC_DungeonIdsForPrize, X + BPL +++ : CLC : BRA .done : +++ ; non-prize flags + + TAX : LDA.l CrystalPendantFlags_2, X : BEQ .checkPendant + AND.b #$40 : BNE .checkCrystal + LDA.l CrystalPendantFlags_2, X : AND.b #$01 : BNE .checkAga1 + LDA.l CrystalPendantFlags_2, X : AND.b #$02 : BNE .checkAga2 + + ; see if hyrule castle has been completely cleared + LDA.l CompassTotal, X : SEC : SBC $7EF4BF, X : BEQ .fail + CLC : BRA .done + + .checkPendant + LDA $7EF374 : AND.l CrystalPendantFlags, X : BNE .fail + CLC : BRA .done + + .checkCrystal + LDA $7EF37A : AND.l CrystalPendantFlags, X : BNE .fail + CLC : BRA .done + + .checkAga1 + LDA $7EF3C5 : CMP #$03 : BEQ .fail + CLC : BRA .done + + .checkAga2 + LDA $7EF2DB : AND #$20 : BNE .fail + CLC : BRA .done + + .fail + SEC +.done +PLX +RTS + +; X - which compass in question +; CLC - should not move indicator +; SEC - yep indicator can move +OverworldMap_CheckForCompass: + LDA.l CompassMode : AND #$80 : BEQ .unset ; should I check for compass logic + LDA.l CompassMode : AND #$40 : BEQ .set ; compasses aren't shuffled + LDA.l CompassExists, X : BEQ .set ; compass doesn't exits + PHX + LDA.l MC_SRAM_Offsets, X : TAX ; put compass offset into X + LDA !INVENTORY_COMPASS, X : ORA !MAP_OVERLAY, X + PLX + AND.l MC_Masks, X : BNE .set ; is the compass obtained +.unset +CLC +RTS +.set +SEC +RTS + +; map - which map in question +; CLC - should not show exact prize +; SEC - yep should show exact prize +OverworldMap_CheckForMap: + LDA.l MapMode : BEQ .set ; obtaining map doesn't change anything + LDA $7EF3CA : AND #$40 : BNE + ; not really sure on this check + LDA !INVENTORY_MAP : ORA !MAP_OVERLAY : AND.b #$01 : BNE .set : BRA .continue + + LDA !INVENTORY_MAP : ORA !MAP_OVERLAY : AND.b #$02 : BNE .set +.continue + PHX + LDA.l MC_SRAM_Offsets, X : TAX ; put map offset into X + LDA !INVENTORY_MAP, X : ORA !MAP_OVERLAY, X + PLX + AND.l MC_Masks, X : BNE .set ; is the map obtained? +.unset +CLC +RTS +.set +SEC +RTS + +; eastern desert hera pod skull trock thieves mire ice swamp gt at escape +MC_DungeonIdsForPrize: +db $02, $0A, $03, $06, $08, $0C, $0B, $07, $09, $05, $00, $04, $01 +MC_SRAM_Offsets: +db $01, $00, $01, $01, $00, $00, $00, $01, $00, $01, $00, $01, $01 +MC_Masks: +; EP TH DP PD SK TR TT MM +db $20, $20, $10, $02, $80, $08, $10, $01, $40, $04, $04, $08, $40 + diff --git a/msu.asm b/msu.asm index 1ef1897..a6108e9 100644 --- a/msu.asm +++ b/msu.asm @@ -323,10 +323,8 @@ CheckMusicLoadRequest: .load REP #$10 STZ $4200 - STA !REG_SPC_CONTROL - - : CMP !REG_SPC_CONTROL : BNE - ; Wait until mute/unmute command is ACK'ed - STZ !REG_SPC_CONTROL - - : LDA !REG_SPC_CONTROL : BNE - ; Wait until mute/unmute command is completed + - : STA !REG_SPC_CONTROL : CMP !REG_SPC_CONTROL : BNE - ; Wait until mute/unmute command is ACK'ed + - : STZ !REG_SPC_CONTROL : LDA !REG_SPC_CONTROL : BNE - ; Wait until mute/unmute command is completed LDA.b #$81 : STA $4200 LDA !REG_MUSIC_CONTROL_REQUEST : CMP.b #08 : BEQ .done+3 ; No SFX during warp track diff --git a/newhud.asm b/newhud.asm index 9c36f2d..40f0c11 100644 --- a/newhud.asm +++ b/newhud.asm @@ -98,7 +98,7 @@ SEP #$30 ; Draw Dungeon Compass Counts ;================================================================================ REP #$20 - LDA.l CompassMode : AND #$00FF : BEQ + ; skip if CompassMode is 0. + LDA.l CompassMode : AND #$003F : BEQ + ; skip if CompassMode is 0. JSL.l DrawDungeonCompassCounts ; compasses.asm + diff --git a/pendantcrystalhud.asm b/pendantcrystalhud.asm index 256b395..3b11aaa 100644 --- a/pendantcrystalhud.asm +++ b/pendantcrystalhud.asm @@ -42,82 +42,6 @@ RTL LDA.b #$FF ; don't show keys RTL ;================================================================================ -GetCrystalNumber: - PHX - TXA : ASL : TAX - LDA $7EF3CA : EOR.b #$40 : BNE + - INX - + - LDA.l CrystalNumberTable-16, X - PLX -RTL -;================================================================================ -!INVENTORY_MAP = "$7EF368" -!MAP_OVERLAY = "$7EF414" ; [2] -OverworldMap_CheckObject: - PHX - ;CPX.b #$01 : BNE + : JMP ++ : + : JMP .fail - LDA $7EF3CA : AND.b #$40 : BNE + - ;LW Map - LDA.l MapMode : BEQ +++ - LDA !INVENTORY_MAP : ORA !MAP_OVERLAY : AND.b #$01 : BNE +++ - PHX - LDA.l .lw_map_offsets, X : TAX ; put map offset into X - LDA !INVENTORY_MAP, X : ORA !MAP_OVERLAY, X - PLX - AND.l .lw_map_masks, X : BNE +++ - JMP .fail - +++ - LDA.l .lw_offsets, X - BPL +++ : CLC : BRA .done : +++ ; don't display master sword - TAX : BRA ++ - + - ;DW Map - LDA.l MapMode : BEQ +++ - LDA !INVENTORY_MAP : ORA !MAP_OVERLAY : AND.b #$02 : BNE +++ - PHX - LDA.l .dw_map_offsets, X : TAX ; put map offset into X - LDA.l !INVENTORY_MAP, X : ORA !MAP_OVERLAY, X - PLX - AND.l .dw_map_masks, X : BNE +++ - JMP .fail - +++ - LDA.l .dw_offsets, X - TAX : BRA ++ - SEC - PLX -RTL -++ - LDA.l CrystalPendantFlags_2, X - AND.b #$40 : BNE .checkCrystal - - .checkPendant - LDA $7EF374 : AND.l CrystalPendantFlags, X : BNE .fail - CLC : BRA .done - - .checkCrystal - LDA $7EF37A : AND.l CrystalPendantFlags, X : BNE .fail - CLC : BRA .done - - .fail - SEC - .done - PLX -RTL -.lw_offsets -db $02, $0A, $03, $FF -.dw_offsets -db $06, $08, $0C, $0B, $07, $09, $05 -.lw_map_offsets -db $01, $00, $01 -; pod skull trock thieves mire ice swamp -.dw_map_offsets -db $01, $00, $00, $00, $01, $00, $01 -.lw_map_masks -db $20, $20, $10, $00 -.dw_map_masks -db $02, $80, $08, $10, $01, $40, $04 -;================================================================================ SetLWDWMap: PHP SEP #$20 ; set 8-bit accumulator diff --git a/rngfixes.asm b/rngfixes.asm index 983ffec..f9a880c 100644 --- a/rngfixes.asm +++ b/rngfixes.asm @@ -4,8 +4,7 @@ RigDigRNG: LDA $7FFE01 : CMP.l DiggingGameRNG : !BGE .forceHeart .normalItem - JSL $0DBA71 ; GetRandomInt -RTL + JML GetRandomInt .forceHeart LDA $7FFE00 : BNE .normalItem LDA #$04 @@ -15,7 +14,7 @@ RigChestRNG: JSL.l DecrementChestCounter LDA $04C4 : CMP.l ChestGameRNG : BEQ .forceHeart .normalItem - JSL $0DBA71 ; GetRandomInt + JSL GetRandomInt AND.b #$07 ; restrict values to 0-7 CMP #$07 : BEQ .notHeart JSL.l DecrementItemCounter @@ -30,7 +29,7 @@ RTL JSL.l DecrementItemCounter ;LDA #$00 ; bullshit rupee farming in chest game - JSL $0DBA71 ; GetRandomInt ; spam RNG until we stop getting the prize item + JSL GetRandomInt ; spam RNG until we stop getting the prize item AND.b #$07 ; restrict values to 0-7 CMP #$07 : BNE + ; player got prize item AGAIN LDA.b #$00 ; give them money instead @@ -98,6 +97,11 @@ RNG_Ganon_Extra_Warp: + PLA RTL +RNG_Enemy_Drops: + LDA.l $7EF3C5 : CMP #$01 : BEQ + ; drops are static after uncle pickup & before rescuing zelda + JML GetRandomInt + + + LDA.b #$0F _rng_done: JSL.l GetStaticRNG RTL @@ -143,5 +147,5 @@ dw #$02C0 ; 11 = Agahnim 2 dw #$0300 ; 12 = Agahnim 2 Phantoms dw #$0340 ; 13 = Ganon dw #$0380 ; 14 = Ganon Extra Warp -dw #$03C0 ; 15 = Unused -;-------------------------------------------------------------------------------- \ No newline at end of file +dw #$03C0 ; 15 = Standard Escape Enemy Drops +;-------------------------------------------------------------------------------- diff --git a/stats.asm b/stats.asm index 846355d..d6ae121 100644 --- a/stats.asm +++ b/stats.asm @@ -447,6 +447,7 @@ JMP StatTransitionCounter !UW_MIRROR_COUNTER = "$7EF43B" IncrementUWMirror: PHA + LDA.b #$00 : STA $7F5035 ; bandaid patch bug with mirroring away from text LDA !LOCK_STATS : BNE + LDA $040C : CMP #$FF : BEQ + ; skip if we're in a cave or house LDA !UW_MIRROR_COUNTER : INC : STA !UW_MIRROR_COUNTER diff --git a/stats/creditsnew.asm b/stats/creditsnew.asm index 56d27fc..46173d0 100644 --- a/stats/creditsnew.asm +++ b/stats/creditsnew.asm @@ -1,11 +1,13 @@ ;=================================================================================================== ; LEAVE THIS HERE FOR PHP WRITES ;=================================================================================================== +table "creditscharmapbighi.txt" YourSpriteCreditsHi: db 2 db 55 db " " ; $238002 +table "creditscharmapbiglo.txt" YourSpriteCreditsLo: db 2 db 55 @@ -501,6 +503,15 @@ CreditsLineBlank: %blankline() %blankline() +%smallcredits("WEBSITE LOGO", "green") + +%blankline() + +%bigcredits("PLEASURE") + +%blankline() +%blankline() + %smallcredits("SPECIAL THANKS", "red") %blankline() @@ -568,12 +579,6 @@ CreditsLineBlank: %emptyline() %emptyline() %emptyline() -%emptyline() -%emptyline() -%emptyline() -%emptyline() -%emptyline() -%emptyline() ;=================================================================================================== diff --git a/stats/main.asm b/stats/main.asm index 314de0e..975eb3b 100755 --- a/stats/main.asm +++ b/stats/main.asm @@ -218,7 +218,7 @@ endmacro !ColonOffset = $83 !PeriodOffset = $80 -!BlankTile = $883D +!BlankTile = #$883D RenderCreditsStatCounter: PHB diff --git a/tables.asm b/tables.asm index 8ccb5fb..e158516 100644 --- a/tables.asm +++ b/tables.asm @@ -139,6 +139,8 @@ MapMode: db #$00 ; #$00 = Always On (default) - #$01 = Require Map Item CompassMode: db #$00 ; #$00 = Off (default) - #$01 = Display Dungeon Count w/Compass - #$02 = Display Dungeon Count Always + ; #$8x = Moves prize indicator to a special position if bit on + ; #$4x = Compasses are shuffled and must be obtained to show position if bit on ;-------------------------------------------------------------------------------- org $30803D ; PC 0x18003D PersistentFloodgate: @@ -240,13 +242,13 @@ org $30804F ; PC 0x18004F ByrnaInvulnerability: db #$01 ; #$00 = Off - #$01 = On (default) ;-------------------------------------------------------------------------------- -org $308050 ; PC 0x180050 - 0x18005C +org $308050 ; PC 0x180050 - 0x18005D CrystalPendantFlags_2: - db $00 ; Sewers - db $00 ; Hyrule Castle + db $02 ; Ganons Tower - because 5D is not available right now - sewers doesn't get one + db $04 ; Hyrule Castle db $00 ; Eastern Palace db $00 ; Desert Palace - db $00 ; Agahnim's Tower + db $01 ; Agahnim's Tower db $40 ; Swamp Palace db $40 ; Palace of Darkness db $40 ; Misery Mire @@ -258,6 +260,9 @@ CrystalPendantFlags_2: db $40 ; Turtle Rock ;Pendant: $00 ;Crystal: $40 +;Aga1: $01 +;Aga2: $02 +;HC special check $04 ;-------------------------------------------------------------------------------- org $30805E ; PC 0x18005E - Number of crystals required to enter GT NumberOfCrystalsRequiredForTower: @@ -288,20 +293,20 @@ dl #$000000 ;-------------------------------------------------------------------------------- org $308070 ; PC 0x180070 - 0x18007F CrystalNumberTable: -db $00 ; +db $69 ; Eastern +db $69 ; Hera +db $69 ; Desert +db $7F ; Darkness +db $6C ; Skull +db $7C ; TRock +db $6D ; Thieves +db $6F ; Mire +db $6E ; Ice db $79 ; Swamp db $00 ; -db $6E ; Ice db $00 ; -db $6F ; Mire db $00 ; -db $6D ; Thieves -db $69 ; Desert -db $7C ; TRock -db $69 ; Hera -db $6C ; Skull -db $69 ; Eastern -db $7F ; Darkness +db $00 ; db $00 ; db $00 ; @@ -1082,8 +1087,15 @@ db $00, $00, $00, $00, $00, $00, $00, $00 org $308350 ; PC 0x180350 ShouldStartatExit: db $00, $00, $00 +;-------------------------------------------------------------------------------- +; $308358 (0x180358) fixes major glitches +; 0x00 - fix +; otherwise dont fix various major glitches +org $308358 +AllowAccidentalMajorGlitch: +db $00 ;================================================================================ -; 0x180350 - 0x1814FF (unused) +; 0x180359 - 0x1814FF (unused) ;================================================================================ ; $309500 (0x181500) - $309FFF (0x181FFF) original 0x39C bytes ; Replacement Ending Sequence Text Data @@ -1555,6 +1567,8 @@ dw #9999 ; Rupee Limit ; $7F5400 - $7F540F - MSU Block ; $7F5410 - $7F56FF - Unused +; $7F5420 - MapCompass flag - used during Overworld Map processing +; $7F5421 - $7F56FF - Unused ; $7F5700 - $7F57FF - Dialog Buffer ; @@ -1865,7 +1879,7 @@ db #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, org $30E37D ; PC 0x18637D Enable_TerrorPin_AI_Fix: -db #$01 +db #$00 ;Shop slot count as check org $30E560 ; PC 0x18650 diff --git a/utilities.asm b/utilities.asm index ec90792..7d4e1de 100644 --- a/utilities.asm +++ b/utilities.asm @@ -24,8 +24,7 @@ GetSpriteID: PHA : JSR.w CountBottles : CMP.l BottleLimit : !BLT + LDA !MULTIWORLD_SPRITEITEM_PLAYER_ID : BNE + PLA : LDA.l BottleLimitReplacement - JSL.l GetSpriteID - RTL + JMP GetSpriteID + PLA : BRA .normal .server_F0 @@ -59,8 +58,7 @@ RTL LDA !MULTIWORLD_SPRITEITEM_PLAYER_ID : BNE + LDA $7EF35B : CMP.l ProgressiveArmorLimit : !BLT + ; Progressive Armor Limit LDA.l ProgressiveArmorReplacement - JSL.l GetSpriteID - RTL + JMP GetSpriteID + LDA.b #$04 : RTL ++ CMP.b #$FE : BNE ++ ; Progressive Sword @@ -68,8 +66,7 @@ RTL LDA $7EF359 CMP.l ProgressiveSwordLimit : !BLT + ; Progressive Sword Limit LDA.l ProgressiveSwordReplacement - JSL.l GetSpriteID - RTL + JMP GetSpriteID .skipswordlimit : LDA $7EF359 + : CMP.b #$FF : BNE + ; Swordless LDA.b #$43 : RTL @@ -87,8 +84,7 @@ RTL LDA !PROGRESSIVE_SHIELD : AND #$C0 : LSR #6 CMP.l ProgressiveShieldLimit : !BLT + ; Progressive Shield Limit LDA.l ProgressiveShieldReplacement - JSL.l GetSpriteID - RTL + JMP GetSpriteID .skipshieldlimit : LDA !PROGRESSIVE_SHIELD : AND #$C0 : LSR #6 + : CMP.b #$00 : BNE + ; No Shield LDA.b #$2D : RTL @@ -101,8 +97,7 @@ RTL LDA $7EF340 : INC : LSR CMP.l ProgressiveBowLimit : !BLT + LDA.l ProgressiveBowReplacement - JSL.l GetSpriteID - RTL + JMP GetSpriteID .skipbowlimit : LDA $7EF340 : INC : LSR + : CMP.b #$00 : BNE + ; No Bow LDA.b #$29 : RTL @@ -187,8 +182,7 @@ GetSpritePalette: .bottle PHA : JSR.w CountBottles : CMP.l BottleLimit : !BLT + PLA : LDA.l BottleLimitReplacement - JSL.l GetSpritePalette - RTL + JMP GetSpritePalette + PLA : .notBottle PHX @@ -203,8 +197,7 @@ RTL LDA $7EF359 CMP.l ProgressiveSwordLimit : !BLT + ; Progressive Sword Limit LDA.l ProgressiveSwordReplacement - JSL.l GetSpritePalette - RTL + JMP GetSpritePalette + : CMP.b #$00 : BNE + ; No Sword LDA.b #$04 : RTL + : CMP.b #$01 : BNE + ; Fighter Sword @@ -217,8 +210,7 @@ RTL LDA !PROGRESSIVE_SHIELD : AND #$C0 : LSR #6 CMP.l ProgressiveShieldLimit : !BLT + ; Progressive Shield Limit LDA.l ProgressiveShieldReplacement - JSL.l GetSpritePalette - RTL + JMP GetSpritePalette + : CMP.b #$00 : BNE + ; No Shield LDA.b #$04 : RTL + : CMP.b #$01 : BNE + ; Fighter Shield @@ -228,8 +220,7 @@ RTL ++ : CMP.b #$FF : BNE ++ ; Progressive Armor LDA $7EF35B : CMP.l ProgressiveArmorLimit : !BLT + ; Progressive Armor Limit LDA.l ProgressiveArmorReplacement - JSL.l GetSpritePalette - RTL + JMP GetSpritePalette + : CMP.b #$00 : BNE + ; Green Tunic LDA.b #$04 : RTL + ; Everything Else @@ -243,8 +234,7 @@ RTL LDA $7EF340 : INC : LSR CMP.l ProgressiveBowLimit : !BLT + LDA.l ProgressiveBowReplacement - JSL.l GetSpritePalette - RTL + JMP GetSpritePalette + : CMP.b #$00 : BNE + ; No Bow LDA.b #$08 : RTL + ; Any Bow @@ -326,35 +316,37 @@ IsNarrowSprite: LDA.l BottleLimitReplacement JSL.l IsNarrowSprite JMP .done - + : BRA .continue + + : JMP .continue .notBottle CMP.b #$5E : BNE ++ ; Progressive Sword LDA $7EF359 : CMP.l ProgressiveSwordLimit : !BLT + ; Progressive Sword Limit LDA.l ProgressiveSwordReplacement JSL.l IsNarrowSprite - BRA .done - + : BRA .continue - ++ : CMP.b #$5F : BNE ++ ; Progressive Shield - LDA !PROGRESSIVE_SHIELD : AND #$C0 : BNE + : SEC : BRA .done ; No Shield - LSR #6 : CMP.l ProgressiveShieldLimit : !BLT + ; Progressive Shield Limit + JMP .done + + : JMP .continue + ++ CMP.b #$5F : BNE ++ ; Progressive Shield + LDA !PROGRESSIVE_SHIELD : AND #$C0 : BNE + : SEC : JMP .done ; No Shield + + : LSR #6 : CMP.l ProgressiveShieldLimit : !BLT .continue LDA.l ProgressiveShieldReplacement JSL.l IsNarrowSprite - BRA .done - + - ;LDA $7EF35A : BNE + : SEC : BRA .done : +; No Shield - BRA .false ; Everything Else + JMP .done ++ CMP.b #$60 : BNE ++ ; Progressive Armor - LDA $7EF35B : CMP.l ProgressiveArmorLimit : !BLT + ; Progressive Armor Limit + LDA $7EF35B : CMP.l ProgressiveArmorLimit : !BLT .continue LDA.l ProgressiveArmorReplacement JSL.l IsNarrowSprite - BRA .done + JMP .done + ++ CMP.b #$62 : BNE ++ ; RNG Item (Single) - JSL.l GetRNGItemSingle : BRA .continue + JSL.l GetRNGItemSingle : JMP .continue ++ CMP.b #$63 : BNE ++ ; RNG Item (Multi) JSL.l GetRNGItemMulti - ++ - + ++ CMP.b #$64 : BEQ + ; Progressive Bow + CMP.b #$65 : BNE .continue ; Progressive Bow (alt) + + : LDA $7EF340 : INC : LSR + CMP.l ProgressiveBowLimit : !BLT + + LDA.l ProgressiveBowReplacement + JSL.l IsNarrowSprite + JMP .done .continue ;--------