25 Commits
Author SHA1 Message Date
karafruit 5e892ca283 Fix orange potion overwrite 2026-06-15 16:58:18 -05:00
karafruit bf2b0fc6c8 Remove backup file accidentally created 2026-06-09 10:32:30 -05:00
karafruit 84a5fd3969 Merge branch 'beta' 2026-06-09 10:31:48 -05:00
karafruit 1092f1bc85 Text updates and orange refill box 2026-06-08 22:57:41 -05:00
karafruit fa33a3d24b Fix max frame count 2026-06-08 16:11:28 -05:00
karafruit 7d3a3a54e3 Fix max frame count 2026-06-08 16:10:55 -05:00
karafruit 99d426bc1e Bitflag to block silverless damage on phase 4 ganon 2026-06-08 00:11:01 -05:00
karafruit 82ce1628e6 Make infinite magic bar blue instead of flashy 2026-06-07 21:43:56 -05:00
karafruit 43515851c1 orange potion 2026-06-07 21:35:34 -05:00
karafruit d7ff034884 Unmark MapSwapping as NYI 2026-06-07 13:46:23 -05:00
karafruit 6bf2051bab Generic small keys don't despawn from shops 2026-06-07 13:14:39 -05:00
karafruit fa8f705bf9 Add map time to credits 2026-06-07 13:08:04 -05:00
karafruit 66e095306c Minor fixups 2026-06-07 01:28:16 -05:00
karafruit 3c17ec5d48 Implement checking for what maps can be viewed 2026-06-06 12:36:00 -05:00
karafruit 9843d72327 Add NYI indicator to map swap mode 2026-06-04 22:02:43 -05:00
karafruit 04196daf5f Rework map/hud loot icons to be more independent 2026-06-03 20:50:55 -05:00
karafruit 6b3a05b9de Fix map/compass icons 2026-05-28 22:34:51 -05:00
karafruit 4168bdbeb6 Shift item tiers slightly -> map above compass, small keys in dungeon higher 2026-05-28 06:29:14 -05:00
karafruit 67a1ebb50c Update crystal indicator icons on HUD 2026-05-27 23:16:04 -05:00
karafruit 85ea4477d2 NPC icon for NPC requiring item turnin; include standing items in loot
HUD as well
2026-05-27 23:01:02 -05:00
karafruit 05172929a3 Clean up loot icon room transition handling 2026-05-25 00:16:48 -05:00
karafruit e749b6d6bc Fix several foutonFindings:
- Dark Palace -> Palace of Darkness
- show dungeon name for multi keys
- fix IP block drop lock
- HUD improvements
2026-05-24 19:09:33 -05:00
karafruit 333159ac53 Unify standard escape ammo fills 2026-05-19 22:44:21 -05:00
karafruit 2f404873b8 Fix dungeon indicator not updating on falling into dungeons 2026-05-16 21:27:22 -05:00
karafruit fd3f7f4513 Fix loothud on door rando transitions 2026-05-16 21:10:09 -05:00
56 changed files with 1053 additions and 584 deletions
+1
View File
@@ -206,6 +206,7 @@ warnpc $A38000
org $B98000
incsrc gk/crystalswitchbook.asm
incsrc gk/orange_potion.asm
incsrc gk/mimicdash.asm
incsrc gk/gloom.asm
incsrc gk/special_weapons.asm
+2 -2
View File
@@ -49,14 +49,14 @@ InvertDPad_DPadLROnly:
LDA.w JOY1L : STA.b Scrap00
LDA.w JOY1H
BIT.b #$03 : BEQ + : EOR.b #$03 : + ; swap left/right
STA.b Scrap00
STA.b Scrap01
JML InvertDPadReturn
InvertDPad_DPadUDOnly:
LDA.w JOY1L : STA.b Scrap00
LDA.w JOY1H
BIT.b #$0C : BEQ + : EOR.b #$0C : + ; swap up/down
STA.b Scrap00
STA.b Scrap01
JML InvertDPadReturn
InvertDPad:
+44 -19
View File
@@ -148,30 +148,55 @@ RefreshRainAmmo:
LDA.l ProgressIndicator : CMP.b #$01 : BEQ .rain ; check if we're in rain state
RTL
.rain
LDA.l StartingEntrance
+ CMP.b #$03 : BNE + ; Uncle
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Uncle)
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Uncle)
LDA.l ArrowMode : BEQ ++
LDA.l BowEquipment : BEQ +++
++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Uncle)
+++ BRA .done
LDA.l StartingEntrance : BEQ .uncle
CMP.b #$03 : BNE + ; Uncle
.uncle
LDA.l RainDeathRefillMagic_Uncle : JSR .refillMagic
LDA.l RainDeathRefillBombs_Uncle : JSR .refillBombs
LDA.l ArrowMode : BNE .rupeeBow
LDA.l RainDeathRefillArrows_Uncle : JSR .refillArrows
BRA .done
+ CMP.b #$02 : BNE + ; Cell
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Cell)
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Cell)
LDA.l ArrowMode : BEQ ++
LDA.l BowEquipment : BEQ .done
++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Cell)
LDA.l RainDeathRefillMagic_Cell : JSR .refillMagic
LDA.l RainDeathRefillBombs_Cell : JSR .refillBombs
LDA.l ArrowMode : BNE .rupeeBow
LDA.l RainDeathRefillArrows_Cell : JSR .refillArrows
BRA .done
+ CMP.b #$04 : BNE + ; Mantle
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Mantle)
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Mantle)
LDA.l ArrowMode : BEQ ++
LDA.l BowEquipment : BEQ .done
++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Mantle)
+
LDA.l RainDeathRefillMagic_Mantle : JSR .refillMagic
LDA.l RainDeathRefillBombs_Mantle : JSR .refillBombs
LDA.l ArrowMode : BNE .rupeeBow
LDA.l RainDeathRefillArrows_Mantle : JSR .refillArrows
BRA .done
+ BRA .done
.rupeeBow
REP #$20
LDA.l RainDeathRefillRupeeBow : JSR .refillRupees
SEP #$20
.done
RTL
.refillMagic
SEC : SBC.l CurrentMagic : BCC +
STA.l MagicFiller
+ RTS
.refillBombs
SEC : SBC.l BombsEquipment : BCC +
STA.l BombsFiller
+ RTS
.refillArrows
SEC : SBC.l CurrentArrows : BCC +
STA.l ArrowsFiller
+ RTS
.refillRupees
CMP.l CurrentRupees : BCC +
STA.l CurrentRupees
+ RTS
;--------------------------------------------------------------------------------
SetEscapeAssist:
LDA.l ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+1
View File
@@ -29,3 +29,4 @@ Z=33
'=35
-=36
.=37
*=FF
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+32 -14
View File
@@ -74,60 +74,71 @@ FreeDungeonItemNotice:
LDA.l ScratchBufferNV+1 : PHA
;--------------------------------
LDA.l FreeItemText : BNE + : JMP .skip : +
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BEQ +
LDA.b #$2F ; if not from our world, show all dungeon item and crystal notices
+ ORA.l FreeItemText : BNE + : JMP .skip : +
STA.b Scrap00
LDA.b #$00 : STA.l ScratchBufferNV ; initialize scratch
LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for general small key
LDA.b Scrap00 : AND.b #$01 : BEQ + ; show message for general small key
LDA.l ScratchBufferV : CMP.b #$24 : BNE + ; general small key
%CopyDialog(Notice_SmallKeyOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self)
JMP .done
+ : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for general compass
+ LDA.b Scrap00 : AND.b #$02 : BEQ + ; show message for general compass
LDA.l ScratchBufferV : CMP.b #$25 : BNE + ; general compass
%CopyDialog(Notice_CompassOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self)
JMP .done
+ : LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for general map
+ LDA.b Scrap00 : AND.b #$04 : BEQ + ; show message for general map
LDA.l ScratchBufferV : CMP.b #$33 : BNE + ; general map
%CopyDialog(Notice_MapOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self)
JMP .done
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for general big key
+ LDA.b Scrap00 : AND.b #$08 : BEQ + ; show message for general big key
LDA.l ScratchBufferV : CMP.b #$32 : BNE + ; general big key
%CopyDialog(Notice_BigKeyOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self)
JMP .done
+
LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for dungeon map
+ LDA.b Scrap00 : AND.b #$04 : BEQ + ; show message for dungeon map
LDA.l ScratchBufferV : AND.b #$F0 ; looking at high bits only
CMP.b #$70 : BNE + ; map of...
%CopyDialog(Notice_MapOf)
JMP .dungeon
+ : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for dungeon compass
+ LDA.b Scrap00 : AND.b #$02 : BEQ + ; show message for dungeon compass
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of...
%CopyDialog(Notice_CompassOf)
JMP .dungeon
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key
+ LDA.b Scrap00 : AND.b #$08 : BEQ + ; show message for dungeon big key
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of...
%CopyDialog(Notice_BigKeyOf)
JMP .dungeon
+ : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key
+ LDA.b Scrap00 : AND.b #$01 : BEQ + ; show message for dungeon small key
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
LDA.l ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++
%CopyDialog(Notice_SmallKeyOf)
LDA.b #$01 : STA.l ScratchBufferNV ; set up a flip for small keys
BRA .dungeon
+ : LDA.l FreeItemText : AND.b #$20 : BEQ + ; show message for crystal
+ LDA.b Scrap00 : AND.b #$20 : BEQ + ; show message for crystal
LDA.l ScratchBufferV : CMP.b #$B0 : !BLT + ; crystal #
CMP.b #$B7 : !BGE +
%CopyDialog(Notice_Crystal)
JMP .crystal
+
JMP .skip ; it's not something we are going to give a notice for
+ JMP .skip ; it's not something we are going to give a notice for
.dungeon
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
@@ -141,6 +152,9 @@ FreeDungeonItemNotice:
LDA.l ScratchBufferNV+1
ASL : TAX
REP #$20
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : AND.w #$00FF : BNE +
LDA.l DungeonItemIDMap, X : CMP.w #$0003 : BCC .hc_sewers
CMP.w DungeonID : BNE +
BRA .self_notice
@@ -238,10 +252,14 @@ RTL
;--------------------------------------------------------------------------------
DialogItemReceive:
BCS .nomessage ; if doubling the item value overflowed it must be a rando item
CPY.b #$CC : BEQ .orange_potion
CPY.b #$98 : BCC ++ ;if the item is $4C or greater it must be a rando item
.nomessage
LDA.w #$FFFF
BRA .done
.orange_potion
LDA.w #$0198
BRA .done
++ LDA.w Ancilla_ReceiveItem_item_messages, Y
@@ -290,7 +308,7 @@ DialogGanon2:
BCS +
LDA.w #$018D : JMP .done
+
LDA.l GanonVulnerabilityItem : AND.w #$00FF
LDA.l GanonVulnerabilityItem : AND.w #$007F
BEQ .silver_arrows
CMP.w #$0001 : BEQ .silver_arrows
CMP.w #$0004 : BEQ .bombs
+8
View File
@@ -6,6 +6,7 @@
!DTile = $2D60
!BlueSquare = $2C5E
!BossIcon = $253C
!NPCIcon = $253B
DrHudOverride:
PHB
@@ -30,6 +31,13 @@ DRHUD_DrawIndicators:
LDA.b FrameCounter : AND.b #$10 : BEQ DRHUD_EnemyDropIndicator
DRHUD_BossIndicator:
LDA.w DungeonID : CMP.b #$FF : BNE .in_dungeon
LDA.w NpcItemIndicator : BEQ .early_exit
LDA.l HudItems_enabled : BEQ .early_exit
REP #$10
LDY.w #!NPCIcon : STY.w HUDMultiIndicator
JMP DRHUD_Finished
.in_dungeon
LDA.l DRMode : BNE .continue
.early_exit
REP #$10
+7 -1
View File
@@ -22,7 +22,11 @@ SpiralWarp: {
cmp.b #$5f : beq .gtg
cmp.b #$26 : beq .inroom
.abort
SEP #$30 : stz.w $045e : lda.b PreviousRoom : and.b #$0f : rtl ; clear,run hijacked code and get out
SEP #$30
stz.w $045e
lda.b PreviousRoom : and.b #$0f
rtl ; clear,run hijacked code and get out
.inroom
jsr InroomStairsWarp
lda.b PreviousRoom : and.b #$0f ; this is the code we are hijacking
@@ -81,6 +85,7 @@ SpiralWarp: {
ldy.b #$01 : jsr SetCamera
jsr StairCleanup
ply : plx : plb ; pull the stuff we pushed
lda.b PreviousRoom : and.b #$0f ; this is the code we are hijacking
rtl
@@ -261,6 +266,7 @@ InroomStairsWarp: {
.skipCamera
jsr StairCleanup
ply : plx : plb ; pull the stuff we pushed
rts
}
+12 -18
View File
@@ -41,6 +41,8 @@ OnPlayerDead:
JSL DynamicDropGFXClear
JSL SetSilverBowMode
JSL RefreshRainAmmo
LDA.b #$00
STA.l InfiniteMagic
PLA
RTL
;--------------------------------------------------------------------------------
@@ -70,6 +72,8 @@ OnQuit:
JSL SQEGFix
LDA.b #$00 : STA.l AltTextFlag ; bandaid patch bug with mirroring away from text
LDA.b #$10 : STA.b MAINDESQ ; thing we wrote over
LDA.b #$00
STA.l InfiniteMagic
RTL
;--------------------------------------------------------------------------------
OnDeathNoSave:
@@ -79,29 +83,19 @@ RTL
;--------------------------------------------------------------------------------
OnUncleItemGet:
PHA
LDA.l EscapeAssist
BIT.b #$04 : BEQ + : STA.l InfiniteMagic : +
BIT.b #$02 : BEQ + : STA.l InfiniteBombs : +
BIT.b #$01 : BEQ + : STA.l InfiniteArrows : +
LDA.l UncleItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLA
JSL Link_ReceiveItem
LDA.l UncleRefill : BIT.b #$04 : BEQ + : LDA.b #$80 : STA.l MagicFiller : + ; refill magic
LDA.l UncleRefill : BIT.b #$02 : BEQ + : LDA.b #50 : STA.l BombsFiller : + ; refill bombs
LDA.l UncleRefill : BIT.b #$01 : BEQ + ; refill arrows
LDA.b #70 : STA.l ArrowsFiller
LDA.l ArrowMode : BEQ +
LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking ; enable bow toggle
REP #$20 ; set 16-bit accumulator
LDA.l CurrentRupees : !ADD.l FreeUncleItemAmount : STA.l CurrentRupees ; rupee arrows, so also give the player some money to start
SEP #$20 ; set 8-bit accumulator
+
LDA.l ProgressIndicator : BNE +
LDA.b #$01 : STA.l ProgressIndicator ; handle rain state
LDA.b #$01 : STA.l ProgressIndicator ; set rain state
JSL SetEscapeAssist
JSL RefreshRainAmmo
; grant arrows if we started with a bow in retro mode
LDA.l ArrowMode : BEQ +
LDA.l RainDeathRefillRupeeBow : ORA.l RainDeathRefillRupeeBow+1 : BEQ +
LDA.b #$01 : STA.l ArrowsFiller
+
RTL
;--------------------------------------------------------------------------------
+6 -1
View File
@@ -82,7 +82,10 @@ DrawBottle:
AND.w #$00FF : BNE +
LDX.w #FileSelectItems_empty_bottle
JMP DrawItemGray
+ : DEC #2 : BNE +
+ : DEC : BNE +
LDX.w #FileSelectItems_orange_potion
JMP DrawItem
+ : DEC : BNE +
LDX.w #FileSelectItems_empty_bottle
JMP DrawItem
+ : DEC : BNE +
@@ -619,6 +622,8 @@ FileSelectItems:
dw #$0282|!FS_COLOR_GREEN, #$0282|!FS_COLOR_GREEN|!FS_HFLIP, #$0292|!FS_COLOR_GREEN, #$0284|!FS_COLOR_GREEN
.blue_potion
dw #$0282|!FS_COLOR_BLUE, #$0282|!FS_COLOR_BLUE|!FS_HFLIP, #$0292|!FS_COLOR_BLUE, #$0285|!FS_COLOR_BLUE
.orange_potion
dw #$0282|!FS_COLOR_BROWN, #$0282|!FS_COLOR_BROWN|!FS_HFLIP, #$0292|!FS_COLOR_BROWN, #$0286|!FS_COLOR_BROWN
.fairy_bottle
dw #$0287|!FS_COLOR_YELLOW|!FS_HFLIP, #$0287|!FS_COLOR_YELLOW, #$0296|!FS_COLOR_BLUE, #$0297|!FS_COLOR_BLUE
.bee_bottle
+9 -2
View File
@@ -11,12 +11,19 @@ FrameHookAction:
LDA.l LoopFrames : INC : STA.l LoopFrames : BNE +
LDA.l LoopFrames+2 : INC : STA.l LoopFrames+2
+
LDA.l GameMode : CMP.w #$010E : BNE ++ ; move this to nmi hook?
; move this to nmi hook?
LDA.l GameMode : CMP.w #$010E : BNE +
; item select menu
LDA.l MenuFrames : INC : STA.l MenuFrames : BNE ++
LDA.l MenuFrames+2 : INC : STA.l MenuFrames+2
+
LDA.l GameMode : CMP.w #$030E : BEQ .map ; underworld map
LDA.l GameMode : CMP.w #$070E : BNE ++ ; overworld map
.map
LDA.l MapFrames : INC : STA.l MapFrames : BNE ++
LDA.l MapFrames+2 : INC : STA.l MapFrames+2
++
REP #$30 : PLA : PLP
RTL
!NMI_MW = "$7F5047"
+169 -35
View File
@@ -1,18 +1,15 @@
; A = room_id
; out A = level of loot
CheckLoot:
CheckMapLoot:
PHP
REP #$30
PHB : PHX : PHY
PHX
STA.b $CA
LDA.b $06 : PHA
LDA.b $0E : PHA
STZ.b $02 ; best item class found
LDA.l ShowItems_default
LDA.l MapItems_default
AND.w #$00FF
STA.b $0E
@@ -24,7 +21,7 @@ CheckLoot:
LDA.l SaveDataWRAM, X
AND.w #$000F
BEQ +
LDA.l ShowItems_visited_tile
LDA.l MapItems_visited_tile
AND.w #$00FF
CMP.b $0E
BCC +
@@ -40,7 +37,7 @@ CheckLoot:
LDA.l MapField
AND.l DungeonMask, X
BEQ +
LDA.l ShowItems_have_map
LDA.l MapItems_have_map
AND.w #$00FF
CMP.b $0E
BCC +
@@ -49,7 +46,7 @@ CheckLoot:
+ LDA.l CompassField
AND.l DungeonMask, X
BEQ +
LDA.l ShowItems_have_compass
LDA.l MapItems_have_compass
AND.w #$00FF
CMP.b $0E
BCC +
@@ -57,6 +54,84 @@ CheckLoot:
+
.skip_dungeon_checks
JMP GetLootLevelAndCleanUp
; A = room_id
; out A = level of loot
CheckHudLoot:
PHP
REP #$30
PHX
STA.b $CA
LDA.b $0E : PHA
+ LDA.w DungeonID
AND.w #$00FF
CMP.w #$00FF
BEQ .cave
TAX
LDA.l HudItems_default_dungeon
AND.w #$00FF
STA.b $0E
LDA.l MapField
AND.l DungeonMask, X
BEQ +
LDA.l HudItems_have_map
AND.w #$00FF
CMP.b $0E
BCC +
STA.b $0E
+ LDA.l CompassField
AND.l DungeonMask, X
BEQ +
LDA.l HudItems_have_compass
AND.w #$00FF
CMP.b $0E
BCC +
STA.b $0E
+
BRA GetLootLevelAndCleanUp
.cave
LDA.l HudItems_cave
AND.w #$00FF
STA.b $0E
; intentional fall-through
GetLootLevelAndCleanUp:
STZ.b $02
LDA.b $0E
AND.w #$00FF
BEQ +
JSL GetLootLevel
+
PLA : STA.b $0E
PLX
PLP
LDA.b $02
RTL
; $CA = room_id
; $0E = level of details to return
; (1 - presence, 2 - compass or presence, 3 - value)
; out $02 = level of loot
GetLootLevel:
PHP
REP #$30
PHB : PHX : PHY
LDA.b $06 : PHA
STZ.b $02 ; best item class found
LDA.l ItemSources : BIT.w #$0001 : BEQ +
JSR CheckChests
@@ -71,19 +146,20 @@ CheckLoot:
+
LDA.l ItemSources : BIT.w #$0008 : BEQ +
JSR CheckBoss
JSR CheckMisc
JSR CheckMisc2
+
LDA.l ItemSources : BIT.w #$0010 : BEQ +
JSR CheckPrize
+
JSR CheckNpcs
.done
PLA : STA.b $0E
PLA : STA.b $06
PLY : PLX : PLB
PLP
LDA.b $02
RTL
CheckChests:
@@ -133,25 +209,22 @@ CheckChests:
.done
RTS
CheckBoss:
; we assume all bosses are in section 1 of split sections
; mainly to simplify hera cage key and GT torch
; which use the same flow
; and bosses are always in their own section anyway
CheckMisc:
; this includes bosses, bonk torches, and standing items (in caves + hera cage key)
; all dungeon items in this section are in section 1 of split sections
; for cave items we'll always know what section we're in
; but for dungeon items, we won't have a section specified in door rando
; so if we don't have a section, assume it's 1, and it'll match all the dungeon items anyway
LDA.b $CA
AND.w #$F000
XBA
CMP.w #$0020
BCC +
RTS
BIT.w #$F000
BNE +
ORA.w #$1000
+
LDA.b $CA
AND.w #$01FF
AND.w #$F1FF
STA.b $04
LDX.w #$FFFA
.next_boss
.next_misc
INX #6
LDA.l MiscLocations, X
BPL .check
@@ -159,9 +232,10 @@ CheckBoss:
.check
CMP.b $04
BNE .next_boss
BNE .next_misc
TXY
AND.w #$01FF
CMP.b RoomIndex
BEQ .current_room
@@ -186,7 +260,7 @@ CheckBoss:
TYX
BIT.b $04
BNE .next_boss ; continue checking if we already got the item
BNE .next_misc ; continue checking if we already got the item
LDA.l MiscLocations+4, X
STA.b $05
@@ -198,7 +272,24 @@ CheckBoss:
AND.w #$00FF
JSR GetLootClass
BRA .next_boss
BRA .next_misc
CheckMisc2:
; this currently only includes the library and Uncle
; so let's just hard-code them for now
LDA.b $CA
CMP.w #$2107 : BNE +
LDA.l NpcFlags : AND.w #$0080 : BNE +
LDA.l LibraryItem : AND.w #$00FF : JSR GetLootClass
+
LDA.b $CA
CMP.w #$1055 : BNE +
LDA.l ProgressFlags : AND.w #$0001 : BNE +
LDA.l UncleItem : AND.w #$00FF : JSR GetLootClass
+
RTS
CheckPrize:
LDA.b $CA
@@ -236,6 +327,41 @@ CheckPrize:
BRA .next_prize
CheckNpcs:
LDA.b $CA
LDX.w #$FFFA
.next_npc
INX #6
LDA.l NpcItems, X
BMI .nope
CMP.b $CA
BNE .next_npc
LDA.l NpcItems+3, X ; get location of data to check
STA.b $05
LDA.l NpcItems+2, X
STA.b $04
LDA.b [$04]
AND.w #$00FF
AND.l NpcItems+5, X
BNE .next_npc
.yep
LDA.w NpcItemIndicator
ORA.w #$0001
STA.w NpcItemIndicator
RTS
.nope
LDA.w NpcItemIndicator
AND.w #$FF00
STA.w NpcItemIndicator
RTS
CheckPots:
LDA.b $CA
AND.w #$01FF
@@ -490,15 +616,19 @@ GetLootClass:
CMP.w #$0080 : BNE .not_compass
.compass
LDA.l AlwaysShowCompass
LDA.b $0E
AND.w #$00FF
BNE .check_value
CMP.w #$0002
BEQ .check_value
.not_compass
LDA.b $0E
BEQ .done
CMP.w #$0001
BEQ .value_set
CMP.w #$0003
BCS .check_value
LDA.w #$0001
BRA .value_set
.check_value
LDA.l LootTypeMapping, X
@@ -521,9 +651,13 @@ GetPotJunkClass:
LDA.b $0E
BEQ .done
CMP.w #$0001
BEQ .value_set
CMP.w #$0003
BCS .check_value
LDA.w #$0001
BRA .value_set
.check_value
; hardcode as junk for now
LDA.w #$0002
+4 -4
View File
@@ -3,8 +3,8 @@
!TIER_LOW_KEY = $03
!TIER_HEALTH = $05
!TIER_MINOR = $06
!TIER_MAP = $07
!TIER_COMPASS = $08
!TIER_COMPASS = $07
!TIER_MAP = $08
!TIER_SM_KEY = $09
!TIER_BIG_KEY = $0A
!TIER_MAJOR = $0B
@@ -49,7 +49,7 @@ db !TIER_CRYSTAL ; 20 - Crystal
db !TIER_MINOR ; 21 - Net
db !TIER_MINOR ; 22 - Blue Mail
db !TIER_MINOR ; 23 - Red Mail
db !TIER_LOW_KEY ; 24 - Small Key
db !TIER_SM_KEY ; 24 - Small Key
db !TIER_COMPASS ; 25 - Compass
db !TIER_HEALTH ; 26 - Heart Container from 4/4
db !TIER_JUNK ; 27 - Bomb
@@ -116,7 +116,7 @@ db !TIER_JUNK ; 62 - RNG pool item (single)
db !TIER_JUNK ; 63 - RNG pool item (multi)
db !TIER_MAJOR ; 64 - Progressive bow
db !TIER_MAJOR ; 65 - Progressive bow
db !TIER_JUNK ; 66 -
db !TIER_HEALTH ; 66 - Potion refill (orange)
db !TIER_JUNK ; 67 -
db !TIER_JUNK ; 68 -
db !TIER_JUNK ; 69 -
+1 -1
View File
@@ -101,7 +101,7 @@ db $00 ; 62 - RNG pool item (single)
db $00 ; 63 - RNG pool item (multi)
db $00 ; 64 - Progressive bow
db $00 ; 65 - Progressive bow
db $00 ; 66 -
db $00 ; 66 - Potion refill (orange)
db $00 ; 67 -
db $00 ; 68 -
db $00 ; 69 -
+19 -1
View File
@@ -78,7 +78,7 @@ SplitRooms:
%d(.no) : %d(.no) : %d(.no) : %d(.11b) : %d(.11c) : %d(.no) : %d(.11e) : %d(.11f)
; 120
%d(.120) : %d(.no) : %d(.122) : %d(.no) : %d(.124) : %d(.125) : %d(.126) : %d(.no)
%d(.120) : %d(.no) : %d(.122) : %d(.no) : %d(.124) : %d(.125) : %d(.126) : %d(.127)
.no
db $00
@@ -909,3 +909,21 @@ db $02
db $03
db $04
db $FF
.127 ; Hammer Pegs Cave (1) // Fake Dark Lake Hylia Spike Hint Cave (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(.no_items)
..areas
db $03, $80, $FF, $00, $FF
db $FF
..doors
db $08
db $FF
..pots
db $04
db $05
db $06
db $07
db $FF
+10 -4
View File
@@ -150,7 +150,10 @@ DrawFullRoomTile:
RTL
DrawSingleRoomLoot:
PHX : PHY
LDA.l MapItems_enabled : AND.w #$00FF : BNE +
RTL
+ PHX : PHY
TYX
@@ -173,7 +176,7 @@ DrawSingleRoomLoot:
LDA.b $CA
AND.w #$F0FF
JSL CheckLoot
JSL CheckMapLoot
ASL A : ASL A : ASL A
@@ -1237,7 +1240,7 @@ DrawDoorsMapBlinker:
AND.w #$01E0
ASL A : ASL A : ASL A
XBA
CLC : ADC.w #$00A4
CLC : ADC.w #$00A5
STA.w OAMBuffer, X
LDA.b LinkPosY
@@ -1715,10 +1718,13 @@ DoorsMapChangeDungeon:
BNE +
INX
+ LDA.l DungeonMapData.prev, X
STA.w DungeonID
CMP.b $00
BEQ .done
STA.w DungeonID
JSL IsValidDungeonToSwapTo
BCC .next
JSL FindFirstEntrance
CPY.b #$FF
BEQ .next
+5 -1
View File
@@ -1,4 +1,5 @@
RedrawLoot:
SEP #$20
JSL DrawLoot
; what we wrote over
@@ -32,6 +33,9 @@ DrawLoot:
LDA.l DRMode
BNE .skip
LDA.l MapItems_enabled
BEQ .skip
REP #$30
PHX : PHY
@@ -125,7 +129,7 @@ DrawSingleFloorLoot:
LDA.w #$0000
BRA +
.valid_room
JSL CheckLoot
JSL CheckMapLoot
+
ASL A : ASL A : ASL A
+9
View File
@@ -5,6 +5,15 @@ LoadDungeonIndicator:
LDA.w DungeonID
CMP.b #DungeonIndicatorMap_end-DungeonIndicatorMap : BCS .done
TAX
; mark dungeon as entered
REP #$20
LDA.w DungeonMask, X
ORA.l DungeonVisited
STA.l DungeonVisited
SEP #$20
; load indicator
LDA.l DungeonIndicatorMap, X
TAX
+77 -21
View File
@@ -42,6 +42,8 @@ CheckSwitchMap:
BRA .doors_done
.change_dungeon
LDA.l MapSwapping
BEQ .doors_done
JSL DoorsMapChangeDungeon
BRA .doors_done
@@ -59,10 +61,14 @@ CheckSwitchMap:
.not_fancy_door_map
SEP #$20
LDA.l MapSwapping
BEQ .no_swap
LDA.b $F6
AND.b #$30
BNE +
BNE .do_swap
.no_swap
; what we wrote over
REP #$20
LDA.w DungeonMapFloorCountData, X
@@ -70,15 +76,20 @@ CheckSwitchMap:
CLC : ADC.b $00
RTL
+ PHA
.do_swap
TXA
.try_next
ASL A
TAX
PLA
LDA.b $F6
BIT.b #$20
BNE +
INX
+ LDA.l DungeonMapData.prev, X
+
LDA.l DungeonMapData.prev, X
JSL IsValidDungeonToSwapTo
BCC .try_next
STA.w DungeonID
LDA.b #$04
@@ -87,6 +98,58 @@ CheckSwitchMap:
LDA.w #$0000
RTL
; in A = dungeon ID to check
; out C - CC = not valid, CS = valid
IsValidDungeonToSwapTo:
CMP.l CachedDungeonID ; dungeon we're in is always valid
BNE +
SEC
RTL
+
PHP
REP #$20
PHX : PHA
TAX
LDA.l MapSwapping
BIT.w #$0080
BNE .yes
BIT.w #$0001
BEQ +
; check visited flag
LDA.l SwapMasks, X
AND.l DungeonVisited
BNE .yes
+
LDA.l MapSwapping : BIT.w #$0002
BEQ +
; check map flag
LDA.l SwapMasks, X
AND.l MapField
BNE .yes
+
.no
PLA : PLX
PLP
CLC
RTL
.yes
PLA : PLX
PLP
SEC
RTL
SwapMasks:
dw $C000, $C000, $2000, $1000
dw $0800, $0400, $0200, $0100
dw $0080, $0040, $0020, $0010
dw $0008, $0004, $0002, $0001
DungeonMapSwitch_Submodule:
JSL $80893D
JSL $80833F
@@ -224,39 +287,32 @@ DrawDungeonLabel:
CLC : ADC.w #$0008
TAY
LDA.l MapSwapping
BEQ +
; L/R switch indicators
LDA.w #$E310
LDA.w #$E360
STA.w GFXStripes+$02, Y
LDA.w #$E910
LDA.w #$E960
STA.w GFXStripes+$0A, Y
LDA.w #$E318
STA.w GFXStripes+$12, Y
LDA.w #$E918
STA.w GFXStripes+$1A, Y
LDA.w #$0300
STA.w GFXStripes+$04, Y
STA.w GFXStripes+$0C, Y
STA.w GFXStripes+$14, Y
STA.w GFXStripes+$1C, Y
LDA.w #$49AF
LDA.w #$65BF
STA.w GFXStripes+$06, Y
STA.w GFXStripes+$16, Y
LDA.w #$099E
LDA.w #$25BD
STA.w GFXStripes+$08, Y
STA.w GFXStripes+$18, Y
LDA.w #$099F
LDA.w #$25BE
STA.w GFXStripes+$0E, Y
STA.w GFXStripes+$1E, Y
LDA.w #$09AF
LDA.w #$25BF
STA.w GFXStripes+$10, Y
STA.w GFXStripes+$20, Y
TYA
CLC : ADC.w #$0020
CLC : ADC.w #$0010
TAY
+
LDA.l DRMode
BNE .doors
+43 -18
View File
@@ -1,10 +1,51 @@
pushpc
org $828C73
JSL EnterRoom
NOP
org $86C0AB
JSL CollectHeartPieceAndUpdate
org $86D1A8
JSL SetDeathFlagAndUpdate
pullpc
SetDeathFlagAndUpdate:
JSL UpdateLootHUD
JSL Sprite_ManuallySetDeathFlagUW
RTL
CollectHeartPieceAndUpdate:
JSL $85F018
JSL UpdateLootHUD
RTL
ClearLootHUD:
LDA.b GameMode
CMP.b #$07
BNE UpdateLootHUD
;
PHP
REP #$20
LDA.w #!BlankTile : STA.w EnemyDropIndicator
PLP
RTL
EnterRoom:
; what we wrote over
STZ.w $0200
STZ.b $B0
; fall into UpdateLootHUD
UpdateLootHUD:
PHP
REP #$30
PHX : PHY
SEP #$30
LDA.l ShowLootInHUD : BEQ .setting_off
LDA.l HudItems_enabled : BEQ .setting_off
LDA.b IndoorsFlag : BEQ .done
REP #$30
@@ -36,23 +77,7 @@ UpdateLootHUD:
ASL A : ASL A : ASL A : ASL A
ORA.b RoomIndex
.check
JSL CheckLoot
SEP #$30
CMP.l ShowItems_hud_cap
BCC +
LDA.l ShowItems_hud_cap
+
LDX.w DungeonID
CPX.b #$FF
BNE +
CMP.l ShowItems_cave_cap
BCC +
LDA.l ShowItems_cave_cap
+
REP #$30
JSL CheckHudLoot
ASL A : TAX
LDA.l HUDLootTypeIcons, X
+31
View File
@@ -0,0 +1,31 @@
CheckOrangePotion:
LDA.l BottleContents, X
CMP.b #$01
BEQ .orange
; return to vanilla behavior
CMP.b #$00
RTL
.orange
LDA.l InfiniteMagic
BNE .nope
LDA.b #$02
STA.l BottleContents, X
STZ.w $0301
LDA.b #$01
STA.l InfiniteMagic
JSL RebuildHUD_update_long
LDA.b #$00
RTL
.nope
JSL Sound_SetSfxPanWithPlayerCoords
ORA.b #$3C
STA.w SFX2
LDA.b #$00
RTL
+80 -43
View File
@@ -52,10 +52,10 @@ dw $2DCB, $6DCB, $ADCB, $EDCB ; 01 - unknown - dot
dw $29EB, $69EB, $29FB, $69FB ; 02 - junk - pot
dw $29CA, $69CA, $29DA, $29DB ; 03 - small key
dw $29E9, $69E9, $29F9, $69F9 ; 04 - triforce piece
dw $29DD, $69DD, $A9DD, $E9DD ; 05 - safety - plus
dw $29DD, $69DD, $A9DD, $E9DD ; 05 - health - plus
dw $29EC, $69EC, $29FC, $69FC ; 06 - less important item - small chest
dw $29CE, $29CF, $29DE, $29DF ; 07 - map
dw $29E8, $69E8, $29F8, $69F8 ; 08 - compass
dw $29E8, $69E8, $29F8, $69F8 ; 07 - compass
dw $29CE, $29CF, $29DE, $29DF ; 08 - map
dw $29CA, $69CA, $29DA, $29DB ; 09 - small key
dw $29C8, $69C8, $29D8, $29D9 ; 0A - big key
dw $29ED, $69ED, $29FD, $69FD ; 0B - important inventory item - big chest
@@ -73,29 +73,32 @@ warnpc $B9FA00
org $B9FA00
; Room ID mappings to bit to check for presence and address of item drop
MiscLocations:
dw $00C8 : db $04 : dl HeartContainer_ArmosKnights
dw $0033 : db $04 : dl HeartContainer_Lanmolas
dw $0007 : db $04 : dl HeartContainer_Moldorm
dw $10C8 : db $04 : dl HeartContainer_ArmosKnights
dw $1033 : db $04 : dl HeartContainer_Lanmolas
dw $1007 : db $04 : dl HeartContainer_Moldorm
dw $005A : db $04 : dl HeartContainer_HelmasaurKing
dw $0006 : db $04 : dl HeartContainer_Arrghus
dw $0029 : db $04 : dl HeartContainer_Mothula
dw $00AC : db $04 : dl HeartContainer_Blind
dw $00DE : db $04 : dl HeartContainer_Kholdstare
dw $0090 : db $04 : dl HeartContainer_Vitreous
dw $00A4 : db $04 : dl HeartContainer_Trinexx
dw $105A : db $04 : dl HeartContainer_HelmasaurKing
dw $1006 : db $04 : dl HeartContainer_Arrghus
dw $1029 : db $04 : dl HeartContainer_Mothula
dw $10AC : db $04 : dl HeartContainer_Blind
dw $10DE : db $04 : dl HeartContainer_Kholdstare
dw $1090 : db $04 : dl HeartContainer_Vitreous
dw $10A4 : db $04 : dl HeartContainer_Trinexx
dw $0073 : db $05 : dl BonkKey_Desert ; torch
dw $008C : db $05 : dl BonkKey_GTower ; torch
dw $0087 : db $05 : dl StandingKey_Hera
dw $1073 : db $05 : dl BonkKey_Desert ; torch
dw $108C : db $05 : dl BonkKey_GTower ; torch
dw $1087 : db $05 : dl StandingKey_Hera
dw $10E1 : db $06 : dl HeartPiece_Forest_Thieves
dw $10E2 : db $06 : dl HeartPiece_Lumberjack_Tree
dw $10EA : db $05 : dl HeartPiece_Spectacle_Cave
dw $111B : db $06 : dl HeartPiece_Graveyard_Warp
dw $211B : db $05 : dl HeartPiece_Circle_Bushes
dw $111E : db $05 : dl RupeeNPC_NortheastDarkSwampCave
dw $1123 : db $05 : dl RupeeNPC_MoldormCave
dw $1126 : db $06 : dl HeartPiece_Mire_Warp
dw $1127 : db $05 : dl HeartPiece_Smith_Pegs
dw $FFFF : db $FF : dl $FFFFFF ; Placeholders
dw $FFFF : db $FF : dl $FFFFFF
dw $FFFF : db $FF : dl $FFFFFF ; Aga 1? ($0020)
dw $FFFF : db $FF : dl $FFFFFF ; Ice Armos? ($001C)
dw $FFFF : db $FF : dl $FFFFFF ; Lanmolas 2? ($0033)
dw $FFFF : db $FF : dl $FFFFFF ; Moldorm 2? ($004D)
dw $FFFF : db $FF : dl $FFFFFF ; Aga 2? ($000D)
dw $FFFF
warnpc $B9FA9A
@@ -128,7 +131,7 @@ pad $B9FB00
; $B9FB00
DungeonLabels:
dw $2550, $2579 ; Sewers
dw $25A4, $2579 ; Sewers
dw $2564, $255F ; Hyrule Castle
dw $2561, $256C ; Eastern Palace
dw $2560, $256C ; Desert Palace
@@ -152,10 +155,10 @@ dw $295C ; 01 - unknown - dot
dw $2954 ; 02 - junk - pot
dw $2950 ; 03 - small key
dw $2952 ; 04 - triforce piece
dw $2955 ; 05 - safety - plus
dw $2955 ; 05 - health - plus
dw $2953 ; 06 - less important item - small chest
dw $2957 ; 07 - map
dw $2D56 ; 08 - compass
dw $2D56 ; 07 - compass
dw $2957 ; 08 - map
dw $2950 ; 09 - small key
dw $2951 ; 0A - big key
dw $295A ; 0B - important inventory item - big chest
@@ -165,6 +168,25 @@ dw $2952 ; 0E - triforce piece
dw $295B ; 0F - triforce
; $B9FB60
NpcItems:
dw $10E3 : dl $7EF411 : db $80 ; Magic Bat
dw $1102 : dl $7EF410 : db $04 ; Sick Kid
dw $1105 : dl $7EF410 : db $10 ; Sahasrahla
dw $1109 : dl $7EF411 : db $20 ; Potion Shop
dw $1121 : dl $7EF411 : db $04 ; Blacksmith
dw $FFFF
warnpc $B9FBA0
padbyte $FF
pad $B9FBA0
; $B9FBA0
; Currently these two are hard-coded checks
; but maybe that will change if more show up someday?
MiscLocations2:
dw $1055 : dw $7EF3C6 : db $01 : dl UncleItem
dw $2107 : dw $7EF410 : db $80 : dl LibraryItem
dw $FFFF
warnpc $B9FE00
org $B9FE00
@@ -198,38 +220,53 @@ warnpc $B9FF08
org $B9FF08
; $00 - do not show anything
; $01 - show presence of unobtained items
; $02 - show category of item
ShowItems:
; $02 - show compass if presence, otherwise presence of unobtained items
; $03 - show category of item
MapItems:
.default
db $00
.have_map
db $00
.have_compass
db $02
db $03
.visited_tile
db $01
db $02
.reserved
skip 2
.hud_cap
db $FF
.cave_cap
skip 3
.enabled
db $01
warnpc $B9FF10
org $B9FF10
; ---P bepc
HudItems:
.cave
db $00
.default_dungeon
db $00
.have_map
db $01
.have_compass
db $03
.reserved
skip 3
.enabled
db $01
warnpc $B9FF18
org $B9FF20
; ---P sepc
; P - dungeon prizes
; b - bosses (and torches in GT and desert, plus hera basement standing item)
; s - standing items (plus torches in GT and desert and bosses)
; e - enemy drops
; p - pots
; c - chests
ItemSources:
db $09
; $B9FF11
AlwaysShowCompass:
db $01
; $B9FF12
ShowLootInHUD:
; B9FF21
; a--- --mv
; a - always
; m - have map
; v - have visited dungeon
MapSwapping:
db $01
+1 -1
View File
@@ -1,6 +1,6 @@
DamageClassCalc:
PHA
LDA.l GanonVulnerabilityItem : BEQ +
LDA.l GanonVulnerabilityItem : AND.b #$7F : BEQ +
LDA.w SpriteTypeTable, X : CMP.b #$D7 : BNE +
PLA
JSL Ganon_CheckAncillaVulnerability
+9 -6
View File
@@ -4,12 +4,14 @@ Ganon_CheckAncillaVulnerability:
PLA
PHX : PHA
LDA.l GanonVulnerabilityItem
BMI .no_weakness
BVS .no_weakness
AND.b #$7F
TAX : PLA
CMP.l Ganon_CheckByAncilla, X : BNE +
PLX : BRA .vulnerable
+ PLX : PHA
LDA.l GanonVulnerabilityItem
AND.b #$7F
BEQ .silver_arrows
CMP.b #$01 : BEQ .silver_arrows
CMP.b #$11 : BEQ .somaria
@@ -34,6 +36,7 @@ Ganon_CheckAncillaVulnerability:
.vulnerable
PHX
LDA.l GanonVulnerabilityItem
AND.b #$7F
TAX
LDA.l Ganon_IFrameDuration, X
PLX
@@ -52,7 +55,7 @@ Ganon_CheckAncillaVulnerability:
RTL
;--------------------------------------------------------------------------------
Ganon_CheckPowderVulnerability:
LDA.l GanonVulnerabilityItem : CMP.b #$05 : BNE .normal
LDA.l GanonVulnerabilityItem : AND.b #$7F : CMP.b #$05 : BNE .normal
LDA.w SpriteTypeTable, X : CMP.b #$D7 : BNE .normal
LDA.w $0EE0, X : BNE .normal ; ganon has i-frames
LDA.l Ganon_IFrameDuration+$05
@@ -69,7 +72,7 @@ Ganon_CheckPowderVulnerability:
Ganon_CheckBeeVulnerability:
; X is bee sprite index
; Y is target sprite index
LDA.l GanonVulnerabilityItem : CMP.b #$10 : BNE .normal
LDA.l GanonVulnerabilityItem : AND.b #$7F : CMP.b #$10 : BNE .normal
LDA.w SpriteTypeTable, Y : CMP.b #$D7 : BNE .normal
LDA.w $0EE0, Y : BNE .normal ; ganon has i-frames
LDA.l Ganon_IFrameDuration+$10
@@ -88,14 +91,14 @@ Ganon_CheckInvincible:
LDA.w $04C5 : CMP.b #$02 : BEQ .not_transparent
LDA.w SpriteTypeTable, X : CMP.b #$D7 : BNE .transparent ; non-stunned ganon
LDA.w UseY1 : AND.b #$0A : BEQ .transparent ; normal behavior if not hammering
LDA.l GanonVulnerabilityItem : CMP.b #$0C : BNE .transparent
LDA.l GanonVulnerabilityItem : AND.b #$7F : CMP.b #$0C : BNE .transparent
.not_transparent
LDA.b #$00 : RTL
.transparent
LDA.b #$01 : RTL
;--------------------------------------------------------------------------------
Ganon_CheckHammerVulnerability:
LDA.l GanonVulnerabilityItem : CMP.b #$0C : BNE .normal
LDA.l GanonVulnerabilityItem : AND.b #$7F : CMP.b #$0C : BNE .normal
LDA.w SpriteTypeTable, X : CMP.b #$D7 : BNE .normal
LDA.w $0EE0, X : BNE .normal ; ganon has i-frames
LDA.l Ganon_IFrameDuration+$0C
@@ -108,7 +111,7 @@ Ganon_CheckHammerVulnerability:
;--------------------------------------------------------------------------------
CheckBeeBoss:
; Y is sprite index
LDA.l GanonVulnerabilityItem : CMP.b #$10 : BNE .normal
LDA.l GanonVulnerabilityItem : AND.b #$7F : CMP.b #$10 : BNE .normal
LDA.w SpriteTypeTable, Y : CMP.b #$D7 : BNE .normal
LDA.b #$00 : RTL
.normal
+3
View File
@@ -1,5 +1,8 @@
GoalItemGanonCheck:
LDA.w SpriteTypeTable, X : CMP.b #$D6 : BNE .success ; skip if not ganon
LDA.l GanonVulnerabilityItem : BPL +
LDA.w SpriteActivity, X : CMP.b #$12 : BEQ .fail
+
LDA.b #$01 : JSL CheckConditionPass
BCS .success
+33 -2
View File
@@ -997,6 +997,15 @@ LDA.w BottleListExpanded, X
org $89895C ; 4895C - ancilla_init.asm:1344 (LDA PotionList, X)
LDA.w PotionListExpanded, X
org $898946
CMP.b #$00 : BNE + : skip 9 : +
org $89895A
LDX.b #$06
org $89896A
ADC.b #$01
;--------------------------------------------------------------------------------
org $86D1EB ; 351EB - sprite_absorbable.asm:364 (STA $7EF375) ; bugbug commented out until i figure out why it doesn't work
JSL HandleBombAbsorbtion
@@ -1029,6 +1038,7 @@ JSL RefillHealth
;--------------------------------------------------------------------------------
org $80F922 ; <- 7922 - Bank00.asm:8543 - (JSL HUD.RefillMagicPower : BCC .beta)
JSL RefillMagic
;--------------------------------------------------------------------------------
;================================================================================
; Early Bottle Fix
@@ -1117,7 +1127,8 @@ JSL CompareBombsToMax : NOP #11
org $85FC7E ; <- 2FC7E - sprite_dash_item.asm : 118 (LDA $7EF36F : INC A : STA $7EF36F)
JSL GiveBonkItem : NOP #5
org $85FC97 ; <- 2FC97 - sprite_dash_item.asm : 126 (LDA.b #$2F : JSL Sound_SetSfx3PanLong)
NOP #6
JSL UpdateLootHUD
NOP #2
;--------------------------------------------------------------------------------
org $868D39 ; <- 30D39 - sprite_prep.asm : 1435 - (LDA.b #$08 : STA $0F50, X)
JSL LoadBonkItemGFX
@@ -1164,6 +1175,8 @@ ORA.w #$8000 : STA.w $007E, Y
ORA.w #$4000 : STA.w $0084, Y
JSL AddYMarker : NOP #2
;--------------------------------------------------------------------------------
org $8DF779 ; <- 6F779 (not in disassembly) - mushroom bottle hud tile
dw $20D2, $60D2, $20E2, $202D ; (Orig: $2044, $2045, $2046, $2047)
org $8DF789+6 ; <- 6F789+6 (not in disassembly) - red bottle hud tile, lower right
dw $2413 ; (Orig: #$24E3)
org $8DF789+6+8 ; green bottle hud tile, lower right
@@ -1643,7 +1656,8 @@ JSL FixAga2Bunny : NOP
; Open Mode Fixes
;--------------------------------------------------------------------------------
org $85DF65 ; <- 2DF65 - sprite_uncle_and_priest.asm:994 - (LDA.b #$01 : STA $7EF3C5)
NOP #6
JSL UpdateLootHUD
NOP #2
;--------------------------------------------------------------------------------
org $85EDDF ; <- 2EDDF - sprite_zelda.asm:398 - (LDA.b #$02 : STA $7EF3C5)
JSL EndRainState : NOP #2
@@ -2758,6 +2772,13 @@ JSL MimicDirection
org $828068
JSL AdjustDefaultGraphics
;================================================================================
;--------------------------------------------------------------------------------
; Remove Overwriting HUD gfx on game over
;--------------------------------------------------------------------------------
org $809038
RTS
;================================================================================
;--------------------------------------------------------------------------------
; Dungeon Indicator VRAM overwrite
@@ -2765,6 +2786,9 @@ JSL AdjustDefaultGraphics
org $828190
JSL LoadDungeonIndicator
org $829AA2
JSL LoadDungeonIndicator
;================================================================================
; Special Weapons Modes
;--------------------------------------------------------------------------------
@@ -2835,3 +2859,10 @@ org $8DFB63 ; bank_0D.asm@18092 (LDA.l $7EF33F, X : AND.w #$00FF)
JSL CheckFluteInHUD
NOP #3
;--------------------------------------------------------------------------------
;================================================================================
; Orange Potion (Chateau Romani)
;--------------------------------------------------------------------------------
org $87A15C ; bank_07.asm@6963 (LDA.l $7EF35C, X)
JSL CheckOrangePotion
;--------------------------------------------------------------------------------
+6 -6
View File
@@ -239,7 +239,7 @@ endmacro
%ReceiptProps($63, -4, 0, $FF, $F36A, $FF, skip, rng_multi) ; 63 - RNG pool item (multi)
%ReceiptProps($64, -4, 0, $FF, $F340, $FF, skip, progressive_bow) ; 64 - Progressive bow
%ReceiptProps($65, -4, 0, $FF, $F340, $FF, skip, progressive_bow_2) ; 65 - Progressive bow
%ReceiptProps($66, -4, 0, $FF, $F36A, $FF, skip, skip) ; 66 -
%ReceiptProps($66, -4, 0, $51, $F36E, $FF, skip, skip) ; 66 - Potion refill (yellow)
%ReceiptProps($67, -4, 0, $FF, $F36A, $FF, skip, skip) ; 67 -
%ReceiptProps($68, -4, 0, $FF, $F36A, $FF, skip, skip) ; 68 -
%ReceiptProps($69, -4, 0, $FF, $F36A, $FF, skip, skip) ; 69 -
@@ -518,7 +518,7 @@ endmacro
%SpriteProps($63, 2, 2, $FF, $FF, $0000) ; 63 - RNG pool item (multi)
%SpriteProps($64, 2, 2, $FF, $FF, $0000) ; 64 - Progressive bow
%SpriteProps($65, 2, 2, $FF, $FF, $0000) ; 65 - Progressive bow
%SpriteProps($66, 2, 2, $00, $00, $0000) ; 66 -
%SpriteProps($66, 2, 2, $02, $02, $0000) ; 66 - Potion refill (yellow)
%SpriteProps($67, 2, 2, $00, $00, $0000) ; 67 -
%SpriteProps($68, 2, 2, $00, $00, $0000) ; 68 -
%SpriteProps($69, 2, 2, $00, $00, $0000) ; 69 -
@@ -794,7 +794,7 @@ endmacro
%InventoryItem($63, $0001, $0000, $0000) ; 63 - RNG pool item (multi)
%InventoryItem($64, $00A5, $0000, $0000) ; 64 - Progressive bow
%InventoryItem($65, $00A5, $0000, $0000) ; 65 - Progressive bow
%InventoryItem($66, $0001, $0000, $0000) ; 66 -
%InventoryItem($66, $0081, $0000, $0000) ; 66 - Potion refill (yellow)
%InventoryItem($67, $0001, $0000, $0000) ; 67 -
%InventoryItem($68, $0001, $0000, $0000) ; 68 -
%InventoryItem($69, $0001, $0000, $0000) ; 69 -
@@ -1054,7 +1054,7 @@ ItemReceiptGraphicsOffsets:
dw $0 ; 63 - RNG pool item (multi)
dw $0 ; 64 - Progressive bow
dw $0 ; 65 - Progressive bow
dw $0 ; 66 -
dw $0CE0 ; 66 - Potion refill (yellow)
dw $0 ; 67 -
dw $0 ; 68 -
dw $0 ; 69 -
@@ -1324,7 +1324,7 @@ StandingItemGraphicsOffsets:
dw $0 ; 63 - RNG pool item (multi)
dw $0 ; 64 - Progressive bow
dw $0 ; 65 - Progressive bow
dw $0 ; 66 -
dw $0CA0 ; 66 - Potion refill (yellow)
dw $0 ; 67 -
dw $0 ; 68 -
dw $0 ; 69 -
@@ -1590,7 +1590,7 @@ VRAMAddressOffset:
dw $0024 ; 63 - RNG pool item (multi)
dw $0024 ; 64 - Progressive bow
dw $0024 ; 65 - Progressive bow
dw $0024 ; 66 -
dw $0024 ; 66 - Potion refill (yellow)
dw $0024 ; 67 -
dw $0024 ; 68 -
dw $0024 ; 69 -
+2 -2
View File
@@ -46,7 +46,7 @@ dw $7F7F
; Ganons Tower
Notice_GTower:
db $76 : dw "Ganons Tower"
db $76 : dw "Ganon's Tower"
dw $7F7F
; Turtle Rock
@@ -81,7 +81,7 @@ dw $7F7F
; Dark Palace
Notice_PoD:
db $76 : dw "Dark Palace"
db $76 : dw "Palace of Darkness"
dw $7F7F
; Swamp Palace
+1 -1
View File
@@ -360,7 +360,7 @@ ClearSpriteData:
STZ.w SprSourceItemId, X : STZ.w SprItemReceipt, X : STZ.w SprItemMWPlayer, X
STZ.w SprRedrawFlag, X
DEX : BPL .loop
JSL UpdateLootHUD
JSL ClearLootHUD
PLX
RTL
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -9,7 +9,7 @@ UploadMenuOnlyIcons:
REP #$20
LDA.w #MenuOnlyIcons : STA.w $4342
LDA.w #$1801 : STA.w $4340
LDA.w #$0310 : STA.w $4345
LDA.w #$0400 : STA.w $4345
LDA.w #$0F800>>1 : STA.w $2116
SEP #$20
+5
View File
@@ -123,6 +123,11 @@ GetMultiworldItem:
BRL .return
+
LDA.b LinkPushDirection
BEQ +
BRL .return
+
LDA.l !MULTIWORLD_ITEM : BNE +
BRL .return
+
+18 -13
View File
@@ -273,10 +273,15 @@ NewHUD_DrawMagicMeter:
STA.w CurrentMagic
TAY
LDA.b FrameCounter
REP #$30
AND.w #$000C
LSR
LDA.w #$0002
; ; cycle through colors
; LDA.b FrameCounter
; REP #$30
; AND.w #$000C
; LSR
BRA .recolor
.set_index ; this branch is always 0000 when taken
@@ -309,16 +314,16 @@ MagicMeterColorMasks:
;================================================================================
PrizeIconTiles_Transparent:
dw $0000 ; no icon
dw $2978 ; crystal 1
dw $2979 ; crystal 2
dw $297A ; crystal 3
dw $297B ; crystal 4
dw $297C ; crystal 5
dw $297D ; crystal 6
dw $297E ; crystal 7
dw $2963 ; green pendant
dw $295E ; blue pendant
dw $296E ; red pendant
dw $2891 ; crystal 1
dw $2892 ; crystal 2
dw $2893 ; crystal 3
dw $2894 ; crystal 4
dw $2895 ; crystal 5
dw $2896 ; crystal 6
dw $2897 ; crystal 7
dw $2935 ; green pendant
dw $2936 ; blue pendant
dw $2937 ; red pendant
;================================================================================
DrawCompassCounts:
+1 -1
View File
@@ -935,7 +935,7 @@ BottleListExpanded:
db $16, $2B, $2C, $2D, $3D, $3C, $48
PotionListExpanded:
db $2E, $2F, $30, $FF, $0E
db $66, $FF, $2E, $2F, $30, $FF, $0E
;--------------------------------------------------------------------------------
HandleBowTracking:
; In: A - Item Receipt ID
+24 -6
View File
@@ -90,11 +90,17 @@ ItemSet_FairySword:
RTL
ItemSet_SmithSword:
PHA : LDA.l NpcFlags+1 : ORA.b #$04 : STA.l NpcFlags+1 : PLA
PHA
LDA.l NpcFlags+1 : ORA.b #$04 : STA.l NpcFlags+1
JSL UpdateLootHUD
PLA
RTL
ItemSet_MagicBat:
PHA : LDA.l NpcFlags+1 : ORA.b #$80 : STA.l NpcFlags+1 : PLA
PHA
LDA.l NpcFlags+1 : ORA.b #$80 : STA.l NpcFlags+1
JSL UpdateLootHUD
PLA
RTL
ItemSet_OldMan:
@@ -110,7 +116,10 @@ RTL
ItemSet_SickKid:
PHA : LDA.l SickKidItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
JSL Link_ReceiveItem ; thing we wrote over
PHA : LDA.l NpcFlags : ORA.b #$04 : STA.l NpcFlags : PLA
PHA
LDA.l NpcFlags : ORA.b #$04 : STA.l NpcFlags
JSL UpdateLootHUD
PLA
RTL
ItemSet_TreeKid:
@@ -122,7 +131,10 @@ RTL
ItemSet_Sahasrala:
PHA : LDA.l SahasralaItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
JSL Link_ReceiveItem ; thing we wrote over
PHA : LDA.l NpcFlags : ORA.b #$10 : STA.l NpcFlags : PLA
PHA
LDA.l NpcFlags : ORA.b #$10 : STA.l NpcFlags
JSL UpdateLootHUD
PLA
RTL
ItemSet_Catfish:
@@ -132,7 +144,10 @@ RTL
ItemSet_Library:
PHA : LDA.l LibraryItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
JSL Link_ReceiveItem ; thing we wrote over
PHA : LDA.l NpcFlags : ORA.b #$80 : STA.l NpcFlags : PLA
PHA
LDA.l NpcFlags : ORA.b #$80 : STA.l NpcFlags
JSL UpdateLootHUD
PLA
RTL
ItemSet_Mushroom:
@@ -149,7 +164,10 @@ ItemSet_Mushroom:
RTL
ItemSet_Powder:
PHA : LDA.l NpcFlags+1 : ORA.b #$20 : STA.l NpcFlags+1 : PLA
PHA
LDA.l NpcFlags+1 : ORA.b #$20 : STA.l NpcFlags+1
JSL UpdateLootHUD
PLA
RTL
;================================================================================
+1
View File
@@ -338,6 +338,7 @@ SpawnedItemFlag = $7E0726 ; 0x02 - one for pot, 2 for sprite drop
SpawnedItemMWPlayer = $7E0728 ; Player Id for spawned item if Multiworld item 0x02
;
EnemyDropIndicator = $7E072A ; Used by HUD to indicate enemy drops remaining
NpcItemIndicator = $7E072C ; Flag used by HUD to indicate NPC item present
SkipBeeTrapDisguise = $7E072D ; Flag to skip bee trap disguise during draw routine
SprDropsItem = $7E0730 ; Array for whether a sprite drops an item 0x16
+3
View File
@@ -433,9 +433,12 @@ Shopkeeper_BuyItem:
CMP.b #$2E : BEQ .refill ; Red Potion Refill
CMP.b #$2F : BEQ .refill ; Green Potion Refill
CMP.b #$30 : BEQ .refill ; Blue Potion Refill
CMP.b #$66 : BEQ .refill ; Orange Potion Refill
CMP.b #$AF : BEQ .generic_key
BRA +
.refill
JSL Sprite_GetEmptyBottleIndex : BMI .full_bottles
.generic_key
LDA.b #$1 : STA.l ShopkeeperRefill ; If this is on, don't toggle bit to remove from shop
+
+4 -2
View File
@@ -240,7 +240,9 @@ CompassCountDisplay: skip 2 ; Compass count display flags (bitfield)
; High Byte: x c e d a s p m
; x = Sewers | c = Hyrule Castle | e = Eastern Palace | d = Desert Palace
; a = Castle Tower | s = Swamp Palace | p = PoD | m = Mire
skip 10 ;
DungeonVisited: skip 2 ; Whether each dungeon has been entered (bitfield)
; same order of bits as CompassCountDisplay above
skip 8 ;
Aga2Duck: skip 1 ; Used in lieu of pyramid hole for checking if the duck should come
; 0 = Haven't called post-Aga 2 bird | 1 = Have called post-Aga 2 bird
NpcFlags: skip 2 ; l - c s t k z o (bitfield)
@@ -306,7 +308,7 @@ HeartContainerCounter: skip 1 ; Total number of heart containers collected (in
DeathCounter: skip 1 ; Number of deaths (integer)
skip 1 ; Reserved
FluteCounter: skip 1 ; Number of times fluted (integer)
skip 4 ;
MapFrames: skip 4 ; Total map time in frames (32-bit integer)
RNGItem: skip 2 ; RNG Item
SwordlessBossKills: skip 1 ; Number of bosses killed without a sword (integer)
FaerieRevivalCounter: skip 1 ; Number of faerie revivals (integer)
+18 -16
View File
@@ -504,7 +504,16 @@ CreditsLineBlank:
%blankline()
%blankline()
%smallcredits("SPRITE DEVELOPMENT", "yellow")
%smallcredits("GWAAKIWI * DUNGEON MAPS", "yellow")
%blankline()
%bigcredits("KARAFRUIT")
%blankline()
%blankline()
%smallcredits("SPRITE DEVELOPMENT", "green")
%blankline()
@@ -525,7 +534,7 @@ CreditsLineBlank:
%blankline()
%blankline()
%smallcredits("YOUR SPRITE BY", "green")
%smallcredits("YOUR SPRITE BY", "yellow")
%blankline()
@@ -535,7 +544,7 @@ CreditsLineBlank:
%blankline()
%blankline()
%smallcredits("MSU SUPPORT", "yellow")
%smallcredits("MSU SUPPORT", "green")
%blankline()
@@ -544,7 +553,7 @@ CreditsLineBlank:
%blankline()
%blankline()
%smallcredits("PALETTE SHUFFLER", "green")
%smallcredits("PALETTE SHUFFLER", "yellow")
%blankline()
@@ -553,7 +562,7 @@ CreditsLineBlank:
%blankline()
%blankline()
%smallcredits("WEBSITE LOGO", "yellow")
%smallcredits("WEBSITE LOGO", "green")
%blankline()
@@ -623,12 +632,6 @@ endif
%bigcredits("HTTPS://ALTTPR.COM/DISCORD")
%emptyline()
%emptyline()
%emptyline()
%emptyline()
%emptyline()
%emptyline()
%emptyline()
%emptyline()
@@ -752,14 +755,13 @@ endif
%blankline()
%bigcreditsleft("TOTAL MAP TIME")
%blankline()
%bigcreditsleft("TOTAL LAG TIME")
%blankline()
%blankline()
%blankline()
%blankline()
%blankline()
+7 -3
View File
@@ -263,6 +263,10 @@ dw $3D9E ; ~ ;
dw $3D98 ; , ;
dw $3D99 ; - ; $FB
dw $0000 ; ;
dw $0000 ; ;
dw $0000 ; ;
dw $0000 ; ;
; green ellipsis ;
dw $293F ; ; $FD
; green period
dw $29FE ; ; $FE
; yellow dot
dw $2DFA ; ; $FF
+3 -3
View File
@@ -174,7 +174,7 @@ FindLine:
!FRAMES_PER_SECOND = 60
!FRAMES_PER_MINUTE = 60*60
!FRAMES_PER_HOUR = 60*60*60
!MAX_FRAME_COUNT = 59*60+59*60+59*60+99
!MAX_FRAME_COUNT = (99*60*60*60)+(59*60*60)+(59*60)+59
macro CountUnits(framesPerUnit, unitCounter)
STZ.b <unitCounter>
@@ -196,7 +196,7 @@ endmacro
!ColonOffset = $8A
!PeriodOffset = $4D
BlankCreditsTile = $883D
BlankCreditsTile = $3D88
RenderCreditsStatCounter:
PHB
@@ -591,7 +591,7 @@ EndingSequenceTableLookupOverride:
PHK : PLB
TYX
LDA.l EndingSequenceText, X : AND.w #$00FF
ASL
ASL A
TAY
LDA.w FontTable,Y
PLB : PLX
+5 -3
View File
@@ -30,8 +30,10 @@
!FAERIE_REVIVALS_Y = 361
!TOTAL_MENU_TIME_X = 19
!TOTAL_MENU_TIME_Y = 364
!TOTAL_MAP_TIME_X = 19
!TOTAL_MAP_TIME_Y = 367
!TOTAL_LAG_TIME_X = 19
!TOTAL_LAG_TIME_Y = 367
!TOTAL_LAG_TIME_Y = 370
!COLLECTION_RATE_X = 22
!COLLECTION_RATE_Y = 380
!TOTAL_TIME_X = 19
@@ -62,10 +64,10 @@ CreditsStats:
%AddStat(SaveQuitCounter, 0, 0, 08, 2, !SAVE_AND_QUITS_X, !SAVE_AND_QUITS_Y)
%AddStat(DeathCounter, 0, 0, 08, 2, !DEATHS_X, !DEATHS_Y)
%AddStat(FaerieRevivalCounter, 0, 0, 08, 3, !FAERIE_REVIVALS_X, !FAERIE_REVIVALS_Y)
%AddStat(MenuFrames, 1, 8, 32, 4, !TOTAL_MENU_TIME_X, !TOTAL_MENU_TIME_Y)
%AddStat(MenuFrames, 1, 0, 32, 4, !TOTAL_MENU_TIME_X, !TOTAL_MENU_TIME_Y)
%AddStat(MapFrames, 1, 0, 32, 4, !TOTAL_MAP_TIME_X, !TOTAL_MAP_TIME_Y)
%AddStat(LagTime, 1, 0, 32, 4, !TOTAL_LAG_TIME_X, !TOTAL_LAG_TIME_Y)
print "Collection Rate config: ", pc
warnpc $A39864
%AddStat(TotalItemCounter, 0, 0, 16, 3, !COLLECTION_RATE_X, !COLLECTION_RATE_Y)
%AddStat(NMIFrames, 1, 0, 32, 4, !TOTAL_TIME_X, !TOTAL_TIME_Y)
+1 -1
View File
@@ -101,7 +101,7 @@ CheckGanonHammerDamage:
LDA.w SpriteTypeTable, X : CMP.b #$D8 ; original behavior except ganon
RTL
+
LDA.l GanonVulnerabilityItem : CMP.b #$0C : BEQ .hammer_silvers
LDA.l GanonVulnerabilityItem : AND.b #$7F : CMP.b #$0C : BEQ .hammer_silvers
LDA.w SpriteTypeTable, X : CMP.b #$D6 ; original behavior
RTL
+7 -7
View File
@@ -105,6 +105,10 @@ db $00
;--------------------------------------------------------------------------------
org $B0802E
GanonVulnerabilityItem:
; sn-i iiii
; s - immune to sword spins in phase 4
; n - immune to all items
; i - index of item vulnerability
db $00 ; $00 = default behavior (silver arrows)
;--------------------------------------------------------------------------------
org $B0902F
@@ -237,12 +241,8 @@ db $00
;a - Infinite Arrows
;--------------------------------------------------------------------------------
org $B0804E ; PC 0x18004E
UncleRefill:
UncleRefill_deprecated: ; no longer used
db $00
;---- -mba
;m - Refill Magic
;b - Refill Bombs
;a - Refill Arrows
;--------------------------------------------------------------------------------
org $B0804F ; PC 0x18004F
ByrnaInvulnerability:
@@ -890,8 +890,8 @@ SilverArrowsAutoEquip:
db $01 ; #$00 = Off - #$01 = Collection Time (Default) - #$02 = Entering Ganon - #$03 = Collection Time & Entering Ganon
;================================================================================
org $B08183 ; PC 0x180183
FreeUncleItemAmount:
dw $12C ; 300 rupees (Default)
RainDeathRefillRupeeBow:
dw $012C ; 300 rupees (Default)
;--------------------------------------------------------------------------------
org $B08185 ; PC 0x180185
RainDeathRefillTable:
+1 -1
View File
@@ -368,7 +368,7 @@ FontProperties:
dw $8001, $06C0 ; C7 ; !
dw $8001, $02D0 ; C8 ; ,
dw $8001, $02B0 ; C9 ; -
dw $8000, $0000 ; CA ; 🡄"
dw $8000, $0000 ; CA ; 🡄
dw $8000, $0000 ; CB ; 🡆
dw $0000, $0000 ; CC ; Blank char
dw $8001, $02C0 ; CD ; .
+1
View File
@@ -292,6 +292,7 @@ EntranceData_song = $82D592
SpawnPointData_room_id = $82D8D2
Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879
RoomHeaderPointers = $84F1E2
UncleItem = $85DF45
Sprite_ShowSolicitedMessage_Direction = $85E1A3
FluteMenuNumbers_bits = $8AB7A3
WorldMap_RedXChars = $8ABF70
+9 -5
View File
@@ -1,10 +1,14 @@
;--------------------------------------------------------------------------------
EndRainState:
LDA.l InitProgressIndicator : BIT.b #$80 : BNE + ; check for instant post-aga
LDA.b #$02 : STA.l ProgressIndicator
RTL
+
LDA.b #$03 : STA.l ProgressIndicator
LDA.l InitProgressIndicator : BIT.b #$80 : BEQ + ; check for instant post-aga
LDA.l InitLumberjackOW : STA.l OverworldEventDataWRAM+$02
LDA.b #$03
BRA ++
+
LDA.b #$02
++
STA.l ProgressIndicator
JSL SetEscapeAssist
RTL
;--------------------------------------------------------------------------------