;================================================================================ ; Dark World Spawn Location Fix & Master Sword Grove Fix ;-------------------------------------------------------------------------------- DarkWorldSaveFix: LDA.b #$70 : PHA : PLB ; thing we wrote over - data bank change JSL MasterSwordFollowerClear JML StatSaveCounter ;-------------------------------------------------------------------------------- DoWorldFix: LDA.l InvertedMode : BEQ + JMP DoWorldFix_Inverted + LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check LDA.l FollowerIndicator : CMP.b #$04 : BEQ .setLightWorld ; check if old man is following LDA.l MirrorEquipment : AND.b #$02 : BEQ .noMirror ; check if we have the mirror .skip_mirror_check ; alt entrance point LDA.l ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive .setLightWorld LDA.b #$00 .noMirror STA.l CurrentWorld ; set flag to light world LDA.l FollowerIndicator : CMP.b #$07 : BNE .done : INC : STA.l FollowerIndicator ; convert frog to dwarf .done RTL ;-------------------------------------------------------------------------------- SetDeathWorldChecked: LDA.l InvertedMode : BEQ + JMP SetDeathWorldChecked_Inverted + LDA.b IndoorsFlag : BEQ .outdoors LDA.w DungeonID : CMP.b #$FF : BNE .dungeon LDA.b RoomIndex : ORA.b RoomIndex+1 : BNE ++ LDA.l GanonPyramidRespawn : BNE .pyramid ; if flag is set, force respawn at pyramid on death to ganon ++ .outdoors JMP DoWorldFix .dungeon LDA.l MosaicLevel : BNE .dontfix ; this is a sanc & quit LDA.l Bugfix_PreAgaDWDungeonDeathToFakeDW : BNE .done ; if the bugfix is enabled, we do nothing on death in dungeon .dontfix JMP DoWorldFix_skip_mirror_check .pyramid LDA.b #$40 : STA.l CurrentWorld ; set flag to dark world LDA.l FollowerIndicator : CMP.b #$08 : BNE .done : DEC : STA.l FollowerIndicator : + ; convert dwarf to frog .done RTL ;================================================================================ DoWorldFix_Inverted: LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check LDA.l FollowerIndicator : CMP.b #$04 : BEQ .setDarkWorld ; check if old man is following LDA.l MirrorEquipment : AND.b #$02 : BEQ .setDarkWorld ; check if we have the mirror .skip_mirror_check ; alt entrance point LDA.l ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive .setDarkWorld LDA.b #$40 : STA.l CurrentWorld ; set flag to dark world LDA.l FollowerIndicator CMP.b #$07 : BEQ .clear ; clear frog CMP.b #$08 : BEQ .clear ; clear dwarf - consider flute implications BRA .done .clear LDA.b #$00 : STA.l FollowerIndicator ; clear follower .done RTL ;-------------------------------------------------------------------------------- SetDeathWorldChecked_Inverted: LDA.b IndoorsFlag : BEQ .outdoors LDA.w DungeonID : CMP.b #$FF : BNE .dungeon LDA.b RoomIndex : ORA.b RoomIndex+1 : BNE ++ LDA.l GanonPyramidRespawn : BNE .castle ; if flag is set, force respawn at pyramid on death to ganon ++ .outdoors JMP DoWorldFix .dungeon LDA.l MosaicLevel : BNE .dontfix ; this is a sanc & quit LDA.l Bugfix_PreAgaDWDungeonDeathToFakeDW : BNE .done ; if the bugfix is enabled, we do nothing on death in dungeon .dontfix JMP DoWorldFix_Inverted_skip_mirror_check .castle LDA.b #$00 : STA.l CurrentWorld ; set flag to dark world LDA.l FollowerIndicator : CMP.b #$07 : BNE + : LDA.b #$08 : STA.l FollowerIndicator : + ; convert frog to dwarf .done RTL ;================================================================================ ;-------------------------------------------------------------------------------- FakeWorldFix: LDA.l FixFakeWorld : BEQ + LDA.b OverworldIndex : AND.b #$40 : STA.l CurrentWorld + RTL ;-------------------------------------------------------------------------------- MasterSwordFollowerClear: LDA.l FollowerIndicator CMP.b #$0E : BNE .exit ; clear master sword follower LDA.b #$00 : STA.l FollowerIndicator ; clear follower .exit RTL ;-------------------------------------------------------------------------------- FixAgahnimFollowers: LDA.b #$00 : STA.l FollowerIndicator ; clear follower JML PrepDungeonExit ; thing we wrote over ;-------------------------------------------------------------------------------- macro SetMinimum(base,filler,compare) LDA.l : !SUB.l : !BLT ?done STA.l ?done: endmacro RefreshRainAmmo: LDA.l ProgressIndicator : CMP.b #$01 : BEQ .rain ; check if we're in rain state RTL .rain LDA.l StartingEntrance + CMP.b #$03 : BNE + ; Uncle %SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Uncle) %SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Uncle) LDA.l ArrowMode : BEQ ++ LDA.l BowEquipment : BEQ +++ ++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Uncle) +++ BRA .done + CMP.b #$02 : BNE + ; Cell %SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Cell) %SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Cell) LDA.l ArrowMode : BEQ ++ LDA.l BowEquipment : BEQ .done ++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Cell) BRA .done + CMP.b #$04 : BNE + ; Mantle %SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Mantle) %SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Mantle) LDA.l ArrowMode : BEQ ++ LDA.l BowEquipment : BEQ .done ++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Mantle) + .done RTL ;-------------------------------------------------------------------------------- SetEscapeAssist: LDA.l ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state .rain LDA.l EscapeAssist BIT.b #$04 : BEQ + : STA.l InfiniteArrows : + BIT.b #$02 : BEQ + : STA.l InfiniteBombs : + BIT.b #$01 : BEQ + : STA.l InfiniteArrows : + BRA ++ .no_train ; choo choo LDA.l EscapeAssist : BIT.b #$04 : BEQ + : LDA.b #$00 : STA.l InfiniteMagic : + LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA.l InfiniteBombs : + LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA.l InfiniteArrows : + ++ RTL ;-------------------------------------------------------------------------------- SetSilverBowMode: LDA.l SilverArrowsUseRestriction : BEQ + ; fix bow type for restricted arrow mode LDA.l BowEquipment : CMP.b #$3 : BCC + SBC.b #$02 : STA.l BowEquipment + RTL ;================================================================================