Merge remote-tracking branch 'codemann/OWMain' into GKNew
This commit is contained in:
@@ -182,11 +182,6 @@ incsrc dungeonmap.asm
|
|||||||
incsrc hextodec.asm
|
incsrc hextodec.asm
|
||||||
incsrc multiworld.asm
|
incsrc multiworld.asm
|
||||||
incsrc textrenderer.asm
|
incsrc textrenderer.asm
|
||||||
incsrc crystalswitchbook.asm
|
|
||||||
incsrc mimicdash.asm
|
|
||||||
incsrc gloom.asm
|
|
||||||
incsrc special_weapons.asm
|
|
||||||
incsrc variable_ganon_vulnerability.asm
|
|
||||||
warnpc $A58000
|
warnpc $A58000
|
||||||
|
|
||||||
org $A28000
|
org $A28000
|
||||||
@@ -206,6 +201,14 @@ incsrc inventory.asm
|
|||||||
incsrc menu/hudalpha.asm
|
incsrc menu/hudalpha.asm
|
||||||
warnpc $A38000
|
warnpc $A38000
|
||||||
|
|
||||||
|
org $B98000
|
||||||
|
incsrc crystalswitchbook.asm
|
||||||
|
incsrc mimicdash.asm
|
||||||
|
incsrc gloom.asm
|
||||||
|
incsrc special_weapons.asm
|
||||||
|
incsrc variable_ganon_vulnerability.asm
|
||||||
|
warnpc $BA8000
|
||||||
|
|
||||||
org $A38000
|
org $A38000
|
||||||
incsrc stats/credits.asm ; Statically mapped
|
incsrc stats/credits.asm ; Statically mapped
|
||||||
incsrc stats/main.asm
|
incsrc stats/main.asm
|
||||||
@@ -358,6 +361,7 @@ warnpc $B08000
|
|||||||
;$33 Graphics Bank
|
;$33 Graphics Bank
|
||||||
;$36 reserved for Enemizer
|
;$36 reserved for Enemizer
|
||||||
;$37 Room data if needed for DR/Pottery/Enemizer
|
;$37 Room data if needed for DR/Pottery/Enemizer
|
||||||
|
;$39 GwaaKiwi Code Bank
|
||||||
;$3A reserved for downstream use
|
;$3A reserved for downstream use
|
||||||
;$3B reserved for downstream use
|
;$3B reserved for downstream use
|
||||||
;$3F reserved for internal debugging
|
;$3F reserved for internal debugging
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ DrawLibraryItemGFX:
|
|||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
SetLibraryItem:
|
SetLibraryItem:
|
||||||
LDY.w SprItemReceipt, X
|
LDY.w SprSourceItemId, X
|
||||||
JSL ItemSet_Library ; contains thing we wrote over
|
JSL ItemSet_Library ; contains thing we wrote over
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
@@ -52,7 +52,7 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
GiveBonkItem:
|
GiveBonkItem:
|
||||||
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID
|
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID
|
||||||
LDA.w SprItemReceipt, X
|
LDA.w SprSourceItemId, X
|
||||||
JSR AbsorbKeyCheck : BCC .notKey
|
JSR AbsorbKeyCheck : BCC .notKey
|
||||||
PHY : LDY.b #$24 : JSL AddInventory : PLY ; do inventory processing for a small key
|
PHY : LDY.b #$24 : JSL AddInventory : PLY ; do inventory processing for a small key
|
||||||
LDA.l CurrentSmallKeys : INC A : STA.l CurrentSmallKeys
|
LDA.l CurrentSmallKeys : INC A : STA.l CurrentSmallKeys
|
||||||
|
|||||||
12
bugfixes.asm
12
bugfixes.asm
@@ -180,9 +180,19 @@ LDA.b IndoorsFlag : BNE +
|
|||||||
+
|
+
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
PostFixMirrorGfxPrep:
|
||||||
|
LDA.b #$01 : STA.w OWTransitionFlag
|
||||||
|
JML HandleFollowersAfterMirroring ; what we wrote over
|
||||||
|
|
||||||
|
; warning, this is called on frames after PostFixMirrorGfxPrep but for
|
||||||
|
; several frames after, so we use OWTransitionFlag to run something once
|
||||||
PostFixMirrorGfx:
|
PostFixMirrorGfx:
|
||||||
JSL HandleFollowersAfterMirroring
|
STA.w SubModuleInterface ; what we wrote over
|
||||||
|
LDA.w OWTransitionFlag : CMP.b #$01 : BNE .done
|
||||||
|
LDA.b #$08 : STA.w OWTransitionFlag
|
||||||
JML FollowerGfxRedraw
|
JML FollowerGfxRedraw
|
||||||
|
.done
|
||||||
|
RTL
|
||||||
|
|
||||||
PostFixOAMGfx:
|
PostFixOAMGfx:
|
||||||
JSL FollowerGfxRedraw
|
JSL FollowerGfxRedraw
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
!INERT = $00
|
!INERT = $00
|
||||||
!INIT = $08
|
!INIT = $08
|
||||||
!ALIVE = $09
|
!ALIVE = $09
|
||||||
|
!OAMPROPS = $09
|
||||||
!CUCCO_ENRAGED = $23
|
!CUCCO_ENRAGED = $23
|
||||||
|
|
||||||
CuccoStorm:
|
CuccoStorm:
|
||||||
@@ -12,6 +13,7 @@ CuccoStorm:
|
|||||||
LDA.b GameMode : 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
|
||||||
|
|
||||||
|
.activate
|
||||||
-
|
-
|
||||||
;==== Find a Cucco
|
;==== Find a Cucco
|
||||||
|
|
||||||
@@ -40,7 +42,11 @@ CuccoStorm:
|
|||||||
PLY
|
PLY
|
||||||
CPY.b #$FF : BEQ + ; fail if no slots found
|
CPY.b #$FF : BEQ + ; fail if no slots found
|
||||||
LDA.b #!CUCCO : STA.w SpriteTypeTable, Y
|
LDA.b #!CUCCO : STA.w SpriteTypeTable, Y
|
||||||
LDA.b #!INIT : STA.w SpriteAITable, Y
|
LDA.b #!ALIVE : STA.w SpriteAITable, Y
|
||||||
|
PHX
|
||||||
|
TYX : JSL ResetSpriteProperties
|
||||||
|
PLX
|
||||||
|
LDA.b #!OAMPROPS : STA.w SpriteOAMProp, Y
|
||||||
LDA.b LinkPosY : STA.w SpritePosYLow, Y
|
LDA.b LinkPosY : STA.w SpritePosYLow, Y
|
||||||
LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
|
LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
|
||||||
LDA.b LinkPosX : STA.w SpritePosXLow, Y
|
LDA.b LinkPosX : STA.w SpritePosXLow, Y
|
||||||
|
|||||||
@@ -118,8 +118,9 @@ RTL
|
|||||||
GetCurrentWorldForLoad:
|
GetCurrentWorldForLoad:
|
||||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BEQ .default
|
LDA.l FollowerTravelAllowed : CMP.b #$02 : BEQ .default
|
||||||
LDA.l FollowerIndicator : CMP.b #$04 : BNE .default
|
LDA.l FollowerIndicator : CMP.b #$04 : BNE .default
|
||||||
LDA.l OldManRetrievalWorld
|
LDA.l InvertedMode : BEQ +
|
||||||
RTL
|
LDA.b #$40
|
||||||
|
+ RTL
|
||||||
.default
|
.default
|
||||||
LDA.l CurrentWorld
|
LDA.l CurrentWorld
|
||||||
RTL
|
RTL
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ RTL
|
|||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
DialogGanon1:
|
DialogGanon1:
|
||||||
JSL CheckGanonVulnerability
|
LDA.b #$01 : JSL CheckConditionPass
|
||||||
REP #$20
|
REP #$20
|
||||||
LDA.w #$018C
|
LDA.w #$018C
|
||||||
BCC +
|
BCC +
|
||||||
@@ -284,7 +284,7 @@ RTL
|
|||||||
; s = silver arrow bow
|
; s = silver arrow bow
|
||||||
; p = 2nd progressive bow
|
; p = 2nd progressive bow
|
||||||
DialogGanon2:
|
DialogGanon2:
|
||||||
JSL CheckGanonVulnerability
|
LDA.b #$01 : JSL CheckConditionPass
|
||||||
|
|
||||||
REP #$20
|
REP #$20
|
||||||
BCS +
|
BCS +
|
||||||
@@ -412,8 +412,8 @@ RTL
|
|||||||
|
|
||||||
;---------------------------------------------------------------------------------------------------
|
;---------------------------------------------------------------------------------------------------
|
||||||
AgahnimAsksAboutPed:
|
AgahnimAsksAboutPed:
|
||||||
LDA.l GanonVulnerableMode
|
; seems light_speed option to change some aga text is unused for now
|
||||||
CMP.b #$06 : BNE .vanilla
|
BRA .vanilla
|
||||||
|
|
||||||
LDA.l OverworldEventDataWRAM+$80 ; check ped flag
|
LDA.l OverworldEventDataWRAM+$80 ; check ped flag
|
||||||
AND.b #$40
|
AND.b #$40
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ DRHUD_EnemyDropIndicator:
|
|||||||
REP #$30
|
REP #$30
|
||||||
LDA.w EnemyDropIndicator : STA.w HUDMultiIndicator
|
LDA.w EnemyDropIndicator : STA.w HUDMultiIndicator
|
||||||
SEP #$20
|
SEP #$20
|
||||||
LDA.w DungeonID : CMP.b #$1B : BCS DRHUD_Finished
|
LDA.w DungeonID : CMP.b #$1B : BCC + : JMP DRHUD_Finished : +
|
||||||
SEP #$10 : TAX : REP #$10
|
SEP #$10 : TAX : REP #$10
|
||||||
|
|
||||||
DRHUD_DrawCurrentDungeonIndicator: ; mX
|
DRHUD_DrawCurrentDungeonIndicator: ; mX
|
||||||
@@ -70,10 +70,16 @@ DRHUD_DrawCurrentDungeonIndicator: ; mX
|
|||||||
|
|
||||||
DRHUD_DrawKeyCounter:
|
DRHUD_DrawKeyCounter:
|
||||||
LDA.l DRFlags : AND.b #$04 : BEQ DRHUD_Finished
|
LDA.l DRFlags : AND.b #$04 : BEQ DRHUD_Finished
|
||||||
|
LDA.l CompassMode : BIT.b #$03 : BEQ DRHUD_Finished
|
||||||
REP #$20
|
REP #$20
|
||||||
|
BIT.w #$0002 : BNE .skip_map_check
|
||||||
LDA.w MapField : AND.l DungeonMask, X : BEQ DRHUD_Finished
|
LDA.w MapField : AND.l DungeonMask, X : BEQ DRHUD_Finished
|
||||||
TXA : LSR : TAX
|
.skip_map_check
|
||||||
LDA.l GenericKeys : AND.w #$00FF : BNE .total_only
|
TXA : LSR : BNE .dungeon_id
|
||||||
|
INC
|
||||||
|
.dungeon_id
|
||||||
|
TAX
|
||||||
|
LDA.l GenericKeys : LSR : BCS .total_only
|
||||||
LDA.w DungeonCollectedKeys, X : JSR ConvertToDisplay : STA.w HUDKeysObtained
|
LDA.w DungeonCollectedKeys, X : JSR ConvertToDisplay : STA.w HUDKeysObtained
|
||||||
LDA.w #!SlashTile : STA.w HUDKeysSlash
|
LDA.w #!SlashTile : STA.w HUDKeysSlash
|
||||||
.total_only
|
.total_only
|
||||||
@@ -152,7 +158,9 @@ DrHudDungeonItemsAdditions:
|
|||||||
jsr ConvertToDisplay2 : sta.w $1644, y
|
jsr ConvertToDisplay2 : sta.w $1644, y
|
||||||
+ iny #2 : lda.w #$24f5 : sta.w $1644, y
|
+ iny #2 : lda.w #$24f5 : sta.w $1644, y
|
||||||
phx : ldx.b Scrap00
|
phx : ldx.b Scrap00
|
||||||
lda.l MapField : and.l DungeonMask, x : beq + ; must have map
|
LDA.l CompassMode : BIT.w #$0002 : BNE .skip_map_check
|
||||||
|
LDA.l MapField : AND.l DungeonMask, x : BEQ .key_info_done ; must have map
|
||||||
|
.skip_map_check
|
||||||
plx : sep #$30 : lda.l ChestKeys, x : sta.b Scrap02
|
plx : sep #$30 : lda.l ChestKeys, x : sta.b Scrap02
|
||||||
lda.l GenericKeys : bne +++
|
lda.l GenericKeys : bne +++
|
||||||
lda.b Scrap02 : !SUB.l DungeonCollectedKeys, x : sta.b Scrap02
|
lda.b Scrap02 : !SUB.l DungeonCollectedKeys, x : sta.b Scrap02
|
||||||
@@ -160,7 +168,8 @@ DrHudDungeonItemsAdditions:
|
|||||||
rep #$30
|
rep #$30
|
||||||
jsr ConvertToDisplay2 : sta.w $1644, y ; small key totals
|
jsr ConvertToDisplay2 : sta.w $1644, y ; small key totals
|
||||||
bra .skipStack
|
bra .skipStack
|
||||||
+ plx
|
.key_info_done
|
||||||
|
plx
|
||||||
.skipStack iny #2
|
.skipStack iny #2
|
||||||
cpx.w #$000d : beq +
|
cpx.w #$000d : beq +
|
||||||
lda.w #$24f5 : sta.w $1644, y
|
lda.w #$24f5 : sta.w $1644, y
|
||||||
@@ -244,19 +253,37 @@ BkStatus:
|
|||||||
|
|
||||||
ConvertToDisplay:
|
ConvertToDisplay:
|
||||||
and.w #$00ff : cmp.w #$000a : !BLT +
|
and.w #$00ff : cmp.w #$000a : !BLT +
|
||||||
!ADD.w #$2553 : rts
|
!ADD.w #$2519 : rts
|
||||||
+ !ADD.w #$2490 : rts
|
+ !ADD.w #$2490 : rts
|
||||||
|
|
||||||
ConvertToDisplay2:
|
ConvertToDisplay2:
|
||||||
and.w #$00ff : beq ++
|
and.w #$00ff : beq ++
|
||||||
cmp.w #$000a : !BLT +
|
cmp.w #$000a : !BLT +
|
||||||
!ADD.w #$2553 : rts ; 2580 with 258A as "A" for non transparent digits
|
!ADD.w #$2517 : rts ; 2580 with 258A as "A" for non transparent digits
|
||||||
+ !ADD.w #$2816 : rts
|
+ !ADD.w #$2816 : rts
|
||||||
++ lda.w #$2827 : rts ; 0/O for 0 or placeholder digit ;2483
|
++ lda.w #$2827 : rts ; 0/O for 0 or placeholder digit ;2483
|
||||||
|
|
||||||
CountAbsorbedKeys:
|
CountAbsorbedKeys:
|
||||||
JML IncrementSmallKeysNoPrimary
|
JML IncrementSmallKeysNoPrimary
|
||||||
|
|
||||||
|
; This function apporach doesn't currently work
|
||||||
|
CountAbsorbedKeysViaCountAllKey:
|
||||||
|
PHA : PHX
|
||||||
|
LDA.l StandingItemsOn : BEQ .count_it
|
||||||
|
; LDA.w SpawnedItemKeyCounted : BNE .done ; this was added because pot keys were being double counted when they weren't shuffled
|
||||||
|
CPY.b #$24 : BEQ .count_it ; small key for this dungeon
|
||||||
|
LDA.w DungeonID : LSR : TAX
|
||||||
|
TYA : CMP.l KeyTable, X : BNE .done
|
||||||
|
.count_it
|
||||||
|
STY.b Scrap02 : LDY.b #$24 ; for non-24 items (w/o standing_items a small key is just $C), fake it
|
||||||
|
LDX.b #$84 ; pretend this isn't a smallkey, but an absorbed object (small heart)
|
||||||
|
REP #$10 : JSL CountAllKey : SEP #$10
|
||||||
|
LDY.b Scrap02
|
||||||
|
.done
|
||||||
|
; STZ.w SpawnedItemKeyCounted ; reset to zero for next time
|
||||||
|
PLX : PLA
|
||||||
|
JML IncrementSmallKeysNoPrimary
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
; 8-bit registers
|
; 8-bit registers
|
||||||
; in: A(b) - Byte to Convert
|
; in: A(b) - Byte to Convert
|
||||||
|
|||||||
@@ -3,6 +3,16 @@
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
SpawnDungeonPrize:
|
SpawnDungeonPrize:
|
||||||
PHX : PHB
|
PHX : PHB
|
||||||
|
|
||||||
|
PHA
|
||||||
|
; Don't spawn prize in Cave state, Hyrule Castle, Escape, Castle Tower, or Ganon's Tower
|
||||||
|
LDA.w DungeonID : BMI .skip_prize_drop ; Cave state
|
||||||
|
CMP.b #$00 : BEQ .skip_prize_drop ; Escape
|
||||||
|
CMP.b #$02 : BEQ .skip_prize_drop ; Hyrule Castle
|
||||||
|
CMP.b #$1A : BEQ .skip_prize_drop ; Ganon's Tower
|
||||||
|
CMP.b #$08 : BEQ .skip_prize_drop ; Agahnim's Tower (Castle Tower)
|
||||||
|
PLA
|
||||||
|
|
||||||
STA.w ItemReceiptID
|
STA.w ItemReceiptID
|
||||||
TAX
|
TAX
|
||||||
LDA.b $06,S : STA.b ScrapBuffer72 ; Store current RoomTag index
|
LDA.b $06,S : STA.b ScrapBuffer72 ; Store current RoomTag index
|
||||||
@@ -18,6 +28,10 @@ SpawnDungeonPrize:
|
|||||||
PLB : PLX
|
PLB : PLX
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
.skip_prize_drop:
|
||||||
|
PLA : PLB : PLX
|
||||||
|
RTL
|
||||||
|
|
||||||
AddDungeonPrizeAncilla:
|
AddDungeonPrizeAncilla:
|
||||||
LDY.w ItemReceiptID
|
LDY.w ItemReceiptID
|
||||||
STZ.w AncillaVelocityY,X
|
STZ.w AncillaVelocityY,X
|
||||||
|
|||||||
52
elder.asm
52
elder.asm
@@ -39,32 +39,30 @@ RTL
|
|||||||
|
|
||||||
Elder_Code:
|
Elder_Code:
|
||||||
{
|
{
|
||||||
REP #$20
|
TXY : LDX.b #$06
|
||||||
LDA.l GoalItemRequirement : BEQ .despawn
|
REP #$30
|
||||||
LDA.l GanonVulnerableMode : AND.w #$00FF : CMP.w #$0005 : BEQ .despawn
|
LDA.l GoalConditionTable, X
|
||||||
LDA.l TurnInGoalItems : AND.w #$00FF : BNE +
|
TAX : LDA.l $B00000, X
|
||||||
|
SEP #$30
|
||||||
|
TYX
|
||||||
|
CMP.b #$00 : BEQ .despawn ; no goal, despawn
|
||||||
|
LDA.l TurnInGoalItems : BNE +
|
||||||
.despawn
|
.despawn
|
||||||
SEP #$20
|
|
||||||
STZ.w SpriteAITable, X ; despawn self
|
STZ.w SpriteAITable, X ; despawn self
|
||||||
RTS
|
RTS
|
||||||
+
|
+
|
||||||
SEP #$20
|
|
||||||
LDA.b GameSubMode
|
LDA.b GameSubMode
|
||||||
BNE .done
|
BNE .done
|
||||||
LDA.b #$96
|
LDA.b #$96
|
||||||
LDY.b #$01
|
LDY.b #$01
|
||||||
|
|
||||||
JSL Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage : BCC .dont_show
|
JSL Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage : BCC .dont_show
|
||||||
REP #$20
|
LDA.b #$03 : JSL CheckConditionPass : BCC +
|
||||||
LDA.l GoalCounter
|
|
||||||
CMP.l GoalItemRequirement : !BLT +
|
|
||||||
SEP #$20
|
|
||||||
JSL ActivateTriforceCutscene
|
JSL ActivateTriforceCutscene
|
||||||
+
|
+
|
||||||
.dont_show
|
.dont_show
|
||||||
|
|
||||||
.done
|
.done
|
||||||
SEP #$20
|
|
||||||
LDA.b FrameCounter : LSR #5 : AND.b #$01 : STA.w SpriteGFXControl, X
|
LDA.b FrameCounter : LSR #5 : AND.b #$01 : STA.w SpriteGFXControl, X
|
||||||
RTS
|
RTS
|
||||||
}
|
}
|
||||||
@@ -144,19 +142,35 @@ MasterSword_CheckIfPulled:
|
|||||||
|
|
||||||
MasterSword_ConditionalActivateCutscene:
|
MasterSword_ConditionalActivateCutscene:
|
||||||
LDA.w SpriteMovement,X : BNE .specialCutscene
|
LDA.w SpriteMovement,X : BNE .specialCutscene
|
||||||
|
PHX
|
||||||
|
REP #$30
|
||||||
|
LDA.w SprRedrawFlag, X : BNE .doNormalPed
|
||||||
|
INC.w SprRedrawFlag, X
|
||||||
|
LDA.l PedPullGfx : BEQ .doNormalPed
|
||||||
|
LDX.w ItemStackPtr : STA.l ItemGFXStack,X
|
||||||
|
LDA.w #$BCE0>>1 : STA.l ItemTargetStack,X
|
||||||
|
TXA : INC #2 : STA.w ItemStackPtr
|
||||||
|
.doNormalPed
|
||||||
|
SEP #$30
|
||||||
|
PLX
|
||||||
JML Sprite_CheckDamageToPlayerSameLayerLong ; what we wrote over
|
JML Sprite_CheckDamageToPlayerSameLayerLong ; what we wrote over
|
||||||
.specialCutscene
|
.specialCutscene
|
||||||
LDA.b #$02 : STA.w ItemReceiptPose ; Link's 2-hands-up pose
|
LDA.b #$02 : STA.w ItemReceiptPose ; Link's 2-hands-up pose
|
||||||
STA.b LinkLayer ; draw Link on top
|
STA.b LinkLayer ; draw Link on top
|
||||||
; draw Triforce piece in VRAM
|
; draw Triforce piece in VRAM
|
||||||
|
LDA.w SprRedrawFlag, X : BNE .skipTransfer
|
||||||
|
INC.w SprRedrawFlag, X
|
||||||
PHX
|
PHX
|
||||||
REP #$30
|
REP #$30
|
||||||
LDX.w #$006A<<1
|
LDA.l MurahdahlaGfx : BNE .submitRequest
|
||||||
LDA.l StandingItemGraphicsOffsets,X : LDX.w ItemStackPtr : STA.l ItemGFXStack,X
|
LDX.w #$006A<<1 : LDA.l StandingItemGraphicsOffsets,X
|
||||||
|
.submitRequest
|
||||||
|
LDX.w ItemStackPtr : STA.l ItemGFXStack,X
|
||||||
LDA.w #$9CE0>>1 : STA.l ItemTargetStack,X
|
LDA.w #$9CE0>>1 : STA.l ItemTargetStack,X
|
||||||
TXA : INC #2 : STA.w ItemStackPtr
|
TXA : INC #2 : STA.w ItemStackPtr
|
||||||
SEP #$30
|
SEP #$30
|
||||||
PLX
|
PLX
|
||||||
|
.skipTransfer
|
||||||
PLA : PLA : PLA : JML MasterSword_InPedestal_DoCutscene ; do cutscene
|
PLA : PLA : PLA : JML MasterSword_InPedestal_DoCutscene ; do cutscene
|
||||||
|
|
||||||
MasterSword_ConditionalGrabPose:
|
MasterSword_ConditionalGrabPose:
|
||||||
@@ -173,10 +187,20 @@ RTL
|
|||||||
MasterSword_SpawnPendantProp_ChangePalette:
|
MasterSword_SpawnPendantProp_ChangePalette:
|
||||||
STA.w SpriteVelocityY,Y : PLX ; what we wrote over
|
STA.w SpriteVelocityY,Y : PLX ; what we wrote over
|
||||||
LDA.w SpriteMovement,X : BNE .specialCutscene
|
LDA.w SpriteMovement,X : BNE .specialCutscene
|
||||||
|
LDA.l PedPullGfx : BNE .customPedGfx
|
||||||
|
LDA.l PedPullGfx+1 : BNE .customPedGfx
|
||||||
BRA .done
|
BRA .done
|
||||||
|
.customPedGfx
|
||||||
|
LDA.l PedPullPalette : ASL : INC : BRA .setPalette
|
||||||
.specialCutscene
|
.specialCutscene
|
||||||
LDA.b #$08 : STA.w SpriteOAMProp,Y ; change palette
|
|
||||||
LDA.b #$02 : STA.w SpriteLayer,Y ; change layer
|
LDA.b #$02 : STA.w SpriteLayer,Y ; change layer
|
||||||
|
LDA.l MurahdahlaGfx : BNE .customGfx
|
||||||
|
LDA.l MurahdahlaGfx+1 : BNE .customGfx
|
||||||
|
LDA.b #$08 : BRA .setPalette
|
||||||
|
.customGfx
|
||||||
|
LDA.l MurahdahlaPalette : ASL
|
||||||
|
.setPalette
|
||||||
|
STA.w SpriteOAMProp,Y ; change palette
|
||||||
.done
|
.done
|
||||||
JML MasterSword_SpawnPendantProp_ChangePalette_return
|
JML MasterSword_SpawnPendantProp_ChangePalette_return
|
||||||
|
|
||||||
|
|||||||
@@ -15,3 +15,12 @@ incsrc hooks/damage_hooks.asm
|
|||||||
incsrc hooks/overworld_sprite_hooks.asm
|
incsrc hooks/overworld_sprite_hooks.asm
|
||||||
|
|
||||||
incsrc hooks/underworld_sprite_hooks.asm
|
incsrc hooks/underworld_sprite_hooks.asm
|
||||||
|
|
||||||
|
org $85B8BA
|
||||||
|
JSL GeldmanDrawOverride
|
||||||
|
|
||||||
|
org $9EAAAC
|
||||||
|
JSL StalfosKnightDrawOverride
|
||||||
|
|
||||||
|
org $9EB209
|
||||||
|
JSL BlobDrawOverride
|
||||||
@@ -2,7 +2,11 @@
|
|||||||
; New bush mob randomization
|
; New bush mob randomization
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
org $868279
|
org $868279
|
||||||
NOP #$0A
|
BRA +
|
||||||
|
MaybeSkipTerrainDebris:
|
||||||
|
JSL MaybeSkipTerrainDebris_long : RTS ; sticking this here, no other free space in bank 06
|
||||||
|
NOP #3
|
||||||
|
+
|
||||||
JSL sprite_bush_spawn
|
JSL sprite_bush_spawn
|
||||||
NOP ; we keep the branch
|
NOP ; we keep the branch
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -18,10 +18,3 @@ org $9DD88E
|
|||||||
;0EDBB2 0EDBB3
|
;0EDBB2 0EDBB3
|
||||||
; LDX.b #$01
|
; LDX.b #$01
|
||||||
;}
|
;}
|
||||||
|
|
||||||
org $85B8BA ; geldman
|
|
||||||
JSL Sprite_MaybeForceDrawShadow
|
|
||||||
org $9EAAAC ; stalfos knight
|
|
||||||
JSL Sprite_MaybeForceDrawShadow
|
|
||||||
org $9EB209 ; blob
|
|
||||||
JSL Sprite_MaybeForceDrawShadow
|
|
||||||
|
|||||||
@@ -9,3 +9,39 @@ GetSpriteSlot16Bit:
|
|||||||
ASL A
|
ASL A
|
||||||
TAY
|
TAY
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
GeldmanDrawOverride:
|
||||||
|
PLA : PLA : PLA ; fix the call stack
|
||||||
|
LDA.l DRFlags+1 : AND.b #$08 : BEQ .vanilla
|
||||||
|
|
||||||
|
LDA.b #$01
|
||||||
|
STA.w $0DC0,X
|
||||||
|
JML Sprite_4C_Geldman_do_indeed_draw
|
||||||
|
|
||||||
|
.vanilla
|
||||||
|
JSL Sprite_PrepOAMCoordLong
|
||||||
|
JML Sprite_4C_Geldman_continue
|
||||||
|
|
||||||
|
StalfosKnightDrawOverride:
|
||||||
|
LDA.l DRFlags+1 : AND.b #$08 : BEQ .vanilla
|
||||||
|
|
||||||
|
JSL Sprite_PrepOAMCoordLong
|
||||||
|
LDA.b #$12
|
||||||
|
JML Sprite_DrawShadowLong
|
||||||
|
|
||||||
|
.vanilla
|
||||||
|
JSL Sprite_PrepOAMCoordLong
|
||||||
|
RTL
|
||||||
|
|
||||||
|
BlobDrawOverride:
|
||||||
|
PLA : PLA : PLA ; fix the call stack
|
||||||
|
LDA.l DRFlags+1 : AND.b #$08 : BEQ .vanilla
|
||||||
|
|
||||||
|
LDA.b #$05
|
||||||
|
STA.w $0DC0,X
|
||||||
|
|
||||||
|
JML SpriteDraw_Blob_head_popping_out
|
||||||
|
|
||||||
|
.vanilla
|
||||||
|
JSL Sprite_PrepOAMCoordLong
|
||||||
|
JML SpriteDraw_Blob_bad_gfx
|
||||||
@@ -25,15 +25,3 @@ NewFireBarDamage:
|
|||||||
RTL
|
RTL
|
||||||
.NotSameLayer
|
.NotSameLayer
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
|
||||||
Sprite_MaybeForceDrawShadow:
|
|
||||||
JSL Sprite_PrepOAMCoordLong
|
|
||||||
LDA.l DRFlags+1 : AND.b #$08 : BEQ .return
|
|
||||||
LDA.b GameMode : CMP.b #$07 : BNE .return
|
|
||||||
JSL Sprite_DrawShadowLong
|
|
||||||
; LDA.w SpriteTypeTable,X : CMP.b #$91 : BNE .return ; stalfos knight
|
|
||||||
; ; move shadow down by 8 pixels
|
|
||||||
; + LDA.w SpriteOAMProperties,X : AND.b #$1F : ASL #2 : TAY : INY ; get OAM offset
|
|
||||||
; LDA.b (OAMPtr),Y : CLC : ADC.b #$08 : STA.b (OAMPtr),Y
|
|
||||||
.return
|
|
||||||
RTL
|
|
||||||
|
|||||||
@@ -107,8 +107,8 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
OnAga1Defeated:
|
OnAga1Defeated:
|
||||||
STA.l ProgressIndicator ; vanilla game state stuff we overwrote
|
STA.l ProgressIndicator ; vanilla game state stuff we overwrote
|
||||||
LDA.l GanonVulnerableMode
|
; seems light_speed option to auto triforce room is unused for now
|
||||||
CMP.b #$06 : BNE +
|
BRA +
|
||||||
.light_speed
|
.light_speed
|
||||||
REP #$20
|
REP #$20
|
||||||
LDA.w #$0019 : STA.b GameMode
|
LDA.w #$0019 : STA.b GameMode
|
||||||
|
|||||||
25
follower.asm
25
follower.asm
@@ -79,6 +79,8 @@ org $9EE495
|
|||||||
JSL Kiki_FollowCheck : BRA + : NOP #12 : +
|
JSL Kiki_FollowCheck : BRA + : NOP #12 : +
|
||||||
org $9EE4AF
|
org $9EE4AF
|
||||||
JSL Kiki_BecomeFollower : NOP #2
|
JSL Kiki_BecomeFollower : NOP #2
|
||||||
|
org $9EE4F7
|
||||||
|
JSL Kiki_FixTeleportOnExit
|
||||||
org $89A1B2
|
org $89A1B2
|
||||||
JSL Kiki_DontScareTheMonke : NOP #3
|
JSL Kiki_DontScareTheMonke : NOP #3
|
||||||
|
|
||||||
@@ -160,18 +162,23 @@ MaybeSetZeldaCheckpoint:
|
|||||||
AND.w #$7FFF : TAX ; what we wrote over
|
AND.w #$7FFF : TAX ; what we wrote over
|
||||||
SEP #$20
|
SEP #$20
|
||||||
LDA.l ProgressFlags : AND.b #$04 : BNE .return ; zelda rescued
|
LDA.l ProgressFlags : AND.b #$04 : BNE .return ; zelda rescued
|
||||||
LDA.l StartingEntrance : CMP.b #$04 : BEQ .return ; throne room checkpoint set
|
LDA.l StartingEntrance : CMP.b #$02 : BEQ .return ; cell checkpoint set
|
||||||
|
CMP.b #$04 : BEQ .return ; throne room checkpoint set
|
||||||
LDA.l FollowerIndicator : CMP.b #$01 : BNE .return ; zelda following
|
LDA.l FollowerIndicator : CMP.b #$01 : BNE .return ; zelda following
|
||||||
LDA.b RoomIndex : CMP.b #$80 : BNE + ;zelda cell
|
LDA.b RoomIndex : CMP.b #$80 : BNE + ;zelda cell
|
||||||
LDA.l Follower_Zelda : CMP.b #$01 : BNE .return
|
LDA.l Follower_Zelda : CMP.b #$01 : BNE .return
|
||||||
JSL Dungeon_SaveRoomQuadrantData
|
|
||||||
BRA .set_checkpoint
|
BRA .set_checkpoint
|
||||||
+ CMP.b #$45 : BNE .return ; maiden cell
|
+ CMP.b #$45 : BNE .return ; maiden cell
|
||||||
CPX.w #$0964 : BNE .return ; top big lock
|
CPX.w #$0964 : BNE .return ; top big lock
|
||||||
LDA.l Follower_Maiden : CMP.b #$01 : BNE .return
|
LDA.l Follower_Maiden : CMP.b #$01 : BNE .return
|
||||||
.set_checkpoint
|
.set_checkpoint
|
||||||
LDA.b #$02 : STA.l StartingEntrance
|
LDA.b #$02 : STA.l StartingEntrance
|
||||||
|
PHX
|
||||||
|
SEP #$10
|
||||||
JSL SaveDeathCount
|
JSL SaveDeathCount
|
||||||
|
JSL Dungeon_SaveRoomQuadrantData
|
||||||
|
REP #$10
|
||||||
|
PLX
|
||||||
.return
|
.return
|
||||||
REP #$30
|
REP #$30
|
||||||
RTL
|
RTL
|
||||||
@@ -383,6 +390,9 @@ SetAndLoadFollower:
|
|||||||
JSL DetermineFollower_skip_stored : CMP.b #$01 : BNE +
|
JSL DetermineFollower_skip_stored : CMP.b #$01 : BNE +
|
||||||
LDA.b #$02 : STA.l StartingEntrance
|
LDA.b #$02 : STA.l StartingEntrance
|
||||||
JSL SaveDeathCount
|
JSL SaveDeathCount
|
||||||
|
PHX
|
||||||
|
JSL Dungeon_SaveRoomQuadrantData
|
||||||
|
PLX
|
||||||
+ CMP.b #$09 : BNE +
|
+ CMP.b #$09 : BNE +
|
||||||
LDA.b #$40 : STA.w $02CD : STZ.w $02CE ; locksmith timed message
|
LDA.b #$40 : STA.w $02CD : STZ.w $02CE ; locksmith timed message
|
||||||
+
|
+
|
||||||
@@ -826,6 +836,14 @@ Kiki_BecomeFollower:
|
|||||||
LDA.b #$0A : STA.l FollowerIndicator
|
LDA.b #$0A : STA.l FollowerIndicator
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
Kiki_FixTeleportOnExit:
|
||||||
|
REP #$30
|
||||||
|
LDA.b LinkPosX : STA.w LinkPosXCache
|
||||||
|
LDA.b LinkPosY : STA.w LinkPosYCache
|
||||||
|
SEP #$30
|
||||||
|
LDA.b #$19 : LDY.b #$01 ; what we wrote over
|
||||||
|
RTL
|
||||||
|
|
||||||
; on return it checks BEQ and if non-zero, kiki get spook
|
; on return it checks BEQ and if non-zero, kiki get spook
|
||||||
Kiki_DontScareTheMonke:
|
Kiki_DontScareTheMonke:
|
||||||
LDA.b LinkJumping : BEQ .return
|
LDA.b LinkJumping : BEQ .return
|
||||||
@@ -914,8 +932,9 @@ Locksmith_BecomeFollower:
|
|||||||
Locksmith_RespondToAnswer_PostItem:
|
Locksmith_RespondToAnswer_PostItem:
|
||||||
STA.l FollowerIndicator ; what we wrote over
|
STA.l FollowerIndicator ; what we wrote over
|
||||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .no_despawn
|
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .no_despawn
|
||||||
|
LDA.w SpriteAux, X : CMP.b #$0C : BEQ .despawn
|
||||||
|
CMP.b #$00 : BNE .no_despawn
|
||||||
LDA.l Follower_Locksmith : CMP.b #$0C : BEQ .despawn
|
LDA.l Follower_Locksmith : CMP.b #$0C : BEQ .despawn
|
||||||
LDA.w SpriteAux, X : BNE .no_despawn
|
|
||||||
JSL DetermineFollowerSpawn_include_stored : BCC .no_despawn
|
JSL DetermineFollowerSpawn_include_stored : BCC .no_despawn
|
||||||
.despawn
|
.despawn
|
||||||
STZ.w SpriteAITable, X
|
STZ.w SpriteAITable, X
|
||||||
|
|||||||
411
goalitem.asm
411
goalitem.asm
@@ -1,6 +1,6 @@
|
|||||||
GoalItemGanonCheck:
|
GoalItemGanonCheck:
|
||||||
LDA.w SpriteTypeTable, X : CMP.b #$D6 : BNE .success ; skip if not ganon
|
LDA.w SpriteTypeTable, X : CMP.b #$D6 : BNE .success ; skip if not ganon
|
||||||
JSL CheckGanonVulnerability
|
LDA.b #$01 : JSL CheckConditionPass
|
||||||
BCS .success
|
BCS .success
|
||||||
|
|
||||||
.fail
|
.fail
|
||||||
@@ -11,108 +11,167 @@ RTL
|
|||||||
LDA.b OAMOffsetY : CMP.b #$80 ; thing we wrote over
|
LDA.b OAMOffsetY : CMP.b #$80 ; thing we wrote over
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
;Carry clear = ganon invincible
|
; Input A = Type of condition check
|
||||||
;Carry set = ganon vulnerable
|
; Carry clear = failed check
|
||||||
CheckGanonVulnerability:
|
; Carry set = successful check
|
||||||
PHX
|
CheckConditionPass:
|
||||||
LDA.l GanonVulnerableMode
|
PHX : PHY
|
||||||
ASL
|
PHB
|
||||||
TAX
|
LDY.b #GoalConditionTable>>16 : PHY : PLB : STY.b Scrap02
|
||||||
|
REP #$20
|
||||||
|
ASL : TAY
|
||||||
|
LDA.w GoalConditionTable, Y : STA.b Scrap00
|
||||||
|
PHK : PLB
|
||||||
|
SEP #$20
|
||||||
|
LDY.b #$00
|
||||||
|
- LDA.b [Scrap00], Y : CMP.b #$FF : BEQ .exit
|
||||||
|
INY : ROL : TAX
|
||||||
|
JSR (.conditions, X) : BCC .exit : BRA -
|
||||||
|
|
||||||
; Carry
|
.exit
|
||||||
; 0 - invulnerable
|
PLB : PLY : PLX
|
||||||
; 1 - vulnerable
|
|
||||||
JSR (.goals, X)
|
|
||||||
|
|
||||||
PLX
|
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
; Y = index after condition code
|
||||||
.goals
|
; Carry = Set if using default target value
|
||||||
dw .vulnerable
|
.conditions
|
||||||
dw .invulnerable
|
dw .always_fail
|
||||||
dw .all_dungeons
|
dw .pendants
|
||||||
dw .crystals_and_aga
|
|
||||||
dw .crystals
|
dw .crystals
|
||||||
|
dw .pendant_bosses
|
||||||
|
dw .crystal_bosses
|
||||||
|
dw .bosses
|
||||||
|
dw .agahnim_defeated
|
||||||
|
dw .agahnim2_defeated
|
||||||
dw .goal_item
|
dw .goal_item
|
||||||
dw .light_speed
|
dw .collection_rate
|
||||||
dw .crystals_and_bosses
|
dw .custom_goal
|
||||||
dw .bosses_only
|
dw .bingo
|
||||||
dw .all_dungeons_no_agahnim
|
dw .success
|
||||||
dw .all_items
|
dw .success
|
||||||
dw .completionist
|
dw .success
|
||||||
|
dw .success
|
||||||
|
|
||||||
; 00 = always vulnerable
|
.agahnim2_defeated
|
||||||
.vulnerable
|
LDA.l RoomDataWRAM[$0D].high : AND.b #$08 : BEQ .fail
|
||||||
|
.bingo ; not implemented yet
|
||||||
.success
|
.success
|
||||||
SEC
|
SEC : RTS
|
||||||
RTS
|
.always_fail
|
||||||
|
|
||||||
; 01 = always invulnerable
|
|
||||||
.invulnerable
|
|
||||||
.fail
|
.fail
|
||||||
CLC
|
CLC : RTS
|
||||||
RTS
|
.pendants
|
||||||
|
PHP
|
||||||
; 02 = All dungeons
|
LDA.l PendantCounter : PLP : BCC +
|
||||||
.all_dungeons
|
CMP.b #$03 : RTS
|
||||||
LDA.l ProgressIndicator : CMP.b #$03 : BCC .fail ; require post-aga world state
|
|
||||||
|
|
||||||
; 09 = All dungeons except agahnim
|
|
||||||
.all_dungeons_no_agahnim
|
|
||||||
LDA.l PendantsField : AND.b #$07 : CMP.b #$07 : BNE .fail ; require all pendants
|
|
||||||
LDA.l CrystalsField : AND.b #$7F : CMP.b #$7F : BNE .fail ; require all crystals
|
|
||||||
LDA.l RoomDataWRAM[$0D].high : AND.b #$08 : BEQ .fail ; require aga2 defeated (pyramid hole open)
|
|
||||||
BRA .success
|
|
||||||
|
|
||||||
; 03 = crystals and aga 2
|
|
||||||
.crystals_and_aga
|
|
||||||
LDA.l RoomDataWRAM[$0D].high : AND.b #$08 : BEQ .fail ; check aga2 first then bleed in
|
|
||||||
|
|
||||||
; 04 = crystals only
|
|
||||||
.crystals
|
.crystals
|
||||||
JSL CheckEnoughCrystalsForGanon
|
PHP
|
||||||
RTS
|
LDA.l CrystalCounter : PLP : BCC +
|
||||||
|
CMP.b #$07 : RTS
|
||||||
; 05 = require goal item
|
.pendant_bosses
|
||||||
|
PHP
|
||||||
|
LDA.b #$02
|
||||||
|
JSR CheckForBossesDefeated : PLP : BCC +
|
||||||
|
CMP.b #$03 : RTS
|
||||||
|
.crystal_bosses
|
||||||
|
PHP
|
||||||
|
LDA.b #$01
|
||||||
|
JSR CheckForBossesDefeated : PLP : BCC +
|
||||||
|
CMP.b #$07 : RTS
|
||||||
|
.bosses
|
||||||
|
PHP
|
||||||
|
LDA.b #$00
|
||||||
|
JSR CheckForBossesDefeated : PLP : BCC +
|
||||||
|
CMP.b #$10 : RTS
|
||||||
|
+ CMP.b [Scrap00], Y : INY : RTS
|
||||||
|
.agahnim_defeated
|
||||||
|
LDA.l ProgressIndicator : CMP.b #$03 : RTS
|
||||||
.goal_item
|
.goal_item
|
||||||
REP #$20
|
REP #$20
|
||||||
LDA.l GoalCounter : CMP.l GoalItemRequirement
|
LDA.l GoalCounter : BCC +
|
||||||
|
CMP.l GoalItemRequirement : BRA ++
|
||||||
|
.collection_rate
|
||||||
|
REP #$20
|
||||||
|
LDA.l TotalItemCounter : BCC +
|
||||||
|
CMP.l TotalItemCount : BRA ++
|
||||||
|
+ CMP.b [Scrap00], Y : INY : INY : ++
|
||||||
SEP #$20
|
SEP #$20
|
||||||
RTS
|
RTS
|
||||||
|
.custom_goal
|
||||||
|
LDA.b [Scrap00], Y : INY ; options
|
||||||
|
PHA : AND.b #$07 : ASL : TAX : PLA
|
||||||
|
;JMP CheckConditionPassCustom
|
||||||
|
; flows into next function, do not insert code after without uncommenting above
|
||||||
|
|
||||||
; 06 = light speed
|
; --------------------------------------------------------------------------------
|
||||||
.light_speed
|
; Input A = Options value, see GoalConditionTable for format
|
||||||
BRA .fail
|
; Input X = Condition check type index
|
||||||
|
; Input Y = Index after Options byte
|
||||||
; 07 = Crystals and bosses
|
CheckConditionPassCustom:
|
||||||
.crystals_and_bosses
|
PHX : PHA : BIT.b #$08 : PHP
|
||||||
JSL CheckEnoughCrystalsForGanon ; check crystals first then bleed in to next
|
REP #$30
|
||||||
BCC .fail
|
LDA.b [Scrap00], Y : INY : INY ; address
|
||||||
|
PLP : REP #$30 : BEQ .byte
|
||||||
; 08 = Crystal bosses but no crystals
|
.word
|
||||||
.bosses_only
|
TAX
|
||||||
JMP CheckForCrystalBossesDefeated
|
|
||||||
|
|
||||||
; 09 = 100% item collection rate
|
|
||||||
.all_items
|
|
||||||
REP #$20
|
|
||||||
LDA.l TotalItemCounter : CMP.l TotalItemCount
|
|
||||||
SEP #$20
|
SEP #$20
|
||||||
|
PLA
|
||||||
|
AND.b #$10
|
||||||
|
REP #$20
|
||||||
|
BNE +
|
||||||
|
LDA.l $7E0000, X : BRA ++
|
||||||
|
+
|
||||||
|
LDA.l $7F0000, X : ++
|
||||||
|
SEP #$10
|
||||||
|
PLX
|
||||||
|
REP #$10
|
||||||
|
JSR (.comparisons, X)
|
||||||
|
INY
|
||||||
|
SEP #$30
|
||||||
RTS
|
RTS
|
||||||
|
.byte
|
||||||
; 0A = 100% item collection rate and all dungeons
|
TAX
|
||||||
.completionist
|
|
||||||
REP #$20
|
|
||||||
LDA.l TotalItemCounter : CMP.l TotalItemCount
|
|
||||||
SEP #$20
|
SEP #$20
|
||||||
BCC .fail
|
PLA
|
||||||
BRA .all_dungeons
|
AND.b #$10 : BNE +
|
||||||
|
LDA.l $7E0000, X : BRA ++
|
||||||
|
+
|
||||||
|
LDA.l $7F0000, X : ++
|
||||||
|
SEP #$10
|
||||||
|
PLX
|
||||||
|
JMP (.comparisons, X)
|
||||||
|
|
||||||
|
.comparisons
|
||||||
|
dw .minimum
|
||||||
|
dw .exact
|
||||||
|
dw .bitfield_nonzero
|
||||||
|
dw .bitfield_match
|
||||||
|
dw .count_bits
|
||||||
|
dw .fail
|
||||||
|
dw .fail
|
||||||
|
dw .fail
|
||||||
|
|
||||||
|
.pass
|
||||||
|
INY : SEC : RTS
|
||||||
|
.count_bits
|
||||||
|
JSL CountBits
|
||||||
|
.minimum
|
||||||
|
CMP.b [Scrap00], Y : INY
|
||||||
|
RTS
|
||||||
|
.bitfield_match
|
||||||
|
AND.b [Scrap00], Y
|
||||||
|
.exact
|
||||||
|
CMP.b [Scrap00], Y : BEQ .pass
|
||||||
|
INY : CLC : RTS
|
||||||
|
.bitfield_nonzero
|
||||||
|
AND.b [Scrap00], Y : BNE .pass
|
||||||
|
.fail
|
||||||
|
INY : CLC : RTS
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
GTCutscene_TransferGfx:
|
GTCutscene_TransferGfx:
|
||||||
PHA
|
PHA
|
||||||
REP #$20
|
REP #$20
|
||||||
|
STZ.w DuckPose
|
||||||
LDA.l GanonsTowerOpenGfx : BEQ .original_crystal
|
LDA.l GanonsTowerOpenGfx : BEQ .original_crystal
|
||||||
PHX
|
PHX
|
||||||
LDX.w ItemStackPtr : STA.l ItemGFXStack,X
|
LDX.w ItemStackPtr : STA.l ItemGFXStack,X
|
||||||
@@ -201,48 +260,94 @@ GTCutscene_ActivateSparkle_SelectCrystal:
|
|||||||
PLY
|
PLY
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
; prioritizes: number of gfx used > sum of targets > number of goals
|
||||||
|
; Scrap00 stores number of goals
|
||||||
|
; Y sums all goal target values
|
||||||
GTCutscene_NumberOfCrystals:
|
GTCutscene_NumberOfCrystals:
|
||||||
|
PHX : PHY : PHP
|
||||||
REP #$20
|
REP #$20
|
||||||
LDA.l GanonsTowerOpenAddress : CMP.w #CrystalCounter : BEQ +
|
LDA.l GanonsTowerOpenGfx+2 : BEQ .not_multiple_gfx
|
||||||
LDA.w #$0001 : BRA .done
|
LDX.b #$04
|
||||||
+ LDA.l GanonsTowerOpenTarget
|
- LDA.l GanonsTowerOpenGfx, X : BEQ +
|
||||||
|
INX : INX : CPX.b #$0E : BCC -
|
||||||
|
+
|
||||||
|
TXA : LSR
|
||||||
|
JMP .done
|
||||||
|
.not_multiple_gfx
|
||||||
|
LDX.b #$00 : LDA.l GoalConditionTable, X
|
||||||
|
TXY : STY.b Scrap00
|
||||||
|
REP #$10
|
||||||
|
SEP #$20
|
||||||
|
TAX
|
||||||
|
.next
|
||||||
|
LDA.l $B00000, X : CMP.b #$FF : BNE + : JMP .use_y : +
|
||||||
|
INC.b Scrap00
|
||||||
|
ROL : PHP : CMP.b #$10 : BCS .not_8bit_compare
|
||||||
|
CMP.b #$0C : BEQ .agas_goal
|
||||||
|
CMP.b #$0E : BEQ .agas_goal
|
||||||
|
; uses 8-bit targets
|
||||||
|
PLP : BCC .use_8bit_target
|
||||||
|
CMP.b #$04 : BEQ .crystal_goal ; crystal goal
|
||||||
|
CMP.b #$08 : BEQ .crystal_goal ; crystal bosses goal
|
||||||
|
CMP.b #$02 : BEQ .pendant_goal ; pendant goal
|
||||||
|
CMP.b #$06 : BEQ .pendant_goal ; pendant bosses goal
|
||||||
|
BRA .bosses_goal
|
||||||
|
.crystal_goal
|
||||||
|
LDA.b #$07 : INX : BRA .add_to_y
|
||||||
|
.pendant_goal
|
||||||
|
LDA.b #$03 : INX : BRA .add_to_y
|
||||||
|
.bosses_goal
|
||||||
|
INY : INX : BRA .next ; just increment Y by 1 since default of 10 is already more than max 7
|
||||||
|
.agas_goal
|
||||||
|
PLP : INX : BRA .next
|
||||||
|
.use_8bit_target
|
||||||
|
INX : LDA.l $B00000, X : INX
|
||||||
|
.add_to_y
|
||||||
|
PHY : CLC : ADC.b 1,S : PLY : TAY : BRA .next
|
||||||
|
.not_8bit_compare
|
||||||
|
CMP.b #$14 : BEQ .custom_goal : BCS .unknown
|
||||||
|
; triforce hunt/collection rate - uses 16-bit targets
|
||||||
|
PLP : INX : BCC +
|
||||||
|
LDA.l $B00000, X : INX : INX : BRA .add_to_y
|
||||||
|
+ INY : BRA .next
|
||||||
|
.custom_goal
|
||||||
|
PLP
|
||||||
|
INX : LDA.l $B00000, X : BIT.b #$08 : PHP
|
||||||
|
INX : INX : INX : AND.b #$03 : BEQ .use_custom_target
|
||||||
|
; comparison method doesn't use a quantity, increment Y by 1
|
||||||
|
INY : INX : PLP : BEQ +
|
||||||
|
INX
|
||||||
|
+
|
||||||
|
BRA .next
|
||||||
|
.use_custom_target
|
||||||
|
PLP : BEQ ..8bit
|
||||||
|
; 16-bit target
|
||||||
|
REP #$20
|
||||||
|
LDA.l $B00000, X : CMP.w #$0008 : SEP #$20 : INX : BRA +
|
||||||
|
..8bit
|
||||||
|
LDA.l $B00000, X : CMP.b #$08 : + : BCC +
|
||||||
|
; target exceeds 7, just increment Y by 1
|
||||||
|
INY : INX : JMP .next
|
||||||
|
+
|
||||||
|
INX : BRA .add_to_y
|
||||||
|
.unknown ; unknown condition, exit with safe value
|
||||||
|
PLP : INY
|
||||||
|
.use_y
|
||||||
|
TYA : BEQ + : CMP.b #$08 : BCC .done
|
||||||
|
+ LDA.b Scrap00 : BEQ .use_one : CMP.b #$08 : BCC .done
|
||||||
|
.use_one
|
||||||
|
LDA.b #$01
|
||||||
.done
|
.done
|
||||||
SEP #$20
|
PLP : PLY : PLX
|
||||||
RTS
|
RTS
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
CheckEnoughCrystalsForGanon:
|
|
||||||
REP #$20
|
|
||||||
LDA.l CrystalCounter
|
|
||||||
CMP.l GanonVulnerableTarget
|
|
||||||
SEP #$20
|
|
||||||
RTL
|
|
||||||
;--------------------------------------------------------------------------------
|
|
||||||
CheckTowerOpen:
|
CheckTowerOpen:
|
||||||
LDA.l GanonsTowerOpenMode : ASL : TAX
|
LDA.b #$00 : JML CheckConditionPass
|
||||||
JSR (.tower_open_modes,X)
|
|
||||||
RTL
|
|
||||||
.tower_open_modes
|
|
||||||
dw .vanilla
|
|
||||||
dw .arbitrary_cmp
|
|
||||||
|
|
||||||
.vanilla
|
|
||||||
LDA.l CrystalsField
|
|
||||||
AND.b #$7F : CMP.b #$7F
|
|
||||||
RTS
|
|
||||||
|
|
||||||
.arbitrary_cmp
|
|
||||||
REP #$30
|
|
||||||
LDA.l GanonsTowerOpenAddress : TAX
|
|
||||||
LDA.l $7E0000,X
|
|
||||||
CMP.l GanonsTowerOpenTarget
|
|
||||||
SEP #$30
|
|
||||||
RTS
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------------------------------------
|
;---------------------------------------------------------------------------------------------------
|
||||||
CheckAgaForPed:
|
CheckAgaForPed:
|
||||||
REP #$20
|
REP #$20
|
||||||
LDA.l GanonVulnerableMode
|
; seems light_speed option to force blue balls is unused for now
|
||||||
CMP.w #$0006 : BNE .vanilla
|
BRA .vanilla
|
||||||
|
|
||||||
.light_speed
|
.light_speed
|
||||||
SEP #$20
|
SEP #$20
|
||||||
@@ -263,73 +368,61 @@ CheckAgaForPed:
|
|||||||
RTL
|
RTL
|
||||||
|
|
||||||
;---------------------------------------------------------------------------------------------------
|
;---------------------------------------------------------------------------------------------------
|
||||||
CheckForCrystalBossesDefeated:
|
CheckForBossesDefeated:
|
||||||
PHB : PHX : PHY
|
PHB : PHX : PHY
|
||||||
|
|
||||||
LDA.b #CrystalPendantFlags_2>>16
|
STA.b Scrap04 ; 0 = check all, 1 = check crystals, 2 = check pendants
|
||||||
|
|
||||||
|
LDA.b #CrystalPendantFlags_3>>16
|
||||||
PHA : PLB
|
PHA : PLB
|
||||||
|
|
||||||
REP #$30
|
STZ.b Scrap03 ; count of number of bosses killed
|
||||||
|
STZ.b Scrap05
|
||||||
|
|
||||||
; count of number of bosses killed
|
REP #$30
|
||||||
STZ.b Scrap00
|
|
||||||
|
|
||||||
LDY.w #10
|
LDY.w #10
|
||||||
|
|
||||||
.next_check
|
.next_check
|
||||||
LDA.w CrystalPendantFlags_2+2,Y
|
LDA.w CrystalPendantFlags_3+2,Y : AND.w #$00FF : BEQ .skip
|
||||||
BIT.w #$0040
|
CMP.w #$0008 ; C set = pendant, C clear = crystal
|
||||||
BEQ ++
|
LDA.b Scrap04 : BEQ .proceed
|
||||||
|
PHP : ROR : BCC +
|
||||||
|
PLP : BCS .skip : BRA .proceed
|
||||||
|
+ PLP : BCC .skip
|
||||||
|
|
||||||
TYA
|
.proceed
|
||||||
ASL
|
TYA : ASL : TAX
|
||||||
TAX
|
|
||||||
|
|
||||||
LDA.l DrawHUDDungeonItems_boss_room_ids-4,X
|
LDA.l DungeonMapBossRooms+4,X
|
||||||
TAX
|
ASL : TAX
|
||||||
LDA.l RoomDataWRAM.l,X
|
LDA.l RoomDataWRAM.l,X
|
||||||
|
|
||||||
AND.w #$0800
|
AND.w #$0800 : BEQ .skip
|
||||||
BEQ ++
|
INC.b Scrap03
|
||||||
|
|
||||||
INC.b Scrap00
|
.skip
|
||||||
|
DEY : BPL .next_check
|
||||||
++ DEY
|
|
||||||
BPL .next_check
|
|
||||||
|
|
||||||
SEP #$30
|
SEP #$30
|
||||||
PLY : PLX : PLB
|
PLY : PLX : PLB
|
||||||
|
|
||||||
LDA.b Scrap00 : CMP.l GanonVulnerableTarget
|
LDA.b Scrap03
|
||||||
|
|
||||||
|
|
||||||
RTS
|
RTS
|
||||||
;---------------------------------------------------------------------------------------------------
|
;---------------------------------------------------------------------------------------------------
|
||||||
CheckPedestalPull:
|
CheckPedestalPull:
|
||||||
; Out: c - Successful ped pull if set, do nothing if unset.
|
; Out: c - Successful ped pull if set, do nothing if unset.
|
||||||
PHX
|
LDA.b #$02 : JSL CheckConditionPass : BCS .return
|
||||||
LDA.l PedCheckMode : ASL : TAX
|
PHX : PHP
|
||||||
JSR (.pedestal_modes,X)
|
LDA.b GameMode : CMP.b #$0E : BEQ +
|
||||||
PLX
|
|
||||||
RTL
|
|
||||||
|
|
||||||
.pedestal_modes
|
|
||||||
dw .vanilla
|
|
||||||
dw .arbitrary_cmp
|
|
||||||
|
|
||||||
.vanilla
|
|
||||||
LDA.l PendantsField
|
|
||||||
AND.b #$07 : CMP.b #$07 : BNE ..nopull
|
|
||||||
SEC
|
|
||||||
RTS
|
|
||||||
..nopull
|
|
||||||
CLC
|
|
||||||
RTS
|
|
||||||
|
|
||||||
.arbitrary_cmp
|
|
||||||
REP #$30
|
REP #$30
|
||||||
LDA.l PedPullAddress : TAX
|
LDX.w #$0004 : LDA.l GoalConditionTable, X : TAX
|
||||||
LDA.l $7E0000,X
|
LDA.l $B00000, X : CMP.w #$FF81 : BEQ +
|
||||||
CMP.l PedPullTarget
|
|
||||||
SEP #$30
|
SEP #$30
|
||||||
RTS
|
LDA.b #$97 : LDY.b #$01
|
||||||
|
JSL Sprite_ShowMessageUnconditional
|
||||||
|
+
|
||||||
|
PLP : PLX
|
||||||
|
.return
|
||||||
|
RTL
|
||||||
|
|||||||
@@ -4,16 +4,7 @@
|
|||||||
HeartPieceGet:
|
HeartPieceGet:
|
||||||
PHX : PHY
|
PHX : PHY
|
||||||
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID
|
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID
|
||||||
LDY.w SprItemReceipt, X : BNE +
|
LDY.w SprSourceItemId, X
|
||||||
LDA.w SprSourceItemId, X : BNE ++
|
|
||||||
JSL LoadHeartPieceRoomValue
|
|
||||||
STA.w SprSourceItemId, X
|
|
||||||
++
|
|
||||||
JSL AttemptItemSubstitution
|
|
||||||
JSL ResolveLootIDLong
|
|
||||||
STA.w SprItemReceipt, X
|
|
||||||
TAY
|
|
||||||
+
|
|
||||||
JSL MaybeMarkDigSpotCollected
|
JSL MaybeMarkDigSpotCollected
|
||||||
.skipLoad
|
.skipLoad
|
||||||
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID
|
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID
|
||||||
@@ -32,16 +23,7 @@ RTL
|
|||||||
HeartContainerGet:
|
HeartContainerGet:
|
||||||
PHX : PHY
|
PHX : PHY
|
||||||
JSL IncrementBossSword
|
JSL IncrementBossSword
|
||||||
LDY.w SprItemReceipt, X : BNE +
|
LDY.w SprSourceItemId, X
|
||||||
LDA.w SprSourceItemId, X : BNE ++
|
|
||||||
JSL LoadHeartContainerRoomValue
|
|
||||||
STA.w SprSourceItemId, X
|
|
||||||
++
|
|
||||||
JSL AttemptItemSubstitution
|
|
||||||
JSL ResolveLootIDLong
|
|
||||||
STA.w SprItemReceipt, X
|
|
||||||
TAY
|
|
||||||
+
|
|
||||||
BRA HeartPieceGet_skipLoad
|
BRA HeartPieceGet_skipLoad
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
DrawHeartPieceGFX:
|
DrawHeartPieceGFX:
|
||||||
@@ -260,6 +242,12 @@ LoadOutdoorValue:
|
|||||||
PHP
|
PHP
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
LDA.b OverworldIndex
|
LDA.b OverworldIndex
|
||||||
|
; Rain state fix: In rain state DW, use LW screen ID for item lookup
|
||||||
|
BIT.w #$0040 : BEQ +
|
||||||
|
LDA.l ProgressIndicator : AND.w #$00FF : CMP.w #$0002
|
||||||
|
LDA.b OverworldIndex : BCS ++ : AND.w #$00BF
|
||||||
|
++
|
||||||
|
+
|
||||||
CMP.w #$00 : BNE +
|
CMP.w #$00 : BNE +
|
||||||
LDA.l OWBonkPrizeTable[$00].loot
|
LDA.l OWBonkPrizeTable[$00].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
|
|||||||
@@ -411,7 +411,9 @@ JSL OnLoadDuckMap
|
|||||||
; Fix Clobbered Gfx
|
; Fix Clobbered Gfx
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
org $80DB92
|
org $80DB92
|
||||||
JSL PostFixMirrorGfx
|
JSL PostFixMirrorGfxPrep
|
||||||
|
org $80D911
|
||||||
|
JML PostFixMirrorGfx
|
||||||
org $80E259
|
org $80E259
|
||||||
JSL PostFixOAMGfx : NOP
|
JSL PostFixOAMGfx : NOP
|
||||||
|
|
||||||
|
|||||||
@@ -646,7 +646,7 @@ RTL
|
|||||||
; CollectPowder:
|
; CollectPowder:
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
CollectPowder:
|
CollectPowder:
|
||||||
LDY.w SprItemReceipt, X ; Retrieve stored item type
|
LDY.w SprSourceItemId, 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
|
||||||
|
|||||||
@@ -243,7 +243,7 @@ endmacro
|
|||||||
%ReceiptProps($67, -4, 0, $FF, $F36A, $FF, skip, skip) ; 67 -
|
%ReceiptProps($67, -4, 0, $FF, $F36A, $FF, skip, skip) ; 67 -
|
||||||
%ReceiptProps($68, -4, 0, $FF, $F36A, $FF, skip, skip) ; 68 -
|
%ReceiptProps($68, -4, 0, $FF, $F36A, $FF, skip, skip) ; 68 -
|
||||||
%ReceiptProps($69, -4, 0, $FF, $F36A, $FF, skip, skip) ; 69 -
|
%ReceiptProps($69, -4, 0, $FF, $F36A, $FF, skip, skip) ; 69 -
|
||||||
%ReceiptProps($6A, -4, 0, $49, $F36A, $FF, triforce, skip) ; 6A - Triforce
|
%ReceiptProps($6A, -4, 0, $4A, $F36A, $FF, triforce, skip) ; 6A - Triforce
|
||||||
%ReceiptProps($6B, -4, 0, $50, $F36A, $FF, goal_item, skip) ; 6B - Power star
|
%ReceiptProps($6B, -4, 0, $50, $F36A, $FF, goal_item, skip) ; 6B - Power star
|
||||||
%ReceiptProps($6C, -4, 0, $49, $F36A, $FF, goal_item, skip) ; 6C - Triforce Piece
|
%ReceiptProps($6C, -4, 0, $49, $F36A, $FF, goal_item, skip) ; 6C - Triforce Piece
|
||||||
%ReceiptProps($6D, -4, 0, $FF, $F36A, $FF, request_F0, skip) ; 6D - Server request item
|
%ReceiptProps($6D, -4, 0, $FF, $F36A, $FF, request_F0, skip) ; 6D - Server request item
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
; hooks
|
; hooks
|
||||||
|
org $81DB19
|
||||||
|
JSL MaybeSkipSmashTerrain : BCS $81DB11
|
||||||
|
|
||||||
org $81E6B0
|
org $81E6B0
|
||||||
JSL RevealPotItem
|
JSL RevealPotItem
|
||||||
RTS
|
RTS
|
||||||
@@ -39,6 +42,9 @@ org $86d180
|
|||||||
org $86d18d ; <- 3518D - sprite_absorbable.asm : 274 (LDA $7EF36F : INC A : STA $7EF36F)
|
org $86d18d ; <- 3518D - sprite_absorbable.asm : 274 (LDA $7EF36F : INC A : STA $7EF36F)
|
||||||
JSL KeyGet
|
JSL KeyGet
|
||||||
|
|
||||||
|
org $86E24A
|
||||||
|
JSR MaybeSkipTerrainDebris
|
||||||
|
|
||||||
org $86f9f3 ; bank06.asm : 6732 (JSL SpritePrep_LoadProperties)
|
org $86f9f3 ; bank06.asm : 6732 (JSL SpritePrep_LoadProperties)
|
||||||
JSL LoadProperties_PreserveCertainProps
|
JSL LoadProperties_PreserveCertainProps
|
||||||
|
|
||||||
@@ -46,6 +52,11 @@ org $86828A
|
|||||||
Sprite_SpawnSecret_SpriteSpawnDynamically:
|
Sprite_SpawnSecret_SpriteSpawnDynamically:
|
||||||
JSL CheckSprite_Spawn
|
JSL CheckSprite_Spawn
|
||||||
|
|
||||||
|
org $87B114
|
||||||
|
JSL MaybeUnableToLiftPotSfx
|
||||||
|
NOP #4
|
||||||
|
db $30 ; BMI
|
||||||
|
|
||||||
org $87B169
|
org $87B169
|
||||||
JSL PreventPotSpawn : NOP
|
JSL PreventPotSpawn : NOP
|
||||||
|
|
||||||
@@ -671,7 +682,7 @@ KeyGet:
|
|||||||
PHA
|
PHA
|
||||||
LDA.l StandingItemsOn : BNE +
|
LDA.l StandingItemsOn : BNE +
|
||||||
PLA : RTL
|
PLA : RTL
|
||||||
+ LDY.w SprItemReceipt, X
|
+ LDY.w SprSourceItemId, X
|
||||||
LDA.w SprItemIndex, X : STA.w SpawnedItemIndex
|
LDA.w SprItemIndex, X : STA.w SpawnedItemIndex
|
||||||
LDA.w SprItemFlags, X : STA.w SpawnedItemFlag
|
LDA.w SprItemFlags, X : STA.w SpawnedItemFlag
|
||||||
STY.b Scrap00
|
STY.b Scrap00
|
||||||
@@ -685,7 +696,7 @@ KeyGet:
|
|||||||
+ LSR : TAX
|
+ LSR : TAX
|
||||||
LDA.b Scrap00 : CMP.l KeyTable, X : BNE +
|
LDA.b Scrap00 : CMP.l KeyTable, X : BNE +
|
||||||
.countIt
|
.countIt
|
||||||
LDA.l StandingItemCounterMask : AND.w SpawnedItemFlag : BEQ ++
|
LDA.l StandingItemCounterMask : AND SpawnedItemFlag : BEQ ++
|
||||||
JSL AddInventory
|
JSL AddInventory
|
||||||
++ PLX : PLA : RTL
|
++ PLX : PLA : RTL
|
||||||
+ CMP.b #$AF : beq .countIt ; universal key
|
+ CMP.b #$AF : beq .countIt ; universal key
|
||||||
@@ -693,7 +704,7 @@ KeyGet:
|
|||||||
.skip PLX
|
.skip PLX
|
||||||
.receive
|
.receive
|
||||||
JSL Player_HaltDashAttackLong
|
JSL Player_HaltDashAttackLong
|
||||||
TYA : JSL AttemptItemSubstitution : JSL ResolveLootIDLong : TAY
|
TYA : JSL AttemptItemSubstitution : TAY
|
||||||
JSL Link_ReceiveItem
|
JSL Link_ReceiveItem
|
||||||
PLA : DEC : RTL
|
PLA : DEC : RTL
|
||||||
|
|
||||||
@@ -701,7 +712,7 @@ KeyTable:
|
|||||||
db $A0, $A0, $A2, $A3, $A4, $A5, $A6, $A7, $A8, $A9, $AA, $AB, $AC, $AD
|
db $A0, $A0, $A2, $A3, $A4, $A5, $A6, $A7, $A8, $A9, $AA, $AB, $AC, $AD
|
||||||
|
|
||||||
BigKeyGet:
|
BigKeyGet:
|
||||||
LDY.w SprItemReceipt, X
|
LDY.w SprSourceItemId, X
|
||||||
CPY.b #$32 : BNE +
|
CPY.b #$32 : BNE +
|
||||||
STZ.w ItemReceiptMethod : LDY.b #$32 ; what we wrote over
|
STZ.w ItemReceiptMethod : LDY.b #$32 ; what we wrote over
|
||||||
PHX : JSL Link_ReceiveItem : PLX ; what we wrote over
|
PHX : JSL Link_ReceiveItem : PLX ; what we wrote over
|
||||||
@@ -773,7 +784,6 @@ CheckSprite_Spawn:
|
|||||||
RTL
|
RTL
|
||||||
.check
|
.check
|
||||||
LDA.b Scrap0D : CMP.b #$08 : BNE +
|
LDA.b Scrap0D : CMP.b #$08 : BNE +
|
||||||
LDA.w LinkDashing : BNE .error
|
|
||||||
LDX.b #$0F
|
LDX.b #$0F
|
||||||
|
|
||||||
; loop looking for a Sprite with state 0A (carried by the player)
|
; loop looking for a Sprite with state 0A (carried by the player)
|
||||||
@@ -784,7 +794,9 @@ RTL
|
|||||||
LDA.b #$00 : STZ.w SpriteAITable, X
|
LDA.b #$00 : STZ.w SpriteAITable, X
|
||||||
LDA.b #$E4 : JSL Sprite_SpawnDynamically
|
LDA.b #$E4 : JSL Sprite_SpawnDynamically
|
||||||
BMI .error
|
BMI .error
|
||||||
LDA.b #$40 : TSB.w AButtonAct : RTL
|
LDA.w UseY1 : AND.b #$02 : BNE ++
|
||||||
|
LDA.b #$40 : TSB.w AButtonAct
|
||||||
|
++ RTL
|
||||||
|
|
||||||
.error
|
.error
|
||||||
LDA.b #$3C ; SFX2_3C - error beep
|
LDA.b #$3C ; SFX2_3C - error beep
|
||||||
@@ -803,14 +815,101 @@ PreventPotSpawn2:
|
|||||||
LDA.b #$01 : TSB.b LinkStrafe ; what we wrote over
|
LDA.b #$01 : TSB.b LinkStrafe ; what we wrote over
|
||||||
+ RTL
|
+ RTL
|
||||||
|
|
||||||
|
MaybeSkipTerrainDebris_long:
|
||||||
|
STZ.w SecretId ; what we wrote over
|
||||||
|
LDA.w SpriteTypeTable, X : CMP.b #$EC
|
||||||
|
BEQ .return
|
||||||
|
PLA : PLA : PLA : PLA : PLA
|
||||||
|
LDA.b #Sprite_ScheduleForBreakage_exit>>16 : PHA
|
||||||
|
PEA.w Sprite_ScheduleForBreakage_exit-1
|
||||||
|
.return
|
||||||
|
RTL
|
||||||
|
|
||||||
|
MaybeSkipSmashTerrain:
|
||||||
|
STY.w ManipIndex : LDA.w ManipTileMapX, Y ; what we wrote over
|
||||||
|
PHA
|
||||||
|
SEP #$30
|
||||||
|
LDX.b #$0F
|
||||||
|
- LDA.w SpriteAITable, X : BEQ .continue
|
||||||
|
DEX
|
||||||
|
BPL -
|
||||||
|
.skip
|
||||||
|
PLA : PLA
|
||||||
|
LDA.b #$3C : STA.w SFX2 ; error beep
|
||||||
|
SEC
|
||||||
|
RTL
|
||||||
|
.continue
|
||||||
|
REP #$30
|
||||||
|
PLA
|
||||||
|
CLC
|
||||||
|
RTL
|
||||||
|
|
||||||
|
MaybeUnableToLiftPotSfx:
|
||||||
|
- LDA.w SpriteAITable,X : BEQ .return
|
||||||
|
DEX
|
||||||
|
BPL -
|
||||||
|
LDA.b #$3C : STA.w SFX2 ; error beep
|
||||||
|
LDA.b #$FF
|
||||||
|
.return
|
||||||
|
RTL
|
||||||
|
|
||||||
CheckIfPotIsSpecial:
|
CheckIfPotIsSpecial:
|
||||||
TXA ; give index to A so we can do a CMP.l
|
TXA ; give index to A so we can do a CMP.l
|
||||||
CMP.l $018550 ; see if our current index is that of object 230
|
CMP.l $018550 ; see if our current index is that of object 230
|
||||||
BEQ .specialpot
|
BNE .normal_pot
|
||||||
|
|
||||||
|
.special_pot
|
||||||
|
PHX
|
||||||
|
|
||||||
|
; get pot index and cache room ID offset
|
||||||
|
LDA.b RoomIndex : ASL : STA.b Scrap0E
|
||||||
|
TAX
|
||||||
|
|
||||||
|
LDA.b $08
|
||||||
|
BIT.b $BF : BVC .upper ; if $BF has bit 14 set, it's upper layer
|
||||||
|
ORA.w #$2000 ; set the lower layer bit ($2000)
|
||||||
|
.upper
|
||||||
|
STA.b $90 ; cache tilemap offset
|
||||||
|
|
||||||
|
LDA.l UWPotsPointers,X : TAX
|
||||||
|
LDY.w #$0000
|
||||||
|
|
||||||
|
.next_pot
|
||||||
|
LDA.l UWPotsPointers&$FF0000, X ; read only the bank
|
||||||
|
CMP.w #$FFFF
|
||||||
|
BEQ .nothing
|
||||||
|
AND.w #$3FFF ; mask out the first three bits (used for item indicators and layer)
|
||||||
|
|
||||||
|
CMP.b $90 ; check against the tilemap offset
|
||||||
|
BEQ .get_flag
|
||||||
|
|
||||||
|
INX #3
|
||||||
|
INY #2
|
||||||
|
BRA .next_pot
|
||||||
|
|
||||||
|
.get_flag
|
||||||
|
TYX
|
||||||
|
|
||||||
|
LDA.l BitFieldMasks,X
|
||||||
|
LDX.b Scrap0E ; get room ID
|
||||||
|
STA.b Scrap0E
|
||||||
|
LDA.l RoomPotData,X
|
||||||
|
|
||||||
|
BRA .check_pot
|
||||||
|
|
||||||
|
.nothing
|
||||||
|
INC ; from FFFF, A is now 0000 so the AND always fails
|
||||||
|
|
||||||
|
.check_pot
|
||||||
|
LDY.b $08 : PLX
|
||||||
|
AND.b Scrap0E
|
||||||
|
BEQ .exit ; zero flag will be set, which is what we want
|
||||||
|
LDX.w #$0E82 ; the normal pot obj. See RoomDrawObjectData_#obj0E82
|
||||||
|
|
||||||
|
.normal_pot
|
||||||
; Normal pot, so run the vanilla code
|
; Normal pot, so run the vanilla code
|
||||||
LDA.l CurrentWorld ; check for dark world
|
LDA.l CurrentWorld ; check for dark world
|
||||||
.specialpot ; zero flag already set, so gtg
|
.exit
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
SetTheSceneFix:
|
SetTheSceneFix:
|
||||||
|
|||||||
@@ -2,6 +2,13 @@
|
|||||||
; Maiden Crystal Fixes
|
; Maiden Crystal Fixes
|
||||||
;================================================================================
|
;================================================================================
|
||||||
|
|
||||||
|
pushpc
|
||||||
|
|
||||||
|
org $9ECE25
|
||||||
|
STZ.w $1F00 : NOP : NOP ; fix to allow VRAM corruption during Blind fight
|
||||||
|
|
||||||
|
pullpc
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; MaidenCrystalScript
|
; MaidenCrystalScript
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|||||||
135
menu/compress.py
Normal file
135
menu/compress.py
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Compression function reverse-engineered from ALTTP's decompression routine at $00E7DE
|
||||||
|
def compress(data):
|
||||||
|
out = bytearray()
|
||||||
|
i = 0
|
||||||
|
|
||||||
|
while i < len(data):
|
||||||
|
# Check for repeating byte pattern
|
||||||
|
if i + 1 < len(data) and data[i] == data[i + 1]:
|
||||||
|
length = 2
|
||||||
|
while i + length < len(data) and data[i] == data[i + length] and length < 32:
|
||||||
|
length += 1
|
||||||
|
# Repeating byte: 0x20-0x3F
|
||||||
|
out.append(0x20 | (length - 1))
|
||||||
|
out.append(data[i])
|
||||||
|
i += length
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Check for incremental byte pattern
|
||||||
|
if i + 2 < len(data) and data[i + 1] == data[i] + 1 and data[i + 2] == data[i] + 2:
|
||||||
|
length = 3
|
||||||
|
while i + length < len(data) and data[i + length] == data[i] + length and length < 32:
|
||||||
|
length += 1
|
||||||
|
# Incremental: 0x60-0x7F
|
||||||
|
out.append(0x60 | (length - 1))
|
||||||
|
out.append(data[i])
|
||||||
|
i += length
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Check for repeating word pattern (alternating two bytes)
|
||||||
|
if i + 3 < len(data):
|
||||||
|
# Check if we have an alternating pattern: A B A B...
|
||||||
|
byte_a = data[i]
|
||||||
|
byte_b = data[i + 1]
|
||||||
|
length = 2
|
||||||
|
while i + length < len(data) and length < 32:
|
||||||
|
if length % 2 == 0:
|
||||||
|
if data[i + length] != byte_a:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
if data[i + length] != byte_b:
|
||||||
|
break
|
||||||
|
length += 1
|
||||||
|
|
||||||
|
if length >= 4: # Need at least 4 bytes (2 alternations) to make it worthwhile
|
||||||
|
# Repeating word: 0x40-0x5F
|
||||||
|
out.append(0x40 | (length - 1))
|
||||||
|
out.append(byte_a)
|
||||||
|
out.append(byte_b)
|
||||||
|
i += length
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Check for copy from past (LZ with absolute offset)
|
||||||
|
best_len = 0
|
||||||
|
best_off = 0
|
||||||
|
search_start = max(0, i - 65536) # Can reference anywhere in output
|
||||||
|
for j in range(search_start, i):
|
||||||
|
length = 0
|
||||||
|
while i + length < len(data) and data[j + length] == data[i + length] and length < 1024:
|
||||||
|
length += 1
|
||||||
|
if length >= 2 and length > best_len:
|
||||||
|
best_len = length
|
||||||
|
best_off = j # Absolute offset, not relative!
|
||||||
|
|
||||||
|
if best_len >= 2:
|
||||||
|
# Copy from past: 0x80-0xDF or 0xE0-0xFE (extended)
|
||||||
|
# Offset is ABSOLUTE position in the output buffer
|
||||||
|
if best_len <= 32:
|
||||||
|
# Standard copy: 0x80-0xDF (5 bits for length-1, 16 bits for absolute offset)
|
||||||
|
out.append(0x80 | ((best_len - 1) & 0x1F))
|
||||||
|
out.append(best_off & 0xFF)
|
||||||
|
out.append((best_off >> 8) & 0xFF)
|
||||||
|
else:
|
||||||
|
# Extended copy: 0xE0-0xFE
|
||||||
|
if best_len > 1024:
|
||||||
|
best_len = 1024
|
||||||
|
# Command byte: 111LLLLL where L is length bits
|
||||||
|
cmd = 0xE0 | (((best_len - 1) >> 8) & 0x1F)
|
||||||
|
out.append(cmd)
|
||||||
|
out.append((best_len - 1) & 0xFF)
|
||||||
|
out.append(best_off & 0xFF)
|
||||||
|
out.append((best_off >> 8) & 0xFF)
|
||||||
|
i += best_len
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Raw copy (no pattern found)
|
||||||
|
size = 1
|
||||||
|
while size < 32 and i + size < len(data):
|
||||||
|
# Don't extend raw copy if we find a better pattern ahead
|
||||||
|
if i + size + 1 < len(data) and data[i + size] == data[i + size + 1]:
|
||||||
|
break
|
||||||
|
if i + size + 2 < len(data) and data[i + size + 1] == data[i + size] + 1:
|
||||||
|
break
|
||||||
|
# Check LZ
|
||||||
|
found_lz = False
|
||||||
|
for j in range(max(0, i + size - 2048), i + size):
|
||||||
|
if i + size + 1 < len(data) and data[j] == data[i + size] and data[j + 1] == data[i + size + 1]:
|
||||||
|
found_lz = True
|
||||||
|
break
|
||||||
|
if found_lz:
|
||||||
|
break
|
||||||
|
size += 1
|
||||||
|
|
||||||
|
# Raw copy: 0x00-0x1F
|
||||||
|
out.append(size - 1)
|
||||||
|
out.extend(data[i:i + size])
|
||||||
|
i += size
|
||||||
|
|
||||||
|
# End marker
|
||||||
|
out.append(0xFF)
|
||||||
|
return out
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
if len(sys.argv) != 3:
|
||||||
|
print("Usage: python compress.py <input_file> <output_file>")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
input_file_path = sys.argv[1]
|
||||||
|
output_file_path = sys.argv[2]
|
||||||
|
|
||||||
|
if not os.path.exists(input_file_path):
|
||||||
|
print(f"Error: Input file not found at {input_file_path}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
with open(input_file_path, 'rb') as f:
|
||||||
|
input_data = f.read()
|
||||||
|
|
||||||
|
compressed_data = compress(input_data)
|
||||||
|
|
||||||
|
with open(output_file_path, 'wb') as f:
|
||||||
|
f.write(compressed_data)
|
||||||
|
|
||||||
|
print(f"Successfully compressed '{input_file_path}' to '{output_file_path}'")
|
||||||
112
menu/decompress.py
Normal file
112
menu/decompress.py
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
def decompress(compressed_data):
|
||||||
|
out = bytearray()
|
||||||
|
i = 0
|
||||||
|
|
||||||
|
while i < len(compressed_data):
|
||||||
|
cmd = compressed_data[i]
|
||||||
|
|
||||||
|
if cmd == 0xFF:
|
||||||
|
# End marker
|
||||||
|
break
|
||||||
|
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
# Decode based on top 3 bits
|
||||||
|
top_bits = cmd & 0xE0
|
||||||
|
|
||||||
|
if cmd < 0xE0:
|
||||||
|
# Standard commands
|
||||||
|
length = (cmd & 0x1F) + 1
|
||||||
|
|
||||||
|
if top_bits == 0x00:
|
||||||
|
# Raw copy
|
||||||
|
out.extend(compressed_data[i:i+length])
|
||||||
|
i += length
|
||||||
|
elif top_bits == 0x20:
|
||||||
|
# Repeating byte
|
||||||
|
byte_val = compressed_data[i]
|
||||||
|
out.extend([byte_val] * length)
|
||||||
|
i += 1
|
||||||
|
elif top_bits == 0x40:
|
||||||
|
# Repeating word - alternates between two bytes
|
||||||
|
byte_a = compressed_data[i]
|
||||||
|
byte_b = compressed_data[i+1]
|
||||||
|
for j in range(length):
|
||||||
|
if j % 2 == 0:
|
||||||
|
out.append(byte_a)
|
||||||
|
else:
|
||||||
|
out.append(byte_b)
|
||||||
|
i += 2
|
||||||
|
elif top_bits == 0x60:
|
||||||
|
# Incremental
|
||||||
|
start_val = compressed_data[i]
|
||||||
|
for j in range(length):
|
||||||
|
out.append((start_val + j) & 0xFF)
|
||||||
|
i += 1
|
||||||
|
elif top_bits >= 0x80:
|
||||||
|
# Copy from past (absolute offset)
|
||||||
|
offset = compressed_data[i] | (compressed_data[i+1] << 8)
|
||||||
|
for j in range(length):
|
||||||
|
out.append(out[offset + j])
|
||||||
|
i += 2
|
||||||
|
else:
|
||||||
|
# Extended command (0xE0-0xFE)
|
||||||
|
# Command type from bits 5-7 (after shifting)
|
||||||
|
cmd_type = ((cmd << 3) & 0xE0)
|
||||||
|
# Length from bits 0-1 of command (high) + next byte (low)
|
||||||
|
length_high = cmd & 0x03
|
||||||
|
length_low = compressed_data[i]
|
||||||
|
length = (length_high << 8) | length_low
|
||||||
|
length += 1
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
if cmd_type == 0x00:
|
||||||
|
# Extended raw copy
|
||||||
|
out.extend(compressed_data[i:i+length])
|
||||||
|
i += length
|
||||||
|
elif cmd_type == 0x20:
|
||||||
|
# Extended repeating byte
|
||||||
|
byte_val = compressed_data[i]
|
||||||
|
out.extend([byte_val] * length)
|
||||||
|
i += 1
|
||||||
|
elif cmd_type == 0x40:
|
||||||
|
# Extended repeating word - alternates between two bytes
|
||||||
|
byte_a = compressed_data[i]
|
||||||
|
byte_b = compressed_data[i+1]
|
||||||
|
for j in range(length):
|
||||||
|
if j % 2 == 0:
|
||||||
|
out.append(byte_a)
|
||||||
|
else:
|
||||||
|
out.append(byte_b)
|
||||||
|
i += 2
|
||||||
|
elif cmd_type == 0x60:
|
||||||
|
# Extended incremental
|
||||||
|
start_val = compressed_data[i]
|
||||||
|
for j in range(length):
|
||||||
|
out.append((start_val + j) & 0xFF)
|
||||||
|
i += 1
|
||||||
|
elif cmd_type >= 0x80:
|
||||||
|
# Extended copy from past
|
||||||
|
offset = compressed_data[i] | (compressed_data[i+1] << 8)
|
||||||
|
for j in range(length):
|
||||||
|
out.append(out[offset + j])
|
||||||
|
i += 2
|
||||||
|
|
||||||
|
return out
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
if len(sys.argv) != 3:
|
||||||
|
print("Usage: python decompress.py <input_file> <output_file>")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
with open(sys.argv[1], 'rb') as f:
|
||||||
|
compressed = f.read()
|
||||||
|
|
||||||
|
decompressed = decompress(compressed)
|
||||||
|
|
||||||
|
with open(sys.argv[2], 'wb') as f:
|
||||||
|
f.write(decompressed)
|
||||||
|
|
||||||
|
print(f"Decompressed {len(compressed)} bytes to {len(decompressed)} bytes")
|
||||||
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -138,7 +138,7 @@ 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 SprItemReceipt, X ; Retrieve stored item type
|
LDY.w SprSourceItemId, 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
|
||||||
|
|||||||
592
owrando.asm
592
owrando.asm
@@ -613,7 +613,13 @@ OWBonkDrops:
|
|||||||
LDA.w $0400 : ORA.b 1,S : STA.w $0400
|
LDA.w $0400 : ORA.b 1,S : STA.w $0400
|
||||||
BRA .increment_collection
|
BRA .increment_collection
|
||||||
++
|
++
|
||||||
LDX.b OverworldIndex : LDA.l OverworldEventDataWRAM,X : ORA.b 1,S : STA.l OverworldEventDataWRAM,X
|
LDA.b OverworldIndex
|
||||||
|
BIT.b #$40 : BEQ +
|
||||||
|
LDA.l ProgressIndicator : CMP.b #$02
|
||||||
|
LDA.b OverworldIndex : BCS ++ : AND.b #$BF
|
||||||
|
++
|
||||||
|
+
|
||||||
|
TAX : LDA.l OverworldEventDataWRAM,X : ORA.b 1,S : STA.l OverworldEventDataWRAM,X
|
||||||
|
|
||||||
.increment_collection
|
.increment_collection
|
||||||
REP #$20
|
REP #$20
|
||||||
@@ -673,13 +679,19 @@ OWBonkDropLookup:
|
|||||||
{
|
{
|
||||||
; loop thru rando bonk table to find match
|
; loop thru rando bonk table to find match
|
||||||
LDA.b OverworldIndex
|
LDA.b OverworldIndex
|
||||||
|
BIT.b #$40 : BEQ +
|
||||||
|
LDA.l ProgressIndicator : AND.b #$FF : CMP.b #$02
|
||||||
|
LDA.b OverworldIndex : BCS ++ : AND.b #$BF
|
||||||
|
++
|
||||||
|
+
|
||||||
LDX.b #((UWBonkPrizeData-OWBonkPrizeData)-sizeof(OWBonkPrizeTable)) ; 41 bonk items, 6 bytes each
|
LDX.b #((UWBonkPrizeData-OWBonkPrizeData)-sizeof(OWBonkPrizeTable)) ; 41 bonk items, 6 bytes each
|
||||||
- CMP.w OWBonkPrizeData,X : BNE +
|
- CMP.w OWBonkPrizeData,X : BNE +
|
||||||
INX
|
INX
|
||||||
|
PHA
|
||||||
LDA.w SpritePosXLow,Y : LSR A : LSR A : LSR A : LSR A
|
LDA.w SpritePosXLow,Y : LSR A : LSR A : LSR A : LSR A
|
||||||
EOR.w SpritePosYLow,Y : CMP.w OWBonkPrizeData,X : BNE ++ ; X = row + 1
|
EOR.w SpritePosYLow,Y : CMP.w OWBonkPrizeData,X : BNE ++ ; X = row + 1
|
||||||
SEC : RTS
|
PLA : SEC : RTS
|
||||||
++ DEX : LDA.b OverworldIndex
|
++ DEX : PLA
|
||||||
+ CPX.b #$00 : BNE +
|
+ CPX.b #$00 : BNE +
|
||||||
CLC : RTS
|
CLC : RTS
|
||||||
+ DEX : DEX : DEX : DEX : DEX : DEX : BRA -
|
+ DEX : DEX : DEX : DEX : DEX : DEX : BRA -
|
||||||
@@ -689,16 +701,22 @@ OWBonkDropLookup:
|
|||||||
OWBonkDropCollected:
|
OWBonkDropCollected:
|
||||||
{
|
{
|
||||||
; check if collected
|
; check if collected
|
||||||
CLC
|
|
||||||
LDA.b IndoorsFlag : BEQ +
|
LDA.b IndoorsFlag : BEQ +
|
||||||
LDA.l RoomDataWRAM[$0120].high : AND.b 3,S : BEQ .return ; S = Collected, FlagBitmask, X (row + 2)
|
LDA.l RoomDataWRAM[$0120].high : AND.b 3,S : BEQ .return ; S = Collected, FlagBitmask, X (row + 2)
|
||||||
SEC : RTS
|
SEC : RTS
|
||||||
+
|
+
|
||||||
LDX.b OverworldIndex : LDA.l OverworldEventDataWRAM,X : AND.b 3,S : BEQ .return ; S = Collected, FlagBitmask, X (row + 2)
|
LDA.b OverworldIndex
|
||||||
|
BIT.b #$40 : BEQ +
|
||||||
|
LDA.l ProgressIndicator : CMP.b #$02
|
||||||
|
LDA.b OverworldIndex : BCS ++ : AND.b #$BF
|
||||||
|
++
|
||||||
|
+
|
||||||
|
TAX
|
||||||
|
LDA.l OverworldEventDataWRAM,X : AND.b 3,S : BEQ .return ; S = Collected, FlagBitmask, X (row + 2)
|
||||||
SEC : RTS
|
SEC : RTS
|
||||||
|
|
||||||
.return
|
.return
|
||||||
RTS
|
CLC : RTS
|
||||||
}
|
}
|
||||||
|
|
||||||
; A = SprItemReceipt, Y = Sprite Slot Index, X = free/overwritten
|
; A = SprItemReceipt, Y = Sprite Slot Index, X = free/overwritten
|
||||||
@@ -1384,291 +1402,291 @@ db $80, $80, $81
|
|||||||
org $aaa800 ;PC 152800
|
org $aaa800 ;PC 152800
|
||||||
OWNorthEdges:
|
OWNorthEdges:
|
||||||
; Min Max Width Mid OW Slot/OWID VRAM Terrain Dest Index
|
; Min Max Width Mid OW Slot/OWID VRAM Terrain Dest Index
|
||||||
dw $00a0, $00a0, $0000, $00a0, $0000, $0000, $0000, $B040 ;Lost Woods (exit only)
|
dw $00a0, $00a0, $0000, $00a0, $0000, $0284, $0000, $B040 ;Lost Woods (exit only)
|
||||||
dw $0458, $0540, $00e8, $04cc, $0a0a, $0000, $0000, $0000
|
dw $0458, $0540, $00e8, $04cc, $0a0a, $180a, $0000, $0000
|
||||||
dw $0f38, $0f60, $0028, $0f4c, $0f0f, $0000, $0000, $2041 ;Waterfall (exit only)
|
dw $0f38, $0f60, $0028, $0f4c, $0f0f, $009a, $0000, $2041 ;Waterfall (exit only)
|
||||||
dw $0058, $0058, $0000, $0058, $1010, $0000, $0000, $0001
|
dw $0058, $0058, $0000, $0058, $1010, $1800, $0000, $0001
|
||||||
dw $0178, $0178, $0000, $0178, $1010, $0000, $0000, $0002
|
dw $0178, $0178, $0000, $0178, $1010, $181e, $0000, $0002
|
||||||
dw $0388, $0388, $0000, $0388, $1111, $0000, $0000, $0003
|
dw $0388, $0388, $0000, $0388, $1111, $1820, $0000, $0003
|
||||||
dw $0480, $05b0, $0130, $0518, $1212, $0000, $0000, $0004
|
dw $0480, $05b0, $0130, $0518, $1212, $1812, $0000, $0004
|
||||||
dw $0f70, $0f90, $0020, $0f80, $1717, $0000, $0000, $0005
|
dw $0f70, $0f90, $0020, $0f80, $1717, $1820, $0000, $0005
|
||||||
dw $0078, $0098, $0020, $0088, $1818, $0000, $0000, $0006 ;Kakariko
|
dw $0078, $0098, $0020, $0088, $1818, $1802, $0000, $0006 ;Kakariko
|
||||||
dw $0138, $0158, $0020, $0148, $1818, $0000, $0000, $0007
|
dw $0138, $0158, $0020, $0148, $1818, $181a, $0000, $0007
|
||||||
dw $02e8, $0348, $0060, $0318, $1819, $0000, $0000, $0008
|
dw $02e8, $0348, $0060, $0318, $1819, $1854, $0000, $0008
|
||||||
dw $0478, $04d0, $0058, $04a4, $1a1a, $0000, $0000, $0009
|
dw $0478, $04d0, $0058, $04a4, $1a1a, $1806, $0000, $0009
|
||||||
dw $0510, $0538, $0028, $0524, $1a1a, $0000, $0000, $000a
|
dw $0510, $0538, $0028, $0524, $1a1a, $1816, $0000, $000a
|
||||||
dw $0a48, $0af0, $00a8, $0a9c, $1d1d, $0000, $0000, $000b
|
dw $0a48, $0af0, $00a8, $0a9c, $1d1d, $1804, $0000, $000b
|
||||||
dw $0b28, $0b38, $0010, $0b30, $1d1d, $0000, $0001, $000c
|
dw $0b28, $0b38, $0010, $0b30, $1d1d, $1818, $0001, $000c
|
||||||
dw $0b70, $0ba0, $0030, $0b88, $1d1d, $0000, $0000, $000d
|
dw $0b70, $0ba0, $0030, $0b88, $1d1d, $1820, $0000, $000d
|
||||||
dw $0a40, $0b10, $00d0, $0aa8, $2525, $0000, $0000, $000e
|
dw $0a40, $0b10, $00d0, $0aa8, $2525, $1806, $0000, $000e
|
||||||
dw $0350, $0390, $0040, $0370, $2929, $0000, $0000, $000f
|
dw $0350, $0390, $0040, $0370, $2929, $1820, $0000, $000f
|
||||||
dw $0670, $06a8, $0038, $068c, $2b2b, $0000, $0000, $0010
|
dw $0670, $06a8, $0038, $068c, $2b2b, $1802, $0000, $0010
|
||||||
dw $0898, $09b0, $0118, $0924, $2c2c, $0000, $0000, $0011 ;Links House
|
dw $0898, $09b0, $0118, $0924, $2c2c, $1814, $0000, $0011 ;Links House
|
||||||
dw $0a40, $0ba0, $0160, $0af0, $2d2d, $0000, $0000, $0012
|
dw $0a40, $0ba0, $0160, $0af0, $2d2d, $180e, $0000, $0012
|
||||||
dw $0c70, $0c90, $0020, $0c80, $2e2e, $0000, $0000, $0013
|
dw $0c70, $0c90, $0020, $0c80, $2e2e, $1802, $0000, $0013
|
||||||
dw $0f70, $0f80, $0010, $0f78, $2f2f, $0000, $0000, $0014
|
dw $0f70, $0f80, $0010, $0f78, $2f2f, $1820, $0000, $0014
|
||||||
dw $0430, $0468, $0038, $044c, $3232, $0000, $0000, $0015
|
dw $0430, $0468, $0038, $044c, $3232, $1800, $0000, $0015
|
||||||
dw $04d8, $04f8, $0020, $04e8, $3232, $0000, $0000, $0016
|
dw $04d8, $04f8, $0020, $04e8, $3232, $180c, $0000, $0016
|
||||||
dw $0688, $06b0, $0028, $069c, $3333, $0000, $0000, $0017
|
dw $0688, $06b0, $0028, $069c, $3333, $1804, $0000, $0017
|
||||||
dw $08d0, $08f0, $0020, $08e0, $3434, $0000, $0000, $0018
|
dw $08d0, $08f0, $0020, $08e0, $3434, $180e, $0000, $0018
|
||||||
dw $0a80, $0b40, $00c0, $0ae0, $3535, $0000, $0000, $0019
|
dw $0a80, $0b40, $00c0, $0ae0, $3535, $180c, $0000, $0019
|
||||||
dw $0d38, $0d58, $0020, $0d48, $3536, $0000, $0001, $001a
|
dw $0d38, $0d58, $0020, $0d48, $3536, $185a, $0001, $001a
|
||||||
dw $0d90, $0da0, $0010, $0d98, $3536, $0000, $0000, $001b
|
dw $0d90, $0da0, $0010, $0d98, $3536, $1860, $0000, $001b
|
||||||
dw $06a0, $07b0, $0110, $0728, $3b3b, $0000, $0000, $001c
|
dw $06a0, $07b0, $0110, $0728, $3b3b, $1816, $0000, $001c
|
||||||
dw $0830, $09b0, $0180, $08f0, $3c3c, $0000, $0000, $001d
|
dw $0830, $09b0, $0180, $08f0, $3c3c, $1810, $0000, $001d
|
||||||
dw $0e78, $0e88, $0010, $0e80, $3f3f, $0000, $0001, $001e
|
dw $0e78, $0e88, $0010, $0e80, $3f3f, $1802, $0001, $001e
|
||||||
dw $0ee0, $0fc0, $00e0, $0f50, $3f3f, $0000, $0000, $001f
|
dw $0ee0, $0fc0, $00e0, $0f50, $3f3f, $181c, $0000, $001f
|
||||||
dw $0458, $0540, $00e8, $04cc, $4a4a, $0000, $0000, $0020
|
dw $0458, $0540, $00e8, $04cc, $4a4a, $180a, $0000, $0020
|
||||||
dw $0058, $0058, $0000, $0058, $5050, $0000, $0000, $0021
|
dw $0058, $0058, $0000, $0058, $5050, $181e, $0000, $0021
|
||||||
dw $0178, $0178, $0000, $0178, $5050, $0000, $0000, $0022
|
dw $0178, $0178, $0000, $0178, $5050, $1800, $0000, $0022
|
||||||
dw $0388, $0388, $0000, $0388, $5151, $0000, $0000, $0023
|
dw $0388, $0388, $0000, $0388, $5151, $1820, $0000, $0023
|
||||||
dw $0480, $05b0, $0130, $0518, $5252, $0000, $0000, $0024
|
dw $0480, $05b0, $0130, $0518, $5252, $1812, $0000, $0024
|
||||||
dw $0f70, $0f90, $0020, $0f80, $5757, $0000, $0000, $0025
|
dw $0f70, $0f90, $0020, $0f80, $5757, $1820, $0000, $0025
|
||||||
dw $0078, $0098, $0020, $0088, $5858, $0000, $0000, $0026 ;Village of Outcasts
|
dw $0078, $0098, $0020, $0088, $5858, $1802, $0000, $0026 ;Village of Outcasts
|
||||||
dw $0138, $0158, $0020, $0148, $5858, $0000, $0000, $0027
|
dw $0138, $0158, $0020, $0148, $5858, $181a, $0000, $0027
|
||||||
dw $02e8, $0348, $0060, $0318, $5859, $0000, $0000, $0028
|
dw $02e8, $0348, $0060, $0318, $5859, $1854, $0000, $0028
|
||||||
dw $0478, $04d0, $0058, $04a4, $5a5a, $0000, $0000, $0029
|
dw $0478, $04d0, $0058, $04a4, $5a5a, $1806, $0000, $0029
|
||||||
dw $0510, $0538, $0028, $0524, $5a5a, $0000, $0000, $002a
|
dw $0510, $0538, $0028, $0524, $5a5a, $1816, $0000, $002a
|
||||||
dw $0a48, $0af0, $00a8, $0a9c, $5d5d, $0000, $0000, $002b
|
dw $0a48, $0af0, $00a8, $0a9c, $5d5d, $1804, $0000, $002b
|
||||||
dw $0b28, $0b38, $0010, $0b30, $5d5d, $0000, $0001, $002c
|
dw $0b28, $0b38, $0010, $0b30, $5d5d, $1818, $0001, $002c
|
||||||
dw $0b70, $0ba0, $0030, $0b88, $5d5d, $0000, $0000, $002d
|
dw $0b70, $0ba0, $0030, $0b88, $5d5d, $1820, $0000, $002d
|
||||||
dw $0a40, $0b10, $00d0, $0aa8, $6565, $0000, $0000, $002e
|
dw $0a40, $0b10, $00d0, $0aa8, $6565, $1806, $0000, $002e
|
||||||
dw $0350, $0390, $0040, $0370, $6969, $0000, $0000, $002f
|
dw $0350, $0390, $0040, $0370, $6969, $1820, $0000, $002f
|
||||||
dw $0670, $06a8, $0038, $068c, $6b6b, $0000, $0000, $0030
|
dw $0670, $06a8, $0038, $068c, $6b6b, $1802, $0000, $0030
|
||||||
dw $0898, $09b0, $0118, $0924, $6c6c, $0000, $0000, $0031
|
dw $0898, $09b0, $0118, $0924, $6c6c, $1814, $0000, $0031
|
||||||
dw $0a40, $0ba0, $0160, $0af0, $6d6d, $0000, $0000, $0032
|
dw $0a40, $0ba0, $0160, $0af0, $6d6d, $180e, $0000, $0032
|
||||||
dw $0c70, $0c90, $0020, $0c80, $6e6e, $0000, $0000, $0033
|
dw $0c70, $0c90, $0020, $0c80, $6e6e, $1802, $0000, $0033
|
||||||
dw $0f70, $0f80, $0010, $0f78, $6f6f, $0000, $0000, $0034
|
dw $0f70, $0f80, $0010, $0f78, $6f6f, $1820, $0000, $0034
|
||||||
dw $0430, $0468, $0038, $044c, $7272, $0000, $0000, $0035
|
dw $0430, $0468, $0038, $044c, $7272, $1800, $0000, $0035
|
||||||
dw $04d8, $04f8, $0020, $04e8, $7272, $0000, $0000, $0036
|
dw $04d8, $04f8, $0020, $04e8, $7272, $180c, $0000, $0036
|
||||||
dw $0688, $06b0, $0028, $069c, $7373, $0000, $0000, $0037
|
dw $0688, $06b0, $0028, $069c, $7373, $1804, $0000, $0037
|
||||||
dw $08d0, $08f0, $0020, $08e0, $7474, $0000, $0000, $0038
|
dw $08d0, $08f0, $0020, $08e0, $7474, $180e, $0000, $0038
|
||||||
dw $0a80, $0b40, $00c0, $0ae0, $7575, $0000, $0000, $0039
|
dw $0a80, $0b40, $00c0, $0ae0, $7575, $180c, $0000, $0039
|
||||||
dw $0d38, $0d58, $0020, $0d48, $7576, $0000, $0001, $003a
|
dw $0d38, $0d58, $0020, $0d48, $7576, $185a, $0001, $003a
|
||||||
dw $0d90, $0da0, $0010, $0d98, $7576, $0000, $0000, $003b
|
dw $0d90, $0da0, $0010, $0d98, $7576, $1860, $0000, $003b
|
||||||
dw $06a0, $07b0, $0110, $0728, $7b7b, $0000, $0000, $003c
|
dw $06a0, $07b0, $0110, $0728, $7b7b, $1816, $0000, $003c
|
||||||
dw $0830, $09b0, $0180, $08f0, $7c7c, $0000, $0000, $003d
|
dw $0830, $09b0, $0180, $08f0, $7c7c, $1810, $0000, $003d
|
||||||
dw $0e78, $0e88, $0010, $0e80, $7f7f, $0000, $0001, $003e
|
dw $0e78, $0e88, $0010, $0e80, $7f7f, $1802, $0001, $003e
|
||||||
dw $0ee0, $0fc0, $00e0, $0f50, $7f7f, $0000, $0000, $003f
|
dw $0ee0, $0fc0, $00e0, $0f50, $7f7f, $181c, $0000, $003f
|
||||||
OWSouthEdges:
|
OWSouthEdges:
|
||||||
dw $0458, $0540, $00e8, $04cc, $0202, $0000, $0000, $0001
|
dw $0458, $0540, $00e8, $04cc, $0202, $100a, $0000, $0001
|
||||||
dw $0058, $0058, $0000, $0058, $0008, $0000, $0000, $0003
|
dw $0058, $0058, $0000, $0058, $0008, $2000, $0000, $0003
|
||||||
dw $0178, $0178, $0000, $0178, $0008, $0000, $0000, $0004
|
dw $0178, $0178, $0000, $0178, $0008, $2020, $0000, $0004
|
||||||
dw $0388, $0388, $0000, $0388, $0009, $0000, $0000, $0005
|
dw $0388, $0388, $0000, $0388, $0009, $2060, $0000, $0005
|
||||||
dw $0480, $05b0, $0130, $0518, $0a0a, $0000, $0000, $0006
|
dw $0480, $05b0, $0130, $0518, $0a0a, $1012, $0000, $0006
|
||||||
dw $0f70, $0f90, $0020, $0f80, $0f0f, $0000, $0000, $0007
|
dw $0f70, $0f90, $0020, $0f80, $0f0f, $1020, $0000, $0007
|
||||||
dw $0078, $0098, $0020, $0088, $1010, $0000, $0000, $0008
|
dw $0078, $0098, $0020, $0088, $1010, $1002, $0000, $0008
|
||||||
dw $0138, $0158, $0020, $0148, $1010, $0000, $0000, $0009
|
dw $0138, $0158, $0020, $0148, $1010, $101a, $0000, $0009
|
||||||
dw $02e8, $0348, $0060, $0318, $1111, $0000, $0000, $000a
|
dw $02e8, $0348, $0060, $0318, $1111, $1014, $0000, $000a
|
||||||
dw $0478, $04d0, $0058, $04a4, $1212, $0000, $0000, $000b
|
dw $0478, $04d0, $0058, $04a4, $1212, $1006, $0000, $000b
|
||||||
dw $0510, $0538, $0028, $0524, $1212, $0000, $0000, $000c
|
dw $0510, $0538, $0028, $0524, $1212, $1016, $0000, $000c
|
||||||
dw $0a48, $0af0, $00a8, $0a9c, $1515, $0000, $0000, $000d
|
dw $0a48, $0af0, $00a8, $0a9c, $1515, $1004, $0000, $000d
|
||||||
dw $0b28, $0b38, $0010, $0b30, $1515, $0000, $0001, $000e
|
dw $0b28, $0b38, $0010, $0b30, $1515, $1018, $0001, $000e
|
||||||
dw $0b70, $0ba0, $0030, $0b88, $1515, $0000, $0000, $000f
|
dw $0b70, $0ba0, $0030, $0b88, $1515, $1020, $0000, $000f
|
||||||
dw $0a40, $0b10, $00d0, $0aa8, $1d1d, $0000, $0000, $0010
|
dw $0a40, $0b10, $00d0, $0aa8, $1d1d, $1006, $0000, $0010
|
||||||
dw $0350, $0390, $0040, $0370, $1821, $0000, $0000, $0011
|
dw $0350, $0390, $0040, $0370, $1821, $2060, $0000, $0011
|
||||||
dw $0670, $06a8, $0038, $068c, $1b23, $0000, $0000, $0012
|
dw $0670, $06a8, $0038, $068c, $1b23, $2002, $0000, $0012
|
||||||
dw $0898, $09b0, $0118, $0924, $1b24, $0000, $0000, $0013
|
dw $0898, $09b0, $0118, $0924, $1b24, $2054, $0000, $0013
|
||||||
dw $0a40, $0ba0, $0160, $0af0, $2525, $0000, $0000, $0014
|
dw $0a40, $0ba0, $0160, $0af0, $2525, $100e, $0000, $0014
|
||||||
dw $0c70, $0c90, $0020, $0c80, $1e26, $0000, $0000, $0015
|
dw $0c70, $0c90, $0020, $0c80, $1e26, $2002, $0000, $0015
|
||||||
dw $0f70, $0f80, $0010, $0f78, $1e27, $0000, $0000, $0016
|
dw $0f70, $0f80, $0010, $0f78, $1e27, $2060, $0000, $0016
|
||||||
dw $0430, $0468, $0038, $044c, $2a2a, $0000, $0000, $0017
|
dw $0430, $0468, $0038, $044c, $2a2a, $1000, $0000, $0017
|
||||||
dw $04d8, $04f8, $0020, $04e8, $2a2a, $0000, $0000, $0018
|
dw $04d8, $04f8, $0020, $04e8, $2a2a, $100c, $0000, $0018
|
||||||
dw $0688, $06b0, $0028, $069c, $2b2b, $0000, $0000, $0019
|
dw $0688, $06b0, $0028, $069c, $2b2b, $1004, $0000, $0019
|
||||||
dw $08d0, $08f0, $0020, $08e0, $2c2c, $0000, $0000, $001a
|
dw $08d0, $08f0, $0020, $08e0, $2c2c, $100e, $0000, $001a
|
||||||
dw $0a80, $0b40, $00c0, $0ae0, $2d2d, $0000, $0000, $001b
|
dw $0a80, $0b40, $00c0, $0ae0, $2d2d, $100c, $0000, $001b
|
||||||
dw $0d38, $0d58, $0020, $0d48, $2e2e, $0000, $0001, $001c
|
dw $0d38, $0d58, $0020, $0d48, $2e2e, $101a, $0001, $001c
|
||||||
dw $0d90, $0da0, $0010, $0d98, $2e2e, $0000, $0000, $001d
|
dw $0d90, $0da0, $0010, $0d98, $2e2e, $1020, $0000, $001d
|
||||||
dw $06a0, $07b0, $0110, $0728, $3333, $0000, $0000, $001e
|
dw $06a0, $07b0, $0110, $0728, $3333, $1016, $0000, $001e
|
||||||
dw $0830, $09b0, $0180, $08f0, $3434, $0000, $0000, $001f
|
dw $0830, $09b0, $0180, $08f0, $3434, $1010, $0000, $001f
|
||||||
dw $0e78, $0e88, $0010, $0e80, $3737, $0000, $0001, $0020
|
dw $0e78, $0e88, $0010, $0e80, $3737, $1002, $0001, $0020
|
||||||
dw $0ee0, $0fc0, $00e0, $0f50, $3737, $0000, $0000, $0021
|
dw $0ee0, $0fc0, $00e0, $0f50, $3737, $101c, $0000, $0021
|
||||||
dw $0458, $0540, $00e8, $04cc, $4242, $0000, $0000, $0022
|
dw $0458, $0540, $00e8, $04cc, $4242, $100a, $0000, $0022
|
||||||
dw $0058, $0058, $0000, $0058, $4048, $0000, $0000, $0023
|
dw $0058, $0058, $0000, $0058, $4048, $2000, $0000, $0023
|
||||||
dw $0178, $0178, $0000, $0178, $4048, $0000, $0000, $0024
|
dw $0178, $0178, $0000, $0178, $4048, $2020, $0000, $0024
|
||||||
dw $0388, $0388, $0000, $0388, $4049, $0000, $0000, $0025
|
dw $0388, $0388, $0000, $0388, $4049, $2060, $0000, $0025
|
||||||
dw $0480, $05b0, $0130, $0518, $4a4a, $0000, $0000, $0026
|
dw $0480, $05b0, $0130, $0518, $4a4a, $1012, $0000, $0026
|
||||||
dw $0f70, $0f90, $0020, $0f80, $4f4f, $0000, $0000, $0027
|
dw $0f70, $0f90, $0020, $0f80, $4f4f, $1020, $0000, $0027
|
||||||
dw $0078, $0098, $0020, $0088, $5050, $0000, $0000, $0028
|
dw $0078, $0098, $0020, $0088, $5050, $1002, $0000, $0028
|
||||||
dw $0138, $0158, $0020, $0148, $5050, $0000, $0000, $0029
|
dw $0138, $0158, $0020, $0148, $5050, $101a, $0000, $0029
|
||||||
dw $02e8, $0348, $0060, $0318, $5151, $0000, $0000, $002a
|
dw $02e8, $0348, $0060, $0318, $5151, $1014, $0000, $002a
|
||||||
dw $0478, $04d0, $0058, $04a4, $5252, $0000, $0000, $002b
|
dw $0478, $04d0, $0058, $04a4, $5252, $1006, $0000, $002b
|
||||||
dw $0510, $0538, $0028, $0524, $5252, $0000, $0000, $002c
|
dw $0510, $0538, $0028, $0524, $5252, $1016, $0000, $002c
|
||||||
dw $0a48, $0af0, $00a8, $0a9c, $5555, $0000, $0000, $002d
|
dw $0a48, $0af0, $00a8, $0a9c, $5555, $1004, $0000, $002d
|
||||||
dw $0b28, $0b38, $0010, $0b30, $5555, $0000, $0001, $002e
|
dw $0b28, $0b38, $0010, $0b30, $5555, $1018, $0001, $002e
|
||||||
dw $0b70, $0ba0, $0030, $0b88, $5555, $0000, $0000, $002f
|
dw $0b70, $0ba0, $0030, $0b88, $5555, $1020, $0000, $002f
|
||||||
dw $0a40, $0b10, $00d0, $0aa8, $5d5d, $0000, $0000, $0030
|
dw $0a40, $0b10, $00d0, $0aa8, $5d5d, $1006, $0000, $0030
|
||||||
dw $0350, $0390, $0040, $0370, $5861, $0000, $0000, $0031
|
dw $0350, $0390, $0040, $0370, $5861, $2060, $0000, $0031
|
||||||
dw $0670, $06a8, $0038, $068c, $5b63, $0000, $0000, $0032
|
dw $0670, $06a8, $0038, $068c, $5b63, $2002, $0000, $0032
|
||||||
dw $0898, $09b0, $0118, $0924, $5b64, $0000, $0000, $0033
|
dw $0898, $09b0, $0118, $0924, $5b64, $2054, $0000, $0033
|
||||||
dw $0a40, $0ba0, $0160, $0af0, $6565, $0000, $0000, $0034
|
dw $0a40, $0ba0, $0160, $0af0, $6565, $100e, $0000, $0034
|
||||||
dw $0c70, $0c90, $0020, $0c80, $5e66, $0000, $0000, $0035
|
dw $0c70, $0c90, $0020, $0c80, $5e66, $2002, $0000, $0035
|
||||||
dw $0f70, $0f80, $0010, $0f78, $5e67, $0000, $0000, $0036
|
dw $0f70, $0f80, $0010, $0f78, $5e67, $2060, $0000, $0036
|
||||||
dw $0430, $0468, $0038, $044c, $6a6a, $0000, $0000, $0037
|
dw $0430, $0468, $0038, $044c, $6a6a, $1000, $0000, $0037
|
||||||
dw $04d8, $04f8, $0020, $04e8, $6a6a, $0000, $0000, $0038
|
dw $04d8, $04f8, $0020, $04e8, $6a6a, $100c, $0000, $0038
|
||||||
dw $0688, $06b0, $0028, $069c, $6b6b, $0000, $0000, $0039
|
dw $0688, $06b0, $0028, $069c, $6b6b, $1004, $0000, $0039
|
||||||
dw $08d0, $08f0, $0020, $08e0, $6c6c, $0000, $0000, $003a
|
dw $08d0, $08f0, $0020, $08e0, $6c6c, $100e, $0000, $003a
|
||||||
dw $0a80, $0b40, $00c0, $0ae0, $6d6d, $0000, $0000, $003b
|
dw $0a80, $0b40, $00c0, $0ae0, $6d6d, $100c, $0000, $003b
|
||||||
dw $0d38, $0d58, $0020, $0d48, $6e6e, $0000, $0001, $003c
|
dw $0d38, $0d58, $0020, $0d48, $6e6e, $101a, $0001, $003c
|
||||||
dw $0d90, $0da0, $0010, $0d98, $6e6e, $0000, $0000, $003d
|
dw $0d90, $0da0, $0010, $0d98, $6e6e, $1020, $0000, $003d
|
||||||
dw $06a0, $07b0, $0110, $0728, $7373, $0000, $0000, $003e
|
dw $06a0, $07b0, $0110, $0728, $7373, $1016, $0000, $003e
|
||||||
dw $0830, $09b0, $0180, $08f0, $7474, $0000, $0000, $003f
|
dw $0830, $09b0, $0180, $08f0, $7474, $1010, $0000, $003f
|
||||||
dw $0e78, $0e88, $0010, $0e80, $7777, $0000, $0001, $0040
|
dw $0e78, $0e88, $0010, $0e80, $7777, $1002, $0001, $0040
|
||||||
dw $0ee0, $0fc0, $00e0, $0f50, $7777, $0000, $0000, $0041
|
dw $0ee0, $0fc0, $00e0, $0f50, $7777, $101c, $0000, $0041
|
||||||
dw $0080, $0080, $0000, $0080, $8080, $0000, $0000, $0000 ;Pedestal (unused)
|
dw $0080, $0080, $0000, $0080, $8080, $0000, $0000, $0000 ;Pedestal (unused)
|
||||||
dw $0288, $02c0, $0038, $02a4, $8189, $0000, $0000, $0002 ;Zora (unused)
|
dw $0288, $02c0, $0038, $02a4, $8189, $1782, $0000, $0002 ;Zora (unused)
|
||||||
OWWestEdges:
|
OWWestEdges:
|
||||||
dw $0070, $00a0, $0030, $0088, $0202, $0000, $0000, $0000
|
dw $0070, $00a0, $0030, $0088, $0202, $00e0, $0000, $0000
|
||||||
dw $0068, $0078, $0010, $0070, $0505, $0000, $0000, $0001
|
dw $0068, $0078, $0010, $0070, $0505, $0060, $0000, $0001
|
||||||
dw $0068, $0088, $0020, $0078, $0707, $0000, $0000, $0002
|
dw $0068, $0088, $0020, $0078, $0707, $00e0, $0000, $0002
|
||||||
dw $0318, $0368, $0050, $0340, $050d, $0000, $0000, $0003
|
dw $0318, $0368, $0050, $0340, $050d, $1660, $0000, $0003
|
||||||
dw $0450, $0488, $0038, $046c, $1212, $0000, $0000, $0004
|
dw $0450, $0488, $0038, $046c, $1212, $00e0, $0000, $0004
|
||||||
dw $0560, $05a0, $0040, $0580, $1212, $0000, $0000, $0005
|
dw $0560, $05a0, $0040, $0580, $1212, $08e0, $0000, $0005
|
||||||
dw $0488, $0500, $0078, $04c4, $1313, $0000, $0000, $0006
|
dw $0488, $0500, $0078, $04c4, $1313, $0360, $0000, $0006
|
||||||
dw $0538, $05a8, $0070, $0570, $1313, $0000, $0000, $0007
|
dw $0538, $05a8, $0070, $0570, $1313, $08e0, $0000, $0007
|
||||||
dw $0470, $05a8, $0138, $050c, $1414, $0000, $0000, $0008
|
dw $0470, $05a8, $0138, $050c, $1414, $04e0, $0000, $0008
|
||||||
dw $0470, $0598, $0128, $0504, $1515, $0000, $0000, $0009
|
dw $0470, $0598, $0128, $0504, $1515, $04e0, $0000, $0009
|
||||||
dw $0480, $0488, $0008, $0484, $1616, $0000, $0001, $000a
|
dw $0480, $0488, $0008, $0484, $1616, $01e0, $0001, $000a
|
||||||
dw $04b0, $0510, $0060, $04e0, $1616, $0000, $0000, $000b
|
dw $04b0, $0510, $0060, $04e0, $1616, $04e0, $0000, $000b
|
||||||
dw $0560, $0588, $0028, $0574, $1616, $0000, $0000, $000c
|
dw $0560, $0588, $0028, $0574, $1616, $08e0, $0000, $000c
|
||||||
dw $0450, $0458, $0008, $0454, $1717, $0000, $0001, $000d
|
dw $0450, $0458, $0008, $0454, $1717, $00e0, $0001, $000d
|
||||||
dw $0480, $04a8, $0028, $0494, $1717, $0000, $0000, $000e
|
dw $0480, $04a8, $0028, $0494, $1717, $01e0, $0000, $000e
|
||||||
dw $0718, $0738, $0020, $0728, $1b1b, $0000, $0000, $000f
|
dw $0718, $0738, $0020, $0728, $1b1b, $06e0, $0000, $000f
|
||||||
dw $0908, $0948, $0040, $0928, $2222, $0000, $0000, $0010
|
dw $0908, $0948, $0040, $0928, $2222, $05e0, $0000, $0010
|
||||||
dw $0878, $08a8, $0030, $0890, $2525, $0000, $0000, $0011
|
dw $0878, $08a8, $0030, $0890, $2525, $01e0, $0000, $0011
|
||||||
dw $0bb8, $0bc8, $0010, $0bc0, $2929, $0000, $0000, $0012
|
dw $0bb8, $0bc8, $0010, $0bc0, $2929, $0960, $0000, $0012
|
||||||
dw $0b60, $0ba0, $0040, $0b80, $2a2a, $0000, $0000, $0013
|
dw $0b60, $0ba0, $0040, $0b80, $2a2a, $0960, $0000, $0013
|
||||||
dw $0ab0, $0ad0, $0020, $0ac0, $2c2c, $0000, $0000, $0014
|
dw $0ab0, $0ad0, $0020, $0ac0, $2c2c, $0360, $0000, $0014
|
||||||
dw $0af0, $0b40, $0050, $0b18, $2c2c, $0000, $0000, $0015
|
dw $0af0, $0b40, $0050, $0b18, $2c2c, $05e0, $0000, $0015
|
||||||
dw $0b78, $0ba0, $0028, $0b8c, $2c2c, $0000, $0000, $0016
|
dw $0b78, $0ba0, $0028, $0b8c, $2c2c, $08a0, $0000, $0016
|
||||||
dw $0b10, $0b28, $0018, $0b1c, $2d2d, $0000, $0001, $604a ;Stone Bridge (exit only)
|
dw $0b10, $0b28, $0018, $0b1c, $2d2d, $061c, $0001, $604a ;Stone Bridge (exit only)
|
||||||
dw $0b68, $0b98, $0030, $0b80, $2d2d, $0000, $0000, $0017
|
dw $0b68, $0b98, $0030, $0b80, $2d2d, $08e0, $0000, $0017
|
||||||
dw $0a68, $0ab8, $0050, $0a90, $2e2e, $0000, $0000, $0018
|
dw $0a68, $0ab8, $0050, $0a90, $2e2e, $01e0, $0000, $0018
|
||||||
dw $0b00, $0b78, $0078, $0b3c, $2e2e, $0000, $0001, $0019
|
dw $0b00, $0b78, $0078, $0b3c, $2e2e, $0660, $0001, $0019
|
||||||
dw $0c50, $0db8, $0168, $0d04, $3333, $0000, $0000, $001a
|
dw $0c50, $0db8, $0168, $0d04, $3333, $05e0, $0000, $001a
|
||||||
dw $0c78, $0ce3, $006b, $0cad, $3434, $0000, $0000, $001b
|
dw $0c78, $0ce3, $006b, $0cad, $3434, $02e0, $0000, $001b
|
||||||
dw $0ce4, $0d33, $004f, $0d0b, $3434, $0000, $0001, $001c
|
dw $0ce4, $0d33, $004f, $0d0b, $3434, $05e0, $0001, $001c
|
||||||
dw $0d34, $0db8, $0084, $0d76, $3434, $0000, $0000, $001d
|
dw $0d34, $0db8, $0084, $0d76, $3434, $08e0, $0000, $001d
|
||||||
dw $0ea8, $0f20, $0078, $0ee4, $3a3a, $0000, $0000, $001e
|
dw $0ea8, $0f20, $0078, $0ee4, $3a3a, $03e0, $0000, $001e
|
||||||
dw $0f78, $0fa8, $0030, $0f90, $3a3a, $0000, $0000, $001f
|
dw $0f78, $0fa8, $0030, $0f90, $3a3a, $0860, $0000, $001f
|
||||||
dw $0f18, $0f18, $0000, $0f18, $3b3b, $0000, $0000, $0020
|
dw $0f18, $0f18, $0000, $0f18, $3b3b, $0660, $0000, $0020
|
||||||
dw $0fc8, $0fc8, $0000, $0fc8, $3b3b, $0000, $0000, $0021
|
dw $0fc8, $0fc8, $0000, $0fc8, $3b3b, $08e0, $0000, $0021
|
||||||
dw $0e28, $0fb8, $0190, $0ef0, $3c3c, $0000, $0000, $0022
|
dw $0e28, $0fb8, $0190, $0ef0, $3c3c, $04e0, $0000, $0022
|
||||||
dw $0f78, $0fb8, $0040, $0f98, $353d, $0000, $0000, $0023
|
dw $0f78, $0fb8, $0040, $0f98, $353d, $1860, $0000, $0023
|
||||||
dw $0f20, $0f40, $0020, $0f30, $3f3f, $0000, $0001, $0024
|
dw $0f20, $0f40, $0020, $0f30, $3f3f, $05e0, $0001, $0024
|
||||||
dw $0f70, $0fb8, $0048, $0f94, $3f3f, $0000, $0000, $0025
|
dw $0f70, $0fb8, $0048, $0f94, $3f3f, $0860, $0000, $0025
|
||||||
dw $0070, $00a0, $0030, $0088, $4242, $0000, $0000, $0026
|
dw $0070, $00a0, $0030, $0088, $4242, $00e0, $0000, $0026
|
||||||
dw $0068, $0078, $0010, $0070, $4545, $0000, $0000, $0027
|
dw $0068, $0078, $0010, $0070, $4545, $0060, $0000, $0027
|
||||||
dw $0068, $0088, $0020, $0078, $4747, $0000, $0000, $0028
|
dw $0068, $0088, $0020, $0078, $4747, $00e0, $0000, $0028
|
||||||
dw $0318, $0368, $0050, $0340, $454d, $0000, $0000, $0029
|
dw $0318, $0368, $0050, $0340, $454d, $1660, $0000, $0029
|
||||||
dw $0450, $0488, $0038, $046c, $5252, $0000, $0000, $002a
|
dw $0450, $0488, $0038, $046c, $5252, $00e0, $0000, $002a
|
||||||
dw $0560, $05a0, $0040, $0580, $5252, $0000, $0000, $002b
|
dw $0560, $05a0, $0040, $0580, $5252, $08e0, $0000, $002b
|
||||||
dw $0488, $0500, $0078, $04c4, $5353, $0000, $0000, $002c
|
dw $0488, $0500, $0078, $04c4, $5353, $0360, $0000, $002c
|
||||||
dw $0538, $05a8, $0070, $0570, $5353, $0000, $0000, $002d
|
dw $0538, $05a8, $0070, $0570, $5353, $08e0, $0000, $002d
|
||||||
dw $0470, $05a8, $0138, $050c, $5454, $0000, $0000, $002e
|
dw $0470, $05a8, $0138, $050c, $5454, $04e0, $0000, $002e
|
||||||
dw $0470, $0598, $0128, $0504, $5555, $0000, $0000, $002f
|
dw $0470, $0598, $0128, $0504, $5555, $04e0, $0000, $002f
|
||||||
dw $0480, $0488, $0008, $0484, $5656, $0000, $0001, $0030
|
dw $0480, $0488, $0008, $0484, $5656, $01e0, $0001, $0030
|
||||||
dw $04b0, $0510, $0060, $04e0, $5656, $0000, $0000, $0031
|
dw $04b0, $0510, $0060, $04e0, $5656, $04e0, $0000, $0031
|
||||||
dw $0560, $0588, $0028, $0574, $5656, $0000, $0000, $0032
|
dw $0560, $0588, $0028, $0574, $5656, $08e0, $0000, $0032
|
||||||
dw $0450, $0458, $0008, $0454, $5757, $0000, $0001, $0033
|
dw $0450, $0458, $0008, $0454, $5757, $00e0, $0001, $0033
|
||||||
dw $0480, $04a8, $0028, $0494, $5757, $0000, $0000, $0034
|
dw $0480, $04a8, $0028, $0494, $5757, $01e0, $0000, $0034
|
||||||
dw $0908, $0948, $0040, $0928, $6262, $0000, $0000, $0035
|
dw $0908, $0948, $0040, $0928, $6262, $05e0, $0000, $0035
|
||||||
dw $0878, $08a8, $0030, $0890, $6565, $0000, $0000, $0036
|
dw $0878, $08a8, $0030, $0890, $6565, $01e0, $0000, $0036
|
||||||
dw $0b60, $0b68, $0008, $0b64, $6969, $0000, $0000, $0037
|
dw $0b60, $0b68, $0008, $0b64, $6969, $08e0, $0000, $0037
|
||||||
dw $0bb8, $0bc8, $0010, $0bc0, $6969, $0000, $0000, $0038
|
dw $0bb8, $0bc8, $0010, $0bc0, $6969, $0960, $0000, $0038
|
||||||
dw $0b60, $0ba0, $0040, $0b80, $6a6a, $0000, $0000, $0039
|
dw $0b60, $0ba0, $0040, $0b80, $6a6a, $0960, $0000, $0039
|
||||||
dw $0ab0, $0ad0, $0020, $0ac0, $6c6c, $0000, $0000, $003a
|
dw $0ab0, $0ad0, $0020, $0ac0, $6c6c, $0360, $0000, $003a
|
||||||
dw $0af0, $0b40, $0050, $0b18, $6c6c, $0000, $0000, $003b
|
dw $0af0, $0b40, $0050, $0b18, $6c6c, $05e0, $0000, $003b
|
||||||
dw $0b78, $0ba0, $0028, $0b8c, $6c6c, $0000, $0000, $003c
|
dw $0b78, $0ba0, $0028, $0b8c, $6c6c, $08a0, $0000, $003c
|
||||||
dw $0b68, $0b98, $0030, $0b80, $6d6d, $0000, $0000, $003d
|
dw $0b68, $0b98, $0030, $0b80, $6d6d, $08e0, $0000, $003d
|
||||||
dw $0a68, $0ab8, $0050, $0a90, $6e6e, $0000, $0000, $003e
|
dw $0a68, $0ab8, $0050, $0a90, $6e6e, $01e0, $0000, $003e
|
||||||
dw $0b00, $0b78, $0078, $0b3c, $6e6e, $0000, $0001, $003f
|
dw $0b00, $0b78, $0078, $0b3c, $6e6e, $0660, $0001, $003f
|
||||||
dw $0c50, $0db8, $0168, $0d04, $7373, $0000, $0000, $0040
|
dw $0c50, $0db8, $0168, $0d04, $7373, $05e0, $0000, $0040
|
||||||
dw $0c78, $0ce3, $006b, $0cad, $7474, $0000, $0000, $0041
|
dw $0c78, $0ce3, $006b, $0cad, $7474, $02e0, $0000, $0041
|
||||||
dw $0ce4, $0d33, $004f, $0d0b, $7474, $0000, $0001, $0042
|
dw $0ce4, $0d33, $004f, $0d0b, $7474, $05e0, $0001, $0042
|
||||||
dw $0d34, $0db8, $0084, $0d76, $7474, $0000, $0000, $0043
|
dw $0d34, $0db8, $0084, $0d76, $7474, $08e0, $0000, $0043
|
||||||
dw $0f18, $0f18, $0000, $0f18, $7b7b, $0000, $0000, $0044
|
dw $0f18, $0f18, $0000, $0f18, $7b7b, $0660, $0000, $0044
|
||||||
dw $0fc8, $0fc8, $0000, $0fc8, $7b7b, $0000, $0000, $0045
|
dw $0fc8, $0fc8, $0000, $0fc8, $7b7b, $08e0, $0000, $0045
|
||||||
dw $0e28, $0fb8, $0190, $0ef0, $7c7c, $0000, $0000, $0046
|
dw $0e28, $0fb8, $0190, $0ef0, $7c7c, $04e0, $0000, $0046
|
||||||
dw $0f78, $0fb8, $0040, $0f98, $757d, $0000, $0000, $0047
|
dw $0f78, $0fb8, $0040, $0f98, $757d, $1860, $0000, $0047
|
||||||
dw $0f20, $0f40, $0020, $0f30, $7f7f, $0000, $0001, $0048
|
dw $0f20, $0f40, $0020, $0f30, $7f7f, $05e0, $0001, $0048
|
||||||
dw $0f70, $0fb8, $0048, $0f94, $7f7f, $0000, $0000, $0049
|
dw $0f70, $0fb8, $0048, $0f94, $7f7f, $0860, $0000, $0049
|
||||||
OWEastEdges:
|
OWEastEdges:
|
||||||
dw $0070, $00a0, $0030, $0088, $0001, $0000, $0000, $0000
|
dw $0070, $00a0, $0030, $0088, $0001, $0180, $0000, $0000
|
||||||
dw $0068, $0078, $0010, $0070, $0304, $0000, $0000, $0001
|
dw $0068, $0078, $0010, $0070, $0304, $0180, $0000, $0001
|
||||||
dw $0068, $0088, $0020, $0078, $0506, $0000, $0000, $0002
|
dw $0068, $0088, $0020, $0078, $0506, $0180, $0000, $0002
|
||||||
dw $0318, $0368, $0050, $0340, $030c, $0000, $0000, $0003
|
dw $0318, $0368, $0050, $0340, $030c, $1780, $0000, $0003
|
||||||
dw $0450, $0488, $0038, $046c, $1111, $0000, $0000, $0004
|
dw $0450, $0488, $0038, $046c, $1111, $00c0, $0000, $0004
|
||||||
dw $0560, $05a0, $0040, $0580, $1111, $0000, $0000, $0005
|
dw $0560, $05a0, $0040, $0580, $1111, $08c0, $0000, $0005
|
||||||
dw $0488, $0500, $0078, $04c4, $1212, $0000, $0000, $0006
|
dw $0488, $0500, $0078, $04c4, $1212, $0340, $0000, $0006
|
||||||
dw $0538, $05a8, $0070, $0570, $1212, $0000, $0000, $0007
|
dw $0538, $05a8, $0070, $0570, $1212, $08c0, $0000, $0007
|
||||||
dw $0470, $05a8, $0138, $050c, $1313, $0000, $0000, $0008
|
dw $0470, $05a8, $0138, $050c, $1313, $04c0, $0000, $0008
|
||||||
dw $0470, $0598, $0128, $0504, $1414, $0000, $0000, $0009
|
dw $0470, $0598, $0128, $0504, $1414, $04c0, $0000, $0009
|
||||||
dw $0480, $0488, $0008, $0484, $1515, $0000, $0001, $000a
|
dw $0480, $0488, $0008, $0484, $1515, $01c0, $0001, $000a
|
||||||
dw $04b0, $0510, $0060, $04e0, $1515, $0000, $0000, $000b
|
dw $04b0, $0510, $0060, $04e0, $1515, $04c0, $0000, $000b
|
||||||
dw $0560, $0588, $0028, $0574, $1515, $0000, $0000, $000c
|
dw $0560, $0588, $0028, $0574, $1515, $08c0, $0000, $000c
|
||||||
dw $0450, $0458, $0008, $0454, $1616, $0000, $0001, $000d
|
dw $0450, $0458, $0008, $0454, $1616, $00c0, $0001, $000d
|
||||||
dw $0480, $04a8, $0028, $0494, $1616, $0000, $0000, $000e
|
dw $0480, $04a8, $0028, $0494, $1616, $01c0, $0000, $000e
|
||||||
dw $0718, $0738, $0020, $0728, $1a1a, $0000, $0000, $000f
|
dw $0718, $0738, $0020, $0728, $1a1a, $06c0, $0000, $000f
|
||||||
dw $0908, $0948, $0040, $0928, $1821, $0000, $0000, $0010
|
dw $0908, $0948, $0040, $0928, $1821, $1680, $0000, $0010
|
||||||
dw $0878, $08a8, $0030, $0890, $1b24, $0000, $0000, $0011
|
dw $0878, $08a8, $0030, $0890, $1b24, $1280, $0000, $0011
|
||||||
dw $0bb8, $0bc8, $0010, $0bc0, $2828, $0000, $0000, $0012 ;Race Game
|
dw $0bb8, $0bc8, $0010, $0bc0, $2828, $0940, $0000, $0012 ;Race Game
|
||||||
dw $0b60, $0ba0, $0040, $0b80, $2929, $0000, $0000, $0013
|
dw $0b60, $0ba0, $0040, $0b80, $2929, $0940, $0000, $0013
|
||||||
dw $0ab0, $0ad0, $0020, $0ac0, $2b2b, $0000, $0000, $0014
|
dw $0ab0, $0ad0, $0020, $0ac0, $2b2b, $0340, $0000, $0014
|
||||||
dw $0af0, $0b40, $0050, $0b18, $2b2b, $0000, $0000, $0015
|
dw $0af0, $0b40, $0050, $0b18, $2b2b, $05c0, $0000, $0015
|
||||||
dw $0b78, $0ba0, $0028, $0b8c, $2b2b, $0000, $0000, $0016
|
dw $0b78, $0ba0, $0028, $0b8c, $2b2b, $08c0, $0000, $0016
|
||||||
dw $0b68, $0b98, $0030, $0b80, $2c2c, $0000, $0000, $0018
|
dw $0b68, $0b98, $0030, $0b80, $2c2c, $08c0, $0000, $0018
|
||||||
dw $0a68, $0ab8, $0050, $0a90, $2d2d, $0000, $0000, $0019
|
dw $0a68, $0ab8, $0050, $0a90, $2d2d, $01c0, $0000, $0019
|
||||||
dw $0b00, $0b78, $0078, $0b3c, $2d2d, $0000, $0001, $001a
|
dw $0b00, $0b78, $0078, $0b3c, $2d2d, $0640, $0001, $001a
|
||||||
dw $0c50, $0db8, $0168, $0d04, $3232, $0000, $0000, $001b
|
dw $0c50, $0db8, $0168, $0d04, $3232, $05c0, $0000, $001b
|
||||||
dw $0c78, $0ce3, $006b, $0cad, $3333, $0000, $0000, $001c
|
dw $0c78, $0ce3, $006b, $0cad, $3333, $02c0, $0000, $001c
|
||||||
dw $0ce4, $0d33, $004f, $0d0b, $3333, $0000, $0001, $001d
|
dw $0ce4, $0d33, $004f, $0d0b, $3333, $05c0, $0001, $001d
|
||||||
dw $0d34, $0db8, $0084, $0d76, $3333, $0000, $0000, $001e
|
dw $0d34, $0db8, $0084, $0d76, $3333, $08c0, $0000, $001e
|
||||||
dw $0ea8, $0f20, $0078, $0ee4, $3039, $0000, $0000, $001f
|
dw $0ea8, $0f20, $0078, $0ee4, $3039, $1480, $0000, $001f
|
||||||
dw $0f78, $0fa8, $0030, $0f90, $3039, $0000, $0000, $0020
|
dw $0f78, $0fa8, $0030, $0f90, $3039, $1980, $0000, $0020
|
||||||
dw $0f18, $0f18, $0000, $0f18, $3a3a, $0000, $0000, $0021
|
dw $0f18, $0f18, $0000, $0f18, $3a3a, $0640, $0000, $0021
|
||||||
dw $0fc8, $0fc8, $0000, $0fc8, $3a3a, $0000, $0000, $0022
|
dw $0fc8, $0fc8, $0000, $0fc8, $3a3a, $08c0, $0000, $0022
|
||||||
dw $0e28, $0fb8, $0190, $0ef0, $3b3b, $0000, $0000, $0023
|
dw $0e28, $0fb8, $0190, $0ef0, $3b3b, $04c0, $0000, $0023
|
||||||
dw $0f78, $0fb8, $0040, $0f98, $3c3c, $0000, $0000, $0024
|
dw $0f78, $0fb8, $0040, $0f98, $3c3c, $08c0, $0000, $0024
|
||||||
dw $0f20, $0f40, $0020, $0f30, $353e, $0000, $0001, $0025
|
dw $0f20, $0f40, $0020, $0f30, $353e, $1680, $0001, $0025
|
||||||
dw $0f70, $0fb8, $0048, $0f94, $353e, $0000, $0000, $0026
|
dw $0f70, $0fb8, $0048, $0f94, $353e, $1880, $0000, $0026
|
||||||
dw $0070, $00a0, $0030, $0088, $4041, $0000, $0000, $0027 ;Skull Woods
|
dw $0070, $00a0, $0030, $0088, $4041, $0180, $0000, $0027 ;Skull Woods
|
||||||
dw $0068, $0078, $0010, $0070, $4344, $0000, $0000, $0028
|
dw $0068, $0078, $0010, $0070, $4344, $0180, $0000, $0028
|
||||||
dw $0068, $0088, $0020, $0078, $4546, $0000, $0000, $0029
|
dw $0068, $0088, $0020, $0078, $4546, $0180, $0000, $0029
|
||||||
dw $0318, $0368, $0050, $0340, $434c, $0000, $0000, $002a
|
dw $0318, $0368, $0050, $0340, $434c, $1780, $0000, $002a
|
||||||
dw $0450, $0488, $0038, $046c, $5151, $0000, $0000, $002b
|
dw $0450, $0488, $0038, $046c, $5151, $00c0, $0000, $002b
|
||||||
dw $0560, $05a0, $0040, $0580, $5151, $0000, $0000, $002c
|
dw $0560, $05a0, $0040, $0580, $5151, $08c0, $0000, $002c
|
||||||
dw $0488, $0500, $0078, $04c4, $5252, $0000, $0000, $002d
|
dw $0488, $0500, $0078, $04c4, $5252, $0340, $0000, $002d
|
||||||
dw $0538, $05a8, $0070, $0570, $5252, $0000, $0000, $002e
|
dw $0538, $05a8, $0070, $0570, $5252, $08c0, $0000, $002e
|
||||||
dw $0470, $05a8, $0138, $050c, $5353, $0000, $0000, $002f
|
dw $0470, $05a8, $0138, $050c, $5353, $04c0, $0000, $002f
|
||||||
dw $0470, $0598, $0128, $0504, $5454, $0000, $0000, $0030
|
dw $0470, $0598, $0128, $0504, $5454, $04c0, $0000, $0030
|
||||||
dw $0480, $0488, $0008, $0484, $5555, $0000, $0001, $0031
|
dw $0480, $0488, $0008, $0484, $5555, $01c0, $0001, $0031
|
||||||
dw $04b0, $0510, $0060, $04e0, $5555, $0000, $0000, $0032
|
dw $04b0, $0510, $0060, $04e0, $5555, $04c0, $0000, $0032
|
||||||
dw $0560, $0588, $0028, $0574, $5555, $0000, $0000, $0033
|
dw $0560, $0588, $0028, $0574, $5555, $08c0, $0000, $0033
|
||||||
dw $0450, $0458, $0008, $0454, $5656, $0000, $0001, $0034
|
dw $0450, $0458, $0008, $0454, $5656, $00c0, $0001, $0034
|
||||||
dw $0480, $04a8, $0028, $0494, $5656, $0000, $0000, $0035
|
dw $0480, $04a8, $0028, $0494, $5656, $01c0, $0000, $0035
|
||||||
dw $0908, $0948, $0040, $0928, $5861, $0000, $0000, $0036
|
dw $0908, $0948, $0040, $0928, $5861, $1680, $0000, $0036
|
||||||
dw $0878, $08a8, $0030, $0890, $5b64, $0000, $0000, $0037
|
dw $0878, $08a8, $0030, $0890, $5b64, $1280, $0000, $0037
|
||||||
dw $0b60, $0b68, $0008, $0b64, $6868, $0000, $0000, $0038 ;Dig Game
|
dw $0b60, $0b68, $0008, $0b64, $6868, $08c0, $0000, $0038 ;Dig Game
|
||||||
dw $0bb8, $0bc8, $0010, $0bc0, $6868, $0000, $0000, $0039
|
dw $0bb8, $0bc8, $0010, $0bc0, $6868, $0940, $0000, $0039
|
||||||
dw $0b60, $0ba0, $0040, $0b80, $6969, $0000, $0000, $003a
|
dw $0b60, $0ba0, $0040, $0b80, $6969, $0940, $0000, $003a
|
||||||
dw $0ab0, $0ad0, $0020, $0ac0, $6b6b, $0000, $0000, $003b
|
dw $0ab0, $0ad0, $0020, $0ac0, $6b6b, $0340, $0000, $003b
|
||||||
dw $0af0, $0b40, $0050, $0b18, $6b6b, $0000, $0000, $003c
|
dw $0af0, $0b40, $0050, $0b18, $6b6b, $05c0, $0000, $003c
|
||||||
dw $0b78, $0ba0, $0028, $0b8c, $6b6b, $0000, $0000, $003d
|
dw $0b78, $0ba0, $0028, $0b8c, $6b6b, $08c0, $0000, $003d
|
||||||
dw $0b68, $0b98, $0030, $0b80, $6c6c, $0000, $0000, $003e
|
dw $0b68, $0b98, $0030, $0b80, $6c6c, $08c0, $0000, $003e
|
||||||
dw $0a68, $0ab8, $0050, $0a90, $6d6d, $0000, $0000, $003f
|
dw $0a68, $0ab8, $0050, $0a90, $6d6d, $01c0, $0000, $003f
|
||||||
dw $0b00, $0b78, $0078, $0b3c, $6d6d, $0000, $0001, $0040
|
dw $0b00, $0b78, $0078, $0b3c, $6d6d, $0640, $0001, $0040
|
||||||
dw $0c50, $0db8, $0168, $0d04, $7272, $0000, $0000, $0041
|
dw $0c50, $0db8, $0168, $0d04, $7272, $05c0, $0000, $0041
|
||||||
dw $0c78, $0ce3, $006b, $0cad, $7373, $0000, $0000, $0042
|
dw $0c78, $0ce3, $006b, $0cad, $7373, $02c0, $0000, $0042
|
||||||
dw $0ce4, $0d33, $004f, $0d0b, $7373, $0000, $0001, $0043
|
dw $0ce4, $0d33, $004f, $0d0b, $7373, $05c0, $0001, $0043
|
||||||
dw $0d34, $0db8, $0084, $0d76, $7373, $0000, $0000, $0044
|
dw $0d34, $0db8, $0084, $0d76, $7373, $08c0, $0000, $0044
|
||||||
dw $0f18, $0f18, $0000, $0f18, $7a7a, $0000, $0000, $0045
|
dw $0f18, $0f18, $0000, $0f18, $7a7a, $0640, $0000, $0045
|
||||||
dw $0fc8, $0fc8, $0000, $0fc8, $7a7a, $0000, $0000, $0046
|
dw $0fc8, $0fc8, $0000, $0fc8, $7a7a, $08c0, $0000, $0046
|
||||||
dw $0e28, $0fb8, $0190, $0ef0, $7b7b, $0000, $0000, $0047
|
dw $0e28, $0fb8, $0190, $0ef0, $7b7b, $04c0, $0000, $0047
|
||||||
dw $0f78, $0fb8, $0040, $0f98, $7c7c, $0000, $0000, $0048
|
dw $0f78, $0fb8, $0040, $0f98, $7c7c, $08c0, $0000, $0048
|
||||||
dw $0f20, $0f40, $0020, $0f30, $757e, $0000, $0001, $0049
|
dw $0f20, $0f40, $0020, $0f30, $757e, $1680, $0001, $0049
|
||||||
dw $0f70, $0fb8, $0048, $0f94, $757e, $0000, $0000, $004a
|
dw $0f70, $0fb8, $0048, $0f94, $757e, $1880, $0000, $004a
|
||||||
dw $0058, $00c0, $0068, $008c, $8080, $0000, $0001, $0017 ;Hobo (unused)
|
dw $0058, $00c0, $0068, $008c, $8080, $0020, $0001, $0017 ;Hobo (unused)
|
||||||
|
|
||||||
org $aab9a0 ;PC 1539a0
|
org $aab9a0 ;PC 1539a0
|
||||||
OWSpecialDestIndex:
|
OWSpecialDestIndex:
|
||||||
|
|||||||
17
ram.asm
17
ram.asm
@@ -272,6 +272,8 @@ DungeonID = $7E040C ; High byte mostly unused but sometimes read.
|
|||||||
;
|
;
|
||||||
TransitionDirection = $7E0418 ; OW: 0=N 1=S 2=W 3=E UW: 0=S 1=N 2=E 3=W
|
TransitionDirection = $7E0418 ; OW: 0=N 1=S 2=W 3=E UW: 0=S 1=N 2=E 3=W
|
||||||
;
|
;
|
||||||
|
ManipIndex = $7E042C ; Index of manipulable tile. Word length.
|
||||||
|
;
|
||||||
TrapDoorFlag = $7E0468 ; Flag that is set when trap doors are down. 2 bytes
|
TrapDoorFlag = $7E0468 ; Flag that is set when trap doors are down. 2 bytes
|
||||||
;
|
;
|
||||||
LayerAdjustment = $7E047A ; Flags layer adjustments. Arms EG.
|
LayerAdjustment = $7E047A ; Flags layer adjustments. Arms EG.
|
||||||
@@ -285,6 +287,8 @@ OWEntranceCutscene = $7E04C6 ;
|
|||||||
;
|
;
|
||||||
HeartBeepTimer = $7E04CA ;
|
HeartBeepTimer = $7E04CA ;
|
||||||
;
|
;
|
||||||
|
ManipTileMapX = $7E0540 ; Tilemap X position of manipulable tile. $10 x 2 bytes
|
||||||
|
;
|
||||||
CameraTargetN = $7E0610 ; Camera scroll target for directions NSEW
|
CameraTargetN = $7E0610 ; Camera scroll target for directions NSEW
|
||||||
CameraTargetS = $7E0612 ;
|
CameraTargetS = $7E0612 ;
|
||||||
CameraTargetW = $7E0614 ;
|
CameraTargetW = $7E0614 ;
|
||||||
@@ -326,7 +330,7 @@ SpawnedItemFlag = $7E0726 ; 0x02 - one for pot, 2 for sprite drop
|
|||||||
SpawnedItemMWPlayer = $7E0728 ; Player Id for spawned item if Multiworld item 0x02
|
SpawnedItemMWPlayer = $7E0728 ; Player Id for spawned item if Multiworld item 0x02
|
||||||
;
|
;
|
||||||
EnemyDropIndicator = $7E072A ; Used by HUD to indicate enemy drops remaining
|
EnemyDropIndicator = $7E072A ; Used by HUD to indicate enemy drops remaining
|
||||||
SkipBeeTrapDisguise = $7E072C ; Flag to skip bee trap disguise during draw routine
|
SkipBeeTrapDisguise = $7E072D ; Flag to skip bee trap disguise during draw routine
|
||||||
|
|
||||||
SprDropsItem = $7E0730 ; Array for whether a sprite drops an item 0x16
|
SprDropsItem = $7E0730 ; Array for whether a sprite drops an item 0x16
|
||||||
SprItemReceipt = $7E0740 ; Array for item id for each sprite 0x16
|
SprItemReceipt = $7E0740 ; Array for item id for each sprite 0x16
|
||||||
@@ -348,6 +352,8 @@ TransparencyFlag = $7E0ABD ; Flags transparency effects e.g. in Thieves T
|
|||||||
;
|
;
|
||||||
OWTransitionFlag = $7E0ABF ; Used for certain transitions like smith, witch, etc.
|
OWTransitionFlag = $7E0ABF ; Used for certain transitions like smith, witch, etc.
|
||||||
;
|
;
|
||||||
|
DuckPose = $7E0AF4 ; Used for duck gfx (2 bytes), zero value stops duck drawing in gfx slot
|
||||||
|
;
|
||||||
ItemGFXPtr = $7E0AFA ; Pointer for item receipt graphics transfers
|
ItemGFXPtr = $7E0AFA ; Pointer for item receipt graphics transfers
|
||||||
; $0000 - no transfer, do nothing
|
; $0000 - no transfer, do nothing
|
||||||
; bit 7 reset - offset into ROM table
|
; bit 7 reset - offset into ROM table
|
||||||
@@ -365,6 +371,7 @@ EnemyStunTimer = $7E0B58 ; Auto-decrementing timer for stunned enemies.
|
|||||||
;
|
;
|
||||||
BowDryFire = $7E0B9A ; If set, arrows are deleted immediately
|
BowDryFire = $7E0B9A ; If set, arrows are deleted immediately
|
||||||
;
|
;
|
||||||
|
SecretId = $7E0B9C ; Controls the secret spawned from bushes, pots, rocks, etc.
|
||||||
SaveFileIndex = $7E0B9D ;
|
SaveFileIndex = $7E0B9D ;
|
||||||
;
|
;
|
||||||
SpriteAncillaInteract = $7E0BA0 ; If nonzero, ancillae do not interact with the sprite. $10 bytes.
|
SpriteAncillaInteract = $7E0BA0 ; If nonzero, ancillae do not interact with the sprite. $10 bytes.
|
||||||
@@ -439,7 +446,8 @@ SpriteSubPixelZ = $7E0F90 ;
|
|||||||
CurrentSpriteSlot = $7E0FA0 ; Holds the current sprite/ancilla's index
|
CurrentSpriteSlot = $7E0FA0 ; Holds the current sprite/ancilla's index
|
||||||
;
|
;
|
||||||
FreezeSprites = $7E0FC1 ; "Seems to freeze sprites"
|
FreezeSprites = $7E0FC1 ; "Seems to freeze sprites"
|
||||||
;
|
LinkPosXCache = $7E0FC2 ; Cache of Link's coordinates
|
||||||
|
LinkPosYCache = $7E0FC4 ; - Done at the beginning of Link_Main every frame
|
||||||
GfxChrHalfSlotVerify = $7E0FC6 ; Mirrors $0AAA, set to >= $03 when VRAM has temp graphics loaded
|
GfxChrHalfSlotVerify = $7E0FC6 ; Mirrors $0AAA, set to >= $03 when VRAM has temp graphics loaded
|
||||||
PrizePackIndexes = $7E0FC7 ; $07 bytes. One for each prize pack.
|
PrizePackIndexes = $7E0FC7 ; $07 bytes. One for each prize pack.
|
||||||
;
|
;
|
||||||
@@ -868,6 +876,7 @@ endmacro
|
|||||||
%assertRAM(OverworldIndexMirror, $7E040A)
|
%assertRAM(OverworldIndexMirror, $7E040A)
|
||||||
%assertRAM(DungeonID, $7E040C)
|
%assertRAM(DungeonID, $7E040C)
|
||||||
%assertRAM(TransitionDirection, $7E0418)
|
%assertRAM(TransitionDirection, $7E0418)
|
||||||
|
%assertRAM(ManipIndex, $7E042C)
|
||||||
%assertRAM(TrapDoorFlag, $7E0468)
|
%assertRAM(TrapDoorFlag, $7E0468)
|
||||||
%assertRAM(LayerAdjustment, $7E047A)
|
%assertRAM(LayerAdjustment, $7E047A)
|
||||||
%assertRAM(RoomIndexMirror, $7E048E)
|
%assertRAM(RoomIndexMirror, $7E048E)
|
||||||
@@ -875,6 +884,7 @@ endmacro
|
|||||||
%assertRAM(Map16ChangeIndex, $7E04AC)
|
%assertRAM(Map16ChangeIndex, $7E04AC)
|
||||||
%assertRAM(OWEntranceCutscene, $7E04C6)
|
%assertRAM(OWEntranceCutscene, $7E04C6)
|
||||||
%assertRAM(HeartBeepTimer, $7E04CA)
|
%assertRAM(HeartBeepTimer, $7E04CA)
|
||||||
|
%assertRAM(ManipTileMapX, $7E0540)
|
||||||
%assertRAM(CameraTargetN, $7E0610)
|
%assertRAM(CameraTargetN, $7E0610)
|
||||||
%assertRAM(CameraTargetS, $7E0612)
|
%assertRAM(CameraTargetS, $7E0612)
|
||||||
%assertRAM(CameraTargetW, $7E0614)
|
%assertRAM(CameraTargetW, $7E0614)
|
||||||
@@ -904,7 +914,7 @@ endmacro
|
|||||||
%assertRAM(SpawnedItemFlag, $7E0726)
|
%assertRAM(SpawnedItemFlag, $7E0726)
|
||||||
%assertRAM(SpawnedItemMWPlayer, $7E0728)
|
%assertRAM(SpawnedItemMWPlayer, $7E0728)
|
||||||
%assertRAM(EnemyDropIndicator, $7E072A)
|
%assertRAM(EnemyDropIndicator, $7E072A)
|
||||||
%assertRAM(SkipBeeTrapDisguise, $7E072C)
|
%assertRAM(SkipBeeTrapDisguise, $7E072D)
|
||||||
%assertRAM(SprDropsItem, $7E0730)
|
%assertRAM(SprDropsItem, $7E0730)
|
||||||
%assertRAM(SprItemReceipt, $7E0740)
|
%assertRAM(SprItemReceipt, $7E0740)
|
||||||
%assertRAM(SprItemIndex, $7E0750)
|
%assertRAM(SprItemIndex, $7E0750)
|
||||||
@@ -925,6 +935,7 @@ endmacro
|
|||||||
%assertRAM(OverlordYHigh, $7E0B20)
|
%assertRAM(OverlordYHigh, $7E0B20)
|
||||||
%assertRAM(EnemyStunTimer, $7E0B58)
|
%assertRAM(EnemyStunTimer, $7E0B58)
|
||||||
%assertRAM(BowDryFire, $7E0B9A)
|
%assertRAM(BowDryFire, $7E0B9A)
|
||||||
|
%assertRAM(SecretId, $7E0B9C)
|
||||||
%assertRAM(SaveFileIndex, $7E0B9D)
|
%assertRAM(SaveFileIndex, $7E0B9D)
|
||||||
%assertRAM(SpriteAncillaInteract, $7E0BA0)
|
%assertRAM(SpriteAncillaInteract, $7E0BA0)
|
||||||
%assertRAM(AncillaVelocityY, $7E0C22)
|
%assertRAM(AncillaVelocityY, $7E0C22)
|
||||||
|
|||||||
@@ -466,7 +466,6 @@ Shopkeeper_BuyItem:
|
|||||||
PLX
|
PLX
|
||||||
LDA.l ShopInventory, X
|
LDA.l ShopInventory, X
|
||||||
JSL AttemptItemSubstitution
|
JSL AttemptItemSubstitution
|
||||||
JSL ResolveLootIDLong
|
|
||||||
TAY : JSL Link_ReceiveItem
|
TAY : JSL Link_ReceiveItem
|
||||||
LDA.l ShopInventory+3, X : INC : STA.l ShopInventory+3, X
|
LDA.l ShopInventory+3, X : INC : STA.l ShopInventory+3, X
|
||||||
LDA.b #$00 : STA.l ShopEnableCount
|
LDA.b #$00 : STA.l ShopEnableCount
|
||||||
|
|||||||
17
sram.asm
17
sram.asm
@@ -364,7 +364,21 @@ TRCollectedKeys: skip 1 ; | Turtle Rock
|
|||||||
GTCollectedKeys: skip 1 ; / Ganon's Tower
|
GTCollectedKeys: skip 1 ; / Ganon's Tower
|
||||||
skip 2 ; Reserved for previous table
|
skip 2 ; Reserved for previous table
|
||||||
FileMarker: skip 1 ; $FF = Active save file | $00 = Inactive save file
|
FileMarker: skip 1 ; $FF = Active save file | $00 = Inactive save file
|
||||||
skip 13 ; Unused
|
DungeonAllCollectedKeys: ; \ Key Counters. Counts all keys for a dungeon. Chests and drops.
|
||||||
|
; | Note, this label is not indexed like others due to space. Sewers has no decicated entry.
|
||||||
|
HCAllCollectedKeys: skip 1 ; | Hyrule Castle
|
||||||
|
EPAllCollectedKeys: skip 1 ; | Eastern Palace
|
||||||
|
DPAllCollectedKeys: skip 1 ; | Desert Palace
|
||||||
|
CTAllCollectedKeys: skip 1 ; | Agahnim's Tower
|
||||||
|
SPAllCollectedKeys: skip 1 ; | Swamp Palace
|
||||||
|
PDAllCollectedKeys: skip 1 ; | Palace of Darkness
|
||||||
|
MMAllCollectedKeys: skip 1 ; | Misery Mire
|
||||||
|
SWAllCollectedKeys: skip 1 ; | Skull Woods
|
||||||
|
IPAllCollectedKeys: skip 1 ; | Ice Palace
|
||||||
|
THAllCollectedKeys: skip 1 ; | Tower of Hera
|
||||||
|
TTAllCollectedKeys: skip 1 ; | Thieves' Town
|
||||||
|
TRAllCollectedKeys: skip 1 ; | Turtle Rock
|
||||||
|
GTAllCollectedKeys: skip 1 ; / Ganon's Tower
|
||||||
InverseChecksumWRAM: skip 2 ; Vanilla Inverse Checksum. Don't write unless computing checksum.
|
InverseChecksumWRAM: skip 2 ; Vanilla Inverse Checksum. Don't write unless computing checksum.
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
@@ -626,6 +640,7 @@ endmacro
|
|||||||
%assertSRAM(TRCollectedKeys, $7EF4EC)
|
%assertSRAM(TRCollectedKeys, $7EF4EC)
|
||||||
%assertSRAM(GTCollectedKeys, $7EF4ED)
|
%assertSRAM(GTCollectedKeys, $7EF4ED)
|
||||||
%assertSRAM(FileMarker, $7EF4F0)
|
%assertSRAM(FileMarker, $7EF4F0)
|
||||||
|
%assertSRAM(DungeonAllCollectedKeys, $7EF4F1)
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
%assertSRAM(ExtendedSaveDataWRAM, $7F6000)
|
%assertSRAM(ExtendedSaveDataWRAM, $7F6000)
|
||||||
%assertSRAM(ExtendedFileNameWRAM, $7F6000)
|
%assertSRAM(ExtendedFileNameWRAM, $7F6000)
|
||||||
|
|||||||
38
stats.asm
38
stats.asm
@@ -115,7 +115,9 @@ DecrementSmallKeys:
|
|||||||
STA.l CurrentSmallKeys ; thing we wrote over, write small key count
|
STA.l CurrentSmallKeys ; thing we wrote over, write small key count
|
||||||
JSL UpdateKeys
|
JSL UpdateKeys
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
CountChestKeyLong:
|
CountChestKeyLong:
|
||||||
PHX : PHP
|
PHX : PHP
|
||||||
SEP #$30
|
SEP #$30
|
||||||
@@ -134,6 +136,7 @@ CountChestKey:
|
|||||||
TAX
|
TAX
|
||||||
LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X
|
LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X
|
||||||
BRA .done
|
BRA .done
|
||||||
|
|
||||||
.this_dungeon
|
.this_dungeon
|
||||||
LDA.w DungeonID : CMP.b #$03 : BCC .hc_sewers
|
LDA.w DungeonID : CMP.b #$03 : BCC .hc_sewers
|
||||||
LSR : TAX
|
LSR : TAX
|
||||||
@@ -148,6 +151,41 @@ CountChestKey:
|
|||||||
PLX : PLA
|
PLX : PLA
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
; Expects 16 bit index mode upon entering. 8-bit Acumulator
|
||||||
|
; This approach doesn't currently work - potentially dead code
|
||||||
|
CountAllKey:
|
||||||
|
PHP : PHA : PHX
|
||||||
|
SEP #$10
|
||||||
|
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .done
|
||||||
|
CPY.b #$24 : BEQ .this_dungeon
|
||||||
|
TYA : AND.b #$0F : CMP.b #$02 : BCC .hc_sewers
|
||||||
|
BRA .all_dungoens
|
||||||
|
|
||||||
|
.this_dungeon
|
||||||
|
LDA.w DungeonID : CMP.b #$03 : BCC .hc_sewers
|
||||||
|
LSR
|
||||||
|
|
||||||
|
.all_dungoens
|
||||||
|
STA.b Scrap00 : TAX ; store dungeon index in X, $00
|
||||||
|
LDA.l DungeonAllCollectedKeys-1, X : INC : STA.l DungeonAllCollectedKeys-1, X
|
||||||
|
REP #$10 : PLX : PHX ; 16 bit index
|
||||||
|
LDA.l InventoryTable_properties, X : BIT.b #$40 : BEQ .done
|
||||||
|
SEP #$10 : LDX.b Scrap00
|
||||||
|
LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X
|
||||||
|
BRA .done
|
||||||
|
|
||||||
|
.hc_sewers
|
||||||
|
LDA.l HCAllCollectedKeys : INC : STA.l HCAllCollectedKeys
|
||||||
|
REP #$10 : PLX : PHX ; 16 bit index
|
||||||
|
LDA.l InventoryTable_properties, X : BIT.b #$40 : BEQ .done
|
||||||
|
LDA.l SewerCollectedKeys : INC
|
||||||
|
STA.l SewerCollectedKeys : STA.l HCCollectedKeys
|
||||||
|
|
||||||
|
.done
|
||||||
|
REP #$10
|
||||||
|
PLX : PLA : PLP
|
||||||
|
RTL
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
IncrementAgahnim2Sword:
|
IncrementAgahnim2Sword:
|
||||||
PHA
|
PHA
|
||||||
|
|||||||
113
tables.asm
113
tables.asm
@@ -941,43 +941,84 @@ org $B08196 ; PC 0x180196-0x180197
|
|||||||
TotalItemCount: ; Total item count for HUD. Only counts items that use "item get" animation.
|
TotalItemCount: ; Total item count for HUD. Only counts items that use "item get" animation.
|
||||||
dw $00D8 ; 216
|
dw $00D8 ; 216
|
||||||
|
|
||||||
org $B08198 ; PC 0x180198-0x1801A9
|
org $B08198 ; PC 0x180198-0x1801D7 (variable tables, $FF terminated)
|
||||||
GanonsTowerOpenAddress: ; 0x180198-0x180199
|
GoalConditionTable:
|
||||||
dw CrystalCounter ; Target address for GT open check
|
dw GanonsTowerOpen
|
||||||
GanonsTowerOpenTarget: ; 0x18019A-0x18019B
|
dw GanonVulnerable
|
||||||
dw $0007 ; Target amount for GT open modes to compare
|
dw PedPull
|
||||||
GanonsTowerOpenMode: ; 0x18019C-0x18019D
|
dw MurahdahlaComplete
|
||||||
dw $0001 ; $00 = Vanilla | $01 = Compare target with address
|
|
||||||
PedPullAddress: ; 0x18019E-0x18019F
|
GanonsTowerOpen:
|
||||||
dw PendantCounter ; Target address for ped pull check
|
db $82 ; Crystal Count >= Default 7
|
||||||
PedPullTarget: ; 0x1801A0-0x1801A1
|
db $FF
|
||||||
dw $0003 ; Target amount for ped pull modes to check
|
GanonVulnerable:
|
||||||
PedCheckMode: ; 0x1801A2-0x1801A3
|
db $82 ; Crystal Count >= Default 7
|
||||||
dw $0000 ; $00 = vanilla | $01 = Compare address to target value
|
db $07 ; Agahnim 2 defeated
|
||||||
GanonVulnerableAddress: ; 0x1801A4-0x1801A5
|
db $FF
|
||||||
dw CrystalCounter ; Target address for ped pull check
|
PedPull:
|
||||||
GanonVulnerableTarget: ; 0x1801A6-0x1801A7
|
db $81 ; Pendant Count >= Default 3
|
||||||
dw $0007 ; Target amount for Ganon vulnerability modes to compare
|
db $FF
|
||||||
GanonVulnerableMode: ; 0x1801A8-0x1801A9
|
MurahdahlaComplete:
|
||||||
dw $0000 ; #$00 = Off (default)
|
db $88 ; Triforce Pieces >= Default Goal
|
||||||
; #$01 = On
|
db $FF
|
||||||
; #$02 = Require All Dungeons
|
; These are lists of conditions to check for various goals,
|
||||||
; #$03 = Require "GanonVulnerableTarget" Crystals and Aga2
|
; each terminated by #$FF.
|
||||||
; #$04 = Require "GanonVulnerableTarget" Crystals
|
; First byte is condition type, with most significant bit
|
||||||
; #$05 = Require "GoalItemRequirement" Goal Items
|
; indicating the default value should be used, else the
|
||||||
; #$06 = Light Speed
|
; following byte/s indicate the custom target value.
|
||||||
; #$07 = Require All Crystals and Crystal Bosses
|
; -----------------------------------------------------------
|
||||||
; #$08 = Require All Crystal Bosses only
|
; Condition Types:
|
||||||
; #$09 = Require All Dungeons No Agahnim
|
; #$00 = Always Invulnerable
|
||||||
; #$0A = Require 100% Item Collection
|
; #$01 = Require Pendants - Default is 3
|
||||||
; #$0B = Require 100% Item Collection and All Dungeons
|
; #$02 = Require Crystals - Default is 7
|
||||||
GanonsTowerOpenGfx: ; 0x1801AA-0x1801AB
|
; #$03 = Require Pendant Bosses - Default is 3
|
||||||
dw $0000 ; Gfx used for GT open animation, similar to StandingItemGraphicsOffsets
|
; #$04 = Require Crystal Bosses - Default is 7
|
||||||
GanonsTowerOpenPalette: ; 0x1801AC
|
; #$05 = Require Prize Bosses - Default is 10
|
||||||
db $00 ; Palette for GanonsTowerOpenGfx
|
; #$06 = Require Agahnim 1
|
||||||
;VHPP CCC O
|
; #$07 = Require Agahnim 2
|
||||||
|
; #$08 = Require Goal Items (ie. Triforce Pieces) - Default is value at GoalItemRequirement
|
||||||
|
; #$09 = Require Item Collection - Default is Max Collection Rate
|
||||||
|
; #$0A = Require Custom Goal
|
||||||
|
; -----------------------------------------------------------
|
||||||
|
; For Custom Goal, one byte indicates the bitfield options,
|
||||||
|
; followed by two bytes for the target address, followed
|
||||||
|
; by one or two bytes for the custom target value.
|
||||||
|
; Options bitfield:
|
||||||
|
; ---b accc
|
||||||
|
; b - bank flag - 0 = $7E - 1 = $7F
|
||||||
|
; a - addressing mode - 0 = 8-bit - 1 = 16-bit
|
||||||
|
; c - comparison mode
|
||||||
|
; 0 = minimum (>=)
|
||||||
|
; 1 = exact (==)
|
||||||
|
; 2 = bitfield any
|
||||||
|
; 3 = bitfield match
|
||||||
|
; 4 = count bits set in bitfield
|
||||||
|
; 5-7 = reserved
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; 0x1801AD - 0x1801FF (unused)
|
org $B081D8 ; PC 0x1801D8 - 0x1801FE
|
||||||
|
GanonsTowerOpenGfx: ; 0x1801D8-0x1801E5
|
||||||
|
dw $0000 ; Gfx used for GT open animation, similar to StandingItemGraphicsOffsets
|
||||||
|
dw $0000, $0000, $0000, $0000, $0000, $0000
|
||||||
|
GanonsTowerOpenPalette: ; 0x1801E6-0x1801EC
|
||||||
|
db $00 ; Palette for GanonsTowerOpenGfx
|
||||||
|
db $00, $00, $00, $00, $00, $00
|
||||||
|
; -VHPPCCC (VertFlip, HorizFlip, Priority, ColorPalette)
|
||||||
|
PedPullGfx: ; 0x1801ED-0x1801F2
|
||||||
|
dw $0000 ; Gfx used for ped pull animation, similar to StandingItemGraphicsOffsets
|
||||||
|
dw $0000, $0000
|
||||||
|
PedPullPalette: ; 0x1801F3-0x1801F5
|
||||||
|
db $00 ; Palette for PedPullGfx
|
||||||
|
db $00, $00
|
||||||
|
; -VHPPCCC (VertFlip, HorizFlip, Priority, ColorPalette)
|
||||||
|
MurahdahlaGfx: ; 0x1801F6-0x1801FB
|
||||||
|
dw $0000 ; Gfx used for ped pull animation, similar to StandingItemGraphicsOffsets
|
||||||
|
dw $0000, $0000
|
||||||
|
MurahdahlaPalette: ; 0x1801FC-0x1801FE
|
||||||
|
db $00 ; Palette for MurahdahlaGfx
|
||||||
|
db $00, $00
|
||||||
|
; -VHPPCCCO (VertFlip, HorizFlip, Priority, ColorPalette)
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
; 0x1801FF (unused)
|
||||||
;================================================================================
|
;================================================================================
|
||||||
org $B08200 ; PC 0x180200 - 0x18020B
|
org $B08200 ; PC 0x180200 - 0x18020B
|
||||||
RedClockAmount:
|
RedClockAmount:
|
||||||
|
|||||||
15
tablets.asm
15
tablets.asm
@@ -19,7 +19,14 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
SetTabletItemFlag:
|
SetTabletItemFlag:
|
||||||
PHA
|
PHA
|
||||||
LDA.b OverworldIndex : CMP.b #$03 : BEQ .ether ; if we're on the map where ether is, we're the ether tablet
|
; Rain state fix: convert DW screen ID to LW if in rain state
|
||||||
|
LDA.b OverworldIndex
|
||||||
|
BIT.b #$40 : BEQ +
|
||||||
|
LDA.l ProgressIndicator : CMP.b #$02
|
||||||
|
LDA.b OverworldIndex : BCS ++ : AND.b #$BF
|
||||||
|
++
|
||||||
|
+
|
||||||
|
CMP.b #$03 : BEQ .ether ; if we're on the map where ether is, we're the ether tablet
|
||||||
.bombos
|
.bombos
|
||||||
JSR ItemSet_BombosTablet : BRA .done
|
JSR ItemSet_BombosTablet : BRA .done
|
||||||
.ether
|
.ether
|
||||||
@@ -69,6 +76,12 @@ RTL
|
|||||||
IsMedallion:
|
IsMedallion:
|
||||||
REP #$20 ; set 16-bit accumulator
|
REP #$20 ; set 16-bit accumulator
|
||||||
LDA.b OverworldIndex
|
LDA.b OverworldIndex
|
||||||
|
; Rain state fix: In rain state DW, use LW screen ID for tablet lookup
|
||||||
|
BIT.w #$0040 : BEQ +
|
||||||
|
LDA.l ProgressIndicator : AND.w #$00FF : CMP.w #$0002
|
||||||
|
LDA.b OverworldIndex : BCS ++ : AND.w #$00BF
|
||||||
|
++
|
||||||
|
+
|
||||||
CMP.w #$03 : BNE + ; Death Mountain
|
CMP.w #$03 : BNE + ; Death Mountain
|
||||||
LDA.b LinkPosX : CMP.w #1890 : !BGE ++
|
LDA.b LinkPosX : CMP.w #1890 : !BGE ++
|
||||||
SEC
|
SEC
|
||||||
|
|||||||
@@ -520,3 +520,20 @@ AuxPaletteCheck:
|
|||||||
REP #$30
|
REP #$30
|
||||||
PLX
|
PLX
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
CountBits:
|
||||||
|
; In: A - value to count bits set in
|
||||||
|
; Out: A - number of bits set
|
||||||
|
; Flexible to use with 8 or 16-bit mode
|
||||||
|
PHX : TAX
|
||||||
|
PHY : PHP
|
||||||
|
SEP #$20
|
||||||
|
LDA.b 1,S : BIT.b #$20 : BNE +
|
||||||
|
PLP : TXA : LDX.w #$000F : LDY.w #$0000
|
||||||
|
BRA ++
|
||||||
|
+ PLP : TXA : LDX.b #$07 : LDY.b #$00
|
||||||
|
++ - LSR : BCC +
|
||||||
|
INY
|
||||||
|
+ DEX : BPL -
|
||||||
|
TYA : PLY : PLX
|
||||||
|
RTL
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ Sprite_TransmuteToBomb = $86AD58
|
|||||||
Sprite_PrepAndDrawSingleLargeLong = $86DBF8
|
Sprite_PrepAndDrawSingleLargeLong = $86DBF8
|
||||||
Sprite_PrepAndDrawSingleSmallLong = $86DC00
|
Sprite_PrepAndDrawSingleSmallLong = $86DC00
|
||||||
Sprite_DrawShadowLong = $86DC5C
|
Sprite_DrawShadowLong = $86DC5C
|
||||||
|
Sprite_DrawShadowCustomLong = $86DC64
|
||||||
DashKey_Draw = $86DD40
|
DashKey_Draw = $86DD40
|
||||||
Sprite_PrepOAMCoordLong = $86E41C
|
Sprite_PrepOAMCoordLong = $86E41C
|
||||||
Sprite_CheckTileCollisionLong = $86E49C
|
Sprite_CheckTileCollisionLong = $86E49C
|
||||||
@@ -136,6 +137,7 @@ InitializeSaveFile = $8CDB3E
|
|||||||
InitializeSaveFile_build_checksum = $8CDBC0
|
InitializeSaveFile_build_checksum = $8CDBC0
|
||||||
InitializeSaveFile_checksum_done = $8CDBDB
|
InitializeSaveFile_checksum_done = $8CDBDB
|
||||||
SpritePrep_LoadProperties = $8DB818
|
SpritePrep_LoadProperties = $8DB818
|
||||||
|
ResetSpriteProperties = $8DB871
|
||||||
GetRandomInt = $8DBA71
|
GetRandomInt = $8DBA71
|
||||||
OAM_AllocateFromRegionA = $8DBA80
|
OAM_AllocateFromRegionA = $8DBA80
|
||||||
OAM_AllocateFromRegionB = $8DBA84
|
OAM_AllocateFromRegionB = $8DBA84
|
||||||
@@ -201,6 +203,7 @@ Sprite_BagOfPowder = $85F644
|
|||||||
MagicShopAssistant_Main = $85F893
|
MagicShopAssistant_Main = $85F893
|
||||||
Sprite_SpawnSecret_SetCoords = $8682A5
|
Sprite_SpawnSecret_SetCoords = $8682A5
|
||||||
Chicken_SpawnAvengerChicken = $86A7DB
|
Chicken_SpawnAvengerChicken = $86A7DB
|
||||||
|
Sprite_ScheduleForBreakage_exit = $86E273
|
||||||
Link_PerformRead = $87B4DB
|
Link_PerformRead = $87B4DB
|
||||||
Link_PerformOpenChest_no_replacement = $87B59F
|
Link_PerformOpenChest_no_replacement = $87B59F
|
||||||
Link_CheckNewAPress = $87B5A9
|
Link_CheckNewAPress = $87B5A9
|
||||||
@@ -241,6 +244,16 @@ CrystalMaiden_KickOutOfDungeon = $9ECF35
|
|||||||
GoldBee_Dormant_exit = $9EDE89
|
GoldBee_Dormant_exit = $9EDE89
|
||||||
GoldBee_SpawnSelf = $9EDE8A
|
GoldBee_SpawnSelf = $9EDE8A
|
||||||
|
|
||||||
|
;===================================================================================================
|
||||||
|
; Spliced routines (use JML directly since the hook left these methods)
|
||||||
|
;===================================================================================================
|
||||||
|
|
||||||
|
Sprite_4C_Geldman_do_indeed_draw = $85B8C0
|
||||||
|
Sprite_4C_Geldman_continue = $85B8C3
|
||||||
|
Sprite_91_StalfosKnight_continue = $9EAAB5
|
||||||
|
SpriteDraw_Blob_bad_gfx = $9EB20D
|
||||||
|
SpriteDraw_Blob_head_popping_out = $9EB24E
|
||||||
|
|
||||||
;===================================================================================================
|
;===================================================================================================
|
||||||
; Palettes
|
; Palettes
|
||||||
;===================================================================================================
|
;===================================================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user