Another WRAM label pass
Deleted compression.asm
This commit is contained in:
@@ -137,7 +137,6 @@ incsrc goalitem.asm
|
|||||||
incsrc quickswap.asm
|
incsrc quickswap.asm
|
||||||
incsrc endingsequence.asm
|
incsrc endingsequence.asm
|
||||||
incsrc cuccostorm.asm
|
incsrc cuccostorm.asm
|
||||||
incsrc compression.asm
|
|
||||||
incsrc retro.asm
|
incsrc retro.asm
|
||||||
incsrc controllerjank.asm
|
incsrc controllerjank.asm
|
||||||
incsrc boots.asm
|
incsrc boots.asm
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ WhitenLoopReal:
|
|||||||
LDA.l $7EC3F0 : JSL Filter_Majorly_Whiten_Color : STA.l $7EC5F0
|
LDA.l $7EC3F0 : JSL Filter_Majorly_Whiten_Color : STA.l $7EC5F0
|
||||||
LDA.l $7EC3F2 : JSL Filter_Majorly_Whiten_Color : STA.l $7EC5F2
|
LDA.l $7EC3F2 : JSL Filter_Majorly_Whiten_Color : STA.l $7EC5F2
|
||||||
LDA.l $7EC3F4 : JSL Filter_Majorly_Whiten_Color : STA.l $7EC5F4
|
LDA.l $7EC3F4 : JSL Filter_Majorly_Whiten_Color : STA.l $7EC5F4
|
||||||
LDA.b $10 : CMP.w #$0007 : BNE +
|
LDA.b GameMode : CMP.w #$0007 : BNE +
|
||||||
LDA.w $048E
|
LDA.w $048E
|
||||||
CMP.w #$003C : BEQ ++
|
CMP.w #$003C : BEQ ++
|
||||||
CMP.w #$009D : BEQ ++
|
CMP.w #$009D : BEQ ++
|
||||||
@@ -89,7 +89,7 @@ WhitenLoopDummy:
|
|||||||
LDA.l $7EC3F0 : JSL Filter_Majorly_Whiten_Color : LDA.l $7EC5F0
|
LDA.l $7EC3F0 : JSL Filter_Majorly_Whiten_Color : LDA.l $7EC5F0
|
||||||
LDA.l $7EC3F2 : JSL Filter_Majorly_Whiten_Color : LDA.l $7EC5F2
|
LDA.l $7EC3F2 : JSL Filter_Majorly_Whiten_Color : LDA.l $7EC5F2
|
||||||
LDA.l $7EC3F4 : JSL Filter_Majorly_Whiten_Color : LDA.l $7EC5F4
|
LDA.l $7EC3F4 : JSL Filter_Majorly_Whiten_Color : LDA.l $7EC5F4
|
||||||
LDA.b $10 : CMP.w #$0007 : BNE + ; only light invisifloor if we're in dungeon submodule
|
LDA.b GameMode : CMP.w #$0007 : BNE + ; only light invisifloor if we're in dungeon submodule
|
||||||
LDA.w $048E
|
LDA.w $048E
|
||||||
CMP.w #$003C : BEQ ++ ; hookshot cave
|
CMP.w #$003C : BEQ ++ ; hookshot cave
|
||||||
CMP.w #$009D : BEQ ++ ; gt right
|
CMP.w #$009D : BEQ ++ ; gt right
|
||||||
|
|||||||
@@ -3,19 +3,19 @@
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
LoadLibraryItemGFX:
|
LoadLibraryItemGFX:
|
||||||
%GetPossiblyEncryptedItem(LibraryItem, SpriteItemValues)
|
%GetPossiblyEncryptedItem(LibraryItem, SpriteItemValues)
|
||||||
STA.w $0E80, X ; Store item type
|
STA.w SpriteItemType, X ; Store item type
|
||||||
JSL.l PrepDynamicTile
|
JSL.l PrepDynamicTile
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
DrawLibraryItemGFX:
|
DrawLibraryItemGFX:
|
||||||
PHA
|
PHA
|
||||||
LDA.w $0E80, X ; Retrieve stored item type
|
LDA.w SpriteItemType, X ; Retrieve stored item type
|
||||||
JSL.l DrawDynamicTile
|
JSL.l DrawDynamicTile
|
||||||
PLA
|
PLA
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
SetLibraryItem:
|
SetLibraryItem:
|
||||||
LDY.w $0E80, X ; Retrieve stored item type
|
LDY.w SpriteItemType, X ; Retrieve stored item type
|
||||||
JSL.l ItemSet_Library ; contains thing we wrote over
|
JSL.l ItemSet_Library ; contains thing we wrote over
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|||||||
14
boots.asm
14
boots.asm
@@ -8,7 +8,7 @@ ModifyBoots:
|
|||||||
+ : CMP.b #$02 : BNE +
|
+ : CMP.b #$02 : BNE +
|
||||||
PLA : AND.l AbilityFlags : AND.b #$FB : RTL ; no boots
|
PLA : AND.l AbilityFlags : AND.b #$FB : RTL ; no boots
|
||||||
+ : LDA.l FakeBoots : CMP.b #$01 : BNE +
|
+ : LDA.l FakeBoots : CMP.b #$01 : BNE +
|
||||||
LDA.b $5B : BEQ ++ : LDA.b $59 : BNE + ; hover check
|
LDA.b LinkSlipping : BEQ ++ : LDA.b $59 : BNE + ; hover check
|
||||||
++ : PLA : AND.l AbilityFlags : ORA.b #$04 : RTL ; yes boots, not hovering
|
++ : PLA : AND.l AbilityFlags : ORA.b #$04 : RTL ; yes boots, not hovering
|
||||||
+
|
+
|
||||||
PLA
|
PLA
|
||||||
@@ -44,7 +44,7 @@ BonkRockPile:
|
|||||||
LDA.l BootsEquipment : BNE + ; Check for Boots
|
LDA.l BootsEquipment : BNE + ; Check for Boots
|
||||||
LDA.b #$00 : RTL
|
LDA.b #$00 : RTL
|
||||||
+
|
+
|
||||||
LDA.w $02EF : AND.b #$70 ; things we wrote over
|
LDA.w TileActBE : AND.b #$70 ; things we wrote over
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
GravestoneHook:
|
GravestoneHook:
|
||||||
@@ -60,17 +60,17 @@ JumpDownLedge:
|
|||||||
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
||||||
LDA.l BootsEquipment : BNE + ; Check for Boots
|
LDA.l BootsEquipment : BNE + ; Check for Boots
|
||||||
; Disarm Waterwalk
|
; Disarm Waterwalk
|
||||||
LDA.b $5B : CMP.b #$01 : BNE +
|
LDA.b LinkSlipping : CMP.b #$01 : BNE +
|
||||||
STZ.b $5B
|
STZ.b LinkSlipping
|
||||||
+
|
+
|
||||||
LDA.b $1B : BNE .done : LDA.b #$02 : STA.b $EE ; things we wrote over
|
LDA.b IndoorsFlag : BNE .done : LDA.b #$02 : STA.b LinkLayer ; things we wrote over
|
||||||
.done
|
.done
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
BonkRecoil:
|
BonkRecoil:
|
||||||
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
||||||
LDA.l BootsEquipment : BNE + ; Check for Boots
|
LDA.l BootsEquipment : BNE + ; Check for Boots
|
||||||
LDA.b #$16 : STA.b $29 : RTL
|
LDA.b #$16 : STA.b LinkRecoilZ : RTL
|
||||||
+
|
+
|
||||||
LDA.b #$24 : STA.b $29 ; things we wrote over
|
LDA.b #$24 : STA.b LinkRecoilZ ; things we wrote over
|
||||||
RTL
|
RTL
|
||||||
|
|||||||
61
bugfixes.asm
61
bugfixes.asm
@@ -22,7 +22,7 @@ RTL
|
|||||||
;0 = Reset Music
|
;0 = Reset Music
|
||||||
;1 = Don't Reset Music
|
;1 = Don't Reset Music
|
||||||
MSMusicReset:
|
MSMusicReset:
|
||||||
LDA.b $8A : CMP.b #$80 : BNE +
|
LDA.b OverworldIndex : CMP.b #$80 : BNE +
|
||||||
LDA.b $23
|
LDA.b $23
|
||||||
+
|
+
|
||||||
RTL
|
RTL
|
||||||
@@ -46,9 +46,9 @@ RTL
|
|||||||
DecideIfBunnyByScreenIndex:
|
DecideIfBunnyByScreenIndex:
|
||||||
; If indoors we don't have a screen index. Return non-bunny to make mirror-based
|
; If indoors we don't have a screen index. Return non-bunny to make mirror-based
|
||||||
; superbunny work
|
; superbunny work
|
||||||
LDA.b $1B : BNE .done
|
LDA.b IndoorsFlag : BNE .done
|
||||||
LDA.l MoonPearlEquipment : BNE .done
|
LDA.l MoonPearlEquipment : BNE .done
|
||||||
LDA.b $8A : AND.b #$40 : PHA
|
LDA.b OverworldIndex : AND.b #$40 : PHA
|
||||||
LDA.l InvertedMode : BNE .inverted
|
LDA.l InvertedMode : BNE .inverted
|
||||||
.normal
|
.normal
|
||||||
PLA : EOR #$40
|
PLA : EOR #$40
|
||||||
@@ -59,10 +59,10 @@ DecideIfBunnyByScreenIndex:
|
|||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
FixBunnyOnExitToLightWorld:
|
FixBunnyOnExitToLightWorld:
|
||||||
LDA.w $02E0 : BEQ +
|
LDA.w BunnyFlag : BEQ +
|
||||||
JSL.l DecideIfBunny : BEQ +
|
JSL.l DecideIfBunny : BEQ +
|
||||||
STZ.b $5D ; set player mode to Normal
|
STZ.b LinkState ; set player mode to Normal
|
||||||
STZ.w $02E0 : STZ.b $56 ; return player graphics to normal
|
STZ.w BunnyFlag : STZ.b BunnyFlagDP ; return player graphics to normal
|
||||||
+
|
+
|
||||||
RTS
|
RTS
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -80,10 +80,10 @@ FixAga2Bunny:
|
|||||||
++
|
++
|
||||||
JSL DecideIfBunny : BNE +
|
JSL DecideIfBunny : BNE +
|
||||||
JSR MakeBunny
|
JSR MakeBunny
|
||||||
LDA.b #$04 : STA.w $012C ; play bunny music
|
LDA.b #$04 : STA.w MusicControlRequest ; play bunny music
|
||||||
BRA .done
|
BRA .done
|
||||||
+
|
+
|
||||||
LDA.b #$09 : STA.w $012C ; what we wrote over
|
LDA.b #$09 : STA.w MusicControlRequest ; what we wrote over
|
||||||
.done
|
.done
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -91,8 +91,8 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
MakeBunny:
|
MakeBunny:
|
||||||
PHX : PHY
|
PHX : PHY
|
||||||
LDA.b #$17 : STA.b $5D ; set player mode to permabunny
|
LDA.b #$17 : STA.b LinkState ; set player mode to permabunny
|
||||||
LDA.b #$01 : STA.w $02E0 : STA.b $56 ; make player look like bunny
|
LDA.b #$01 : STA.w BunnyFlag : STA.b BunnyFlagDP ; make player look like bunny
|
||||||
JSL LoadGearPalettes_bunny
|
JSL LoadGearPalettes_bunny
|
||||||
PLY : PLX
|
PLY : PLX
|
||||||
RTS
|
RTS
|
||||||
@@ -157,7 +157,7 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; Fix Bunny Palette Map Bug
|
; Fix Bunny Palette Map Bug
|
||||||
LoadGearPalette_safe_for_bunny:
|
LoadGearPalette_safe_for_bunny:
|
||||||
LDA.b $10
|
LDA.b GameMode
|
||||||
CMP.w #$030E : BEQ .new ; opening dungeon map
|
CMP.w #$030E : BEQ .new ; opening dungeon map
|
||||||
CMP.w #$070E : BEQ .new ; opening overworld map
|
CMP.w #$070E : BEQ .new ; opening overworld map
|
||||||
.original
|
.original
|
||||||
@@ -184,15 +184,15 @@ RTL
|
|||||||
; Fix pedestal pull overlay
|
; Fix pedestal pull overlay
|
||||||
PedestalPullOverlayFix:
|
PedestalPullOverlayFix:
|
||||||
LDA.b #$09 : STA.w $039F, X ; the thing we wrote over
|
LDA.b #$09 : STA.w $039F, X ; the thing we wrote over
|
||||||
LDA.b $1B : BNE +
|
LDA.b IndoorsFlag : BNE +
|
||||||
LDA.b $8A : CMP.b #$80 : BNE +
|
LDA.b OverworldIndex : CMP.b #$80 : BNE +
|
||||||
LDA.b $8C : CMP.b #$97
|
LDA.b OverlayID : CMP.b #$97
|
||||||
+
|
+
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
FixJingleGlitch:
|
FixJingleGlitch:
|
||||||
LDA.b $11
|
LDA.b GameSubMode
|
||||||
BEQ .set_doors
|
BEQ .set_doors
|
||||||
|
|
||||||
LDA.l AllowAccidentalMajorGlitch
|
LDA.l AllowAccidentalMajorGlitch
|
||||||
@@ -200,7 +200,7 @@ FixJingleGlitch:
|
|||||||
|
|
||||||
.set_doors
|
.set_doors
|
||||||
LDA.b #$05
|
LDA.b #$05
|
||||||
STA.b $11
|
STA.b GameSubMode
|
||||||
|
|
||||||
.exit
|
.exit
|
||||||
RTL
|
RTL
|
||||||
@@ -216,3 +216,32 @@ SetOverworldTransitionFlags:
|
|||||||
STA.w $0ABF ; used by witch
|
STA.w $0ABF ; used by witch
|
||||||
STA.w $021B ; used by race game
|
STA.w $021B ; used by race game
|
||||||
RTL
|
RTL
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
ParadoxCaveGfxFix:
|
||||||
|
; Always upload line unless you're moving into paradox cave (0x0FF) from above (0x0EF)
|
||||||
|
LDA.b IndoorsFlag : BEQ .uploadLine
|
||||||
|
LDX.b RoomIndex : CPX.w #$00FF : BNE .uploadLine
|
||||||
|
LDX.b PreviousRoom : CPX.w #$00EF : BNE .uploadLine
|
||||||
|
|
||||||
|
;Ignore uploading four specific lines of tiles to VRAM
|
||||||
|
LDX.w $0118
|
||||||
|
; Line 1
|
||||||
|
CPX.w #$1800 : BEQ .skipMostOfLine
|
||||||
|
; Line 2
|
||||||
|
CPX.w #$1A00 : BEQ .skipMostOfLine
|
||||||
|
; Line 3
|
||||||
|
CPX.w #$1C00 : BEQ .uploadLine
|
||||||
|
; Line 4
|
||||||
|
CPX.w #$1E00 : BEQ .uploadLine
|
||||||
|
|
||||||
|
.uploadLine
|
||||||
|
LDA.b #$01 : STA.w MDMAEN
|
||||||
|
|
||||||
|
.skipLine
|
||||||
|
RTL
|
||||||
|
|
||||||
|
.skipMostOfLine
|
||||||
|
; Set line length to 192 bytes (the first 6 8x8 tiles in the line)
|
||||||
|
LDX.w #$00C0 : STX.w DAS0L
|
||||||
|
BRA .uploadLine
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ LoadCatfishItemGFX:
|
|||||||
JML PrepDynamicTile
|
JML PrepDynamicTile
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
DrawThrownItem:
|
DrawThrownItem:
|
||||||
LDA.b $8A : CMP.b #$81 : BNE .catfish
|
LDA.b OverworldIndex : CMP.b #$81 : BNE .catfish
|
||||||
.zora
|
.zora
|
||||||
LDA.b #$01 : STA.l RedrawFlag
|
LDA.b #$01 : STA.l RedrawFlag
|
||||||
LDA.l $1DE1C3 ; location randomizer writes zora item to
|
LDA.l $1DE1C3 ; location randomizer writes zora item to
|
||||||
@@ -18,7 +18,7 @@ DrawThrownItem:
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
MarkThrownItem:
|
MarkThrownItem:
|
||||||
JSL Link_ReceiveItem ; thing we wrote over
|
JSL Link_ReceiveItem ; thing we wrote over
|
||||||
LDA.b $8A : CMP.b #$81 : BNE .catfish
|
LDA.b OverworldIndex : CMP.b #$81 : BNE .catfish
|
||||||
.zora
|
.zora
|
||||||
JML ItemSet_ZoraKing
|
JML ItemSet_ZoraKing
|
||||||
.catfish
|
.catfish
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
DrawDungeonCompassCounts:
|
DrawDungeonCompassCounts:
|
||||||
LDX.b $1B : BNE + : RTL : + ; Skip if outdoors
|
LDX.b IndoorsFlag : BNE + : RTL : + ; Skip if outdoors
|
||||||
|
|
||||||
; extra hard safeties for getting dungeon ID to prevent crashes
|
; extra hard safeties for getting dungeon ID to prevent crashes
|
||||||
PHA
|
PHA
|
||||||
LDA.w $040C : AND.w #$00FE : TAX ; force dungeon ID to be multiple of 2
|
LDA.w DungeonID : AND.w #$00FE : TAX ; force dungeon ID to be multiple of 2
|
||||||
PLA
|
PLA
|
||||||
|
|
||||||
CPX.b #$1B : BCS .done ; Skip if not in a valid dungeon ID
|
CPX.b #$1B : BCS .done ; Skip if not in a valid dungeon ID
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
;--------------------------------------------------------------------------------
|
|
||||||
ParadoxCaveGfxFix:
|
|
||||||
; Always upload line unless you're moving into paradox cave (0x0FF) from above (0x0EF)
|
|
||||||
LDA.b $1B : BEQ .uploadLine
|
|
||||||
LDX.b RoomIndex : CPX.w #$00FF : BNE .uploadLine
|
|
||||||
LDX.b $A2 : CPX.w #$00EF : BNE .uploadLine
|
|
||||||
|
|
||||||
;Ignore uploading four specific lines of tiles to VRAM
|
|
||||||
LDX.w $0118
|
|
||||||
; Line 1
|
|
||||||
CPX.w #$1800 : BEQ .skipMostOfLine
|
|
||||||
; Line 2
|
|
||||||
CPX.w #$1A00 : BEQ .skipMostOfLine
|
|
||||||
; Line 3
|
|
||||||
CPX.w #$1C00 : BEQ .uploadLine
|
|
||||||
; Line 4
|
|
||||||
CPX.w #$1E00 : BEQ .uploadLine
|
|
||||||
|
|
||||||
.uploadLine
|
|
||||||
LDA.b #$01 : STA.w MDMAEN
|
|
||||||
|
|
||||||
.skipLine
|
|
||||||
RTL
|
|
||||||
|
|
||||||
.skipMostOfLine
|
|
||||||
; Set line length to 192 bytes (the first 6 8x8 tiles in the line)
|
|
||||||
LDX.w #$00C0 : STX.w DAS0L
|
|
||||||
BRA .uploadLine
|
|
||||||
;--------------------------------------------------------------------------------
|
|
||||||
@@ -9,7 +9,7 @@ CuccoStorm:
|
|||||||
|
|
||||||
SEP #$30 ; set 8-bit accumulator index registers
|
SEP #$30 ; set 8-bit accumulator index registers
|
||||||
LDA.l CuccoStormer : BEQ + ; only if storm is on
|
LDA.l CuccoStormer : BEQ + ; only if storm is on
|
||||||
LDA.b $10 : CMP.b #$09 : BNE + ; only if outdoors
|
LDA.b GameMode : CMP.b #$09 : BNE + ; only if outdoors
|
||||||
LDA.l LoopFrames : AND.b #$7F : BNE + ; check every 128 frames
|
LDA.l LoopFrames : AND.b #$7F : BNE + ; check every 128 frames
|
||||||
|
|
||||||
-
|
-
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ SetDeathWorldChecked:
|
|||||||
LDA.l InvertedMode : BEQ +
|
LDA.l InvertedMode : BEQ +
|
||||||
JMP SetDeathWorldChecked_Inverted
|
JMP SetDeathWorldChecked_Inverted
|
||||||
+
|
+
|
||||||
LDA.b $1B : BEQ .outdoors
|
LDA.b IndoorsFlag : BEQ .outdoors
|
||||||
LDA.w $040C : CMP.b #$FF : BNE .dungeon
|
LDA.w DungeonID : CMP.b #$FF : BNE .dungeon
|
||||||
LDA.b RoomIndex : ORA.b RoomIndex+1 : BNE ++
|
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
|
LDA.l GanonPyramidRespawn : BNE .pyramid ; if flag is set, force respawn at pyramid on death to ganon
|
||||||
++
|
++
|
||||||
@@ -63,8 +63,8 @@ DoWorldFix_Inverted:
|
|||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
SetDeathWorldChecked_Inverted:
|
SetDeathWorldChecked_Inverted:
|
||||||
LDA.b $1B : BEQ .outdoors
|
LDA.b IndoorsFlag : BEQ .outdoors
|
||||||
LDA.w $040C : CMP.b #$FF : BNE .dungeon
|
LDA.w DungeonID : CMP.b #$FF : BNE .dungeon
|
||||||
LDA.b RoomIndex : ORA.b RoomIndex+1 : BNE ++
|
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
|
LDA.l GanonPyramidRespawn : BNE .castle ; if flag is set, force respawn at pyramid on death to ganon
|
||||||
++
|
++
|
||||||
@@ -86,7 +86,7 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
FakeWorldFix:
|
FakeWorldFix:
|
||||||
LDA.l FixFakeWorld : BEQ +
|
LDA.l FixFakeWorld : BEQ +
|
||||||
LDA.b $8A : AND.b #$40 : STA.l CurrentWorld
|
LDA.b OverworldIndex : AND.b #$40 : STA.l CurrentWorld
|
||||||
+
|
+
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|||||||
65
dialog.asm
65
dialog.asm
@@ -6,11 +6,11 @@ DialogOverride:
|
|||||||
LDA.l DialogBuffer, X ; use alternate buffer
|
LDA.l DialogBuffer, X ; use alternate buffer
|
||||||
RTL
|
RTL
|
||||||
.skip
|
.skip
|
||||||
LDA.l $7F1200, X
|
LDA.l DecompressionBuffer+$1200, X
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
ResetDialogPointer:
|
ResetDialogPointer:
|
||||||
STZ.w $1CF0 : STZ.w $1CF1 ; reset decompression buffer
|
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
|
||||||
LDA.b #$00 : STA.l AltTextFlag ; zero out the alternate flag
|
LDA.b #$00 : STA.l AltTextFlag ; zero out the alternate flag
|
||||||
LDA.b #$1C : STA.w $1CE9 ; thing we wrote over
|
LDA.b #$1C : STA.w $1CE9 ; thing we wrote over
|
||||||
RTL
|
RTL
|
||||||
@@ -23,7 +23,7 @@ macro LoadDialogAddress(address)
|
|||||||
REP #$10 ; set 16-bit index registers
|
REP #$10 ; set 16-bit index registers
|
||||||
PEI.b ($00)
|
PEI.b ($00)
|
||||||
LDA.b Scrap02 : PHA
|
LDA.b Scrap02 : PHA
|
||||||
STZ.w $1CF0 : STZ.w $1CF1 ; reset decompression buffer
|
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
|
||||||
LDA.b #$01 : STA.l AltTextFlag ; set flag
|
LDA.b #$01 : STA.l AltTextFlag ; set flag
|
||||||
%CopyDialog(<address>)
|
%CopyDialog(<address>)
|
||||||
PLA : STA.b Scrap02
|
PLA : STA.b Scrap02
|
||||||
@@ -55,7 +55,7 @@ macro CopyDialogIndirect()
|
|||||||
endmacro
|
endmacro
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
LoadDialogAddressIndirect:
|
LoadDialogAddressIndirect:
|
||||||
STZ.w $1CF0 : STZ.w $1CF1 ; reset decompression buffer
|
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
|
||||||
LDA.b #$01 : STA.l AltTextFlag ; set flag
|
LDA.b #$01 : STA.l AltTextFlag ; set flag
|
||||||
%CopyDialogIndirect()
|
%CopyDialogIndirect()
|
||||||
RTL
|
RTL
|
||||||
@@ -119,7 +119,6 @@ FreeDungeonItemNotice:
|
|||||||
LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
|
LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
|
||||||
LDA.w ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++
|
LDA.w ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++
|
||||||
%CopyDialog(Notice_SmallKeyOf)
|
%CopyDialog(Notice_SmallKeyOf)
|
||||||
PLA : AND.b #$0F : STA.w ScratchBufferV : LDA.b #$0F : !SUB.w ScratchBufferV : PHA
|
|
||||||
LDA.b #$01 : STA.w ScratchBufferNV ; set up a flip for small keys
|
LDA.b #$01 : STA.w ScratchBufferNV ; set up a flip for small keys
|
||||||
BRA .dungeon
|
BRA .dungeon
|
||||||
+
|
+
|
||||||
@@ -170,7 +169,7 @@ FreeDungeonItemNotice:
|
|||||||
+
|
+
|
||||||
.done
|
.done
|
||||||
|
|
||||||
STZ.w $1CF0 : STZ.w $1CF1 ; reset decompression buffer
|
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
|
||||||
LDA.b #$01 : STA.l AltTextFlag ; set alternate dialog flag
|
LDA.b #$01 : STA.l AltTextFlag ; set alternate dialog flag
|
||||||
STA.l TextBoxDefer
|
STA.l TextBoxDefer
|
||||||
|
|
||||||
@@ -211,7 +210,7 @@ DialogFairyThrow:
|
|||||||
ORA.l BottleContentsTwo : ORA.l BottleContentsThree : ORA.l BottleContentsFour : BNE .normal
|
ORA.l BottleContentsTwo : ORA.l BottleContentsThree : ORA.l BottleContentsFour : BNE .normal
|
||||||
|
|
||||||
.noInventory
|
.noInventory
|
||||||
LDA.w $0D80, X : !ADD #$08 : STA.w $0D80, X
|
LDA.w SpriteUnknown, X : !ADD #$08 : STA.w SpriteUnknown, X
|
||||||
LDA.b #$51
|
LDA.b #$51
|
||||||
LDY.b #$01
|
LDY.b #$01
|
||||||
RTL
|
RTL
|
||||||
@@ -226,7 +225,7 @@ DialogGanon1:
|
|||||||
LDA.w #$018C
|
LDA.w #$018C
|
||||||
BCC +
|
BCC +
|
||||||
LDA.w #$016D
|
LDA.w #$016D
|
||||||
+ STA.w $1CF0
|
+ STA.w TextID
|
||||||
SEP #$20
|
SEP #$20
|
||||||
JSL.l Sprite_ShowMessageMinimal_Alt
|
JSL.l Sprite_ShowMessageMinimal_Alt
|
||||||
RTL
|
RTL
|
||||||
@@ -262,18 +261,18 @@ DialogGanon2:
|
|||||||
+
|
+
|
||||||
LDA.w #$016E
|
LDA.w #$016E
|
||||||
++
|
++
|
||||||
STA.w $1CF0
|
STA.w TextID
|
||||||
SEP #$20
|
SEP #$20
|
||||||
JSL.l Sprite_ShowMessageMinimal_Alt
|
JSL.l Sprite_ShowMessageMinimal_Alt
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
DialogEtherTablet:
|
DialogEtherTablet:
|
||||||
PHA
|
PHA
|
||||||
LDA.w $0202 : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped
|
LDA.w ItemCursor : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped
|
||||||
-
|
-
|
||||||
PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text
|
PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text
|
||||||
+
|
+
|
||||||
BIT $F4 : BVC - ; Show normal text if Y is not pressed
|
BIT.b Joy1A_New : BVC - ; Show normal text if Y is not pressed
|
||||||
LDA.l AllowHammerTablets : BEQ ++
|
LDA.l AllowHammerTablets : BEQ ++
|
||||||
LDA.l HammerEquipment : BEQ .yesText : BRA .noText
|
LDA.l HammerEquipment : BEQ .yesText : BRA .noText
|
||||||
++
|
++
|
||||||
@@ -291,11 +290,11 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
DialogBombosTablet:
|
DialogBombosTablet:
|
||||||
PHA
|
PHA
|
||||||
LDA.w $0202 : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped
|
LDA.w ItemCursor : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped
|
||||||
-
|
-
|
||||||
PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text
|
PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text
|
||||||
+
|
+
|
||||||
BIT $F4 : BVC - ; Show normal text if Y is not pressed
|
BIT.b Joy1A_New : BVC - ; Show normal text if Y is not pressed
|
||||||
LDA.l AllowHammerTablets : BEQ ++
|
LDA.l AllowHammerTablets : BEQ ++
|
||||||
LDA.l HammerEquipment : BEQ .yesText : BRA .noText
|
LDA.l HammerEquipment : BEQ .yesText : BRA .noText
|
||||||
++
|
++
|
||||||
@@ -339,16 +338,16 @@ AgahnimAsksAboutPed:
|
|||||||
BNE .vanilla
|
BNE .vanilla
|
||||||
|
|
||||||
LDA.b #$8C ; message 018C for no ped
|
LDA.b #$8C ; message 018C for no ped
|
||||||
STA.w $1CF0
|
STA.w TextID
|
||||||
|
|
||||||
.vanilla
|
.vanilla
|
||||||
JML $05FA8E ; Sprite_ShowMessageMinimal
|
JML $05FA8E ; Sprite_ShowMessageMinimal
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
Main_ShowTextMessage_Alt:
|
Main_ShowTextMessage_Alt:
|
||||||
; Are we in text mode? If so then end the routine.
|
; Are we in text mode? If so then end the routine.
|
||||||
LDA.b $10 : CMP.b #$0E : BEQ .already_in_text_mode
|
LDA.b GameMode : CMP.b #$0E : BEQ .already_in_text_mode
|
||||||
Sprite_ShowMessageMinimal_Alt:
|
Sprite_ShowMessageMinimal_Alt:
|
||||||
STZ.b $11
|
STZ.b GameSubMode
|
||||||
|
|
||||||
PHX : PHY
|
PHX : PHY
|
||||||
PEI.b (Scrap00)
|
PEI.b (Scrap00)
|
||||||
@@ -356,7 +355,7 @@ Sprite_ShowMessageMinimal_Alt:
|
|||||||
|
|
||||||
LDA.b #$1C : STA.b Scrap02
|
LDA.b #$1C : STA.b Scrap02
|
||||||
REP #$30
|
REP #$30
|
||||||
LDA.w $1CF0 : ASL : TAX
|
LDA.w TextID : ASL : TAX
|
||||||
LDA.l $7F71C0, X
|
LDA.l $7F71C0, X
|
||||||
STA.b Scrap00
|
STA.b Scrap00
|
||||||
SEP #$30
|
SEP #$30
|
||||||
@@ -376,13 +375,13 @@ Sprite_ShowMessageMinimal_Alt:
|
|||||||
STZ.w $1CD8 ; Initialize the step in the submodule
|
STZ.w $1CD8 ; Initialize the step in the submodule
|
||||||
|
|
||||||
; Go to text display mode (as opposed to maps, etc)
|
; Go to text display mode (as opposed to maps, etc)
|
||||||
LDA.b #$02 : STA.b $11
|
LDA.b #$02 : STA.b GameSubMode
|
||||||
|
|
||||||
; Store the current module in the temporary location.
|
; Store the current module in the temporary location.
|
||||||
LDA.b $10 : STA.w $010C
|
LDA.b GameMode : STA.w GameModeCache
|
||||||
|
|
||||||
; Switch the main module ($10) to text mode.
|
; Switch the main module ($10) to text mode.
|
||||||
LDA.b #$0E : STA.b $10
|
LDA.b #$0E : STA.b GameMode
|
||||||
.end
|
.end
|
||||||
PLA : STA.b Scrap02
|
PLA : STA.b Scrap02
|
||||||
PLA : STA.b Scrap01
|
PLA : STA.b Scrap01
|
||||||
@@ -398,15 +397,15 @@ CalculateSignIndex:
|
|||||||
; And we do this in a way that will likely give the right value even
|
; And we do this in a way that will likely give the right value even
|
||||||
; with major glitches.
|
; with major glitches.
|
||||||
|
|
||||||
LDA.b $8A : ASL A : TAY ;what we wrote over
|
LDA.b OverworldIndex : ASL A : TAY ;what we wrote over
|
||||||
|
|
||||||
LDA.w $0712 : BEQ .done ; If a small map, we can skip these calculations.
|
LDA.w $0712 : BEQ .done ; If a small map, we can skip these calculations.
|
||||||
|
|
||||||
LDA.b $21 : AND.w #$0002 : ASL #2 : EOR $8A : AND.w #$0008 : BEQ +
|
LDA.b $21 : AND.w #$0002 : ASL #2 : EOR.b OverworldIndex : AND.w #$0008 : BEQ +
|
||||||
TYA : !ADD.w #$0010 : TAY ;add 16 if we are in lower half of big screen.
|
TYA : !ADD.w #$0010 : TAY ;add 16 if we are in lower half of big screen.
|
||||||
+
|
+
|
||||||
|
|
||||||
LDA.b $23 : AND.w #$0002 : LSR : EOR.b $8A : AND.w #$0001 : BEQ +
|
LDA.b $23 : AND.w #$0002 : LSR : EOR.b OverworldIndex : AND.w #$0001 : BEQ +
|
||||||
TYA : INC #2 : TAY ;add 16 if we are in lower half of big screen.
|
TYA : INC #2 : TAY ;add 16 if we are in lower half of big screen.
|
||||||
+
|
+
|
||||||
; ensure even if things go horribly wrong, we don't read the sign out of bounds and crash:
|
; ensure even if things go horribly wrong, we don't read the sign out of bounds and crash:
|
||||||
@@ -420,26 +419,26 @@ RTL
|
|||||||
;================================================================
|
;================================================================
|
||||||
Sprite_ShowSolicitedMessageIfPlayerFacing_Alt:
|
Sprite_ShowSolicitedMessageIfPlayerFacing_Alt:
|
||||||
{
|
{
|
||||||
STA.w $1CF0
|
STA.w TextID
|
||||||
STY.w $1CF1
|
STY.w TextID+1
|
||||||
|
|
||||||
JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
||||||
JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
||||||
|
|
||||||
LDA.b $F6 : BPL .alpha
|
LDA.b Joy1B_New : BPL .alpha
|
||||||
LDA.w $0F10, X : BNE .alpha
|
LDA.w $0F10, X : BNE .alpha
|
||||||
LDA.b $4D : CMP.b #$02 : BEQ .alpha
|
LDA.b LinkJumping : CMP.b #$02 : BEQ .alpha
|
||||||
|
|
||||||
JSL Sprite_DirectionToFacePlayerLong : PHX : TYX
|
JSL Sprite_DirectionToFacePlayerLong : PHX : TYX
|
||||||
|
|
||||||
; Make sure that the sprite is facing towards the player, otherwise
|
; Make sure that the sprite is facing towards the player, otherwise
|
||||||
; talking can't happen. (What sprites actually use this???)
|
; talking can't happen. (What sprites actually use this???)
|
||||||
LDA.l $05E1A3, X : PLX : CMP.b $2F : BNE .not_facing_each_other
|
LDA.l $05E1A3, X : PLX : CMP.b LinkDirection : BNE .not_facing_each_other
|
||||||
|
|
||||||
PHY
|
PHY
|
||||||
|
|
||||||
LDA.w $1CF0
|
LDA.w TextID
|
||||||
LDY.w $1CF1
|
LDY.w TextID+1
|
||||||
|
|
||||||
; Check what room we're in so we know which npc we're talking to
|
; Check what room we're in so we know which npc we're talking to
|
||||||
LDA.b RoomIndex
|
LDA.b RoomIndex
|
||||||
@@ -483,15 +482,15 @@ Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage:
|
|||||||
JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
||||||
JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
||||||
|
|
||||||
LDA.b $F6 : BPL .alpha
|
LDA.b Joy1B_New : BPL .alpha
|
||||||
LDA.w $0F10, X : BNE .alpha
|
LDA.w $0F10, X : BNE .alpha
|
||||||
LDA.b $4D : CMP.b #$02 : BEQ .alpha
|
LDA.b LinkJumping : CMP.b #$02 : BEQ .alpha
|
||||||
|
|
||||||
JSL Sprite_DirectionToFacePlayerLong : PHX : TYX
|
JSL Sprite_DirectionToFacePlayerLong : PHX : TYX
|
||||||
|
|
||||||
; Make sure that the sprite is facing towards the player, otherwise
|
; Make sure that the sprite is facing towards the player, otherwise
|
||||||
; talking can't happen. (What sprites actually use this???)
|
; talking can't happen. (What sprites actually use this???)
|
||||||
LDA.l $05E1A3, X : PLX : CMP.b $2F : BNE .not_facing_each_other
|
LDA.l $05E1A3, X : PLX : CMP.b LinkDirection : BNE .not_facing_each_other
|
||||||
|
|
||||||
PLA : XBA : PLA
|
PLA : XBA : PLA
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
; Dungeon & Boss Drop Fixes
|
; Dungeon & Boss Drop Fixes
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
DropSafeDungeon:
|
DropSafeDungeon:
|
||||||
LDA.w $040C : CMP.b #$08 : BEQ +
|
LDA.w DungeonID : CMP.b #$08 : BEQ +
|
||||||
LDA.l $01C6FC, X : JML Sprite_SpawnFallingItem
|
LDA.l $01C6FC, X : JML Sprite_SpawnFallingItem
|
||||||
+
|
+
|
||||||
RTL
|
RTL
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ DoDungeonMapBossIcon:
|
|||||||
|
|
||||||
.dungeonmap
|
.dungeonmap
|
||||||
|
|
||||||
LDX.w $040C
|
LDX.w DungeonID
|
||||||
BMI .cave
|
BMI .cave
|
||||||
|
|
||||||
; get dungeon boss room
|
; get dungeon boss room
|
||||||
|
|||||||
10
elder.asm
10
elder.asm
@@ -1,6 +1,6 @@
|
|||||||
NewElderCode:
|
NewElderCode:
|
||||||
{
|
{
|
||||||
LDA.b $8A : CMP.b #$1B : BEQ .newCodeContinue
|
LDA.b OverworldIndex : CMP.b #$1B : BEQ .newCodeContinue
|
||||||
;Restore Jump we can keep the RTL so JML
|
;Restore Jump we can keep the RTL so JML
|
||||||
JML $05F0CD
|
JML $05F0CD
|
||||||
.newCodeContinue
|
.newCodeContinue
|
||||||
@@ -19,7 +19,7 @@ RTL
|
|||||||
|
|
||||||
LDA.b #$02 : STA.b Scrap06 : STZ.b Scrap07 ;Number of Tiles
|
LDA.b #$02 : STA.b Scrap06 : STZ.b Scrap07 ;Number of Tiles
|
||||||
|
|
||||||
LDA.w $0DC0, X : ASL #04
|
LDA.w SpriteGFXControl, X : ASL #04
|
||||||
|
|
||||||
ADC.b #.animation_states : STA.b Scrap08
|
ADC.b #.animation_states : STA.b Scrap08
|
||||||
LDA.b #.animation_states>>8 : ADC.b #$00 : STA.b Scrap09
|
LDA.b #.animation_states>>8 : ADC.b #$00 : STA.b Scrap09
|
||||||
@@ -46,11 +46,11 @@ RTL
|
|||||||
LDA.l TurnInGoalItems : AND.w #$00FF : BNE +
|
LDA.l TurnInGoalItems : AND.w #$00FF : BNE +
|
||||||
.despawn
|
.despawn
|
||||||
SEP #$20
|
SEP #$20
|
||||||
STZ.w $0DD0, X ; despawn self
|
STZ.w SpriteAITable, X ; despawn self
|
||||||
RTS
|
RTS
|
||||||
+
|
+
|
||||||
SEP #$20
|
SEP #$20
|
||||||
LDA.b $11
|
LDA.b GameSubMode
|
||||||
BNE .done
|
BNE .done
|
||||||
LDA.b #$96
|
LDA.b #$96
|
||||||
LDY.b #$01
|
LDY.b #$01
|
||||||
@@ -66,6 +66,6 @@ RTL
|
|||||||
|
|
||||||
.done
|
.done
|
||||||
SEP #$20
|
SEP #$20
|
||||||
LDA.b $1A : LSR #5 : AND.b #$01 : STA.w $0DC0, X
|
LDA.b FrameCounter : LSR #5 : AND.b #$01 : STA.w SpriteGFXControl, X
|
||||||
RTS
|
RTS
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -149,10 +149,10 @@ JML.l AllowStartFromExitReturn
|
|||||||
LDA.l $02D8D3, X : STA.b RoomIndex+1
|
LDA.l $02D8D3, X : STA.b RoomIndex+1
|
||||||
|
|
||||||
; Go to pre-overworld mode
|
; Go to pre-overworld mode
|
||||||
LDA.b #$08 : STA.b $10
|
LDA.b #$08 : STA.b GameMode
|
||||||
|
|
||||||
STZ.b $11
|
STZ.b GameSubMode
|
||||||
STZ.b $B0
|
STZ.b SubSubModule
|
||||||
|
|
||||||
STZ.w $010A
|
STZ.w $010A
|
||||||
|
|
||||||
@@ -168,7 +168,7 @@ CheckHole:
|
|||||||
.nextHoleClassic
|
.nextHoleClassic
|
||||||
LDA.b Scrap00 : CMP.l $1BB800, X
|
LDA.b Scrap00 : CMP.l $1BB800, X
|
||||||
BNE .wrongMap16Classic
|
BNE .wrongMap16Classic
|
||||||
LDA.w $040A : CMP.l $1BB826, X
|
LDA.b OverworldIndex : CMP.l $1BB826, X
|
||||||
BEQ .matchedHoleClassic
|
BEQ .matchedHoleClassic
|
||||||
.wrongMap16Classic
|
.wrongMap16Classic
|
||||||
DEX #2 : BPL .nextHoleClassic
|
DEX #2 : BPL .nextHoleClassic
|
||||||
@@ -177,7 +177,7 @@ CheckHole:
|
|||||||
.nextHoleExtra
|
.nextHoleExtra
|
||||||
LDA.b Scrap00 : CMP.l ExtraHole_Map16, X
|
LDA.b Scrap00 : CMP.l ExtraHole_Map16, X
|
||||||
BNE .wrongMap16Extra
|
BNE .wrongMap16Extra
|
||||||
LDA.w $040A : CMP.l ExtraHole_Area, X
|
LDA.b OverworldIndex : CMP.l ExtraHole_Area, X
|
||||||
BEQ .matchedHoleExtra
|
BEQ .matchedHoleExtra
|
||||||
.wrongMap16Extra
|
.wrongMap16Extra
|
||||||
DEX #2 : BPL .nextHoleExtra
|
DEX #2 : BPL .nextHoleExtra
|
||||||
@@ -194,8 +194,8 @@ JML Overworld_Hole_End
|
|||||||
PreventEnterOnBonk:
|
PreventEnterOnBonk:
|
||||||
STA.b Scrap00 ; part of what we wrote over
|
STA.b Scrap00 ; part of what we wrote over
|
||||||
LDA.l InvertedMode : AND.w #$00FF : BEQ .done
|
LDA.l InvertedMode : AND.w #$00FF : BEQ .done
|
||||||
LDA.l $5D : AND.w #$00FF : CMP.w #$0014 : BNE .done ;in mirror mode?
|
LDA.b LinkState : AND.w #$00FF : CMP.w #$0014 : BNE .done ;in mirror mode?
|
||||||
LDA.b $8A : AND.w #$0040 : CMP.b $7B : BEQ .done ; Are we bonking, or doing the superbunny glitch?
|
LDA.b OverworldIndex : AND.w #$0040 : CMP.b $7B : BEQ .done ; Are we bonking, or doing the superbunny glitch?
|
||||||
|
|
||||||
; If in inverted, are in mirror mode, and are bonking then do not enter
|
; If in inverted, are in mirror mode, and are bonking then do not enter
|
||||||
JML.l PreventEnterOnBonk_BRANCH_IX
|
JML.l PreventEnterOnBonk_BRANCH_IX
|
||||||
@@ -206,7 +206,7 @@ JML.l PreventEnterOnBonk_return
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
TurtleRockEntranceFix:
|
TurtleRockEntranceFix:
|
||||||
LDA.l TurtleRockAutoOpenFix : BEQ .done
|
LDA.l TurtleRockAutoOpenFix : BEQ .done
|
||||||
LDA.b $8A : CMP.b #$47 : BNE .done
|
LDA.b OverworldIndex : CMP.b #$47 : BNE .done
|
||||||
;If exiting to turtle rock ensure the entrance is open
|
;If exiting to turtle rock ensure the entrance is open
|
||||||
LDA.l OverworldEventDataWRAM+$47 : ORA.b #$20 : STA.l OverworldEventDataWRAM+$47
|
LDA.l OverworldEventDataWRAM+$47 : ORA.b #$20 : STA.l OverworldEventDataWRAM+$47
|
||||||
.done
|
.done
|
||||||
@@ -215,14 +215,14 @@ RTL
|
|||||||
AnimatedEntranceFix: ;when an entrance animation tries to start
|
AnimatedEntranceFix: ;when an entrance animation tries to start
|
||||||
PHA
|
PHA
|
||||||
LDA.l InvertedMode : BEQ + ;If we are in inverted mode
|
LDA.l InvertedMode : BEQ + ;If we are in inverted mode
|
||||||
LDA.b $8A : AND.b #$40 : BNE + ;and in the light world
|
LDA.b OverworldIndex : AND.b #$40 : BNE + ;and in the light world
|
||||||
PLA
|
PLA
|
||||||
STZ.w $04C6 ; skip it.
|
STZ.w OWEntranceCutscene ; skip it.
|
||||||
LDA.b #$00
|
LDA.b #$00
|
||||||
RTL
|
RTL
|
||||||
+
|
+
|
||||||
PLA
|
PLA
|
||||||
STA.w $02E4 ;what we wrote over
|
STA.w CutsceneFlag ;what we wrote over
|
||||||
STA.w $0FC1 ;what we wrote over
|
STA.w FreezeSprites ;what we wrote over
|
||||||
STA.w $0710 ;what we wrote over
|
STA.w SkipOAM ;what we wrote over
|
||||||
RTL
|
RTL
|
||||||
|
|||||||
44
events.asm
44
events.asm
@@ -1,5 +1,5 @@
|
|||||||
OnPrepFileSelect:
|
OnPrepFileSelect:
|
||||||
LDA.b $11 : CMP.b #$03 : BNE +
|
LDA.b GameSubMode : CMP.b #$03 : BNE +
|
||||||
LDA.b #$06 : STA.b $14 ; thing we wrote over
|
LDA.b #$06 : STA.b $14 ; thing we wrote over
|
||||||
RTL
|
RTL
|
||||||
+
|
+
|
||||||
@@ -33,7 +33,7 @@ OnDungeonExit:
|
|||||||
JSL.l SQEGFix
|
JSL.l SQEGFix
|
||||||
PLP : PLA
|
PLP : PLA
|
||||||
|
|
||||||
STA.w $040C : STZ.w $04AC ; thing we wrote over
|
STA.w DungeonID : STZ.w $04AC ; thing we wrote over
|
||||||
|
|
||||||
PHA : PHP
|
PHA : PHP
|
||||||
JSL.l HUD_RebuildLong
|
JSL.l HUD_RebuildLong
|
||||||
@@ -84,15 +84,15 @@ OnFileCreation:
|
|||||||
; Copy initial SRAM state from ROM to cart SRAM
|
; Copy initial SRAM state from ROM to cart SRAM
|
||||||
; If the inital SRAM table is move these addresses must be changed
|
; If the inital SRAM table is move these addresses must be changed
|
||||||
PHB
|
PHB
|
||||||
LDA.w #$03D7 ; \
|
LDA.w #$03D7 ; \
|
||||||
LDX.w #$B000 ; | Copies from beginning of inital sram table up to file name
|
LDX.w #$B000 ; | Copies from beginning of inital sram table up to file name
|
||||||
LDY.w #$0000 ; | (exclusively)
|
LDY.w #$0000 ; | (exclusively)
|
||||||
MVN SRAMBank, SRAMTableBank ; /
|
MVN !SRAMBank, !SRAMTableBank ; /
|
||||||
; Skip file name and validity value
|
; Skip file name and validity value
|
||||||
LDA.w #$010C ; \
|
LDA.w #$010C ; \
|
||||||
LDX.w #$B3E3 ; | Rando-Specific Assignments & Game Stats block
|
LDX.w #$B3E3 ; | Rando-Specific Assignments & Game Stats block
|
||||||
LDY.w #$03E3 ; |
|
LDY.w #$03E3 ; |
|
||||||
MVN SRAMBank, SRAMTableBank ; /
|
MVN !SRAMBank, !SRAMTableBank ; /
|
||||||
PLB
|
PLB
|
||||||
|
|
||||||
; resolve instant post-aga if standard
|
; resolve instant post-aga if standard
|
||||||
@@ -104,7 +104,7 @@ OnFileCreation:
|
|||||||
REP #$20
|
REP #$20
|
||||||
|
|
||||||
; Set validity value and do some cleanup. Jump to checksum.
|
; Set validity value and do some cleanup. Jump to checksum.
|
||||||
LDA.w #$55AA : STA.l $7003E1
|
LDA.w #$55AA : STA.l FileValiditySRAM
|
||||||
STZ.b Scrap00
|
STZ.b Scrap00
|
||||||
STZ.b Scrap01
|
STZ.b Scrap01
|
||||||
LDX.b Scrap00
|
LDX.b Scrap00
|
||||||
@@ -167,7 +167,6 @@ RTL
|
|||||||
OnLinkDamaged:
|
OnLinkDamaged:
|
||||||
JSL.l IncrementDamageTakenCounter_Arb
|
JSL.l IncrementDamageTakenCounter_Arb
|
||||||
JML.l OHKOTimer
|
JML.l OHKOTimer
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
;OnEnterWater:
|
;OnEnterWater:
|
||||||
; JSL.l UnequipCapeQuiet ; what we wrote over
|
; JSL.l UnequipCapeQuiet ; what we wrote over
|
||||||
@@ -178,18 +177,17 @@ OnLinkDamagedFromPit:
|
|||||||
|
|
||||||
LDA.l AllowAccidentalMajorGlitch
|
LDA.l AllowAccidentalMajorGlitch
|
||||||
BEQ ++
|
BEQ ++
|
||||||
-- LDA.b #$14 : STA.b $11 ; thing we wrote over
|
-- LDA.b #$14 : STA.b GameSubMode ; thing we wrote over
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
++ LDA.b $10 : CMP.b #$12 : BNE --
|
++ LDA.b GameMode : CMP.b #$12 : BNE --
|
||||||
|
|
||||||
STZ.b $11
|
STZ.b GameSubMode
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
OnLinkDamagedFromPitOutdoors:
|
OnLinkDamagedFromPitOutdoors:
|
||||||
JML.l OHKOTimer ; make sure this is last
|
JML.l OHKOTimer ; make sure this is last
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
OnOWTransition:
|
OnOWTransition:
|
||||||
JSL.l FloodGateReset
|
JSL.l FloodGateReset
|
||||||
@@ -204,13 +202,11 @@ OnLoadDuckMap:
|
|||||||
LDA.l DuckMapFlag
|
LDA.l DuckMapFlag
|
||||||
BNE +
|
BNE +
|
||||||
INC : STA.l DuckMapFlag
|
INC : STA.l DuckMapFlag
|
||||||
JSL OverworldMap_InitGfx : DEC $0200
|
JSL OverworldMap_InitGfx : DEC.w SubModuleInterface
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
+
|
+
|
||||||
LDA.b #$00 : STA.l DuckMapFlag
|
LDA.b #$00 : STA.l DuckMapFlag
|
||||||
JML OverworldMap_DarkWorldTilemap
|
JML OverworldMap_DarkWorldTilemap
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
PreItemGet:
|
PreItemGet:
|
||||||
LDA.b #$01 : STA.l BusyItem ; mark item as busy
|
LDA.b #$01 : STA.l BusyItem ; mark item as busy
|
||||||
@@ -224,16 +220,16 @@ PostItemAnimation:
|
|||||||
LDA.b #$00 : STA.l BusyItem ; mark item as finished
|
LDA.b #$00 : STA.l BusyItem ; mark item as finished
|
||||||
|
|
||||||
LDA.l TextBoxDefer : BEQ +
|
LDA.l TextBoxDefer : BEQ +
|
||||||
STZ.w $1CF0 : STZ.w $1CF1 ; reset decompression buffer
|
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
|
||||||
JSL.l Main_ShowTextMessage_Alt
|
JSL.l Main_ShowTextMessage_Alt
|
||||||
LDA.b #$00 : STA.l TextBoxDefer
|
LDA.b #$00 : STA.l TextBoxDefer
|
||||||
+
|
+
|
||||||
|
|
||||||
LDA.w $02E9 : CMP.b #$01 : BNE +
|
LDA.w ItemReceiptMethod : CMP.b #$01 : BNE +
|
||||||
LDA.b $2F : BEQ +
|
LDA.b LinkDirection : BEQ +
|
||||||
JSL.l IncrementChestTurnCounter
|
JSL.l IncrementChestTurnCounter
|
||||||
+
|
+
|
||||||
|
|
||||||
STZ.w $02E9 : LDA.w $0C5E, X ; thing we wrote over to get here
|
STZ.w ItemReceiptMethod : LDA.w $0C5E, X ; thing we wrote over to get here
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -130,12 +130,12 @@ Crashed:
|
|||||||
LDA.w #$0C78>>1
|
LDA.w #$0C78>>1
|
||||||
STA.b VMADDL
|
STA.b VMADDL
|
||||||
|
|
||||||
LDA.l $10
|
LDA.l GameMode
|
||||||
AND.w #$00FF
|
AND.w #$00FF
|
||||||
ORA.w #$0100
|
ORA.w #$0100
|
||||||
STA.b VMDATAL
|
STA.b VMDATAL
|
||||||
|
|
||||||
LDA.l $11
|
LDA.l GameSubMode
|
||||||
AND.w #$00FF
|
AND.w #$00FF
|
||||||
ORA.w #$0100
|
ORA.w #$0100
|
||||||
STA.b VMDATAL
|
STA.b VMDATAL
|
||||||
|
|||||||
@@ -35,16 +35,16 @@ FairyPond_Init:
|
|||||||
LDA.l BottleContentsThree : CMP.b #$02 : BNE ++ : LDA.b #$1E : PHA : BRA .emptyBottle : ++
|
LDA.l BottleContentsThree : CMP.b #$02 : BNE ++ : LDA.b #$1E : PHA : BRA .emptyBottle : ++
|
||||||
LDA.l BottleContentsFour : CMP.b #$02 : BNE ++ : LDA.b #$1F : PHA : BRA .emptyBottle : ++
|
LDA.l BottleContentsFour : CMP.b #$02 : BNE ++ : LDA.b #$1F : PHA : BRA .emptyBottle : ++
|
||||||
.noInventory
|
.noInventory
|
||||||
LDA.b #$0A : STA.w $0D80, X
|
LDA.b #$0A : STA.w SpriteUnknown, X
|
||||||
LDA.b #$51
|
LDA.b #$51
|
||||||
LDY.b #$01
|
LDY.b #$01
|
||||||
JSL.l Sprite_ShowMessageFromPlayerContact
|
JSL.l Sprite_ShowMessageFromPlayerContact
|
||||||
JMP .cleanup
|
JMP .cleanup
|
||||||
|
|
||||||
.emptyBottle
|
.emptyBottle
|
||||||
LDA.b #$02 : STA.w $0D80, X
|
LDA.b #$02 : STA.w SpriteUnknown, X
|
||||||
STZ $2F
|
STZ.b LinkDirection
|
||||||
LDA.b #$01 : STA.w $02E4
|
LDA.b #$01 : STA.w CutsceneFlag
|
||||||
PLA : STA.w $1CE8
|
PLA : STA.w $1CE8
|
||||||
.cleanup
|
.cleanup
|
||||||
STZ.w $0EB0, X ; Clear the sprite's item-given variable
|
STZ.w $0EB0, X ; Clear the sprite's item-given variable
|
||||||
@@ -60,26 +60,26 @@ HappinessPond_Check:
|
|||||||
LDA.b #$72
|
LDA.b #$72
|
||||||
JSL Sprite_SpawnDynamically
|
JSL Sprite_SpawnDynamically
|
||||||
|
|
||||||
LDA.w $0FD8 : STA.w $0D10, Y
|
LDA.w SpriteCoordCacheX : STA.w SpritePosXLow, Y
|
||||||
LDA.w $0FD9 : STA.w $0D30, Y
|
LDA.w SpriteCoordCacheX+1 : STA.w SpritePosXHigh, Y
|
||||||
|
|
||||||
LDA.w $0FDA : !SUB.b #$40 : STA.w $0D00, Y
|
LDA.w SpriteCoordCacheY : !SUB.b #$40 : STA.w SpritePosYLow, Y
|
||||||
LDA.w $0FDB : SBC.b #$00 : STA.w $0D20, Y
|
LDA.w SpriteCoordCacheY+1 : SBC.b #$00 : STA.w SpritePosYHigh, Y
|
||||||
|
|
||||||
LDA.b #$01 : STA.w $0DA0, Y
|
LDA.b #$01 : STA.w SpriteAuxTable, Y
|
||||||
|
|
||||||
LDA.b #$BB
|
LDA.b #$BB
|
||||||
JSL Sprite_SpawnDynamically
|
JSL Sprite_SpawnDynamically
|
||||||
|
|
||||||
LDA.b #$08 : STA.w $0DD0, Y ; ensure we run prep for the shopkeeper
|
LDA.b #$08 : STA.w SpriteAITable, Y ; ensure we run prep for the shopkeeper
|
||||||
|
|
||||||
LDA.w $0FD8 : STA.w $0D10, Y
|
LDA.w SpriteCoordCacheX : STA.w SpritePosXLow, Y
|
||||||
LDA.w $0FD9 : STA.w $0D30, Y
|
LDA.w SpriteCoordCacheX+1 : STA.w SpritePosXHigh, Y
|
||||||
|
|
||||||
LDA.w $0FDA : !SUB.b #$20 : STA.w $0D00, Y
|
LDA.w SpriteCoordCacheY : !SUB.b #$20 : STA.w SpritePosYLow, Y
|
||||||
LDA.w $0FDB : SBC.b #$00 : STA.w $0D20, Y
|
LDA.w SpriteCoordCacheY+1 : SBC.b #$00 : STA.w SpritePosYHigh, Y
|
||||||
|
|
||||||
STZ.w $0DD0, X ; self terminate
|
STZ.w SpriteAITable, X ; self terminate
|
||||||
|
|
||||||
PLP
|
PLP
|
||||||
.done
|
.done
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
;===================================================================================================
|
;===================================================================================================
|
||||||
|
|
||||||
FastCreditsCutsceneTimer:
|
FastCreditsCutsceneTimer:
|
||||||
BIT.b $F2-1 : BVC .slow
|
BIT.b Joy1B_All-1 : BVC .slow
|
||||||
|
|
||||||
LDA.w #$0001 : STA.b $50
|
LDA.w #$0001 : STA.b $50
|
||||||
|
|
||||||
LDA.b $C8
|
LDA.b ScrapBufferBD+$0B
|
||||||
CLC
|
CLC
|
||||||
ADC.w #$0004
|
ADC.w #$0004
|
||||||
AND.w #$FFFE
|
AND.w #$FFFE
|
||||||
STA.b $C8
|
STA.b ScrapBufferBD+$0B
|
||||||
SEP #$20
|
SEP #$20
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
|
||||||
.slow
|
.slow
|
||||||
INC.b $C8
|
INC.b ScrapBufferBD+$0B
|
||||||
|
|
||||||
SEP #$20
|
SEP #$20
|
||||||
RTL
|
RTL
|
||||||
@@ -60,7 +60,7 @@ FastCreditsCutsceneScroll:
|
|||||||
BCC ++ ; scroll if carry not set
|
BCC ++ ; scroll if carry not set
|
||||||
LDA.w #$0000
|
LDA.w #$0000
|
||||||
|
|
||||||
++ BIT.b $F2-1 : BVC .slow ; check for X held
|
++ BIT.b Joy1B_All-1 : BVC .slow ; check for X held
|
||||||
|
|
||||||
AND.w #$FFFF ; get sign of A
|
AND.w #$FFFF ; get sign of A
|
||||||
BPL .positive
|
BPL .positive
|
||||||
@@ -90,8 +90,8 @@ FastCreditsCutsceneScroll:
|
|||||||
FastCreditsCutsceneUnderworldX:
|
FastCreditsCutsceneUnderworldX:
|
||||||
JSR FastCreditsCutsceneScrollX
|
JSR FastCreditsCutsceneScrollX
|
||||||
CLC
|
CLC
|
||||||
ADC.b $E2
|
ADC.b BG2H
|
||||||
STA.b $E2
|
STA.b BG2H
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
@@ -99,15 +99,15 @@ FastCreditsCutsceneUnderworldX:
|
|||||||
FastCreditsCutsceneUnderworldY:
|
FastCreditsCutsceneUnderworldY:
|
||||||
JSR FastCreditsCutsceneScrollY
|
JSR FastCreditsCutsceneScrollY
|
||||||
CLC
|
CLC
|
||||||
ADC.b $E8
|
ADC.b BG2V
|
||||||
STA.b $E8
|
STA.b BG2V
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
|
||||||
FastTextScroll:
|
FastTextScroll:
|
||||||
LDA.b $1A
|
LDA.b FrameCounter
|
||||||
BIT.b $F2-1 : BVC .slow
|
BIT.b Joy1B_All-1 : BVC .slow
|
||||||
|
|
||||||
AND.w #$0000
|
AND.w #$0000
|
||||||
RTL
|
RTL
|
||||||
|
|||||||
@@ -82,42 +82,42 @@ JMP DrawItemGray
|
|||||||
|
|
||||||
DrawBottle:
|
DrawBottle:
|
||||||
AND.w #$00FF : BNE +
|
AND.w #$00FF : BNE +
|
||||||
LDX #FileSelectItems_empty_bottle
|
LDX.w #FileSelectItems_empty_bottle
|
||||||
JMP DrawItemGray
|
JMP DrawItemGray
|
||||||
+ : DEC #2 : BNE +
|
+ : DEC #2 : BNE +
|
||||||
LDX #FileSelectItems_empty_bottle
|
LDX.w #FileSelectItems_empty_bottle
|
||||||
JMP DrawItem
|
JMP DrawItem
|
||||||
+ : DEC : BNE +
|
+ : DEC : BNE +
|
||||||
LDX #FileSelectItems_red_potion
|
LDX.w #FileSelectItems_red_potion
|
||||||
JMP DrawItem
|
JMP DrawItem
|
||||||
+ : DEC : BNE +
|
+ : DEC : BNE +
|
||||||
LDX #FileSelectItems_green_potion
|
LDX.w #FileSelectItems_green_potion
|
||||||
JMP DrawItem
|
JMP DrawItem
|
||||||
+ : DEC : BNE +
|
+ : DEC : BNE +
|
||||||
LDX #FileSelectItems_blue_potion
|
LDX.w #FileSelectItems_blue_potion
|
||||||
JMP DrawItem
|
JMP DrawItem
|
||||||
+ : DEC : BNE +
|
+ : DEC : BNE +
|
||||||
LDX #FileSelectItems_fairy_bottle
|
LDX.w #FileSelectItems_fairy_bottle
|
||||||
JMP DrawItem
|
JMP DrawItem
|
||||||
+ : DEC : BNE +
|
+ : DEC : BNE +
|
||||||
LDX #FileSelectItems_bee_bottle
|
LDX.w #FileSelectItems_bee_bottle
|
||||||
JMP DrawItem
|
JMP DrawItem
|
||||||
+
|
+
|
||||||
LDX #FileSelectItems_good_bee_bottle
|
LDX.w #FileSelectItems_good_bee_bottle
|
||||||
JMP DrawItem
|
JMP DrawItem
|
||||||
|
|
||||||
|
|
||||||
DrawPlayerFile:
|
DrawPlayerFile:
|
||||||
LDA.b $1A : AND.w #$0001 : BNE .normal
|
LDA.b FrameCounter : AND.w #$0001 : BNE .normal
|
||||||
JSR DrawPlayerFileShared
|
JSR DrawPlayerFileShared
|
||||||
INC $0710 ; Suppress animated tile updates for this frame
|
INC.w SkipOAM ; Suppress animated tile updates for this frame
|
||||||
|
|
||||||
; re-enable Stripe Image format upload on this frame
|
; re-enable Stripe Image format upload on this frame
|
||||||
; Value loaded must match what gets set by AltBufferTable
|
; Value loaded must match what gets set by AltBufferTable
|
||||||
LDA.w #$0161 : STA.w $1002
|
LDA.w #$0161 : STA.w $1002
|
||||||
BRA .done
|
BRA .done
|
||||||
.normal
|
.normal
|
||||||
STZ $0710 ; ensure core animated tile updates are not suppressed
|
STZ.w SkipOAM ; ensure core animated tile updates are not suppressed
|
||||||
LDA.w #$FFFF : STA.w $1002 ; Suppress Stripe Image format upload on this frame
|
LDA.w #$FFFF : STA.w $1002 ; Suppress Stripe Image format upload on this frame
|
||||||
.done
|
.done
|
||||||
LDA.w #$0004 : STA.b Scrap02 ; thing we wrote over
|
LDA.w #$0004 : STA.b Scrap02 ; thing we wrote over
|
||||||
@@ -642,7 +642,7 @@ AltBufferTable:
|
|||||||
LDA.w #$00FF : STA.w $1402
|
LDA.w #$00FF : STA.w $1402
|
||||||
|
|
||||||
; Draw Unlock option if applicable
|
; Draw Unlock option if applicable
|
||||||
LDA.b $10 : AND.w #$00FF : CMP.w #$0001 : BNE +
|
LDA.b GameMode : AND.w #$00FF : CMP.w #$0001 : BNE +
|
||||||
LDA.l IsEncrypted : AND.w #$00FF : CMP.w #$0002 : BNE +
|
LDA.l IsEncrypted : AND.w #$00FF : CMP.w #$0002 : BNE +
|
||||||
PHP : SEP #$30 : PHX : PHY : JSL ValidatePassword : PLY : PLX : PLP
|
PHP : SEP #$30 : PHX : PHY : JSL ValidatePassword : PLY : PLX : PLP
|
||||||
AND.w #$00FF : BNE +
|
AND.w #$00FF : BNE +
|
||||||
@@ -754,7 +754,7 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
SetFileSelectPalette:
|
SetFileSelectPalette:
|
||||||
LDA.b $10 : CMP.b #$04 : BNE +
|
LDA.b GameMode : CMP.b #$04 : BNE +
|
||||||
; load the vanilla file select screen BG3 palette for naming screen
|
; load the vanilla file select screen BG3 palette for naming screen
|
||||||
LDA.b #$01 : STA.w $0AB2
|
LDA.b #$01 : STA.w $0AB2
|
||||||
JSL.l Palette_Hud
|
JSL.l Palette_Hud
|
||||||
@@ -814,7 +814,7 @@ DrawPlayerFile_credits:
|
|||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
FSCursorUp:
|
FSCursorUp:
|
||||||
LDA.b $C8 : BNE +
|
LDA.b FileSelectPosition : BNE +
|
||||||
LDA.b #$04 ; up from file becomes delete
|
LDA.b #$04 ; up from file becomes delete
|
||||||
BRA .done
|
BRA .done
|
||||||
+ : CMP.b #$03 : BNE +
|
+ : CMP.b #$03 : BNE +
|
||||||
@@ -828,11 +828,11 @@ FSCursorUp:
|
|||||||
+
|
+
|
||||||
LDA.b #$00 ;otherwise up from delete is file
|
LDA.b #$00 ;otherwise up from delete is file
|
||||||
.done
|
.done
|
||||||
STA.b $C8
|
STA.b FileSelectPosition
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
FSCursorDown:
|
FSCursorDown:
|
||||||
LDA.b $C8 : BNE +
|
LDA.b FileSelectPosition : BNE +
|
||||||
LDA.l IsEncrypted : CMP.b #$02 : BNE ++
|
LDA.l IsEncrypted : CMP.b #$02 : BNE ++
|
||||||
LDA.l ValidKeyLoaded : BNE ++
|
LDA.l ValidKeyLoaded : BNE ++
|
||||||
LDA.b #$03 ; down from file is unlock for password protected seeds
|
LDA.b #$03 ; down from file is unlock for password protected seeds
|
||||||
@@ -846,23 +846,23 @@ FSCursorDown:
|
|||||||
+
|
+
|
||||||
LDA.b #$00 ; down from delete is file
|
LDA.b #$00 ; down from delete is file
|
||||||
.done
|
.done
|
||||||
STA.b $C8
|
STA.b FileSelectPosition
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
FSSelectFile:
|
FSSelectFile:
|
||||||
LDA.l IsEncrypted : CMP.b #$02 : BNE .normal
|
LDA.l IsEncrypted : CMP.b #$02 : BNE .normal
|
||||||
STZ $012E ; temporarily cancel file screen selection sound
|
STZ.w SFX2 ; temporarily cancel file screen selection sound
|
||||||
PHX : PHY
|
PHX : PHY
|
||||||
JSL ValidatePassword : BEQ .must_unlock
|
JSL ValidatePassword : BEQ .must_unlock
|
||||||
PLY : PLX
|
PLY : PLX
|
||||||
LDA.b #$2C : STA.w $012E ;file screen selection sound
|
LDA.b #$2C : STA.w SFX2 ;file screen selection sound
|
||||||
.normal
|
.normal
|
||||||
LDA.b #$F1 : STA.w $012C
|
LDA.b #$F1 : STA.w MusicControlRequest
|
||||||
JML FSSelectFile_continue
|
JML FSSelectFile_continue
|
||||||
.must_unlock
|
.must_unlock
|
||||||
PLY : PLX
|
PLY : PLX
|
||||||
LDA.b #$03 : STA.b $C8 ;set cursor to unlock
|
LDA.b #$03 : STA.b FileSelectPosition ;set cursor to unlock
|
||||||
LDA.b #$3C : STA.w $012E ; play error sound
|
LDA.b #$3C : STA.w SFX2 ; play error sound
|
||||||
JML FSSelectFile_return
|
JML FSSelectFile_return
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
MaybeForceFileName:
|
MaybeForceFileName:
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ protectff:
|
|||||||
; Remove dark world bit
|
; Remove dark world bit
|
||||||
; in game table that converts coordinates to actual screen ID
|
; in game table that converts coordinates to actual screen ID
|
||||||
; special case for other areas
|
; special case for other areas
|
||||||
LDA.b $8A
|
LDA.b OverworldIndex
|
||||||
BMI .special_overworld
|
BMI .special_overworld
|
||||||
|
|
||||||
AND.b #$3F
|
AND.b #$3F
|
||||||
@@ -47,17 +47,17 @@ protectff:
|
|||||||
|
|
||||||
.protect
|
.protect
|
||||||
LDA.b #$15
|
LDA.b #$15
|
||||||
STA.b $5D
|
STA.b LinkState
|
||||||
|
|
||||||
STZ.b $2E
|
STZ.b $2E
|
||||||
STZ.b $67
|
STZ.b $67
|
||||||
|
|
||||||
LDA.b #$02
|
LDA.b #$02
|
||||||
STA.b $2F
|
STA.b LinkDirection
|
||||||
|
|
||||||
STZ.w $0112
|
STZ.w MedallionFlag
|
||||||
STZ.w $02E4
|
STZ.w CutsceneFlag
|
||||||
STZ.w $0FFC
|
STZ.w NoMenu
|
||||||
|
|
||||||
++ RTL
|
++ RTL
|
||||||
|
|
||||||
|
|||||||
18
flute.asm
18
flute.asm
@@ -2,18 +2,18 @@
|
|||||||
; Randomize Flute Dig Item
|
; Randomize Flute Dig Item
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
SpawnHauntedGroveItem:
|
SpawnHauntedGroveItem:
|
||||||
LDA.b $8A : CMP.b #$2A : BEQ + : RTL : + ; Skip if not the haunted grove
|
LDA.b OverworldIndex : CMP.b #$2A : BEQ + : RTL : + ; Skip if not the haunted grove
|
||||||
LDA.b $1B : BEQ + : RTL : + ; Skip if indoors
|
LDA.b IndoorsFlag : BEQ + : RTL : + ; Skip if indoors
|
||||||
|
|
||||||
%GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues)
|
%GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues)
|
||||||
JSL.l PrepDynamicTile
|
JSL.l PrepDynamicTile
|
||||||
|
|
||||||
LDA.b #$EB
|
LDA.b #$EB
|
||||||
STA.l $7FFE00
|
STA.l MiniGameTime
|
||||||
JSL Sprite_SpawnDynamically
|
JSL Sprite_SpawnDynamically
|
||||||
|
|
||||||
LDX.b #$00
|
LDX.b #$00
|
||||||
LDA.b $2F : CMP.b #$04 : BEQ + : INX : +
|
LDA.b LinkDirection : CMP.b #$04 : BEQ + : INX : +
|
||||||
|
|
||||||
LDA.l .x_speeds, X : STA.w $0D50, Y
|
LDA.l .x_speeds, X : STA.w $0D50, Y
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ SpawnHauntedGroveItem:
|
|||||||
LDA.b #$00 : STA.w $0F20, Y
|
LDA.b #$00 : STA.w $0F20, Y
|
||||||
TYX
|
TYX
|
||||||
|
|
||||||
LDX.b $8A ; haunted grove (208D0A)
|
LDX.b OverworldIndex ; haunted grove (208D0A)
|
||||||
LDA.l OverworldEventDataWRAM, X : AND.b #$40 : BNE +
|
LDA.l OverworldEventDataWRAM, X : AND.b #$40 : BNE +
|
||||||
LDA.b #$1B : JSL Sound_SetSfx3PanLong
|
LDA.b #$1B : JSL Sound_SetSfx3PanLong
|
||||||
+
|
+
|
||||||
@@ -52,11 +52,11 @@ RTL
|
|||||||
}
|
}
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
FluteBoy:
|
FluteBoy:
|
||||||
LDA.b $10 : CMP.b #$1A : BEQ +
|
LDA.b GameMode : CMP.b #$1A : BEQ +
|
||||||
LDA.b #$01 : STA.w $0FDD
|
LDA.b #$01 : STA.w $0FDD
|
||||||
JML.l FluteBoy_Abort
|
JML.l FluteBoy_Abort
|
||||||
+
|
+
|
||||||
LDA.w $0D80, X : CMP.b #$03 ; thing we wrote over
|
LDA.w SpriteUnknown, X : CMP.b #$03 ; thing we wrote over
|
||||||
JML.l FluteBoy_Continue
|
JML.l FluteBoy_Continue
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
FreeDuckCheck:
|
FreeDuckCheck:
|
||||||
@@ -64,7 +64,7 @@ FreeDuckCheck:
|
|||||||
LDA.l FluteEquipment : CMP.b #$03 : BEQ .done ; flute is already active
|
LDA.l FluteEquipment : CMP.b #$03 : BEQ .done ; flute is already active
|
||||||
|
|
||||||
; check the area, is it #$18 = 30?
|
; check the area, is it #$18 = 30?
|
||||||
LDA.b $8A : CMP.b #$18 : BNE .done
|
LDA.b OverworldIndex : CMP.b #$18 : BNE .done
|
||||||
|
|
||||||
REP #$20
|
REP #$20
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ FreeDuckCheck:
|
|||||||
SEP #$20
|
SEP #$20
|
||||||
|
|
||||||
; Apparently a special Overworld mode for doing this?
|
; Apparently a special Overworld mode for doing this?
|
||||||
LDA.b #$2D : STA.b $11
|
LDA.b #$2D : STA.b GameSubMode
|
||||||
|
|
||||||
; Trigger the sequence to start the weathervane explosion.
|
; Trigger the sequence to start the weathervane explosion.
|
||||||
LDY.b #$00
|
LDY.b #$00
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ FrameHookAction:
|
|||||||
LDA.l LoopFrames : INC : STA.l LoopFrames : BNE +
|
LDA.l LoopFrames : INC : STA.l LoopFrames : BNE +
|
||||||
LDA.l LoopFrames+2 : INC : STA.l LoopFrames+2
|
LDA.l LoopFrames+2 : INC : STA.l LoopFrames+2
|
||||||
+
|
+
|
||||||
LDA.l $10 : CMP.w #$010E : BNE + ; move this to nmi hook?
|
LDA.l GameMode : CMP.w #$010E : BNE + ; move this to nmi hook?
|
||||||
LDA.l MenuFrames : INC : STA.l MenuFrames : BNE +
|
LDA.l MenuFrames : INC : STA.l MenuFrames : BNE +
|
||||||
LDA.l MenuFrames+2 : INC : STA.l MenuFrames+2
|
LDA.l MenuFrames+2 : INC : STA.l MenuFrames+2
|
||||||
+
|
+
|
||||||
|
|||||||
@@ -70,10 +70,10 @@ GetAgahnimLightning:
|
|||||||
;1 = Forbid
|
;1 = Forbid
|
||||||
AllowJoypadInput:
|
AllowJoypadInput:
|
||||||
LDA.l PermitSQFromBosses : BEQ .fullCheck
|
LDA.l PermitSQFromBosses : BEQ .fullCheck
|
||||||
LDA.w $0403 : AND.b #$80 : BEQ .fullCheck
|
LDA.w ItemsTaken : AND.b #$80 : BEQ .fullCheck
|
||||||
LDA.w $0112 : ORA.w $02E4 ; we have heart container, do short check
|
LDA.w MedallionFlag : ORA.w CutsceneFlag ; we have heart container, do short check
|
||||||
RTL
|
RTL
|
||||||
.fullCheck
|
.fullCheck
|
||||||
LDA.w $0112 : ORA.w $02E4 : ORA.w $0FFC
|
LDA.w MedallionFlag : ORA.w CutsceneFlag : ORA.w NoMenu
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|||||||
10
goalitem.asm
10
goalitem.asm
@@ -1,14 +1,14 @@
|
|||||||
GoalItemGanonCheck:
|
GoalItemGanonCheck:
|
||||||
LDA.w $0E20, X : CMP.b #$D6 : BNE .success ; skip if not ganon
|
LDA.w SpriteTypeTable, X : CMP.b #$D6 : BNE .success ; skip if not ganon
|
||||||
JSL.l CheckGanonVulnerability
|
JSL.l CheckGanonVulnerability
|
||||||
BCS .success
|
BCS .success
|
||||||
|
|
||||||
.fail
|
.fail
|
||||||
LDA.w $0D80, X : CMP.b #17 : !BLT .success ; decmial 17 because Acmlm's chart is decimal
|
LDA.w SpriteUnknown, X : CMP.b #17 : !BLT .success ; decmial 17 because Acmlm's chart is decimal
|
||||||
LDA.b #$00
|
LDA.b #$00
|
||||||
RTL
|
RTL
|
||||||
.success
|
.success
|
||||||
LDA.b $44 : CMP.b #$80 ; thing we wrote over
|
LDA.b OAMOffsetY : CMP.b #$80 ; thing we wrote over
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
;Carry clear = ganon invincible
|
;Carry clear = ganon invincible
|
||||||
@@ -143,8 +143,8 @@ CheckAgaForPed:
|
|||||||
RTL
|
RTL
|
||||||
|
|
||||||
.force_blue_ball
|
.force_blue_ball
|
||||||
LDA.b #$01 : STA.w $0DA0, Y
|
LDA.b #$01 : STA.w SpriteAuxTable, Y
|
||||||
LDA.b #$20 : STA.w $0DF0, Y
|
LDA.b #$20 : STA.w SpriteTimer, Y
|
||||||
CLC ; skip the RNG check
|
CLC ; skip the RNG check
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ GetMagicBatItem:
|
|||||||
%GetPossiblyEncryptedItem(MagicBatItem, SpriteItemValues)
|
%GetPossiblyEncryptedItem(MagicBatItem, SpriteItemValues)
|
||||||
CMP.b #$FF : BEQ .normalLogic
|
CMP.b #$FF : BEQ .normalLogic
|
||||||
TAY
|
TAY
|
||||||
STZ.b $02E9 ; 0 = Receiving item from an NPC or message
|
STZ.b ItemReceiptMethod ; 0 = Receiving item from an NPC or message
|
||||||
JML.l Link_ReceiveItem
|
JML.l Link_ReceiveItem
|
||||||
.normalLogic
|
.normalLogic
|
||||||
LDA.l HalfMagic
|
LDA.l HalfMagic
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ CalculateSpikeFloorDamage:
|
|||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
CalculateByrnaUsage:
|
CalculateByrnaUsage:
|
||||||
LDA.b $1B : BEQ ++
|
LDA.b IndoorsFlag : BEQ ++
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||||
CMP.w #95 : BEQ + ; Ice Palace Spike Room
|
CMP.w #95 : BEQ + ; Ice Palace Spike Room
|
||||||
@@ -36,7 +36,7 @@ CalculateByrnaUsage:
|
|||||||
JML IncrementMagicUseCounterByrna
|
JML IncrementMagicUseCounterByrna
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
CalculateCapeUsage:
|
CalculateCapeUsage:
|
||||||
LDA.b $1B : BEQ ++
|
LDA.b IndoorsFlag : BEQ ++
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||||
CMP.w #95 : BEQ + ; Ice Palace Spike Room
|
CMP.w #95 : BEQ + ; Ice Palace Spike Room
|
||||||
@@ -54,7 +54,7 @@ CalculateCapeUsage:
|
|||||||
JML IncrementMagicUseCounterOne
|
JML IncrementMagicUseCounterOne
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
ActivateInvulnerabilityOrDont:
|
ActivateInvulnerabilityOrDont:
|
||||||
LDA.b $1B : BEQ .nowhere_special
|
LDA.b IndoorsFlag : BEQ .nowhere_special
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||||
CMP.w #95 : BEQ .somewhere_cool ; Ice Palace Spike Room
|
CMP.w #95 : BEQ .somewhere_cool ; Ice Palace Spike Room
|
||||||
|
|||||||
@@ -3,10 +3,10 @@
|
|||||||
;================================================================================
|
;================================================================================
|
||||||
BeepLogic:
|
BeepLogic:
|
||||||
LDA.l HeartBeep : BEQ +
|
LDA.l HeartBeep : BEQ +
|
||||||
STA.w $04CA
|
STA.w HeartBeepTimer
|
||||||
LDA.b #$2B : STA.w $012E
|
LDA.b #$2B : STA.w SFX2
|
||||||
RTL
|
RTL
|
||||||
+
|
+
|
||||||
LDA.b #$FF : STA.w $04CA
|
LDA.b #$FF : STA.w HeartBeepTimer
|
||||||
RTL
|
RTL
|
||||||
;================================================================================
|
;================================================================================
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
HeartPieceGet:
|
HeartPieceGet:
|
||||||
PHX : PHY
|
PHX : PHY
|
||||||
LDY.w $0E80, X ; load item value into Y register
|
LDY.w SpriteItemType, X ; load item value into Y register
|
||||||
BNE +
|
BNE +
|
||||||
; if for any reason the item value is 0 reload it, just in case
|
; if for any reason the item value is 0 reload it, just in case
|
||||||
JSL.l LoadHeartPieceRoomValue : TAY
|
JSL.l LoadHeartPieceRoomValue : TAY
|
||||||
@@ -12,7 +12,7 @@ HeartPieceGet:
|
|||||||
|
|
||||||
.skipLoad
|
.skipLoad
|
||||||
|
|
||||||
STZ.w $02E9 ; 0 = Receiving item from an NPC or message
|
STZ.w ItemReceiptMethod ; 0 = Receiving item from an NPC or message
|
||||||
|
|
||||||
CPY.b #$26 : BNE .notHeart ; don't add a 1/4 heart if it's not a heart piece
|
CPY.b #$26 : BNE .notHeart ; don't add a 1/4 heart if it's not a heart piece
|
||||||
LDA.l HeartPieceQuarter : INC A : AND.b #$03 : STA.l HeartPieceQuarter : BNE .unfinished_heart ; add up heart quarters
|
LDA.l HeartPieceQuarter : INC A : AND.b #$03 : STA.l HeartPieceQuarter : BNE .unfinished_heart ; add up heart quarters
|
||||||
@@ -36,7 +36,7 @@ RTL
|
|||||||
HeartContainerGet:
|
HeartContainerGet:
|
||||||
PHX : PHY
|
PHX : PHY
|
||||||
JSL.l AddInventory_incrementBossSwordLong
|
JSL.l AddInventory_incrementBossSwordLong
|
||||||
LDY $0E80, X ; load item value into Y register
|
LDY.w SpriteItemType, X ; load item value into Y register
|
||||||
BNE +
|
BNE +
|
||||||
; if for any reason the item value is 0 reload it, just in case
|
; if for any reason the item value is 0 reload it, just in case
|
||||||
JSL.l LoadHeartContainerRoomValue : TAY
|
JSL.l LoadHeartContainerRoomValue : TAY
|
||||||
@@ -54,7 +54,7 @@ DrawHeartPieceGFX:
|
|||||||
JMP .done ; don't draw on the init frame
|
JMP .done ; don't draw on the init frame
|
||||||
|
|
||||||
.skipInit
|
.skipInit
|
||||||
LDA.w $0E80, X ; Retrieve stored item type
|
LDA.w SpriteItemType, X ; Retrieve stored item type
|
||||||
|
|
||||||
.skipLoad
|
.skipLoad
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ DrawHeartContainerGFX:
|
|||||||
BRA DrawHeartPieceGFX_done ; don't draw on the init frame
|
BRA DrawHeartPieceGFX_done ; don't draw on the init frame
|
||||||
|
|
||||||
.skipInit
|
.skipInit
|
||||||
LDA.w $0E80, X ; Retrieve stored item type
|
LDA.w SpriteItemType, X ; Retrieve stored item type
|
||||||
|
|
||||||
BRA DrawHeartPieceGFX_skipLoad
|
BRA DrawHeartPieceGFX_skipLoad
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -122,11 +122,11 @@ HeartPieceSpritePrep:
|
|||||||
LDA.l ServerRequestMode : BEQ + : : +
|
LDA.l ServerRequestMode : BEQ + : : +
|
||||||
|
|
||||||
LDA.b #$01 : STA.l RedrawFlag
|
LDA.b #$01 : STA.l RedrawFlag
|
||||||
LDA.b $5D : CMP.b #$14 : BEQ .skip ; skip if we're mid-mirror
|
LDA.b LinkState : CMP.b #$14 : BEQ .skip ; skip if we're mid-mirror
|
||||||
|
|
||||||
LDA.b #$00 : STA.l RedrawFlag
|
LDA.b #$00 : STA.l RedrawFlag
|
||||||
JSL.l LoadHeartPieceRoomValue ; load item type
|
JSL.l LoadHeartPieceRoomValue ; load item type
|
||||||
STA.w $0E80, X ; Store item type
|
STA.w SpriteItemType, X ; Store item type
|
||||||
JSL.l PrepDynamicTile
|
JSL.l PrepDynamicTile
|
||||||
|
|
||||||
.skip
|
.skip
|
||||||
@@ -138,14 +138,14 @@ HeartContainerSpritePrep:
|
|||||||
|
|
||||||
LDA.b #$00 : STA.l RedrawFlag
|
LDA.b #$00 : STA.l RedrawFlag
|
||||||
JSL.l LoadHeartContainerRoomValue ; load item type
|
JSL.l LoadHeartContainerRoomValue ; load item type
|
||||||
STA.w $0E80, X ; Store item type
|
STA.w SpriteItemType, X ; Store item type
|
||||||
JSL.l PrepDynamicTile
|
JSL.l PrepDynamicTile
|
||||||
|
|
||||||
PLA
|
PLA
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
LoadHeartPieceRoomValue:
|
LoadHeartPieceRoomValue:
|
||||||
LDA.b $1B : BEQ .outdoors ; check if we're indoors or outdoors
|
LDA.b IndoorsFlag : BEQ .outdoors ; check if we're indoors or outdoors
|
||||||
.indoors
|
.indoors
|
||||||
JSL.l LoadIndoorValue
|
JSL.l LoadIndoorValue
|
||||||
JMP .done
|
JMP .done
|
||||||
@@ -161,9 +161,9 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
MaybeMarkDigSpotCollected:
|
MaybeMarkDigSpotCollected:
|
||||||
PHA : PHP
|
PHA : PHP
|
||||||
LDA.b $1B : BNE +
|
LDA.b IndoorsFlag : BNE +
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
LDA.b $8A
|
LDA.b OverworldIndex
|
||||||
CMP.w #$2A : BNE +
|
CMP.w #$2A : BNE +
|
||||||
LDA.l HasGroveItem : ORA.w #$0001 : STA.l HasGroveItem
|
LDA.l HasGroveItem : ORA.w #$0001 : STA.l HasGroveItem
|
||||||
+
|
+
|
||||||
@@ -237,7 +237,7 @@ RTL
|
|||||||
LoadOutdoorValue:
|
LoadOutdoorValue:
|
||||||
PHP
|
PHP
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
LDA.b $8A
|
LDA.b OverworldIndex
|
||||||
CMP.w #$03 : BNE +
|
CMP.w #$03 : BNE +
|
||||||
LDA.b $22 : CMP.w #1890 : !BLT ++
|
LDA.b $22 : CMP.w #1890 : !BLT ++
|
||||||
%GetPossiblyEncryptedItem(HeartPiece_Spectacle, HeartPieceOutdoorValues)
|
%GetPossiblyEncryptedItem(HeartPiece_Spectacle, HeartPieceOutdoorValues)
|
||||||
|
|||||||
@@ -1637,12 +1637,12 @@ NOP #8
|
|||||||
;================================================================================
|
;================================================================================
|
||||||
org $028B8F ; <- 10B8F - Bank02.asm:2236 (LDA $7EF374 : LSR A : BCS BRANCH_BETA)
|
org $028B8F ; <- 10B8F - Bank02.asm:2236 (LDA $7EF374 : LSR A : BCS BRANCH_BETA)
|
||||||
JSL CheckHeraBossDefeated : BNE + : NOP
|
JSL CheckHeraBossDefeated : BNE + : NOP
|
||||||
LDX.b #$F1 : STX.w $012C
|
LDX.b #$F1 : STX.w MusicControlRequest
|
||||||
+
|
+
|
||||||
;================================================================================
|
;================================================================================
|
||||||
org $029090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A : BCS BRANCH_GAMMA)
|
org $029090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A : BCS BRANCH_GAMMA)
|
||||||
JSL CheckHeraBossDefeated : BNE + : NOP
|
JSL CheckHeraBossDefeated : BNE + : NOP
|
||||||
STX.w $012C ; DON'T MOVE THIS FORWARD OR MADNESS AWAITS
|
STX.w MusicControlRequest ; DON'T MOVE THIS FORWARD OR MADNESS AWAITS
|
||||||
+
|
+
|
||||||
;================================================================================
|
;================================================================================
|
||||||
org $029798 ; <- 11798 - Bank02.asm:4287 (CMP $02895C, X : BNE BRANCH_ALPHA)
|
org $029798 ; <- 11798 - Bank02.asm:4287 (CMP $02895C, X : BNE BRANCH_ALPHA)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ShouldOverrideFileLoad:
|
|||||||
CPY #$0A ; 0A = Ice/Mire floor file
|
CPY #$0A ; 0A = Ice/Mire floor file
|
||||||
BNE .no
|
BNE .no
|
||||||
|
|
||||||
LDA.w $040C ; Dungeon number
|
LDA.w DungeonID ; Dungeon number
|
||||||
CMP #$12 ; Ice Palace
|
CMP #$12 ; Ice Palace
|
||||||
BEQ .yes
|
BEQ .yes
|
||||||
.no
|
.no
|
||||||
|
|||||||
2
init.asm
2
init.asm
@@ -53,7 +53,7 @@ Init_Primary:
|
|||||||
LDA.b #$01 : STA.w MEMSEL ; enable fastrom access on upper banks
|
LDA.b #$01 : STA.w MEMSEL ; enable fastrom access on upper banks
|
||||||
STA.l OneMindId
|
STA.l OneMindId
|
||||||
|
|
||||||
LDA.b #$10 : STA.b $BC ; set default player sprite bank
|
LDA.b #$10 : STA.b PlayerSpriteBank ; set default player sprite bank
|
||||||
|
|
||||||
LDA.b #$81 : STA.w NMITIMEN ; thing we wrote over, turn on NMI & gamepad
|
LDA.b #$81 : STA.w NMITIMEN ; thing we wrote over, turn on NMI & gamepad
|
||||||
RTL
|
RTL
|
||||||
|
|||||||
138
inventory.asm
138
inventory.asm
@@ -28,14 +28,14 @@
|
|||||||
; out: Carry - 0 = No Button, 1 = Yes Button
|
; out: Carry - 0 = No Button, 1 = Yes Button
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
ProcessMenuButtons:
|
ProcessMenuButtons:
|
||||||
LDA.b $F4 : BIT.b #$40 : BNE .y_pressed ; check for P1 Y-button
|
LDA.b Joy1A_New : BIT.b #$40 : BNE .y_pressed ; check for P1 Y-button
|
||||||
BIT #$20 : BNE .sel_pressed ; check for P1 Select button
|
BIT #$20 : BNE .sel_pressed ; check for P1 Select button
|
||||||
LDA.b $F0 : BIT.b #$20 : BNE .sel_held
|
LDA.b Joy1A_All : BIT.b #$20 : BNE .sel_held
|
||||||
.sel_unheld
|
.sel_unheld
|
||||||
LDA.l HudFlag : AND.b #$20 : BEQ +
|
LDA.l HudFlag : AND.b #$20 : BEQ +
|
||||||
LDA.l HudFlag : AND.b #$DF : STA.l HudFlag ; select is released, unset hud flag
|
LDA.l HudFlag : AND.b #$DF : STA.l HudFlag ; select is released, unset hud flag
|
||||||
LDA.b $1B : BEQ + ; skip if outdoors
|
LDA.b IndoorsFlag : BEQ + ; skip if outdoors
|
||||||
LDA.b #$20 : STA.w $012F ; menu select sound
|
LDA.b #$20 : STA.w SFX3 ; menu select sound
|
||||||
+
|
+
|
||||||
JSL.l ResetEquipment
|
JSL.l ResetEquipment
|
||||||
+
|
+
|
||||||
@@ -44,16 +44,16 @@ ProcessMenuButtons:
|
|||||||
RTL
|
RTL
|
||||||
.sel_pressed
|
.sel_pressed
|
||||||
LDA.l HudFlag : ORA.b #$20 : STA.l HudFlag ; set hud flag
|
LDA.l HudFlag : ORA.b #$20 : STA.l HudFlag ; set hud flag
|
||||||
LDA.b #$20 : STA.w $012F ; menu select sound
|
LDA.b #$20 : STA.w SFX3 ; menu select sound
|
||||||
JSL.l ResetEquipment
|
JSL.l ResetEquipment
|
||||||
RTL
|
RTL
|
||||||
.y_pressed ; Note: used as entry point by quickswap code. Must preserve X.
|
.y_pressed ; Note: used as entry point by quickswap code. Must preserve X.
|
||||||
LDA.b #$10 : STA.w $0207
|
LDA.b #$10 : STA.w MenuBlink
|
||||||
LDA.w $0202 ; check selected item
|
LDA.w ItemCursor ; check selected item
|
||||||
CMP.b #$02 : BNE + ; boomerang
|
CMP.b #$02 : BNE + ; boomerang
|
||||||
LDA.l InventoryTracking : AND.b #$C0 : CMP.b #$C0 : BNE .errorJump ; make sure we have both boomerangs
|
LDA.l InventoryTracking : AND.b #$C0 : CMP.b #$C0 : BNE .errorJump ; make sure we have both boomerangs
|
||||||
LDA.l BoomerangEquipment : EOR.b #$03 : STA.l BoomerangEquipment ; swap blue & red boomerang
|
LDA.l BoomerangEquipment : EOR.b #$03 : STA.l BoomerangEquipment ; swap blue & red boomerang
|
||||||
LDA.b #$20 : STA.w $012F ; menu select sound
|
LDA.b #$20 : STA.w SFX3 ; menu select sound
|
||||||
JMP .captured
|
JMP .captured
|
||||||
+ CMP #$01 : BNE + ; bow
|
+ CMP #$01 : BNE + ; bow
|
||||||
LDA.l BowTracking : AND.b #$C0 : CMP.b #$C0 : BNE .errorJump ; make sure we have both bows
|
LDA.l BowTracking : AND.b #$C0 : CMP.b #$C0 : BNE .errorJump ; make sure we have both bows
|
||||||
@@ -70,7 +70,7 @@ RTL
|
|||||||
BRA .errorJump2
|
BRA .errorJump2
|
||||||
++
|
++
|
||||||
LDA.l BowEquipment : !SUB #$01 : EOR.b #$02 : !ADD #$01 : STA.l BowEquipment ; swap bows
|
LDA.l BowEquipment : !SUB #$01 : EOR.b #$02 : !ADD #$01 : STA.l BowEquipment ; swap bows
|
||||||
LDA.b #$20 : STA.w $012F ; menu select sound
|
LDA.b #$20 : STA.w SFX3 ; menu select sound
|
||||||
JMP .captured
|
JMP .captured
|
||||||
+ BRA +
|
+ BRA +
|
||||||
.errorJump
|
.errorJump
|
||||||
@@ -78,7 +78,7 @@ RTL
|
|||||||
+ CMP #$05 : BNE + ; powder
|
+ CMP #$05 : BNE + ; powder
|
||||||
LDA.l InventoryTracking : AND.b #$30 : CMP.b #$30 : BNE .errorJump ; make sure we have mushroom & magic powder
|
LDA.l InventoryTracking : AND.b #$30 : CMP.b #$30 : BNE .errorJump ; make sure we have mushroom & magic powder
|
||||||
LDA.l PowderEquipment : EOR.b #$03 : STA.l PowderEquipment ; swap mushroom & magic powder
|
LDA.l PowderEquipment : EOR.b #$03 : STA.l PowderEquipment ; swap mushroom & magic powder
|
||||||
LDA.b #$20 : STA.w $012F ; menu select sound
|
LDA.b #$20 : STA.w SFX3 ; menu select sound
|
||||||
JMP .captured
|
JMP .captured
|
||||||
+ BRA +
|
+ BRA +
|
||||||
.errorJump2
|
.errorJump2
|
||||||
@@ -99,7 +99,7 @@ RTL
|
|||||||
LDA.b #$01 ; set shovel
|
LDA.b #$01 ; set shovel
|
||||||
.fluteSuccess
|
.fluteSuccess
|
||||||
STA.l FluteEquipment ; store set item
|
STA.l FluteEquipment ; store set item
|
||||||
LDA.b #$20 : STA.w $012F ; menu select sound
|
LDA.b #$20 : STA.w SFX3 ; menu select sound
|
||||||
BRA .captured
|
BRA .captured
|
||||||
+
|
+
|
||||||
CMP.b #$10 : BNE .error : JSL.l ProcessBottleMenu : BRA .captured : +
|
CMP.b #$10 : BNE .error : JSL.l ProcessBottleMenu : BRA .captured : +
|
||||||
@@ -107,7 +107,7 @@ RTL
|
|||||||
RTL
|
RTL
|
||||||
.midShovel
|
.midShovel
|
||||||
.error
|
.error
|
||||||
LDA.b #$3C : STA.w $012E ; error sound
|
LDA.b #$3C : STA.w SFX2 ; error sound
|
||||||
.captured
|
.captured
|
||||||
SEC
|
SEC
|
||||||
RTL
|
RTL
|
||||||
@@ -124,13 +124,13 @@ ProcessBottleMenu:
|
|||||||
TAX : LDA.l BottleContents-1, X ; check bottle
|
TAX : LDA.l BottleContents-1, X ; check bottle
|
||||||
BNE + : LDX.b #$01 : + ; wrap if we reached the last bottle
|
BNE + : LDX.b #$01 : + ; wrap if we reached the last bottle
|
||||||
TXA : STA.l BottleIndex ; set bottle index
|
TXA : STA.l BottleIndex ; set bottle index
|
||||||
LDA.b #$20 : STA.w $012F ; menu select sound
|
LDA.b #$20 : STA.w SFX3 ; menu select sound
|
||||||
PLX
|
PLX
|
||||||
.no_bottles
|
.no_bottles
|
||||||
LDA.b #$00 ; pretend like the controller state was 0 from the overridden load
|
LDA.b #$00 ; pretend like the controller state was 0 from the overridden load
|
||||||
RTL
|
RTL
|
||||||
; .y_not_pressed
|
; .y_not_pressed
|
||||||
; LDA.b $F4 : AND.b #$0C ; thing we wrote over - load controller state
|
; LDA.b Joy1A_New : AND.b #$0C ; thing we wrote over - load controller state
|
||||||
;RTL
|
;RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -138,33 +138,27 @@ RTL
|
|||||||
;OpenBottleMenu:
|
;OpenBottleMenu:
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
OpenBottleMenu:
|
OpenBottleMenu:
|
||||||
LDA.b $F6 : AND.b #$40 : BEQ .x_not_pressed ; skip if X is not down
|
LDA.b Joy1B_New : AND.b #$40 : BEQ .x_not_pressed ; skip if X is not down
|
||||||
LDA.b #$10 : STA.w $0207 ; set 16 frame cool off
|
LDA.b #$10 : STA.w MenuBlink ; set 16 frame cool off
|
||||||
LDA.b #$20 : STA.w $012F ; make menu sound
|
LDA.b #$20 : STA.w SFX3 ; make menu sound
|
||||||
LDA.b #$07 : STA.w $0200 ; thing we wrote over - opens bottle menu
|
LDA.b #$07 : STA.w SubModuleInterface ; thing we wrote over - opens bottle menu
|
||||||
.x_not_pressed
|
.x_not_pressed
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
;CloseBottleMenu:
|
;CloseBottleMenu:
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
CloseBottleMenu:
|
CloseBottleMenu:
|
||||||
LDA.b $F6 : AND.b #$40 : BEQ .x_not_pressed ; skip if X is not down
|
LDA.b Joy1B_New : AND.b #$40 : BEQ .x_not_pressed ; skip if X is not down
|
||||||
|
LDA.b #$10 : STA.w MenuBlink ; set 16 frame cool off
|
||||||
|
LDA.b #$20 : STA.w SFX3 ; make menu sound
|
||||||
|
|
||||||
LDA.b #$10 : STA.w $0207 ; set 16 frame cool off
|
INC.w SubModuleInterface ; return to normal menu
|
||||||
LDA.b #$20 : STA.w $012F ; make menu sound
|
STZ.w BottleMenuCounter
|
||||||
|
LDA.b #$00
|
||||||
INC.w $0200 ; return to normal menu
|
|
||||||
STZ.w $0205
|
|
||||||
|
|
||||||
LDA.b #$00
|
|
||||||
RTL
|
RTL
|
||||||
.x_not_pressed
|
.x_not_pressed
|
||||||
LDA.b $F4 : AND.b #$0C ; thing we wrote over (probably)
|
LDA.b Joy1A_New : AND.b #$0C ; thing we wrote over (probably)
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; AddInventory:
|
; AddInventory:
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -253,8 +247,8 @@ AddInventory:
|
|||||||
+
|
+
|
||||||
CPY.b #$3B : BNE + : JMP .dungeonCounts : + ; Silver Arrow Bow - Skip Shop/Fairy Check for Silver Arrow Bow
|
CPY.b #$3B : BNE + : JMP .dungeonCounts : + ; Silver Arrow Bow - Skip Shop/Fairy Check for Silver Arrow Bow
|
||||||
|
|
||||||
LDA.b $1B : BEQ ++ ; skip shop check if outdoors
|
LDA.b IndoorsFlag : BEQ ++ ; skip shop check if outdoors
|
||||||
LDA.w $02E9 : CMP.b #$01 : BEQ ++ ; skip shop check for chests
|
LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ ++ ; skip shop check for chests
|
||||||
PHP : REP #$20 ; set 16-bit accumulator
|
PHP : REP #$20 ; set 16-bit accumulator
|
||||||
LDA.w $048E
|
LDA.w $048E
|
||||||
CMP.w #274 : BNE + : JMP .shop : + ; dark world death mountain shop, ornamental shield shop
|
CMP.w #274 : BNE + : JMP .shop : + ; dark world death mountain shop, ornamental shield shop
|
||||||
@@ -274,10 +268,10 @@ AddInventory:
|
|||||||
++
|
++
|
||||||
|
|
||||||
.dungeonCounts
|
.dungeonCounts
|
||||||
LDA.b $1B : BNE + : JMP .fullItemCounts : +
|
LDA.b IndoorsFlag : BNE + : JMP .fullItemCounts : +
|
||||||
SEP #$20 ; Set 8-bit Accumulator
|
SEP #$20 ; Set 8-bit Accumulator
|
||||||
|
|
||||||
LDA.w $040C ; get dungeon id
|
LDA.w DungeonID ; get dungeon id
|
||||||
CMP.b #$FF : BEQ .fullItemCounts
|
CMP.b #$FF : BEQ .fullItemCounts
|
||||||
|
|
||||||
CMP.l BallNChainDungeon : BNE +
|
CMP.l BallNChainDungeon : BNE +
|
||||||
@@ -370,7 +364,7 @@ AddInventory:
|
|||||||
+ CPY.b #$1D : BNE + ; Book of Mudora - LEAVE THIS ABOVE THE 1B-1F CONDITION - kkat
|
+ CPY.b #$1D : BNE + ; Book of Mudora - LEAVE THIS ABOVE THE 1B-1F CONDITION - kkat
|
||||||
JSR .incrementY
|
JSR .incrementY
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CPY.b #$1B : !BLT + ; Items $1B - $1F
|
+ CPY.b #$1B : !BLT + ; Items IndoorsFlag - $1F
|
||||||
CPY.b #$20 : !BGE +
|
CPY.b #$20 : !BGE +
|
||||||
JSR .incrementA
|
JSR .incrementA
|
||||||
JMP .done
|
JMP .done
|
||||||
@@ -442,7 +436,7 @@ AddInventory:
|
|||||||
JSR .incrementY
|
JSR .incrementY
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CPY.b #$49 : BNE + ; Fighter's Sword
|
+ CPY.b #$49 : BNE + ; Fighter's Sword
|
||||||
LDX #$01
|
LDX.b #$01
|
||||||
JSR .incrementSword
|
JSR .incrementSword
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CPY.b #$4A : BNE + ; Flute (Active)
|
+ CPY.b #$4A : BNE + ; Flute (Active)
|
||||||
@@ -462,15 +456,15 @@ AddInventory:
|
|||||||
JSR .incrementCapacity
|
JSR .incrementCapacity
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CPY.b #$50 : BNE + ; Master Sword (Safe)
|
+ CPY.b #$50 : BNE + ; Master Sword (Safe)
|
||||||
LDX #$02
|
LDX.b #$02
|
||||||
JSR .incrementSword
|
JSR .incrementSword
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CPY.b #$51 : BNE + ; 5 Bomb Capacity Upgrade
|
+ CPY.b #$51 : BNE + ; 5 Bomb Capacity Upgrade
|
||||||
LDX #$02
|
LDX.b #$02
|
||||||
JSR .maybeIncrementBombs
|
JSR .maybeIncrementBombs
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CPY.b #$52 : BNE + ; 10 Bomb Capacity Upgrade
|
+ CPY.b #$52 : BNE + ; 10 Bomb Capacity Upgrade
|
||||||
LDX #$02
|
LDX.b #$02
|
||||||
JSR .maybeIncrementBombs
|
JSR .maybeIncrementBombs
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CPY.b #$51 : !BLT + ; Items $51 - $54 - Capacity Upgrades
|
+ CPY.b #$51 : !BLT + ; Items $51 - $54 - Capacity Upgrades
|
||||||
@@ -671,7 +665,7 @@ RTL
|
|||||||
RTS
|
RTS
|
||||||
|
|
||||||
.setDungeonCompletion
|
.setDungeonCompletion
|
||||||
LDX $040C : BMI +
|
LDX.w DungeonID : BMI +
|
||||||
REP #$20 ; 16 bit
|
REP #$20 ; 16 bit
|
||||||
LDA.l DungeonMask, X
|
LDA.l DungeonMask, X
|
||||||
ORA.l DungeonsCompleted : STA.l DungeonsCompleted
|
ORA.l DungeonsCompleted : STA.l DungeonsCompleted
|
||||||
@@ -701,10 +695,10 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
HandleBombAbsorbtion:
|
HandleBombAbsorbtion:
|
||||||
STA.l BombsFiller ; thing we wrote over
|
STA.l BombsFiller ; thing we wrote over
|
||||||
LDA.w $0303 : BNE + ; skip if we already have some item selected
|
LDA.w CurrentYItem : BNE + ; skip if we already have some item selected
|
||||||
LDA.l BombCapacity : BEQ + ; skip if we can't have bombs
|
LDA.l BombCapacity : BEQ + ; skip if we can't have bombs
|
||||||
LDA.b #$04 : STA.w $0202 ; set selected item to bombs
|
LDA.b #$04 : STA.w ItemCursor ; set selected item to bombs
|
||||||
LDA.b #$01 : STA.w $0303 ; set selected item to bombs
|
LDA.b #$01 : STA.w CurrentYItem ; set selected item to bombs
|
||||||
JSL.l HUD_RebuildLong
|
JSL.l HUD_RebuildLong
|
||||||
+
|
+
|
||||||
RTL
|
RTL
|
||||||
@@ -714,7 +708,7 @@ RTL
|
|||||||
; AddYMarker:
|
; AddYMarker:
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
AddYMarker:
|
AddYMarker:
|
||||||
LDA.w $0202 : AND.w #$FF ; load item value
|
LDA.w ItemCursor : AND.w #$FF ; load item value
|
||||||
CMP.w #$02 : BNE + ; boomerang
|
CMP.w #$02 : BNE + ; boomerang
|
||||||
LDA.l InventoryTracking : AND.w #$C0 : CMP.w #$C0 : BEQ .drawYBubble : BRA .drawNormal
|
LDA.l InventoryTracking : AND.w #$C0 : CMP.w #$C0 : BEQ .drawYBubble : BRA .drawNormal
|
||||||
+ CMP.w #$01 : BNE + ; bow
|
+ CMP.w #$01 : BNE + ; bow
|
||||||
@@ -732,7 +726,7 @@ AddYMarker:
|
|||||||
BRA .drawTile
|
BRA .drawTile
|
||||||
|
|
||||||
.drawJarMarker
|
.drawJarMarker
|
||||||
LDA.w $0207 : AND.w #$0020 : BNE .drawXBubble
|
LDA.w MenuBlink : AND.w #$0020 : BNE .drawXBubble
|
||||||
|
|
||||||
.drawYBubble
|
.drawYBubble
|
||||||
LDA.w #$3D4F
|
LDA.w #$3D4F
|
||||||
@@ -785,7 +779,7 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
CheckKeys:
|
CheckKeys:
|
||||||
LDA.l GenericKeys : BEQ + : RTL : +
|
LDA.l GenericKeys : BEQ + : RTL : +
|
||||||
LDA.w $040C : CMP.b #$FF
|
LDA.w DungeonID : CMP.b #$FF
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -856,7 +850,7 @@ RTL
|
|||||||
LoadPowder:
|
LoadPowder:
|
||||||
JSL.l Sprite_SpawnDynamically ; thing we wrote over
|
JSL.l Sprite_SpawnDynamically ; thing we wrote over
|
||||||
%GetPossiblyEncryptedItem(WitchItem, SpriteItemValues)
|
%GetPossiblyEncryptedItem(WitchItem, SpriteItemValues)
|
||||||
STA.w $0DA0, Y ; Store item type
|
STA.w SpriteAuxTable, Y ; Store item type
|
||||||
JSL.l PrepDynamicTile
|
JSL.l PrepDynamicTile
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -880,12 +874,12 @@ RTL
|
|||||||
DrawPowder:
|
DrawPowder:
|
||||||
LDA.w $02DA : BNE .defer ; defer if link is buying a potion
|
LDA.w $02DA : BNE .defer ; defer if link is buying a potion
|
||||||
LDA.l RedrawFlag : BEQ +
|
LDA.l RedrawFlag : BEQ +
|
||||||
LDA.w $0DA0, X ; Retrieve stored item type
|
LDA.w SpriteAuxTable, X ; Retrieve stored item type
|
||||||
JSL.l PrepDynamicTile
|
JSL.l PrepDynamicTile
|
||||||
LDA.b #$00 : STA.l RedrawFlag ; reset redraw flag
|
LDA.b #$00 : STA.l RedrawFlag ; reset redraw flag
|
||||||
BRA .defer
|
BRA .defer
|
||||||
+
|
+
|
||||||
LDA.w $0DA0, X ; Retrieve stored item type
|
LDA.w SpriteAuxTable, X ; Retrieve stored item type
|
||||||
JSL.l DrawDynamicTile
|
JSL.l DrawDynamicTile
|
||||||
.defer
|
.defer
|
||||||
RTL
|
RTL
|
||||||
@@ -895,17 +889,17 @@ RTL
|
|||||||
; LoadMushroom:
|
; LoadMushroom:
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
LoadMushroom:
|
LoadMushroom:
|
||||||
LDA.b #$00 : STA.w $0DC0, X ; thing we wrote over
|
LDA.b #$00 : STA.w SpriteGFXControl, X ; thing we wrote over
|
||||||
.justGFX
|
.justGFX
|
||||||
|
|
||||||
PHA
|
PHA
|
||||||
|
|
||||||
LDA.b #$01 : STA.l RedrawFlag
|
LDA.b #$01 : STA.l RedrawFlag
|
||||||
LDA.b $5D : CMP.b #$14 : BEQ .skip ; skip if we're mid-mirror
|
LDA.b LinkState : CMP.b #$14 : BEQ .skip ; skip if we're mid-mirror
|
||||||
|
|
||||||
LDA.b #$00 : STA.l RedrawFlag
|
LDA.b #$00 : STA.l RedrawFlag
|
||||||
%GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues)
|
%GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues)
|
||||||
STA.w $0E80, X ; Store item type
|
STA.w SpriteItemType, X ; Store item type
|
||||||
JSL.l PrepDynamicTile
|
JSL.l PrepDynamicTile
|
||||||
|
|
||||||
.skip
|
.skip
|
||||||
@@ -923,7 +917,7 @@ DrawMushroom:
|
|||||||
BRA .done ; don't draw on the init frame
|
BRA .done ; don't draw on the init frame
|
||||||
|
|
||||||
.skipInit
|
.skipInit
|
||||||
LDA.w $0E80, X ; Retrieve stored item type
|
LDA.w SpriteItemType, X ; Retrieve stored item type
|
||||||
JSL.l DrawDynamicTile
|
JSL.l DrawDynamicTile
|
||||||
|
|
||||||
.done
|
.done
|
||||||
@@ -935,12 +929,12 @@ RTL
|
|||||||
; CollectPowder:
|
; CollectPowder:
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
CollectPowder:
|
CollectPowder:
|
||||||
LDY $0DA0, X ; Retrieve stored item type
|
LDY.w SpriteAuxTable, X ; Retrieve stored item type
|
||||||
BNE +
|
BNE +
|
||||||
; if for any reason the item value is 0 reload it, just in case
|
; if for any reason the item value is 0 reload it, just in case
|
||||||
%GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) : TAY
|
%GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) : TAY
|
||||||
+
|
+
|
||||||
STZ $02E9 ; item from NPC
|
STZ.w ItemReceiptMethod ; item from NPC
|
||||||
JSL.l Link_ReceiveItem
|
JSL.l Link_ReceiveItem
|
||||||
;JSL.l FullInventoryExternal
|
;JSL.l FullInventoryExternal
|
||||||
JSL.l ItemSet_Powder
|
JSL.l ItemSet_Powder
|
||||||
@@ -981,9 +975,9 @@ RTL
|
|||||||
; SpawnShovelGamePrizeSFX:
|
; SpawnShovelGamePrizeSFX:
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
SpawnShovelGamePrizeSFX:
|
SpawnShovelGamePrizeSFX:
|
||||||
STA.l $7FFE00 ; thing we wrote over
|
STA.l MiniGameTime ; thing we wrote over
|
||||||
PHA
|
PHA
|
||||||
LDA.b #$1B : STA.w $012F ; play puzzle sound
|
LDA.b #$1B : STA.w SFX3 ; play puzzle sound
|
||||||
PLA
|
PLA
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -995,9 +989,9 @@ SpawnChestGamePrizeSFX:
|
|||||||
CPX.b #$07 : BNE .normal
|
CPX.b #$07 : BNE .normal
|
||||||
LDA.b RoomIndex : CMP.b #$06 : BNE .normal
|
LDA.b RoomIndex : CMP.b #$06 : BNE .normal
|
||||||
.prize
|
.prize
|
||||||
LDA.b #$1B : STA.w $012F : RTL ; play puzzle sound
|
LDA.b #$1B : STA.w SFX3 : RTL ; play puzzle sound
|
||||||
.normal
|
.normal
|
||||||
LDA.b #$0E : STA.w $012F ; play chest sound
|
LDA.b #$0E : STA.w SFX3 ; play chest sound
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -1012,15 +1006,15 @@ SpawnShovelItem:
|
|||||||
JMP .skip
|
JMP .skip
|
||||||
+
|
+
|
||||||
|
|
||||||
LDA.w $035B : AND.b #$01 : BNE + : JMP .skip : + ; corner dig fix
|
LDA.w TileActDig : AND.b #$01 : BNE + : JMP .skip : + ; corner dig fix
|
||||||
|
|
||||||
PHY : PHP
|
PHY : PHP
|
||||||
PHB : PHK : PLB
|
PHB : PHK : PLB
|
||||||
SEP #$30 ; set 8-bit accumulator and index registers
|
SEP #$30 ; set 8-bit accumulator and index registers
|
||||||
|
|
||||||
LDA.b $1B : BEQ + : JMP .no_drop : + ; skip if indoors
|
LDA.b IndoorsFlag : BEQ + : JMP .no_drop : + ; skip if indoors
|
||||||
|
|
||||||
LDA.b $8A : CMP.b #$2A : BEQ .no_drop ; don't drop in the haunted grove
|
LDA.b OverworldIndex : CMP.b #$2A : BEQ .no_drop ; don't drop in the haunted grove
|
||||||
CMP.b #$68 : BEQ .no_drop ; don't drop in the digging game area
|
CMP.b #$68 : BEQ .no_drop ; don't drop in the digging game area
|
||||||
|
|
||||||
JSL GetRandomInt : BIT.b #$03 : BNE .no_drop ; drop with 1/4 chance
|
JSL GetRandomInt : BIT.b #$03 : BNE .no_drop ; drop with 1/4 chance
|
||||||
@@ -1031,25 +1025,25 @@ SpawnShovelItem:
|
|||||||
|
|
||||||
;most of this part below is copied from the digging game
|
;most of this part below is copied from the digging game
|
||||||
|
|
||||||
STA.l $7FFE00
|
STA.l MiniGameTime
|
||||||
JSL Sprite_SpawnDynamically
|
JSL Sprite_SpawnDynamically
|
||||||
|
|
||||||
LDX.b #$00
|
LDX.b #$00
|
||||||
LDA.b $2F : CMP.b #$04 : BEQ + : INX : +
|
LDA.b LinkDirection : CMP.b #$04 : BEQ + : INX : +
|
||||||
|
|
||||||
LDA.l .x_speeds, X : STA.w $0D50, Y
|
LDA.l .x_speeds, X : STA.w SpriteVelocityX, Y
|
||||||
|
|
||||||
LDA.b #$00 : STA.w $0D40, Y
|
LDA.b #$00 : STA.w SpriteVelocityY, Y
|
||||||
LDA.b #$18 : STA.w $0F80, Y
|
LDA.b #$18 : STA.w $0F80, Y
|
||||||
LDA.b #$FF : STA.w $0B58, Y
|
LDA.b #$FF : STA.w $0B58, Y
|
||||||
LDA.b #$30 : STA.w $0F10, Y
|
LDA.b #$30 : STA.w $0F10, Y
|
||||||
|
|
||||||
LDA.b $22 : !ADD.l .x_offsets, X
|
LDA.b $22 : !ADD.l .x_offsets, X
|
||||||
AND.b #$F0 : STA.w $0D10, Y
|
AND.b #$F0 : STA.w SpritePosXLow, Y
|
||||||
LDA.b $23 : ADC.b #$00 : STA.w $0D30, Y
|
LDA.b $23 : ADC.b #$00 : STA.w SpritePosXHigh, Y
|
||||||
|
|
||||||
LDA.b $20 : !ADD.b #$16 : AND.b #$F0 : STA.w $0D00, Y
|
LDA.b $20 : !ADD.b #$16 : AND.b #$F0 : STA.w SpritePosYLow, Y
|
||||||
LDA.b $21 : ADC.b #$00 : STA.w $0D20, Y
|
LDA.b $21 : ADC.b #$00 : STA.w SpritePosYHigh, Y
|
||||||
|
|
||||||
LDA.b #$00 : STA.w $0F20, Y
|
LDA.b #$00 : STA.w $0F20, Y
|
||||||
TYX
|
TYX
|
||||||
|
|||||||
49
inverted.asm
49
inverted.asm
@@ -67,13 +67,13 @@ Overworld_CreatePyramidHoleModified:
|
|||||||
LDA.w #$FFFF : STA.w $1012, Y
|
LDA.w #$FFFF : STA.w $1012, Y
|
||||||
|
|
||||||
.ending
|
.ending
|
||||||
LDA.w #$3515 : STA.w $012D
|
LDA.w #$3515 : STA.w SFX1
|
||||||
|
|
||||||
SEP #$30
|
SEP #$30
|
||||||
|
|
||||||
LDA.l OverworldEventDataWRAM+$5B : ORA.b #$20 : STA.l OverworldEventDataWRAM+$5B
|
LDA.l OverworldEventDataWRAM+$5B : ORA.b #$20 : STA.l OverworldEventDataWRAM+$5B
|
||||||
|
|
||||||
LDA.b #$03 : STA.w $012F
|
LDA.b #$03 : STA.w SFX3
|
||||||
|
|
||||||
LDA.b #$01 : STA.b $14
|
LDA.b #$01 : STA.b $14
|
||||||
|
|
||||||
@@ -138,26 +138,27 @@ RTL
|
|||||||
|
|
||||||
|
|
||||||
GanonTowerAnimation:
|
GanonTowerAnimation:
|
||||||
LDA.l InvertedMode : BEQ .done
|
LDA.l InvertedMode : BEQ .done
|
||||||
LDA.b #$1B : STA.w $012F
|
LDA.b #$1B : STA.w SFX3
|
||||||
STZ.w $04C6
|
STZ.w OWEntranceCutscene
|
||||||
STZ.b $B0
|
STZ.b SubSubModule
|
||||||
STZ.w $0710
|
STZ.w SkipOAM
|
||||||
STZ.w $02E4
|
STZ.w CutsceneFlag
|
||||||
|
|
||||||
STZ.w $0FC1
|
STZ.w FreezeSprites
|
||||||
|
|
||||||
STZ.w $011A
|
STZ.w BG1ShakeV
|
||||||
STZ.w $011B
|
STZ.w BG1ShakeV+1
|
||||||
STZ.w $011C
|
STZ.w BG1ShakeH
|
||||||
STZ.w $011D
|
STZ.w BG1ShakeH+1
|
||||||
LDA.b #$02 : STA.w $012C
|
LDA.b #$02 : STA.w MusicControlRequest
|
||||||
LDA.b #$09 : STA.w $012D
|
LDA.b #$09 : STA.w SFX1
|
||||||
RTL
|
RTL
|
||||||
.done
|
|
||||||
LDA.b #$05 : STA.w $04C6 ;what we wrote over
|
.done
|
||||||
STZ.b $B0 ; (continued)
|
LDA.b #$05 : STA.w OWEntranceCutscene ; what we wrote over
|
||||||
STZ.b $C8 ; (continued)
|
STZ.b SubSubModule ; (continued)
|
||||||
|
STZ.b ScrapBufferBD+$0B ; (continued)
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
GanonTowerInvertedCheck:
|
GanonTowerInvertedCheck:
|
||||||
@@ -166,7 +167,7 @@ GanonTowerInvertedCheck:
|
|||||||
LDA.b #$01 ; Load a random value so it doesn't BEQ
|
LDA.b #$01 ; Load a random value so it doesn't BEQ
|
||||||
RTL
|
RTL
|
||||||
.done
|
.done
|
||||||
LDA.b $8A : CMP.b #$43 ;what we wrote over
|
LDA.b OverworldIndex : CMP.b #$43 ;what we wrote over
|
||||||
RTL
|
RTL
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,7 +178,7 @@ HardcodedRocks:
|
|||||||
LDA.l InvertedMode : AND.w #$00FF : BEQ .normalrocks
|
LDA.l InvertedMode : AND.w #$00FF : BEQ .normalrocks
|
||||||
BRA .noRock2
|
BRA .noRock2
|
||||||
.normalrocks
|
.normalrocks
|
||||||
LDA.w #$020F : LDX $8A : CPX.w #$0033 : BNE .noRock
|
LDA.w #$020F : LDX.b OverworldIndex : CPX.w #$0033 : BNE .noRock
|
||||||
STA.l $7E22A8
|
STA.l $7E22A8
|
||||||
.noRock
|
.noRock
|
||||||
CPX.w #$002F : BNE .noRock2
|
CPX.w #$002F : BNE .noRock2
|
||||||
@@ -202,9 +203,9 @@ MirrorBonk:
|
|||||||
; otherwise fall through to .normal
|
; otherwise fall through to .normal
|
||||||
PHX : PHP
|
PHX : PHP
|
||||||
PHB : PHK : PLB
|
PHB : PHK : PLB
|
||||||
LDA.b $8A : AND.b #$40 : BEQ .endLoop ;World we're in? branch if we are in LW we don't want bonks
|
LDA.b OverworldIndex : AND.b #$40 : BEQ .endLoop ;World we're in? branch if we are in LW we don't want bonks
|
||||||
REP #$30
|
REP #$30
|
||||||
LDX #$0000
|
LDX.w #$0000
|
||||||
.loop
|
.loop
|
||||||
LDA.l .bonkRectanglesTable, X ;Load X1
|
LDA.l .bonkRectanglesTable, X ;Load X1
|
||||||
CMP $22 : !BGE ++
|
CMP $22 : !BGE ++
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
Overworld_LoadNewTiles:
|
Overworld_LoadNewTiles:
|
||||||
{
|
{
|
||||||
; add sign to EDM for OWG people to read
|
; add sign to EDM for OWG people to read
|
||||||
LDA.w $040A : AND.w #$00FF : CMP.w #$0005 : BNE +
|
LDA.b OverworldIndex : AND.w #$00FF : CMP.w #$0005 : BNE +
|
||||||
LDA.w #$0101 : STA.l $7E2E18 ; #$0101 is the sign tile16 id, $7E2D98 is the position of the tile16 on map
|
LDA.w #$0101 : STA.l $7E2E18 ; #$0101 is the sign tile16 id, $7E2D98 is the position of the tile16 on map
|
||||||
+
|
+
|
||||||
|
|
||||||
; GT sign
|
; GT sign
|
||||||
LDA.l InvertedMode : AND.w #$00FF : BNE +
|
LDA.l InvertedMode : AND.w #$00FF : BNE +
|
||||||
LDA.w $040A : AND.w #$00FF : CMP.w #$0043 : BNE +
|
LDA.b OverworldIndex : AND.w #$00FF : CMP.w #$0043 : BNE +
|
||||||
LDA.w #$0101 : STA.l $7E2550
|
LDA.w #$0101 : STA.l $7E2550
|
||||||
+
|
+
|
||||||
|
|
||||||
; Pyramid sign
|
; Pyramid sign
|
||||||
LDA.l InvertedMode : AND.w #$00FF : BNE +
|
LDA.l InvertedMode : AND.w #$00FF : BNE +
|
||||||
LDA.w $040A : AND.w #$00FF : CMP.w #$005B : BNE +
|
LDA.b OverworldIndex : AND.w #$00FF : CMP.w #$005B : BNE +
|
||||||
LDA.w #$0101 : STA.w $7E27B6 ; Moved sign near statue
|
LDA.w #$0101 : STA.w $7E27B6 ; Moved sign near statue
|
||||||
LDA.w #$05C2 : STA.w $7E27B4 ; added a pyramid peg on the left of the sign
|
LDA.w #$05C2 : STA.w $7E27B4 ; added a pyramid peg on the left of the sign
|
||||||
+
|
+
|
||||||
@@ -26,7 +26,7 @@ Overworld_LoadNewTiles:
|
|||||||
LDA.b #$7E : PHA : PLB
|
LDA.b #$7E : PHA : PLB
|
||||||
REP #$30
|
REP #$30
|
||||||
; Use it as an index into a jump table.
|
; Use it as an index into a jump table.
|
||||||
LDA.b $8A : CMP.w #$0080 : !BGE .noData
|
LDA.b OverworldIndex : CMP.w #$0080 : !BGE .noData
|
||||||
ASL A : TAX
|
ASL A : TAX
|
||||||
|
|
||||||
JSR (Overworld_NewTilesTable, X)
|
JSR (Overworld_NewTilesTable, X)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
;Statically mapped at $A1A000 Referenced by the front end. Do not move without coordination.
|
;Statically mapped at $A1A000 Referenced by the front end. Do not move without coordination.
|
||||||
InvertedTileAttributeLookup:
|
InvertedTileAttributeLookup:
|
||||||
SEP #$20
|
SEP #$20
|
||||||
LDA.b $8A : CMP.b #$47 : BEQ .turtleRock
|
LDA.b OverworldIndex : CMP.b #$47 : BEQ .turtleRock
|
||||||
LDA.l Overworld_TileAttr, X
|
LDA.l Overworld_TileAttr, X
|
||||||
JML.l Overworld_GetTileAttrAtLocation_continue
|
JML.l Overworld_GetTileAttrAtLocation_continue
|
||||||
.turtleRock
|
.turtleRock
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ LampCheck:
|
|||||||
|
|
||||||
LDA.l CurrentWorld : BNE +
|
LDA.l CurrentWorld : BNE +
|
||||||
.lightWorld
|
.lightWorld
|
||||||
LDA.w $040C : BNE ++ ; check if we're in sewers
|
LDA.w DungeonID : BNE ++ ; check if we're in sewers
|
||||||
LDA.l LampConeSewers : BRA .done
|
LDA.l LampConeSewers : BRA .done
|
||||||
++
|
++
|
||||||
LDA.l LampConeLightWorld : BRA .done
|
LDA.l LampConeLightWorld : BRA .done
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ MaidenCrystalScript:
|
|||||||
STZ.w $02D8
|
STZ.w $02D8
|
||||||
STZ.w $02DA
|
STZ.w $02DA
|
||||||
STZ.b $2E
|
STZ.b $2E
|
||||||
LDA.b #$02 : STA.w $2F
|
LDA.b #$02 : STA.w LinkDirection
|
||||||
LDA.l CrystalsField : AND.b #$7F : CMP.b #$7F : BNE + ; check if we have all crystals
|
LDA.l CrystalsField : AND.b #$7F : CMP.b #$7F : BNE + ; check if we have all crystals
|
||||||
LDA.b #$08 : STA.l MapIcons ; Update the map icon to just be Ganon's Tower
|
LDA.b #$08 : STA.l MapIcons ; Update the map icon to just be Ganon's Tower
|
||||||
+
|
+
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
TryOpenMire:
|
TryOpenMire:
|
||||||
; Checks if we're in the Swamp of Evil.
|
; Checks if we're in the Swamp of Evil.
|
||||||
LDA.b $8A : CMP.b #$70 : BNE .untriggered
|
LDA.b OverworldIndex : CMP.b #$70 : BNE .untriggered
|
||||||
|
|
||||||
; Checks whether the Misery Mire dungeon is already revealed.
|
; Checks whether the Misery Mire dungeon is already revealed.
|
||||||
LDA.l OverworldEventDataWRAM+$70 : AND.b #$20 : BNE .untriggered
|
LDA.l OverworldEventDataWRAM+$70 : AND.b #$20 : BNE .untriggered
|
||||||
@@ -12,17 +12,17 @@ TryOpenMire:
|
|||||||
LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCC .untriggered
|
LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCC .untriggered
|
||||||
|
|
||||||
; Do the 3rd animation for opening entrances
|
; Do the 3rd animation for opening entrances
|
||||||
LDA.b #$03 : STA.w $04C6
|
LDA.b #$03 : STA.w OWEntranceCutscene
|
||||||
|
|
||||||
STZ.b $B0 ; reset the sub-submodule index
|
STZ.b SubSubModule ; reset the sub-submodule index
|
||||||
STZ.b $C8 ; reset this other index.
|
STZ.b ScrapBufferBD+$0B ; reset this other index.
|
||||||
|
|
||||||
.untriggered
|
.untriggered
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
TryOpenTRock:
|
TryOpenTRock:
|
||||||
; Checks if we're at Turtle Rock.
|
; Checks if we're at Turtle Rock.
|
||||||
LDA.b $8A : CMP.b #$47 : BNE .untriggered
|
LDA.b OverworldIndex : CMP.b #$47 : BNE .untriggered
|
||||||
|
|
||||||
; Checks whether the Turtle Rock dungeon is already revealed.
|
; Checks whether the Turtle Rock dungeon is already revealed.
|
||||||
LDA.l OverworldEventDataWRAM+$47 : AND.b #$20 : BNE .untriggered
|
LDA.l OverworldEventDataWRAM+$47 : AND.b #$20 : BNE .untriggered
|
||||||
@@ -31,17 +31,17 @@ TryOpenTRock:
|
|||||||
LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCC .untriggered
|
LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCC .untriggered
|
||||||
|
|
||||||
; Do the 4rd animation for opening entrances
|
; Do the 4rd animation for opening entrances
|
||||||
LDA.b #$04 : STA.w $04C6
|
LDA.b #$04 : STA.w OWEntranceCutscene
|
||||||
|
|
||||||
STZ.b $B0 ; reset the sub-submodule index
|
STZ.b SubSubModule ; reset the sub-submodule index
|
||||||
STZ.b $C8 ; reset this other index.
|
STZ.b ScrapBufferBD+$0B ; reset this other index.
|
||||||
|
|
||||||
.untriggered
|
.untriggered
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
MedallionTrigger_Bombos:
|
MedallionTrigger_Bombos:
|
||||||
STZ.b $50 ; stuff we wrote over
|
STZ.b $50 ; stuff we wrote over
|
||||||
STZ.w $0FC1
|
STZ.w FreezeSprites
|
||||||
|
|
||||||
PHA
|
PHA
|
||||||
LDA.l MireRequiredMedallion : BNE +
|
LDA.l MireRequiredMedallion : BNE +
|
||||||
|
|||||||
24
msu.asm
24
msu.asm
@@ -208,7 +208,7 @@ CheckMusicLoadRequest:
|
|||||||
CMP.b #21 : BNE .check_fallback
|
CMP.b #21 : BNE .check_fallback
|
||||||
|
|
||||||
;.boss
|
;.boss
|
||||||
LDA.w $040C : LSR : !ADD.b #45
|
LDA.w DungeonID : LSR : !ADD.b #45
|
||||||
BRA .check_fallback-3
|
BRA .check_fallback-3
|
||||||
.lightworld
|
.lightworld
|
||||||
PHA
|
PHA
|
||||||
@@ -226,14 +226,14 @@ CheckMusicLoadRequest:
|
|||||||
PHA
|
PHA
|
||||||
LDA.l CrystalsField : CMP.b #$7F : BEQ -
|
LDA.l CrystalsField : CMP.b #$7F : BEQ -
|
||||||
LDA.l CurrentWorld : BEQ --
|
LDA.l CurrentWorld : BEQ --
|
||||||
LDA.b $8A : CMP #$40 : BNE --
|
LDA.b OverworldIndex : CMP #$40 : BNE --
|
||||||
PLA
|
PLA
|
||||||
LDA.b #15 : BRA .check_fallback-3
|
LDA.b #15 : BRA .check_fallback-3
|
||||||
.castle
|
.castle
|
||||||
LDA.w $040C
|
LDA.w DungeonID
|
||||||
CMP.b #$08 : BNE .check_fallback ; Hyrule Castle 2
|
CMP.b #$08 : BNE .check_fallback ; Hyrule Castle 2
|
||||||
.dungeon
|
.dungeon
|
||||||
LDA.w $040C : LSR : !ADD.b #33 : STA.w MusicControlRequest
|
LDA.w DungeonID : LSR : !ADD.b #33 : STA.w MusicControlRequest
|
||||||
|
|
||||||
.check_fallback
|
.check_fallback
|
||||||
LDX.w MusicControlRequest
|
LDX.w MusicControlRequest
|
||||||
@@ -267,7 +267,7 @@ CheckMusicLoadRequest:
|
|||||||
|
|
||||||
.dungeon_fallback
|
.dungeon_fallback
|
||||||
PHB : REP #$10
|
PHB : REP #$10
|
||||||
LDX $040C
|
LDX.w DungeonID
|
||||||
LDA.b #Music_Eastern>>16 : PHA : PLB ; Set bank to music pointers
|
LDA.b #Music_Eastern>>16 : PHA : PLB ; Set bank to music pointers
|
||||||
LDY.b Scrap00 : PHY
|
LDY.b Scrap00 : PHY
|
||||||
REP #$20
|
REP #$20
|
||||||
@@ -291,7 +291,7 @@ CheckMusicLoadRequest:
|
|||||||
|
|
||||||
LDA.w MusicControlRequest : CMP.b #08 : BEQ .done+3 ; No SFX during warp track
|
LDA.w MusicControlRequest : CMP.b #08 : BEQ .done+3 ; No SFX during warp track
|
||||||
|
|
||||||
LDA.b $10
|
LDA.b GameMode
|
||||||
CMP.b #$07 : BEQ .sfx_indoors
|
CMP.b #$07 : BEQ .sfx_indoors
|
||||||
CMP.b #$0E : BEQ .sfx_indoors
|
CMP.b #$0E : BEQ .sfx_indoors
|
||||||
CMP.b #$09 : BNE .done
|
CMP.b #$09 : BNE .done
|
||||||
@@ -300,7 +300,7 @@ CheckMusicLoadRequest:
|
|||||||
SEP #$10
|
SEP #$10
|
||||||
LDX.b #$09
|
LDX.b #$09
|
||||||
|
|
||||||
LDA.b $8A ; Dark Death Mountain
|
LDA.b OverworldIndex ; Dark Death Mountain
|
||||||
CMP.b #$43 : BEQ + : CMP.b #$45 : BEQ + : CMP.b #$47 : BEQ +
|
CMP.b #$43 : BEQ + : CMP.b #$45 : BEQ + : CMP.b #$47 : BEQ +
|
||||||
LDX.b #$05
|
LDX.b #$05
|
||||||
+
|
+
|
||||||
@@ -313,7 +313,7 @@ CheckMusicLoadRequest:
|
|||||||
.rain
|
.rain
|
||||||
LDX.b #$01
|
LDX.b #$01
|
||||||
+
|
+
|
||||||
STX.w $012D
|
STX.w SFX1
|
||||||
REP #$10
|
REP #$10
|
||||||
|
|
||||||
.done
|
.done
|
||||||
@@ -323,7 +323,7 @@ CheckMusicLoadRequest:
|
|||||||
|
|
||||||
.sfx_indoors
|
.sfx_indoors
|
||||||
LDA.w MusicControlRequest : STA.w MusicControl : STZ.w MusicControlRequest
|
LDA.w MusicControlRequest : STA.w MusicControl : STZ.w MusicControlRequest
|
||||||
SEP #$20 : LDA.b #$05 : STA.w $012D
|
SEP #$20 : LDA.b #$05 : STA.w SFX1
|
||||||
REP #$30 : PLY : PLX : PLA : PLD : PLB : PLP
|
REP #$30 : PLY : PLX : PLA : PLD : PLB : PLP
|
||||||
JML Module_PreDungeon_setAmbientSfx
|
JML Module_PreDungeon_setAmbientSfx
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -660,7 +660,7 @@ MSUMain:
|
|||||||
LDA.b #$00 : STA.w MSUResumeTrack
|
LDA.b #$00 : STA.w MSUResumeTrack
|
||||||
+
|
+
|
||||||
CPX #07 : BNE + ; Kakariko Village
|
CPX #07 : BNE + ; Kakariko Village
|
||||||
LDA.b $10 : CMP #$07 : BNE +
|
LDA.b GameMode : CMP #$07 : BNE +
|
||||||
; we're in link's house -> ignore
|
; we're in link's house -> ignore
|
||||||
LDA.b #$00
|
LDA.b #$00
|
||||||
BRA ++
|
BRA ++
|
||||||
@@ -680,7 +680,7 @@ MSUMain:
|
|||||||
CMP.b #47 : !BGE .done
|
CMP.b #47 : !BGE .done
|
||||||
|
|
||||||
+ : PHB : REP #$10
|
+ : PHB : REP #$10
|
||||||
LDX $040C
|
LDX.w DungeonID
|
||||||
LDA.b #Music_Eastern>>16 : PHA : PLB ; Set bank to music pointers
|
LDA.b #Music_Eastern>>16 : PHA : PLB ; Set bank to music pointers
|
||||||
LDY.b Scrap00 : PHY
|
LDY.b Scrap00 : PHY
|
||||||
REP #$20
|
REP #$20
|
||||||
@@ -763,7 +763,7 @@ CrystalFanfareWait:
|
|||||||
; Delay input scanning on startup/S&Q to avoid hard-lock from button mashing
|
; Delay input scanning on startup/S&Q to avoid hard-lock from button mashing
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
StartupWait:
|
StartupWait:
|
||||||
LDA.b $11 : CMP.b #$04 : BCC .done ; thing we wrote over
|
LDA.b GameSubMode : CMP.b #$04 : BCC .done ; thing we wrote over
|
||||||
LDA.w APUIO0 : BEQ .done-1
|
LDA.w APUIO0 : BEQ .done-1
|
||||||
CMP.b #$01 : BEQ .done
|
CMP.b #$01 : BEQ .done
|
||||||
CLC
|
CLC
|
||||||
|
|||||||
50
music.asm
50
music.asm
@@ -9,7 +9,7 @@ PreOverworld_LoadProperties_ChooseMusic:
|
|||||||
|
|
||||||
LDX.b #$02 ; Default light world theme
|
LDX.b #$02 ; Default light world theme
|
||||||
|
|
||||||
LDA.b $8A : ORA.b #$40 ; check both light and dark world DM at the same time
|
LDA.b OverworldIndex : ORA.b #$40 ; check both light and dark world DM at the same time
|
||||||
CMP.b #$43 : BEQ .endOfLightWorldChecks
|
CMP.b #$43 : BEQ .endOfLightWorldChecks
|
||||||
CMP.b #$45 : BEQ .endOfLightWorldChecks
|
CMP.b #$45 : BEQ .endOfLightWorldChecks
|
||||||
CMP.b #$47 : BEQ .endOfLightWorldChecks
|
CMP.b #$47 : BEQ .endOfLightWorldChecks
|
||||||
@@ -17,12 +17,12 @@ PreOverworld_LoadProperties_ChooseMusic:
|
|||||||
LDY.b #$5A ; Main overworld animated tileset
|
LDY.b #$5A ; Main overworld animated tileset
|
||||||
|
|
||||||
; Skip village and lost woods checks if entering dark world or a special area
|
; Skip village and lost woods checks if entering dark world or a special area
|
||||||
LDA.b $8A : CMP.b #$40 : !BGE .notVillageOrWoods
|
LDA.b OverworldIndex : CMP.b #$40 : !BGE .notVillageOrWoods
|
||||||
|
|
||||||
LDX.b #$07 ; Default village theme
|
LDX.b #$07 ; Default village theme
|
||||||
|
|
||||||
; Check if we're entering the village
|
; Check if we're entering the village
|
||||||
LDA.b $8A : CMP.b #$18 : BEQ .endOfLightWorldChecks
|
LDA.b OverworldIndex : CMP.b #$18 : BEQ .endOfLightWorldChecks
|
||||||
; For NA release would we also branch on indexes #$22 #$28 #$29
|
; For NA release would we also branch on indexes #$22 #$28 #$29
|
||||||
|
|
||||||
LDX.b #$05 ; Lost woods theme
|
LDX.b #$05 ; Lost woods theme
|
||||||
@@ -33,7 +33,7 @@ PreOverworld_LoadProperties_ChooseMusic:
|
|||||||
+
|
+
|
||||||
|
|
||||||
; check if we are entering lost woods
|
; check if we are entering lost woods
|
||||||
LDA.b $8A : BEQ .endOfLightWorldChecks
|
LDA.b OverworldIndex : BEQ .endOfLightWorldChecks
|
||||||
|
|
||||||
.notVillageOrWoods
|
.notVillageOrWoods
|
||||||
; Use the normal overworld (light world) music
|
; Use the normal overworld (light world) music
|
||||||
@@ -52,7 +52,7 @@ PreOverworld_LoadProperties_ChooseMusic:
|
|||||||
LDX.b #$0F ; dark woods theme
|
LDX.b #$0F ; dark woods theme
|
||||||
|
|
||||||
; This music is used in dark woods
|
; This music is used in dark woods
|
||||||
LDA.b $8A
|
LDA.b OverworldIndex
|
||||||
CMP.b #$40 : BEQ +
|
CMP.b #$40 : BEQ +
|
||||||
LDX.b #$0D ; dark death mountain theme
|
LDX.b #$0D ; dark death mountain theme
|
||||||
|
|
||||||
@@ -118,7 +118,7 @@ Overworld_FinishMirrorWarp:
|
|||||||
|
|
||||||
LDX.b #$09 ; default dark world theme
|
LDX.b #$09 ; default dark world theme
|
||||||
|
|
||||||
LDA.b $8A : CMP.b #$40 : !BGE .endOfLightWorldChecks
|
LDA.b OverworldIndex : CMP.b #$40 : !BGE .endOfLightWorldChecks
|
||||||
|
|
||||||
LDX.b #$02 ; hyrule field theme
|
LDX.b #$02 ; hyrule field theme
|
||||||
|
|
||||||
@@ -136,9 +136,9 @@ Overworld_FinishMirrorWarp:
|
|||||||
LDX.b #$07 ; Default village theme (phase <3)
|
LDX.b #$07 ; Default village theme (phase <3)
|
||||||
|
|
||||||
.endOfLightWorldChecks
|
.endOfLightWorldChecks
|
||||||
STX.w $012C
|
STX.w MusicControlRequest
|
||||||
|
|
||||||
LDA.b $8A : CMP.b #$40 : BNE +
|
LDA.b OverworldIndex : CMP.b #$40 : BNE +
|
||||||
LDX.b #$0F ; dark woods theme
|
LDX.b #$0F ; dark woods theme
|
||||||
BRA .bunny
|
BRA .bunny
|
||||||
+
|
+
|
||||||
@@ -148,7 +148,7 @@ Overworld_FinishMirrorWarp:
|
|||||||
CMP.b #$47 : BNE .notDarkMountain
|
CMP.b #$47 : BNE .notDarkMountain
|
||||||
|
|
||||||
.darkMountain
|
.darkMountain
|
||||||
LDA.b #$09 : STA.w $012D ; set storm ambient SFX
|
LDA.b #$09 : STA.w SFX1 ; set storm ambient SFX
|
||||||
LDX.b #$0D ; dark mountain theme
|
LDX.b #$0D ; dark mountain theme
|
||||||
|
|
||||||
.bunny
|
.bunny
|
||||||
@@ -156,16 +156,16 @@ Overworld_FinishMirrorWarp:
|
|||||||
LDX.b #$04 ; bunny theme
|
LDX.b #$04 ; bunny theme
|
||||||
+
|
+
|
||||||
|
|
||||||
STX.w $012C
|
STX.w MusicControlRequest
|
||||||
|
|
||||||
.notDarkMountain
|
.notDarkMountain
|
||||||
|
|
||||||
LDA.b $11 : STA.w $010C
|
LDA.b GameSubMode : STA.w GameSubModeCache ; GameModeCache
|
||||||
|
|
||||||
STZ.b $11
|
STZ.b GameSubMode
|
||||||
STZ.b $B0
|
STZ.b SubSubModule
|
||||||
STZ.w $0200
|
STZ.w SubModuleInterface
|
||||||
STZ.w $0710
|
STZ.w SkipOAM
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -173,17 +173,17 @@ Overworld_FinishMirrorWarp:
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
BirdTravel_LoadTargetAreaMusic:
|
BirdTravel_LoadTargetAreaMusic:
|
||||||
; Skip village and lost woods checks if entering dark world or a special area
|
; Skip village and lost woods checks if entering dark world or a special area
|
||||||
LDA.b $8A : CMP.b #$43 : BEQ .endOfLightWorldChecks
|
LDA.b OverworldIndex : CMP.b #$43 : BEQ .endOfLightWorldChecks
|
||||||
CMP.b #$40 : !BGE .notVillageOrWoods
|
CMP.b #$40 : !BGE .notVillageOrWoods
|
||||||
|
|
||||||
LDX.b #$07 ; Default village theme
|
LDX.b #$07 ; Default village theme
|
||||||
|
|
||||||
; Check if we're entering the village
|
; Check if we're entering the village
|
||||||
LDA.b $8A : CMP.b #$18 : BEQ .endOfLightWorldChecks
|
LDA.b OverworldIndex : CMP.b #$18 : BEQ .endOfLightWorldChecks
|
||||||
; For NA release would we also branch on indexes #$22 #$28 #$29
|
; For NA release would we also branch on indexes #$22 #$28 #$29
|
||||||
|
|
||||||
; check if we are entering lost woods
|
; check if we are entering lost woods
|
||||||
LDA.b $8A : BEQ .endOfLightWorldChecks
|
LDA.b OverworldIndex : BEQ .endOfLightWorldChecks
|
||||||
|
|
||||||
.notVillageOrWoods
|
.notVillageOrWoods
|
||||||
; Use the normal overworld (light world) music
|
; Use the normal overworld (light world) music
|
||||||
@@ -201,24 +201,24 @@ BirdTravel_LoadTargetAreaMusic:
|
|||||||
|
|
||||||
LDX.b #$09 ; dark overworld theme
|
LDX.b #$09 ; dark overworld theme
|
||||||
|
|
||||||
LDA.b $8A
|
LDA.b OverworldIndex
|
||||||
; Misery Mire rain SFX
|
; Misery Mire rain SFX
|
||||||
CMP.b #$70 : BNE ++
|
CMP.b #$70 : BNE ++
|
||||||
LDA.l OverworldEventDataWRAM+$70 : AND.b #$20 : BNE ++
|
LDA.l OverworldEventDataWRAM+$70 : AND.b #$20 : BNE ++
|
||||||
LDA.b #$01 : CMP.w $0131 : BEQ +
|
LDA.b #$01 : CMP.w $0131 : BEQ +
|
||||||
STA.w $012D
|
STA.w SFX1
|
||||||
+ : BRA .checkInverted
|
+ : BRA .checkInverted
|
||||||
++
|
++
|
||||||
|
|
||||||
; This music is used in dark death mountain
|
; This music is used in dark death mountain
|
||||||
CMP.b #$43 : BEQ .darkMountain
|
CMP.b #$43 : BEQ .darkMountain
|
||||||
LDA.b #$05 : STA.w $012D
|
LDA.b #$05 : STA.w SFX1
|
||||||
BRA .checkInverted
|
BRA .checkInverted
|
||||||
|
|
||||||
.darkMountain
|
.darkMountain
|
||||||
LDA.l CrystalsField : CMP.b #$7F : BEQ +
|
LDA.l CrystalsField : CMP.b #$7F : BEQ +
|
||||||
LDX.b #$0D ; dark death mountain theme
|
LDX.b #$0D ; dark death mountain theme
|
||||||
+ : LDA.b #$09 : STA.w $012D
|
+ : LDA.b #$09 : STA.w SFX1
|
||||||
|
|
||||||
; if not inverted and light world, or inverted and dark world, skip moon pearl check
|
; if not inverted and light world, or inverted and dark world, skip moon pearl check
|
||||||
.checkInverted
|
.checkInverted
|
||||||
@@ -237,8 +237,8 @@ BirdTravel_LoadTargetAreaMusic:
|
|||||||
;0 = Is Kakariko Overworld
|
;0 = Is Kakariko Overworld
|
||||||
;1 = Not Kakariko Overworld
|
;1 = Not Kakariko Overworld
|
||||||
PsychoSolder_MusicCheck:
|
PsychoSolder_MusicCheck:
|
||||||
LDA.w $040A : CMP.b #$18 : BNE .done ; thing we overwrote - check if overworld location is Kakariko
|
LDA.b OverworldIndex : CMP.b #$18 : BNE .done ; thing we overwrote - check if overworld location is Kakariko
|
||||||
LDA.b $1B ; Also check that we are outdoors
|
LDA.b IndoorsFlag ; Also check that we are outdoors
|
||||||
.done
|
.done
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -258,7 +258,7 @@ Overworld_MosaicDarkWorldChecks:
|
|||||||
LDA.l CrystalsField : CMP.b #$7F : BEQ .done
|
LDA.l CrystalsField : CMP.b #$7F : BEQ .done
|
||||||
|
|
||||||
.doFade
|
.doFade
|
||||||
LDA.b #$F1 : STA.w $012C ; thing we wrote over, fade out music
|
LDA.b #$F1 : STA.w MusicControlRequest ; thing we wrote over, fade out music
|
||||||
|
|
||||||
.done
|
.done
|
||||||
RTL
|
RTL
|
||||||
|
|||||||
1148
musicvolumes.asm
1148
musicvolumes.asm
File diff suppressed because it is too large
Load Diff
@@ -126,14 +126,14 @@ NewDrawHud:
|
|||||||
!C_ICON = $295F
|
!C_ICON = $295F
|
||||||
|
|
||||||
SEP #$20
|
SEP #$20
|
||||||
LDA.b $1B : BEQ .noprize
|
LDA.b IndoorsFlag : BEQ .noprize
|
||||||
|
|
||||||
LDX.w $040C
|
LDX.w DungeonID
|
||||||
CPX #$1A : !BGE .noprize
|
CPX #$1A : !BGE .noprize
|
||||||
CPX #$04 : !BLT .noprize
|
CPX #$04 : !BLT .noprize
|
||||||
CPX #$08 : BEQ .noprize
|
CPX #$08 : BEQ .noprize
|
||||||
|
|
||||||
LDA.b $10 : CMP #$12 : BEQ .noprize
|
LDA.b GameMode : CMP #$12 : BEQ .noprize
|
||||||
|
|
||||||
LDA.l MapMode
|
LDA.l MapMode
|
||||||
REP #$20
|
REP #$20
|
||||||
@@ -174,7 +174,7 @@ DrawMagicMeter_mp_tilemap = $0DFE0F
|
|||||||
LDA.l InfiniteMagic : AND.w #$00FF : BNE + : JMP .green : +
|
LDA.l InfiniteMagic : AND.w #$00FF : BNE + : JMP .green : +
|
||||||
SEP #$20 : LDA.b #$80 : STA.l CurrentMagic : REP #$30 ; set magic to max
|
SEP #$20 : LDA.b #$80 : STA.l CurrentMagic : REP #$30 ; set magic to max
|
||||||
LDX.w #$0080 ; load full magic meter graphics
|
LDX.w #$0080 ; load full magic meter graphics
|
||||||
LDA.b $1A : AND.w #$000C : LSR #2
|
LDA.b FrameCounter : AND.w #$000C : LSR #2
|
||||||
BEQ .red
|
BEQ .red
|
||||||
CMP.w #0001 : BEQ .yellow
|
CMP.w #0001 : BEQ .yellow
|
||||||
CMP.w #0002 : BNE + : JMP .green : +
|
CMP.w #0002 : BNE + : JMP .green : +
|
||||||
|
|||||||
16
newitems.asm
16
newitems.asm
@@ -359,14 +359,14 @@ AddReceivedItemExpandedGetItem:
|
|||||||
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys
|
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys
|
||||||
JMP .done
|
JMP .done
|
||||||
.normal
|
.normal
|
||||||
TXA : ASL : CMP.w $040C : BNE ++
|
TXA : ASL : CMP.w DungeonID : BNE ++
|
||||||
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys
|
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys
|
||||||
++
|
++
|
||||||
JMP .done
|
JMP .done
|
||||||
+
|
+
|
||||||
.done
|
.done
|
||||||
PLX
|
PLX
|
||||||
LDA.w $02E9 : CMP.b #$01 ; thing we wrote over
|
LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over
|
||||||
RTL
|
RTL
|
||||||
; #$70 - Maps
|
; #$70 - Maps
|
||||||
; #$80 - Compasses
|
; #$80 - Compasses
|
||||||
@@ -1050,18 +1050,18 @@ CountBottles:
|
|||||||
RTS
|
RTS
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
ActivateGoal:
|
ActivateGoal:
|
||||||
STZ.b $11
|
STZ.b GameSubMode
|
||||||
STZ.b $B0
|
STZ.b SubSubModule
|
||||||
JML.l StatsFinalPrep
|
JML.l StatsFinalPrep
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
ChestPrep:
|
ChestPrep:
|
||||||
LDA.b #$01 : STA.w $02E9
|
LDA.b #$01 : STA.w ItemReceiptMethod
|
||||||
JSL.l IncrementChestCounter
|
JSL.l IncrementChestCounter
|
||||||
LDA.l ServerRequestMode : BEQ +
|
LDA.l ServerRequestMode : BEQ +
|
||||||
JSL.l ChestItemServiceRequest
|
JSL.l ChestItemServiceRequest
|
||||||
RTL
|
RTL
|
||||||
+
|
+
|
||||||
LDY.b $0C ; get item value
|
LDY.b Scrap0C ; get item value
|
||||||
SEC
|
SEC
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -1069,7 +1069,7 @@ RTL
|
|||||||
; counts on
|
; counts on
|
||||||
MaybeFlagCompassTotalPickup:
|
MaybeFlagCompassTotalPickup:
|
||||||
LDA.l CompassMode : AND.b #$0F : BEQ .done
|
LDA.l CompassMode : AND.b #$0F : BEQ .done
|
||||||
LDA.w $040C : CMP.b #$FF : BEQ .done
|
LDA.w DungeonID : CMP.b #$FF : BEQ .done
|
||||||
LSR : STA.b Scrap04 : LDA.b #$0F : !SUB Scrap04 ; Compute flag "index"
|
LSR : STA.b Scrap04 : LDA.b #$0F : !SUB Scrap04 ; Compute flag "index"
|
||||||
CPY.b #$25 : BEQ .setFlag ; Set flag if it's a compass for this dungeon
|
CPY.b #$25 : BEQ .setFlag ; Set flag if it's a compass for this dungeon
|
||||||
STA.b Scrap04
|
STA.b Scrap04
|
||||||
@@ -1090,7 +1090,7 @@ RTL
|
|||||||
; Set the compass count display flag if we're entering a dungeon and alerady have
|
; Set the compass count display flag if we're entering a dungeon and alerady have
|
||||||
; that compass
|
; that compass
|
||||||
MaybeFlagCompassTotalEntrance:
|
MaybeFlagCompassTotalEntrance:
|
||||||
LDX.w $040C : CPX.b #$FF : BEQ .done ; Skip if we're not entering dungeon
|
LDX.w DungeonID : CPX.b #$FF : BEQ .done ; Skip if we're not entering dungeon
|
||||||
LDA.l CompassMode : AND.w #$000F : BEQ .done ; Skip if we're not showing compass counts
|
LDA.l CompassMode : AND.w #$000F : BEQ .done ; Skip if we're not showing compass counts
|
||||||
CMP.w #$0002 : BEQ .countShown
|
CMP.w #$0002 : BEQ .countShown
|
||||||
LDA.l CompassField : AND.l DungeonItemMasks, X : BEQ .done ; skip if we don't have compass
|
LDA.l CompassField : AND.l DungeonItemMasks, X : BEQ .done ; skip if we don't have compass
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ ItemCheck_TreeKid3:
|
|||||||
BRA .done
|
BRA .done
|
||||||
LDA.b #$05
|
LDA.b #$05
|
||||||
.normal
|
.normal
|
||||||
LDA.w $0D80, X
|
LDA.w SpriteUnknown, X
|
||||||
.done
|
.done
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
@@ -133,13 +133,13 @@ RTL
|
|||||||
ItemSet_Mushroom:
|
ItemSet_Mushroom:
|
||||||
PHA
|
PHA
|
||||||
LDA.l NpcFlags+1 : ORA.b #$10 : STA.l NpcFlags+1
|
LDA.l NpcFlags+1 : ORA.b #$10 : STA.l NpcFlags+1
|
||||||
LDY.w $0E80, X ; Retrieve stored item type
|
LDY.w SpriteItemType, X ; Retrieve stored item type
|
||||||
BNE +
|
BNE +
|
||||||
; if for any reason the item value is 0 reload it, just in case
|
; if for any reason the item value is 0 reload it, just in case
|
||||||
%GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues) : TAY
|
%GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues) : TAY
|
||||||
+
|
+
|
||||||
PLA
|
PLA
|
||||||
STZ.w $02E9 ; thing we wrote over - the mushroom is an npc for item purposes apparently
|
STZ.w ItemReceiptMethod ; thing we wrote over - the mushroom is an npc for item purposes apparently
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
ItemSet_Powder:
|
ItemSet_Powder:
|
||||||
@@ -151,7 +151,7 @@ RTL
|
|||||||
; Randomize 300 Rupee NPC
|
; Randomize 300 Rupee NPC
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
Set300RupeeNPCItem:
|
Set300RupeeNPCItem:
|
||||||
INC.w $0D80, X ; thing we wrote over
|
INC.w SpriteUnknown, X ; thing we wrote over
|
||||||
|
|
||||||
PHA : PHP
|
PHA : PHP
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
|
|||||||
93
password.asm
93
password.asm
@@ -1,8 +1,5 @@
|
|||||||
PASSWORD_CODE_POSITION = $C8
|
|
||||||
PASSWORD_SELECTION_POSITION = $C9
|
|
||||||
|
|
||||||
Module_Password:
|
Module_Password:
|
||||||
LDA.b $11
|
LDA.b GameSubMode
|
||||||
|
|
||||||
JSL.l UseImplicitRegIndexedLongJumpTable
|
JSL.l UseImplicitRegIndexedLongJumpTable
|
||||||
|
|
||||||
@@ -21,15 +18,15 @@ Password_BeginInit:
|
|||||||
JSL LoadCustomHudPalette ; replace the 2bpp palettes, and trigger upload
|
JSL LoadCustomHudPalette ; replace the 2bpp palettes, and trigger upload
|
||||||
LDA.b #$07 : STA.b $14 ; have NMI load up the initial tilemap from Password_Tilemap
|
LDA.b #$07 : STA.b $14 ; have NMI load up the initial tilemap from Password_Tilemap
|
||||||
|
|
||||||
INC.b $11
|
INC.b GameSubMode
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
Password_EndInit:
|
Password_EndInit:
|
||||||
JSR LoadPasswordStripeTemplate
|
JSR LoadPasswordStripeTemplate
|
||||||
|
|
||||||
;reset the variables used by this screen
|
;reset the variables used by this screen
|
||||||
STZ.b PASSWORD_CODE_POSITION
|
STZ.b PasswordCodePosition
|
||||||
STZ.b PASSWORD_SELECTION_POSITION
|
STZ.b PasswordSelectPosition
|
||||||
|
|
||||||
JSL ValidatePassword : BNE +
|
JSL ValidatePassword : BNE +
|
||||||
; zero out password if not valid
|
; zero out password if not valid
|
||||||
@@ -41,7 +38,7 @@ Password_EndInit:
|
|||||||
+
|
+
|
||||||
|
|
||||||
LDA.b #$0F : STA.b $13
|
LDA.b #$0F : STA.b $13
|
||||||
INC $11
|
INC.b GameSubMode
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
Password_Main:
|
Password_Main:
|
||||||
@@ -58,38 +55,38 @@ Password_Main:
|
|||||||
JSR PasswordMoveCursorLeft
|
JSR PasswordMoveCursorLeft
|
||||||
+
|
+
|
||||||
LDA.b $F4 : AND.b #$01 : BEQ + ; right
|
LDA.b $F4 : AND.b #$01 : BEQ + ; right
|
||||||
LDA.b PASSWORD_SELECTION_POSITION : INC A : CMP.b #$24 : !BLT ++
|
LDA.b PasswordSelectPosition : INC A : CMP.b #$24 : !BLT ++
|
||||||
!SUB.b #$24
|
!SUB.b #$24
|
||||||
++
|
++
|
||||||
STA.b PASSWORD_SELECTION_POSITION
|
STA.b PasswordSelectPosition
|
||||||
LDA.b #$20 : STA.w $012F
|
LDA.b #$20 : STA.w SFX3
|
||||||
+
|
+
|
||||||
LDA.b $F4 : AND.b #$02 : BEQ + ; left
|
LDA.b $F4 : AND.b #$02 : BEQ + ; left
|
||||||
LDA.b PASSWORD_SELECTION_POSITION : DEC A : BPL ++
|
LDA.b PasswordSelectPosition : DEC A : BPL ++
|
||||||
!ADD.b #$24
|
!ADD.b #$24
|
||||||
++
|
++
|
||||||
STA.b PASSWORD_SELECTION_POSITION
|
STA.b PasswordSelectPosition
|
||||||
LDA.b #$20 : STA.w $012F
|
LDA.b #$20 : STA.w SFX3
|
||||||
+
|
+
|
||||||
LDA.b $F4 : AND.b #$04 : BEQ + ; down
|
LDA.b $F4 : AND.b #$04 : BEQ + ; down
|
||||||
LDA.b PASSWORD_SELECTION_POSITION : !ADD.b #$09 : CMP.b #$24 : !BLT ++
|
LDA.b PasswordSelectPosition : !ADD.b #$09 : CMP.b #$24 : !BLT ++
|
||||||
!SUB.b #$24
|
!SUB.b #$24
|
||||||
++
|
++
|
||||||
STA.b PASSWORD_SELECTION_POSITION
|
STA.b PasswordSelectPosition
|
||||||
LDA.b #$20 : STA.w $012F
|
LDA.b #$20 : STA.w SFX3
|
||||||
+
|
+
|
||||||
LDA.b $F4 : AND.b #$08 : BEQ + ; up
|
LDA.b $F4 : AND.b #$08 : BEQ + ; up
|
||||||
LDA.b PASSWORD_SELECTION_POSITION : !SUB.b #$09 : BPL ++
|
LDA.b PasswordSelectPosition : !SUB.b #$09 : BPL ++
|
||||||
!ADD.b #$24
|
!ADD.b #$24
|
||||||
++
|
++
|
||||||
STA.b PASSWORD_SELECTION_POSITION
|
STA.b PasswordSelectPosition
|
||||||
LDA.b #$20 : STA.w $012F
|
LDA.b #$20 : STA.w SFX3
|
||||||
+
|
+
|
||||||
LDA.b $F4 : ORA.b $F6 : AND.b #$C0 : BEQ + ; face button
|
LDA.b $F4 : ORA.b $F6 : AND.b #$C0 : BEQ + ; face button
|
||||||
LDX.b PASSWORD_SELECTION_POSITION
|
LDX.b PasswordSelectPosition
|
||||||
LDA.l .selectionValues, X : BPL ++
|
LDA.l .selectionValues, X : BPL ++
|
||||||
CMP.b #$F0 : BNE +++
|
CMP.b #$F0 : BNE +++
|
||||||
INC $11
|
INC.b GameSubMode
|
||||||
BRA .endOfButtonChecks
|
BRA .endOfButtonChecks
|
||||||
+++ : CMP.b #$F1 : BNE +++
|
+++ : CMP.b #$F1 : BNE +++
|
||||||
JSR PasswordMoveCursorLeft
|
JSR PasswordMoveCursorLeft
|
||||||
@@ -98,24 +95,24 @@ Password_Main:
|
|||||||
JSR PasswordMoveCursorRight
|
JSR PasswordMoveCursorRight
|
||||||
BRA +
|
BRA +
|
||||||
+++ : CMP.b #$F3 : BNE +++
|
+++ : CMP.b #$F3 : BNE +++
|
||||||
INC $11 : INC $11 ; skip to return submodule
|
INC.b GameSubMode : INC.b GameSubMode ; skip to return submodule
|
||||||
LDA.b #$2C : STA.w $012E ;file screen selection sound
|
LDA.b #$2C : STA.w SFX2 ;file screen selection sound
|
||||||
BRA .endOfButtonChecks
|
BRA .endOfButtonChecks
|
||||||
+++
|
+++
|
||||||
BRA +
|
BRA +
|
||||||
++
|
++
|
||||||
LDX.b PASSWORD_CODE_POSITION
|
LDX.b PasswordCodePosition
|
||||||
STA.l PasswordSRAM,X
|
STA.l PasswordSRAM,X
|
||||||
TXA : INC A : AND.b #$0F : STA.b PASSWORD_CODE_POSITION
|
TXA : INC A : AND.b #$0F : STA.b PasswordCodePosition
|
||||||
BNE ++
|
BNE ++
|
||||||
STZ.w $012E
|
STZ.w SFX2
|
||||||
INC $11
|
INC.b GameSubMode
|
||||||
BRA .endOfButtonChecks
|
BRA .endOfButtonChecks
|
||||||
++
|
++
|
||||||
LDA.b #$2B : STA.w $012E
|
LDA.b #$2B : STA.w SFX2
|
||||||
+
|
+
|
||||||
LDA.b $F4 : AND.b #$10 : BEQ + ; start
|
LDA.b $F4 : AND.b #$10 : BEQ + ; start
|
||||||
INC $11
|
INC.b GameSubMode
|
||||||
+
|
+
|
||||||
.endOfButtonChecks
|
.endOfButtonChecks
|
||||||
|
|
||||||
@@ -133,21 +130,21 @@ db $19, $1A, $1B, $1C, $1D, $1E, $1F, $20, $F3
|
|||||||
|
|
||||||
Password_Check:
|
Password_Check:
|
||||||
JSL.l ValidatePassword : BNE .correct
|
JSL.l ValidatePassword : BNE .correct
|
||||||
LDA.b #$3C : STA.w $012E ; error
|
LDA.b #$3C : STA.w SFX2 ; error
|
||||||
DEC $11
|
DEC.b GameSubMode
|
||||||
RTL
|
RTL
|
||||||
.correct
|
.correct
|
||||||
LDA.b #$1B : STA.w $012F ; solved puzzle sound
|
LDA.b #$1B : STA.w SFX3 ; solved puzzle sound
|
||||||
INC $11
|
INC.b GameSubMode
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
Password_Return:
|
Password_Return:
|
||||||
LDA.b #$01 : STA.w $10 ; select screen
|
LDA.b #$01 : STA.b GameMode ; select screen
|
||||||
LDA.b #$01 : STA.w $11 ; Skip the first submodule
|
LDA.b #$01 : STA.b GameSubMode ; Skip the first submodule
|
||||||
STZ $B0
|
STZ.b SubSubModule
|
||||||
STZ $0B9D ; Reset file screen cursor pre-selection
|
STZ.w SaveFileIndex
|
||||||
STZ $C8
|
STZ.b PasswordCodePosition
|
||||||
STZ $C9
|
STZ.b PasswordCodePosition+1
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -275,14 +272,14 @@ PasswordEraseOldCursors:
|
|||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
|
|
||||||
;Code Cursor
|
;Code Cursor
|
||||||
LDA.b PASSWORD_CODE_POSITION : AND.w #$00FF : ASL : TAX
|
LDA.b PasswordCodePosition : AND.w #$00FF : ASL : TAX
|
||||||
LDA.l .code_offsets, X
|
LDA.l .code_offsets, X
|
||||||
!ADD.w #$20*Scrap04+Scrap04+$6000
|
!ADD.w #$20*Scrap04+Scrap04+$6000
|
||||||
XBA ; because big endian is needed
|
XBA ; because big endian is needed
|
||||||
STA.l $1002+Password_StripeImageTemplate_CodeCursorErase-Password_StripeImageTemplate
|
STA.l $1002+Password_StripeImageTemplate_CodeCursorErase-Password_StripeImageTemplate
|
||||||
|
|
||||||
;selection cursor
|
;selection cursor
|
||||||
LDA.b PASSWORD_SELECTION_POSITION : AND.w #$00FF : ASL : TAX
|
LDA.b PasswordSelectPosition : AND.w #$00FF : ASL : TAX
|
||||||
LDA.l .selection_offsets, X
|
LDA.l .selection_offsets, X
|
||||||
!ADD.w #$20*Scrap0D+Scrap03+$6000
|
!ADD.w #$20*Scrap0D+Scrap03+$6000
|
||||||
XBA ; because big endian is needed
|
XBA ; because big endian is needed
|
||||||
@@ -308,14 +305,14 @@ RTS
|
|||||||
PasswordSetNewCursors:
|
PasswordSetNewCursors:
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
;Code Cursor
|
;Code Cursor
|
||||||
LDA.b PASSWORD_CODE_POSITION : AND.w #$00FF : ASL : TAX
|
LDA.b PasswordCodePosition : AND.w #$00FF : ASL : TAX
|
||||||
LDA.l PasswordEraseOldCursors_code_offsets, X
|
LDA.l PasswordEraseOldCursors_code_offsets, X
|
||||||
!ADD.w #$20*Scrap04+Scrap04+$6000
|
!ADD.w #$20*Scrap04+Scrap04+$6000
|
||||||
XBA ; because big endian is needed
|
XBA ; because big endian is needed
|
||||||
STA.l $1002+Password_StripeImageTemplate_CodeCursorDraw-Password_StripeImageTemplate
|
STA.l $1002+Password_StripeImageTemplate_CodeCursorDraw-Password_StripeImageTemplate
|
||||||
|
|
||||||
;Selection cursor
|
;Selection cursor
|
||||||
LDA.b PASSWORD_SELECTION_POSITION : AND.w #$00FF : ASL : TAX
|
LDA.b PasswordSelectPosition : AND.w #$00FF : ASL : TAX
|
||||||
LDA.l PasswordEraseOldCursors_selection_offsets, X
|
LDA.l PasswordEraseOldCursors_selection_offsets, X
|
||||||
!ADD.w #$20*Scrap0D+Scrap03+$6000
|
!ADD.w #$20*Scrap0D+Scrap03+$6000
|
||||||
XBA ; because big endian is needed
|
XBA ; because big endian is needed
|
||||||
@@ -353,13 +350,13 @@ RTS
|
|||||||
|
|
||||||
PasswordMoveCursorRight:
|
PasswordMoveCursorRight:
|
||||||
; return new code position
|
; return new code position
|
||||||
LDA.b #$2B : STA.w $012E
|
LDA.b #$2B : STA.w SFX2
|
||||||
LDA.b PASSWORD_CODE_POSITION : INC A : AND.b #$0F : STA.b PASSWORD_CODE_POSITION
|
LDA.b PasswordCodePosition : INC A : AND.b #$0F : STA.b PasswordCodePosition
|
||||||
RTS
|
RTS
|
||||||
PasswordMoveCursorLeft:
|
PasswordMoveCursorLeft:
|
||||||
; return new code position
|
; return new code position
|
||||||
LDA.b #$2B : STA.w $012E
|
LDA.b #$2B : STA.w SFX2
|
||||||
LDA.b PASSWORD_CODE_POSITION : DEC A : AND.b #$0F : STA.b PASSWORD_CODE_POSITION
|
LDA.b PasswordCodePosition : DEC A : AND.b #$0F : STA.b PasswordCodePosition
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
macro dw_big_endian(value)
|
macro dw_big_endian(value)
|
||||||
|
|||||||
@@ -145,13 +145,13 @@ BringMenuDownEnhanced:
|
|||||||
|
|
||||||
EOR.w #$FFFF : !ADD.w #$0001 ; negate menu speed
|
EOR.w #$FFFF : !ADD.w #$0001 ; negate menu speed
|
||||||
|
|
||||||
!ADD $EA : CMP.w #$FF18 : !BGE .noOvershoot
|
!ADD BG3VOFSQL : CMP.w #$FF18 : !BGE .noOvershoot
|
||||||
LDA.w #$FF18 ; if we went past the limit, go to the limit
|
LDA.w #$FF18 ; if we went past the limit, go to the limit
|
||||||
.noOvershoot
|
.noOvershoot
|
||||||
STA.b $EA : CMP.w #$FF18
|
STA.b BG3VOFSQL : CMP.w #$FF18
|
||||||
SEP #$20 ; set 8-bit accumulator
|
SEP #$20 ; set 8-bit accumulator
|
||||||
BNE .notDoneScrolling
|
BNE .notDoneScrolling
|
||||||
INC $0200
|
INC.w SubModuleInterface
|
||||||
.notDoneScrolling
|
.notDoneScrolling
|
||||||
RTL
|
RTL
|
||||||
;================================================================================
|
;================================================================================
|
||||||
@@ -163,30 +163,30 @@ RaiseHudMenu:
|
|||||||
LDA.l MenuSpeed : AND.w #$00FF
|
LDA.l MenuSpeed : AND.w #$00FF
|
||||||
++
|
++
|
||||||
|
|
||||||
!ADD $EA : BMI .noOvershoot
|
!ADD BG3VOFSQL : BMI .noOvershoot
|
||||||
LDA.w #$0000 ; if we went past the limit, go to the limit
|
LDA.w #$0000 ; if we went past the limit, go to the limit
|
||||||
.noOvershoot
|
.noOvershoot
|
||||||
STA.b $EA
|
STA.b BG3VOFSQL
|
||||||
RTL
|
RTL
|
||||||
;================================================================================
|
;================================================================================
|
||||||
CheckCloseItemMenu:
|
CheckCloseItemMenu:
|
||||||
LDA.l MenuCollapse : BNE +
|
LDA.l MenuCollapse : BNE +
|
||||||
LDA.b $F4 : AND.b #$10 : RTL
|
LDA.b Joy1A_New : AND.b #$10 : RTL
|
||||||
+
|
+
|
||||||
LDA.b $F0 : AND.b #$10 : EOR.b #$10
|
LDA.b Joy1A_All : AND.b #$10 : EOR.b #$10
|
||||||
RTL
|
RTL
|
||||||
;================================================================================
|
;================================================================================
|
||||||
ShowDungeonItems:
|
ShowDungeonItems:
|
||||||
LDA.w $040C : AND.w #$00FF : CMP.w #$00FF : BNE + : RTL : + ; return normal result if outdoors or in a cave
|
LDA.w DungeonID : AND.w #$00FF : CMP.w #$00FF : BNE + : RTL : + ; return normal result if outdoors or in a cave
|
||||||
LDA.l HudFlag : AND.w #$0020 ; check hud flag
|
LDA.l HudFlag : AND.w #$0020 ; check hud flag
|
||||||
BEQ + : LDA.w #$0000 : RTL : + ; if set, send the zero onwards
|
BEQ + : LDA.w #$0000 : RTL : + ; if set, send the zero onwards
|
||||||
LDA.w $040C : AND.w #$00FF : CMP.w #$00FF ; original logic
|
LDA.w DungeonID : AND.w #$00FF : CMP.w #$00FF ; original logic
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
UpdateKeys:
|
UpdateKeys:
|
||||||
PHX : PHP
|
PHX : PHP
|
||||||
SEP #$30 ; set 8-bit accumulator & index registers
|
SEP #$30 ; set 8-bit accumulator & index registers
|
||||||
LDA.w $040C : CMP.b $1F : !BLT .skip
|
LDA.w DungeonID : CMP.b $1F : !BLT .skip
|
||||||
|
|
||||||
LSR : TAX ; get dungeon index and store to X
|
LSR : TAX ; get dungeon index and store to X
|
||||||
|
|
||||||
|
|||||||
@@ -4,28 +4,28 @@ QuickSwap:
|
|||||||
; We perform all other checks only if we are pushing L or R in order to have minimal
|
; We perform all other checks only if we are pushing L or R in order to have minimal
|
||||||
; perf impact, since this runs every frame
|
; perf impact, since this runs every frame
|
||||||
|
|
||||||
LDA.b $F6 : AND.b #$30 : BEQ .done
|
LDA.b Joy1B_New : AND.b #$30 : BEQ .done
|
||||||
|
|
||||||
XBA ; stash away the value for after the checks.
|
XBA ; stash away the value for after the checks.
|
||||||
|
|
||||||
LDA.l QuickSwapFlag : BEQ .done
|
LDA.l QuickSwapFlag : BEQ .done
|
||||||
LDA.w $0202 : BEQ .done ; Skip everything if we don't have any items
|
LDA.w ItemCursor : BEQ .done ; Skip everything if we don't have any items
|
||||||
|
|
||||||
LDY.b #$14
|
LDY.b #$14
|
||||||
PHX
|
PHX
|
||||||
XBA ; restore the stashed value
|
XBA ; restore the stashed value
|
||||||
CMP.b #$30 : BNE +
|
CMP.b #$30 : BNE +
|
||||||
; If prossing both L and R this frame, then go directly to the special swap code
|
; If prossing both L and R this frame, then go directly to the special swap code
|
||||||
LDX.w $0202 : BRA .special_swap
|
LDX.w ItemCursor : BRA .special_swap
|
||||||
+
|
+
|
||||||
BIT.b #$10 : BEQ + ; Only pressed R
|
BIT.b #$10 : BEQ + ; Only pressed R
|
||||||
JSR.w RCode
|
JSR.w RCode
|
||||||
LDA.b $F2 : BIT.b #$20 : BNE .special_swap ; Still holding L from a previous frame
|
LDA.b Joy1B_All : BIT.b #$20 : BNE .special_swap ; Still holding L from a previous frame
|
||||||
BRA .store
|
BRA .store
|
||||||
+
|
+
|
||||||
; Only pressed L
|
; Only pressed L
|
||||||
JSR.w LCode
|
JSR.w LCode
|
||||||
LDA.b $F2 : BIT #$10 : BNE .special_swap ; Still holding R from a previous frame
|
LDA.b Joy1B_All : BIT #$10 : BNE .special_swap ; Still holding R from a previous frame
|
||||||
BRA .store
|
BRA .store
|
||||||
|
|
||||||
.special_swap
|
.special_swap
|
||||||
@@ -36,21 +36,21 @@ QuickSwap:
|
|||||||
CPX.b #$0D : BEQ + ; flute
|
CPX.b #$0D : BEQ + ; flute
|
||||||
CPX.b #$10 : BEQ + ; bottle
|
CPX.b #$10 : BEQ + ; bottle
|
||||||
BRA .store
|
BRA .store
|
||||||
+ STX.w $0202 : JSL ProcessMenuButtons_y_pressed
|
+ STX.w ItemCursor : JSL ProcessMenuButtons_y_pressed
|
||||||
|
|
||||||
.store
|
.store
|
||||||
LDA.b #$20 : STA.w $012F
|
LDA.b #$20 : STA.w SFX3
|
||||||
STX.w $0202
|
STX.w ItemCursor
|
||||||
|
|
||||||
JSL HUD_RefreshIconLong
|
JSL HUD_RefreshIconLong
|
||||||
PLX
|
PLX
|
||||||
|
|
||||||
.done
|
.done
|
||||||
LDA.b $F6 : AND.b #$40 ;what we wrote over
|
LDA.b Joy1B_New : AND.b #$40 ;what we wrote over
|
||||||
RTL
|
RTL
|
||||||
RCode:
|
RCode:
|
||||||
LDX.w $0202
|
LDX.w ItemCursor
|
||||||
LDA.b $F2 : BIT.b #$20 : BNE ++ ; Still holding L from a previous frame
|
LDA.b Joy1B_All : BIT.b #$20 : BNE ++ ; Still holding L from a previous frame
|
||||||
LDA.l InventoryTracking+1 : AND.b #$FE : STA.l InventoryTracking+1
|
LDA.l InventoryTracking+1 : AND.b #$FE : STA.l InventoryTracking+1
|
||||||
BRA +
|
BRA +
|
||||||
++
|
++
|
||||||
@@ -66,8 +66,8 @@ RCode:
|
|||||||
RTS
|
RTS
|
||||||
|
|
||||||
LCode:
|
LCode:
|
||||||
LDX.w $0202
|
LDX.w ItemCursor
|
||||||
LDA.b $F2 : BIT #$10 : BNE ++ ; Still holding R from a previous frame
|
LDA.b Joy1B_All : BIT #$10 : BNE ++ ; Still holding R from a previous frame
|
||||||
LDA.l InventoryTracking+1 : AND.b #$FE : STA.l InventoryTracking+1
|
LDA.l InventoryTracking+1 : AND.b #$FE : STA.l InventoryTracking+1
|
||||||
BRA +
|
BRA +
|
||||||
++
|
++
|
||||||
|
|||||||
453
ram.asm
453
ram.asm
@@ -2,99 +2,226 @@
|
|||||||
; RAM Labels & Assertions
|
; RAM Labels & Assertions
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; This module is primarily concerned with labeling WRAM addresses used by the
|
; This module is primarily concerned with labeling WRAM addresses used by the
|
||||||
; randomizer and documenting their usage.
|
; randomizer and documenting their usage. We use a combination of base $[address]
|
||||||
|
; and WRAMLabel = $[address] here, favoring the former when we have larger blocks
|
||||||
|
; of contiguous ram labeled. In some cases the label name can be descriptive enough
|
||||||
|
; without documentation, you may want to consult more in-depth reference materials,
|
||||||
|
; or I just don't understand what they are.
|
||||||
;
|
;
|
||||||
; See the JP 1.0 disassembly for reference
|
; See the JP 1.0 disassembly for reference, specifically symbols_wram.asm
|
||||||
; (https://github.com/spannerisms/jpdasm/ - 31/10/2022)
|
; (https://github.com/spannerisms/jpdasm/ - 19/11/2022)
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
pushpc
|
pushpc
|
||||||
org 0
|
org 0
|
||||||
|
|
||||||
|
;================================================================================
|
||||||
|
; Bank 7E
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
;================================================================================
|
;================================================================================
|
||||||
; Direct Page
|
; Direct Page
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
base $7E0000
|
base $7E0000
|
||||||
Scrap:
|
Scrap:
|
||||||
Scrap00: skip 1 ; Used as short-term scratch space. If you need some short-term
|
Scrap00: skip 1 ; Used as short-term scratch space. If you need some short-term
|
||||||
Scrap01: skip 1 ; RAM, you can often use these. Double check that the next use
|
Scrap01: skip 1 ; RAM, you can often use these. Double check that the next use
|
||||||
Scrap02: skip 1 ; of the addresses you want to use is a write.
|
Scrap02: skip 1 ; of the addresses you want to use is a write.
|
||||||
Scrap03: skip 1 ;
|
Scrap03: skip 1 ;
|
||||||
Scrap04: skip 1 ;
|
Scrap04: skip 1 ;
|
||||||
Scrap05: skip 1 ;
|
Scrap05: skip 1 ;
|
||||||
Scrap06: skip 1 ;
|
Scrap06: skip 1 ;
|
||||||
Scrap07: skip 1 ;
|
Scrap07: skip 1 ;
|
||||||
Scrap08: skip 1 ;
|
Scrap08: skip 1 ;
|
||||||
Scrap09: skip 1 ;
|
Scrap09: skip 1 ;
|
||||||
Scrap0A: skip 1 ;
|
Scrap0A: skip 1 ;
|
||||||
Scrap0B: skip 1 ;
|
Scrap0B: skip 1 ;
|
||||||
Scrap0C: skip 1 ;
|
Scrap0C: skip 1 ;
|
||||||
Scrap0D: skip 1 ;
|
Scrap0D: skip 1 ;
|
||||||
Scrap0E: skip 1 ;
|
Scrap0E: skip 1 ;
|
||||||
Scrap0F: skip 1 ;
|
Scrap0F: skip 1 ;
|
||||||
|
;
|
||||||
|
GameMode = $7E0010 ; Game mode & submode. Refer to disassembly.
|
||||||
|
GameSubMode = $7E0011 ;
|
||||||
|
;
|
||||||
|
FrameCounter = $7E001A ; Increments every frame that the game isn't lagging
|
||||||
|
IndoorsFlag = $7E001B ; $00 = Outdoors | $01 = Indoors
|
||||||
|
;
|
||||||
|
LinkPosY = $7E0020 ; Link's absolute x/y coordinates. Both are word length.
|
||||||
|
LinkPosX = $7E0022 ;
|
||||||
|
LinkPosZ = $7E0024 ; $FFFF when on ground
|
||||||
|
;
|
||||||
|
LinkRecoilY = $7E0027 ;
|
||||||
|
LinkRecoilX = $7E0028 ;
|
||||||
|
LinkRecoilZ = $7E0029 ;
|
||||||
|
;
|
||||||
|
LinkDirection = $7E002F ; $00 = Up | $02 = Down | $04 = Left | $06 = Right
|
||||||
|
;
|
||||||
|
OAMOffsetY = $7E0044 ;
|
||||||
|
OAMOffsetX = $7E0045 ;
|
||||||
|
;
|
||||||
|
LinkJumping = $7E004D ; $00 = None | $01 = Bonk/damage/water | $02 = Ledge
|
||||||
|
;
|
||||||
|
BunnyFlagDP = $7E0056 ; $00 = Link | $01 = Bunny
|
||||||
|
;
|
||||||
|
LinkSlipping = $7E005B ; $00 = None | $01 = Near pit
|
||||||
|
; $02 = Falling | $03 = Falling "more"
|
||||||
|
FallTimer = $7E005C ; Timer for falling animation
|
||||||
|
LinkState = $7E005D ; Main Link state handler
|
||||||
|
LinkSpeed = $7E005E ; Main Link speed handler
|
||||||
|
;
|
||||||
|
OverworldIndex = $7E008A ; Overworld screen index. Word length. Dark world is OR $40 of
|
||||||
|
; light world screen in same position. Zeroed on UW entry.
|
||||||
|
OverlayID = $7E008C ; Overworld overlay ID. One Byte.
|
||||||
|
;
|
||||||
|
RoomIndex = $7E00A0 ; Underworld room index. Word length. High byte: $00 = EG1 | $01 = EG2
|
||||||
|
; Not zeroed on exit to overworld.
|
||||||
|
PreviousRoom = $7E00A2 ; Stores previous value of RoomIndex
|
||||||
|
;
|
||||||
|
SubSubModule = $7E00B0 ; Often used as a submodule, such as for transitions
|
||||||
|
;
|
||||||
|
ObjPtr = $7E00B7 ; Pointer for drawing room objects. Three bytes.
|
||||||
|
ObjPtrOffset = $7E00BA ; Used as an offset for ObjPointer. Word Length.
|
||||||
|
PlayerSpriteBank = $7E00BC ;
|
||||||
|
ScrapBufferBD = $7E00BD ; Another scrap buffer. $23 bytes.
|
||||||
|
FileSelectPosition = $7E00C8 ;
|
||||||
|
PasswordCodePosition = $7E00C8 ;
|
||||||
|
PasswordSelectPosition = $7E00C9 ;
|
||||||
|
;
|
||||||
|
BG1H = $7E00E0 ; Background scroll registers
|
||||||
|
BG2H = $7E00E2 ; For BG1 and BG2, these registers are used for calculations later for different writes to PPU.
|
||||||
|
BG3HOFSQL = $7E00E4 ; For BG3, the values are written directly to the PPU during NMI
|
||||||
|
BG1V = $7E00E6 ; Since BG1 and BG2 are not written directly to PPU they are given different names from BG3.
|
||||||
|
BG2V = $7E00E8 ;
|
||||||
|
BG3VOFSQL = $7E00EA ;
|
||||||
|
;
|
||||||
|
LinkLayer = $7E00EE ; Layer that Link is on. $00 = BG2 (upper) | $02 = BG1 (lower)
|
||||||
|
;
|
||||||
|
Joy1A_All = $7E00F0 ; Joypad input
|
||||||
|
Joy2A_All = $7E00F1 ; All = Current & previous frame
|
||||||
|
Joy1B_All = $7E00F2 ; New = Current frame
|
||||||
|
Joy2B_All = $7E00F3 ; Old = Previous frame
|
||||||
|
Joy1A_New = $7E00F4 ;
|
||||||
|
Joy2A_New = $7E00F5 ;
|
||||||
|
Joy1B_New = $7E00F6 ;
|
||||||
|
Joy2B_New = $7E00F7 ;
|
||||||
|
Joy1A_Old = $7E00F8 ;
|
||||||
|
Joy2A_Old = $7E00F9 ;
|
||||||
|
Joy1B_Old = $7E00FA ;
|
||||||
|
Joy2B_Old = $7E00FB ;
|
||||||
|
|
||||||
|
|
||||||
LinkPosY = $7E0020 ; 2 bytes
|
|
||||||
LinkPosX = $7E0022 ; 2 bytes
|
|
||||||
|
|
||||||
RoomIndex = $7E00A0 ; 2 bytes, UW room index
|
|
||||||
|
|
||||||
;================================================================================
|
|
||||||
; Bank 7E
|
|
||||||
;--------------------------------------------------------------------------------
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
; Mirrored WRAM
|
; Mirrored WRAM
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; Pages 0x00–0x1F of Bank7E are mirrored to every program bank ALTTP uses.
|
; Pages 0x00–0x1F of Bank7E are mirrored to every program bank ALTTP uses.
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
CurrentMSUTrack = $7E010B
|
CurrentMSUTrack = $7E010B ;
|
||||||
CurrentVolume = $7E0127
|
GameModeCache = $7E010C ;
|
||||||
TargetVolume = $7E0129
|
GameSubModeCache = $7E010D ;
|
||||||
CurrentControlRequest = $7E0133 ; Last thing written to MusicControlRequest
|
;
|
||||||
MusicControl = $7E012B
|
MedallionFlag = $7E0112 ; Medallion cutscene flag. $01 = Cutscene active.
|
||||||
MusicControlRequest = $7E012C
|
;
|
||||||
|
BG1ShakeV = $7E011A ; Applied to BG Scroll. Word Length.
|
||||||
|
BG1ShakeH = $7E011C ;
|
||||||
|
;
|
||||||
|
CurrentVolume = $7E0127 ;
|
||||||
|
TargetVolume = $7E0129 ;
|
||||||
|
CurrentControlRequest = $7E0133 ; Last thing written to MusicControlRequest
|
||||||
|
MusicControl = $7E012B ;
|
||||||
|
MusicControlRequest = $7E012C ;
|
||||||
|
SFX1 = $7E012D ;
|
||||||
|
SFX2 = $7E012E ;
|
||||||
|
SFX3 = $7E012F ;
|
||||||
|
;
|
||||||
|
SubModuleInterface = $7E0200 ; Word length. High byte expected to be $00.
|
||||||
|
ItemCursor = $7E0202 ; Current location of the item menu cursor.
|
||||||
|
;
|
||||||
|
BottleMenuCounter = $7E0205 ; Step counter for opening bottle menu
|
||||||
|
MenuFrameCounter = $7E0206 ; Incremented every menu frame. Never read.
|
||||||
|
MenuBlink = $7E0207 ; Incremented every frame and masked with $10 to blink cursor
|
||||||
|
;
|
||||||
|
ItemReceiptID = $7E02D8 ;
|
||||||
|
;
|
||||||
|
BunnyFlag = $7E02E0 ; $00 = Link | $01 = Bunny
|
||||||
|
;
|
||||||
|
CutsceneFlag = $7E02E4 ; Flags various cutscenes. All non-zero behave the same.
|
||||||
|
;
|
||||||
|
ItemReceiptMethod = $7E02E9 ;
|
||||||
|
;
|
||||||
|
TileActBE = $7E02EF ; Bitfield used by breakables and entrances. b b b b d d d d
|
||||||
|
; b = Breakables | d = Entrances
|
||||||
|
CurrentYItem = $7E0303 ;
|
||||||
|
;
|
||||||
|
;
|
||||||
|
TileActDig = $7E035B ; Bitfield used by diggable ground. Word length. High byte unused.
|
||||||
|
;
|
||||||
|
ForceSwordUp = $7E03EF ; $01 = Force sword up pose.
|
||||||
|
;
|
||||||
|
ItemsTaken = $7E0403 ; Items taken in a room: b k u t s e h c
|
||||||
|
; b = boss kill/item | k = key/heart piece (prevents crystals)
|
||||||
|
; u = 2nd key/heart piece | t = chest 4/rupees/swamp drain/bomb floor/mire wall
|
||||||
|
; s = chest 3/pod or dp wall | e, h, c = chest 2, 1, 0
|
||||||
|
DungeonID = $7E040C ; High byte mostly unused but sometimes read. Word length.
|
||||||
|
;
|
||||||
|
OWEntranceCutscene = $7E04C6 ;
|
||||||
|
;
|
||||||
|
HeartBeepTimer = $7E04CA ;
|
||||||
|
;
|
||||||
|
NMIAux = $7E0632 ; Stores long address of NMI jump. Currently only used by shops.
|
||||||
|
;
|
||||||
|
SkipOAM = $7E0710 ; Set to skip OAM updates. High byte written $FF with exploding walls
|
||||||
|
;
|
||||||
|
BowDryFire = $7E0B9A ; If set, arrows are deleted immediately
|
||||||
|
;
|
||||||
|
SaveFileIndex = $7E0B9D ;
|
||||||
|
;
|
||||||
|
SpritePosYLow = $7E0D00 ; Sprite slot data. Each label has $10 bytes.
|
||||||
|
SpritePosXLow = $7E0D10 ;
|
||||||
|
SpritePosYHigh = $7E0D20 ;
|
||||||
|
SpritePosXHigh = $7E0D30 ;
|
||||||
|
SpriteVelocityY = $7E0D40 ;
|
||||||
|
SpriteVelocityX = $7E0D50 ;
|
||||||
|
;
|
||||||
|
SpriteUnknown = $7E0D80 ; Don't know what this is
|
||||||
|
;
|
||||||
|
SpriteAuxTable = $7E0DA0 ; $20 bytes.
|
||||||
|
SpriteGFXControl = $7E0DC0 ;
|
||||||
|
SpriteAITable = $7E0DD0 ; AI state of sprites. $10 bytes.
|
||||||
|
;
|
||||||
|
SpriteTimer = $7E0DF0 ;
|
||||||
|
;
|
||||||
|
SpriteTypeTable = $7E0E20 ; Which sprite occupies this slot. $10 bytes.
|
||||||
|
;
|
||||||
|
SpriteItemType = $7E0E80 ; Sprite Item Type. $10 bytes.
|
||||||
|
;
|
||||||
|
SpriteDirectionTable = $7E0EB0 ; Sprite direction. $10 bytes.
|
||||||
|
;
|
||||||
|
FreezeSprites = $7E0FC1 ; "Seems to freeze sprites"
|
||||||
|
;
|
||||||
|
SpriteCoordCacheX = $7E0FD8 ;
|
||||||
|
SpriteCoordCacheY = $7E0FDA ;
|
||||||
|
;
|
||||||
|
NoMenu = $7E0FFC ; When set prevents menu, mirror, medallions
|
||||||
|
;
|
||||||
|
TextID = $7E1CF0 ; Message ID and page. Word length.
|
||||||
|
;
|
||||||
|
ToastBuffer = $7E1E0E ; Multiworld buffer. Word length.
|
||||||
|
;
|
||||||
|
MSUResumeTime = $7E1E6B ; Mirrored MSU block
|
||||||
|
MSUResumeControl = $7E1E6F ;
|
||||||
|
MSUFallbackTable = $7E1E70 ;
|
||||||
|
MSUDelayedCommand = $7E1E79 ;
|
||||||
|
MSUPackCount = $7E1E7A ;
|
||||||
|
MSUPackCurrent = $7E1E7B ;
|
||||||
|
MSUPackRequest = $7E1E7C ;
|
||||||
|
MSULoadedTrack = $7E1E7D ;
|
||||||
|
MSUResumeTrack = $7E1E7F ;
|
||||||
|
|
||||||
ItemReceiptID = $7E02D8
|
ClockHours = $7E1E90 ; Clock Hours
|
||||||
|
ClockMinutes = $7E1E94 ; Clock Minutes
|
||||||
NMIAux = $7E0632
|
ClockSeconds = $7E1E98 ; Clock Seconds
|
||||||
|
ClockBuffer = $7E1E9C ; Clock Temporary
|
||||||
SpritePosYLow = $7E0D00 ; all $10 bytes
|
ScratchBufferNV = $7E1EA0 ; Non-volatile scratch buffer. Must preserve values through return.
|
||||||
SpritePosXLow = $7E0D10
|
ScratchBufferV = $7E1EB0 ; Volatile scratch buffer. Can clobber at will.
|
||||||
SpritePosYHigh = $7E0D20
|
|
||||||
SpritePosXHigh = $7E0D30
|
|
||||||
|
|
||||||
SpriteAuxTable = $7E0DA0 ; 0x1F bytes
|
|
||||||
SpriteAITable = $7E0DD0
|
|
||||||
|
|
||||||
SpriteTypeTable = $7E0E20
|
|
||||||
|
|
||||||
SpriteDirectionTable = $7E0EB0
|
|
||||||
|
|
||||||
ToastBuffer = $7E1E0E ; 2 bytes DoToast
|
|
||||||
|
|
||||||
MSUResumeTime = $7E1E6B ; 4 bytes
|
|
||||||
MSUResumeControl = $7E1E6F
|
|
||||||
MSUFallbackTable = $7E1E70 ; 8 bytes
|
|
||||||
MSUDelayedCommand = $7E1E79
|
|
||||||
MSUPackCount = $7E1E7A
|
|
||||||
MSUPackCurrent = $7E1E7B
|
|
||||||
MSUPackRequest = $7E1E7C
|
|
||||||
MSULoadedTrack = $7E1E7D ; 2 bytes
|
|
||||||
MSUResumeTrack = $7E1E7F
|
|
||||||
|
|
||||||
;1E90
|
|
||||||
ClockHours = $7E1E90 ; Clock Hours
|
|
||||||
ClockMinutes = $7E1E94 ; Clock Minutes
|
|
||||||
ClockSeconds = $7E1E98 ; Clock Seconds
|
|
||||||
ClockBuffer = $7E1E9C ; Clock Temporary
|
|
||||||
;1EA0
|
|
||||||
ScratchBufferNV = $7E1EA0 ; Callee preserved
|
|
||||||
;1EB0
|
|
||||||
ScratchBufferV = $7E1EB0 ; Caller preserved
|
|
||||||
;1EC0
|
|
||||||
;1ED0
|
|
||||||
;1EE0
|
|
||||||
;1EF0
|
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
; UNMIRRORED WRAM
|
; UNMIRRORED WRAM
|
||||||
@@ -102,24 +229,24 @@ ScratchBufferV = $7E1EB0 ; Caller preserved
|
|||||||
; or absolute addressing with the appropriate data bank set
|
; or absolute addressing with the appropriate data bank set
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
TileUploadBuffer = $7EA180 ; 0x300 bytes
|
TileUploadBuffer = $7EA180 ; 0x300 bytes
|
||||||
SpriteOAM = $7EC025 ;
|
SpriteOAM = $7EC025 ;
|
||||||
|
; $7EC700 - Tile map buffer for HUD
|
||||||
|
HUDKeyIcon = $7EC726 ;
|
||||||
|
HUDGoalIndicator = $7EC72A ;
|
||||||
|
HUDPrizeIcon = $7EC742 ;
|
||||||
|
HUDRupees = $7EC750 ;
|
||||||
|
HUDBombCount = $7EC75A ;
|
||||||
|
HUDArrowCount = $7EC760 ;
|
||||||
|
HUDKeyDigits = $7EC764 ;
|
||||||
|
|
||||||
; $7EC700 - Tile map buffer for HUD
|
BigRAM = $7EC900 ; Big buffer of free ram (0x1F00)
|
||||||
|
|
||||||
HUDKeyIcon = $7EC726
|
|
||||||
HUDGoalIndicator = $7EC72A
|
|
||||||
HUDPrizeIcon = $7EC742
|
|
||||||
HUDRupees = $7EC750
|
|
||||||
HUDBombCount = $7EC75A
|
|
||||||
HUDArrowCount = $7EC760
|
|
||||||
HUDKeyDigits = $7EC764
|
|
||||||
|
|
||||||
BigRAM = $7EC900 ; Big buffer of free ram (0x1F00)
|
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
; Bank 7F
|
; Bank 7F
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
DecompressionBuffer = $7F0000 ; Decompression Buffer. $2000 bytes.
|
||||||
|
|
||||||
base $7F5000
|
base $7F5000
|
||||||
RedrawFlag: skip 1 ;
|
RedrawFlag: skip 1 ;
|
||||||
skip 2 ;
|
skip 2 ;
|
||||||
@@ -226,6 +353,9 @@ skip $40 ; Unused
|
|||||||
skip $260 ; Unused
|
skip $260 ; Unused
|
||||||
DialogBuffer: skip $100 ; Dialog Buffer
|
DialogBuffer: skip $100 ; Dialog Buffer
|
||||||
|
|
||||||
|
MiniGameTime = $7FFE00 ; Time spent in mini game. 32-bits.
|
||||||
|
MiniGameTimeFinal = $7FFE04 ; Final mini game time. 32 bits.
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
; RAM Assertions
|
; RAM Assertions
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -249,29 +379,98 @@ endmacro
|
|||||||
%assertRAM(Scrap0D, $7E000D)
|
%assertRAM(Scrap0D, $7E000D)
|
||||||
%assertRAM(Scrap0E, $7E000E)
|
%assertRAM(Scrap0E, $7E000E)
|
||||||
%assertRAM(Scrap0F, $7E000F)
|
%assertRAM(Scrap0F, $7E000F)
|
||||||
|
%assertRAM(GameMode, $7E0010)
|
||||||
|
%assertRAM(GameSubMode, $7E0011)
|
||||||
|
%assertRAM(FrameCounter, $7E001A)
|
||||||
|
%assertRAM(IndoorsFlag, $7E001B)
|
||||||
%assertRAM(LinkPosY, $7E0020)
|
%assertRAM(LinkPosY, $7E0020)
|
||||||
%assertRAM(LinkPosX, $7E0022)
|
%assertRAM(LinkPosX, $7E0022)
|
||||||
|
%assertRAM(LinkPosZ, $7E0024)
|
||||||
|
%assertRAM(LinkRecoilY, $7E0027)
|
||||||
|
%assertRAM(LinkRecoilX, $7E0028)
|
||||||
|
%assertRAM(LinkRecoilZ, $7E0029)
|
||||||
|
%assertRAM(LinkDirection, $7E002F)
|
||||||
|
%assertRAM(OAMOffsetY, $7E0044)
|
||||||
|
%assertRAM(OAMOffsetX, $7E0045)
|
||||||
|
%assertRAM(LinkJumping, $7E004D)
|
||||||
|
%assertRAM(BunnyFlagDP, $7E0056)
|
||||||
|
%assertRAM(LinkSlipping, $7E005B)
|
||||||
|
%assertRAM(FallTimer, $7E005C)
|
||||||
|
%assertRAM(LinkState, $7E005D)
|
||||||
|
%assertRAM(LinkSpeed, $7E005E)
|
||||||
|
%assertRAM(OverworldIndex, $7E008A)
|
||||||
|
%assertRAM(OverlayID, $7E008C)
|
||||||
%assertRAM(RoomIndex, $7E00A0)
|
%assertRAM(RoomIndex, $7E00A0)
|
||||||
|
%assertRAM(PreviousRoom, $7E00A2)
|
||||||
|
%assertRAM(SubSubModule, $7E00B0)
|
||||||
|
%assertRAM(ObjPtr, $7E00B7)
|
||||||
|
%assertRAM(ObjPtrOffset, $7E00BA)
|
||||||
|
%assertRAM(ScrapBufferBD, $7E00BD)
|
||||||
|
%assertRAM(PlayerSpriteBank, $7E00BC)
|
||||||
|
%assertRAM(FileSelectPosition, $7E00C8)
|
||||||
|
%assertRAM(PasswordCodePosition, $7E00C8)
|
||||||
|
%assertRAM(PasswordSelectPosition, $7E00C9)
|
||||||
|
%assertRAM(BG1H, $7E00E0)
|
||||||
|
%assertRAM(BG2H, $7E00E2)
|
||||||
|
%assertRAM(BG3HOFSQL, $7E00E4)
|
||||||
|
%assertRAM(BG1V, $7E00E6)
|
||||||
|
%assertRAM(BG2V, $7E00E8)
|
||||||
|
%assertRAM(BG3VOFSQL, $7E00EA)
|
||||||
|
%assertRAM(LinkLayer, $7E00EE)
|
||||||
%assertRAM(CurrentMSUTrack, $7E010B)
|
%assertRAM(CurrentMSUTrack, $7E010B)
|
||||||
|
%assertRAM(GameModeCache, $7E010C)
|
||||||
|
%assertRAM(GameSubModeCache, $7E010D)
|
||||||
|
%assertRAM(MedallionFlag, $7E0112)
|
||||||
|
%assertRAM(BG1ShakeV, $7E011A)
|
||||||
|
%assertRAM(BG1ShakeH, $7E011C)
|
||||||
%assertRAM(CurrentVolume, $7E0127)
|
%assertRAM(CurrentVolume, $7E0127)
|
||||||
%assertRAM(TargetVolume, $7E0129)
|
%assertRAM(TargetVolume, $7E0129)
|
||||||
%assertRAM(CurrentControlRequest, $7E0133)
|
%assertRAM(CurrentControlRequest, $7E0133)
|
||||||
%assertRAM(MusicControl, $7E012B)
|
%assertRAM(MusicControl, $7E012B)
|
||||||
%assertRAM(MusicControlRequest, $7E012C)
|
%assertRAM(MusicControlRequest, $7E012C)
|
||||||
|
%assertRAM(SFX1, $7E012D)
|
||||||
|
%assertRAM(SFX2, $7E012E)
|
||||||
|
%assertRAM(SFX3, $7E012F)
|
||||||
|
%assertRAM(SubModuleInterface, $7E0200)
|
||||||
|
%assertRAM(ItemCursor, $7E0202)
|
||||||
|
%assertRAM(BottleMenuCounter, $7E0205)
|
||||||
|
%assertRAM(MenuBlink, $7E0207)
|
||||||
%assertRAM(ItemReceiptID, $7E02D8)
|
%assertRAM(ItemReceiptID, $7E02D8)
|
||||||
|
%assertRAM(BunnyFlag, $7E02E0)
|
||||||
|
%assertRAM(CutsceneFlag, $7E02E4)
|
||||||
|
%assertRAM(ItemReceiptMethod, $7E02E9)
|
||||||
|
%assertRAM(TileActBE, $7E02EF)
|
||||||
|
%assertRAM(CurrentYItem, $7E0303)
|
||||||
|
%assertRAM(TileActDig, $7E035B)
|
||||||
|
%assertRAM(ForceSwordUp, $7E03EF)
|
||||||
|
%assertRAM(ItemsTaken, $7E0403)
|
||||||
|
%assertRAM(DungeonID, $7E040C)
|
||||||
|
%assertRAM(OWEntranceCutscene, $7E04C6)
|
||||||
|
%assertRAM(HeartBeepTimer, $7E04CA)
|
||||||
%assertRAM(NMIAux, $7E0632)
|
%assertRAM(NMIAux, $7E0632)
|
||||||
|
%assertRAM(SkipOAM, $7E0710)
|
||||||
|
%assertRAM(BowDryFire, $7E0B9A)
|
||||||
|
%assertRAM(SaveFileIndex, $7E0B9D)
|
||||||
%assertRAM(SpritePosYLow, $7E0D00)
|
%assertRAM(SpritePosYLow, $7E0D00)
|
||||||
%assertRAM(SpritePosXLow, $7E0D10)
|
%assertRAM(SpritePosXLow, $7E0D10)
|
||||||
%assertRAM(SpritePosYHigh, $7E0D20)
|
%assertRAM(SpritePosYHigh, $7E0D20)
|
||||||
%assertRAM(SpritePosXHigh, $7E0D30)
|
%assertRAM(SpritePosXHigh, $7E0D30)
|
||||||
|
%assertRAM(SpriteVelocityY, $7E0D40)
|
||||||
|
%assertRAM(SpriteVelocityX, $7E0D50)
|
||||||
|
%assertRAM(SpriteUnknown, $7E0D80)
|
||||||
%assertRAM(SpriteAuxTable, $7E0DA0)
|
%assertRAM(SpriteAuxTable, $7E0DA0)
|
||||||
|
%assertRAM(SpriteGFXControl, $7E0DC0)
|
||||||
%assertRAM(SpriteAITable, $7E0DD0)
|
%assertRAM(SpriteAITable, $7E0DD0)
|
||||||
|
%assertRAM(SpriteTimer, $7E0DF0)
|
||||||
%assertRAM(SpriteTypeTable, $7E0E20)
|
%assertRAM(SpriteTypeTable, $7E0E20)
|
||||||
|
%assertRAM(SpriteItemType, $7E0E80)
|
||||||
%assertRAM(SpriteDirectionTable, $7E0EB0)
|
%assertRAM(SpriteDirectionTable, $7E0EB0)
|
||||||
|
%assertRAM(FreezeSprites, $7E0FC1)
|
||||||
|
%assertRAM(SpriteCoordCacheX, $7E0FD8)
|
||||||
|
%assertRAM(SpriteCoordCacheY, $7E0FDA)
|
||||||
|
%assertRAM(NoMenu, $7E0FFC)
|
||||||
|
%assertRAM(TextID, $7E1CF0)
|
||||||
%assertRAM(ToastBuffer, $7E1E0E)
|
%assertRAM(ToastBuffer, $7E1E0E)
|
||||||
|
|
||||||
%assertRAM(MSUResumeTime, $7E1E6B)
|
%assertRAM(MSUResumeTime, $7E1E6B)
|
||||||
%assertRAM(MSUResumeControl, $7E1E6F)
|
%assertRAM(MSUResumeControl, $7E1E6F)
|
||||||
%assertRAM(MSUFallbackTable, $7E1E70)
|
%assertRAM(MSUFallbackTable, $7E1E70)
|
||||||
@@ -281,8 +480,6 @@ endmacro
|
|||||||
%assertRAM(MSUPackRequest, $7E1E7C)
|
%assertRAM(MSUPackRequest, $7E1E7C)
|
||||||
%assertRAM(MSULoadedTrack, $7E1E7D)
|
%assertRAM(MSULoadedTrack, $7E1E7D)
|
||||||
%assertRAM(MSUResumeTrack, $7E1E7F)
|
%assertRAM(MSUResumeTrack, $7E1E7F)
|
||||||
|
|
||||||
|
|
||||||
%assertRAM(ClockHours, $7E1E90)
|
%assertRAM(ClockHours, $7E1E90)
|
||||||
%assertRAM(ClockMinutes, $7E1E94)
|
%assertRAM(ClockMinutes, $7E1E94)
|
||||||
%assertRAM(ClockSeconds, $7E1E98)
|
%assertRAM(ClockSeconds, $7E1E98)
|
||||||
@@ -299,6 +496,8 @@ endmacro
|
|||||||
%assertRAM(HUDArrowCount, $7EC760)
|
%assertRAM(HUDArrowCount, $7EC760)
|
||||||
%assertRAM(HUDKeyDigits, $7EC764)
|
%assertRAM(HUDKeyDigits, $7EC764)
|
||||||
%assertRAM(BigRAM, $7EC900)
|
%assertRAM(BigRAM, $7EC900)
|
||||||
|
|
||||||
|
%assertRAM(DecompressionBuffer, $7F0000)
|
||||||
%assertRAM(RedrawFlag, $7F5000)
|
%assertRAM(RedrawFlag, $7F5000)
|
||||||
%assertRAM(HexToDecDigit1, $7F5003)
|
%assertRAM(HexToDecDigit1, $7F5003)
|
||||||
%assertRAM(HexToDecDigit2, $7F5004)
|
%assertRAM(HexToDecDigit2, $7F5004)
|
||||||
@@ -306,9 +505,6 @@ endmacro
|
|||||||
%assertRAM(HexToDecDigit4, $7F5006)
|
%assertRAM(HexToDecDigit4, $7F5006)
|
||||||
%assertRAM(HexToDecDigit5, $7F5007)
|
%assertRAM(HexToDecDigit5, $7F5007)
|
||||||
%assertRAM(SpriteSkipEOR, $7F5008)
|
%assertRAM(SpriteSkipEOR, $7F5008)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%assertRAM(AltTextFlag, $7F5035)
|
%assertRAM(AltTextFlag, $7F5035)
|
||||||
%assertRAM(BossKills, $7F5037)
|
%assertRAM(BossKills, $7F5037)
|
||||||
%assertRAM(LagTime, $7F5038)
|
%assertRAM(LagTime, $7F5038)
|
||||||
@@ -369,68 +565,7 @@ endmacro
|
|||||||
%assertRAM(TxStatus, $7F53FF)
|
%assertRAM(TxStatus, $7F53FF)
|
||||||
%assertRAM(CompassTotalsWRAM, $7F5410)
|
%assertRAM(CompassTotalsWRAM, $7F5410)
|
||||||
%assertRAM(DialogBuffer, $7F5700)
|
%assertRAM(DialogBuffer, $7F5700)
|
||||||
|
%assertRAM(MiniGameTime, $7FFE00)
|
||||||
|
%assertRAM(MiniGameTimeFinal, $7FFE04)
|
||||||
|
|
||||||
pullpc
|
pullpc
|
||||||
;================================================================================
|
|
||||||
; Bank 7F
|
|
||||||
;--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
;OLDSTUFF
|
|
||||||
; $7F5042 - Tile Upload Offset Override (Low)
|
|
||||||
; $7F5043 - Tile Upload Offset Override (High)
|
|
||||||
; $7F5044 - $7F5046 - NMI Auxiliary Function
|
|
||||||
; $7F5047 - $7F504F - Unused
|
|
||||||
; $7F5050 - $7F506F - Shop Block
|
|
||||||
; $7F5070 - Reserved for OneMind
|
|
||||||
; $7F5071 - Reserved for OneMind
|
|
||||||
; $7F5072 - OneMind player ID
|
|
||||||
; $7F5073 - $7F5074 - OneMind timer
|
|
||||||
; $7F5075 - $7F507D - Unused
|
|
||||||
; $7F507E - Clock Status
|
|
||||||
; $7F507F - Always Zero
|
|
||||||
; $7F5080 - $7F508F - unused
|
|
||||||
; $7F5090 - RNG Item Lock-In
|
|
||||||
; $7F5091 - Item Animation Busy Flag
|
|
||||||
; $7F5092 - Potion Animation Busy Flags (Health)
|
|
||||||
; $7F5093 - Potion Animation Busy Flags (Magic)
|
|
||||||
; $7F5094 - Dialog Offset Pointer (Low)
|
|
||||||
; $7F5095 - Dialog Offset Pointer (High)
|
|
||||||
; $7F5096 - Dialog Offset Pointer Return (Low)
|
|
||||||
; $7F5097 - Dialog Offset Pointer Return (High)
|
|
||||||
; $7F5098 - Unused
|
|
||||||
; $7F5099 - Last Entered Overworld Door ID
|
|
||||||
; $7F509A - (Reserved)
|
|
||||||
; $7F509B - Unused
|
|
||||||
; $7F509C - Duck Map Flag
|
|
||||||
; $7F509E - Valid Key Loaded
|
|
||||||
; $7F509F - Text Box Defer Flag
|
|
||||||
; $7F50A0 - $7F50AF - Unused
|
|
||||||
|
|
||||||
; $7F50B0 - $7F50BF - Downstream Reserved (Enemizer)
|
|
||||||
|
|
||||||
; $7F50C1 - Shield Modifier (Not Implemented)
|
|
||||||
; $7F50C2 - Armor Modifier
|
|
||||||
; $7F50C3 - Magic Modifier
|
|
||||||
; $7F50C4 - Light Cone Modifier
|
|
||||||
; $7F50C5 - Cucco Storm
|
|
||||||
; $7F50C6 - Old Man Dash Modifier
|
|
||||||
; $7F50C7 - Ice Physics Modifier
|
|
||||||
; $7F50C8 - Infinite Arrows Modifier
|
|
||||||
; $7F50C9 - Infinite Bombs Modifier
|
|
||||||
; $7F50CA - Infinite Magic Modifier
|
|
||||||
; $7F50CB - Invert D-Pad (Fill in values)
|
|
||||||
; $7F50CC - OHKO Flag
|
|
||||||
; $7F50CD - Sprite Swapper
|
|
||||||
; $7F50CE - Boots Modifier (0=Off, 1=Always, 2=Never)
|
|
||||||
|
|
||||||
; $7F50D0 - $7F50FF - Block Cypher Parameters
|
|
||||||
; $7F5100 - $7F51FF - Block Cypher Buffer
|
|
||||||
; $7F5200 - $7F52FF - RNG Pointer Block
|
|
||||||
; $7F5300 - $7F53FF - Multiworld Block
|
|
||||||
; $7F5400 - $7F540F - Unused
|
|
||||||
; $7F5410 - $7F545F - Dungeon Tracking Block
|
|
||||||
; $7F5460 - $7F56FF - Unused
|
|
||||||
|
|
||||||
; $7F5700 - $7F57FF - Dialog Buffer
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
; SNES Registers
|
; SNES Registers
|
||||||
;===================================================================================================
|
;===================================================================================================
|
||||||
; Note: This is almost entirely a copy from the JP 1.0 disassembly.
|
; Note: This is almost entirely a copy from the JP 1.0 disassembly.
|
||||||
; See: https://github.com/spannerisms/jpdasm/ - 02/11/2022
|
; See: https://github.com/spannerisms/jpdasm/ - 19/11/2022
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ DecrementArrows:
|
|||||||
.rupees
|
.rupees
|
||||||
REP #$20
|
REP #$20
|
||||||
LDA.b RoomIndex : CMP.w #$0111 : SEP #$20 : BNE .not_archery_game
|
LDA.b RoomIndex : CMP.w #$0111 : SEP #$20 : BNE .not_archery_game
|
||||||
LDA.b $1B : BEQ .not_archery_game ; in overworld
|
LDA.b IndoorsFlag : BEQ .not_archery_game ; in overworld
|
||||||
LDA.w $0B9A : BEQ .shoot_arrow ; arrow game active
|
LDA.w $0B9A : BEQ .shoot_arrow ; arrow game active
|
||||||
LDA.b #$00 : BRA .done
|
LDA.b #$00 : BRA .done
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
; RNG Fixes
|
; RNG Fixes
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
RigDigRNG:
|
RigDigRNG:
|
||||||
LDA.l $7FFE01 : CMP.l DiggingGameRNG : !BGE .forceHeart
|
LDA.l MiniGameTime+1 : CMP.l DiggingGameRNG : !BGE .forceHeart
|
||||||
.normalItem
|
.normalItem
|
||||||
JML GetRandomInt
|
JML GetRandomInt
|
||||||
.forceHeart
|
.forceHeart
|
||||||
LDA.l $7FFE00 : BNE .normalItem
|
LDA.l MiniGameTime : BNE .normalItem
|
||||||
LDA.b #$04
|
LDA.b #$04
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -20,8 +20,8 @@ RigChestRNG:
|
|||||||
JSL.l DecrementItemCounter
|
JSL.l DecrementItemCounter
|
||||||
RTL
|
RTL
|
||||||
.forceHeart
|
.forceHeart
|
||||||
LDA.b #$33 : STA.b $C8 ; assure the correct state if player talked to shopkeeper
|
LDA.b #$33 : STA.b ScrapBufferBD+$0B ; assure the correct state if player talked to shopkeeper
|
||||||
LDA.w $0403 : AND.b #$40 : BNE .notHeart
|
LDA.w ItemsTaken : AND.b #$40 : BNE .notHeart
|
||||||
LDA.b #$07 ; give prize item
|
LDA.b #$07 ; give prize item
|
||||||
RTL
|
RTL
|
||||||
.notHeart
|
.notHeart
|
||||||
|
|||||||
16
save.asm
16
save.asm
@@ -14,10 +14,10 @@ WriteSaveChecksumAndBackup:
|
|||||||
STA.l InverseChecksumSRAM
|
STA.l InverseChecksumSRAM
|
||||||
|
|
||||||
PHB
|
PHB
|
||||||
LDA.w #$14FF ; \
|
LDA.w #$14FF ; \
|
||||||
LDX.w #CartridgeSRAM&$FFFF ; | Copies $1500 bytes from beginning of cart SRAM to
|
LDX.w #CartridgeSRAM&$FFFF ; | Copies $1500 bytes from beginning of cart SRAM to
|
||||||
LDY.w #SaveBackupSRAM&$FFFF ; | $704000
|
LDY.w #SaveBackupSRAM&$FFFF ; | $704000
|
||||||
MVN SRAMBank, SRAMBank ; /
|
MVN !SRAMBank, !SRAMBank ; /
|
||||||
PLB
|
PLB
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
@@ -51,10 +51,10 @@ ValidateSRAM:
|
|||||||
TDC : STA.l FileValiditySRAM ; Delete save by way of zeroing validity marker
|
TDC : STA.l FileValiditySRAM ; Delete save by way of zeroing validity marker
|
||||||
BRA .goodchecksum : +
|
BRA .goodchecksum : +
|
||||||
PHB
|
PHB
|
||||||
LDA.w #$14FF ; \
|
LDA.w #$14FF ; \
|
||||||
LDX.w #SaveBackupSRAM&$FFFF ; | Copies $1500 bytes from backup on cart SRAM to
|
LDX.w #SaveBackupSRAM&$FFFF ; | Copies $1500 bytes from backup on cart SRAM to
|
||||||
LDY.w #CartridgeSRAM&$FFFF ; | main save location at $700000
|
LDY.w #CartridgeSRAM&$FFFF ; | main save location at $700000
|
||||||
MVN SRAMBank, SRAMBank ; /
|
MVN !SRAMBank, !SRAMBank ; /
|
||||||
PLB
|
PLB
|
||||||
|
|
||||||
.goodchecksum
|
.goodchecksum
|
||||||
|
|||||||
@@ -58,13 +58,13 @@ endmacro
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
macro ServiceRequestChest(type)
|
macro ServiceRequestChest(type)
|
||||||
LDA.l TxStatus : BEQ + : CLC : RTL : + ; return fail if we don't have the lock
|
LDA.l TxStatus : BEQ + : CLC : RTL : + ; return fail if we don't have the lock
|
||||||
LDA.b $1B : STA.l TxBuffer+8 ; indoor/outdoor
|
LDA.b IndoorsFlag : STA.l TxBuffer+8 ; indoor/outdoor
|
||||||
BEQ +
|
BEQ +
|
||||||
LDA.b RoomIndex : STA.l TxBuffer+9 ; roomid low
|
LDA.b RoomIndex : STA.l TxBuffer+9 ; roomid low
|
||||||
LDA.b RoomIndex+1 : STA.l TxBuffer+10 ; roomid high
|
LDA.b RoomIndex+1 : STA.l TxBuffer+10 ; roomid high
|
||||||
BRA ++
|
BRA ++
|
||||||
+
|
+
|
||||||
LDA.w $040A : STA.l TxBuffer+9 ; area id
|
LDA.b OverworldIndex : STA.l TxBuffer+9 ; area id
|
||||||
LDA.b #$00 : STA.l TxBuffer+10 ; protocol defines this as a ushort
|
LDA.b #$00 : STA.l TxBuffer+10 ; protocol defines this as a ushort
|
||||||
++
|
++
|
||||||
LDA.b $76 : !SUB #$58 : STA.l TxBuffer+11 ; object index (type 2 only)
|
LDA.b $76 : !SUB #$58 : STA.l TxBuffer+11 ; object index (type 2 only)
|
||||||
@@ -76,13 +76,13 @@ endmacro
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
macro ServiceRequest(type,index)
|
macro ServiceRequest(type,index)
|
||||||
LDA.l TxStatus : BEQ + : CLC : RTL : + ; return fail if we don't have the lock
|
LDA.l TxStatus : BEQ + : CLC : RTL : + ; return fail if we don't have the lock
|
||||||
LDA.b $1B : STA.l TxBuffer+8 ; indoor/outdoor
|
LDA.b IndoorsFlag : STA.l TxBuffer+8 ; indoor/outdoor
|
||||||
BEQ +
|
BEQ +
|
||||||
LDA.b RoomIndex : STA.l TxBuffer+9 ; roomid low
|
LDA.b RoomIndex : STA.l TxBuffer+9 ; roomid low
|
||||||
LDA.b RoomIndex+1 : STA.l TxBuffer+10 ; roomid high
|
LDA.b RoomIndex+1 : STA.l TxBuffer+10 ; roomid high
|
||||||
BRA ++
|
BRA ++
|
||||||
+
|
+
|
||||||
LDA.w $040A : STA.l TxBuffer+9 ; area id
|
LDA.b OverworldIndex : STA.l TxBuffer+9 ; area id
|
||||||
LDA.b #$00 : STA.l TxBuffer+10 ; protocol defines this as a ushort
|
LDA.b #$00 : STA.l TxBuffer+10 ; protocol defines this as a ushort
|
||||||
++
|
++
|
||||||
LDA.b #<index> : STA.l TxBuffer+11 ; object index (type 2 only)
|
LDA.b #<index> : STA.l TxBuffer+11 ; object index (type 2 only)
|
||||||
@@ -111,7 +111,7 @@ PollService:
|
|||||||
BRA .done
|
BRA .done
|
||||||
+ : CMP.b #!SCM_PROMPT : BNE + ; item prompt
|
+ : CMP.b #!SCM_PROMPT : BNE + ; item prompt
|
||||||
LDA.l RxBuffer+8 : TAX
|
LDA.l RxBuffer+8 : TAX
|
||||||
LDA.l RxBuffer+9 : STA.w $012E, X ; set sound effect
|
LDA.l RxBuffer+9 : STA.w SFX2, X ; set sound effect
|
||||||
REP #$30 ; set 16-bit accumulator and index registers
|
REP #$30 ; set 16-bit accumulator and index registers
|
||||||
LDA.l RxBuffer+10 : TAX
|
LDA.l RxBuffer+10 : TAX
|
||||||
LDA.l RxBuffer+12
|
LDA.l RxBuffer+12
|
||||||
|
|||||||
@@ -331,7 +331,7 @@ Shopkepeer_CallOriginal:
|
|||||||
LDA.b #ShopkeeperJumpTable>>16 : PHA
|
LDA.b #ShopkeeperJumpTable>>16 : PHA
|
||||||
LDA.b #ShopkeeperJumpTable>>8 : PHA
|
LDA.b #ShopkeeperJumpTable>>8 : PHA
|
||||||
LDA.b #ShopkeeperJumpTable : PHA
|
LDA.b #ShopkeeperJumpTable : PHA
|
||||||
LDA.w $0E80, X
|
LDA.w SpriteItemType, X
|
||||||
JML.l UseImplicitRegIndexedLocalJumpTable
|
JML.l UseImplicitRegIndexedLocalJumpTable
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
Sprite_ShopKeeper:
|
Sprite_ShopKeeper:
|
||||||
@@ -370,7 +370,7 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
macro DrawMerchant(head,body,speed)
|
macro DrawMerchant(head,body,speed)
|
||||||
PHX : LDX.b #$00
|
PHX : LDX.b #$00
|
||||||
LDA.b $1A : AND.b <speed> : BEQ +
|
LDA.b FrameCounter : AND.b <speed> : BEQ +
|
||||||
-
|
-
|
||||||
LDA.w .oam_shopkeeper_f1, X : STA.l BigRAM, X : INX
|
LDA.w .oam_shopkeeper_f1, X : STA.l BigRAM, X : INX
|
||||||
CPX.b #$10 : !BLT -
|
CPX.b #$10 : !BLT -
|
||||||
@@ -420,7 +420,7 @@ Shopkeeper_DrawMerchant_Type1:
|
|||||||
LDA.b #$01 : STA.b Scrap06 ; request 1 OAM slot
|
LDA.b #$01 : STA.b Scrap06 ; request 1 OAM slot
|
||||||
LDA.b #$04 : JSL.l OAM_AllocateFromRegionA ; request 4 bytes
|
LDA.b #$04 : JSL.l OAM_AllocateFromRegionA ; request 4 bytes
|
||||||
STZ.b Scrap07
|
STZ.b Scrap07
|
||||||
LDA.b $1A : AND #$08 : BEQ +
|
LDA.b FrameCounter : AND #$08 : BEQ +
|
||||||
LDA.b #.oam_shopkeeper_f1 : STA.b Scrap08
|
LDA.b #.oam_shopkeeper_f1 : STA.b Scrap08
|
||||||
LDA.b #.oam_shopkeeper_f1>>8 : STA.b Scrap09
|
LDA.b #.oam_shopkeeper_f1>>8 : STA.b Scrap09
|
||||||
BRA ++
|
BRA ++
|
||||||
@@ -464,8 +464,8 @@ Shopkeeper_SetupHitboxes:
|
|||||||
|
|
||||||
JSR.w Setup_ShopItemInteractionHitbox
|
JSR.w Setup_ShopItemInteractionHitbox
|
||||||
JSL.l Utility_CheckIfHitBoxesOverlapLong : BCC .no_interaction
|
JSL.l Utility_CheckIfHitBoxesOverlapLong : BCC .no_interaction
|
||||||
LDA.b $F6 : AND.b #$80 : BEQ .no_interaction ; check for A-press
|
LDA.b Joy1B_New : AND.b #$80 : BEQ .no_interaction ; check for A-press
|
||||||
LDA.b $10 : CMP.b #$0C : !BGE .no_interaction ; don't interact in other modes besides game action
|
LDA.b GameMode : CMP.b #$0C : !BGE .no_interaction ; don't interact in other modes besides game action
|
||||||
JSR.w Shopkeeper_BuyItem
|
JSR.w Shopkeeper_BuyItem
|
||||||
.no_interaction
|
.no_interaction
|
||||||
INY #4
|
INY #4
|
||||||
@@ -496,13 +496,13 @@ Shopkeeper_BuyItem:
|
|||||||
LDA.b #$7A
|
LDA.b #$7A
|
||||||
LDY.b #$01
|
LDY.b #$01
|
||||||
JSL.l Sprite_ShowMessageUnconditional
|
JSL.l Sprite_ShowMessageUnconditional
|
||||||
LDA.b #$3C : STA.w $012E ; error sound
|
LDA.b #$3C : STA.w SFX2 ; error sound
|
||||||
JMP .done
|
JMP .done
|
||||||
.full_bottles
|
.full_bottles
|
||||||
LDA.b #$6B
|
LDA.b #$6B
|
||||||
LDY.b #$01
|
LDY.b #$01
|
||||||
JSL.l Sprite_ShowMessageUnconditional
|
JSL.l Sprite_ShowMessageUnconditional
|
||||||
LDA.b #$3C : STA.w $012E ; error sound
|
LDA.b #$3C : STA.w SFX2 ; error sound
|
||||||
JMP .done
|
JMP .done
|
||||||
.buy
|
.buy
|
||||||
LDA.l ShopType : AND.b #$80 : BNE ++ ; don't charge if this is a take-any
|
LDA.l ShopType : AND.b #$80 : BNE ++ ; don't charge if this is a take-any
|
||||||
@@ -544,7 +544,7 @@ Setup_ShopItemCollisionHitbox:
|
|||||||
SEP #$20 ; set 8-bit accumulator
|
SEP #$20 ; set 8-bit accumulator
|
||||||
|
|
||||||
; load shopkeeper X (16 bit)
|
; load shopkeeper X (16 bit)
|
||||||
LDA.w $0D30, X : XBA : LDA.w $0D10, X
|
LDA.w SpritePosXHigh, X : XBA : LDA.w SpritePosXLow, X
|
||||||
|
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
PHA : PHY
|
PHA : PHY
|
||||||
@@ -561,7 +561,7 @@ Setup_ShopItemCollisionHitbox:
|
|||||||
STA.b Scrap04 : XBA : STA.b Scrap0A
|
STA.b Scrap04 : XBA : STA.b Scrap0A
|
||||||
|
|
||||||
;load shopkeeper Y (16 bit)
|
;load shopkeeper Y (16 bit)
|
||||||
LDA.w $0D20, X : XBA : LDA.w $0D00, X
|
LDA.w SpritePosYHigh, X : XBA : LDA.w SpritePosYLow, X
|
||||||
|
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
PHY : INY #2
|
PHY : INY #2
|
||||||
@@ -624,7 +624,7 @@ RTS
|
|||||||
Sprite_HaltSpecialPlayerMovementCopied:
|
Sprite_HaltSpecialPlayerMovementCopied:
|
||||||
PHX
|
PHX
|
||||||
JSL Sprite_NullifyHookshotDrag
|
JSL Sprite_NullifyHookshotDrag
|
||||||
STZ $5E ; Set Link's speed to zero...
|
STZ.b LinkSpeed ; Set Link's speed to zero...
|
||||||
JSL Player_HaltDashAttackLong
|
JSL Player_HaltDashAttackLong
|
||||||
PLX
|
PLX
|
||||||
RTS
|
RTS
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
org $008A01 ; 0xA01 - Bank00.asm (LDA.b #$10 : STA $4304 : STA $4314 : STA $4324)
|
org $008A01 ; 0xA01 - Bank00.asm (LDA.b #$10 : STA $4304 : STA $4314 : STA $4324)
|
||||||
LDA.b $BC
|
LDA.b PlayerSpriteBank
|
||||||
|
|
||||||
org $1BEDF9
|
org $1BEDF9
|
||||||
JSL SpriteSwap_Palette_ArmorAndGloves ;4bytes
|
JSL SpriteSwap_Palette_ArmorAndGloves ;4bytes
|
||||||
@@ -16,9 +16,9 @@ org $BF8000
|
|||||||
SwapSpriteIfNecessary:
|
SwapSpriteIfNecessary:
|
||||||
PHP
|
PHP
|
||||||
SEP #$20 ; set 8-bit accumulator
|
SEP #$20 ; set 8-bit accumulator
|
||||||
LDA.l SpriteSwapper : BEQ + : !ADD #!BANK_BASE : CMP.b $BC : BEQ +
|
LDA.l SpriteSwapper : BEQ + : !ADD #!BANK_BASE : CMP.b PlayerSpriteBank : BEQ +
|
||||||
STA.b $BC
|
STA.b PlayerSpriteBank
|
||||||
STZ.w $0710 ; Set Normal Sprite NMI
|
STZ.w SkipOAM ; Set Normal Sprite NMI
|
||||||
JSL.l SpriteSwap_Palette_ArmorAndGloves_part_two
|
JSL.l SpriteSwap_Palette_ArmorAndGloves_part_two
|
||||||
+
|
+
|
||||||
PLP
|
PLP
|
||||||
@@ -28,7 +28,7 @@ SpriteSwap_Palette_ArmorAndGloves:
|
|||||||
{
|
{
|
||||||
;DEDF9
|
;DEDF9
|
||||||
LDA.l SpriteSwapper : BNE .continue
|
LDA.l SpriteSwapper : BNE .continue
|
||||||
LDA.b #$10 : STA.b $BC ; Load Original Sprite Location
|
LDA.b #$10 : STA.b PlayerSpriteBank ; Load Original Sprite Location
|
||||||
REP #$21
|
REP #$21
|
||||||
LDA.l ArmorEquipment
|
LDA.l ArmorEquipment
|
||||||
JSL $1BEDFF ; Read Original Palette Code
|
JSL $1BEDFF ; Read Original Palette Code
|
||||||
@@ -60,7 +60,7 @@ SpriteSwap_Palette_ArmorAndGloves:
|
|||||||
|
|
||||||
TXY : TAX
|
TXY : TAX
|
||||||
|
|
||||||
LDA.b $BC : AND.w #$00FF : STA.b Scrap02
|
LDA.b PlayerSpriteBank : AND.w #$00FF : STA.b Scrap02
|
||||||
|
|
||||||
.loop
|
.loop
|
||||||
|
|
||||||
|
|||||||
4
sram.asm
4
sram.asm
@@ -425,8 +425,8 @@ base off
|
|||||||
; If these move (most likely by placing initsramtable.asm somewhere else) these
|
; If these move (most likely by placing initsramtable.asm somewhere else) these
|
||||||
; bank definitions need to be changed as well.
|
; bank definitions need to be changed as well.
|
||||||
;================================================================================
|
;================================================================================
|
||||||
SRAMBank = $70
|
!SRAMBank = $70
|
||||||
SRAMTableBank = $30|$80
|
!SRAMTableBank = $30|$80
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
; Assertions
|
; Assertions
|
||||||
|
|||||||
22
stats.asm
22
stats.asm
@@ -16,7 +16,7 @@ RTL
|
|||||||
StatSaveCounter:
|
StatSaveCounter:
|
||||||
PHA
|
PHA
|
||||||
LDA.l StatsLocked : BNE +
|
LDA.l StatsLocked : BNE +
|
||||||
LDA.b $10 : CMP.b #$17 : BNE + ; not a proper s&q, link probably died
|
LDA.b GameMode : CMP.b #$17 : BNE + ; not a proper s&q, link probably died
|
||||||
LDA.l SaveQuitCounter : INC
|
LDA.l SaveQuitCounter : INC
|
||||||
CMP.b #100 : BEQ + ; decimal 100
|
CMP.b #100 : BEQ + ; decimal 100
|
||||||
STA.l SaveQuitCounter
|
STA.l SaveQuitCounter
|
||||||
@@ -55,7 +55,7 @@ DungeonExitTransition:
|
|||||||
JSL Player_HaltDashAttackLong
|
JSL Player_HaltDashAttackLong
|
||||||
LDA.b #$00 : STA.w $0301 ; stop item dashing
|
LDA.b #$00 : STA.w $0301 ; stop item dashing
|
||||||
+
|
+
|
||||||
LDA.b #$0F : STA.b $10 ; stop running through the transition
|
LDA.b #$0F : STA.b GameMode ; stop running through the transition
|
||||||
StatTransitionCounter:
|
StatTransitionCounter:
|
||||||
PHA : PHP
|
PHA : PHP
|
||||||
LDA.l StatsLocked : BNE +
|
LDA.l StatsLocked : BNE +
|
||||||
@@ -93,7 +93,7 @@ IncrementSmallKeysNoPrimary:
|
|||||||
JSL AddInventory_incrementKeyLong
|
JSL AddInventory_incrementKeyLong
|
||||||
+
|
+
|
||||||
JSL.l UpdateKeys
|
JSL.l UpdateKeys
|
||||||
LDA.b $1B : BEQ + ; skip room check if outdoors
|
LDA.b IndoorsFlag : BEQ + ; skip room check if outdoors
|
||||||
PHP : REP #$20 ; set 16-bit accumulator
|
PHP : REP #$20 ; set 16-bit accumulator
|
||||||
LDA.w $048E : CMP.w #$0087 : BNE ++ ; hera basement
|
LDA.w $048E : CMP.w #$0087 : BNE ++ ; hera basement
|
||||||
PLP : PHY : LDY.b #$24 : JSL.l FullInventoryExternal
|
PLP : PHY : LDY.b #$24 : JSL.l FullInventoryExternal
|
||||||
@@ -116,13 +116,13 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
CountChestKey: ; called by neighbor functions
|
CountChestKey: ; called by neighbor functions
|
||||||
PHA : PHX
|
PHA : PHX
|
||||||
CPY.b #$24 : BEQ + ; small key for this dungeon - use $040C
|
CPY.b #$24 : BEQ + ; small key for this dungeon - use DungeonID
|
||||||
CPY.b #$A0 : !BLT .end ; Ignore most items
|
CPY.b #$A0 : !BLT .end ; Ignore most items
|
||||||
CPY.b #$AE : !BGE .end ; Ignore reserved key and generic key
|
CPY.b #$AE : !BGE .end ; Ignore reserved key and generic key
|
||||||
TYA : AND.B #$0F : BNE ++ ; If this is an HC key, instead count it as a sewers key
|
TYA : AND.B #$0F : BNE ++ ; If this is an HC key, instead count it as a sewers key
|
||||||
INC
|
INC
|
||||||
++ TAX : BRA .count ; use Key id instead of $040C (Keysanity)
|
++ TAX : BRA .count ; use Key id instead of DungeonID (Keysanity)
|
||||||
+ LDA.w $040C : LSR
|
+ LDA.w DungeonID : LSR
|
||||||
BNE +
|
BNE +
|
||||||
INC ; combines HC and Sewer counts
|
INC ; combines HC and Sewer counts
|
||||||
+ TAX
|
+ TAX
|
||||||
@@ -182,7 +182,7 @@ IncrementChestTurnCounter:
|
|||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
IncrementChestCounter:
|
IncrementChestCounter:
|
||||||
LDA.b #$01 : STA.w $02E9 ; thing we wrote over
|
LDA.b #$01 : STA.w ItemReceiptMethod ; thing we wrote over
|
||||||
PHA
|
PHA
|
||||||
LDA.l StatsLocked : BNE +
|
LDA.l StatsLocked : BNE +
|
||||||
LDA.l ChestsOpened : INC : STA.l ChestsOpened
|
LDA.l ChestsOpened : INC : STA.l ChestsOpened
|
||||||
@@ -289,7 +289,7 @@ IncrementUWMirror:
|
|||||||
PHA
|
PHA
|
||||||
LDA.b #$00 : STA.l $7F5035 ; bandaid patch bug with mirroring away from text
|
LDA.b #$00 : STA.l $7F5035 ; bandaid patch bug with mirroring away from text
|
||||||
LDA.l StatsLocked : BNE +
|
LDA.l StatsLocked : BNE +
|
||||||
LDA.w $040C : CMP.b #$FF : BEQ + ; skip if we're in a cave or house
|
LDA.w DungeonID : CMP.b #$FF : BEQ + ; skip if we're in a cave or house
|
||||||
LDA.l UnderworldMirrors : INC : STA.l UnderworldMirrors
|
LDA.l UnderworldMirrors : INC : STA.l UnderworldMirrors
|
||||||
JSL.l StatTransitionCounter
|
JSL.l StatTransitionCounter
|
||||||
+
|
+
|
||||||
@@ -350,9 +350,9 @@ StatsFinalPrep:
|
|||||||
|
|
||||||
.done
|
.done
|
||||||
PLP : PLX : PLA
|
PLP : PLX : PLA
|
||||||
LDA.b #$19 : STA.b $10 ; thing we wrote over, load triforce room
|
LDA.b #$19 : STA.b GameMode ; thing we wrote over, load triforce room
|
||||||
STZ.b $11
|
STZ.b GameSubMode
|
||||||
STZ.b $B0
|
STZ.b SubSubModule
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; Notes:
|
; Notes:
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
;$03348E: smith sword check (to see if uprade-able)
|
;$03348E: smith sword check (to see if uprade-able)
|
||||||
;================================================================================
|
;================================================================================
|
||||||
LoadSwordForDamage:
|
LoadSwordForDamage:
|
||||||
LDA.w $0E20, X : CMP.b #$88 : BNE .notMoth
|
LDA.w SpriteTypeTable, X : CMP.b #$88 : BNE .notMoth
|
||||||
JSR.w LoadModifiedSwordLevel ; load normal sword value
|
JSR.w LoadModifiedSwordLevel ; load normal sword value
|
||||||
CMP.b #$04 : !BLT + : DEC : + ; if it's gold sword, change it to tempered
|
CMP.b #$04 : !BLT + : DEC : + ; if it's gold sword, change it to tempered
|
||||||
RTL
|
RTL
|
||||||
@@ -66,17 +66,17 @@ RTL
|
|||||||
; $7E0348 - Ice Value
|
; $7E0348 - Ice Value
|
||||||
LoadModifiedIceFloorValue_a11:
|
LoadModifiedIceFloorValue_a11:
|
||||||
LDA.b RoomIndex : CMP.b #$91 : BEQ + : CMP.b #$92 : BEQ + : CMP.b #$93 : BEQ + ; mire basement currently broken - not sure why
|
LDA.b RoomIndex : CMP.b #$91 : BEQ + : CMP.b #$92 : BEQ + : CMP.b #$93 : BEQ + ; mire basement currently broken - not sure why
|
||||||
LDA.b $5D : CMP.b #$01 : BEQ + : CMP.b #$17 : BEQ + : CMP.b #$1C : BEQ +
|
LDA.b LinkState : CMP.b #$01 : BEQ + : CMP.b #$17 : BEQ + : CMP.b #$1C : BEQ +
|
||||||
LDA.b $5E : CMP.b #$02 : BEQ +
|
LDA.b LinkSpeed : CMP.b #$02 : BEQ +
|
||||||
LDA.b $5B : BNE +
|
LDA.b LinkSlipping : BNE +
|
||||||
LDA.w $0348 : ORA.l IceModifier : AND.b #$11 : RTL
|
LDA.w $0348 : ORA.l IceModifier : AND.b #$11 : RTL
|
||||||
+ : LDA.w $0348 : AND.b #$11
|
+ : LDA.w $0348 : AND.b #$11
|
||||||
RTL
|
RTL
|
||||||
LoadModifiedIceFloorValue_a01:
|
LoadModifiedIceFloorValue_a01:
|
||||||
LDA.b RoomIndex : CMP.b #$91 : BEQ + : CMP.b #$92 : BEQ + : CMP.b #$93 : BEQ + ; mire basement currently broken - not sure why
|
LDA.b RoomIndex : CMP.b #$91 : BEQ + : CMP.b #$92 : BEQ + : CMP.b #$93 : BEQ + ; mire basement currently broken - not sure why
|
||||||
LDA.b $5D : CMP.b #$01 : BEQ + : CMP.b #$17 : BEQ + : CMP.b #$1C : BEQ +
|
LDA.b LinkState : CMP.b #$01 : BEQ + : CMP.b #$17 : BEQ + : CMP.b #$1C : BEQ +
|
||||||
LDA.b $5E : CMP.b #$02 : BEQ +
|
LDA.b LinkSpeed : CMP.b #$02 : BEQ +
|
||||||
LDA.b $5B : BNE +
|
LDA.b LinkSlipping : BNE +
|
||||||
LDA.w $0348 : ORA.l IceModifier : AND.b #$01 : RTL
|
LDA.w $0348 : ORA.l IceModifier : AND.b #$01 : RTL
|
||||||
+ : LDA.w $0348 : AND.b #$01
|
+ : LDA.w $0348 : AND.b #$01
|
||||||
RTL
|
RTL
|
||||||
@@ -98,10 +98,10 @@ RTL
|
|||||||
;================================================================================
|
;================================================================================
|
||||||
CheckGanonHammerDamage:
|
CheckGanonHammerDamage:
|
||||||
LDA.l HammerableGanon : BEQ +
|
LDA.l HammerableGanon : BEQ +
|
||||||
LDA.w $0E20, X : CMP.b #$D8 ; original behavior except ganon
|
LDA.w SpriteTypeTable, X : CMP.b #$D8 ; original behavior except ganon
|
||||||
RTL
|
RTL
|
||||||
+
|
+
|
||||||
LDA.w $0E20, X : CMP.b #$D6 ; original behavior
|
LDA.w SpriteTypeTable, X : CMP.b #$D6 ; original behavior
|
||||||
RTL
|
RTL
|
||||||
;================================================================================
|
;================================================================================
|
||||||
GetSmithSword:
|
GetSmithSword:
|
||||||
@@ -122,7 +122,7 @@ GetSmithSword:
|
|||||||
|
|
||||||
.buy
|
.buy
|
||||||
LDA.l SmithItem : TAY
|
LDA.l SmithItem : TAY
|
||||||
STZ.w $02E9 ; Item from NPC
|
STZ.w ItemReceiptMethod ; Item from NPC
|
||||||
PHX : JSL Link_ReceiveItem : PLX
|
PHX : JSL Link_ReceiveItem : PLX
|
||||||
|
|
||||||
REP #$20 : LDA.l CurrentRupees : !SUB.w #$000A : STA.l CurrentRupees : SEP #$20 ; Take 10 rupees
|
REP #$20 : LDA.l CurrentRupees : !SUB.w #$000A : STA.l CurrentRupees : SEP #$20 ; Take 10 rupees
|
||||||
@@ -133,7 +133,7 @@ GetSmithSword:
|
|||||||
;================================================================================
|
;================================================================================
|
||||||
CheckMedallionSword:
|
CheckMedallionSword:
|
||||||
LDA.l AllowSwordlessMedallionUse : BEQ .check_sword
|
LDA.l AllowSwordlessMedallionUse : BEQ .check_sword
|
||||||
CMP #$01 : BEQ .check_pad
|
CMP.b #$01 : BEQ .check_pad
|
||||||
LDA.b #$02 ; Pretend we have master sword
|
LDA.b #$02 ; Pretend we have master sword
|
||||||
RTL
|
RTL
|
||||||
.check_sword
|
.check_sword
|
||||||
@@ -141,31 +141,31 @@ CheckMedallionSword:
|
|||||||
RTL
|
RTL
|
||||||
.check_pad
|
.check_pad
|
||||||
PHB : PHX : PHY
|
PHB : PHX : PHY
|
||||||
LDA.b $1B : BEQ .outdoors
|
LDA.b IndoorsFlag : BEQ .outdoors
|
||||||
.indoors
|
.indoors
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
LDA.b RoomIndex ; load room ID
|
LDA.b RoomIndex ; load room ID
|
||||||
CMP.w #$000E : BNE + ; freezor1
|
CMP.w #$000E : BNE + ; freezor1
|
||||||
LDA.b $22 : AND.w #$01FF ; check x-coord
|
LDA.b LinkPosX : AND.w #$01FF ; check x-coord
|
||||||
CMP.w #368-8 : !BLT .normal
|
CMP.w #368-8 : !BLT .normal
|
||||||
CMP.w #368+32-8 : !BGE .normal
|
CMP.w #368+32-8 : !BGE .normal
|
||||||
LDA.b $20 : AND.w #$01FF ; check y-coord
|
LDA.b LinkPosY : AND.w #$01FF ; check y-coord
|
||||||
CMP.w #400-22 : !BLT .normal
|
CMP.w #400-22 : !BLT .normal
|
||||||
CMP.w #400+32-22 : !BGE .normal
|
CMP.w #400+32-22 : !BGE .normal
|
||||||
JMP .permit
|
JMP .permit
|
||||||
+ : CMP.w #$007E : BNE + ; freezor2
|
+ : CMP.w #$007E : BNE + ; freezor2
|
||||||
LDA.b $22 : AND.w #$01FF ; check x-coord
|
LDA.b LinkPosX : AND.w #$01FF ; check x-coord
|
||||||
CMP.w #112-8 : !BLT .normal
|
CMP.w #112-8 : !BLT .normal
|
||||||
CMP.w #112+32-8 : !BGE .normal
|
CMP.w #112+32-8 : !BGE .normal
|
||||||
LDA.b $20 : AND.w #$01FF ; check y-coord
|
LDA.b LinkPosY : AND.w #$01FF ; check y-coord
|
||||||
CMP.w #400-22 : !BLT .normal
|
CMP.w #400-22 : !BLT .normal
|
||||||
CMP.w #400+32-22 : !BGE .normal
|
CMP.w #400+32-22 : !BGE .normal
|
||||||
JMP .permit
|
JMP .permit
|
||||||
+ : CMP.w #$00DE : BNE + ; kholdstare
|
+ : CMP.w #$00DE : BNE + ; kholdstare
|
||||||
LDA.b $22 : AND.w #$01FF ; check x-coord
|
LDA.b LinkPosX : AND.w #$01FF ; check x-coord
|
||||||
CMP.w #368-8 : !BLT .normal
|
CMP.w #368-8 : !BLT .normal
|
||||||
CMP.w #368+32-8 : !BGE .normal
|
CMP.w #368+32-8 : !BGE .normal
|
||||||
LDA.b $20 : AND.w #$01FF ; check y-coord
|
LDA.b LinkPosY : AND.w #$01FF ; check y-coord
|
||||||
CMP.w #144-22 : !BLT .normal
|
CMP.w #144-22 : !BLT .normal
|
||||||
CMP.w #144+32-22 : !BGE .normal
|
CMP.w #144+32-22 : !BGE .normal
|
||||||
BRA .permit
|
BRA .permit
|
||||||
@@ -173,14 +173,14 @@ CheckMedallionSword:
|
|||||||
SEP #$20 ; set 8-bit accumulator
|
SEP #$20 ; set 8-bit accumulator
|
||||||
BRA .done
|
BRA .done
|
||||||
.outdoors
|
.outdoors
|
||||||
LDA.b $8A : CMP.b #$70 : BNE +
|
LDA.b OverworldIndex : CMP.b #$70 : BNE +
|
||||||
LDA.l MireRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP.w $0303 : BNE .done
|
LDA.l MireRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP.w CurrentYItem : BNE .done
|
||||||
LDA.l OverworldEventDataWRAM+$70 : AND.b #$20 : BNE .done
|
LDA.l OverworldEventDataWRAM+$70 : AND.b #$20 : BNE .done
|
||||||
LDA.b #$08 : PHA : PLB ; set data bank to $08
|
LDA.b #$08 : PHA : PLB ; set data bank to $08
|
||||||
LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; misery mire
|
LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; misery mire
|
||||||
BRA .done
|
BRA .done
|
||||||
+ : CMP.b #$47 : BNE +
|
+ : CMP.b #$47 : BNE +
|
||||||
LDA.l TRockRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP.w $0303 : BNE .done
|
LDA.l TRockRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP.w CurrentYItem : BNE .done
|
||||||
LDA.l OverworldEventDataWRAM+$47 : AND.b #$20 : BNE .done
|
LDA.l OverworldEventDataWRAM+$47 : AND.b #$20 : BNE .done
|
||||||
LDA.b #$08 : PHA : PLB ; set data bank to $08
|
LDA.b #$08 : PHA : PLB ; set data bank to $08
|
||||||
LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; turtle rock
|
LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; turtle rock
|
||||||
|
|||||||
30
tablets.asm
30
tablets.asm
@@ -20,7 +20,7 @@ RTL
|
|||||||
SetTabletItem:
|
SetTabletItem:
|
||||||
JSL.l GetSpriteID
|
JSL.l GetSpriteID
|
||||||
PHA
|
PHA
|
||||||
LDA.b $8A : CMP.b #$03 : BEQ .ether ; if we're on the map where ether is, we're the ether tablet
|
LDA.b OverworldIndex : CMP.b #$03 : BEQ .ether ; if we're on the map where ether is, we're the ether tablet
|
||||||
.bombos
|
.bombos
|
||||||
JSL.l ItemSet_BombosTablet : BRA .done
|
JSL.l ItemSet_BombosTablet : BRA .done
|
||||||
.ether
|
.ether
|
||||||
@@ -37,15 +37,15 @@ SpawnTabletItem:
|
|||||||
JSL.l SetTabletItem
|
JSL.l SetTabletItem
|
||||||
|
|
||||||
LDA.b #$EB
|
LDA.b #$EB
|
||||||
STA.l $7FFE00
|
STA.l MiniGameTime
|
||||||
JSL Sprite_SpawnDynamically
|
JSL Sprite_SpawnDynamically
|
||||||
|
|
||||||
PLA : STA.w $0E80, Y ; Store item type
|
PLA : STA.w SpriteItemType, Y ; Store item type
|
||||||
LDA.b $22 : STA.w $0D10, Y
|
LDA.b LinkPosX : STA.w SpritePosXLow, Y
|
||||||
LDA.b $23 : STA.w $0D30, Y
|
LDA.b LinkPosX+1 : STA.w SpritePosXHigh, Y
|
||||||
|
|
||||||
LDA.b $20 : STA.w $0D00, Y
|
LDA.b LinkPosY : STA.w SpritePosYLow, Y
|
||||||
LDA.b $21 : STA.w $0D20, Y
|
LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
|
||||||
|
|
||||||
LDA.b #$00 : STA.w $0F20, Y
|
LDA.b #$00 : STA.w $0F20, Y
|
||||||
|
|
||||||
@@ -55,14 +55,14 @@ RTL
|
|||||||
MaybeUnlockTabletAnimation:
|
MaybeUnlockTabletAnimation:
|
||||||
PHA : PHP
|
PHA : PHP
|
||||||
JSL.l IsMedallion : BCC +
|
JSL.l IsMedallion : BCC +
|
||||||
STZ $0112 ; disable falling-medallion mode
|
STZ.w MedallionFlag ; disable falling-medallion mode
|
||||||
STZ $03EF ; release link from item-up pose
|
STZ.w ForceSwordUp ; release link from item-up pose
|
||||||
LDA.b #$00 : STA.b $5D ; set link to ground state
|
LDA.b #$00 : STA.b LinkState ; set link to ground state
|
||||||
|
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
LDA.b $8A : CMP.w #$0030 : BNE ++ ; Desert
|
LDA.b OverworldIndex : CMP.w #$0030 : BNE ++ ; Desert
|
||||||
SEP #$20 ; set 8-bit accumulator
|
SEP #$20 ; set 8-bit accumulator
|
||||||
LDA.b #$02 : STA.b $2F ; face link forward
|
LDA.b #$02 : STA.b LinkDirection ; face link forward
|
||||||
LDA.b #$3C : STA.b $46 ; lock link for 60f
|
LDA.b #$3C : STA.b $46 ; lock link for 60f
|
||||||
++
|
++
|
||||||
SEP #$20 ; set 8-bit accumulator
|
SEP #$20 ; set 8-bit accumulator
|
||||||
@@ -72,15 +72,15 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
IsMedallion:
|
IsMedallion:
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
LDA.b $8A
|
LDA.b OverworldIndex
|
||||||
CMP.w #$03 : BNE + ; Death Mountain
|
CMP.w #$03 : BNE + ; Death Mountain
|
||||||
LDA.b $22 : CMP.w #1890 : !BGE ++
|
LDA.b LinkPosX : CMP.w #1890 : !BGE ++
|
||||||
SEC
|
SEC
|
||||||
JMP .done
|
JMP .done
|
||||||
++
|
++
|
||||||
BRA .false
|
BRA .false
|
||||||
+ CMP.w #$30 : BNE + ; Desert
|
+ CMP.w #$30 : BNE + ; Desert
|
||||||
LDA.b $22 : CMP.w #512 : !BLT ++
|
LDA.b LinkPosX : CMP.w #512 : !BLT ++
|
||||||
SEC
|
SEC
|
||||||
JMP .done
|
JMP .done
|
||||||
++
|
++
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ RenderCharSetColorExtended_init:
|
|||||||
|
|
||||||
RenderCharSetColorExtended_close:
|
RenderCharSetColorExtended_close:
|
||||||
stz.b Scrap0C
|
stz.b Scrap0C
|
||||||
lda.w $010c
|
lda.w GameModeCache
|
||||||
sta.b $10
|
sta.b GameMode
|
||||||
rtl
|
rtl
|
||||||
|
|
||||||
RenderCharSetColorExtended:
|
RenderCharSetColorExtended:
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ DrawChallengeTimer:
|
|||||||
LDA.w ClockSeconds+2 : STA.l $7EC7A2
|
LDA.w ClockSeconds+2 : STA.l $7EC7A2
|
||||||
LDA.w ClockSeconds : STA.l $7EC7A4
|
LDA.w ClockSeconds : STA.l $7EC7A4
|
||||||
++
|
++
|
||||||
LDA.b $1A : AND.w #$001F : BNE + : JSR CalculateTimer : +
|
LDA.b FrameCounter : AND.w #$001F : BNE + : JSR CalculateTimer : +
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -504,23 +504,23 @@ Sprite_IsOnscreen:
|
|||||||
JSR _Sprite_IsOnscreen_DoWork
|
JSR _Sprite_IsOnscreen_DoWork
|
||||||
BCS +
|
BCS +
|
||||||
REP #$20
|
REP #$20
|
||||||
LDA.b $E2 : PHA : !SUB.w #$0F : STA.b $E2
|
LDA.b BG2H : PHA : !SUB.w #$0F : STA.b BG2H
|
||||||
LDA.b $E8 : PHA : !SUB.w #$0F : STA.b $E8
|
LDA.b BG2V : PHA : !SUB.w #$0F : STA.b BG2V
|
||||||
SEP #$20
|
SEP #$20
|
||||||
JSR _Sprite_IsOnscreen_DoWork
|
JSR _Sprite_IsOnscreen_DoWork
|
||||||
REP #$20
|
REP #$20
|
||||||
PLA : STA.b $E8
|
PLA : STA.b BG2V
|
||||||
PLA : STA.b $E2
|
PLA : STA.b BG2H
|
||||||
SEP #$20
|
SEP #$20
|
||||||
+
|
+
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
_Sprite_IsOnscreen_DoWork:
|
_Sprite_IsOnscreen_DoWork:
|
||||||
LDA.w $0D10, X : CMP.b $E2
|
LDA.w SpritePosXLow, X : CMP.b BG2H
|
||||||
LDA.w $0D30, X : SBC.b $E3 : BNE .offscreen
|
LDA.w SpritePosXHigh, X : SBC.b $E3 : BNE .offscreen
|
||||||
|
|
||||||
LDA.w $0D00, X : CMP.b $E8
|
LDA.w SpritePosYLow, X : CMP.b BG2V
|
||||||
LDA.w $0D20, X : SBC.b $E9 : BNE .offscreen
|
LDA.w SpritePosYHigh, X : SBC.b $E9 : BNE .offscreen
|
||||||
SEC
|
SEC
|
||||||
RTS
|
RTS
|
||||||
.offscreen
|
.offscreen
|
||||||
@@ -542,13 +542,13 @@ Sprite_GetScreenRelativeCoords:
|
|||||||
|
|
||||||
STA.b Scrap08
|
STA.b Scrap08
|
||||||
|
|
||||||
LDA.w $0D00, X : STA.b Scrap00
|
LDA.w SpritePosYLow, X : STA.b Scrap00
|
||||||
!SUB $E8 : STA.b Scrap06
|
!SUB.b BG2V : STA.b Scrap06
|
||||||
LDA.w $0D20, X : STA.b Scrap01
|
LDA.w SpritePosYHigh, X : STA.b Scrap01
|
||||||
|
|
||||||
LDA.w $0D10, X : STA.b Scrap02
|
LDA.w SpritePosXLow, X : STA.b Scrap02
|
||||||
!SUB $E2 : STA.b Scrap07
|
!SUB.b BG2H : STA.b Scrap07
|
||||||
LDA.w $0D30, X : STA.b Scrap03
|
LDA.w SpritePosXHigh, X : STA.b Scrap03
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user