73 Commits
Author SHA1 Message Date
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
karafruit 2477918df9 Bugfixes 2026-05-13 00:58:23 -05:00
karafruit a52f0d71fb Fix compass toggle check and eastern palace split room 2026-05-11 22:21:08 -05:00
karafruit 85a4abbe7b Fix map/icon issues 2026-05-04 17:49:23 -05:00
karafruit d7503ad0f3 Add setting to cap hud/cave loot 2026-05-04 08:52:11 -05:00
karafruit fbd4efc447 Update version 2026-05-04 00:38:06 -05:00
karafruit ec0bb02a53 Merge branch 'codemann_OWMain' into beta 2026-05-04 00:35:52 -05:00
karafruit 80c0f47b1c Show level of current loot in HUD 2026-05-04 00:14:09 -05:00
karafruit b58641ad90 extra keys display 2026-05-03 17:06:30 -05:00
karafruit 031a444a4a Merge commit '9174bbfba54f94ff51c149ba5d3f9e754dbf61a1' into codemann_OWMain 2026-05-02 23:41:40 -05:00
codemann8 9174bbfba5 Fix for Kiki unfollowing after certain entrance transition conditions 2026-03-15 16:59:19 -05:00
codemann8 37caff7bcf Fixed bug with MSU-1 GT2 track not falling back to GT track 2026-03-15 14:19:12 -05:00
codemann8 6fb81c0aa8 Fix buffer sword slash when dashing into water 2026-03-15 10:55:57 -05:00
codemann8 6609253059 Merged in DR v1.5.5 2026-03-03 07:59:14 -06:00
aerinon d0f4651130 fix: skip key counter with universal keys 2026-02-11 10:49:57 -07:00
karafruit 57591e1ef8 Merge in OWRando fixes (#3)
Reviewed-on: #3
2026-02-03 23:48:20 +00:00
karafruit ed2746a27b Update map coordinates and fix red crystals showing junk 2026-01-31 13:01:14 -06:00
karafruit f8917c461a Merge remote-tracking branch 'codemann/OWMain' into codemann_OWMain 2026-01-31 08:47:00 -06:00
karafruit 5dd62441a8 Pull in OW Fog and Grid Map (#2)
Reviewed-on: #2
2026-01-31 14:41:47 +00:00
karafruit ab60e3fd35 Remove error beep from doors map navigation 2026-01-31 08:37:20 -06:00
codemann8 bf2bd1974d Fix buffered sword issue when transitioning to water with sword out 2026-01-29 21:26:19 -06:00
codemann8 c438e9fc3c Merge branch 'OWMain' of https://github.com/codemann8/z3randomizer into OWMain 2026-01-29 20:52:54 -06:00
codemann8 17943f9904 Fix Link sprite using vanilla coords on map check in Special OW 2026-01-29 20:52:25 -06:00
codemann8 41c520fe90 Fix Link sprite using vanilla coords on map check in Special OW 2026-01-28 22:50:20 -06:00
codemann8 9fc26e8710 Fixed palette issue with map checks when Link stands in grass/water 2026-01-28 18:40:33 -06:00
karafruit 482381fe53 Add lower-layer headers to doors/stairs in IP tile theme 2026-01-27 21:21:23 -06:00
karafruit 2b3b50fc5c Initialize $72 before loading palette for OW map 2026-01-27 00:19:56 -06:00
karafruit b7c32fdfb1 Bump GK Rom version 2026-01-25 21:48:20 -06:00
karafruit ec1083a2e5 Fix reference to now-removed UWSpritesPointer 2026-01-25 21:31:39 -06:00
karafruit 53d2a7606a Merge remote-tracking branch 'codemann/OWMain' into codemann_OWMain 2026-01-25 21:15:13 -06:00
codemann8 781431f633 Fixes issue not able to screen transition if bumped by enemy in water 2026-01-19 15:21:03 -06:00
codemann8 e02f98e6c5 Fixed L/R map swap while in special world 2026-01-17 13:58:18 -06:00
codemann8 7898e2149f Fixed issue with Old Man follower infinite pit fall 2026-01-17 00:51:26 -06:00
aerinon cc635ddb78 fix: consistency for dungeon counter settings 2026-01-16 15:29:26 -07:00
codemann8 3c41d7ff39 Change key total display based on seen by player 2026-01-16 15:30:06 -06:00
codemann8 ab0f37b7ba Merge branch 'OWMain' of https://github.com/codemann8/z3randomizer into OWMain 2026-01-16 14:30:04 -06:00
codemann8 343d61a976 Fixing key totals marking MapCountDisplay flag 2026-01-16 14:30:01 -06:00
codemann8 804e72395b Fixing key totals marking MapCountDisplay flag 2026-01-16 14:19:48 -06:00
aerinon c5aaa07f3e feat: king tomb bonk fix 2026-01-15 15:47:23 -07:00
codemann8 e8e6120a9e Some added labeling 2026-01-13 23:51:42 -06:00
codemann8 b0dfcdcae6 Fixed screen drawing issue on Pyramid screen 2026-01-13 15:29:04 -06:00
codemann8 920212d1b8 Removed sprite pointer label since value can shift via generator 2026-01-13 11:26:28 -06:00
codemann8 b7e123a7cf Removed hardcoded sprite data 2026-01-13 11:25:41 -06:00
codemann8 ce7f35ac7b Fixed screen drawing issue on HC screen 2026-01-13 11:24:37 -06:00
codemann8 a090f95659 Hold L/R during Grid OW map check to see opposite world 2026-01-12 22:35:07 -06:00
Catobat 9cbc202b62 Move dynamically positioned sprites on overworld map to match custom layout 2026-01-11 21:45:42 +01:00
Catobat 2ee7be56fc Overworld map fog 2026-01-11 21:45:42 +01:00
Catobat fe5c936c7c Draw arbitrary layouts on the overworld map 2026-01-11 21:45:42 +01:00
Catobat afa0f95072 Overworld edges are disabled if the destination is set to 0xFF 2026-01-11 21:45:42 +01:00
codemann8 ead6a30aa5 Fixed boss icons not showing on dungeon map check 2026-01-11 01:59:44 -06:00
codemann8 d532ac2f4a Fixed bonk drops duplicate counting and potentially writing bad values 2026-01-11 00:38:24 -06:00
codemann8 71ebc09270 Fix bonk drops updating HUD on collection 2026-01-11 00:06:52 -06:00
codemann8 0fef82981a Fixed bonk drops double counting and potentially writing bad values 2026-01-11 00:06:19 -06:00
codemann8 7d45a5cf66 Merge branch 'OWMain' of https://github.com/codemann8/z3randomizer into OWMain 2026-01-08 19:47:22 -06:00
codemann8 5af2fdc51e Fix psuedoboots ability to open Kings Tomb 2026-01-08 19:47:06 -06:00
codemann8 bff1da4330 Fix psuedoboots ability to open Kings Tomb 2026-01-08 16:16:33 -06:00
codemann8 0dba4601fc Fix issue with zoomed-in map check displaying icons from off-screen 2026-01-05 23:57:19 -06:00
codemann8 e30e5107c6 Implement more accurate map check coordinates 2026-01-05 22:38:53 -06:00
56 changed files with 2038 additions and 669 deletions
+5
View File
@@ -74,6 +74,8 @@ function hexto555(h) = ((((h&$FF)/8)<<10)|(((h>>8&$FF)/8)<<5)|(((h>>16&$FF)/8)<<
!FLAG_OW_MIXED = $04 !FLAG_OW_MIXED = $04
!FLAG_OW_CROSSED = $02 !FLAG_OW_CROSSED = $02
!FLAG_OW_BONKDROP = $02 !FLAG_OW_BONKDROP = $02
!FLAG_OW_CUSTOM_MAP = $02
!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION = $04
incsrc hooks.asm incsrc hooks.asm
incsrc spriteswap.asm incsrc spriteswap.asm
@@ -211,6 +213,7 @@ incsrc gk/variable_ganon_vulnerability.asm
incsrc gk/pseudoflute.asm incsrc gk/pseudoflute.asm
incsrc gk/fast_junk.asm incsrc gk/fast_junk.asm
incsrc gk/dungeon_maps.asm incsrc gk/dungeon_maps.asm
incsrc gk/dungeon_indicator.asm
print "End of B9: ", pc print "End of B9: ", pc
warnpc $B9EE00 warnpc $B9EE00
@@ -332,6 +335,8 @@ DungeonMapDoorConnectors:
incbin "menu/door_connectors.3bppc" incbin "menu/door_connectors.3bppc"
MapSheetD4: MapSheetD4:
incbin "menu/map_sheet_d4.3bppc" incbin "menu/map_sheet_d4.3bppc"
DRSheet14:
incbin "menu/dr_sheet_14.3bppc"
org $8CD7DF org $8CD7DF
incsrc data/playernamecharmap.asm incsrc data/playernamecharmap.asm
+13 -13
View File
@@ -28,16 +28,19 @@ AddBonkTremors:
JSL AddDashTremor : JSL Player_ApplyRumbleToSprites ; things we wrote over JSL AddDashTremor : JSL Player_ApplyRumbleToSprites ; things we wrote over
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
BonkBreakableWall: ValidDashCheck:
PHX : PHP PHP
SEP #$30 ; set 8-bit accumulator and index registers SEP #$20
LDA.l BootsModifier : CMP.b #$01 : BEQ + LDA.l BootsModifier : CMP.b #$01 : BEQ +
LDA.l BootsEquipment : BNE + ; Check for Boots LDA.l BootsEquipment : BEQ .exit
PLP : PLX : LDA.w #$0000 : RTL + LDA.w LinkDashing
+ .exit
PLP : PLX BEQ +
LDA.w LinkDashing : AND.w #$00FF ; things we wrote over PLP : REP #$02
RTL RTL
+
PLP : SEP #$02
RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
BonkRockPile: BonkRockPile:
LDA.l BootsModifier : CMP.b #$01 : BEQ + LDA.l BootsModifier : CMP.b #$01 : BEQ +
@@ -48,10 +51,7 @@ BonkRockPile:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
GravestoneHook: GravestoneHook:
LDA.l BootsModifier : CMP.b #$01 : BEQ + JSL ValidDashCheck : BEQ .done ; things we wrote over
LDA.l BootsEquipment : BEQ .done ; Check for Boots
+
LDA.w LinkDashing : BEQ .done ; things we wrote over
JML moveGravestone JML moveGravestone
.done .done
JML GravestoneHook_continue JML GravestoneHook_continue
+6 -7
View File
@@ -17,15 +17,14 @@ DoDungeonMapBossIcon:
ASL ASL
TAX TAX
; get sprite pointer table
LDA.l $89C298 : STA.b Scrap00
LDA.w #$0089 : STA.b Scrap02
TXY
; get sprite pointer for room ; get sprite pointer for room
LDA.l UWSpritesPointers,X LDA.b [Scrap00], Y
STA.b Scrap00 ; pointer in $00 STA.b Scrap00 ; pointer in $00
if !FEATURE_FIX_BASEROM LDA.w #bank(UWSpritesData) : STA.b Scrap02
LDA.w #$0089
else
LDA.w #$0028 ; set the bank to 28 for now
endif
STA.b Scrap02
LDY.w #$0001 ; to skip the "sort" LDY.w #$0001 ; to skip the "sort"
; get first byte to make sure it isn't an empty room ; get first byte to make sure it isn't an empty room
+12
View File
@@ -238,6 +238,18 @@ FixJingleGlitch:
.exit .exit
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
FixSwimBump:
LDA.b LinkIncapacitatedTimer : BEQ .normal
LDA.b LinkJumping : BNE .normal
INC.b LinkJumping
BRA .not_diving
.normal
LDA.b LinkJumping : BNE .continue ; what we wrote over
.not_diving
PLA : PLA : PEA.w $87964D ; skip ahead, not diving
.continue
RTL
;--------------------------------------------------------------------------------
; Fix spawning with more hearts than capacity when less than 3 heart containers ; Fix spawning with more hearts than capacity when less than 3 heart containers
pushpc pushpc
org $09F4AC ; <- module_death.asm:331 org $09F4AC ; <- module_death.asm:331
+2 -2
View File
@@ -49,14 +49,14 @@ InvertDPad_DPadLROnly:
LDA.w JOY1L : STA.b Scrap00 LDA.w JOY1L : STA.b Scrap00
LDA.w JOY1H LDA.w JOY1H
BIT.b #$03 : BEQ + : EOR.b #$03 : + ; swap left/right BIT.b #$03 : BEQ + : EOR.b #$03 : + ; swap left/right
STA.b Scrap00 STA.b Scrap01
JML InvertDPadReturn JML InvertDPadReturn
InvertDPad_DPadUDOnly: InvertDPad_DPadUDOnly:
LDA.w JOY1L : STA.b Scrap00 LDA.w JOY1L : STA.b Scrap00
LDA.w JOY1H LDA.w JOY1H
BIT.b #$0C : BEQ + : EOR.b #$0C : + ; swap up/down BIT.b #$0C : BEQ + : EOR.b #$0C : + ; swap up/down
STA.b Scrap00 STA.b Scrap01
JML InvertDPadReturn JML InvertDPadReturn
InvertDPad: InvertDPad:
+50 -25
View File
@@ -146,32 +146,57 @@ macro SetMinimum(base,filler,compare)
endmacro endmacro
RefreshRainAmmo: RefreshRainAmmo:
LDA.l ProgressIndicator : CMP.b #$01 : BEQ .rain ; check if we're in rain state LDA.l ProgressIndicator : CMP.b #$01 : BEQ .rain ; check if we're in rain state
RTL
.rain
LDA.l StartingEntrance
+ CMP.b #$03 : BNE + ; Uncle
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Uncle)
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Uncle)
LDA.l ArrowMode : BEQ ++
LDA.l BowEquipment : BEQ +++
++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Uncle)
+++ BRA .done
+ CMP.b #$02 : BNE + ; Cell
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Cell)
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Cell)
LDA.l ArrowMode : BEQ ++
LDA.l BowEquipment : BEQ .done
++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Cell)
BRA .done
+ CMP.b #$04 : BNE + ; Mantle
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Mantle)
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Mantle)
LDA.l ArrowMode : BEQ ++
LDA.l BowEquipment : BEQ .done
++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Mantle)
+
.done
RTL RTL
.rain
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
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
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: SetEscapeAssist:
LDA.l ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state LDA.l ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state
+1
View File
@@ -29,3 +29,4 @@ Z=33
'=35 '=35
-=36 -=36
.=37 .=37
*=FF
+66 -52
View File
@@ -61,73 +61,84 @@ LoadDialogAddressIndirect:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
FreeDungeonItemNotice: FreeDungeonItemNotice:
STA.l ScratchBufferV STA.l ScratchBufferV
PHA : PHX : PHY PHA : PHX : PHY
PHP PHP
PHB : PHK : PLB PHB : PHK : PLB
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
REP #$10 ; set 16-bit index registers REP #$10 ; set 16-bit index registers
PEI.b (Scrap00) PEI.b (Scrap00)
LDA.b Scrap02 : PHA LDA.b Scrap02 : PHA
LDA.l ScratchBufferNV : PHA LDA.l ScratchBufferNV : PHA
LDA.l ScratchBufferNV+1 : PHA 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.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 LDA.l ScratchBufferV : CMP.b #$24 : BNE + ; general small key
%CopyDialog(Notice_SmallKeyOf) %CopyDialog(Notice_SmallKeyOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self) %CopyDialog(Notice_Self)
JMP .done 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 LDA.l ScratchBufferV : CMP.b #$25 : BNE + ; general compass
%CopyDialog(Notice_CompassOf) %CopyDialog(Notice_CompassOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self) %CopyDialog(Notice_Self)
JMP .done 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 LDA.l ScratchBufferV : CMP.b #$33 : BNE + ; general map
%CopyDialog(Notice_MapOf) %CopyDialog(Notice_MapOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self) %CopyDialog(Notice_Self)
JMP .done 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 LDA.l ScratchBufferV : CMP.b #$32 : BNE + ; general big key
%CopyDialog(Notice_BigKeyOf) %CopyDialog(Notice_BigKeyOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self) %CopyDialog(Notice_Self)
JMP .done 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 LDA.l ScratchBufferV : AND.b #$F0 ; looking at high bits only
CMP.b #$70 : BNE + ; map of... CMP.b #$70 : BNE + ; map of...
%CopyDialog(Notice_MapOf) %CopyDialog(Notice_MapOf)
JMP .dungeon 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... LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of...
%CopyDialog(Notice_CompassOf) %CopyDialog(Notice_CompassOf)
JMP .dungeon 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... LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of...
%CopyDialog(Notice_BigKeyOf) %CopyDialog(Notice_BigKeyOf)
JMP .dungeon 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 : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
LDA.l ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++ LDA.l ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++
%CopyDialog(Notice_SmallKeyOf) %CopyDialog(Notice_SmallKeyOf)
LDA.b #$01 : STA.l ScratchBufferNV ; set up a flip for small keys LDA.b #$01 : STA.l ScratchBufferNV ; set up a flip for small keys
BRA .dungeon 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 # LDA.l ScratchBufferV : CMP.b #$B0 : !BLT + ; crystal #
CMP.b #$B7 : !BGE + CMP.b #$B7 : !BGE +
%CopyDialog(Notice_Crystal) %CopyDialog(Notice_Crystal)
JMP .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 .dungeon
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
@@ -139,23 +150,26 @@ FreeDungeonItemNotice:
LDA.b #$0F : !SUB.l ScratchBufferNV+1 : STA.l ScratchBufferNV+1 ; flip the values for small keys LDA.b #$0F : !SUB.l ScratchBufferNV+1 : STA.l ScratchBufferNV+1 ; flip the values for small keys
+ +
LDA.l ScratchBufferNV+1 LDA.l ScratchBufferNV+1
ASL : TAX ASL : TAX
REP #$20 REP #$20
LDA.l DungeonItemIDMap,X : CMP.w #$0003 : BCC .hc_sewers
CMP.w DungeonID : BNE + LDA.l !MULTIWORLD_ITEM_PLAYER_ID : AND.w #$00FF : BNE +
BRA .self_notice
.hc_sewers LDA.l DungeonItemIDMap, X : CMP.w #$0003 : BCC .hc_sewers
LDA.w DungeonID : CMP.w #$0003 : BCS + CMP.w DungeonID : BNE +
.self_notice BRA .self_notice
SEP #$20 .hc_sewers
LDA.l FreeItemText : AND.b #$40 : BEQ ++ LDA.w DungeonID : CMP.w #$0003 : BCS +
LDA.b #$00 : STA.l DialogOffsetPointer : STA.l DialogOffsetPointer+1 .self_notice
JMP .skip SEP #$20
++ LDA.l FreeItemText : AND.b #$40 : BEQ ++
%CopyDialog(Notice_Self) LDA.b #$00 : STA.l DialogOffsetPointer : STA.l DialogOffsetPointer+1
JMP .done JMP .skip
+ ++
SEP #$20 %CopyDialog(Notice_Self)
JMP .done
+
SEP #$20
LDA.l ScratchBufferNV+1 LDA.l ScratchBufferNV+1
CMP.b #$00 : BNE + ; ...light world CMP.b #$00 : BNE + ; ...light world
%CopyDialog(Notice_LightWorld) : JMP .done %CopyDialog(Notice_LightWorld) : JMP .done
@@ -190,9 +204,9 @@ FreeDungeonItemNotice:
+ : CMP.b #$0F : BNE + ; ...sewers + : CMP.b #$0F : BNE + ; ...sewers
%CopyDialog(Notice_Sewers) %CopyDialog(Notice_Sewers)
+ +
JMP .done JMP .done
.crystal .crystal
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
LDA.l ScratchBufferV LDA.l ScratchBufferV
AND.b #$0F ; looking at low bits only AND.b #$0F ; looking at low bits only
@@ -210,7 +224,7 @@ FreeDungeonItemNotice:
%CopyDialog(Notice_Four) : JMP .done %CopyDialog(Notice_Four) : JMP .done
+ : CMP.b #$06 : BNE + + : CMP.b #$06 : BNE +
%CopyDialog(Notice_Three) : JMP .done %CopyDialog(Notice_Three) : JMP .done
+ +
.done .done
@@ -220,14 +234,14 @@ FreeDungeonItemNotice:
;-------------------------------- ;--------------------------------
.skip .skip
PLA : STA.l ScratchBufferNV+1 PLA : STA.l ScratchBufferNV+1
PLA : STA.l ScratchBufferNV PLA : STA.l ScratchBufferNV
PLA : STA.b Scrap02 PLA : STA.b Scrap02
REP #$20 REP #$20
PLA : STA.b Scrap00 PLA : STA.b Scrap00
PLB PLB
PLP PLP
PLY : PLX : PLA PLY : PLX : PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
+1 -1
View File
@@ -599,7 +599,7 @@ skip $10
BigKeyStatus: ;27f040 (status 2 indicate BnC guard) BigKeyStatus: ;27f040 (status 2 indicate BnC guard)
dw $0002, $0002, $0001, $0001, $0000, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0000, $0000 dw $0002, $0002, $0001, $0001, $0000, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0000, $0000
DungeonReminderTable: ;27f060 DungeonReminderTable: ;27f060
dw $2D50, $2D50, $2D51, $2D52, $2D54, $2D56, $2D55, $2D5A, $2D57, $2D59, $2D53, $2D58, $2D5B, $2D5C, $0000, $0000 dw $2DA4, $2DA4, $2DA5, $2DA6, $2DA8, $2DAA, $2DA9, $2DAE, $2DAB, $2DAD, $2DA7, $2DAC, $2DAF, $2DB0, $0000, $0000
TotalLocationsLow: ;27f080 TotalLocationsLow: ;27f080
db $08, $08, $06, $06, $02, $00, $04, $08, $08, $08, $06, $08, $02, $07, $00, $00 db $08, $08, $06, $06, $02, $00, $04, $08, $08, $08, $06, $08, $02, $07, $00, $00
TotalLocationsHigh: ;27f090 TotalLocationsHigh: ;27f090
+46 -19
View File
@@ -1,10 +1,12 @@
!BlankTile = $207F !BlankTile = $207F
!SlashTile = $2830 !SlashTile = $2830
!PlusTile = $2404
!HyphenTile = $2405 !HyphenTile = $2405
!LTile = $2D68 !LTile = $2D68
!DTile = $2D60 !DTile = $2D60
!RedSquare = $345E
!BlueSquare = $2C5E !BlueSquare = $2C5E
!BossIcon = $253C
!NPCIcon = $253B
DrHudOverride: DrHudOverride:
PHB PHB
@@ -29,6 +31,13 @@ DRHUD_DrawIndicators:
LDA.b FrameCounter : AND.b #$10 : BEQ DRHUD_EnemyDropIndicator LDA.b FrameCounter : AND.b #$10 : BEQ DRHUD_EnemyDropIndicator
DRHUD_BossIndicator: 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 LDA.l DRMode : BNE .continue
.early_exit .early_exit
REP #$10 REP #$10
@@ -46,7 +55,7 @@ DRHUD_BossIndicator:
SEP #$20 SEP #$20
BEQ .draw_indicator BEQ .draw_indicator
LDA.l CompassBossIndicator, x : CMP.b RoomIndex : BNE .draw_indicator LDA.l CompassBossIndicator, x : CMP.b RoomIndex : BNE .draw_indicator
LDY.w #!RedSquare LDY.w #!BossIcon
.draw_indicator .draw_indicator
STY.w HUDMultiIndicator STY.w HUDMultiIndicator
BRA DRHUD_DrawCurrentDungeonIndicator BRA DRHUD_DrawCurrentDungeonIndicator
@@ -71,13 +80,12 @@ DRHUD_DrawCurrentDungeonIndicator: ; mX
CMP.b #$06 : BEQ .draw_indicator CMP.b #$06 : BEQ .draw_indicator
.get_indicator .get_indicator
REP #$20 : LDA.l DungeonReminderTable,X : TAY LDY.w #$2C28
SEP #$20
.draw_indicator .draw_indicator
STY.w HUDCurrentDungeonWorld STY.w HUDCurrentDungeonWorld
DRHUD_DrawKeyCounter: DRHUD_DrawKeyCounter:
LDA.l DRFlags : AND.b #$04 : BEQ DRHUD_Finished LDA.l DRFlags : AND.b #$04 : BEQ .to_finished
LDA.l CompassMode : BIT.b #$03 : BEQ DRHUD_Finished LDA.l CompassMode : BIT.b #$03 : BEQ DRHUD_Finished
REP #$20 REP #$20
BIT.w #$0002 : BNE .skip_map_check BIT.w #$0002 : BNE .skip_map_check
@@ -90,8 +98,17 @@ DRHUD_DrawKeyCounter:
LDA.l GenericKeys : LSR : BCS .total_only 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
LDA.l ExtraChestKeys, X : AND.w #$00FF : BEQ .total_only
JSR ConvertToDisplay : STA.w HUDKeysExtraCount
LDA.w #!PlusTile : STA.w HUDKeysExtraPlus
.total_only .total_only
LDA.l ChestKeys, x : JSR ConvertToDisplay : STA.w HUDKeysTotal SEP #$20
LDA.l ChestKeys, X : SEC : SBC.l ExtraChestKeys, X
REP #$20
JSR ConvertToDisplay : STA.w HUDKeysTotal
.to_finished
JMP DRHUD_Finished JMP DRHUD_Finished
OWRHUD_DrawWorldIndicator: OWRHUD_DrawWorldIndicator:
@@ -167,9 +184,7 @@ 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 CompassMode : BIT.w #$0002 : BNE .skip_map_check LDA.l MapField : ORA.l MapCountDisplay : AND.l DungeonMask, x : BEQ .key_info_done ; must have map
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
@@ -294,17 +309,29 @@ BossStatus:
; default palette 3 - white ; default palette 3 - white
LDA.l DungeonReminderTable, X : RTS LDA.l DungeonReminderTable, X : RTS
ConvertToDisplay: ConvertToDisplay: ; transparent background
and.w #$00ff : cmp.w #$000a : !BLT + AND.w #$00FF
!ADD.w #$2519 : rts CMP.w #$000A : BCC .under10
+ !ADD.w #$2490 : rts CMP.w #$000C : BCC .under12
.over11
CLC : ADC.w #$2553 : RTS
.under12
CLC : ADC.w #$2519 : RTS
.under10
CLC : ADC.w #$2490 : RTS
ConvertToDisplay2: ConvertToDisplay2: ; solid background
and.w #$00ff : beq ++ AND.w #$00FF : BEQ .zero
cmp.w #$000a : !BLT + CMP.w #$000A : BCC .under10
!ADD.w #$2517 : rts ; 2580 with 258A as "A" for non transparent digits CMP.w #$000C : BCC .under12
+ !ADD.w #$2816 : rts .over11
++ lda.w #$2827 : rts ; 0/O for 0 or placeholder digit ;2483 CLC : ADC.w #$2580 : RTS
.under12
CLC : ADC.w #$2517 : RTS
.under10
CLC : ADC.w #$2816 : RTS
.zero
LDA.w #$2827 : RTS
CountAbsorbedKeys: CountAbsorbedKeys:
JML IncrementSmallKeysNoPrimary JML IncrementSmallKeysNoPrimary
+10 -4
View File
@@ -21,14 +21,18 @@ SpiralWarp: {
lda.w $045e : cmp.b #$5e : beq .gtg ; abort if not spiral - intended room is in A! lda.w $045e : cmp.b #$5e : beq .gtg ; abort if not spiral - intended room is in A!
cmp.b #$5f : beq .gtg cmp.b #$5f : beq .gtg
cmp.b #$26 : beq .inroom cmp.b #$26 : beq .inroom
.abort .abort
SEP #$30 : stz.w $045e : lda.b PreviousRoom : and.b #$0f : rtl ; clear,run hijacked code and get out SEP #$30
.inroom stz.w $045e
lda.b PreviousRoom : and.b #$0f
rtl ; clear,run hijacked code and get out
.inroom
jsr InroomStairsWarp jsr InroomStairsWarp
lda.b PreviousRoom : and.b #$0f ; this is the code we are hijacking lda.b PreviousRoom : and.b #$0f ; this is the code we are hijacking
rtl rtl
.gtg .gtg
phb : phk : plb : phx : phy ; push stuff phb : phk : plb : phx : phy ; push stuff
jsr LookupSpiralOffset jsr LookupSpiralOffset
rep #$30 : and.w #$00FF : asl #2 : tax rep #$30 : and.w #$00FF : asl #2 : tax
@@ -81,6 +85,7 @@ SpiralWarp: {
ldy.b #$01 : jsr SetCamera ldy.b #$01 : jsr SetCamera
jsr StairCleanup jsr StairCleanup
ply : plx : plb ; pull the stuff we pushed ply : plx : plb ; pull the stuff we pushed
lda.b PreviousRoom : and.b #$0f ; this is the code we are hijacking lda.b PreviousRoom : and.b #$0f ; this is the code we are hijacking
rtl rtl
@@ -261,6 +266,7 @@ InroomStairsWarp: {
.skipCamera .skipCamera
jsr StairCleanup jsr StairCleanup
ply : plx : plb ; pull the stuff we pushed ply : plx : plb ; pull the stuff we pushed
rts rts
} }
+14 -24
View File
@@ -38,7 +38,7 @@ RTL
OnPlayerDead: OnPlayerDead:
PHA PHA
JSL SetDeathWorldChecked JSL SetDeathWorldChecked
JSL DynamicDropGFXClear JSL DynamicDropGFXClear
JSL SetSilverBowMode JSL SetSilverBowMode
JSL RefreshRainAmmo JSL RefreshRainAmmo
PLA PLA
@@ -79,30 +79,20 @@ RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
OnUncleItemGet: OnUncleItemGet:
PHA 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 LDA.l UncleItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLA PLA
JSL Link_ReceiveItem JSL Link_ReceiveItem
LDA.l UncleRefill : BIT.b #$04 : BEQ + : LDA.b #$80 : STA.l MagicFiller : + ; refill magic LDA.l ProgressIndicator : BNE +
LDA.l UncleRefill : BIT.b #$02 : BEQ + : LDA.b #50 : STA.l BombsFiller : + ; refill bombs LDA.b #$01 : STA.l ProgressIndicator ; set rain state
LDA.l UncleRefill : BIT.b #$01 : BEQ + ; refill arrows JSL SetEscapeAssist
LDA.b #70 : STA.l ArrowsFiller JSL RefreshRainAmmo
; grant arrows if we started with a bow in retro mode
LDA.l ArrowMode : BEQ + LDA.l ArrowMode : BEQ +
LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking ; enable bow toggle LDA.l RainDeathRefillRupeeBow : ORA.l RainDeathRefillRupeeBow+1 : BEQ +
REP #$20 ; set 16-bit accumulator LDA.b #$01 : STA.l ArrowsFiller
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
+
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
OnAga1Defeated: OnAga1Defeated:
@@ -201,12 +191,12 @@ OnNewFile:
STZ.w TreePullKills STZ.w TreePullKills
STZ.w TreePullHits STZ.w TreePullHits
STZ.w PrizePackIndexes STZ.w PrizePackIndexes
STZ.w PrizePackIndexes+1 STZ.w PrizePackIndexes+1
STZ.w PrizePackIndexes+2 STZ.w PrizePackIndexes+2
STZ.w PrizePackIndexes+3 STZ.w PrizePackIndexes+3
STZ.w PrizePackIndexes+4 STZ.w PrizePackIndexes+4
STZ.w PrizePackIndexes+5 STZ.w PrizePackIndexes+5
STZ.w PrizePackIndexes+6 STZ.w PrizePackIndexes+6
LDA.b #$00 : STA.l MosaicLevel LDA.b #$00 : STA.l MosaicLevel
JSL InitRNGPointerTable JSL InitRNGPointerTable
PLP : PLX PLP : PLX
+11 -1
View File
@@ -23,7 +23,7 @@ JSL SpritePrep_OldManFollower : NOP #2 : db $F0 ; BEQ
org $9DFF18 org $9DFF18
JSL SpriteDraw_OldManFollower JSL SpriteDraw_OldManFollower
org $9EE9BC org $9EE9BC
JSL Follower_CheckMessageCollision JSL OldMan_WaitForCollision
org $9EE9CC org $9EE9CC
JSL OldMan_BecomeFollower : NOP #2 JSL OldMan_BecomeFollower : NOP #2
@@ -631,6 +631,15 @@ SpriteDraw_OldManFollower:
dw 0, 0 : db $AC, $00, $00, $02 dw 0, 0 : db $AC, $00, $00, $02
dw 0, 8 : db $AE, $00, $00, $02 dw 0, 8 : db $AE, $00, $00, $02
OldMan_WaitForCollision:
PHA
LDA.w LinkIFrames : BEQ +
PLA : CLC
RTL
+
PLA
JML Follower_CheckMessageCollision
OldMan_BecomeFollower: OldMan_BecomeFollower:
LDA.l FollowerTravelAllowed : CMP.b #$02 : BCC .set_follower_and_despawn LDA.l FollowerTravelAllowed : CMP.b #$02 : BCC .set_follower_and_despawn
PLA : PLA PLA : PLA
@@ -848,6 +857,7 @@ RTL
Kiki_DontScareTheMonke: Kiki_DontScareTheMonke:
LDA.b LinkJumping : BEQ .return LDA.b LinkJumping : BEQ .return
CMP.b #$02 : BEQ .no_spook ; needed for quake usage CMP.b #$02 : BEQ .no_spook ; needed for quake usage
LDA.b GameMode : CMP.b #$0F : BEQ .no_spook ; needed for entrance transitions
LDA.w NoDamage : BNE .no_spook LDA.w NoDamage : BNE .no_spook
LDA.w LinkThud : BNE .no_spook LDA.w LinkThud : BNE .no_spook
.spook .spook
+48 -41
View File
@@ -2,21 +2,28 @@
; Frame Hook ; Frame Hook
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
FrameHookAction: FrameHookAction:
JSL Module_MainRouting JSL Module_MainRouting
JSL CheckMusicLoadRequest JSL CheckMusicLoadRequest
PHP : REP #$30 : PHA PHP : REP #$30 : PHA
SEP #$20 SEP #$20
LDA.l StatsLocked : BNE ++ LDA.l StatsLocked : BNE ++
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
LDA.l LoopFrames : INC : STA.l LoopFrames : BNE + LDA.l LoopFrames : INC : STA.l LoopFrames : BNE +
LDA.l LoopFrames+2 : INC : STA.l LoopFrames+2 LDA.l LoopFrames+2 : INC : STA.l LoopFrames+2
+ +
LDA.l GameMode : CMP.w #$010E : BNE ++ ; move this to nmi hook? ; move this to nmi hook?
LDA.l MenuFrames : INC : STA.l MenuFrames : BNE ++ LDA.l GameMode : CMP.w #$010E : BNE +
LDA.l MenuFrames+2 : INC : STA.l MenuFrames+2 ; item select menu
++ LDA.l MenuFrames : INC : STA.l MenuFrames : BNE ++
REP #$30 : PLA : PLP 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 RTL
!NMI_MW = "$7F5047" !NMI_MW = "$7F5047"
@@ -47,37 +54,37 @@ JML NMIHookReturn
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
PostNMIHookAction: PostNMIHookAction:
LDA.w NMIAux : BEQ + LDA.w NMIAux : BEQ +
PHK : PEA.w .return-1 ; push stack for RTL return PHK : PEA.w .return-1 ; push stack for RTL return
JMP.w [NMIAux] JMP.w [NMIAux]
.return .return
STZ.w NMIAux ; zero bank byte of NMI hook pointer STZ.w NMIAux ; zero bank byte of NMI hook pointer
+ +
JSR TransferItemGFX JSR TransferItemGFX
LDA.b INIDISPQ : STA.w INIDISP ; thing we wrote over, turn screen back on LDA.b INIDISPQ : STA.w INIDISP ; thing we wrote over, turn screen back on
JML PostNMIHookReturn JML PostNMIHookReturn
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
TransferItemGFX: TransferItemGFX:
; Only used for shops now but could be used for anything. We should look at how door rando does this ; Only used for shops now but could be used for anything. We should look at how door rando does this
; and try to unify one approach. ; and try to unify one approach.
REP #$30 REP #$30
LDX.w ItemStackPtr : BEQ .done LDX.w ItemStackPtr : BEQ .done
TXA : BIT.w #$0040 : BNE .fail ; Crash if we have more than 16 queued (should never happen.) TXA : BIT.w #$0040 : BNE .fail ; Crash if we have more than 16 queued (should never happen.)
DEX #2 DEX #2
- -
LDA.l ItemGFXStack,X : STA.w ItemGFXPtr LDA.l ItemGFXStack,X : STA.w ItemGFXPtr
LDA.l ItemTargetStack,X : STA.w ItemGFXTarget LDA.l ItemTargetStack,X : STA.w ItemGFXTarget
PHX PHX
JSL TransferItemToVRAM JSL TransferItemToVRAM
REP #$10 REP #$10
PLX PLX
DEX #2 DEX #2
BPL - BPL -
STZ.w ItemStackPtr STZ.w ItemStackPtr
.done .done
SEP #$30 SEP #$30
RTS RTS
.fail .fail
BRK #$00 BRK #$00
+194 -46
View File
@@ -1,42 +1,43 @@
; A = room_id ; A = room_id
; out A = level of loot ; out A = level of loot
CheckLoot: CheckMapLoot:
PHP PHP
REP #$30 REP #$30
PHB : PHX : PHY PHX
STA.b $CA STA.b $CA
LDA.b $06 : PHA
LDA.b $0E : PHA LDA.b $0E : PHA
STZ.b $02 ; best item class found LDA.l MapItems_default
LDA.l ShowItems_default
AND.w #$00FF AND.w #$00FF
STA.b $0E STA.b $0E
LDA.b $CA LDA.b $CA
AND.w #$00FF AND.w #$01FF
ASL A ASL A
TAX TAX
LDA.l SaveDataWRAM, X LDA.l SaveDataWRAM, X
AND.w #$000F AND.w #$000F
BEQ + BEQ +
LDA.l ShowItems_visited_tile LDA.l MapItems_visited_tile
AND.w #$00FF AND.w #$00FF
CMP.b $0E CMP.b $0E
BCC + BCC +
STA.b $0E STA.b $0E
+ LDA.w DungeonID + LDA.w DungeonID
AND.w #$00FF
CMP.w #$00FF
BEQ .skip_dungeon_checks
TAX TAX
LDA.l MapField LDA.l MapField
AND.l DungeonMask, X AND.l DungeonMask, X
BEQ + BEQ +
LDA.l ShowItems_have_map LDA.l MapItems_have_map
AND.w #$00FF AND.w #$00FF
CMP.b $0E CMP.b $0E
BCC + BCC +
@@ -45,13 +46,93 @@ CheckLoot:
+ LDA.l CompassField + LDA.l CompassField
AND.l DungeonMask, X AND.l DungeonMask, X
BEQ + BEQ +
LDA.l ShowItems_have_compass LDA.l MapItems_have_compass
AND.w #$00FF AND.w #$00FF
CMP.b $0E CMP.b $0E
BCC + BCC +
STA.b $0E STA.b $0E
+ +
.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 + LDA.l ItemSources : BIT.w #$0001 : BEQ +
JSR CheckChests JSR CheckChests
+ +
@@ -65,24 +146,25 @@ CheckLoot:
+ +
LDA.l ItemSources : BIT.w #$0008 : BEQ + LDA.l ItemSources : BIT.w #$0008 : BEQ +
JSR CheckBoss JSR CheckMisc
JSR CheckMisc2
+ +
LDA.l ItemSources : BIT.w #$0010 : BEQ + LDA.l ItemSources : BIT.w #$0010 : BEQ +
JSR CheckPrize JSR CheckPrize
+ +
JSR CheckNpcs
.done .done
PLA : STA.b $0E
PLA : STA.b $06 PLA : STA.b $06
PLY : PLX : PLB PLY : PLX : PLB
PLP PLP
LDA.b $02
RTL RTL
CheckChests: CheckChests:
LDA.b $CA LDA.b $CA
AND.w #$00FF AND.w #$01FF
STA.b $00 STA.b $00
ASL A ASL A
TAX TAX
@@ -127,25 +209,22 @@ CheckChests:
.done .done
RTS RTS
CheckBoss: CheckMisc:
; we assume all bosses are in section 1 of split sections ; this includes bosses, bonk torches, and standing items (in caves + hera cage key)
; mainly to simplify hera cage key and GT torch ; all dungeon items in this section are in section 1 of split sections
; which use the same flow ; for cave items we'll always know what section we're in
; and bosses are always in their own section anyway ; 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 LDA.b $CA
AND.w #$F000 BIT.w #$F000
XBA BNE +
CMP.w #$0020 ORA.w #$1000
BCC +
RTS
+ +
LDA.b $CA AND.w #$F1FF
AND.w #$00FF
STA.b $04 STA.b $04
LDX.w #$FFFA LDX.w #$FFFA
.next_boss .next_misc
INX #6 INX #6
LDA.l MiscLocations, X LDA.l MiscLocations, X
BPL .check BPL .check
@@ -153,9 +232,10 @@ CheckBoss:
.check .check
CMP.b $04 CMP.b $04
BNE .next_boss BNE .next_misc
TXY TXY
AND.w #$01FF
CMP.b RoomIndex CMP.b RoomIndex
BEQ .current_room BEQ .current_room
@@ -180,7 +260,7 @@ CheckBoss:
TYX TYX
BIT.b $04 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 LDA.l MiscLocations+4, X
STA.b $05 STA.b $05
@@ -192,11 +272,28 @@ CheckBoss:
AND.w #$00FF AND.w #$00FF
JSR GetLootClass 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: CheckPrize:
LDA.b $CA LDA.b $CA
AND.w #$00FF AND.w #$01FF
STA.b $04 STA.b $04
LDX.w #$FFFD LDX.w #$FFFD
@@ -230,9 +327,44 @@ CheckPrize:
BRA .next_prize 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: CheckPots:
LDA.b $CA LDA.b $CA
AND.w #$00FF AND.w #$01FF
ASL A ASL A
TAX TAX
@@ -298,7 +430,7 @@ CheckPots:
+ +
LDA.b $CA LDA.b $CA
AND.w #$00FF AND.w #$01FF
ASL A ASL A
TAX TAX
if !FEATURE_FIX_BASEROM if !FEATURE_FIX_BASEROM
@@ -336,7 +468,7 @@ CheckJunkPot:
+ +
LDA.b $CA LDA.b $CA
AND.w #$00FF AND.w #$01FF
ASL A ASL A
TAX TAX
LDA.l PotCollectionRateTable, X LDA.l PotCollectionRateTable, X
@@ -364,11 +496,17 @@ endif
CheckEnemies: CheckEnemies:
LDA.b $CA LDA.b $CA
AND.w #$00FF AND.w #$01FF
ASL A ASL A
TAX TAX
LDA.l UWSpritesPointers, X
; get sprite pointer table
LDA.l $89C298 : STA.b $04
LDA.w #$0089 : STA.b $06
TXY
; get sprite pointer for room
LDA.b [$04], Y
INC A ; skip the layered/unlayered indicator INC A ; skip the layered/unlayered indicator
STA.b $04 STA.b $04
LDA.w #bank(UWSpritesData) LDA.w #bank(UWSpritesData)
@@ -448,7 +586,7 @@ CheckEnemies:
+ +
LDA.b $CA LDA.b $CA
AND.w #$00FF AND.w #$01FF
ASL A ASL A
TAX TAX
@@ -478,13 +616,19 @@ GetLootClass:
CMP.w #$0080 : BNE .not_compass CMP.w #$0080 : BNE .not_compass
.compass .compass
LDA.l AlwaysShowCompass : BNE .check_value LDA.b $0E
AND.w #$00FF
CMP.w #$0002
BEQ .check_value
.not_compass .not_compass
LDA.b $0E LDA.b $0E
BEQ .done BEQ .done
CMP.w #$0001 CMP.w #$0003
BEQ .value_set BCS .check_value
LDA.w #$0001
BRA .value_set
.check_value .check_value
LDA.l LootTypeMapping, X LDA.l LootTypeMapping, X
@@ -507,9 +651,13 @@ GetPotJunkClass:
LDA.b $0E LDA.b $0E
BEQ .done BEQ .done
CMP.w #$0001 CMP.w #$0003
BEQ .value_set BCS .check_value
LDA.w #$0001
BRA .value_set
.check_value
; hardcode as junk for now ; hardcode as junk for now
LDA.w #$0002 LDA.w #$0002
@@ -526,7 +674,7 @@ macro DefineGetFooSection(type, offset)
Get<type>Section: Get<type>Section:
PHX PHX
LDA.b $CA LDA.b $CA
AND.w #$00FF AND.w #$01FF
ASL A ASL A
TAX TAX
LDA.l SplitRooms, X LDA.l SplitRooms, X
@@ -574,13 +722,13 @@ Check<type>Section:
STA.b $CC STA.b $CC
LDA.b $CB LDA.b $CB
AND.w #$00FF AND.w #$00F0
BEQ .yes BEQ .yes
JSR Get<type>Section JSR Get<type>Section
LDA.b $CB LDA.b $CB
AND.w #$00FF AND.w #$00F0
LSR A : LSR A : LSR A : LSR A LSR A : LSR A : LSR A : LSR A
DEC A DEC A
CMP.b $CE CMP.b $CE
+3 -3
View File
@@ -3,8 +3,8 @@
!TIER_LOW_KEY = $03 !TIER_LOW_KEY = $03
!TIER_HEALTH = $05 !TIER_HEALTH = $05
!TIER_MINOR = $06 !TIER_MINOR = $06
!TIER_MAP = $07 !TIER_COMPASS = $07
!TIER_COMPASS = $08 !TIER_MAP = $08
!TIER_SM_KEY = $09 !TIER_SM_KEY = $09
!TIER_BIG_KEY = $0A !TIER_BIG_KEY = $0A
!TIER_MAJOR = $0B !TIER_MAJOR = $0B
@@ -49,7 +49,7 @@ db !TIER_CRYSTAL ; 20 - Crystal
db !TIER_MINOR ; 21 - Net db !TIER_MINOR ; 21 - Net
db !TIER_MINOR ; 22 - Blue Mail db !TIER_MINOR ; 22 - Blue Mail
db !TIER_MINOR ; 23 - Red 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_COMPASS ; 25 - Compass
db !TIER_HEALTH ; 26 - Heart Container from 4/4 db !TIER_HEALTH ; 26 - Heart Container from 4/4
db !TIER_JUNK ; 27 - Bomb db !TIER_JUNK ; 27 - Bomb
+360 -2
View File
@@ -61,7 +61,24 @@ SplitRooms:
%d(.no) : %d(.d1) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.d6) : %d(.no) %d(.no) : %d(.d1) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.d6) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.db) : %d(.no) : %d(.no) : %d(.no) : %d(.no) %d(.no) : %d(.no) : %d(.no) : %d(.db) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) ; E0
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
; F0
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
; 100
%d(.no) : %d(.101) : %d(.no) : %d(.103) : %d(.no) : %d(.no) : %d(.106) : %d(.107)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.10c) : %d(.no) : %d(.10e) : %d(.no)
; 110
%d(.no) : %d(.no) : %d(.112) : %d(.no) : %d(.114) : %d(.115) : %d(.no) : %d(.no)
%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(.127)
.no .no
db $00 db $00
@@ -435,7 +452,7 @@ db $01
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items) : %d(.no_items) %d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items) : %d(.no_items)
..areas ..areas
db $02, $00, $80, $00, $FF db $02, $00, $80, $00, $FF
db $01, $34, $D4, $B8, $FF db $01, $34, $44, $B4, $FF
db $FF db $FF
..doors ..doors
db $03, $06 db $03, $06
@@ -569,3 +586,344 @@ db $FF
..chests ..chests
db $01 db $01
db $FF db $FF
.101 ; East Snitch House (2) // West Snitch House (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..pots
db $00
db $FF
..enemies
db $00
db $FF
.103 ; Man With Beds (3) // Front of Tavern (2) // Back of Tavern (1)
db $02
%sq($00)
%d(..areas3) : %d(..doors3) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies3)
%sq($00)
%d(..areas2) : %d(..doors2) : %d(.no_items)
%d(.no_items) : %d(..pots2) : %d(..enemies2)
..areas3
db $03, $80, $FF, $00, $FF
db $FF
..doors3
db $08
db $FF
..enemies3
db $02
db $FF
..areas2
db $03, $00, $7F, $50, $FF
db $FF
..doors2
db $06
db $FF
..pots2
db $02
db $FF
..enemies2
db $00
db $01
db $FF
.106 ; VoO Chest Game (2) // Brewery (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..enemies
db $00
db $FF
.107 ; Library (2) // Bomb Refill Hut (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
.10c ; Mimic Cave (2) // Hookshot Fairy Pot (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..chests
db $00
db $FF
..enemies
db $04
db $05
db $06
db $07
db $FF
.10e ; Storyteller (2) // Storyteller (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..chests
db $FF
..pots
db $FF
..enemies
db $00
db $FF
.112 ; Dark Chapel (2) // Store (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..enemies
db $00
db $FF
.114 ; Waterfall Fairy (2) // Hint NPC (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..chests
db $00
db $01
db $FF
..enemies
db $00
db $FF
.115 ; Capacity Fairy (1) // Healing Fairy (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $80, $FF, $80, $FF
db $FF
..doors
db $08
db $FF
..enemies
db $00
db $FF
.11b ; Cave 45 (2) // Graveyard Ledge (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..pots
db $00
db $01
db $02
db $03
db $04
db $05
db $FF
..enemies
db $01
db $FF
.11c ; Bomb Shop (2) // C-Shaped House (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..enemies
db $00
db $FF
.11e ; Long Fairy Cave (2) // Hype Cave (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..enemies
db $00
db $01
db $02
db $03
db $FF
.11f ; Lumberjack House (1) // Store (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $80, $FF, $00, $FF
db $FF
..doors
db $08
db $FF
..enemies
db $00
db $FF
.120 ; Ice Rod Cave (1) // Cool Bee Cave (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $80, $FF, $00, $FF
db $03, $80, $FF, $00, $FF
db $FF
..doors
db $08
db $FF
..enemies
db $00
db $01
db $02
db $FF
.122 ; Fortune Teller (2) // Other Fortune Teller (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..enemies
db $00
db $FF
.124 ; 50-Rupee Cave (1) // Bonk Rocks (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(.no_items)
..areas
db $03, $80, $FF, $00, $FF
db $FF
..doors
db $08
db $FF
..chests
db $00
db $FF
.125 ; 20-Rupee Cave (2) // Spiky Hint Cave (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..pots
db $00
db $01
db $02
db $03
db $FF
..enemies
db $00
db $FF
.126 ; Bonk Fairy Pool (2) // Checkerboard Cave (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..enemies
db $01
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
+27 -6
View File
@@ -150,7 +150,10 @@ DrawFullRoomTile:
RTL RTL
DrawSingleRoomLoot: DrawSingleRoomLoot:
PHX : PHY LDA.l MapItems_enabled : AND.w #$00FF : BNE +
RTL
+ PHX : PHY
TYX TYX
@@ -172,7 +175,8 @@ DrawSingleRoomLoot:
STA.w GFXStripes+$0C, Y STA.w GFXStripes+$0C, Y
LDA.b $CA LDA.b $CA
JSL CheckLoot AND.w #$F0FF
JSL CheckMapLoot
ASL A : ASL A : ASL A ASL A : ASL A : ASL A
@@ -687,6 +691,13 @@ GetSpecificRoomVisibility:
STA.b $0A STA.b $0A
+ +
SEP #$20
LDA.b $0A
CMP.b $0B
BCC +
STA.b $0B
+
REP #$20 REP #$20
LDA.b $CA LDA.b $CA
AND.w #$00FF AND.w #$00FF
@@ -1229,7 +1240,7 @@ DrawDoorsMapBlinker:
AND.w #$01E0 AND.w #$01E0
ASL A : ASL A : ASL A ASL A : ASL A : ASL A
XBA XBA
CLC : ADC.w #$00A4 CLC : ADC.w #$00A5
STA.w OAMBuffer, X STA.w OAMBuffer, X
LDA.b LinkPosY LDA.b LinkPosY
@@ -1453,8 +1464,8 @@ MoveDoorsMapCursor:
BRA .done BRA .done
.no_move .no_move
LDA.b #$3C ; LDA.b #$3C
STA.w $012E ; STA.w $012E
.done .done
PLP PLP
@@ -1707,10 +1718,13 @@ DoorsMapChangeDungeon:
BNE + BNE +
INX INX
+ LDA.l DungeonMapData.prev, X + LDA.l DungeonMapData.prev, X
STA.w DungeonID
CMP.b $00 CMP.b $00
BEQ .done BEQ .done
STA.w DungeonID JSL IsValidDungeonToSwapTo
BCC .next
JSL FindFirstEntrance JSL FindFirstEntrance
CPY.b #$FF CPY.b #$FF
BEQ .next BEQ .next
@@ -2105,6 +2119,13 @@ DrawDoorsStairs:
DetectLinksSection: DetectLinksSection:
LDA.b RoomIndex LDA.b RoomIndex
CMP.w #$0128
BCC +
LDA.w #$0000
RTL
+
ASL A ASL A
TAX TAX
LDA.l SplitRooms, X LDA.l SplitRooms, X
+5 -1
View File
@@ -1,4 +1,5 @@
RedrawLoot: RedrawLoot:
SEP #$20
JSL DrawLoot JSL DrawLoot
; what we wrote over ; what we wrote over
@@ -32,6 +33,9 @@ DrawLoot:
LDA.l DRMode LDA.l DRMode
BNE .skip BNE .skip
LDA.l MapItems_enabled
BEQ .skip
REP #$30 REP #$30
PHX : PHY PHX : PHY
@@ -125,7 +129,7 @@ DrawSingleFloorLoot:
LDA.w #$0000 LDA.w #$0000
BRA + BRA +
.valid_room .valid_room
JSL CheckLoot JSL CheckMapLoot
+ +
ASL A : ASL A : ASL A ASL A : ASL A : ASL A
+59
View File
@@ -0,0 +1,59 @@
LoadDungeonIndicator:
; what we wrote over
JSL InitializeTilesets
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
LDA.b #$80
STA.w $2115
REP #$20
LDA.w #$7140
STA.w $2116
LDY.b #$10
- LDA.l DungeonIndicatorGfx, X
STA.w $2118
INX #2
DEY #2
BNE -
SEP #$20
.done
RTL
DungeonIndicatorMap:
dw $0000
dw $0000
dw $0010
dw $0020
dw $0040
dw $0060
dw $0050
dw $00A0
dw $0070
dw $0090
dw $0030
dw $0080
dw $00B0
dw $00C0
.end
DungeonIndicatorGfx:
incbin "menu/dr_dungeon_indicators.2bpp"
.end
+3
View File
@@ -24,6 +24,8 @@ endmacro
%WriteGFXSheetPointer($62, DungeonMapIcons5) %WriteGFXSheetPointer($62, DungeonMapIcons5)
%WriteGFXSheetPointer($63, DungeonMapIcons6) %WriteGFXSheetPointer($63, DungeonMapIcons6)
%WriteGFXSheetPointer($14, DRSheet14)
pullpc pullpc
incsrc doors_dungeon_map.asm incsrc doors_dungeon_map.asm
@@ -32,6 +34,7 @@ incsrc map_bg3.asm
incsrc dungeon_switch.asm incsrc dungeon_switch.asm
incsrc draw_loot.asm incsrc draw_loot.asm
incsrc check_loot.asm incsrc check_loot.asm
incsrc loot_hud.asm
incsrc blink_loot.asm incsrc blink_loot.asm
incsrc data/doors_display.asm incsrc data/doors_display.asm
incsrc data/spiral_stairs.asm incsrc data/spiral_stairs.asm
+77 -21
View File
@@ -42,6 +42,8 @@ CheckSwitchMap:
BRA .doors_done BRA .doors_done
.change_dungeon .change_dungeon
LDA.l MapSwapping
BEQ .doors_done
JSL DoorsMapChangeDungeon JSL DoorsMapChangeDungeon
BRA .doors_done BRA .doors_done
@@ -59,10 +61,14 @@ CheckSwitchMap:
.not_fancy_door_map .not_fancy_door_map
SEP #$20 SEP #$20
LDA.l MapSwapping
BEQ .no_swap
LDA.b $F6 LDA.b $F6
AND.b #$30 AND.b #$30
BNE + BNE .do_swap
.no_swap
; what we wrote over ; what we wrote over
REP #$20 REP #$20
LDA.w DungeonMapFloorCountData, X LDA.w DungeonMapFloorCountData, X
@@ -70,15 +76,20 @@ CheckSwitchMap:
CLC : ADC.b $00 CLC : ADC.b $00
RTL RTL
+ PHA .do_swap
TXA TXA
.try_next
ASL A ASL A
TAX TAX
PLA LDA.b $F6
BIT.b #$20 BIT.b #$20
BNE + BNE +
INX INX
+ LDA.l DungeonMapData.prev, X +
LDA.l DungeonMapData.prev, X
JSL IsValidDungeonToSwapTo
BCC .try_next
STA.w DungeonID STA.w DungeonID
LDA.b #$04 LDA.b #$04
@@ -87,6 +98,58 @@ CheckSwitchMap:
LDA.w #$0000 LDA.w #$0000
RTL 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: DungeonMapSwitch_Submodule:
JSL $80893D JSL $80893D
JSL $80833F JSL $80833F
@@ -224,39 +287,32 @@ DrawDungeonLabel:
CLC : ADC.w #$0008 CLC : ADC.w #$0008
TAY TAY
LDA.l MapSwapping
BEQ +
; L/R switch indicators ; L/R switch indicators
LDA.w #$E310 LDA.w #$E360
STA.w GFXStripes+$02, Y STA.w GFXStripes+$02, Y
LDA.w #$E910 LDA.w #$E960
STA.w GFXStripes+$0A, Y STA.w GFXStripes+$0A, Y
LDA.w #$E318
STA.w GFXStripes+$12, Y
LDA.w #$E918
STA.w GFXStripes+$1A, Y
LDA.w #$0300 LDA.w #$0300
STA.w GFXStripes+$04, Y STA.w GFXStripes+$04, Y
STA.w GFXStripes+$0C, 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+$06, Y
STA.w GFXStripes+$16, Y LDA.w #$25BD
LDA.w #$099E
STA.w GFXStripes+$08, Y STA.w GFXStripes+$08, Y
STA.w GFXStripes+$18, Y
LDA.w #$099F LDA.w #$25BE
STA.w GFXStripes+$0E, Y STA.w GFXStripes+$0E, Y
STA.w GFXStripes+$1E, Y LDA.w #$25BF
LDA.w #$09AF
STA.w GFXStripes+$10, Y STA.w GFXStripes+$10, Y
STA.w GFXStripes+$20, Y
TYA TYA
CLC : ADC.w #$0020 CLC : ADC.w #$0010
TAY TAY
+
LDA.l DRMode LDA.l DRMode
BNE .doors BNE .doors
+101
View File
@@ -0,0 +1,101 @@
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 HudItems_enabled : BEQ .setting_off
LDA.b IndoorsFlag : BEQ .done
REP #$30
LDA.b $00 : PHA
LDA.b $02 : PHA
LDA.b $04 : PHA
LDA.b $06 : PHA
LDA.b $08 : PHA
LDA.b $0E : PHA
; if if door rando, check for section of supertile
LDA.l DRMode
BNE +
; if not in door rando, check for section of supertile if we're not in a dungeon
LDA.w DungeonID
AND.w #$00FF
CMP.w #$00FF
BEQ +
; just load the room id, we don't care about sections
LDA.b RoomIndex
BRA .check
+ ; figure out section before checking
JSL DetectLinksSection
INC A
XBA
ASL A : ASL A : ASL A : ASL A
ORA.b RoomIndex
.check
JSL CheckHudLoot
ASL A : TAX
LDA.l HUDLootTypeIcons, X
STA.w EnemyDropIndicator
PLA : STA.b $0E
PLA : STA.b $08
PLA : STA.b $06
PLA : STA.b $04
PLA : STA.b $02
PLA : STA.b $00
BRA .done
.setting_off
JSL SetupEnemyDropIndicator
.done
REP #$30
PLY : PLX
PLP
RTL
+97 -33
View File
@@ -52,10 +52,10 @@ dw $2DCB, $6DCB, $ADCB, $EDCB ; 01 - unknown - dot
dw $29EB, $69EB, $29FB, $69FB ; 02 - junk - pot dw $29EB, $69EB, $29FB, $69FB ; 02 - junk - pot
dw $29CA, $69CA, $29DA, $29DB ; 03 - small key dw $29CA, $69CA, $29DA, $29DB ; 03 - small key
dw $29E9, $69E9, $29F9, $69F9 ; 04 - triforce piece 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 $29EC, $69EC, $29FC, $69FC ; 06 - less important item - small chest
dw $29CE, $29CF, $29DE, $29DF ; 07 - map dw $29E8, $69E8, $29F8, $69F8 ; 07 - compass
dw $29E8, $69E8, $29F8, $69F8 ; 08 - compass dw $29CE, $29CF, $29DE, $29DF ; 08 - map
dw $29CA, $69CA, $29DA, $29DB ; 09 - small key dw $29CA, $69CA, $29DA, $29DB ; 09 - small key
dw $29C8, $69C8, $29D8, $29D9 ; 0A - big key dw $29C8, $69C8, $29D8, $29D9 ; 0A - big key
dw $29ED, $69ED, $29FD, $69FD ; 0B - important inventory item - big chest dw $29ED, $69ED, $29FD, $69FD ; 0B - important inventory item - big chest
@@ -73,29 +73,32 @@ warnpc $B9FA00
org $B9FA00 org $B9FA00
; Room ID mappings to bit to check for presence and address of item drop ; Room ID mappings to bit to check for presence and address of item drop
MiscLocations: MiscLocations:
dw $00C8 : db $04 : dl HeartContainer_ArmosKnights dw $10C8 : db $04 : dl HeartContainer_ArmosKnights
dw $0033 : db $04 : dl HeartContainer_Lanmolas dw $1033 : db $04 : dl HeartContainer_Lanmolas
dw $0007 : db $04 : dl HeartContainer_Moldorm dw $1007 : db $04 : dl HeartContainer_Moldorm
dw $005A : db $04 : dl HeartContainer_HelmasaurKing dw $105A : db $04 : dl HeartContainer_HelmasaurKing
dw $0006 : db $04 : dl HeartContainer_Arrghus dw $1006 : db $04 : dl HeartContainer_Arrghus
dw $0029 : db $04 : dl HeartContainer_Mothula dw $1029 : db $04 : dl HeartContainer_Mothula
dw $00AC : db $04 : dl HeartContainer_Blind dw $10AC : db $04 : dl HeartContainer_Blind
dw $00DE : db $04 : dl HeartContainer_Kholdstare dw $10DE : db $04 : dl HeartContainer_Kholdstare
dw $0090 : db $04 : dl HeartContainer_Vitreous dw $1090 : db $04 : dl HeartContainer_Vitreous
dw $00A4 : db $04 : dl HeartContainer_Trinexx dw $10A4 : db $04 : dl HeartContainer_Trinexx
dw $0073 : db $05 : dl BonkKey_Desert ; torch dw $1073 : db $05 : dl BonkKey_Desert ; torch
dw $008C : db $05 : dl BonkKey_GTower ; torch dw $108C : db $05 : dl BonkKey_GTower ; torch
dw $0087 : db $05 : dl StandingKey_Hera 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 dw $FFFF
warnpc $B9FA9A warnpc $B9FA9A
@@ -128,7 +131,7 @@ pad $B9FB00
; $B9FB00 ; $B9FB00
DungeonLabels: DungeonLabels:
dw $2550, $2579 ; Sewers dw $25A4, $2579 ; Sewers
dw $2564, $255F ; Hyrule Castle dw $2564, $255F ; Hyrule Castle
dw $2561, $256C ; Eastern Palace dw $2561, $256C ; Eastern Palace
dw $2560, $256C ; Desert Palace dw $2560, $256C ; Desert Palace
@@ -146,6 +149,44 @@ dw $25A4, $25A4 ; Reserved
dw $25A4, $25A4 ; Reserved dw $25A4, $25A4 ; Reserved
; $B9FB40 ; $B9FB40
HUDLootTypeIcons:
dw $287F ; 00 - nothing
dw $295C ; 01 - unknown - dot
dw $2954 ; 02 - junk - pot
dw $2950 ; 03 - small key
dw $2952 ; 04 - triforce piece
dw $2955 ; 05 - health - plus
dw $2953 ; 06 - less important item - small chest
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
dw $2D58 ; 0C - pendant
dw $2D59 ; 0D - crystal
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 warnpc $B9FE00
org $B9FE00 org $B9FE00
@@ -179,30 +220,53 @@ warnpc $B9FF08
org $B9FF08 org $B9FF08
; $00 - do not show anything ; $00 - do not show anything
; $01 - show presence of unobtained items ; $01 - show presence of unobtained items
; $02 - show category of item ; $02 - show compass if presence, otherwise presence of unobtained items
ShowItems: ; $03 - show category of item
MapItems:
.default .default
db $00 db $00
.have_map .have_map
db $00 db $00
.have_compass .have_compass
db $02 db $03
.visited_tile .visited_tile
db $01 db $02
.reserved .reserved
skip 4 skip 3
.enabled
db $01
warnpc $B9FF10 warnpc $B9FF10
org $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 ; 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 ; e - enemy drops
; p - pots ; p - pots
; c - chests ; c - chests
ItemSources: ItemSources:
db $09 db $09
; $B9FF11 ; B9FF21
AlwaysShowCompass: ; a--- --mv
; a - always
; m - have map
; v - have visited dungeon
MapSwapping:
db $01 db $01
+3 -1
View File
@@ -12,7 +12,9 @@ db $01
GKRomVersion: GKRomVersion:
; $01 = Dungeon Maps ; $01 = Dungeon Maps
; .., $01 = Dark rooms don't show on map from visition ; .., $01 = Dark rooms don't show on map from visition
db $01, $01, $00 ; .., $02 = OW Fog and Grid modes
; .., $03 = Loot level of current supertile in HUD
db $01, $03, $00
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;================================================================================ ;================================================================================
+32 -3
View File
@@ -120,7 +120,7 @@ JSL AddBonkTremors : NOP #4
; Bonk Breakable Walls ; Bonk Breakable Walls
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $81CF8E ; CF8E <- Bank01.asm : 11641 (LDA $0372 : AND.w #$00FF) org $81CF8E ; CF8E <- Bank01.asm : 11641 (LDA $0372 : AND.w #$00FF)
JSL BonkBreakableWall : NOP #2 JSL ValidDashCheck : NOP #2
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;================================================================================ ;================================================================================
@@ -139,6 +139,11 @@ GravestoneHook_continue:
org $87C106 org $87C106
moveGravestone: moveGravestone:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $899A30
JSL ValidDashCheck : NOP #2
org $899A3A
JSL ValidDashCheck : NOP #2
;--------------------------------------------------------------------------------
;================================================================================ ;================================================================================
; Jump Down Ledge ; Jump Down Ledge
@@ -1112,7 +1117,8 @@ JSL CompareBombsToMax : NOP #11
org $85FC7E ; <- 2FC7E - sprite_dash_item.asm : 118 (LDA $7EF36F : INC A : STA $7EF36F) org $85FC7E ; <- 2FC7E - sprite_dash_item.asm : 118 (LDA $7EF36F : INC A : STA $7EF36F)
JSL GiveBonkItem : NOP #5 JSL GiveBonkItem : NOP #5
org $85FC97 ; <- 2FC97 - sprite_dash_item.asm : 126 (LDA.b #$2F : JSL Sound_SetSfx3PanLong) 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) org $868D39 ; <- 30D39 - sprite_prep.asm : 1435 - (LDA.b #$08 : STA $0F50, X)
JSL LoadBonkItemGFX JSL LoadBonkItemGFX
@@ -1638,7 +1644,8 @@ JSL FixAga2Bunny : NOP
; Open Mode Fixes ; Open Mode Fixes
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $85DF65 ; <- 2DF65 - sprite_uncle_and_priest.asm:994 - (LDA.b #$01 : STA $7EF3C5) 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) org $85EDDF ; <- 2EDDF - sprite_zelda.asm:398 - (LDA.b #$02 : STA $7EF3C5)
JSL EndRainState : NOP #2 JSL EndRainState : NOP #2
@@ -2102,6 +2109,11 @@ JSL FlipperScrollWarp
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;org $878F51 ; <- 38F51 - Bank07.asm:2444 (JSR $AE54 ; $3AE54 IN ROM) ;org $878F51 ; <- 38F51 - Bank07.asm:2444 (JSR $AE54 ; $3AE54 IN ROM)
;JSL OnEnterWater : NOP ;JSL OnEnterWater : NOP
;--------------------------------------------------------------------------------
; Fixes getting bumped while swimming, unable to screen transition
org $879632
LinkState_Swimming:
JSL FixSwimBump
;================================================================================ ;================================================================================
; Floodgate Softlock Fix ; Floodgate Softlock Fix
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -2748,6 +2760,23 @@ JSL MimicDirection
org $828068 org $828068
JSL AdjustDefaultGraphics JSL AdjustDefaultGraphics
;================================================================================
;--------------------------------------------------------------------------------
; Remove Overwriting HUD gfx on game over
;--------------------------------------------------------------------------------
org $809038
RTS
;================================================================================
;--------------------------------------------------------------------------------
; Dungeon Indicator VRAM overwrite
;--------------------------------------------------------------------------------
org $828190
JSL LoadDungeonIndicator
org $829AA2
JSL LoadDungeonIndicator
;================================================================================ ;================================================================================
; Special Weapons Modes ; Special Weapons Modes
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
+1
View File
@@ -165,6 +165,7 @@ AddInventory:
LDA.l !MULTIWORLD_RECEIVING_ITEM : BNE .done LDA.l !MULTIWORLD_RECEIVING_ITEM : BNE .done
REP #$30 REP #$30
LDA.l TotalItemCounter : INC : TAY LDA.l TotalItemCounter : INC : TAY
JSL UpdateLootHUD
LDA.l BootsEquipment : AND.w #$00FF : BNE + LDA.l BootsEquipment : AND.w #$00FF : BNE +
TYA : STA.l PreBootsLocations TYA : STA.l PreBootsLocations
+ +
+2 -2
View File
@@ -46,7 +46,7 @@ dw $7F7F
; Ganons Tower ; Ganons Tower
Notice_GTower: Notice_GTower:
db $76 : dw "Ganons Tower" db $76 : dw "Ganon's Tower"
dw $7F7F dw $7F7F
; Turtle Rock ; Turtle Rock
@@ -81,7 +81,7 @@ dw $7F7F
; Dark Palace ; Dark Palace
Notice_PoD: Notice_PoD:
db $76 : dw "Dark Palace" db $76 : dw "Palace of Darkness"
dw $7F7F dw $7F7F
; Swamp Palace ; Swamp Palace
+10 -6
View File
@@ -89,7 +89,8 @@ org $80FDEE
InitializeMirrorHDMA: InitializeMirrorHDMA:
org $89D62E org $89D62E
UWSpritesPointers: ; 0x250 bytes for 0x128 rooms' 16-bit pointers ;commenting out since this address can move
;UWSpritesPointers: ; 0x250 bytes for 0x128 rooms' 16-bit pointers
if !FEATURE_FIX_BASEROM if !FEATURE_FIX_BASEROM
org $81DB67 org $81DB67
@@ -220,7 +221,8 @@ RevealPotItem:
STZ.w SpawnedItemIsMultiWorld STZ.w SpawnedItemIsMultiWorld
BIT.b Scrap08 BIT.b Scrap08
BVS LoadMultiWorldPotItem BVS LoadMultiWorldPotItem
BMI LoadMajorPotItem BPL .normal_secret
JMP LoadMajorPotItem
.normal_secret .normal_secret
STA.b Scrap08 STA.b Scrap08
@@ -241,6 +243,7 @@ RevealPotItem:
; Could increment GT Tower Pre Big Key but we aren't showing that stat right now ; Could increment GT Tower Pre Big Key but we aren't showing that stat right now
+ REP #$10 + REP #$10
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter ; Increment Item Total LDA.l TotalItemCounter : INC : STA.l TotalItemCounter ; Increment Item Total
JSL UpdateLootHUD
LDA.w #$0001 : STA.l UpdateHUDFlag LDA.w #$0001 : STA.l UpdateHUDFlag
.obtained .obtained
PLY : PLX PLY : PLX
@@ -340,6 +343,7 @@ IncrementCountsForSubstitute:
; Could increment GT Tower Pre Big Key but we aren't showing that stat right now ; Could increment GT Tower Pre Big Key but we aren't showing that stat right now
+ +
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter ; Increment Item Total LDA.l TotalItemCounter : INC : STA.l TotalItemCounter ; Increment Item Total
JSL UpdateLootHUD
LDA.w #$0001 : STA.l UpdateHUDFlag LDA.w #$0001 : STA.l UpdateHUDFlag
.obtained .obtained
SEP #$30 : PLX SEP #$30 : PLX
@@ -356,7 +360,7 @@ ClearSpriteData:
STZ.w SprSourceItemId, X : STZ.w SprItemReceipt, X : STZ.w SprItemMWPlayer, X STZ.w SprSourceItemId, X : STZ.w SprItemReceipt, X : STZ.w SprItemMWPlayer, X
STZ.w SprRedrawFlag, X STZ.w SprRedrawFlag, X
DEX : BPL .loop DEX : BPL .loop
JSR SetupEnemyDropIndicator JSL ClearLootHUD
PLX PLX
RTL RTL
@@ -403,7 +407,7 @@ SetupEnemyDropIndicator:
.done .done
SEP #$20 SEP #$20
RTS RTL
; Runs during sprite load of the room ; Runs during sprite load of the room
@@ -570,7 +574,7 @@ IncrementCountForMinor:
LDA.l SpriteDropData, X : BIT.b Scrap0A : BNE .obtained LDA.l SpriteDropData, X : BIT.b Scrap0A : BNE .obtained
ORA.b Scrap0A : STA.l SpriteDropData, X ORA.b Scrap0A : STA.l SpriteDropData, X
SEP #$10 SEP #$10
JSR SetupEnemyDropIndicator JSL UpdateLootHUD
REP #$20 REP #$20
LDX.w DungeonID : CPX.b #$FF : BEQ + LDX.w DungeonID : CPX.b #$FF : BEQ +
CPX.b #$00 : BNE ++ CPX.b #$00 : BNE ++
@@ -626,10 +630,10 @@ MarkSRAMForItem:
TYX TYX
LDA.w SpawnedItemFlag : CMP.w #$0001 : BEQ + LDA.w SpawnedItemFlag : CMP.w #$0001 : BEQ +
LDA.l SpriteDropData, X : ORA.b Scrap00 : STA.l SpriteDropData, X LDA.l SpriteDropData, X : ORA.b Scrap00 : STA.l SpriteDropData, X
SEP #$10 : JSR SetupEnemyDropIndicator
BRA .end BRA .end
+ LDA.l RoomPotData, X : ORA.b Scrap00 : STA.l RoomPotData, X + LDA.l RoomPotData, X : ORA.b Scrap00 : STA.l RoomPotData, X
.end .end
JSL UpdateLootHUD
SEP #$30 : PLY : PLX SEP #$30 : PLY : PLX
LDA.w RoomItemsTaken LDA.w RoomItemsTaken
RTL RTL
Binary file not shown.
Binary file not shown.
Binary file not shown.
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 REP #$20
LDA.w #MenuOnlyIcons : STA.w $4342 LDA.w #MenuOnlyIcons : STA.w $4342
LDA.w #$1801 : STA.w $4340 LDA.w #$1801 : STA.w $4340
LDA.w #$0240 : STA.w $4345 LDA.w #$0400 : STA.w $4345
LDA.w #$0F800>>1 : STA.w $2116 LDA.w #$0F800>>1 : STA.w $2116
SEP #$20 SEP #$20
+145 -23
View File
@@ -40,7 +40,7 @@ dw $0000
warnpc $8ABE2E warnpc $8ABE2E
org $8ABE2E org $8ABE2E
; located posx/posy, dislocated posx/posy, prize pox/posy ; located posx/posy, dislocated posx/posy, prize posx/posy
; located = proper location of icon (default: if you have map) ; located = proper location of icon (default: if you have map)
; dislocated = location of icon if proper location is hidden from player ; dislocated = location of icon if proper location is hidden from player
; highest bit on first posx indicates which world it should show in ; highest bit on first posx indicates which world it should show in
@@ -49,27 +49,27 @@ WorldMapIcon_pos:
.hc .hc
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00 dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
.ep .ep
dw $0F31, $0620, $FF00, $FF00, $0F31, $0620 dw $0F40, $0660, $FF00, $FF00, $0F40, $0660
.dp .dp
dw $0108, $0D70, $FF00, $FF00, $0108, $0D70 dw $0140, $0D00, $FF00, $FF00, $0140, $0D00
.at .at
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00 dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
.sp .sp
dw $8759, $0ED0, $FF00, $FF00, $8759, $0ED0 dw $8778, $0F50, $FF00, $FF00, $8778, $0F50
.pod .pod
dw $8F40, $0620, $FF00, $FF00, $8F40, $0620 dw $8F40, $0660, $FF00, $FF00, $8F40, $0660
.mm .mm
dw $8100, $0CA0, $FF00, $FF00, $8100, $0CA0 dw $8148, $0D00, $FF00, $FF00, $8148, $0D00
.sw .sw
dw $8082, $00B0, $FF00, $FF00, $8082, $00B0 dw $80B0, $00C0, $FF00, $FF00, $80B0, $00C0
.ip .ip
dw $8CA0, $0DA0, $FF00, $FF00, $8CA0, $0DA0 dw $8CA0, $0E00, $FF00, $FF00, $8CA0, $0E00
.toh .toh
dw $08D0, $0080, $FF00, $FF00, $08D0, $0080 dw $0900, $0100, $FF00, $FF00, $0900, $0100
.tt .tt
dw $81D0, $0780, $FF00, $FF00, $81D0, $0780 dw $81F8, $0800, $FF00, $FF00, $81F8, $0800
.tr .tr
dw $8F11, $0103, $FF00, $FF00, $8F11, $0103 dw $8F20, $0100, $FF00, $FF00, $8F20, $0100
.gt .gt
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00 dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
@@ -262,8 +262,8 @@ DrawPrizesOverride:
; determine if draw and/or continue ; determine if draw and/or continue
JSR WorldMap_ValidateCoords : BCS .advance JSR WorldMap_ValidateCoords : BCS .advance
JSR WorldMap_DrawTileOverlay
JSR WorldMap_DrawTile JSR WorldMap_DrawTile
JSR WorldMap_DrawTileOverlay
.advance .advance
LDY.b Scrap05 : DEY #2 : BMI + : JMP .next_dungeon : + LDY.b Scrap05 : DEY #2 : BMI + : JMP .next_dungeon : +
PLB PLB
@@ -321,24 +321,35 @@ RTS
WorldMap_DrawTile: WorldMap_DrawTile:
LDA.b Scrap00 : PHA LDA.b Scrap00 : PHA
SEP #$20 LDA.l $7EC10A : BIT.w #$4000 : SEP #$20 : BNE .raw_coords ; use raw OAM coordinates
JSR WorldMap_CalculateOAMCoordinates
BCS .apply_offsets
REP #$20
BRA .exit
.raw_coords
STA.b Scrap0E
LDA.l $7EC108 : STA.b Scrap0F
.apply_offsets
LDX.b Scrap0A : BNE .aligned ; prize number/overlay: no offset
LDX.b Scrap0B : BEQ +
; 16x16 sprite: -8 pixels
LDA.b Scrap0E : SEC : SBC.b #$08 : STA.b Scrap0E
LDA.b Scrap0F : SBC.b #$08 : STA.b Scrap0F
BRA .aligned
+
; 8x8 sprite: -4 pixels
LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E
LDA.b Scrap0F : SBC.b #$04 : STA.b Scrap0F
.aligned
LDX.b Scrap0B : TXA : STA.b (OAMPtr+2) LDX.b Scrap0B : TXA : STA.b (OAMPtr+2)
INC.b OAMPtr+2 INC.b OAMPtr+2
JSR WorldMap_CalculateOAMCoordinates
LDX.b Scrap0A : BEQ +
LDA.b Scrap0E : CLC : ADC.b #$04 : STA.b Scrap0E
LDA.b Scrap0F : CLC : ADC.b #$04 : STA.b Scrap0F
+
LDX.b Scrap0B : BEQ +
LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E
LDA.b Scrap0F : SEC : SBC.b #$04 : STA.b Scrap0F
+
REP #$20 REP #$20
PLA : STA.b Scrap00
LDA.b Scrap0E : STA.b (OAMPtr) LDA.b Scrap0E : STA.b (OAMPtr)
INC.b OAMPtr : INC.b OAMPtr INC.b OAMPtr : INC.b OAMPtr
LDA.b Scrap0C : STA.b (OAMPtr) LDA.b Scrap0C : STA.b (OAMPtr)
INC.b OAMPtr : INC.b OAMPtr INC.b OAMPtr : INC.b OAMPtr
.exit
PLA : STA.b Scrap00
RTS RTS
; Y - dungeon index ; Y - dungeon index
@@ -423,6 +434,117 @@ WorldMap_CheckPrizeCollected:
RTS RTS
warnpc $8AC3B1 warnpc $8AC3B1
org $8AC3B6
; ---------------------------------------------------------------------------------------------------
; Y coordinate calculation: Quadratic approximation
; Formula: Y_oam = 0x16 + (Y * 118 >> 12) + ((Y>>4)^2 * 49 >> 8)
; Accurate to within ±1.5 pixels across entire range
; ---------------------------------------------------------------------------------------------------
REP #$20
LDA.l $7EC108 : ASL #4 ; world Y coordinate
PHA
; calculate linear term: (Y * 118) >> 12
SEP #$20
LDA.b #$76
JSR WorldMap_MultiplyAxB ; (Y>>4) * 118
REP #$20
STA.b Scrap00 ; linear term stored at high byte (Scrap01)
; calculate quadratic term: ((Y>>4)^2 * 49) >> 8
LDA.b 1,S
SEP #$20
XBA : TAX : XBA : TXA
JSR WorldMap_MultiplyAxB ; (Y>>4) ^ 2
LDA.b #$31
JSR WorldMap_MultiplyAxB ; multiply by 49
XBA ; quadratic term
; combine: 0x16 + linear_term + quadratic_term
CLC : ADC.b Scrap01 ; add linear term
ADC.b #$16 ; add fixed offset
STA.b Scrap0F
REP #$20
PLA ; world Y coordinate
; ---------------------------------------------------------------------------------------------------
; Calculate half_width for perspective: 91 + (Y_shifted * 28 / 256)
; The world map appears wider at the bottom than at the top, simulating perspective
; Top (Y=0): X range 0x26-0xDC (half-width: 91), Bottom (Y=FFF): X range 0x08-0xF6 (half-width: 119)
; ---------------------------------------------------------------------------------------------------
SEP #$20
LDA.b #$1C ; width increase factor
JSR WorldMap_MultiplyAxB
XBA : CLC : ADC.b #$5B ; add fixed half-width
STA.b Scrap00
; ---------------------------------------------------------------------------------------------------
; Calculate X offset: X_offset = (X_from_center * half_width * 2) / 256
; where X_from_center = (world_X >> 4) - 128
; The center X is at 129 (0x81)
; ---------------------------------------------------------------------------------------------------
REP #$20
LDA.l $7EC10A : LSR #4 ; world X coordinate
SEP #$20
SEC : SBC.b #$80 ; subtract 128 (center point)
PHP ; preserve carry
BPL + : EOR.b #$FF : INC : + ; absolute value
PHA
LDA.b Scrap00 : ASL : XBA ; half-width x 2
PLA
JSR WorldMap_MultiplyAxB
XBA
PLP : BCS +
STA.b Scrap00
LDA.b #$81 : SEC : SBC.b Scrap00 ; center X position - offset
BRA .store_and_exit
+ CLC : ADC.b #$81 ; center X position + offset
.store_and_exit
STA.b Scrap0E
SEP #$30
JMP WorldMap_CalculateOAMCoordinates_exit_successfully
warnpc $8AC433
; most of this function is copied from the original, but rearranged
org $8AB7F3
FluteMenu_HandleSprites:
LDA.l $7EC108 : PHA
LDA.l $7EC109 : PHA
LDA.l $7EC10A : PHA
LDA.l $7EC10B : PHA
JSL FluteMenu_MoveLinkSprite ; override vanilla (LDA.b $1A : AND.b #$10)
BEQ .continue
JSR WorldMap_CalculateOAMCoordinates : BCC .continue
LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E
LDA.b Scrap0F : SEC : SBC.b #$04 : STA.b Scrap0F
LDA.b #$00 : STA.b Scrap0D
LDA.b #$3E : STA.b Scrap0C
JSL OWMapFluteCancelIcon ; override vanilla (LDA.b #$02 : STA.b Scrap0B)
LDX.b #$10 : JSR WorldMap_HandleSpriteBlink
.continue
warnpc $8AB831
; most of this function is copied from the original, but rearranged
org $8ABF78
WorldMap_HandleSprites:
LDA.l $7EC108 : PHA
LDA.l $7EC109 : PHA
LDA.l $7EC10A : PHA
LDA.l $7EC10B : PHA
JSL WorldMap_SkipHandleSprites ; override vanilla (LDA.b $1A : AND.b #$10)
BEQ .continue
JSR WorldMap_CalculateOAMCoordinates : BCC .continue
LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E
LDA.b Scrap0F : SEC : SBC.b #$04 : STA.b Scrap0F
LDA.b #$00 : STA.b Scrap0D
LDA.b #$3E : STA.b Scrap0C
LDA.b #$02 : STA.b Scrap0B
LDX.b #$00 : JSR WorldMap_HandleSpriteBlink
.continue
warnpc $8ABFB6
pullpc pullpc
WorldMap_LoadChrHalfSlot: WorldMap_LoadChrHalfSlot:
+5
View File
@@ -123,6 +123,11 @@ GetMultiworldItem:
BRL .return BRL .return
+ +
LDA.b LinkPushDirection
BEQ +
BRL .return
+
LDA.l !MULTIWORLD_ITEM : BNE + LDA.l !MULTIWORLD_ITEM : BNE +
BRL .return BRL .return
+ +
+11 -10
View File
@@ -309,16 +309,16 @@ MagicMeterColorMasks:
;================================================================================ ;================================================================================
PrizeIconTiles_Transparent: PrizeIconTiles_Transparent:
dw $0000 ; no icon dw $0000 ; no icon
dw $2978 ; crystal 1 dw $2891 ; crystal 1
dw $2979 ; crystal 2 dw $2892 ; crystal 2
dw $297A ; crystal 3 dw $2893 ; crystal 3
dw $297B ; crystal 4 dw $2894 ; crystal 4
dw $297C ; crystal 5 dw $2895 ; crystal 5
dw $297D ; crystal 6 dw $2896 ; crystal 6
dw $297E ; crystal 7 dw $2897 ; crystal 7
dw $2963 ; green pendant dw $2935 ; green pendant
dw $295E ; blue pendant dw $2936 ; blue pendant
dw $296E ; red pendant dw $2937 ; red pendant
;================================================================================ ;================================================================================
DrawCompassCounts: DrawCompassCounts:
@@ -386,6 +386,7 @@ RTS
;================================================================================ ;================================================================================
DrawMapCounts: DrawMapCounts:
LDA.l MapHUDMode : BEQ .done LDA.l MapHUDMode : BEQ .done
LDA.l GenericKeys : BNE .done ; generator don't have an accurrate count of key doors in this case
; no map needed if this bit is set ; no map needed if this bit is set
BIT.b #$02 : BNE .draw_map_count BIT.b #$02 : BNE .draw_map_count
+97 -97
View File
@@ -155,8 +155,8 @@ AddReceivedItemExpandedGetItem:
PHA : LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BEQ + PHA : LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BEQ +
PLA : BRA .done PLA : BRA .done
+ PLA + PLA
JSR ItemBehavior JSR ItemBehavior
SEP #$30 SEP #$30
.done .done
PLB : PLX PLB : PLX
LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over
@@ -229,13 +229,13 @@ ItemBehavior:
JSR .increment_sword JSR .increment_sword
RTS RTS
.fighter_shield .fighter_shield
.red_shield .red_shield
.mirror_shield .mirror_shield
SEP #$10 SEP #$10
LDA.l ProgressiveFlag : BEQ + LDA.l ProgressiveFlag : BEQ +
LDA.l HighestShield : INC : TAX LDA.l HighestShield : INC : TAX
JSR .increment_shield JSR .increment_shield
+ RTS + RTS
.blue_mail .blue_mail
@@ -269,7 +269,7 @@ ItemBehavior:
.prog_shield .prog_shield
SEP #$10 SEP #$10
LDA.l HighestShield : INC : TAX LDA.l HighestShield : INC : TAX
JSR .increment_shield JSR .increment_shield
REP #$10 REP #$10
RTS RTS
@@ -282,13 +282,13 @@ ItemBehavior:
.bow .bow
BIT.b #$40 : BNE .silversbow BIT.b #$40 : BNE .silversbow
LDA.b #$01 : STA.l BowEquipment LDA.b #$01 : STA.l BowEquipment
RTS RTS
.silversbow .silversbow
LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking
LDA.l SilverArrowsUseRestriction : BNE + LDA.l SilverArrowsUseRestriction : BNE +
LDA.b #03 : STA.l BowEquipment ; set bow to silver LDA.b #03 : STA.l BowEquipment ; set bow to silver
+ +
LDA.b #$01 : STA.l BowEquipment LDA.b #$01 : STA.l BowEquipment
RTS RTS
@@ -331,16 +331,16 @@ ItemBehavior:
.bow_and_arrows .bow_and_arrows
LDA.l BowTracking : BIT.b #$40 : BEQ .no_silvers LDA.l BowTracking : BIT.b #$40 : BEQ .no_silvers
LDA.l SilverArrowsUseRestriction : BNE .no_silvers LDA.l SilverArrowsUseRestriction : BNE .no_silvers
LDA.l CurrentArrows : BEQ + LDA.l CurrentArrows : BEQ +
LDA.b #04 : STA.l BowEquipment LDA.b #04 : STA.l BowEquipment
BRA .store_bow
+
LDA.b #$03
BRA .store_bow BRA .store_bow
+
LDA.b #$03
BRA .store_bow
.no_silvers .no_silvers
LDA.l CurrentArrows : BEQ + LDA.l CurrentArrows : BEQ +
LDA.b #02 LDA.b #02
BRA .store_bow BRA .store_bow
+ +
LDA.b #$01 LDA.b #$01
.store_bow .store_bow
@@ -350,13 +350,13 @@ ItemBehavior:
.silver_bow .silver_bow
LDA.b #$40 : ORA.l BowTracking : STA.l BowTracking LDA.b #$40 : ORA.l BowTracking : STA.l BowTracking
LDA.l SilverArrowsUseRestriction : BNE .noequip LDA.l SilverArrowsUseRestriction : BNE .noequip
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip
LDA.l CurrentArrows : BNE + ; check arrows LDA.l CurrentArrows : BNE + ; check arrows
LDA.b #$03 : BRA ++ ; bow without arrow LDA.b #$03 : BRA ++ ; bow without arrow
+ +
LDA.b #$04 ; bow with arrow LDA.b #$04 ; bow with arrow
++ ++
STA.l BowEquipment STA.l BowEquipment
.noequip .noequip
RTS RTS
@@ -385,7 +385,7 @@ ItemBehavior:
.master_sword_safe .master_sword_safe
SEP #$10 SEP #$10
LDA.l SwordEquipment : CMP.b #$02 : !BGE + ; skip if we have a better sword LDA.l SwordEquipment : CMP.b #$02 : !BGE + ; skip if we have a better sword
LDA.b #$02 : STA.l SwordEquipment ; set master sword LDA.b #$02 : STA.l SwordEquipment ; set master sword
+ +
LDX.b #$02 LDX.b #$02
JSR .increment_sword JSR .increment_sword
@@ -426,20 +426,20 @@ ItemBehavior:
.silver_arrows .silver_arrows
LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking
LDA.l SilverArrowsUseRestriction : BNE ++ LDA.l SilverArrowsUseRestriction : BNE ++
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ ++ LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ ++
LDA.l BowEquipment : BEQ ++ : CMP.b #$03 : !BGE + LDA.l BowEquipment : BEQ ++ : CMP.b #$03 : !BGE +
!ADD.b #$02 : STA.l BowEquipment ; switch to silver bow !ADD.b #$02 : STA.l BowEquipment ; switch to silver bow
+ +
++ ++
LDA.l ArrowMode : BEQ + LDA.l ArrowMode : BEQ +
LDA.b #$01 : STA.l ArrowsFiller LDA.b #$01 : STA.l ArrowsFiller
+ +
RTS RTS
.single_arrow .single_arrow
LDA.l ArrowMode : BEQ + LDA.l ArrowMode : BEQ +
LDA.l CurrentArrows : INC : STA.l CurrentArrows ; Should be sole write to this address LDA.l CurrentArrows : INC : STA.l CurrentArrows ; Should be sole write to this address
LDA.b #$01 : STA.l UpdateHUDFlag ; in retro/rupee bow mode. LDA.b #$01 : STA.l UpdateHUDFlag ; in retro/rupee bow mode.
+ +
RTS RTS
@@ -474,7 +474,7 @@ ItemBehavior:
.triforce .triforce
LDA.b OverworldIndex : CMP.b #$80 : BNE + LDA.b OverworldIndex : CMP.b #$80 : BNE +
LDA.b LinkPosX+1 : BNE + LDA.b LinkPosX+1 : BNE +
JSL ActivateGoal JSL ActivateGoal
+ +
RTS RTS
@@ -484,10 +484,10 @@ ItemBehavior:
LDA.l GoalCounter : INC : STA.l GoalCounter LDA.l GoalCounter : INC : STA.l GoalCounter
CMP.w GoalItemRequirement : BCC + CMP.w GoalItemRequirement : BCC +
LDA.l TurnInGoalItems : AND.w #$00FF : BNE + LDA.l TurnInGoalItems : AND.w #$00FF : BNE +
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
LDA.b OverworldIndex : CMP.b #$80 : BNE + LDA.b OverworldIndex : CMP.b #$80 : BNE +
LDA.b LinkPosX+1 : BNE + LDA.b LinkPosX+1 : BNE +
JSL ActivateGoal JSL ActivateGoal
+ +
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
RTS RTS
@@ -559,8 +559,8 @@ ItemBehavior:
LSR LSR
AND.w #$000F : TAX AND.w #$000F : TAX
ASL : CMP.w DungeonID : BEQ .same_dungeon ASL : CMP.w DungeonID : BEQ .same_dungeon
LDA.l DungeonKeys,X : INC : STA.l DungeonKeys,X LDA.l DungeonKeys,X : INC : STA.l DungeonKeys,X
RTS RTS
.same_dungeon .same_dungeon
SEP #$20 SEP #$20
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys : STA.l DungeonKeys,X LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys : STA.l DungeonKeys,X
@@ -575,69 +575,69 @@ ItemBehavior:
.hc_smallkey .hc_smallkey
LDA.w DungeonID : CMP.b #$03 : BCC .same_dungeon_hc LDA.w DungeonID : CMP.b #$03 : BCC .same_dungeon_hc
LDA.l HyruleCastleKeys : INC : STA.l HyruleCastleKeys LDA.l HyruleCastleKeys : INC : STA.l HyruleCastleKeys
LDA.l SewerKeys : INC : STA.l SewerKeys LDA.l SewerKeys : INC : STA.l SewerKeys
RTS RTS
.generic_smallkey .generic_smallkey
LDA.l GenericKeys : BEQ .normal LDA.l GenericKeys : BEQ .normal
LDA.l CurrentSmallKeys : INC LDA.l CurrentSmallKeys : INC
STA.l CurrentGenericKeys : STA.l CurrentSmallKeys STA.l CurrentGenericKeys : STA.l CurrentSmallKeys
RTS RTS
.normal .normal
LDA.w DungeonID : BMI + LDA.w DungeonID : BMI +
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys
RTS RTS
+ +
RTS RTS
.increment_sword .increment_sword
LDA.l HighestSword LDA.l HighestSword
INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better sword INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better sword
TXA : STA.l HighestSword TXA : STA.l HighestSword
+ +
RTS RTS
.increment_shield .increment_shield
LDA.l HighestShield LDA.l HighestShield
INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better shield INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better shield
TXA : STA.l HighestShield TXA : STA.l HighestShield
+ +
RTS RTS
.increment_mail .increment_mail
LDA.l HighestMail LDA.l HighestMail
INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better mail INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better mail
TXA : STA.l HighestMail TXA : STA.l HighestMail
+ +
RTS RTS
.increment_bigkey .increment_bigkey
SEP #$20 SEP #$20
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
LDA.l BigKeysBigChests LDA.l BigKeysBigChests
CLC : ADC.b #$10 CLC : ADC.b #$10
STA.l BigKeysBigChests STA.l BigKeysBigChests
+ +
RTS RTS
.increment_map .increment_map
SEP #$20 SEP #$20
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
LDA.l MapsCompasses LDA.l MapsCompasses
CLC : ADC.b #$10 CLC : ADC.b #$10
STA.l MapsCompasses STA.l MapsCompasses
JSL MaybeFlagMapTotalPickup JSL MaybeFlagMapTotalPickup
+ +
RTS RTS
.increment_compass .increment_compass
SEP #$20 SEP #$20
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
LDA.l MapsCompasses : INC : AND.b #$0F : TAX LDA.l MapsCompasses : INC : AND.b #$0F : TAX
LDA.l MapsCompasses : AND.b #$F0 : STA.l MapsCompasses LDA.l MapsCompasses : AND.b #$F0 : STA.l MapsCompasses
TXA : ORA.l MapsCompasses : STA.l MapsCompasses TXA : ORA.l MapsCompasses : STA.l MapsCompasses
JSL MaybeFlagCompassTotalPickup JSL MaybeFlagCompassTotalPickup
+ +
RTS RTS
@@ -647,7 +647,7 @@ ItemBehavior:
SEC : SBC.b #$37 SEC : SBC.b #$37
TAX TAX
LDA.w PendantMasks,X : AND.l PendantsField : BNE + LDA.w PendantMasks,X : AND.l PendantsField : BNE +
LDA.l PendantCounter : INC : STA.l PendantCounter LDA.l PendantCounter : INC : STA.l PendantCounter
+ +
RTS RTS
@@ -663,15 +663,15 @@ ItemBehavior:
LDA.w #$0000 LDA.w #$0000
SEC SEC
- -
ROL ROL
DEX DEX
BPL - BPL -
SEP #$20 SEP #$20
TAX TAX
AND.l CrystalsField : BNE + AND.l CrystalsField : BNE +
TXA TXA
ORA.l CrystalsField : STA.l CrystalsField ORA.l CrystalsField : STA.l CrystalsField
LDA.l CrystalCounter : INC : STA.l CrystalCounter LDA.l CrystalCounter : INC : STA.l CrystalCounter
+ +
.done .done
RTS RTS
@@ -682,56 +682,56 @@ ItemBehavior:
.bee_trap .bee_trap
SEP #$30 SEP #$30
LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI + ; DashBeeHive_SpawnBee LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI + ; DashBeeHive_SpawnBee
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : STA.w SpritePosYLow, Y : LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y LDA.b LinkPosY : STA.w SpritePosYLow, Y : LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
+ +
RTS RTS
.good_bee .good_bee
SEP #$30 SEP #$30
LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI + ; DashBeeHive_SpawnBee LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI + ; DashBeeHive_SpawnBee
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : STA.w SpritePosYLow, Y : LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y LDA.b LinkPosY : STA.w SpritePosYLow, Y : LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
JSL GoldBee_SpawnSelf_SetProperties JSL GoldBee_SpawnSelf_SetProperties
+ +
RTS RTS
.apples .apples
SEP #$30 SEP #$30
LDA.b #$AC : JSL Sprite_SpawnDynamically : BMI + LDA.b #$AC : JSL Sprite_SpawnDynamically : BMI +
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : SEC : SBC.b #$10 : STA.w SpritePosYLow,Y LDA.b LinkPosY : SEC : SBC.b #$10 : STA.w SpritePosYLow,Y
LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 16 pixels LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 16 pixels
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire
+ +
RTS RTS
.fairy .fairy
SEP #$30 SEP #$30
LDA.b #$E3 : JSL Sprite_SpawnDynamically : BMI + LDA.b #$E3 : JSL Sprite_SpawnDynamically : BMI +
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : SEC : SBC.b #$10 : STA.w SpritePosYLow,Y LDA.b LinkPosY : SEC : SBC.b #$10 : STA.w SpritePosYLow,Y
LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 16 pixels LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 16 pixels
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire
+ +
RTS RTS
.chicken .chicken
SEP #$30 SEP #$30
LDA.b #$0B : JSL Sprite_SpawnDynamically : BMI + LDA.b #$0B : JSL Sprite_SpawnDynamically : BMI +
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : SEC : SBC.b #$08 : STA.w SpritePosYLow,Y LDA.b LinkPosY : SEC : SBC.b #$08 : STA.w SpritePosYLow,Y
LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 8 pixels LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 8 pixels
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
+ +
RTS RTS
@@ -804,7 +804,7 @@ ResolveLootID:
CMP.l ProgressiveSwordLimit : BCC + CMP.l ProgressiveSwordLimit : BCC +
LDA.l ProgressiveSwordReplacement LDA.l ProgressiveSwordReplacement
JMP .get_item JMP .get_item
++ LDA.l SwordEquipment ++ LDA.l SwordEquipment
+ +
TAX TAX
LDA.w .prog_sword_ids,X LDA.w .prog_sword_ids,X
@@ -820,7 +820,7 @@ ResolveLootID:
CMP.l ProgressiveShieldLimit : BCC + CMP.l ProgressiveShieldLimit : BCC +
LDA.l ProgressiveShieldReplacement LDA.l ProgressiveShieldReplacement
JMP .get_item JMP .get_item
++ LDA.l HighestShield ++ LDA.l HighestShield
+ +
TAX TAX
LDA.w .shields_ids,X LDA.w .shields_ids,X
@@ -836,7 +836,7 @@ ResolveLootID:
LDA.l ProgressiveArmorReplacement LDA.l ProgressiveArmorReplacement
JMP .get_item JMP .get_item
+ +
++ LDA.l ArmorEquipment ++ LDA.l ArmorEquipment
TAX TAX
LDA.w .armor_ids,X LDA.w .armor_ids,X
JMP .have_item JMP .have_item
@@ -1190,7 +1190,7 @@ MaybeFlagCompassTotalPickup:
RTL RTL
MaybeFlagMapTotalPickup: MaybeFlagMapTotalPickup:
; LDA.l MapHUDMode : AND.b #$0F : BEQ .done LDA.l MapHUDMode : AND.b #$0F : BEQ .done
LDA.w DungeonID : BMI .done LDA.w DungeonID : BMI .done
LDA.w ItemReceiptID : CMP.b #$33 : BEQ .set_flag LDA.w ItemReceiptID : CMP.b #$33 : BEQ .set_flag
REP #$20 REP #$20
@@ -1212,7 +1212,7 @@ MaybeFlagDungeonTotalsEntrance:
LDA.l CompassMode : AND.w #$000F : BEQ .maps ; Skip if we're not showing compass counts LDA.l CompassMode : AND.w #$000F : BEQ .maps ; Skip if we're not showing compass counts
JSR FlagCompassCount JSR FlagCompassCount
.maps .maps
LDA.l MapHUDMode : AND.w #$000F LDA.l MapHUDMode : AND.w #$000F : BEQ .done
LDX.w DungeonID LDX.w DungeonID
JSR FlagMapCount JSR FlagMapCount
.done .done
+24 -6
View File
@@ -90,11 +90,17 @@ ItemSet_FairySword:
RTL RTL
ItemSet_SmithSword: 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 RTL
ItemSet_MagicBat: 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 RTL
ItemSet_OldMan: ItemSet_OldMan:
@@ -110,7 +116,10 @@ RTL
ItemSet_SickKid: ItemSet_SickKid:
PHA : LDA.l SickKidItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA PHA : LDA.l SickKidItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
JSL Link_ReceiveItem ; thing we wrote over 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 RTL
ItemSet_TreeKid: ItemSet_TreeKid:
@@ -122,7 +131,10 @@ RTL
ItemSet_Sahasrala: ItemSet_Sahasrala:
PHA : LDA.l SahasralaItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA PHA : LDA.l SahasralaItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
JSL Link_ReceiveItem ; thing we wrote over 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 RTL
ItemSet_Catfish: ItemSet_Catfish:
@@ -132,7 +144,10 @@ RTL
ItemSet_Library: ItemSet_Library:
PHA : LDA.l LibraryItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA PHA : LDA.l LibraryItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
JSL Link_ReceiveItem ; thing we wrote over 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 RTL
ItemSet_Mushroom: ItemSet_Mushroom:
@@ -149,7 +164,10 @@ ItemSet_Mushroom:
RTL RTL
ItemSet_Powder: 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 RTL
;================================================================================ ;================================================================================
+330 -78
View File
@@ -6,18 +6,18 @@ OWFlags:
dw 0 dw 0
OWReserved: OWReserved:
dw 0 dw 0
OWFog:
db 0 ; 0: disabled - 1: fog clears after visiting either world version of a screen - 2: fog clears after visiting the current world version of a screen
org $aa8010 org $aa8010
OWVersionInfo: OWVersionInfo:
dw $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000 dw $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000
;Hooks ;Hooks
org $82a929 org $82a92C
OWDetectTransitionReturn: JSL OWDetectEdgeTransition ; JSL Link_CheckForEdgeScreenTransition
org $82a939 org $82a936
OverworldHandleTransitions_SpecialTrigger: OverworldHandleTransitions_PerformEdgeTransition:
JSL OWDetectEdgeTransition
BCS OWDetectTransitionReturn
org $82a999 org $82a999
jsl OWEdgeTransition : nop #4 ;LDA $02A4E3,X : ORA $7EF3CA jsl OWEdgeTransition : nop #4 ;LDA $02A4E3,X : ORA $7EF3CA
@@ -78,8 +78,6 @@ org $8ab7af ;LDA $F2 : ORA $F0 : AND #$C0
jml OWFluteCancel2 : nop jml OWFluteCancel2 : nop
org $8ab90d ;JSL $02E99D org $8ab90d ;JSL $02E99D
jsl OWFluteCancel jsl OWFluteCancel
org $8ab816
JSL OWMapFluteCancelIcon
; allows Frog sprite to spawn in LW and also allows his friend to spawn in their house ; allows Frog sprite to spawn in LW and also allows his friend to spawn in their house
org $868a76 ; < 30a76 - sprite_prep.asm:785 (LDA $7EF3CA : AND.w #$40) org $868a76 ; < 30a76 - sprite_prep.asm:785 (LDA $7EF3CA : AND.w #$40)
@@ -106,20 +104,36 @@ jsl OWOldManSpeed
org $8aba6c ; < ? - Bank0a.asm:474 () org $8aba6c ; < ? - Bank0a.asm:474 ()
jsl OWMapWorldCheck16 : nop jsl OWMapWorldCheck16 : nop
; Mixed Overworld Map ; Custom Overworld Map
org $8ABA52
JSL OverworldMap_InitGfx_InitScrap
org $8ABA99 org $8ABA99
WorldMap_LoadDarkWorldMap: WorldMap_LoadDarkWorldMap:
LDA.b GameMode : CMP.b #$14 ; attract module LDA.b GameMode : CMP.b #$14 ; attract module
BEQ .vanilla_light BEQ .vanilla_light
LDA.l OWMode+1 : AND.b #!FLAG_OW_MIXED : BNE .mixed LDA.l OWFlags : AND.b #!FLAG_OW_CUSTOM_MAP : BNE .custom
LDA.b OverworldIndex : AND.b #$40 LDA.b OverworldIndex : AND.b #$40
BEQ .vanilla_light BEQ .vanilla_light
.mixed .custom
PHB : PHK : PLB STZ.b ScrapBuffer72 ; clear tile swap flag
JSL LoadMapDarkOrMixed JSL LoadMapDarkOrCustom_long
PLB NOP #2
warnpc $8ABAB5
.vanilla_light ; $0ABAB5 .vanilla_light ; $0ABAB5
org $8ABD12
JSL MoveZoomedInPositionY
org $8ABD2F
JSL MoveZoomedInPositionX
org $8ABB32
JSL LoadMapOppositeWorld
org $8ABFF0
JSL MoveMirrorPortalMapSprite
; Could insert similar hooks at $8AB860 and $8AB8AC for flute spots
;(replacing -> LDA $8A : AND.b #$40) ;(replacing -> LDA $8A : AND.b #$40)
org $80d8c4 ; < ? - Bank00.asm:4068 () org $80d8c4 ; < ? - Bank00.asm:4068 ()
jsl OWWorldCheck jsl OWWorldCheck
@@ -227,6 +241,7 @@ OWMapWorldCheck16:
{ {
lda.b GameMode : cmp.w #$0014 : beq .return ; attract module, return with Z flag cleared lda.b GameMode : cmp.w #$0014 : beq .return ; attract module, return with Z flag cleared
jsl OWWorldCheck16 jsl OWWorldCheck16
eor.b ScrapBuffer72 ; apply tile swap flag
.return .return
rtl rtl
} }
@@ -341,7 +356,7 @@ OWFluteCancel2:
} }
OWMapFluteCancelIcon: OWMapFluteCancelIcon:
{ {
STA.b Scrap0B : LDX.b #$10 ; what we wrote over LDA.b #$02 : STA.b Scrap0B ; what we wrote over
LDA.l OWFlags+1 : AND.b #$01 : BEQ .return LDA.l OWFlags+1 : AND.b #$01 : BEQ .return
LDA.b GameSubMode : CMP.b #$0A : BNE .return LDA.b GameSubMode : CMP.b #$0A : BNE .return
LDA.b FrameCounter : AND.b #$10 : BNE .return LDA.b FrameCounter : AND.b #$10 : BNE .return
@@ -387,51 +402,110 @@ OWMarkVisited:
RTL RTL
} }
LoadMapDarkOrMixed: LoadMapDarkOrCustom:
{ {
CMP.b #!FLAG_OW_MIXED : REP #$30 : BEQ .mixed CMP.b #!FLAG_OW_CUSTOM_MAP : REP #$30 : BEQ .custom
LDX.w #$03FE ; draw vanilla Dark World (what we wrote over) LDX.w #$03FE ; draw vanilla Dark World (what we wrote over)
.copy_next .copy_next
LDA.w WorldMap_DarkWorldTilemap,X : STA.w GFXStripes,X LDA.w WorldMap_DarkWorldTilemap,X : STA.w GFXStripes,X
DEX : DEX : BPL .copy_next DEX : DEX : BPL .copy_next
BRL .end BRL .end
.mixed .custom
LDX.b OverworldIndex LDX.b OverworldIndex
LDA.l OWTileWorldAssoc,X LDA.l OWTileWorldAssoc,X
STA.b Scrap00
LDY.w #$139C
LDX.w #$003F
.next_screen
PHX
LDA.l OWTileWorldAssoc,X
EOR.b Scrap00
AND.w #$0040 AND.w #$0040
BEQ .light EOR.b ScrapBuffer72 ; apply tile swap flag
TYX : BRA .copy_screen BEQ .draw_lw
.light LDA.w #OWMapGridDark
TXA : AND.w #$0024 : LSR : TAX BRA .draw_dw
TYA : SEC : SBC.l LWQuadrantOffsets,X .draw_lw
TYX : TAY LDA.w #OWMapGridLight
.copy_screen ; more efficient to have X on the right side .draw_dw
LDA.w $C739+$00,Y : STA.b $00,X STA.b Scrap00
LDA.w $C739+$02,Y : STA.b $02,X LDA.w #OWMapGridLight>>16 ; current program bank
LDA.w $C739+$20,Y : STA.b $20,X STA.b Scrap02
LDA.w $C739+$22,Y : STA.b $22,X LDX.w #$139C
LDA.w $C739+$40,Y : STA.b $40,X LDY.w #$003F
LDA.w $C739+$42,Y : STA.b $42,X .next_cell
LDA.w $C739+$60,Y : STA.b $60,X PHY
LDA.w $C739+$62,Y : STA.b $62,X JSR GetOWMapTilemapOffsetToCopy
TXY : PLX .copy_cell ; more efficient to have X on the right side
DEY : DEY : DEY : DEY ; move one screen left TAY
TXA : AND.w #$0007 : BNE .same_row LDA.w WorldMap_LightWorldTilemap+$00,Y : STA.b $00,X
TYA : SEC : SBC.w #$0060 : TAY ; move one screen row up LDA.w WorldMap_LightWorldTilemap+$02,Y : STA.b $02,X
LDA.w WorldMap_LightWorldTilemap+$20,Y : STA.b $20,X
LDA.w WorldMap_LightWorldTilemap+$22,Y : STA.b $22,X
LDA.w WorldMap_LightWorldTilemap+$40,Y : STA.b $40,X
LDA.w WorldMap_LightWorldTilemap+$42,Y : STA.b $42,X
LDA.w WorldMap_LightWorldTilemap+$60,Y : STA.b $60,X
LDA.w WorldMap_LightWorldTilemap+$62,Y : STA.b $62,X
PLY
DEX : DEX : DEX : DEX ; move one screen left
TYA : AND.w #$0007 : BNE .same_row
TXA : SEC : SBC.w #$0060 : TAX ; move one screen row up
.same_row .same_row
DEX DEY
BPL .next_screen BPL .next_cell
.end .end
SEP #$30 SEP #$30
LDA.b #$15 : STA.b NMIINCR ; what we wrote over LDA.b #$15 : STA.b NMIINCR ; what we wrote over
RTL RTS
}
GetOWMapTilemapOffsetToCopy:
{
LDA.l OWFog : AND.w #$00FF
CMP.w #$0001 : BEQ .parallel_fog
CMP.w #$0002 : BNE .no_fog
LDA.b [Scrap00],Y : AND.w #$00FF
PHX
TAX
BIT.w #$0040
BEQ .light_fog
LDA.l Overworld_ActualScreenID-$40,X : ORA.w #$0040
BRA .dark_fog
.light_fog
LDA.l Overworld_ActualScreenID,X
.dark_fog
AND.w #$00FF
TAX
LDA.l OverworldEventDataWRAM,X
.check_visited_flag
PLX
AND.w #$0080 : BNE .no_fog
LDA.w #($D350-$C739)
RTS
.parallel_fog
LDA.b [Scrap00],Y : AND.w #$003F
PHX
TAX
LDA.l Overworld_ActualScreenID,X
AND.w #$00FF
TAX
LDA.l OverworldEventDataWRAM,X
ORA.l OverworldEventDataWRAM+$40,X
BRA .check_visited_flag
.no_fog
LDA.b [Scrap00],Y : AND.w #$0038 : ASL : ASL : ASL : ASL
STA.b Scrap03
LDA.b [Scrap00],Y
BIT.w #$0040
BEQ .light
AND.w #$0007
ASL : ASL : ADC.w #$1000 : ADC.b Scrap03
RTS
.light
PHX
AND.w #$0024 : LSR : TAX
LDA.b [Scrap00],Y
AND.w #$0007
ASL : ASL : ADC.w #$1000 : ADC.b Scrap03
SEC : SBC.l LWQuadrantOffsets,X
PLX
RTS
LWQuadrantOffsets: LWQuadrantOffsets:
dw $1000-$0210 ; top left dw $1000-$0210 ; top left
@@ -441,6 +515,143 @@ LoadMapDarkOrMixed:
dw $0400+$0210 ; bottom right dw $0400+$0210 ; bottom right
} }
OverworldMap_InitGfx_InitScrap:
{
STZ.b ScrapBuffer72 ; clear tile swap flag
LDA.b #$11 : STA.b MAINDESQ ; what we wrote over
RTL
}
LoadMapDarkOrCustom_long:
{
PHB : LDA.b #WorldMap_DarkWorldTilemap>>16 : PHA : PLB
LDA.l OWFlags : AND.b #!FLAG_OW_CUSTOM_MAP
JSR LoadMapDarkOrCustom
PLB
RTL
}
LoadMapOppositeWorld:
{
LDA.l OWFlags : AND.b #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla
LDA.b ScrapBuffer72 : BEQ +
LDA.b Joy1B_All : AND.b #$30 : BNE .vanilla
STZ.b ScrapBuffer72 ; clear tile swap flag
BRA .new_tiles
+ LDA.b Joy1B_New : AND.b #$30 : BEQ .vanilla
LDA.b #$40 : STA.b ScrapBuffer72 ; set tile swap flag
.new_tiles
JSL OverworldMap_InitGfx+$10 ; load palette
DEC.w SubModuleInterface
LDA.b #$0F : STA.b INIDISPQ
JSL LoadMapDarkOrCustom_long
LDA.b #$24 : STA.w SFX3
PLA : PLA : PEA.w $BBAF ; skip everything upon return
.vanilla
LDA.b Joy1B_New : AND.b #$70 ; what we wrote over
RTL
}
FluteMenu_MoveLinkSprite:
{
JSR MoveMapSprite
BRA WorldMap_SkipHandleSprites_vanilla
}
WorldMap_SkipHandleSprites:
{
JSR MoveMapSprite : BEQ .vanilla
LDA.b ScrapBuffer72 : BEQ .vanilla ; skip draw if no tile swap
PLA : PLA : PEA.w $C39B ; exit without drawing sprites
RTL
.vanilla
LDA.b FrameCounter : AND.b #$10 ; what we wrote over
RTL
}
MoveMirrorPortalMapSprite:
{
STA.l $7EC109 ; what we overwrote
JSR MoveMapSprite
RTL
}
MoveZoomedInPositionY:
{
LDA.l OWFlags : AND.w #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla
SEP #$20
JSR MoveMapSprite_Setup
JSR MoveMapSprite_GetYCoordHighByte
PHA
REP #$20
LDA.l $7EC108 : XBA
SEP #$20
PLA : XBA
REP #$20
RTL
.vanilla
LDA.l $7EC108 ; what we overwrote
RTL
}
MoveZoomedInPositionX:
{
LDA.l OWFlags : AND.w #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla
SEP #$20
JSR MoveMapSprite_Setup
JSR MoveMapSprite_GetXCoordHighByte
PHA
REP #$20
LDA.l $7EC10A : XBA
SEP #$20
PLA : XBA
REP #$20
RTL
.vanilla
LDA.l $7EC10A ; what we overwrote
RTL
}
MoveMapSprite:
{
LDA.l OWFlags : AND.b #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .return
PHP
JSR MoveMapSprite_Setup
JSR MoveMapSprite_GetXCoordHighByte : STA.l $7EC10B
JSR MoveMapSprite_GetYCoordHighByte : STA.l $7EC109
PLP
.return
RTS
}
MoveMapSprite_Setup:
{
LDA.l $7EC10B : AND.b #$0E : LSR
STA.b Scrap00
LDA.l $7EC109 : AND.b #$0E : ASL : ASL
ADC.b Scrap00
STA.b Scrap00
LDX.b OverworldIndex
LDA.l OWTileWorldAssoc,X
LDX.b Scrap00
AND.b #$40
BEQ .light
LDA.l OWMapGridDarkPositionByAbsolutePosition,X
BRA .dark
.light
LDA.l OWMapGridLightPositionByAbsolutePosition,X
.dark
TAX
AND.b #$07 : ASL
STA.b Scrap00
RTS
}
MoveMapSprite_GetXCoordHighByte:
{
LDA.l $7EC10B : AND.b #$01 : ORA.b Scrap00
RTS
}
MoveMapSprite_GetYCoordHighByte:
{
TXA : AND.b #$38 : LSR : LSR : STA.b Scrap00
LDA.l $7EC109 : AND.b #$01 : ORA.b Scrap00
RTS
}
OWBonkDropPrepSprite: OWBonkDropPrepSprite:
{ {
LDA.b IndoorsFlag : BEQ + LDA.b IndoorsFlag : BEQ +
@@ -609,27 +820,26 @@ OWBonkDrops:
JSL OWBonkSpritePrep JSL OWBonkSpritePrep
.mark_collected ; S = Collected, FlagBitmask, X (row + 2) .mark_collected ; S = Collected, FlagBitmask, X (row + 2)
PLA : BNE + ; S = FlagBitmask, X (row + 2) PLA : BEQ + : - : JMP .return : + ; S = FlagBitmask, X (row + 2)
TYX : JSL Sprite_IsOnscreen : BCC + TYX : JSL Sprite_IsOnscreen : BCC -
LDA.b IndoorsFlag : BEQ ++ LDA.b IndoorsFlag : BEQ +
LDA.l RoomDataWRAM[$0120].high : ORA.b 1,S : STA.l RoomDataWRAM[$0120].high LDA.l RoomDataWRAM[$0120].high : ORA.b 1,S : STA.l RoomDataWRAM[$0120].high
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
++ +
LDA.b OverworldIndex LDA.b OverworldIndex
BIT.b #$40 : BEQ + BIT.b #$40 : BEQ +
LDA.l ProgressIndicator : CMP.b #$02 LDA.l ProgressIndicator : CMP.b #$02
LDA.b OverworldIndex : BCS ++ : AND.b #$BF LDA.b OverworldIndex : BCS + : AND.b #$BF
++
+ +
TAX : LDA.l OverworldEventDataWRAM,X : ORA.b 1,S : STA.l OverworldEventDataWRAM,X TAX : LDA.l OverworldEventDataWRAM,X : ORA.b 1,S : STA.l OverworldEventDataWRAM,X
.increment_collection .increment_collection
REP #$20 REP #$20
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter LDA.l TotalItemCounter : INC : STA.l TotalItemCounter
INC.w UpdateHUDFlag
SEP #$20 SEP #$20
+ BRA .return LDA.b #$01 : STA.l UpdateHUDFlag
BRA .return
; spawn itemget item ; spawn itemget item
.spawn_item ; A = item id ; Y = bonk sprite slot ; S = Collected, FlagBitmask, X (row + 2) .spawn_item ; A = item id ; Y = bonk sprite slot ; S = Collected, FlagBitmask, X (row + 2)
@@ -738,20 +948,29 @@ OWBonkSpritePrep:
org $aa9000 org $aa9000
OWDetectEdgeTransition: OWDetectEdgeTransition:
{ {
JSL OWDestroyItemSprites JSL Link_CheckForEdgeScreenTransition ; what we wrote over
BCS .return
STZ.w RandoOverworldWalkDist STZ.w RandoOverworldWalkDist
LDA.l OWMode : ORA.l OWMode+1 : BEQ .vanilla LDA.l OWMode : ORA.l OWMode+1 : BEQ .vanilla
PHY
JSR OWShuffle JSR OWShuffle
LDA.w RandoOverworldTargetEdge : BMI .special PLY
LDA.w RandoOverworldTargetEdge : BMI .specialOrDisabled
.vanilla .vanilla
REP #$31 : LDX.b Scrap02 : LDA.b OverworldMap16Buffer ; what we wrote over CLC ; allow transition
RTL RTL
.specialOrDisabled
CMP.b #$FF : BNE .special
STZ.w RandoOverworldTargetEdge
PHB
JML Link_CheckForEdgeScreenTransition_prevent_transition
.special .special
REP #$30 REP #$30
AND.w #$0003 : TAY : ASL : TAX AND.w #$0003 : TAY : ASL : TAX
LDA.w #$007F : STA.w RandoOverworldTargetEdge LDA.w #$007F : STA.w RandoOverworldTargetEdge
JSR OWLoadSpecialArea JSR OWLoadSpecialArea
SEC SEC
.return
RTL RTL
} }
OWDetectSpecialTransition: OWDetectSpecialTransition:
@@ -761,17 +980,23 @@ OWDetectSpecialTransition:
TXA : AND.w #$0002 : LSR TXA : AND.w #$0002 : LSR
STA.w RandoOverworldTerrain STA.w RandoOverworldTerrain
LDA.l OWSpecialDestIndex,X : BIT.w #$0080 : BEQ .switch_to_edge LDA.l OWSpecialDestIndex,X : BIT.w #$0080 : BEQ .switch_to_edge
AND.w #$00FF : CMP.w #$00FF : BEQ .disabled
AND.w #$0003 : TAY : ASL : TAX AND.w #$0003 : TAY : ASL : TAX
.normal .normal
JSR OWLoadSpecialArea JSR OWLoadSpecialArea
.return .return
RTL RTL
.disabled
SEP #$30
STZ.w RandoOverworldTargetEdge
RTL
.switch_to_edge .switch_to_edge
STA.w RandoOverworldTargetEdge STA.w RandoOverworldTargetEdge
LDA.l OWEdgeDataOffset,X : STA.w RandoOverworldEdgeAddr LDA.l OWEdgeDataOffset,X : STA.w RandoOverworldEdgeAddr
PLA : SEP #$30 : PLA ; delete 3 bytes from stack PLA : SEP #$30 : PLA ; delete 3 bytes from stack
JSL Link_CheckForEdgeScreenTransition : BCS .return ; Link_CheckForEdgeScreenTransition JSL Link_CheckForEdgeScreenTransition : BCS .return
LDA.l Overworld_CheckForSpecialOverworldTrigger_Direction,X : STA.b Scrap00 : CMP.b #$08 : BNE .hobo LDA.l Overworld_CheckForSpecialOverworldTrigger_Direction,X : STA.b Scrap00 : CMP.b #$08 : BNE .hobo
LSR : STA.b LinkPosY : STZ.b BG2V ; move Link and camera to edge LSR : STA.b LinkPosY : STZ.b BG2V ; move Link and camera to edge
LDA.b #$06 : STA.b Scrap02 LDA.b #$06 : STA.b Scrap02
@@ -790,16 +1015,15 @@ OWDetectSpecialTransition:
LDA.b #$FF : STA.b LinkRecoilZ : STA.b $C7 LDA.b #$FF : STA.b LinkRecoilZ : STA.b $C7
STZ.b $3D : STZ.b LinkSpeed : STZ.w $032B : STZ.w LinkDashing : STZ.b LinkState STZ.b $3D : STZ.b LinkSpeed : STZ.w $032B : STZ.w LinkDashing : STZ.b LinkState
.not_dashing .not_dashing
PLA : REP #$31 : PLA ; delete 3 bytes from stack PLA : PLA : PLA ; delete 3 bytes from stack
LDX.b Scrap02 JML OverworldHandleTransitions_PerformEdgeTransition
LDA.b OverworldMap16Buffer
JML OverworldHandleTransitions_SpecialTrigger+6
} }
OWEdgeTransition: OWEdgeTransition:
{ {
LDA.l OWMode : ORA.l OWMode+1 : BEQ .unshuffled LDA.l OWMode : ORA.l OWMode+1 : BEQ .unshuffled
LDY.w RandoOverworldTargetEdge : STZ.w RandoOverworldTargetEdge LDY.w RandoOverworldTargetEdge : STZ.w RandoOverworldTargetEdge
CPY.b #$7F : BEQ .unshuffled CPY.b #$7F : BEQ .unshuffled
JSL OWDestroyItemSprites
REP #$10 REP #$10
LDX.w RandoOverworldEdgeAddr LDX.w RandoOverworldEdgeAddr
PHB : PHK : PLB PHB : PHK : PLB
@@ -1117,6 +1341,7 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water,
STZ.w RandoOverworldForceTrans STZ.w RandoOverworldForceTrans
CMP.b #$02 : BNE + CMP.b #$02 : BNE +
DEC : STA.w LinkDeepWater : STZ.w LinkSwimDirection DEC : STA.w LinkDeepWater : STZ.w LinkSwimDirection
LDA.b FlagBY : AND.b #$7F : STA.b FlagBY
LDA.b #$04 : BRA .set_state LDA.b #$04 : BRA .set_state
+ +
CMP.b #$03 : BNE ++ CMP.b #$03 : BNE ++
@@ -1137,6 +1362,7 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water,
LDA.b #$01 : STA.w LinkDeepWater LDA.b #$01 : STA.w LinkDeepWater
LDA.l FlippersEquipment : BEQ .no_flippers ; check if flippers obtained LDA.l FlippersEquipment : BEQ .no_flippers ; check if flippers obtained
LDA.b LinkState : CMP.b #$17 : BEQ .no_flippers ; check if bunny LDA.b LinkState : CMP.b #$17 : BEQ .no_flippers ; check if bunny
LDA.b FlagBY : AND.b #$7F : STA.b FlagBY
LDA.b #$04 : STA.b LinkState : STZ.w LinkSwimDirection : RTS LDA.b #$04 : STA.b LinkState : STZ.w LinkSwimDirection : RTS
.no_flippers .no_flippers
PHX PHX
@@ -1488,7 +1714,7 @@ dw $0b28, $0b38, $0010, $0b30, $1515, $1018, $0001, $000e
dw $0b70, $0ba0, $0030, $0b88, $1515, $1020, $0000, $000f dw $0b70, $0ba0, $0030, $0b88, $1515, $1020, $0000, $000f
dw $0a40, $0b10, $00d0, $0aa8, $1d1d, $1006, $0000, $0010 dw $0a40, $0b10, $00d0, $0aa8, $1d1d, $1006, $0000, $0010
dw $0350, $0390, $0040, $0370, $1821, $2060, $0000, $0011 dw $0350, $0390, $0040, $0370, $1821, $2060, $0000, $0011
dw $0670, $06a8, $0038, $068c, $1b23, $2002, $0000, $0012 dw $0670, $06a8, $0038, $068c, $1b23, $2004, $0000, $0012
dw $0898, $09b0, $0118, $0924, $1b24, $2054, $0000, $0013 dw $0898, $09b0, $0118, $0924, $1b24, $2054, $0000, $0013
dw $0a40, $0ba0, $0160, $0af0, $2525, $100e, $0000, $0014 dw $0a40, $0ba0, $0160, $0af0, $2525, $100e, $0000, $0014
dw $0c70, $0c90, $0020, $0c80, $1e26, $2002, $0000, $0015 dw $0c70, $0c90, $0020, $0c80, $1e26, $2002, $0000, $0015
@@ -1520,7 +1746,7 @@ dw $0b28, $0b38, $0010, $0b30, $5555, $1018, $0001, $002e
dw $0b70, $0ba0, $0030, $0b88, $5555, $1020, $0000, $002f dw $0b70, $0ba0, $0030, $0b88, $5555, $1020, $0000, $002f
dw $0a40, $0b10, $00d0, $0aa8, $5d5d, $1006, $0000, $0030 dw $0a40, $0b10, $00d0, $0aa8, $5d5d, $1006, $0000, $0030
dw $0350, $0390, $0040, $0370, $5861, $2060, $0000, $0031 dw $0350, $0390, $0040, $0370, $5861, $2060, $0000, $0031
dw $0670, $06a8, $0038, $068c, $5b63, $2002, $0000, $0032 dw $0670, $06a8, $0038, $068c, $5b63, $2004, $0000, $0032
dw $0898, $09b0, $0118, $0924, $5b64, $2054, $0000, $0033 dw $0898, $09b0, $0118, $0924, $5b64, $2054, $0000, $0033
dw $0a40, $0ba0, $0160, $0af0, $6565, $100e, $0000, $0034 dw $0a40, $0ba0, $0160, $0af0, $6565, $100e, $0000, $0034
dw $0c70, $0c90, $0020, $0c80, $5e66, $2002, $0000, $0035 dw $0c70, $0c90, $0020, $0c80, $5e66, $2002, $0000, $0035
@@ -1827,16 +2053,42 @@ db $74, $4e, $10, $b1, $00, $1c
UWBonkPrizeData: UWBonkPrizeData:
db $ff, $00, $02, $b5, $00, $08 db $ff, $00, $02, $b5, $00, $08
; temporary fix - murahdahla replaces one of the bonk tree prizes org $AABC80 ;PC 153C80
; so we copy the sprite table here and update the pointer OWMapGridLight:
; longterm solution should be to spawn in murahdahla separately db $00, $01, $02, $03, $04, $05, $06, $07
org $89AE2A db $08, $09, $0A, $0B, $0C, $0D, $0E, $0F
Overworld_Sprites_Screen1A_2: db $10, $11, $12, $13, $14, $15, $16, $17
db $08, $0F, $41 ; yx:{ 0x080, 0x0F0 } db $18, $19, $1A, $1B, $1C, $1D, $1E, $1F
db $0E, $0C, $41 ; yx:{ 0x0E0, 0x0C0 } db $20, $21, $22, $23, $24, $25, $26, $27
db $11, $0D, $E3 ; yx:{ 0x110, 0x0D0 } db $28, $29, $2A, $2B, $2C, $2D, $2E, $2F
db $18, $0A, $D8 ; yx:{ 0x180, 0x0A0 } db $30, $31, $32, $33, $34, $35, $36, $37
db $18, $0F, $45 ; yx:{ 0x180, 0x0F0 } db $38, $39, $3A, $3B, $3C, $3D, $3E, $3F
db $FF ; END OWMapGridDark:
org $89CA55 db $40, $41, $42, $43, $44, $45, $46, $47
dw Overworld_Sprites_Screen1A_2&$FFFF db $48, $49, $4A, $4B, $4C, $4D, $4E, $4F
db $50, $51, $52, $53, $54, $55, $56, $57
db $58, $59, $5A, $5B, $5C, $5D, $5E, $5F
db $60, $61, $62, $63, $64, $65, $66, $67
db $68, $69, $6A, $6B, $6C, $6D, $6E, $6F
db $70, $71, $72, $73, $74, $75, $76, $77
db $78, $79, $7A, $7B, $7C, $7D, $7E, $7F
org $AABD00 ;PC 153D00
OWMapGridLightPositionByAbsolutePosition:
db $00, $01, $02, $03, $04, $05, $06, $07
db $08, $09, $0A, $0B, $0C, $0D, $0E, $0F
db $10, $11, $12, $13, $14, $15, $16, $17
db $18, $19, $1A, $1B, $1C, $1D, $1E, $1F
db $20, $21, $22, $23, $24, $25, $26, $27
db $28, $29, $2A, $2B, $2C, $2D, $2E, $2F
db $30, $31, $32, $33, $34, $35, $36, $37
db $38, $39, $3A, $3B, $3C, $3D, $3E, $3F
OWMapGridDarkPositionByAbsolutePosition:
db $00, $01, $02, $03, $04, $05, $06, $07
db $08, $09, $0A, $0B, $0C, $0D, $0E, $0F
db $10, $11, $12, $13, $14, $15, $16, $17
db $18, $19, $1A, $1B, $1C, $1D, $1E, $1F
db $20, $21, $22, $23, $24, $25, $26, $27
db $28, $29, $2A, $2B, $2C, $2D, $2E, $2F
db $30, $31, $32, $33, $34, $35, $36, $37
db $38, $39, $3A, $3B, $3C, $3D, $3E, $3F
+4 -4
View File
@@ -291,10 +291,10 @@ RTL
REP #$30 REP #$30
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
; dungeon names ; dungeon names
LDA.w #$2D50 LDA.w #$2DA4
LDY.w #00 LDY.w #00
.next_dungeon_name .next_dungeon_name
LDX.w .dungeon_positions,Y LDX.w .dungeon_positions,Y
STA.w GFXStripes+$0646,X STA.w GFXStripes+$0646,X
INC INC
@@ -310,10 +310,10 @@ RTL
STA.w GFXStripes+$0706,X STA.w GFXStripes+$0706,X
DEX : DEX DEX : DEX
BPL -- BPL --
LDA.l HudFlag : AND.w #$0020 : BEQ + LDA.l HudFlag : AND.w #$0020 : BEQ +
JMP .maps_and_compasses JMP .maps_and_compasses
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
+ +
LDA.l HUDDungeonItems : AND.w #$0001 : BNE + LDA.l HUDDungeonItems : AND.w #$0001 : BNE +
+10
View File
@@ -65,6 +65,8 @@ LinkSubPixelVelocty = $7E002A ; Word length
LinkAnimationStep = $7E002E ; LinkAnimationStep = $7E002E ;
LinkDirection = $7E002F ; $00 = Up | $02 = Down | $04 = Left | $06 = Right LinkDirection = $7E002F ; $00 = Up | $02 = Down | $04 = Left | $06 = Right
; ;
FlagBY = $7E003A ; Bitfield for B and Y buttons.
;
OAMOffsetY = $7E0044 ; OAMOffsetY = $7E0044 ;
OAMOffsetX = $7E0045 ; OAMOffsetX = $7E0045 ;
LinkIncapacitatedTimer = $7E0046 ; Countdown when Link takes damage, not same as I-frames LinkIncapacitatedTimer = $7E0046 ; Countdown when Link takes damage, not same as I-frames
@@ -235,6 +237,8 @@ CurrentYItem = $7E0303 ;
AButtonAct = $7E0308 ; Bitfield for A-actions. $80 = Carry/toss | $02 Prayer | $01 = Tree pull AButtonAct = $7E0308 ; Bitfield for A-actions. $80 = Carry/toss | $02 Prayer | $01 = Tree pull
CarryAct = $7E0309 ; Bitfield for carrying. $02 = Tossing | $01 = Lifting CarryAct = $7E0309 ; Bitfield for carrying. $02 = Tossing | $01 = Lifting
; ;
LinkIFrames = $7E031F ; Countdown for Link's invincibility frames after taking damage.
;
LinkSwimDirection = $7E0340 ; Bitfield for swim direction. (.... udlr) LinkSwimDirection = $7E0340 ; Bitfield for swim direction. (.... udlr)
; ;
LinkDeepWater = $7E0345 ; Set when Link is in deep water. LinkDeepWater = $7E0345 ; Set when Link is in deep water.
@@ -334,6 +338,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
NpcItemIndicator = $7E072C ; Flag used by HUD to indicate NPC item present
SkipBeeTrapDisguise = $7E072D ; 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
@@ -593,6 +598,8 @@ HUDMultiIndicator = $7EC790 ;
HUDKeysObtained = $7EC7A2 ; HUDKeysObtained = $7EC7A2 ;
HUDKeysSlash = $7EC7A4 ; HUDKeysSlash = $7EC7A4 ;
HUDKeysTotal = $7EC7A6 ; HUDKeysTotal = $7EC7A6 ;
HUDKeysExtraPlus = $7EC7E4 ;
HUDKeysExtraCount = $7EC7E6 ;
; ;
BigRAM = $7EC900 ; Big buffer of free ram (0x1F00) BigRAM = $7EC900 ; Big buffer of free ram (0x1F00)
ItemGFXStack = $7ECB00 ; Pointers to source of decompressed item tiles deferred to NMI loading. ItemGFXStack = $7ECB00 ; Pointers to source of decompressed item tiles deferred to NMI loading.
@@ -777,6 +784,7 @@ endmacro
%assertRAM(LinkRecoilZ, $7E0029) %assertRAM(LinkRecoilZ, $7E0029)
%assertRAM(LinkAnimationStep, $7E002E) %assertRAM(LinkAnimationStep, $7E002E)
%assertRAM(LinkDirection, $7E002F) %assertRAM(LinkDirection, $7E002F)
%assertRAM(FlagBY, $7E003A)
%assertRAM(OAMOffsetY, $7E0044) %assertRAM(OAMOffsetY, $7E0044)
%assertRAM(OAMOffsetX, $7E0045) %assertRAM(OAMOffsetX, $7E0045)
%assertRAM(LinkIncapacitatedTimer, $7E0046) %assertRAM(LinkIncapacitatedTimer, $7E0046)
@@ -874,6 +882,8 @@ endmacro
%assertRAM(UseY1, $7E0301) %assertRAM(UseY1, $7E0301)
%assertRAM(CurrentYItem, $7E0303) %assertRAM(CurrentYItem, $7E0303)
%assertRAM(AButtonAct, $7E0308) %assertRAM(AButtonAct, $7E0308)
%assertRAM(CarryAct, $7E0309)
%assertRAM(LinkIFrames, $7E031F)
%assertRAM(LinkSwimDirection, $7E0340) %assertRAM(LinkSwimDirection, $7E0340)
%assertRAM(LinkDeepWater, $7E0345) %assertRAM(LinkDeepWater, $7E0345)
%assertRAM(TileActIce, $7E0348) %assertRAM(TileActIce, $7E0348)
+3 -1
View File
@@ -433,9 +433,11 @@ Shopkeeper_BuyItem:
CMP.b #$2E : BEQ .refill ; Red Potion Refill CMP.b #$2E : BEQ .refill ; Red Potion Refill
CMP.b #$2F : BEQ .refill ; Green Potion Refill CMP.b #$2F : BEQ .refill ; Green Potion Refill
CMP.b #$30 : BEQ .refill ; Blue Potion Refill CMP.b #$30 : BEQ .refill ; Blue Potion Refill
BRA + CMP.b #$AF : BEQ .generic_key
BRA +
.refill .refill
JSL Sprite_GetEmptyBottleIndex : BMI .full_bottles 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 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 ; High Byte: x c e d a s p m
; x = Sewers | c = Hyrule Castle | e = Eastern Palace | d = Desert Palace ; x = Sewers | c = Hyrule Castle | e = Eastern Palace | d = Desert Palace
; a = Castle Tower | s = Swamp Palace | p = PoD | m = Mire ; 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 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 ; 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) 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) DeathCounter: skip 1 ; Number of deaths (integer)
skip 1 ; Reserved skip 1 ; Reserved
FluteCounter: skip 1 ; Number of times fluted (integer) 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 RNGItem: skip 2 ; RNG Item
SwordlessBossKills: skip 1 ; Number of bosses killed without a sword (integer) SwordlessBossKills: skip 1 ; Number of bosses killed without a sword (integer)
FaerieRevivalCounter: skip 1 ; Number of faerie revivals (integer) FaerieRevivalCounter: skip 1 ; Number of faerie revivals (integer)
+42 -42
View File
@@ -88,27 +88,27 @@ IncrementSmallKeys:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementSmallKeysNoPrimary: IncrementSmallKeysNoPrimary:
STA.l CurrentSmallKeys ; thing we wrote over, write small key count STA.l CurrentSmallKeys ; thing we wrote over, write small key count
PHX PHX
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter
+ +
JSL UpdateKeys JSL UpdateKeys
LDA.b IndoorsFlag : BEQ + ; skip room check if outdoors LDA.b IndoorsFlag : BEQ + ; skip room check if outdoors
PHP : REP #$20 ; set 16-bit accumulator PHP : REP #$20 ; set 16-bit accumulator
LDA.b RoomIndex : CMP.w #$0087 : BNE ++ ; hera basement LDA.b RoomIndex : CMP.w #$0087 : BNE ++ ; hera basement
LDA.b $A8 : AND.w #$0003 : CMP.w #$0002 : BNE ++ ; must be quadrant 2 LDA.b $A8 : AND.w #$0003 : CMP.w #$0002 : BNE ++ ; must be quadrant 2
LDA.w SprDropsItem, X : AND.w #$00FF : BNE ++ ; must not be a standing item LDA.w SprDropsItem, X : AND.w #$00FF : BNE ++ ; must not be a standing item
PLP : PHY PLP : PHY
LDY.b #$24 LDY.b #$24
JSL AddInventory JSL AddInventory
PLY : BRA + PLY : BRA +
++ ++
PLP PLP
+ +
LDA.b #$01 : STA.l UpdateHUDFlag LDA.b #$01 : STA.l UpdateHUDFlag
JSL HUD_RebuildLong JSL HUD_RebuildLong
PLX PLX
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DecrementSmallKeys: DecrementSmallKeys:
@@ -188,9 +188,9 @@ CountAllKey:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementAgahnim2Sword: IncrementAgahnim2Sword:
PHA PHA
JSL IncrementBossSword JSL IncrementBossSword
PLA PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementDeathCounter: IncrementDeathCounter:
@@ -239,22 +239,22 @@ RTL
DecrementItemCounter: DecrementItemCounter:
PHA PHA
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
REP #$20 REP #$20
LDA.l TotalItemCounter : DEC : STA.l TotalItemCounter LDA.l TotalItemCounter : DEC : STA.l TotalItemCounter
SEP #$20 SEP #$20
+ +
PLA PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementBigChestCounter: IncrementBigChestCounter:
JSL Dungeon_SaveRoomQuadrantData ; thing we wrote over JSL Dungeon_SaveRoomQuadrantData ; thing we wrote over
PHA PHA
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
LDA.l BigKeysBigChests : INC : AND.b #$0F : TAX LDA.l BigKeysBigChests : INC : AND.b #$0F : TAX
LDA.l BigKeysBigChests : AND.b #$F0 : STA.l BigKeysBigChests LDA.l BigKeysBigChests : AND.b #$F0 : STA.l BigKeysBigChests
TXA : ORA.l BigKeysBigChests : STA.l BigKeysBigChests TXA : ORA.l BigKeysBigChests : STA.l BigKeysBigChests
+ +
PLA PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementDamageTakenCounter_Eight: IncrementDamageTakenCounter_Eight:
@@ -338,8 +338,8 @@ IncrementUWMirror:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementSpentRupees: IncrementSpentRupees:
DEC A : BPL .subtractRupees DEC A : BPL .subtractRupees
LDA.w #$0000 : STA.l CurrentRupees LDA.w #$0000 : STA.l CurrentRupees
RTL RTL
.subtractRupees .subtractRupees
PHA : PHP PHA : PHP
@@ -355,9 +355,9 @@ IndoorTileTransitionCounter:
JMP StatTransitionCounter JMP StatTransitionCounter
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IndoorSubtileTransitionCounter: IndoorSubtileTransitionCounter:
;JSL HeartPieceSetRedraw ; set redraw flag for items ;JSL HeartPieceSetRedraw ; set redraw flag for items
STZ.w SomariaSwitchFlag ; stuff we wrote over STZ.w SomariaSwitchFlag ; stuff we wrote over
STZ.w SpriteRoomTag STZ.w SpriteRoomTag
JMP StatTransitionCounter JMP StatTransitionCounter
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
StatsFinalPrep: StatsFinalPrep:
@@ -385,12 +385,12 @@ StatsFinalPrep:
LDA.l RupeesSpent : !ADD.l DisplayRupees : STA.l RupeesCollected LDA.l RupeesSpent : !ADD.l DisplayRupees : STA.l RupeesCollected
LDA.l RupeesSpent+1 : ADC.l DisplayRupees+1 : STA.l RupeesCollected+1 LDA.l RupeesSpent+1 : ADC.l DisplayRupees+1 : STA.l RupeesCollected+1
REP #$20 REP #$20
LDA.l TotalItemCounter : !SUB.l ChestsOpened : STA.l NonChestCounter LDA.l TotalItemCounter : !SUB.l ChestsOpened : STA.l NonChestCounter
.done .done
PLP : PLX : PLA PLP : PLX : PLA
LDA.b #$19 : STA.b GameMode ; thing we wrote over, load triforce room LDA.b #$19 : STA.b GameMode ; thing we wrote over, load triforce room
STZ.b GameSubMode STZ.b GameSubMode
STZ.b SubSubModule STZ.b SubSubModule
RTL RTL
+18 -16
View File
@@ -504,7 +504,16 @@ CreditsLineBlank:
%blankline() %blankline()
%blankline() %blankline()
%smallcredits("SPRITE DEVELOPMENT", "yellow") %smallcredits("GWAAKIWI * DUNGEON MAPS", "yellow")
%blankline()
%bigcredits("KARAFRUIT")
%blankline()
%blankline()
%smallcredits("SPRITE DEVELOPMENT", "green")
%blankline() %blankline()
@@ -525,7 +534,7 @@ CreditsLineBlank:
%blankline() %blankline()
%blankline() %blankline()
%smallcredits("YOUR SPRITE BY", "green") %smallcredits("YOUR SPRITE BY", "yellow")
%blankline() %blankline()
@@ -535,7 +544,7 @@ CreditsLineBlank:
%blankline() %blankline()
%blankline() %blankline()
%smallcredits("MSU SUPPORT", "yellow") %smallcredits("MSU SUPPORT", "green")
%blankline() %blankline()
@@ -544,7 +553,7 @@ CreditsLineBlank:
%blankline() %blankline()
%blankline() %blankline()
%smallcredits("PALETTE SHUFFLER", "green") %smallcredits("PALETTE SHUFFLER", "yellow")
%blankline() %blankline()
@@ -553,7 +562,7 @@ CreditsLineBlank:
%blankline() %blankline()
%blankline() %blankline()
%smallcredits("WEBSITE LOGO", "yellow") %smallcredits("WEBSITE LOGO", "green")
%blankline() %blankline()
@@ -623,12 +632,6 @@ endif
%bigcredits("HTTPS://ALTTPR.COM/DISCORD") %bigcredits("HTTPS://ALTTPR.COM/DISCORD")
%emptyline()
%emptyline()
%emptyline()
%emptyline()
%emptyline()
%emptyline()
%emptyline() %emptyline()
%emptyline() %emptyline()
@@ -752,14 +755,13 @@ endif
%blankline() %blankline()
%bigcreditsleft("TOTAL MAP TIME")
%blankline()
%bigcreditsleft("TOTAL LAG TIME") %bigcreditsleft("TOTAL LAG TIME")
%blankline() %blankline()
%blankline()
%blankline()
%blankline()
%blankline() %blankline()
+3 -1
View File
@@ -265,4 +265,6 @@ dw $3D99 ; - ; $FB
dw $0000 ; ; dw $0000 ; ;
dw $0000 ; ; dw $0000 ; ;
dw $0000 ; ; dw $0000 ; ;
dw $0000 ; ;
; yellow dot
dw $2DFA ; ; FF
+49 -49
View File
@@ -25,8 +25,8 @@ PreparePointer:
LDY.w #$0000 LDY.w #$0000
RTL RTL
; Regular stat: XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA ; Regular stat: XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA
; Time stat: XXXX X01L LLLL LLLL ---- ---- ---- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA ; Time stat: XXXX X01L LLLL LLLL ---- ---- ---- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA
; End of data: 1111 1111 1111 1111 ; End of data: 1111 1111 1111 1111
; X X offset (measured in 8x8 tiles) ; X X offset (measured in 8x8 tiles)
@@ -174,7 +174,7 @@ FindLine:
!FRAMES_PER_SECOND = 60 !FRAMES_PER_SECOND = 60
!FRAMES_PER_MINUTE = 60*60 !FRAMES_PER_MINUTE = 60*60
!FRAMES_PER_HOUR = 60*60*60 !FRAMES_PER_HOUR = 60*60*60
!MAX_FRAME_COUNT = 59*60+59*60+59*60+99 !MAX_FRAME_COUNT = (99*60)+(59*60)+(59*60)+59
macro CountUnits(framesPerUnit, unitCounter) macro CountUnits(framesPerUnit, unitCounter)
STZ.b <unitCounter> STZ.b <unitCounter>
@@ -196,7 +196,7 @@ endmacro
!ColonOffset = $8A !ColonOffset = $8A
!PeriodOffset = $4D !PeriodOffset = $4D
BlankCreditsTile = $883D BlankCreditsTile = $3D88
RenderCreditsStatCounter: RenderCreditsStatCounter:
PHB PHB
@@ -498,45 +498,45 @@ RenderLineNumber:
RTS RTS
LoadCreditsTiles: LoadCreditsTiles:
JSL CopyFontToVRAM ; What we wrote over JSL CopyFontToVRAM ; What we wrote over
REP #$10 REP #$10
LDA.b #$80 : STA.w VMAIN LDA.b #$80 : STA.w VMAIN
LDA.b #$01 : STA.w DMAP0 LDA.b #$01 : STA.w DMAP0
LDA.b #$18 : STA.w BBAD0 LDA.b #$18 : STA.w BBAD0
; Item tiles ; Item tiles
LDX.w #$8200 : STX.w VMADDL LDX.w #$8200 : STX.w VMADDL
LDA.b #FileSelectNewGraphics>>16 : STA.w A1B0 LDA.b #FileSelectNewGraphics>>16 : STA.w A1B0
LDX.w #FileSelectNewGraphics : STX.w A1T0L LDX.w #FileSelectNewGraphics : STX.w A1T0L
LDX.w #$0C00 : STX.w DAS0L LDX.w #$0C00 : STX.w DAS0L
LDA.b #$01 : STA.w DMAENABLE LDA.b #$01 : STA.w DMAENABLE
; Small characters A-Z ; Small characters A-Z
LDX.w #$7F00 : STX.w VMADDL LDX.w #$7F00 : STX.w VMADDL
LDA.b #SmallCharacters>>16 : STA.w A1B0 LDA.b #SmallCharacters>>16 : STA.w A1B0
LDX.w #SmallCharacters : STX.w A1T0L LDX.w #SmallCharacters : STX.w A1T0L
LDX.w #$0200 : STX.w DAS0L LDX.w #$0200 : STX.w DAS0L
LDA.b #$01 : STA.w DMAENABLE LDA.b #$01 : STA.w DMAENABLE
SEP #$10 SEP #$10
RTL RTL
LoadOverworldCreditsTiles: LoadOverworldCreditsTiles:
JSL CopyFontToVRAM ; What we wrote over JSL CopyFontToVRAM ; What we wrote over
REP #$10 REP #$10
; Small characters A-Z ; Small characters A-Z
LDA.b #$80 : STA.w VMAIN LDA.b #$80 : STA.w VMAIN
LDA.b #$01 : STA.w DMAP0 LDA.b #$01 : STA.w DMAP0
LDA.b #$18 : STA.w BBAD0 LDA.b #$18 : STA.w BBAD0
LDA.b #SmallCharacters>>16 : STA.w A1B0 LDA.b #SmallCharacters>>16 : STA.w A1B0
LDX.w #SmallCharacters : STX.w A1T0L LDX.w #SmallCharacters : STX.w A1T0L
LDX.w #$0200 : STX.w DAS0L LDX.w #$0200 : STX.w DAS0L
LDX.w #$7F00 : STX.w VMADDL LDX.w #$7F00 : STX.w VMADDL
LDA.b #$01 : STA.w DMAENABLE LDA.b #$01 : STA.w DMAENABLE
SEP #$10 SEP #$10
RTL RTL
CheckFontTable: CheckFontTable:
@@ -577,23 +577,23 @@ RTS
; Dialog Pointer Override ; Dialog Pointer Override
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
EndingSequenceTableOverride: EndingSequenceTableOverride:
PHY PHY
PHX PHX
TYX TYX
LDA.l EndingSequenceText, X LDA.l EndingSequenceText, X
PLX PLX
STA.w $1008, X STA.w $1008, X
PLY PLY
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
EndingSequenceTableLookupOverride: EndingSequenceTableLookupOverride:
PHX : PHB PHX : PHB
PHK : PLB PHK : PLB
TYX TYX
LDA.l EndingSequenceText, X : AND.w #$00FF LDA.l EndingSequenceText, X : AND.w #$00FF
ASL ASL A
TAY TAY
LDA.w FontTable,Y LDA.w FontTable,Y
PLB : PLX PLB : PLX
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
+5 -3
View File
@@ -30,8 +30,10 @@
!FAERIE_REVIVALS_Y = 361 !FAERIE_REVIVALS_Y = 361
!TOTAL_MENU_TIME_X = 19 !TOTAL_MENU_TIME_X = 19
!TOTAL_MENU_TIME_Y = 364 !TOTAL_MENU_TIME_Y = 364
!TOTAL_MAP_TIME_X = 19
!TOTAL_MAP_TIME_Y = 367
!TOTAL_LAG_TIME_X = 19 !TOTAL_LAG_TIME_X = 19
!TOTAL_LAG_TIME_Y = 367 !TOTAL_LAG_TIME_Y = 370
!COLLECTION_RATE_X = 22 !COLLECTION_RATE_X = 22
!COLLECTION_RATE_Y = 380 !COLLECTION_RATE_Y = 380
!TOTAL_TIME_X = 19 !TOTAL_TIME_X = 19
@@ -62,10 +64,10 @@ CreditsStats:
%AddStat(SaveQuitCounter, 0, 0, 08, 2, !SAVE_AND_QUITS_X, !SAVE_AND_QUITS_Y) %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(DeathCounter, 0, 0, 08, 2, !DEATHS_X, !DEATHS_Y)
%AddStat(FaerieRevivalCounter, 0, 0, 08, 3, !FAERIE_REVIVALS_X, !FAERIE_REVIVALS_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) %AddStat(LagTime, 1, 0, 32, 4, !TOTAL_LAG_TIME_X, !TOTAL_LAG_TIME_Y)
print "Collection Rate config: ", pc print "Collection Rate config: ", pc
warnpc $A39864
%AddStat(TotalItemCounter, 0, 0, 16, 3, !COLLECTION_RATE_X, !COLLECTION_RATE_Y) %AddStat(TotalItemCounter, 0, 0, 16, 3, !COLLECTION_RATE_X, !COLLECTION_RATE_Y)
%AddStat(NMIFrames, 1, 0, 32, 4, !TOTAL_TIME_X, !TOTAL_TIME_Y) %AddStat(NMIFrames, 1, 0, 32, 4, !TOTAL_TIME_X, !TOTAL_TIME_Y)
+7 -11
View File
@@ -237,12 +237,8 @@ db $00
;a - Infinite Arrows ;a - Infinite Arrows
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $B0804E ; PC 0x18004E org $B0804E ; PC 0x18004E
UncleRefill: UncleRefill_deprecated: ; no longer used
db $00 db $00
;---- -mba
;m - Refill Magic
;b - Refill Bombs
;a - Refill Arrows
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $B0804F ; PC 0x18004F org $B0804F ; PC 0x18004F
ByrnaInvulnerability: ByrnaInvulnerability:
@@ -890,8 +886,8 @@ SilverArrowsAutoEquip:
db $01 ; #$00 = Off - #$01 = Collection Time (Default) - #$02 = Entering Ganon - #$03 = Collection Time & Entering Ganon db $01 ; #$00 = Off - #$01 = Collection Time (Default) - #$02 = Entering Ganon - #$03 = Collection Time & Entering Ganon
;================================================================================ ;================================================================================
org $B08183 ; PC 0x180183 org $B08183 ; PC 0x180183
FreeUncleItemAmount: RainDeathRefillRupeeBow:
dw $12C ; 300 rupees (Default) dw $012C ; 300 rupees (Default)
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $B08185 ; PC 0x180185 org $B08185 ; PC 0x180185
RainDeathRefillTable: RainDeathRefillTable:
@@ -1532,7 +1528,7 @@ db $19,$1A,$1B,$1C,$1D,$1E,$1F,$20
db $21,$22,$11,$11,$10,$16,$16,$16 db $21,$22,$11,$11,$10,$16,$16,$16
db $16,$16,$11,$16,$16,$16,$15,$15 db $16,$16,$11,$16,$16,$16,$15,$15
db $15,$15,$15,$15,$15,$15,$15,$15 db $15,$15,$15,$15,$15,$15,$15,$15
db $15,$15,$16,$02,$09,$00,$00,$00 db $15,$15,$2E,$02,$09,$00,$00,$00
MusicShuffleTable: MusicShuffleTable:
db $01,$02,$03,$04,$05,$06,$07,$08 db $01,$02,$03,$04,$05,$06,$07,$08
@@ -2686,9 +2682,9 @@ org $B0EFFF ; PC 0x186FFF
BallNChainDungeon: ; Dungeon ID where ball n chain guard is located. Write BallNChainDungeon: ; Dungeon ID where ball n chain guard is located. Write
db $02 ; $FF to count ball and chain item for collection stats. db $02 ; $FF to count ball and chain item for collection stats.
;-------------------------------------------------------------------------------- org $B0F000
; 0x187000 - 18700F (unused) ExtraChestKeys: ; PC 0x187000-0x18700F
;-------------------------------------------------------------------------------- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
org $B0F010 org $B0F010
ChestKeys: ; PC 0x187010-0x18701F ChestKeys: ; PC 0x187010-0x18701F
+5
View File
@@ -99,6 +99,7 @@ HandleFollowersAfterMirroring = $87AA8B
LinkHop_FindArbitraryLandingSpot = $87E359 LinkHop_FindArbitraryLandingSpot = $87E359
Link_HandleMovingAnimation_FullLongEntry = $87E68F Link_HandleMovingAnimation_FullLongEntry = $87E68F
Link_CheckForEdgeScreenTransition = $87F413 Link_CheckForEdgeScreenTransition = $87F413
Link_CheckForEdgeScreenTransition_prevent_transition = $87F42C
Sprite_CheckIfPlayerPreoccupied = $87F4AA Sprite_CheckIfPlayerPreoccupied = $87F4AA
FlashGanonTowerPalette_next_thunder = $87FA81 FlashGanonTowerPalette_next_thunder = $87FA81
FlashGanonTowerPalette_bright_white = $87FAAC FlashGanonTowerPalette_bright_white = $87FAAC
@@ -221,6 +222,8 @@ Ancilla29_MilestoneItemReceipt_skip_crystal_sfx = $88CAE5
Ancilla29_MilestoneItemReceipt_no_sparkle = $88CB2E Ancilla29_MilestoneItemReceipt_no_sparkle = $88CB2E
Ancilla_SetOAM_XY = $88F6F3 Ancilla_SetOAM_XY = $88F6F3
Ancilla_AddAncilla = $899CCE Ancilla_AddAncilla = $899CCE
WorldMap_CalculateOAMCoordinates_exit_successfully = $8AC51F
WorldMap_MultiplyAxB = $8AC57F
UpdateHUD = $8DDFA9 UpdateHUD = $8DDFA9
UpdateEquippedItem = $8DDFAF UpdateEquippedItem = $8DDFAF
DrawProgressIcons = $8DE9C8 DrawProgressIcons = $8DE9C8
@@ -289,12 +292,14 @@ EntranceData_song = $82D592
SpawnPointData_room_id = $82D8D2 SpawnPointData_room_id = $82D8D2
Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879 Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879
RoomHeaderPointers = $84F1E2 RoomHeaderPointers = $84F1E2
UncleItem = $85DF45
Sprite_ShowSolicitedMessage_Direction = $85E1A3 Sprite_ShowSolicitedMessage_Direction = $85E1A3
FluteMenuNumbers_bits = $8AB7A3 FluteMenuNumbers_bits = $8AB7A3
WorldMap_RedXChars = $8ABF70 WorldMap_RedXChars = $8ABF70
WorldMap_CalculateOAMCoordinates = $8AC3B1 WorldMap_CalculateOAMCoordinates = $8AC3B1
WorldMap_HandleSpriteBlink = $8AC52E WorldMap_HandleSpriteBlink = $8AC52E
WorldMapIcon_AdjustCoordinate = $8AC59B WorldMapIcon_AdjustCoordinate = $8AC59B
WorldMap_LightWorldTilemap = $8AC739
WorldMap_DarkWorldTilemap = $8AD739 WorldMap_DarkWorldTilemap = $8AD739
DungeonMapRoomMarkerYBase = $8AE803 DungeonMapRoomMarkerYBase = $8AE803
DungeonMapBossRooms = $8AE817 DungeonMapBossRooms = $8AE817
+9 -5
View File
@@ -1,10 +1,14 @@
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
EndRainState: EndRainState:
LDA.l InitProgressIndicator : BIT.b #$80 : BNE + ; check for instant post-aga LDA.l InitProgressIndicator : BIT.b #$80 : BEQ + ; check for instant post-aga
LDA.b #$02 : STA.l ProgressIndicator LDA.l InitLumberjackOW : STA.l OverworldEventDataWRAM+$02
RTL LDA.b #$03
BRA ++
+ +
LDA.b #$03 : STA.l ProgressIndicator LDA.b #$02
LDA.l InitLumberjackOW : STA.l OverworldEventDataWRAM+$02 ++
STA.l ProgressIndicator
JSL SetEscapeAssist
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------