Compare commits
68 Commits
beta
...
MappableDo
| Author | SHA1 | Date | |
|---|---|---|---|
| 506b0974ff | |||
| a3bc7dea0e | |||
| 94ccbb70dc | |||
| e2614b6f75 | |||
| 9e2b148a57 | |||
| f8cc7d2ef8 | |||
| d504e33d52 | |||
| 043a2d83b2 | |||
| 8f75b8ec71 | |||
| 32e7fe5454 | |||
| 2c601d2fc7 | |||
| 902e14b3f4 | |||
| a011bc9f4a | |||
| 633453f386 | |||
| 831e6cc27f | |||
| 8e45ef1bd2 | |||
| 9c5f0dd5f5 | |||
| 17939339bc | |||
| 91fab07e5c | |||
| cacc640a4f | |||
| c38b3b6d0a | |||
| fcf17a6dff | |||
| 06aa3cb10f | |||
| 970d1f5db0 | |||
| e56b8a55fe | |||
| 78eb8916fc | |||
| 60c852bfa9 | |||
| 36a8eaee89 | |||
| 527041b81b | |||
| 5e7c4a65b8 | |||
| 6f2b68886f | |||
| b1cc141154 | |||
| 4da41410db | |||
| 1776daa43d | |||
| 610607ece4 | |||
| 278e428658 | |||
| 63065e34b7 | |||
| ba9f0c7555 | |||
| aae220fb46 | |||
| a7c7fc4394 | |||
| b2b23b047f | |||
| 3964c34658 | |||
| 8cf0059f84 | |||
| 0a98db7025 | |||
| bdb1272cb2 | |||
| d5917afb64 | |||
| e5523473d6 | |||
| 72e126a1b6 | |||
| 56dd5fbc01 | |||
| 7764682f95 | |||
| b3f35f274b | |||
| 5574eea4c7 | |||
| d918e571ab | |||
| 23edb9a3e6 | |||
| 21c6d0acfd | |||
| f75db2cac8 | |||
| fd8852d866 | |||
| 7fc7c8fe0b | |||
| 7a12032067 | |||
| 3489af82fa | |||
| fecf9547a5 | |||
| 688300d21a | |||
| 9b4d79247f | |||
| 1b43799e6e | |||
| 58db28f8bf | |||
| 443080c482 | |||
| 10ced3c9c6 | |||
| 9a40f28a86 |
@@ -74,8 +74,6 @@ function hexto555(h) = ((((h&$FF)/8)<<10)|(((h>>8&$FF)/8)<<5)|(((h>>16&$FF)/8)<<
|
||||
!FLAG_OW_MIXED = $04
|
||||
!FLAG_OW_CROSSED = $02
|
||||
!FLAG_OW_BONKDROP = $02
|
||||
!FLAG_OW_CUSTOM_MAP = $02
|
||||
!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION = $04
|
||||
|
||||
incsrc hooks.asm
|
||||
incsrc spriteswap.asm
|
||||
@@ -205,23 +203,19 @@ incsrc menu/hudalpha.asm
|
||||
warnpc $A38000
|
||||
|
||||
org $B98000
|
||||
incsrc gk/crystalswitchbook.asm
|
||||
incsrc gk/mimicdash.asm
|
||||
incsrc gk/gloom.asm
|
||||
incsrc gk/special_weapons.asm
|
||||
incsrc gk/variable_ganon_vulnerability.asm
|
||||
incsrc gk/pseudoflute.asm
|
||||
incsrc gk/fast_junk.asm
|
||||
incsrc gk/dungeon_maps.asm
|
||||
incsrc gk/dungeon_indicator.asm
|
||||
incsrc crystalswitchbook.asm
|
||||
incsrc mimicdash.asm
|
||||
incsrc gloom.asm
|
||||
incsrc special_weapons.asm
|
||||
incsrc variable_ganon_vulnerability.asm
|
||||
incsrc pseudoflute.asm
|
||||
incsrc dungeon_map/main.asm
|
||||
print "End of B9: ", pc
|
||||
|
||||
warnpc $B9EE00
|
||||
org $B9EE00
|
||||
incsrc gk_meta.asm
|
||||
warnpc $B9E000 ; $E000 - EFFF reserved for custom door rando map data
|
||||
|
||||
org $B9F000
|
||||
incsrc gk/settings.asm
|
||||
incsrc dungeon_map/settings.asm
|
||||
|
||||
org $A38000
|
||||
incsrc stats/credits.asm ; Statically mapped
|
||||
@@ -335,8 +329,6 @@ DungeonMapDoorConnectors:
|
||||
incbin "menu/door_connectors.3bppc"
|
||||
MapSheetD4:
|
||||
incbin "menu/map_sheet_d4.3bppc"
|
||||
DRSheet14:
|
||||
incbin "menu/dr_sheet_14.3bppc"
|
||||
|
||||
org $8CD7DF
|
||||
incsrc data/playernamecharmap.asm
|
||||
|
||||
26
boots.asm
26
boots.asm
@@ -28,19 +28,16 @@ AddBonkTremors:
|
||||
JSL AddDashTremor : JSL Player_ApplyRumbleToSprites ; things we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
ValidDashCheck:
|
||||
PHP
|
||||
SEP #$20
|
||||
BonkBreakableWall:
|
||||
PHX : PHP
|
||||
SEP #$30 ; set 8-bit accumulator and index registers
|
||||
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA.l BootsEquipment : BEQ .exit
|
||||
+ LDA.w LinkDashing
|
||||
.exit
|
||||
BEQ +
|
||||
PLP : REP #$02
|
||||
RTL
|
||||
+
|
||||
PLP : SEP #$02
|
||||
RTL
|
||||
LDA.l BootsEquipment : BNE + ; Check for Boots
|
||||
PLP : PLX : LDA.w #$0000 : RTL
|
||||
+
|
||||
PLP : PLX
|
||||
LDA.w LinkDashing : AND.w #$00FF ; things we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
BonkRockPile:
|
||||
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
||||
@@ -51,7 +48,10 @@ BonkRockPile:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
GravestoneHook:
|
||||
JSL ValidDashCheck : BEQ .done ; things we wrote over
|
||||
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA.l BootsEquipment : BEQ .done ; Check for Boots
|
||||
+
|
||||
LDA.w LinkDashing : BEQ .done ; things we wrote over
|
||||
JML moveGravestone
|
||||
.done
|
||||
JML GravestoneHook_continue
|
||||
|
||||
@@ -17,14 +17,15 @@ DoDungeonMapBossIcon:
|
||||
ASL
|
||||
TAX
|
||||
|
||||
; get sprite pointer table
|
||||
LDA.l $89C298 : STA.b Scrap00
|
||||
LDA.w #$0089 : STA.b Scrap02
|
||||
TXY
|
||||
; get sprite pointer for room
|
||||
LDA.b [Scrap00], Y
|
||||
LDA.l UWSpritesPointers,X
|
||||
STA.b Scrap00 ; pointer in $00
|
||||
LDA.w #bank(UWSpritesData) : STA.b Scrap02
|
||||
if !FEATURE_FIX_BASEROM
|
||||
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"
|
||||
|
||||
; get first byte to make sure it isn't an empty room
|
||||
|
||||
85
bugfixes.asm
85
bugfixes.asm
@@ -238,18 +238,6 @@ FixJingleGlitch:
|
||||
.exit
|
||||
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
|
||||
pushpc
|
||||
org $09F4AC ; <- module_death.asm:331
|
||||
@@ -290,3 +278,76 @@ ParadoxCaveGfxFix:
|
||||
LDX.w #$00C0 : STX.w DAS0L
|
||||
BRA .uploadLine
|
||||
;--------------------------------------------------------------------------------
|
||||
SetItemRiseTimer:
|
||||
LDA.w ItemReceiptMethod : CMP.b #$01 : BNE .not_from_chest
|
||||
LDA.b #$38 : STA.w AncillaTimer, X
|
||||
RTL
|
||||
|
||||
.not_from_chest
|
||||
JSL.l ItemIsJunk
|
||||
BEQ .default
|
||||
|
||||
.junk
|
||||
LDA.l JunkItemTimer : AND.b #$3F : STA.w AncillaTimer, X
|
||||
RTL
|
||||
|
||||
.default
|
||||
TYA : STA.w AncillaTimer, X ; What we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
ItemIsJunk:
|
||||
PHX
|
||||
LDA.l JunkItemTimer : BIT.b #$3F : BEQ .not_junk
|
||||
BIT.b #$80 : BNE .check
|
||||
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .check
|
||||
LDA.l !MULTIWORLD_RECEIVING_ITEM : BNE .check
|
||||
BRA .not_junk
|
||||
|
||||
.check
|
||||
LDA.l JunkItemTimer : AND.b #$40
|
||||
BEQ +
|
||||
LDA.b #JunkItems_triforce_end-JunkItems_end
|
||||
+
|
||||
CLC : ADC.b #JunkItems_end-JunkItems-1
|
||||
LDA.w AncillaGet, X
|
||||
TAX
|
||||
-
|
||||
CMP.l JunkItems, X : BEQ .junk
|
||||
DEX : BPL -
|
||||
.not_junk
|
||||
PLX
|
||||
LDA.b #$00
|
||||
RTL
|
||||
.junk
|
||||
PLX
|
||||
LDA.b #$01
|
||||
RTL
|
||||
RTL
|
||||
|
||||
JunkItems:
|
||||
db $27 ; Bomb
|
||||
db $28 ; 3 bombs
|
||||
db $31 ; 10 bombs
|
||||
db $34 ; 1 rupee
|
||||
db $35 ; 5 rupees
|
||||
db $36 ; 20 rupees
|
||||
db $40 ; 100 rupees
|
||||
db $41 ; 50 rupees
|
||||
db $42 ; Heart
|
||||
db $43 ; Arrow
|
||||
db $44 ; 10 arrows
|
||||
db $45 ; Small magic
|
||||
db $46 ; 300 rupees
|
||||
db $47 ; 20 rupees green
|
||||
db $59 ; Rupoor
|
||||
db $D1 ; Apples
|
||||
db $D2 ; Fairy
|
||||
db $D3 ; Chicken
|
||||
db $D4 ; Big Magic
|
||||
db $D5 ; 5 Arrows
|
||||
db $D6 ; Good Bee
|
||||
.end
|
||||
db $6B ; Power Star
|
||||
db $6C ; Triforce Piece
|
||||
.triforce_end
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -49,14 +49,14 @@ InvertDPad_DPadLROnly:
|
||||
LDA.w JOY1L : STA.b Scrap00
|
||||
LDA.w JOY1H
|
||||
BIT.b #$03 : BEQ + : EOR.b #$03 : + ; swap left/right
|
||||
STA.b Scrap01
|
||||
STA.b Scrap00
|
||||
JML InvertDPadReturn
|
||||
|
||||
InvertDPad_DPadUDOnly:
|
||||
LDA.w JOY1L : STA.b Scrap00
|
||||
LDA.w JOY1H
|
||||
BIT.b #$0C : BEQ + : EOR.b #$0C : + ; swap up/down
|
||||
STA.b Scrap01
|
||||
STA.b Scrap00
|
||||
JML InvertDPadReturn
|
||||
|
||||
InvertDPad:
|
||||
|
||||
@@ -146,57 +146,32 @@ macro SetMinimum(base,filler,compare)
|
||||
endmacro
|
||||
RefreshRainAmmo:
|
||||
LDA.l ProgressIndicator : CMP.b #$01 : BEQ .rain ; check if we're in rain state
|
||||
RTL
|
||||
.rain
|
||||
LDA.l StartingEntrance
|
||||
+ CMP.b #$03 : BNE + ; Uncle
|
||||
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Uncle)
|
||||
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Uncle)
|
||||
LDA.l ArrowMode : BEQ ++
|
||||
LDA.l BowEquipment : BEQ +++
|
||||
++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Uncle)
|
||||
+++ BRA .done
|
||||
+ CMP.b #$02 : BNE + ; Cell
|
||||
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Cell)
|
||||
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Cell)
|
||||
LDA.l ArrowMode : BEQ ++
|
||||
LDA.l BowEquipment : BEQ .done
|
||||
++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Cell)
|
||||
BRA .done
|
||||
+ CMP.b #$04 : BNE + ; Mantle
|
||||
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Mantle)
|
||||
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Mantle)
|
||||
LDA.l ArrowMode : BEQ ++
|
||||
LDA.l BowEquipment : BEQ .done
|
||||
++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Mantle)
|
||||
+
|
||||
.done
|
||||
RTL
|
||||
.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:
|
||||
LDA.l ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state
|
||||
|
||||
118
dialog.asm
118
dialog.asm
@@ -61,84 +61,73 @@ LoadDialogAddressIndirect:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
FreeDungeonItemNotice:
|
||||
STA.l ScratchBufferV
|
||||
STA.l ScratchBufferV
|
||||
|
||||
PHA : PHX : PHY
|
||||
PHP
|
||||
PHB : PHK : PLB
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
REP #$10 ; set 16-bit index registers
|
||||
PEI.b (Scrap00)
|
||||
LDA.b Scrap02 : PHA
|
||||
LDA.l ScratchBufferNV : PHA
|
||||
LDA.l ScratchBufferNV+1 : PHA
|
||||
PHA : PHX : PHY
|
||||
PHP
|
||||
PHB : PHK : PLB
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
REP #$10 ; set 16-bit index registers
|
||||
PEI.b (Scrap00)
|
||||
LDA.b Scrap02 : PHA
|
||||
LDA.l ScratchBufferNV : PHA
|
||||
LDA.l ScratchBufferNV+1 : PHA
|
||||
;--------------------------------
|
||||
|
||||
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 : +
|
||||
LDA.l FreeItemText : BNE + : JMP .skip : +
|
||||
|
||||
STA.b Scrap00
|
||||
LDA.b #$00 : STA.l ScratchBufferNV ; initialize scratch
|
||||
|
||||
LDA.b Scrap00 : AND.b #$01 : BEQ + ; show message for general small key
|
||||
LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for general small key
|
||||
LDA.l ScratchBufferV : CMP.b #$24 : BNE + ; general small key
|
||||
%CopyDialog(Notice_SmallKeyOf)
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
|
||||
+ LDA.b Scrap00 : AND.b #$02 : BEQ + ; show message for general compass
|
||||
+ : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for general compass
|
||||
LDA.l ScratchBufferV : CMP.b #$25 : BNE + ; general compass
|
||||
%CopyDialog(Notice_CompassOf)
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
|
||||
+ LDA.b Scrap00 : AND.b #$04 : BEQ + ; show message for general map
|
||||
+ : LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for general map
|
||||
LDA.l ScratchBufferV : CMP.b #$33 : BNE + ; general map
|
||||
%CopyDialog(Notice_MapOf)
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
|
||||
+ LDA.b Scrap00 : AND.b #$08 : BEQ + ; show message for general big key
|
||||
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for general big key
|
||||
LDA.l ScratchBufferV : CMP.b #$32 : BNE + ; general big key
|
||||
%CopyDialog(Notice_BigKeyOf)
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
|
||||
+ LDA.b Scrap00 : AND.b #$04 : BEQ + ; show message for dungeon map
|
||||
+
|
||||
LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for dungeon map
|
||||
LDA.l ScratchBufferV : AND.b #$F0 ; looking at high bits only
|
||||
CMP.b #$70 : BNE + ; map of...
|
||||
%CopyDialog(Notice_MapOf)
|
||||
JMP .dungeon
|
||||
|
||||
+ LDA.b Scrap00 : AND.b #$02 : BEQ + ; show message for dungeon compass
|
||||
+ : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for dungeon compass
|
||||
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of...
|
||||
%CopyDialog(Notice_CompassOf)
|
||||
JMP .dungeon
|
||||
|
||||
+ LDA.b Scrap00 : AND.b #$08 : BEQ + ; show message for dungeon big key
|
||||
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key
|
||||
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of...
|
||||
%CopyDialog(Notice_BigKeyOf)
|
||||
JMP .dungeon
|
||||
|
||||
+ LDA.b Scrap00 : AND.b #$01 : BEQ + ; show message for dungeon small key
|
||||
+ : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key
|
||||
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
|
||||
LDA.l ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++
|
||||
%CopyDialog(Notice_SmallKeyOf)
|
||||
LDA.b #$01 : STA.l ScratchBufferNV ; set up a flip for small keys
|
||||
BRA .dungeon
|
||||
|
||||
+ LDA.b Scrap00 : AND.b #$20 : BEQ + ; show message for crystal
|
||||
+ : LDA.l FreeItemText : AND.b #$20 : BEQ + ; show message for crystal
|
||||
LDA.l ScratchBufferV : CMP.b #$B0 : !BLT + ; crystal #
|
||||
CMP.b #$B7 : !BGE +
|
||||
CMP.b #$B7 : !BGE +
|
||||
%CopyDialog(Notice_Crystal)
|
||||
JMP .crystal
|
||||
|
||||
+ JMP .skip ; it's not something we are going to give a notice for
|
||||
+
|
||||
JMP .skip ; it's not something we are going to give a notice for
|
||||
|
||||
.dungeon
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
@@ -150,26 +139,23 @@ FreeDungeonItemNotice:
|
||||
LDA.b #$0F : !SUB.l ScratchBufferNV+1 : STA.l ScratchBufferNV+1 ; flip the values for small keys
|
||||
+
|
||||
LDA.l ScratchBufferNV+1
|
||||
ASL : TAX
|
||||
REP #$20
|
||||
|
||||
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : AND.w #$00FF : BNE +
|
||||
|
||||
LDA.l DungeonItemIDMap, X : CMP.w #$0003 : BCC .hc_sewers
|
||||
CMP.w DungeonID : BNE +
|
||||
BRA .self_notice
|
||||
.hc_sewers
|
||||
LDA.w DungeonID : CMP.w #$0003 : BCS +
|
||||
.self_notice
|
||||
SEP #$20
|
||||
LDA.l FreeItemText : AND.b #$40 : BEQ ++
|
||||
LDA.b #$00 : STA.l DialogOffsetPointer : STA.l DialogOffsetPointer+1
|
||||
JMP .skip
|
||||
++
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
+
|
||||
SEP #$20
|
||||
ASL : TAX
|
||||
REP #$20
|
||||
LDA.l DungeonItemIDMap,X : CMP.w #$0003 : BCC .hc_sewers
|
||||
CMP.w DungeonID : BNE +
|
||||
BRA .self_notice
|
||||
.hc_sewers
|
||||
LDA.w DungeonID : CMP.w #$0003 : BCS +
|
||||
.self_notice
|
||||
SEP #$20
|
||||
LDA.l FreeItemText : AND.b #$40 : BEQ ++
|
||||
LDA.b #$00 : STA.l DialogOffsetPointer : STA.l DialogOffsetPointer+1
|
||||
JMP .skip
|
||||
++
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
+
|
||||
SEP #$20
|
||||
LDA.l ScratchBufferNV+1
|
||||
CMP.b #$00 : BNE + ; ...light world
|
||||
%CopyDialog(Notice_LightWorld) : JMP .done
|
||||
@@ -204,9 +190,9 @@ FreeDungeonItemNotice:
|
||||
+ : CMP.b #$0F : BNE + ; ...sewers
|
||||
%CopyDialog(Notice_Sewers)
|
||||
+
|
||||
JMP .done
|
||||
JMP .done
|
||||
|
||||
.crystal
|
||||
.crystal
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
LDA.l ScratchBufferV
|
||||
AND.b #$0F ; looking at low bits only
|
||||
@@ -224,7 +210,7 @@ FreeDungeonItemNotice:
|
||||
%CopyDialog(Notice_Four) : JMP .done
|
||||
+ : CMP.b #$06 : BNE +
|
||||
%CopyDialog(Notice_Three) : JMP .done
|
||||
+
|
||||
+
|
||||
|
||||
.done
|
||||
|
||||
@@ -234,14 +220,14 @@ FreeDungeonItemNotice:
|
||||
|
||||
;--------------------------------
|
||||
.skip
|
||||
PLA : STA.l ScratchBufferNV+1
|
||||
PLA : STA.l ScratchBufferNV
|
||||
PLA : STA.b Scrap02
|
||||
REP #$20
|
||||
PLA : STA.b Scrap00
|
||||
PLB
|
||||
PLP
|
||||
PLY : PLX : PLA
|
||||
PLA : STA.l ScratchBufferNV+1
|
||||
PLA : STA.l ScratchBufferNV
|
||||
PLA : STA.b Scrap02
|
||||
REP #$20
|
||||
PLA : STA.b Scrap00
|
||||
PLB
|
||||
PLP
|
||||
PLY : PLX : PLA
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -599,7 +599,7 @@ skip $10
|
||||
BigKeyStatus: ;27f040 (status 2 indicate BnC guard)
|
||||
dw $0002, $0002, $0001, $0001, $0000, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0000, $0000
|
||||
DungeonReminderTable: ;27f060
|
||||
dw $2DA4, $2DA4, $2DA5, $2DA6, $2DA8, $2DAA, $2DA9, $2DAE, $2DAB, $2DAD, $2DA7, $2DAC, $2DAF, $2DB0, $0000, $0000
|
||||
dw $2D50, $2D50, $2D51, $2D52, $2D54, $2D56, $2D55, $2D5A, $2D57, $2D59, $2D53, $2D58, $2D5B, $2D5C, $0000, $0000
|
||||
TotalLocationsLow: ;27f080
|
||||
db $08, $08, $06, $06, $02, $00, $04, $08, $08, $08, $06, $08, $02, $07, $00, $00
|
||||
TotalLocationsHigh: ;27f090
|
||||
@@ -696,4 +696,4 @@ dw $ffff
|
||||
OldManDarkWorld:
|
||||
dw $ffff
|
||||
OldManRetrievalWorld:
|
||||
dw $0000
|
||||
dw $0000
|
||||
@@ -1,12 +1,10 @@
|
||||
!BlankTile = $207F
|
||||
!SlashTile = $2830
|
||||
!PlusTile = $2404
|
||||
!HyphenTile = $2405
|
||||
!LTile = $2D68
|
||||
!DTile = $2D60
|
||||
!RedSquare = $345E
|
||||
!BlueSquare = $2C5E
|
||||
!BossIcon = $253C
|
||||
!NPCIcon = $253B
|
||||
|
||||
DrHudOverride:
|
||||
PHB
|
||||
@@ -31,13 +29,6 @@ DRHUD_DrawIndicators:
|
||||
LDA.b FrameCounter : AND.b #$10 : BEQ DRHUD_EnemyDropIndicator
|
||||
|
||||
DRHUD_BossIndicator:
|
||||
LDA.w DungeonID : CMP.b #$FF : BNE .in_dungeon
|
||||
LDA.w NpcItemIndicator : BEQ .early_exit
|
||||
LDA.l ShowLootInHUD : BEQ .early_exit
|
||||
REP #$10
|
||||
LDY.w #!NPCIcon : STY.w HUDMultiIndicator
|
||||
JMP DRHUD_Finished
|
||||
.in_dungeon
|
||||
LDA.l DRMode : BNE .continue
|
||||
.early_exit
|
||||
REP #$10
|
||||
@@ -55,7 +46,7 @@ DRHUD_BossIndicator:
|
||||
SEP #$20
|
||||
BEQ .draw_indicator
|
||||
LDA.l CompassBossIndicator, x : CMP.b RoomIndex : BNE .draw_indicator
|
||||
LDY.w #!BossIcon
|
||||
LDY.w #!RedSquare
|
||||
.draw_indicator
|
||||
STY.w HUDMultiIndicator
|
||||
BRA DRHUD_DrawCurrentDungeonIndicator
|
||||
@@ -80,12 +71,13 @@ DRHUD_DrawCurrentDungeonIndicator: ; mX
|
||||
CMP.b #$06 : BEQ .draw_indicator
|
||||
|
||||
.get_indicator
|
||||
LDY.w #$2C28
|
||||
REP #$20 : LDA.l DungeonReminderTable,X : TAY
|
||||
SEP #$20
|
||||
.draw_indicator
|
||||
STY.w HUDCurrentDungeonWorld
|
||||
|
||||
DRHUD_DrawKeyCounter:
|
||||
LDA.l DRFlags : AND.b #$04 : BEQ .to_finished
|
||||
LDA.l DRFlags : AND.b #$04 : BEQ DRHUD_Finished
|
||||
LDA.l CompassMode : BIT.b #$03 : BEQ DRHUD_Finished
|
||||
REP #$20
|
||||
BIT.w #$0002 : BNE .skip_map_check
|
||||
@@ -98,17 +90,8 @@ DRHUD_DrawKeyCounter:
|
||||
LDA.l GenericKeys : LSR : BCS .total_only
|
||||
LDA.w DungeonCollectedKeys, X : JSR ConvertToDisplay : STA.w HUDKeysObtained
|
||||
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
|
||||
SEP #$20
|
||||
LDA.l ChestKeys, X : SEC : SBC.l ExtraChestKeys, X
|
||||
REP #$20
|
||||
JSR ConvertToDisplay : STA.w HUDKeysTotal
|
||||
.to_finished
|
||||
LDA.l ChestKeys, x : JSR ConvertToDisplay : STA.w HUDKeysTotal
|
||||
JMP DRHUD_Finished
|
||||
|
||||
OWRHUD_DrawWorldIndicator:
|
||||
@@ -142,100 +125,101 @@ dw $0000, $0000, $0000, $0000, $000a, $000a, $000a, $0014, $000a, $0014, $0000,
|
||||
|
||||
DrHudDungeonItemsAdditions:
|
||||
{
|
||||
jsl DrawHUDDungeonItems
|
||||
lda.l DRMode : cmp.b #$02 : beq + : rtl : +
|
||||
jsl DrawHUDDungeonItems
|
||||
lda.l DRMode : cmp.b #$02 : beq + : rtl : +
|
||||
|
||||
phx : phy : php
|
||||
rep #$30
|
||||
phx : phy : php
|
||||
rep #$30
|
||||
|
||||
lda.w #$24f5 : sta.w $1606 : sta.w $1610 : sta.w $161a : sta.w $1624
|
||||
sta.w $1644 : sta.w $164a : sta.w $1652 : sta.w $1662 : sta.w $1684 : sta.w $16c4
|
||||
ldx.w #$0000
|
||||
- sta.w $1704, x : sta.w $170e, x : sta.w $1718, x
|
||||
inx #2 : cpx.w #$0008 : !BLT -
|
||||
lda.w #$24f5 : sta.w $1606 : sta.w $1610 : sta.w $161a : sta.w $1624
|
||||
sta.w $1644 : sta.w $164a : sta.w $1652 : sta.w $1662 : sta.w $1684 : sta.w $16c4
|
||||
ldx.w #$0000
|
||||
- sta.w $1704, x : sta.w $170e, x : sta.w $1718, x
|
||||
inx #2 : cpx.w #$0008 : !BLT -
|
||||
|
||||
lda.l HudFlag : and.w #$0020 : beq + : JMP ++ : +
|
||||
lda.l HUDDungeonItems : and.w #$001F : bne + : JMP ++ : +
|
||||
; bk symbols
|
||||
lda.l HudFlag : and.w #$0020 : beq + : JMP ++ : +
|
||||
lda.l HUDDungeonItems : and.w #$0007 : bne + : JMP ++ : +
|
||||
; bk symbols
|
||||
lda.w #$2811 : sta.w $1606 : sta.w $1610 : sta.w $161a : sta.w $1624
|
||||
; sm symbols
|
||||
lda.w #$2810 : sta.w $160a : sta.w $1614 : sta.w $161e : sta.w $16e4
|
||||
; blank out stuff
|
||||
lda.w #$24f5 : sta.w $1724
|
||||
; blank out stuff
|
||||
lda.w #$24f5 : sta.w $1724
|
||||
|
||||
ldx.w #$0002
|
||||
- lda.w #$0000 : !ADD.l RowOffsets,x : !ADD.l ColumnOffsets, x : tay
|
||||
JSR BossStatus : STA.w $1644, Y
|
||||
INY #2
|
||||
lda.w #$24f5 : sta.w $1644, y
|
||||
lda.l MapField : and.l DungeonMask, x : beq + ; must have map
|
||||
jsr BkStatus : sta.w $1644, y : bra .smallKey ; big key status
|
||||
+ lda.l BigKeyField : and.l DungeonMask, x : beq .smallKey
|
||||
lda.w #$2826 : sta.w $1644, y
|
||||
.smallKey
|
||||
+ iny #2
|
||||
ldx.w #$0002
|
||||
- lda.w #$0000 : !ADD.l RowOffsets,x : !ADD.l ColumnOffsets, x : tay
|
||||
lda.l DungeonReminderTable, x : sta.w $1644, y : iny #2
|
||||
lda.w #$24f5 : sta.w $1644, y
|
||||
lda.l MapField : and.l DungeonMask, x : beq + ; must have map
|
||||
jsr BkStatus : sta.w $1644, y : bra .smallKey ; big key status
|
||||
+ lda.l BigKeyField : and.l DungeonMask, x : beq .smallKey
|
||||
lda.w #$2826 : sta.w $1644, y
|
||||
.smallKey
|
||||
+ iny #2
|
||||
cpx.w #$001a : bne +
|
||||
tya : !ADD.w #$003c : tay
|
||||
+ stx.b Scrap00
|
||||
txa : lsr : tax
|
||||
lda.w #$24f5 : sta.w $1644, y
|
||||
lda.l GenericKeys : and.w #$00FF : bne +
|
||||
lda.l DungeonKeys, x : and.w #$00FF : beq +
|
||||
jsr ConvertToDisplay2 : sta.w $1644, y
|
||||
+ iny #2 : lda.w #$24f5 : sta.w $1644, y
|
||||
phx : ldx.b Scrap00
|
||||
LDA.l MapField : ORA.l MapCountDisplay : AND.l DungeonMask, x : BEQ .key_info_done ; must have map
|
||||
+ stx.b Scrap00
|
||||
txa : lsr : tax
|
||||
lda.w #$24f5 : sta.w $1644, y
|
||||
lda.l GenericKeys : and.w #$00FF : bne +
|
||||
lda.l DungeonKeys, x : and.w #$00FF : beq +
|
||||
jsr ConvertToDisplay2 : sta.w $1644, y
|
||||
+ iny #2 : lda.w #$24f5 : sta.w $1644, y
|
||||
phx : ldx.b Scrap00
|
||||
LDA.l CompassMode : BIT.w #$0002 : BNE .skip_map_check
|
||||
LDA.l MapField : AND.l DungeonMask, x : BEQ .key_info_done ; must have map
|
||||
.skip_map_check
|
||||
plx : sep #$30 : lda.l ChestKeys, x : sta.b Scrap02
|
||||
lda.l GenericKeys : bne +++
|
||||
lda.b Scrap02 : !SUB.l DungeonCollectedKeys, x : sta.b Scrap02
|
||||
+++ lda.b Scrap02
|
||||
rep #$30
|
||||
jsr ConvertToDisplay2 : sta.w $1644, y ; small key totals
|
||||
bra .skipStack
|
||||
lda.l GenericKeys : bne +++
|
||||
lda.b Scrap02 : !SUB.l DungeonCollectedKeys, x : sta.b Scrap02
|
||||
+++ lda.b Scrap02
|
||||
rep #$30
|
||||
jsr ConvertToDisplay2 : sta.w $1644, y ; small key totals
|
||||
bra .skipStack
|
||||
.key_info_done
|
||||
plx
|
||||
.skipStack iny #2
|
||||
cpx.w #$000d : beq +
|
||||
lda.w #$24f5 : sta.w $1644, y
|
||||
+
|
||||
ldx.b Scrap00
|
||||
+ inx #2 : cpx.w #$001b : bcs ++ : JMP -
|
||||
++
|
||||
lda.l HudFlag : and.w #$0020 : bne + : JMP ++ : +
|
||||
; map symbols
|
||||
lda.w #$2821 : sta.w $1606 : sta.w $1610 : sta.w $161a
|
||||
; compass symbols
|
||||
lda.w #$2c20 : sta.w $160a : sta.w $1614 : sta.w $161e : sta.w $16e4
|
||||
; blank out a couple thing from old hud
|
||||
lda.w #$24f5 : sta.w $1624 : sta.w $1724
|
||||
ldx.w #$0002
|
||||
- lda.w #$0000 ; start of hud area
|
||||
!ADD.l RowOffsets, x : !ADD.l ColumnOffsets, x : tay
|
||||
JSR BossStatus : STA.w $1644, Y
|
||||
INY #2
|
||||
lda.w #$24f5 : sta.w $1644, y ; blank out map spot
|
||||
lda.l MapField : ora.l MapCountDisplay : ora.l MapOverlay
|
||||
and.l DungeonMask, x : beq + ; must have map
|
||||
JSR MapIndicatorShort : STA.w $1644, Y
|
||||
plx
|
||||
.skipStack iny #2
|
||||
cpx.w #$000d : beq +
|
||||
lda.w #$24f5 : sta.w $1644, y
|
||||
+
|
||||
ldx.b Scrap00
|
||||
+ inx #2 : cpx.w #$001b : bcs ++ : JMP -
|
||||
++
|
||||
lda.l HudFlag : and.w #$0020 : bne + : JMP ++ : +
|
||||
; map symbols
|
||||
lda.w #$2821 : sta.w $1606 : sta.w $1610 : sta.w $161a
|
||||
; compass symbols
|
||||
lda.w #$2c20 : sta.w $160a : sta.w $1614 : sta.w $161e : sta.w $16e4
|
||||
; blank out a couple thing from old hud
|
||||
lda.w #$24f5 : sta.w $1624 : sta.w $1724
|
||||
ldx.w #$0002
|
||||
- lda.w #$0000 ; start of hud area
|
||||
!ADD.l RowOffsets, x : !ADD.l ColumnOffsets, x : tay
|
||||
lda.l DungeonReminderTable, x : sta.w $1644, y
|
||||
iny #2
|
||||
lda.w #$24f5 : sta.w $1644, y ; blank out map spot
|
||||
lda.l MapField : ora.l MapCountDisplay : ora.l MapOverlay
|
||||
and.l DungeonMask, x : beq + ; must have map
|
||||
JSR MapIndicatorShort : STA.w $1644, Y
|
||||
+ iny #2
|
||||
cpx.w #$001a : bne +
|
||||
cpx.w #$001a : bne +
|
||||
tya : !ADD.w #$003c : tay
|
||||
+ lda.l CompassField : ora.l CompassCountDisplay
|
||||
and.l DungeonMask, x : beq + ; must have compass
|
||||
phx ; total chest counts
|
||||
LDA.l CompassTotalsWRAM, x : !SUB.l DungeonLocationsChecked, x
|
||||
SEP #$30 : JSR HudHexToDec2DigitCopy : REP #$30
|
||||
lda.b Scrap06 : jsr ConvertToDisplay2 : sta.w $1644, y : iny #2
|
||||
lda.b Scrap07 : jsr ConvertToDisplay2 : sta.w $1644, y
|
||||
plx
|
||||
bra .skipBlanks
|
||||
phx ; total chest counts
|
||||
LDA.l CompassTotalsWRAM, x : !SUB.l DungeonLocationsChecked, x
|
||||
SEP #$30 : JSR HudHexToDec2DigitCopy : REP #$30
|
||||
lda.b Scrap06 : jsr ConvertToDisplay2 : sta.w $1644, y : iny #2
|
||||
lda.b Scrap07 : jsr ConvertToDisplay2 : sta.w $1644, y
|
||||
plx
|
||||
bra .skipBlanks
|
||||
+ lda.w #$24f5 : sta.w $1644, y : iny #2 : sta.w $1644, y
|
||||
.skipBlanks iny #2
|
||||
cpx.w #$001a : beq +
|
||||
.skipBlanks iny #2
|
||||
cpx.w #$001a : beq +
|
||||
lda.w #$24f5 : sta.w $1644, y ; blank out spot
|
||||
+ inx #2 : cpx.w #$001b : !BGE ++ : JMP -
|
||||
++
|
||||
plp : ply : plx : rtl
|
||||
+ inx #2 : cpx.w #$001b : !BGE ++ : JMP -
|
||||
++
|
||||
plp : ply : plx : rtl
|
||||
}
|
||||
|
||||
MapIndicatorLong:
|
||||
@@ -275,63 +259,17 @@ BkStatus:
|
||||
+ lda.w #$24f5 : rts ; black otherwise
|
||||
+++ lda.w #$2826 : rts ; check mark
|
||||
|
||||
BossStatus:
|
||||
LDA.l HUDDungeonItems : BIT.w #$0010 : BEQ .normal
|
||||
PHX
|
||||
LDA.l DungeonMapBossRooms, X
|
||||
CMP.w #$000F
|
||||
BEQ .no_boss
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l SaveDataWRAM, X
|
||||
PLX
|
||||
BIT.w #$0800
|
||||
BEQ .boss_alive
|
||||
ConvertToDisplay:
|
||||
and.w #$00ff : cmp.w #$000a : !BLT +
|
||||
!ADD.w #$2519 : rts
|
||||
+ !ADD.w #$2490 : rts
|
||||
|
||||
.boss_dead
|
||||
LDA.l HudFlag : BIT.w #$0020 : BNE .skull
|
||||
; palette 3 - white
|
||||
LDA.l DungeonReminderTable, X : AND.w #$E3FF : ORA.w #$0C00 : RTS
|
||||
|
||||
.skull
|
||||
LDA.w #$280F : RTS
|
||||
|
||||
.no_boss
|
||||
PLX
|
||||
; palette 0 - light gray
|
||||
LDA.l DungeonReminderTable, X : AND.w #$E3FF : RTS
|
||||
|
||||
.boss_alive
|
||||
; palette 4 - gray
|
||||
LDA.l DungeonReminderTable, X : AND.w #$E3FF : ORA.w #$1000 : RTS
|
||||
|
||||
.normal
|
||||
; default palette 3 - white
|
||||
LDA.l DungeonReminderTable, X : RTS
|
||||
|
||||
ConvertToDisplay: ; transparent background
|
||||
AND.w #$00FF
|
||||
CMP.w #$000A : BCC .under10
|
||||
CMP.w #$000C : BCC .under12
|
||||
.over11
|
||||
CLC : ADC.w #$2553 : RTS
|
||||
.under12
|
||||
CLC : ADC.w #$2519 : RTS
|
||||
.under10
|
||||
CLC : ADC.w #$2490 : RTS
|
||||
|
||||
ConvertToDisplay2: ; solid background
|
||||
AND.w #$00FF : BEQ .zero
|
||||
CMP.w #$000A : BCC .under10
|
||||
CMP.w #$000C : BCC .under12
|
||||
.over11
|
||||
CLC : ADC.w #$2580 : RTS
|
||||
.under12
|
||||
CLC : ADC.w #$2517 : RTS
|
||||
.under10
|
||||
CLC : ADC.w #$2816 : RTS
|
||||
.zero
|
||||
LDA.w #$2827 : RTS
|
||||
ConvertToDisplay2:
|
||||
and.w #$00ff : beq ++
|
||||
cmp.w #$000a : !BLT +
|
||||
!ADD.w #$2517 : rts ; 2580 with 258A as "A" for non transparent digits
|
||||
+ !ADD.w #$2816 : rts
|
||||
++ lda.w #$2827 : rts ; 0/O for 0 or placeholder digit ;2483
|
||||
|
||||
CountAbsorbedKeys:
|
||||
JML IncrementSmallKeysNoPrimary
|
||||
|
||||
@@ -21,18 +21,14 @@ SpiralWarp: {
|
||||
lda.w $045e : cmp.b #$5e : beq .gtg ; abort if not spiral - intended room is in A!
|
||||
cmp.b #$5f : beq .gtg
|
||||
cmp.b #$26 : beq .inroom
|
||||
.abort
|
||||
SEP #$30
|
||||
stz.w $045e
|
||||
lda.b PreviousRoom : and.b #$0f
|
||||
rtl ; clear,run hijacked code and get out
|
||||
|
||||
.inroom
|
||||
.abort
|
||||
SEP #$30 : stz.w $045e : lda.b PreviousRoom : and.b #$0f : rtl ; clear,run hijacked code and get out
|
||||
.inroom
|
||||
jsr InroomStairsWarp
|
||||
lda.b PreviousRoom : and.b #$0f ; this is the code we are hijacking
|
||||
rtl
|
||||
|
||||
.gtg
|
||||
.gtg
|
||||
phb : phk : plb : phx : phy ; push stuff
|
||||
jsr LookupSpiralOffset
|
||||
rep #$30 : and.w #$00FF : asl #2 : tax
|
||||
@@ -85,7 +81,6 @@ SpiralWarp: {
|
||||
ldy.b #$01 : jsr SetCamera
|
||||
|
||||
jsr StairCleanup
|
||||
|
||||
ply : plx : plb ; pull the stuff we pushed
|
||||
lda.b PreviousRoom : and.b #$0f ; this is the code we are hijacking
|
||||
rtl
|
||||
@@ -266,7 +261,6 @@ InroomStairsWarp: {
|
||||
.skipCamera
|
||||
|
||||
jsr StairCleanup
|
||||
|
||||
ply : plx : plb ; pull the stuff we pushed
|
||||
rts
|
||||
}
|
||||
@@ -341,4 +335,4 @@ SpiralPriorityHack: {
|
||||
lda.b #$01 : rtl ; always skip the priority code - until I figure out how to fix it
|
||||
+ lda.w $0462 : and.b #$04 ; what we wrote over
|
||||
rtl
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,8 @@ StartDoubleWrite:
|
||||
; what we wrote over
|
||||
LDA.l DRMode
|
||||
BEQ .draw
|
||||
LDA.l DungeonMapMode
|
||||
BNE .draw
|
||||
|
||||
INC.w $020D ; next subsubmode
|
||||
PLA : PLA : PLA ; pull our jump to here off the stack
|
||||
@@ -17,7 +17,7 @@ CheckLoot:
|
||||
STA.b $0E
|
||||
|
||||
LDA.b $CA
|
||||
AND.w #$01FF
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
@@ -31,10 +31,6 @@ CheckLoot:
|
||||
STA.b $0E
|
||||
|
||||
+ LDA.w DungeonID
|
||||
AND.w #$00FF
|
||||
CMP.w #$00FF
|
||||
BEQ .skip_dungeon_checks
|
||||
|
||||
TAX
|
||||
|
||||
LDA.l MapField
|
||||
@@ -56,8 +52,6 @@ CheckLoot:
|
||||
STA.b $0E
|
||||
+
|
||||
|
||||
.skip_dungeon_checks
|
||||
|
||||
LDA.l ItemSources : BIT.w #$0001 : BEQ +
|
||||
JSR CheckChests
|
||||
+
|
||||
@@ -71,16 +65,13 @@ CheckLoot:
|
||||
+
|
||||
|
||||
LDA.l ItemSources : BIT.w #$0008 : BEQ +
|
||||
JSR CheckMisc
|
||||
JSR CheckMisc2
|
||||
JSR CheckBoss
|
||||
+
|
||||
|
||||
LDA.l ItemSources : BIT.w #$0010 : BEQ +
|
||||
JSR CheckPrize
|
||||
+
|
||||
|
||||
JSR CheckNpcs
|
||||
|
||||
.done
|
||||
PLA : STA.b $0E
|
||||
PLA : STA.b $06
|
||||
@@ -91,7 +82,7 @@ JSR CheckNpcs
|
||||
|
||||
CheckChests:
|
||||
LDA.b $CA
|
||||
AND.w #$01FF
|
||||
AND.w #$00FF
|
||||
STA.b $00
|
||||
ASL A
|
||||
TAX
|
||||
@@ -136,22 +127,25 @@ CheckChests:
|
||||
.done
|
||||
RTS
|
||||
|
||||
CheckMisc:
|
||||
; this includes bosses, bonk torches, and standing items (in caves + hera cage key)
|
||||
; all dungeon items in this section are in section 1 of split sections
|
||||
; for cave items we'll always know what section we're in
|
||||
; but for dungeon items, we won't have a section specified in door rando
|
||||
; so if we don't have a section, assume it's 1, and it'll match all the dungeon items anyway
|
||||
CheckBoss:
|
||||
; we assume all bosses are in section 1 of split sections
|
||||
; mainly to simplify hera cage key and GT torch
|
||||
; which use the same flow
|
||||
; and bosses are always in their own section anyway
|
||||
LDA.b $CA
|
||||
BIT.w #$F000
|
||||
BNE +
|
||||
ORA.w #$1000
|
||||
AND.w #$F000
|
||||
XBA
|
||||
CMP.w #$0020
|
||||
BCC +
|
||||
RTS
|
||||
|
||||
+
|
||||
AND.w #$F1FF
|
||||
LDA.b $CA
|
||||
AND.w #$00FF
|
||||
STA.b $04
|
||||
|
||||
LDX.w #$FFFA
|
||||
.next_misc
|
||||
.next_boss
|
||||
INX #6
|
||||
LDA.l MiscLocations, X
|
||||
BPL .check
|
||||
@@ -159,10 +153,9 @@ CheckMisc:
|
||||
|
||||
.check
|
||||
CMP.b $04
|
||||
BNE .next_misc
|
||||
BNE .next_boss
|
||||
|
||||
TXY
|
||||
AND.w #$01FF
|
||||
CMP.b RoomIndex
|
||||
BEQ .current_room
|
||||
|
||||
@@ -187,7 +180,7 @@ CheckMisc:
|
||||
|
||||
TYX
|
||||
BIT.b $04
|
||||
BNE .next_misc ; continue checking if we already got the item
|
||||
BNE .next_boss ; continue checking if we already got the item
|
||||
|
||||
LDA.l MiscLocations+4, X
|
||||
STA.b $05
|
||||
@@ -199,28 +192,11 @@ CheckMisc:
|
||||
AND.w #$00FF
|
||||
JSR GetLootClass
|
||||
|
||||
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
|
||||
BRA .next_boss
|
||||
|
||||
CheckPrize:
|
||||
LDA.b $CA
|
||||
AND.w #$01FF
|
||||
AND.w #$00FF
|
||||
STA.b $04
|
||||
|
||||
LDX.w #$FFFD
|
||||
@@ -254,44 +230,9 @@ CheckPrize:
|
||||
|
||||
BRA .next_prize
|
||||
|
||||
CheckNpcs:
|
||||
LDA.b $CA
|
||||
|
||||
LDX.w #$FFFA
|
||||
.next_npc
|
||||
INX #6
|
||||
LDA.l NpcItems, X
|
||||
BMI .nope
|
||||
|
||||
CMP.b $CA
|
||||
BNE .next_npc
|
||||
|
||||
LDA.l NpcItems+3, X ; get location of data to check
|
||||
STA.b $05
|
||||
|
||||
LDA.l NpcItems+2, X
|
||||
STA.b $04
|
||||
|
||||
LDA.b [$04]
|
||||
AND.w #$00FF
|
||||
AND.l NpcItems+5, X
|
||||
BNE .next_npc
|
||||
|
||||
.yep
|
||||
LDA.w NpcItemIndicator
|
||||
ORA.w #$0001
|
||||
STA.w NpcItemIndicator
|
||||
RTS
|
||||
|
||||
.nope
|
||||
LDA.w NpcItemIndicator
|
||||
AND.w #$FF00
|
||||
STA.w NpcItemIndicator
|
||||
RTS
|
||||
|
||||
CheckPots:
|
||||
LDA.b $CA
|
||||
AND.w #$01FF
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
@@ -306,7 +247,6 @@ CheckPots:
|
||||
LDA.b [$04], Y
|
||||
CMP.w #$FFFF : BEQ .done
|
||||
INX : INY : INY
|
||||
BIT.w #$4000 : BNE .multi_item ; marked as multi item
|
||||
BIT.w #$8000 : BNE .major_item ; marked as major item
|
||||
LDA.b [$04], Y
|
||||
AND.w #$00FF
|
||||
@@ -326,19 +266,8 @@ CheckPots:
|
||||
INY
|
||||
BRA .mask_set
|
||||
|
||||
.multi_item
|
||||
LDA.b [$04], Y
|
||||
PHX
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l PotMultiWorldTable, X
|
||||
PLX
|
||||
BRA .item_id_set
|
||||
|
||||
.major_item
|
||||
LDA.b [$04], Y
|
||||
.item_id_set
|
||||
PHA
|
||||
PHX
|
||||
INY
|
||||
@@ -357,7 +286,7 @@ CheckPots:
|
||||
+
|
||||
|
||||
LDA.b $CA
|
||||
AND.w #$01FF
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
if !FEATURE_FIX_BASEROM
|
||||
@@ -395,7 +324,7 @@ CheckJunkPot:
|
||||
+
|
||||
|
||||
LDA.b $CA
|
||||
AND.w #$01FF
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l PotCollectionRateTable, X
|
||||
@@ -423,17 +352,11 @@ endif
|
||||
|
||||
CheckEnemies:
|
||||
LDA.b $CA
|
||||
AND.w #$01FF
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
|
||||
; 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
|
||||
LDA.l UWSpritesPointers, X
|
||||
INC A ; skip the layered/unlayered indicator
|
||||
STA.b $04
|
||||
LDA.w #bank(UWSpritesData)
|
||||
@@ -513,7 +436,7 @@ CheckEnemies:
|
||||
+
|
||||
|
||||
LDA.b $CA
|
||||
AND.w #$01FF
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
@@ -543,9 +466,7 @@ GetLootClass:
|
||||
CMP.w #$0080 : BNE .not_compass
|
||||
|
||||
.compass
|
||||
LDA.l AlwaysShowCompass
|
||||
AND.w #$00FF
|
||||
BNE .check_value
|
||||
LDA.l AlwaysShowCompass : BNE .check_value
|
||||
|
||||
.not_compass
|
||||
LDA.b $0E
|
||||
@@ -593,7 +514,7 @@ macro DefineGetFooSection(type, offset)
|
||||
Get<type>Section:
|
||||
PHX
|
||||
LDA.b $CA
|
||||
AND.w #$01FF
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l SplitRooms, X
|
||||
@@ -641,13 +562,13 @@ Check<type>Section:
|
||||
STA.b $CC
|
||||
|
||||
LDA.b $CB
|
||||
AND.w #$00F0
|
||||
AND.w #$00FF
|
||||
BEQ .yes
|
||||
|
||||
JSR Get<type>Section
|
||||
|
||||
LDA.b $CB
|
||||
AND.w #$00F0
|
||||
AND.w #$00FF
|
||||
LSR A : LSR A : LSR A : LSR A
|
||||
DEC A
|
||||
CMP.b $CE
|
||||
@@ -150,10 +150,7 @@ DrawFullRoomTile:
|
||||
RTL
|
||||
|
||||
DrawSingleRoomLoot:
|
||||
LDA.l ShowLootOnMap : AND.w #$00FF : BNE +
|
||||
RTL
|
||||
|
||||
+ PHX : PHY
|
||||
PHX : PHY
|
||||
|
||||
TYX
|
||||
|
||||
@@ -175,7 +172,6 @@ DrawSingleRoomLoot:
|
||||
STA.w GFXStripes+$0C, Y
|
||||
|
||||
LDA.b $CA
|
||||
AND.w #$F0FF
|
||||
JSL CheckLoot
|
||||
|
||||
ASL A : ASL A : ASL A
|
||||
@@ -545,9 +541,7 @@ DrawStairs:
|
||||
LDA.w SpiralProps, Y
|
||||
AND.w #$00FF
|
||||
STA.b $06
|
||||
BNE +
|
||||
JMP .done
|
||||
+
|
||||
BEQ .done
|
||||
|
||||
STZ.b $02
|
||||
INY
|
||||
@@ -584,14 +578,11 @@ DrawStairs:
|
||||
STA.b $CA
|
||||
|
||||
JSR GetSpecificRoomVisibility
|
||||
AND.w #$00FF
|
||||
BNE +
|
||||
LDA.b $0E
|
||||
AND.w #$000F
|
||||
BEQ .ply_skip
|
||||
LDA.b $0B
|
||||
AND.w #$00FF
|
||||
BEQ .ply_skip
|
||||
BNE +
|
||||
BRA .ply_skip
|
||||
+
|
||||
|
||||
TYX
|
||||
@@ -628,77 +619,32 @@ GetCurrentRoomVisibility:
|
||||
|
||||
GetSpecificRoomVisibility:
|
||||
PHX
|
||||
|
||||
; figure out if room is dark without lamp
|
||||
LDA.b $CA
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l RoomHeaderPointers, X
|
||||
TAX
|
||||
LDA.l bank(RoomHeaders)<<16, X
|
||||
AND.w #$0001
|
||||
BEQ .not_dark
|
||||
|
||||
SEP #$20
|
||||
JSL LampCheck
|
||||
REP #$20
|
||||
BNE .not_dark
|
||||
|
||||
LDA.l LampCone
|
||||
BIT.w #$0020 ; all rooms are lit
|
||||
BNE .not_dark
|
||||
|
||||
LDA.l ShowRooms_dark_room_cap
|
||||
AND.w #$00FF
|
||||
CMP.w #$0006
|
||||
BCS .not_dark
|
||||
|
||||
XBA
|
||||
STA.b $0A
|
||||
BRA .check_visibility
|
||||
|
||||
.not_dark
|
||||
LDA.w #$0600
|
||||
STA.b $0A
|
||||
|
||||
.check_visibility
|
||||
SEP #$20
|
||||
LDA.l ShowRooms_default
|
||||
AND.w #$00FF
|
||||
STA.b $0A
|
||||
|
||||
REP #$20
|
||||
LDX.w DungeonID
|
||||
LDA.l MapField
|
||||
AND.l DungeonMask, X
|
||||
BEQ +
|
||||
SEP #$20
|
||||
LDA.l ShowRooms_have_map
|
||||
AND.w #$00FF
|
||||
CMP.b $0A
|
||||
BCC +
|
||||
STA.b $0A
|
||||
+
|
||||
|
||||
REP #$20
|
||||
LDX.w DungeonID
|
||||
LDA.l CompassField
|
||||
AND.l DungeonMask, X
|
||||
BEQ +
|
||||
SEP #$20
|
||||
LDA.l ShowRooms_have_compass
|
||||
AND.w #$00FF
|
||||
CMP.b $0A
|
||||
BCC +
|
||||
STA.b $0A
|
||||
+
|
||||
|
||||
SEP #$20
|
||||
LDA.b $0A
|
||||
CMP.b $0B
|
||||
BCC +
|
||||
STA.b $0B
|
||||
+
|
||||
|
||||
REP #$20
|
||||
LDA.b $CA
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
@@ -707,20 +653,13 @@ GetSpecificRoomVisibility:
|
||||
AND.w #$000F
|
||||
STA.b $0E
|
||||
BEQ +
|
||||
SEP #$20
|
||||
LDA.l ShowRooms_visited_tile
|
||||
AND.w #$00FF
|
||||
CMP.b $0A
|
||||
BCC +
|
||||
CMP.b $0B
|
||||
BCS .too_dark
|
||||
STA.b $0A
|
||||
BRA +
|
||||
.too_dark
|
||||
LDA.b $0B
|
||||
STA.b $0A
|
||||
+
|
||||
|
||||
REP #$20
|
||||
PLX
|
||||
LDA.b $0A
|
||||
RTS
|
||||
@@ -766,7 +705,6 @@ DrawDropOrWarp:
|
||||
STA.b $CA
|
||||
|
||||
JSR GetSpecificRoomVisibility
|
||||
AND.w #$00FF
|
||||
BNE +
|
||||
LDA.b $0E
|
||||
AND.w #$000F
|
||||
@@ -1464,8 +1402,8 @@ MoveDoorsMapCursor:
|
||||
BRA .done
|
||||
|
||||
.no_move
|
||||
; LDA.b #$3C
|
||||
; STA.w $012E
|
||||
LDA.b #$3C
|
||||
STA.w $012E
|
||||
|
||||
.done
|
||||
PLP
|
||||
@@ -1553,9 +1491,8 @@ DoorsMapNextEntrance:
|
||||
STA.b $CA
|
||||
|
||||
JSR GetSpecificRoomVisibility
|
||||
AND.w #$00FF
|
||||
BNE .acceptable
|
||||
JMP .done
|
||||
BEQ .done
|
||||
|
||||
+
|
||||
TYX
|
||||
@@ -1572,7 +1509,6 @@ DoorsMapNextEntrance:
|
||||
STA.b $CA
|
||||
|
||||
JSR GetSpecificRoomVisibility
|
||||
AND.w #$00FF
|
||||
BNE .acceptable
|
||||
|
||||
LDA.w #$0001
|
||||
@@ -1602,9 +1538,6 @@ DoorsMapNextEntrance:
|
||||
LDA.b $00
|
||||
AND.b $0E
|
||||
BEQ .check_next
|
||||
LDA.b $0B
|
||||
AND.w #$00FF
|
||||
BEQ .check_next
|
||||
|
||||
.acceptable
|
||||
PHX
|
||||
@@ -1664,7 +1597,6 @@ FindFirstEntrance:
|
||||
STA.b $CA
|
||||
|
||||
JSR GetSpecificRoomVisibility
|
||||
AND.w #$00FF
|
||||
BNE .acceptable
|
||||
|
||||
LDA.w #$0001
|
||||
@@ -1694,9 +1626,6 @@ FindFirstEntrance:
|
||||
LDA.b $00
|
||||
AND.b $0E
|
||||
BEQ .check_next
|
||||
LDA.b $0B
|
||||
AND.w #$00FF
|
||||
BEQ .check_next
|
||||
|
||||
.acceptable
|
||||
PLP
|
||||
@@ -1938,7 +1867,6 @@ DrawDoorsEntrances:
|
||||
BMI .check_dropdown
|
||||
|
||||
JSR GetSpecificRoomVisibility
|
||||
AND.w #$00FF
|
||||
BNE .draw_entrance
|
||||
|
||||
PHX
|
||||
@@ -1948,9 +1876,6 @@ DrawDoorsEntrances:
|
||||
PLX
|
||||
AND.b $0E
|
||||
BEQ .check_dropdown
|
||||
LDA.b $0B
|
||||
AND.w #$00FF
|
||||
BEQ .check_dropdown
|
||||
|
||||
.draw_entrance
|
||||
SEP #$30
|
||||
@@ -1981,7 +1906,6 @@ DrawDoorsEntrances:
|
||||
BMI .next_room
|
||||
|
||||
JSR GetSpecificRoomVisibility
|
||||
AND.w #$00FF
|
||||
BNE .draw_dropdown
|
||||
|
||||
PHX
|
||||
@@ -1990,13 +1914,7 @@ DrawDoorsEntrances:
|
||||
LDA.l DropdownQuadrantMasks, X
|
||||
PLX
|
||||
AND.b $0E
|
||||
BEQ .goto_next_room
|
||||
LDA.b $0B
|
||||
AND.w #$00FF
|
||||
BNE .draw_dropdown
|
||||
|
||||
.goto_next_room
|
||||
JMP .next_room
|
||||
BEQ .next_room
|
||||
|
||||
.draw_dropdown
|
||||
SEP #$30
|
||||
@@ -2046,6 +1964,7 @@ DrawDoorsStairs:
|
||||
INX : INX
|
||||
LDA.l SpiralProps, X
|
||||
|
||||
|
||||
PHX
|
||||
ASL A
|
||||
TAX
|
||||
@@ -2077,10 +1996,6 @@ DrawDoorsStairs:
|
||||
AND.b $0E
|
||||
BEQ .skip
|
||||
|
||||
LDA.b $0B
|
||||
CMP.b #$04
|
||||
BCC .skip
|
||||
|
||||
.draw
|
||||
LDY.b $00
|
||||
LDA.b #$00
|
||||
@@ -2116,13 +2031,6 @@ DrawDoorsStairs:
|
||||
|
||||
DetectLinksSection:
|
||||
LDA.b RoomIndex
|
||||
CMP.w #$0128
|
||||
BCC +
|
||||
|
||||
LDA.w #$0000
|
||||
RTL
|
||||
+
|
||||
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l SplitRooms, X
|
||||
39
dungeon_map/data/analyze.rb
Normal file
39
dungeon_map/data/analyze.rb
Normal file
@@ -0,0 +1,39 @@
|
||||
File.open("supertile_shapes.asm", "r") do |file|
|
||||
bytes = []
|
||||
while line = file.gets
|
||||
m = line.match(/dw \$(\h+), \$(\h+), \$(\h+), \$(\h+)/)
|
||||
bytes += m.captures if m
|
||||
break if bytes.length >= 4 * 0xE0
|
||||
end
|
||||
|
||||
counts = []
|
||||
for byte in bytes do
|
||||
value = byte.to_i(16)
|
||||
next if value == 0xFFFF
|
||||
value = (value & 0x03FF) - 0x340
|
||||
if not counts[value]
|
||||
counts[value] = 0
|
||||
end
|
||||
counts[value] += 1
|
||||
end
|
||||
|
||||
print(" ")
|
||||
for col in 0...16
|
||||
printf(" x%X", col)
|
||||
end
|
||||
puts
|
||||
|
||||
for row in 0...0xC
|
||||
printf("%Xx", row + 4)
|
||||
for col in 0...16
|
||||
printf("%4d", counts[row * 16 + col] || 0)
|
||||
end
|
||||
puts
|
||||
end
|
||||
|
||||
printf("Unused:")
|
||||
for i in 0...0x80
|
||||
printf(" %2X", i) unless counts[i]
|
||||
end
|
||||
puts
|
||||
end
|
||||
@@ -3,8 +3,8 @@
|
||||
!TIER_LOW_KEY = $03
|
||||
!TIER_HEALTH = $05
|
||||
!TIER_MINOR = $06
|
||||
!TIER_COMPASS = $07
|
||||
!TIER_MAP = $08
|
||||
!TIER_MAP = $07
|
||||
!TIER_COMPASS = $08
|
||||
!TIER_SM_KEY = $09
|
||||
!TIER_BIG_KEY = $0A
|
||||
!TIER_MAJOR = $0B
|
||||
@@ -49,7 +49,7 @@ db !TIER_CRYSTAL ; 20 - Crystal
|
||||
db !TIER_MINOR ; 21 - Net
|
||||
db !TIER_MINOR ; 22 - Blue Mail
|
||||
db !TIER_MINOR ; 23 - Red Mail
|
||||
db !TIER_SM_KEY ; 24 - Small Key
|
||||
db !TIER_LOW_KEY ; 24 - Small Key
|
||||
db !TIER_COMPASS ; 25 - Compass
|
||||
db !TIER_HEALTH ; 26 - Heart Container from 4/4
|
||||
db !TIER_JUNK ; 27 - Bomb
|
||||
@@ -26,7 +26,7 @@ db $01, $00, $05 ; ($0A) Single Staircase at Top of Bottom Left Quadrant
|
||||
db $01, $00, $04 ; ($0D) Moldorm
|
||||
db $02, $01, $00, $00, $02 ; ($10) Pod Basement
|
||||
db $03, $01, $0A, $02, $01, $00, $0B ; ($15) GT Entrance
|
||||
db $02, $01, $03, $00, $04 ; ($1C) Hera Below Moldorm
|
||||
db $02, $00, $03, $01, $04 ; ($1C) Hera Below Moldorm
|
||||
db $02, $00, $01, $01, $0B ; ($21) PoD Bridge
|
||||
db $01, $00, $08 ; ($26) GT Ice Armos
|
||||
db $03, $00, $01, $01, $0B, $02, $09 ; ($29) Swamp Statue
|
||||
@@ -39,7 +39,7 @@ SplitRooms:
|
||||
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
|
||||
%d(.no) : %d(.no) : %d(.6a) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
|
||||
|
||||
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.74) : %d(.75) : %d(.no) : %d(.no)
|
||||
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.75) : %d(.no) : %d(.no)
|
||||
%d(.no) : %d(.no) : %d(.no) : %d(.7b) : %d(.7c) : %d(.7d) : %d(.no) : %d(.no)
|
||||
|
||||
; 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F
|
||||
@@ -61,24 +61,7 @@ SplitRooms:
|
||||
%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)
|
||||
|
||||
; 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)
|
||||
%d(.no)
|
||||
|
||||
.no
|
||||
db $00
|
||||
@@ -452,7 +435,7 @@ db $01
|
||||
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items) : %d(.no_items)
|
||||
..areas
|
||||
db $02, $00, $80, $00, $FF
|
||||
db $01, $34, $44, $B4, $FF
|
||||
db $01, $34, $D4, $B8, $FF
|
||||
db $FF
|
||||
..doors
|
||||
db $03, $06
|
||||
@@ -586,344 +569,3 @@ db $FF
|
||||
..chests
|
||||
db $01
|
||||
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
|
||||
@@ -112,7 +112,7 @@ dw $FFFF, $838E, $FFFF, $FFFF ; 6E
|
||||
dw $FFFF, $FFFF, $FFFF, $FFFF ; 6F - unused
|
||||
dw $43BA, $FFFF, $FFFF, $FFFF ; 70
|
||||
dw $039A, $FFFF, $4365, $438D ; 71
|
||||
dw $437A, $037A, $03C1, $0342 ; 72 - slight cheating I guess...
|
||||
dw $437A, $037A, $8386, $0342 ; 72 - slight cheating I guess...
|
||||
dw $038F, $038F, $839B, $0366 ; 73
|
||||
dw $43B2, $03B2, $43A8, $03A8 ; 74
|
||||
dw $038F, $83B4, $0365, $03B5 ; 75
|
||||
@@ -30,18 +30,18 @@ DrawLoot:
|
||||
STA.w $021B
|
||||
|
||||
LDA.l DRMode
|
||||
BNE .skip
|
||||
|
||||
LDA.l ShowLootOnMap
|
||||
BEQ .skip
|
||||
|
||||
BEQ +
|
||||
LDA.l DungeonMapMode
|
||||
BNE +
|
||||
BRA .skip
|
||||
+
|
||||
REP #$30
|
||||
PHX : PHY
|
||||
|
||||
STZ.b $0E
|
||||
|
||||
LDX.w DungeonID
|
||||
LDA.l DungeonMapRoomPointers, X
|
||||
JSL LoadDungeonMapRoomPointer
|
||||
STA.b $72
|
||||
|
||||
SEP #$20
|
||||
@@ -73,52 +73,65 @@ DrawLoot:
|
||||
DrawSingleFloorLoot:
|
||||
REP #$20
|
||||
AND.w #$00FF
|
||||
INC A
|
||||
ASL A
|
||||
TAX
|
||||
%ADD_MapMode()
|
||||
|
||||
LDA.l DungeonMapFloorToDataOffset, X
|
||||
CLC : ADC.w #$0018 ; get to end of floor
|
||||
LDA.l MapDrawingData_floor_data_offset, X
|
||||
DEC A
|
||||
TAY
|
||||
|
||||
%LDX_MapMode()
|
||||
|
||||
SEP #$20
|
||||
LDA.b #$04
|
||||
LDA.l MapDrawingData_column_count, X
|
||||
DEC A
|
||||
STA.b $06
|
||||
|
||||
LDA.b #$04
|
||||
LDA.l MapDrawingData_row_count, X
|
||||
DEC A
|
||||
STA.b $07
|
||||
|
||||
.next_row
|
||||
REP #$20
|
||||
LDA.w GFXStripes
|
||||
TAX
|
||||
CLC : ADC.w #$0030
|
||||
CLC : ADC.w #$0034
|
||||
STA.w GFXStripes
|
||||
|
||||
PHX
|
||||
%LDX_MapMode()
|
||||
|
||||
SEP #$20
|
||||
LDA.b $07
|
||||
CPX.w #$0002
|
||||
BNE +
|
||||
ASL A
|
||||
+
|
||||
CLC : ADC.b $07
|
||||
REP #$20
|
||||
AND.w #$00FF
|
||||
ASL #5
|
||||
|
||||
CLC : ADC.w #$1092
|
||||
CLC : ADC.l MapDrawingData_bg1_grid_start, X
|
||||
ADC.b $0E
|
||||
XBA
|
||||
PLX
|
||||
STA.w GFXStripes+$02, X
|
||||
CLC : ADC.w #$2000
|
||||
STA.w GFXStripes+$1A, X
|
||||
|
||||
LDA.w #$1300
|
||||
STA.w GFXStripes+$04, X
|
||||
STA.w GFXStripes+$1C, X
|
||||
|
||||
LDA.w #$1500
|
||||
STA.w GFXStripes+$04, X
|
||||
STA.w GFXStripes+$1E, X
|
||||
|
||||
TXA
|
||||
CLC : ADC.w #$0016
|
||||
CLC : ADC.w #$0018
|
||||
TAX
|
||||
|
||||
.next_room
|
||||
REP #$20
|
||||
LDA.b ($72), Y ; get room id
|
||||
LDA.b [$72], Y ; get room id
|
||||
PHY
|
||||
|
||||
AND.w #$00FF
|
||||
@@ -140,24 +153,49 @@ DrawSingleFloorLoot:
|
||||
LDA.l LootTypeIcons+2, X
|
||||
STA.w GFXStripes+$02, Y
|
||||
LDA.l LootTypeIcons+4, X
|
||||
STA.w GFXStripes+$18, Y
|
||||
LDA.l LootTypeIcons+6, X
|
||||
STA.w GFXStripes+$1A, Y
|
||||
LDA.l LootTypeIcons+6, X
|
||||
STA.w GFXStripes+$1C, Y
|
||||
|
||||
TYX
|
||||
PLY
|
||||
DEY : DEX #4
|
||||
|
||||
LDA.l DungeonMapMode
|
||||
BEQ +
|
||||
LDA.b $06
|
||||
AND.w #$00FF
|
||||
BEQ +
|
||||
|
||||
; skip a column if in 4x3 mode and it's not the last column
|
||||
LDA.w #$0300
|
||||
STA.w GFXStripes+$02, X
|
||||
STA.w GFXStripes+$1C, X
|
||||
DEX : DEX
|
||||
+
|
||||
|
||||
SEP #$20
|
||||
DEC.b $06
|
||||
BPL .next_room
|
||||
|
||||
LDA.l DungeonMapMode
|
||||
BNE +
|
||||
; draw an extra empty tile at the end to make up for width differences between modes
|
||||
LDA.b #$03
|
||||
STZ.w GFXStripes+$02, X
|
||||
STA.w GFXStripes+$03, X
|
||||
STZ.w GFXStripes+$1C, X
|
||||
STA.w GFXStripes+$1D, X
|
||||
+
|
||||
|
||||
DEC.b $07
|
||||
BMI .done
|
||||
|
||||
LDA.b #$00
|
||||
XBA
|
||||
LDA.b #$04
|
||||
%LDX_MapMode()
|
||||
LDA.l MapDrawingData_column_count, X
|
||||
DEC A
|
||||
STA.b $06
|
||||
|
||||
JMP .next_row
|
||||
@@ -5,49 +5,18 @@ DrawNonexistentRoom:
|
||||
STA.l $7F0002, X
|
||||
STA.l $7F0040, X
|
||||
STA.l $7F0042, X
|
||||
JML $8AE7F2
|
||||
|
||||
GetVisibilityProps:
|
||||
FinishRoom:
|
||||
PHX
|
||||
ASL A : ASL A
|
||||
%LDX_MapMode()
|
||||
PLA
|
||||
CLC : ADC.l MapDrawingData_column_spacing, X
|
||||
TAX
|
||||
LDA.b $0C
|
||||
AND.l .visibility_props, X
|
||||
ORA.l .visibility_props+2, X
|
||||
STA.b $0C
|
||||
PLX
|
||||
RTS
|
||||
|
||||
.visibility_props:
|
||||
dw $0000, $0F00
|
||||
dw $C000, $174F
|
||||
dw $C000, $174F
|
||||
dw $0000, $1400
|
||||
dw $0000, $1000
|
||||
dw $0000, $0C00
|
||||
dw $0000, $0800
|
||||
|
||||
; A = room shape
|
||||
; $0C = visibility props
|
||||
GetQuadrantTile:
|
||||
PHA
|
||||
|
||||
LDA.b $0C
|
||||
AND.w #$03FF
|
||||
BNE .square
|
||||
|
||||
PLA
|
||||
ORA.b $0C
|
||||
RTS
|
||||
|
||||
.square
|
||||
PLA
|
||||
LDA.b $0C
|
||||
RTS
|
||||
JML $8AE7F6
|
||||
|
||||
NormalDrawDungeonMapRoom:
|
||||
JSL DrawDungeonMapRoom
|
||||
JML $8AE7F2
|
||||
JMP FinishRoom
|
||||
|
||||
; $CA has room_id
|
||||
; $0E has quadrant flags
|
||||
@@ -57,7 +26,62 @@ DrawDungeonMapRoom:
|
||||
PHB : PHK : PLB ; need to keep this in same bank as data, or else specify bank
|
||||
LDA.b $0A : PHA
|
||||
|
||||
JSR GetSpecificRoomVisibility
|
||||
LDA.l ShowRooms_default
|
||||
AND.w #$00FF
|
||||
STA.b $0A
|
||||
|
||||
PHX
|
||||
|
||||
LDX.w DungeonID
|
||||
LDA.l MapField
|
||||
AND.l DungeonMask, X
|
||||
BEQ +
|
||||
LDA.l ShowRooms_have_map
|
||||
AND.w #$00FF
|
||||
CMP.b $0A
|
||||
BCC +
|
||||
STA.b $0A
|
||||
+
|
||||
|
||||
LDX.w DungeonID
|
||||
LDA.l CompassField
|
||||
AND.l DungeonMask, X
|
||||
BEQ +
|
||||
LDA.l ShowRooms_have_compass
|
||||
AND.w #$00FF
|
||||
CMP.b $0A
|
||||
BCC +
|
||||
STA.b $0A
|
||||
+
|
||||
|
||||
LDA.b $0E
|
||||
AND.w #$000F
|
||||
BEQ +
|
||||
LDA.l ShowRooms_visited_tile
|
||||
AND.w #$00FF
|
||||
CMP.b $0A
|
||||
BCC +
|
||||
STA.b $0A
|
||||
+
|
||||
|
||||
PLX
|
||||
|
||||
LDA.l DungeonMapMode
|
||||
BEQ +
|
||||
LDA.b $0A
|
||||
CMP.w #$0003
|
||||
BCS +
|
||||
JSL ClearAdjacentConnections
|
||||
+
|
||||
|
||||
LDA.b $0A : BNE + : LDA.w #$0F00 : BRA ++
|
||||
+ DEC A : BNE + : LDA.w #$174F : BRA ++
|
||||
+ DEC A : BNE + : LDA.w #$174F : BRA ++
|
||||
+ DEC A : BNE + : LDA.w #$1400 : BRA ++
|
||||
+ DEC A : BNE + : LDA.w #$1000 : BRA ++
|
||||
+ DEC A : BNE + : LDA.w #$0C00 : BRA ++
|
||||
+ LDA.w #$0800
|
||||
++ STA.b $0C
|
||||
|
||||
LDA.b $CA
|
||||
AND.w #$00FF
|
||||
@@ -65,44 +89,49 @@ DrawDungeonMapRoom:
|
||||
TAY
|
||||
|
||||
macro DrawQuadrant(quadrant, writeOffset)
|
||||
.draw_quadrant_<quadrant>:
|
||||
LDA.w #(3-<quadrant>)<<14
|
||||
STA.b $0C
|
||||
?DrawQuadrant:
|
||||
LDA.w SupertileRoomShapes+(2*<quadrant>), Y
|
||||
CMP.w #$FFFF : BEQ ?.empty
|
||||
PHA
|
||||
LDA.b $0E
|
||||
AND.w #1<<(3-<quadrant>)
|
||||
BNE ?.visited
|
||||
|
||||
LDA.b $0E
|
||||
BIT.w #1<<(3-<quadrant>)
|
||||
BNE ..visited
|
||||
?.unvisited
|
||||
LDA.b $0A
|
||||
CMP.w #$0003
|
||||
BCS ?.shape
|
||||
|
||||
LDA.b $0A
|
||||
BRA ..continue
|
||||
?.square
|
||||
PLA
|
||||
LDA.b $0C
|
||||
EOR.w #(3-<quadrant>)<<14
|
||||
BRA ?.write
|
||||
|
||||
..visited
|
||||
LDA.b $0B
|
||||
?.shape
|
||||
PLA
|
||||
ORA.b $0C
|
||||
BRA ?.write
|
||||
|
||||
..continue
|
||||
AND.w #$00FF
|
||||
JSR GetVisibilityProps
|
||||
?.visited
|
||||
PLA
|
||||
ORA.w #$0800
|
||||
BRA ?.write
|
||||
|
||||
LDA.w SupertileRoomShapes+(2*<quadrant>), Y
|
||||
CMP.w #$FFFF : BNE ..get_quadrant
|
||||
LDA.b $0A
|
||||
AND.w #$00FF
|
||||
CMP.w #$0001
|
||||
BNE ..empty
|
||||
?.empty
|
||||
LDA.b $0A
|
||||
CMP.w #$0001
|
||||
BEQ ?.full_square
|
||||
LDA.w #$0F00
|
||||
BRA ?.write
|
||||
|
||||
..full_square
|
||||
LDA.b $0C
|
||||
BRA ..write
|
||||
?.full_square
|
||||
LDA.w #$174F
|
||||
EOR.w #(3-<quadrant>)<<14
|
||||
|
||||
..get_quadrant
|
||||
JSR GetQuadrantTile
|
||||
BRA ..write
|
||||
|
||||
..empty
|
||||
LDA.w #$0F00
|
||||
|
||||
..write
|
||||
STA.l $7F0000+<writeOffset>, X
|
||||
?.write
|
||||
STA.l $7F0000+<writeOffset>, X
|
||||
?.done
|
||||
endmacro
|
||||
|
||||
%DrawQuadrant(0, $00)
|
||||
@@ -121,7 +150,7 @@ DrawEntrances:
|
||||
LDA.b $06 : PHA
|
||||
|
||||
LDX.w DungeonID
|
||||
LDA.l DungeonMapRoomPointers, X
|
||||
JSL LoadDungeonMapRoomPointer
|
||||
STA.b $72
|
||||
|
||||
SEP #$20
|
||||
@@ -152,18 +181,23 @@ DrawSingleFloorEntrances:
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
LDA.l DungeonMapFloorToDataOffset, X
|
||||
%ADD_MapMode()
|
||||
LDA.l MapDrawingData_floor_data_offset, X
|
||||
TAY
|
||||
STZ.b $06
|
||||
|
||||
%LDX_MapMode()
|
||||
|
||||
.next_room
|
||||
REP #$20
|
||||
LDA.b ($72), Y ; get room id
|
||||
LDA.b [$72], Y ; get room id
|
||||
AND.w #$00FF
|
||||
CMP.w #$000F ; $0F = empty room
|
||||
|
||||
BEQ +
|
||||
PHX
|
||||
JSR DrawSingleRoomEntrances
|
||||
PLX
|
||||
+
|
||||
|
||||
INY
|
||||
@@ -171,13 +205,13 @@ DrawSingleFloorEntrances:
|
||||
SEP #$20
|
||||
INC.b $06
|
||||
LDA.b $06
|
||||
CMP.b #$05
|
||||
CMP.l MapDrawingData_column_count, X
|
||||
BCC .next_room
|
||||
|
||||
STZ.b $06
|
||||
- INC.b $07
|
||||
LDA.b $07
|
||||
CMP.b #$05
|
||||
CMP.l MapDrawingData_row_count, X
|
||||
BCC .next_room
|
||||
|
||||
.done
|
||||
@@ -199,7 +233,8 @@ macro DrawSingleEntrance(offset)
|
||||
?+
|
||||
CLC : ADC.b $06
|
||||
ASL #3
|
||||
CLC : ADC.b #$90+<offset>
|
||||
CLC : ADC.b #<offset>
|
||||
CLC : ADC.l MapDrawingData_sprite_offset_x_base, X
|
||||
STA.w OAMBuffer+0, Y
|
||||
|
||||
PHX
|
||||
@@ -210,10 +245,13 @@ macro DrawSingleEntrance(offset)
|
||||
?+
|
||||
CLC : ADC.b $07
|
||||
ASL #3
|
||||
PHA
|
||||
|
||||
LDX.b $02
|
||||
LDA.b $02
|
||||
%ADD_MapMode()
|
||||
|
||||
CLC : ADC.l DungeonMapRoomMarkerYBase, X
|
||||
PLA
|
||||
CLC : ADC.l MapDrawingData_sprite_offset_y_base, X
|
||||
PLX
|
||||
CLC : ADC.b #$08
|
||||
CLC : ADC.w $0213
|
||||
@@ -233,6 +271,8 @@ DrawSingleRoomEntrances:
|
||||
STA.b $0E
|
||||
PHY
|
||||
|
||||
%LDY_MapMode()
|
||||
|
||||
SEP #$10
|
||||
|
||||
LDX.b #$FE
|
||||
@@ -1,6 +1,8 @@
|
||||
CheckSwitchMap:
|
||||
LDA.l DRMode
|
||||
BEQ .not_fancy_door_map
|
||||
LDA.l DungeonMapMode
|
||||
BNE .not_fancy_door_map
|
||||
|
||||
; fancy door map
|
||||
SEP #$20
|
||||
@@ -158,6 +160,10 @@ SkipMapSprites:
|
||||
|
||||
LDA.l DRMode
|
||||
BEQ +
|
||||
LDA.l DungeonMapMode
|
||||
BEQ .no_vanilla_draw
|
||||
JML $8AEADE
|
||||
.no_vanilla_draw
|
||||
JSL DrawDoorsMapSprites
|
||||
JML $8AEAFC
|
||||
+
|
||||
@@ -175,6 +181,19 @@ CacheCurrentDungeon:
|
||||
STA.l CachedDungeonID
|
||||
LDA.b CurrentFloor
|
||||
STA.l CachedCurrentFloor
|
||||
|
||||
LDA.l DRMode
|
||||
BEQ +
|
||||
|
||||
LDA.w DungeonID
|
||||
PHX
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l DungeonMapData.floor, X
|
||||
STA.b $A4
|
||||
PLX
|
||||
|
||||
+
|
||||
REP #$20
|
||||
RTL
|
||||
|
||||
@@ -259,7 +278,10 @@ DrawDungeonLabel:
|
||||
TAY
|
||||
|
||||
LDA.l DRMode
|
||||
BNE .doors
|
||||
BEQ .not_doors
|
||||
LDA.l DungeonMapMode
|
||||
BEQ .doors
|
||||
.not_doors
|
||||
JMP .skip_doors
|
||||
|
||||
.doors
|
||||
@@ -338,25 +360,30 @@ StartCurrentRoomSearch:
|
||||
RTL
|
||||
|
||||
FindCurrentRoom:
|
||||
LDA.w DungeonMapFloorToDataOffset, Y
|
||||
PHX
|
||||
TYA
|
||||
%ADD_MapMode()
|
||||
LDA.l MapDrawingData_floor_data_offset, X
|
||||
STA.b $0C
|
||||
LDY.w #$0000
|
||||
|
||||
%LDX_MapMode()
|
||||
|
||||
SEP #$20
|
||||
|
||||
.next_room_check
|
||||
CPY.b $0C
|
||||
BCS .not_found
|
||||
|
||||
LDA.b ($04), Y
|
||||
LDA.b [$72], Y
|
||||
INY
|
||||
CMP.b $0E
|
||||
BEQ .found
|
||||
|
||||
LDA.b $00
|
||||
CMP.b #$40
|
||||
CMP.l MapDrawingData_floor_pixel_column_wrap, X
|
||||
BCS .next_row
|
||||
|
||||
CLC : ADC.b #$10
|
||||
CLC : ADC.l MapDrawingData_supertile_pixel_spacing, X
|
||||
STA.b $00
|
||||
BRA .next_room_check
|
||||
|
||||
@@ -364,9 +391,9 @@ FindCurrentRoom:
|
||||
STZ.b $00
|
||||
|
||||
LDA.b $02
|
||||
CMP.b #$40
|
||||
CMP.l MapDrawingData_floor_pixel_row_wrap, X
|
||||
BCS .next_floor
|
||||
CLC : ADC.b #$10
|
||||
CLC : ADC.l MapDrawingData_supertile_pixel_spacing, X
|
||||
STA.b $02
|
||||
BRA .next_room_check
|
||||
|
||||
@@ -375,7 +402,9 @@ FindCurrentRoom:
|
||||
BRA .next_room_check
|
||||
|
||||
.found
|
||||
PLX
|
||||
JML $8AE891
|
||||
|
||||
.not_found
|
||||
PLX
|
||||
JML $8AE8CD
|
||||
@@ -14,13 +14,23 @@ org $8AE12B
|
||||
LDA.b #$20
|
||||
|
||||
; dungeon map sheets
|
||||
org $80DDD3 ; slot $8F
|
||||
org $80DD97
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
|
||||
; always use $8F in dungeon map
|
||||
org $8AE122
|
||||
NOP #4
|
||||
LDA.b #$8F
|
||||
|
||||
; unused chest data
|
||||
org $81E9A5
|
||||
@@ -167,16 +177,61 @@ org $8AE21C
|
||||
JSL DrawMountain
|
||||
BRA + : NOP #9 : +
|
||||
|
||||
;================================================================================
|
||||
; Custom Door Rando Maps
|
||||
;--------------------------------------------------------------------------------
|
||||
org $8AE590
|
||||
JSL PrepDrawRow
|
||||
BRA + : NOP #5 : +
|
||||
|
||||
org $8AE5F2
|
||||
JSR LoadDungeonMapRoomPointer_0A
|
||||
STA.b $72
|
||||
|
||||
org $8AE600
|
||||
LDA.b [$72], Y
|
||||
|
||||
org $8AE634
|
||||
JSR LoadDungeonMapRoomPointer_0A
|
||||
STA.b $72
|
||||
|
||||
org $8AE63B
|
||||
LDA.b [$72], Y
|
||||
|
||||
org $8AE867
|
||||
JSR LoadDungeonMapRoomPointer_0A
|
||||
STA.b $72
|
||||
|
||||
org $8AE872
|
||||
LDA.b [$72], Y
|
||||
|
||||
org $8AE8DD
|
||||
JSR LoadDungeonMapRoomPointer_0A
|
||||
|
||||
org $8AE8E4
|
||||
STA.b $72
|
||||
|
||||
org $8AE8F9
|
||||
LDA.b [$72], Y
|
||||
|
||||
org $8AEBC6
|
||||
JSL GetLocationMarkerLeft
|
||||
NOP
|
||||
|
||||
;================================================================================
|
||||
; Draw Wacky Door Rando Layouts
|
||||
;--------------------------------------------------------------------------------
|
||||
org $8AE3D7
|
||||
LDA.l DungeonMapMode
|
||||
BNE .normal
|
||||
LDA.l DRMode
|
||||
BEQ +
|
||||
JSL DrawWackyDoorRandoStuff
|
||||
JMP.w $8AE422
|
||||
NOP
|
||||
+
|
||||
BEQ .normal
|
||||
|
||||
JSL DrawWackyDoorRandoStuff
|
||||
JMP.w $8AE422
|
||||
NOP
|
||||
|
||||
.normal
|
||||
warnpc $8AE3EB
|
||||
|
||||
org $8AE439
|
||||
@@ -1,5 +1,5 @@
|
||||
pushpc
|
||||
incsrc dungeon_map_hooks.asm
|
||||
incsrc hooks.asm
|
||||
|
||||
macro WriteGFXSheetPointer(sheet, location)
|
||||
pushpc
|
||||
@@ -24,20 +24,17 @@ endmacro
|
||||
%WriteGFXSheetPointer($62, DungeonMapIcons5)
|
||||
%WriteGFXSheetPointer($63, DungeonMapIcons6)
|
||||
|
||||
%WriteGFXSheetPointer($14, DRSheet14)
|
||||
|
||||
pullpc
|
||||
|
||||
incsrc doors_dungeon_map.asm
|
||||
incsrc mappable_doors.asm
|
||||
incsrc current_room_map.asm
|
||||
incsrc draw_rooms.asm
|
||||
incsrc map_bg3.asm
|
||||
incsrc dungeon_switch.asm
|
||||
incsrc draw_loot.asm
|
||||
incsrc check_loot.asm
|
||||
incsrc loot_hud.asm
|
||||
incsrc blink_loot.asm
|
||||
incsrc data/doors_display.asm
|
||||
incsrc data/spiral_stairs.asm
|
||||
incsrc data/fall_warps.asm
|
||||
incsrc data/split_room.asm
|
||||
incsrc data/doors_connections.asm
|
||||
@@ -11,6 +11,8 @@ LoadStripes:
|
||||
RTL
|
||||
|
||||
.dungeon_map
|
||||
LDA.l DungeonMapMode
|
||||
BNE .4x3
|
||||
LDA.l DRMode
|
||||
BNE .6x6
|
||||
|
||||
@@ -23,6 +25,15 @@ LoadStripes:
|
||||
STA.b $02
|
||||
RTL
|
||||
|
||||
.4x3
|
||||
LDA.b #BG3DungeonMap4x3Stripes>>0
|
||||
STA.b $00
|
||||
LDA.b #BG3DungeonMap4x3Stripes>>8
|
||||
STA.b $01
|
||||
LDA.b #BG3DungeonMap4x3Stripes>>16
|
||||
STA.b $02
|
||||
RTL
|
||||
|
||||
.6x6
|
||||
LDA.b #BG3DungeonMap6x6Stripes>>0
|
||||
STA.b $00
|
||||
@@ -46,30 +57,33 @@ LoadLastHUDPalette:
|
||||
SEP #$20
|
||||
RTL
|
||||
|
||||
BG3DungeonMap5x5Stripes:
|
||||
; vanilla stuff
|
||||
dw $4260, $0100, $2100
|
||||
dw $4360, $0E40, $2101
|
||||
dw $4B60, $0100, $6100
|
||||
dw $6260, $2EC0, $2110
|
||||
dw $6B60, $2EC0, $6110
|
||||
dw $6263, $0100, $A100
|
||||
dw $6363, $0E40, $A101
|
||||
dw $6B63, $0100, $E100
|
||||
dw $8460, $0B00, $2102, $2103, $2104, $2105, $2106, $2107
|
||||
dw $A460, $0B00, $2112, $2113, $2114, $2115, $2116, $2117
|
||||
dw $5D60, $0100, $6100
|
||||
dw $7D60, $2EC0, $6110
|
||||
dw $7D63, $0100, $E100
|
||||
dw $0060, $7E40, $2111
|
||||
dw $8063, $3E41, $2111
|
||||
dw $0060, $3EC0, $2111
|
||||
dw $0160, $3EC0, $2111
|
||||
dw $0C60, $3EC0, $2111
|
||||
dw $0D60, $3EC0, $2111
|
||||
dw $1E60, $3EC0, $2111
|
||||
dw $1F60, $3EC0, $2111
|
||||
macro VanillaCommonMapStripes()
|
||||
dw $4260, $0100, $2100
|
||||
dw $4360, $0E40, $2101
|
||||
dw $4B60, $0100, $6100
|
||||
dw $6260, $2EC0, $2110
|
||||
dw $6B60, $2EC0, $6110
|
||||
dw $6263, $0100, $A100
|
||||
dw $6363, $0E40, $A101
|
||||
dw $6B63, $0100, $E100
|
||||
dw $8460, $0B00, $2102, $2103, $2104, $2105, $2106, $2107
|
||||
dw $A460, $0B00, $2112, $2113, $2114, $2115, $2116, $2117
|
||||
dw $5D60, $0100, $6100
|
||||
dw $7D60, $2EC0, $6110
|
||||
dw $7D63, $0100, $E100
|
||||
dw $0060, $7E40, $2111
|
||||
dw $8063, $3E41, $2111
|
||||
dw $0060, $3EC0, $2111
|
||||
dw $0160, $3EC0, $2111
|
||||
dw $0C60, $3EC0, $2111
|
||||
dw $0D60, $3EC0, $2111
|
||||
dw $1E60, $3EC0, $2111
|
||||
dw $1F60, $3EC0, $2111
|
||||
endmacro
|
||||
|
||||
|
||||
BG3DungeonMap5x5Stripes:
|
||||
%VanillaCommonMapStripes()
|
||||
; left edge of map border, from vanilla
|
||||
dw $4E60, $0100, $2100
|
||||
dw $4F60, $1A40, $2101
|
||||
@@ -119,6 +133,59 @@ endmacro
|
||||
|
||||
db $FF
|
||||
|
||||
BG3DungeonMap4x3Stripes:
|
||||
%VanillaCommonMapStripes()
|
||||
; left edge of map border, adjusted from vanilla
|
||||
dw $4D60, $0100, $2100
|
||||
dw $4E60, $1C40, $2101
|
||||
dw $6D60, $2EC0, $2110
|
||||
dw $6D63, $0100, $A100
|
||||
dw $6E63, $1C40, $A101
|
||||
|
||||
; horizontal borders
|
||||
dw $B160, $1440, $1D11
|
||||
dw $1161, $1440, $1D11
|
||||
dw $7161, $1440, $1D11
|
||||
dw $D161, $1440, $1D11
|
||||
dw $3162, $1440, $1D11
|
||||
dw $9162, $1440, $1D11
|
||||
dw $F162, $1440, $1D11
|
||||
dw $5163, $1440, $1D11
|
||||
|
||||
; vertical borders
|
||||
dw $B060, $12C0, $1D11
|
||||
dw $BC60, $12C0, $1D11
|
||||
dw $3062, $12C0, $1D11
|
||||
dw $3C62, $12C0, $1D11
|
||||
|
||||
macro TopOfDoorSquares(start)
|
||||
; silly Big Endian
|
||||
db <start>>>8, <start>, $00, $15
|
||||
dw $5D4C, $1D4C, $1D11, $5D4C, $1D4C, $1D11, $5D4C, $1D4C, $1D11, $5D4C, $1D4C
|
||||
endmacro
|
||||
|
||||
macro BottomOfDoorSquares(start)
|
||||
; silly Big Endian
|
||||
db <start>>>8, <start>, $00, $15
|
||||
dw $DD4C, $9D4C, $1D11, $DD4C, $9D4C, $1D11, $DD4C, $9D4C, $1D11, $DD4C, $9D4C
|
||||
endmacro
|
||||
|
||||
macro FullDoorRow(start)
|
||||
%TopOfDoorSquares(<start>)
|
||||
%BottomOfDoorSquares(<start>+$20)
|
||||
endmacro
|
||||
|
||||
; top grid
|
||||
%FullDoorRow($60D1)
|
||||
%FullDoorRow($6131)
|
||||
%FullDoorRow($6191)
|
||||
|
||||
%FullDoorRow($6251)
|
||||
%FullDoorRow($62B1)
|
||||
%FullDoorRow($6311)
|
||||
|
||||
db $FF
|
||||
|
||||
BG3DungeonMap6x6Stripes:
|
||||
; vanilla
|
||||
dw $4260, $0100, $2100
|
||||
474
dungeon_map/mappable_doors.asm
Normal file
474
dungeon_map/mappable_doors.asm
Normal file
@@ -0,0 +1,474 @@
|
||||
MapDrawingData:
|
||||
.floor_data_offset
|
||||
dw $0000, $0000
|
||||
dw $0019, $000C
|
||||
dw $0032, $0018
|
||||
dw $004B, $0024
|
||||
dw $0064, $0030
|
||||
dw $007D, $003C
|
||||
dw $0096, $0048
|
||||
dw $00AF, $0054
|
||||
dw $00C8, $0060
|
||||
|
||||
.row_data_offset
|
||||
dw $0000, $0000
|
||||
dw $0005, $0004
|
||||
dw $000A, $0008
|
||||
dw $000F, $000C
|
||||
dw $0014, $0010
|
||||
|
||||
.corner_tile_address
|
||||
dw $00E2, $0160
|
||||
dw $00F8, $0178
|
||||
dw $03A2, $03A0
|
||||
dw $03B8, $03B8
|
||||
|
||||
.row_tile_address
|
||||
dw $00E4, $0162
|
||||
dw $03A4, $03A2
|
||||
|
||||
.row_tile_length
|
||||
dw $0014, $0016
|
||||
|
||||
.column_tile_address
|
||||
dw $0122, $01A0
|
||||
dw $0138, $01B8
|
||||
|
||||
.column_tile_length
|
||||
dw $0280, $0200
|
||||
|
||||
.floor_label_address
|
||||
dw $035E, $035C
|
||||
|
||||
.row_start_address
|
||||
dw $0124, $01A2
|
||||
dw $01A4, $0262
|
||||
dw $0224, $0322
|
||||
dw $02A4, $03D2
|
||||
dw $0324, $04A2
|
||||
|
||||
.column_count
|
||||
dw $0005, $0004
|
||||
|
||||
.column_spacing
|
||||
dw $0004, $0006
|
||||
|
||||
.row_count
|
||||
dw $0005, $0003
|
||||
|
||||
.bg1_grid_start
|
||||
dw $1091, $10D1
|
||||
|
||||
.sprite_offset_x_base
|
||||
dw $0090, $0088
|
||||
|
||||
.sprite_offset_y_base
|
||||
dw $001F, $002F
|
||||
dw $007F, $008F
|
||||
|
||||
.entrance_sprite_offset_y_base
|
||||
dw $0087, $0097
|
||||
|
||||
.supertile_pixel_spacing
|
||||
dw $0010, $0018
|
||||
|
||||
.floor_pixel_column_wrap
|
||||
dw $0040, $0048
|
||||
|
||||
.floor_pixel_row_wrap
|
||||
dw $0040, $0030
|
||||
|
||||
CustomMapDrawingData:
|
||||
.column_wrap
|
||||
dw $0003
|
||||
.column_count
|
||||
dw $0004
|
||||
.row_wrap
|
||||
dw $0002
|
||||
|
||||
.floor_connection_data_offset
|
||||
dw $0000
|
||||
dw $0011
|
||||
dw $0022
|
||||
dw $0033
|
||||
dw $0044
|
||||
dw $0055
|
||||
dw $0066
|
||||
dw $0077
|
||||
dw $0088
|
||||
|
||||
.row_connection_data_offset
|
||||
dw $0000
|
||||
dw $0007
|
||||
dw $000E
|
||||
dw $0015
|
||||
|
||||
macro LDA_MapMode()
|
||||
LDA.l DungeonMapMode
|
||||
ASL A
|
||||
endmacro
|
||||
|
||||
macro LDX_MapMode()
|
||||
%LDA_MapMode()
|
||||
TAX
|
||||
endmacro
|
||||
|
||||
macro LDY_MapMode()
|
||||
%LDA_MapMode()
|
||||
TAY
|
||||
endmacro
|
||||
|
||||
macro ADD_MapMode()
|
||||
CLC : ADC.l DungeonMapMode
|
||||
ASL A
|
||||
TAX
|
||||
endmacro
|
||||
|
||||
macro Map_LDA(addr, label)
|
||||
pushpc
|
||||
org <addr>
|
||||
JSR LDA_<label>
|
||||
pullpc
|
||||
|
||||
if not(defined("LDA_<label>"))
|
||||
!LDA_<label> = 1
|
||||
LDA_<label>:
|
||||
PHX
|
||||
%LDX_MapMode()
|
||||
LDA.l MapDrawingData_<label>, X
|
||||
PLX
|
||||
RTS
|
||||
endif
|
||||
endmacro
|
||||
|
||||
macro Map_LDAY(addr, label)
|
||||
pushpc
|
||||
org <addr>
|
||||
JSR LDA_Y_<label>
|
||||
pullpc
|
||||
|
||||
if not(defined("LDA_Y_<label>"))
|
||||
!LDA_Y_<label> = 1
|
||||
LDA_Y_<label>:
|
||||
PHX
|
||||
TYA
|
||||
%ADD_MapMode()
|
||||
LDA.l MapDrawingData_<label>, X
|
||||
PLX
|
||||
RTS
|
||||
endif
|
||||
endmacro
|
||||
|
||||
macro Map_LDAX(addr, label)
|
||||
pushpc
|
||||
org <addr>
|
||||
JSR LDA_X_<label>
|
||||
pullpc
|
||||
|
||||
if not(defined("LDA_X_<label>"))
|
||||
!LDA_X_<label> = 1
|
||||
LDA_X_<label>:
|
||||
PHX
|
||||
TXA
|
||||
%ADD_MapMode()
|
||||
LDA.l MapDrawingData_<label>, X
|
||||
PLX
|
||||
RTS
|
||||
endif
|
||||
endmacro
|
||||
|
||||
macro Map_CMP(addr, label)
|
||||
pushpc
|
||||
org <addr>
|
||||
JSR CMP_<label>
|
||||
pullpc
|
||||
|
||||
if not(defined("CMP_<label>"))
|
||||
!CMP_<label> = 1
|
||||
CMP_<label>:
|
||||
PHX
|
||||
PHA
|
||||
%LDX_MapMode()
|
||||
PLA
|
||||
CMP.l MapDrawingData_<label>, X
|
||||
BEQ .z_flag_set
|
||||
.z_flag_clear
|
||||
PLX
|
||||
REP #$02
|
||||
RTS
|
||||
.z_flag_set
|
||||
PLX
|
||||
SEP #$02
|
||||
RTS
|
||||
endif
|
||||
endmacro
|
||||
|
||||
macro Map_ADD(addr, label)
|
||||
pushpc
|
||||
org <addr>
|
||||
JSR ADD_<label>
|
||||
pullpc
|
||||
|
||||
if not(defined("ADD_<label>"))
|
||||
!ADD_<label> = 1
|
||||
ADD_<label>:
|
||||
PHX
|
||||
PHA
|
||||
%LDX_MapMode()
|
||||
PLA
|
||||
CLC : ADC.l MapDrawingData_<label>, X
|
||||
PLX
|
||||
RTS
|
||||
endif
|
||||
endmacro
|
||||
|
||||
macro Map_ADDY(addr, label)
|
||||
pushpc
|
||||
org <addr>
|
||||
JSR ADD_Y_<label>
|
||||
pullpc
|
||||
|
||||
if not(defined("ADD_Y_<label>"))
|
||||
!ADD_Y_<label> = 1
|
||||
ADD_Y_<label>:
|
||||
PHX
|
||||
PHA
|
||||
TYA
|
||||
%ADD_MapMode()
|
||||
PLA
|
||||
CLC : ADC.l MapDrawingData_<label>, X
|
||||
PLX
|
||||
RTS
|
||||
endif
|
||||
endmacro
|
||||
|
||||
pushpc
|
||||
|
||||
org $8AE5DA
|
||||
ADC.b $02 ; swap position of load and add for ease
|
||||
|
||||
org $8AE652 ; steal some space from the old map-drawing code we're no longer using
|
||||
|
||||
LoadDungeonMapRoomPointer_0A:
|
||||
JSL LoadDungeonMapRoomPointer
|
||||
RTS
|
||||
|
||||
%Map_LDAY($8AE45F, corner_tile_address)
|
||||
%Map_LDAY($8AE489, row_tile_address)
|
||||
%Map_CMP($8AE4B0, row_tile_length)
|
||||
%Map_LDAY($8AE4C1, column_tile_address)
|
||||
%Map_CMP($8AE4EA, column_tile_length)
|
||||
%Map_LDA($8AE54A, floor_label_address)
|
||||
%Map_LDAX($8AE5D7, row_data_offset)
|
||||
%Map_LDAY($8AE5F7, floor_data_offset)
|
||||
%Map_CMP($8AE5A2, row_count)
|
||||
%Map_CMP($8AE7FA, column_count)
|
||||
%Map_ADD($8AE896, sprite_offset_x_base)
|
||||
%Map_ADDY($8AE8B5, sprite_offset_y_base)
|
||||
%Map_ADD($8AE952, sprite_offset_y_base)
|
||||
%Map_ADDY($8AEBDB, sprite_offset_y_base)
|
||||
|
||||
warnpc $8AE7F6
|
||||
padbyte $EA
|
||||
pad $8AE7F6
|
||||
|
||||
pullpc
|
||||
|
||||
incsrc data/doors_connections.asm
|
||||
|
||||
LoadDungeonMapRoomPointer:
|
||||
LDA.l DungeonMapMode
|
||||
BEQ .normal
|
||||
LDA.w #bank(CustomMapPointers)
|
||||
STA.b $74
|
||||
LDA.l CustomMapPointers, X
|
||||
RTL
|
||||
|
||||
.normal
|
||||
LDA.w #bank(DungeonMapRoomPointers)
|
||||
STA.b $74
|
||||
LDA.l DungeonMapRoomPointers, X
|
||||
RTL
|
||||
|
||||
PrepDrawRow:
|
||||
%ADD_MapMode()
|
||||
LDA.l MapDrawingData_row_start_address, X
|
||||
CLC : ADC.b $06
|
||||
AND.w #$0FFF
|
||||
TAX
|
||||
|
||||
LDA.l DungeonMapMode
|
||||
BEQ .done
|
||||
|
||||
JSR DrawRowOfRoomConnections
|
||||
|
||||
.done
|
||||
RTL
|
||||
|
||||
ClearAdjacentConnections:
|
||||
; Left
|
||||
LDA.b $02
|
||||
BEQ +
|
||||
LDA.b $0E
|
||||
BIT.w #$000A
|
||||
BNE +
|
||||
LDA.w #$0F00
|
||||
STA.l $7F0000-$02, X
|
||||
STA.l $7F0040-$02, X
|
||||
+
|
||||
|
||||
; Top
|
||||
LDA.b $00
|
||||
BEQ +
|
||||
LDA.b $0E
|
||||
BIT.w #$000C
|
||||
BNE +
|
||||
LDA.w #$0F00
|
||||
STA.l $7F0000-$40, X
|
||||
STA.l $7F0002-$40, X
|
||||
+
|
||||
|
||||
; Right
|
||||
LDA.b $02
|
||||
CMP.l CustomMapDrawingData_column_wrap
|
||||
BCS +
|
||||
LDA.b $0E
|
||||
BIT.w #$0005
|
||||
BNE +
|
||||
LDA.w #$0F00
|
||||
STA.l $7F0000+$04, X
|
||||
STA.l $7F0040+$04, X
|
||||
+
|
||||
|
||||
; Bottom
|
||||
LDA.b $00
|
||||
CMP.l CustomMapDrawingData_row_wrap
|
||||
BCS +
|
||||
LDA.b $0E
|
||||
BIT.w #$0003
|
||||
BNE +
|
||||
LDA.w #$0F00
|
||||
STA.l $7F0000+$80, X
|
||||
STA.l $7F0002+$80, X
|
||||
+
|
||||
RTL
|
||||
|
||||
DrawRowOfRoomConnections:
|
||||
PHB : PHK : PLB
|
||||
PHX
|
||||
|
||||
LDX.w DungeonID
|
||||
LDA.l DoorConnectionPointers, X
|
||||
STA.b $04
|
||||
|
||||
LDA.l DungeonMapFloorCountData, X
|
||||
AND.w #$000F
|
||||
CLC : ADC.w DungeonMapCurrentFloor
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l CustomMapDrawingData_floor_connection_data_offset, X
|
||||
CLC : ADC.b $04
|
||||
STA.b $04
|
||||
|
||||
LDA.b $00
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l CustomMapDrawingData_row_connection_data_offset, X
|
||||
CLC : ADC.b $04
|
||||
STA.b $04
|
||||
|
||||
STZ.b $02
|
||||
|
||||
PLX : PHX
|
||||
LDY.w #$0000
|
||||
|
||||
.next_horizontal
|
||||
LDA.b ($04), Y
|
||||
AND.w #$00FF
|
||||
JSR DrawHorizontalConnector
|
||||
INY
|
||||
INX #6
|
||||
|
||||
INC.b $02
|
||||
LDA.b $02
|
||||
CMP.l CustomMapDrawingData_column_wrap
|
||||
BCC .next_horizontal
|
||||
|
||||
LDA.b $00
|
||||
CMP.l CustomMapDrawingData_row_wrap
|
||||
BCS .done
|
||||
|
||||
PLX : PHX
|
||||
|
||||
STZ.b $02
|
||||
|
||||
.next_vertical
|
||||
LDA.b ($04), Y
|
||||
AND.w #$00FF
|
||||
JSR DrawVerticalConnector
|
||||
INY
|
||||
INX #6
|
||||
|
||||
INC.b $02
|
||||
LDA.b $02
|
||||
CMP.l CustomMapDrawingData_column_count
|
||||
BCC .next_vertical
|
||||
|
||||
.done
|
||||
PLX
|
||||
PLB
|
||||
RTS
|
||||
|
||||
; A = connector index
|
||||
; X = address
|
||||
DrawHorizontalConnector:
|
||||
PHY
|
||||
ASL A : ASL A
|
||||
TAY
|
||||
|
||||
LDA.w DoorConnectionTiles+0, Y
|
||||
BEQ +
|
||||
ORA.w #$1404
|
||||
STA.l $7F0004, X
|
||||
+
|
||||
|
||||
LDA.w DoorConnectionTiles+2, Y
|
||||
BEQ +
|
||||
ORA.w #$1404
|
||||
STA.l $7F0044, X
|
||||
+
|
||||
|
||||
PLY
|
||||
RTS
|
||||
|
||||
; A = connector index
|
||||
; X = address
|
||||
DrawVerticalConnector:
|
||||
PHY
|
||||
ASL A : ASL A
|
||||
TAY
|
||||
|
||||
LDA.w DoorConnectionTiles+0, Y
|
||||
BEQ +
|
||||
ORA.w #$1400
|
||||
STA.l $7F0080, X
|
||||
+
|
||||
|
||||
LDA.w DoorConnectionTiles+2, Y
|
||||
BEQ +
|
||||
ORA.w #$1400
|
||||
STA.l $7F0082, X
|
||||
+
|
||||
|
||||
PLY
|
||||
RTS
|
||||
|
||||
GetLocationMarkerLeft:
|
||||
LDA.b LinkQuadrantH
|
||||
BEQ +
|
||||
LDA.b #$F8
|
||||
+
|
||||
CLC : ADC.w $0215
|
||||
AND.b #$F8
|
||||
RTL
|
||||
@@ -1,4 +1,4 @@
|
||||
org $B9F000
|
||||
; $B9F000
|
||||
SupertileRoomShapes:
|
||||
incsrc data/supertile_shapes.asm
|
||||
warnpc $B9F800
|
||||
@@ -54,15 +54,15 @@ dw $29CA, $69CA, $29DA, $29DB ; 03 - small key
|
||||
dw $29E9, $69E9, $29F9, $69F9 ; 04 - triforce piece
|
||||
dw $29DD, $69DD, $A9DD, $E9DD ; 05 - safety - plus
|
||||
dw $29EC, $69EC, $29FC, $69FC ; 06 - less important item - small chest
|
||||
dw $29E8, $69E8, $29F8, $69F8 ; 07 - compass
|
||||
dw $29CE, $29CF, $29DE, $29DF ; 08 - map
|
||||
dw $29CE, $29CF, $29DE, $29DF ; 07 - map
|
||||
dw $29E8, $69E8, $29F8, $69F8 ; 08 - compass
|
||||
dw $29CA, $69CA, $29DA, $29DB ; 09 - small key
|
||||
dw $29C8, $69C8, $29D8, $29D9 ; 0A - big key
|
||||
dw $29ED, $69ED, $29FD, $69FD ; 0B - important inventory item - big chest
|
||||
dw $29CC, $29CD, $29DC, $69DC ; 0C - pendant
|
||||
dw $2DC9, $69C9, $A9C9, $EDC9 ; 0D - crystal
|
||||
dw $29E9, $69E9, $29F9, $69F9 ; 0E - triforce piece
|
||||
dw $29EA, $69EA, $29FA, $69FA ; 0F - triforce
|
||||
dw $29EA, $69EA, $29EB, $69EB ; 0F - triforce
|
||||
|
||||
warnpc $B9F900
|
||||
org $B9F900
|
||||
@@ -73,32 +73,29 @@ warnpc $B9FA00
|
||||
org $B9FA00
|
||||
; Room ID mappings to bit to check for presence and address of item drop
|
||||
MiscLocations:
|
||||
dw $10C8 : db $04 : dl HeartContainer_ArmosKnights
|
||||
dw $1033 : db $04 : dl HeartContainer_Lanmolas
|
||||
dw $1007 : db $04 : dl HeartContainer_Moldorm
|
||||
dw $00C8 : db $04 : dl HeartContainer_ArmosKnights
|
||||
dw $0033 : db $04 : dl HeartContainer_Lanmolas
|
||||
dw $0007 : db $04 : dl HeartContainer_Moldorm
|
||||
|
||||
dw $105A : db $04 : dl HeartContainer_HelmasaurKing
|
||||
dw $1006 : db $04 : dl HeartContainer_Arrghus
|
||||
dw $1029 : db $04 : dl HeartContainer_Mothula
|
||||
dw $10AC : db $04 : dl HeartContainer_Blind
|
||||
dw $10DE : db $04 : dl HeartContainer_Kholdstare
|
||||
dw $1090 : db $04 : dl HeartContainer_Vitreous
|
||||
dw $10A4 : db $04 : dl HeartContainer_Trinexx
|
||||
dw $005A : db $04 : dl HeartContainer_HelmasaurKing
|
||||
dw $0006 : db $04 : dl HeartContainer_Arrghus
|
||||
dw $0029 : db $04 : dl HeartContainer_Mothula
|
||||
dw $00AC : db $04 : dl HeartContainer_Blind
|
||||
dw $00DE : db $04 : dl HeartContainer_Kholdstare
|
||||
dw $0090 : db $04 : dl HeartContainer_Vitreous
|
||||
dw $00A4 : db $04 : dl HeartContainer_Trinexx
|
||||
|
||||
dw $1073 : db $05 : dl BonkKey_Desert ; torch
|
||||
dw $108C : db $05 : dl BonkKey_GTower ; torch
|
||||
dw $1087 : db $05 : dl StandingKey_Hera ; investigate
|
||||
|
||||
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 $0073 : db $05 : dl BonkKey_Desert ; torch
|
||||
dw $008C : db $05 : dl BonkKey_GTower ; torch
|
||||
dw $0087 : db $05 : dl StandingKey_Hera
|
||||
|
||||
dw $FFFF : db $FF : dl $FFFFFF ; Placeholders
|
||||
dw $FFFF : db $FF : dl $FFFFFF
|
||||
dw $FFFF : db $FF : dl $FFFFFF ; Aga 1? ($0020)
|
||||
dw $FFFF : db $FF : dl $FFFFFF ; Ice Armos? ($001C)
|
||||
dw $FFFF : db $FF : dl $FFFFFF ; Lanmolas 2? ($0033)
|
||||
dw $FFFF : db $FF : dl $FFFFFF ; Moldorm 2? ($004D)
|
||||
dw $FFFF : db $FF : dl $FFFFFF ; Aga 2? ($000D)
|
||||
dw $FFFF
|
||||
|
||||
warnpc $B9FA9A
|
||||
@@ -131,7 +128,7 @@ pad $B9FB00
|
||||
|
||||
; $B9FB00
|
||||
DungeonLabels:
|
||||
dw $25A4, $2579 ; Sewers
|
||||
dw $2550, $2579 ; Sewers
|
||||
dw $2564, $255F ; Hyrule Castle
|
||||
dw $2561, $256C ; Eastern Palace
|
||||
dw $2560, $256C ; Desert Palace
|
||||
@@ -149,51 +146,9 @@ dw $25A4, $25A4 ; Reserved
|
||||
dw $25A4, $25A4 ; Reserved
|
||||
|
||||
; $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 - safety - 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
|
||||
org $B9FE00
|
||||
JunkTable:
|
||||
incsrc data/junk_items.asm
|
||||
|
||||
warnpc $B9FF00
|
||||
|
||||
org $B9FF00
|
||||
; $00 - do not show anything
|
||||
; $01 - show presence of supertile as dark square
|
||||
@@ -212,9 +167,7 @@ ShowRooms:
|
||||
.visited_tile
|
||||
db $04
|
||||
.reserved
|
||||
skip 3
|
||||
.dark_room_cap
|
||||
db $01
|
||||
skip 4
|
||||
warnpc $B9FF08
|
||||
|
||||
org $B9FF08
|
||||
@@ -231,11 +184,7 @@ ShowItems:
|
||||
.visited_tile
|
||||
db $01
|
||||
.reserved
|
||||
skip 2
|
||||
.hud_cap
|
||||
db $FF
|
||||
.cave_cap
|
||||
db $01
|
||||
skip 4
|
||||
warnpc $B9FF10
|
||||
|
||||
org $B9FF10
|
||||
@@ -253,9 +202,7 @@ AlwaysShowCompass:
|
||||
db $01
|
||||
|
||||
; $B9FF12
|
||||
ShowLootOnMap:
|
||||
db $01
|
||||
|
||||
; $B9FF13
|
||||
ShowLootInHUD:
|
||||
db $01
|
||||
; $0000 - vanilla 5x5 maps
|
||||
; $0001 - special DR 4x3 maps
|
||||
DungeonMapMode:
|
||||
dw $0000
|
||||
38
events.asm
38
events.asm
@@ -38,7 +38,7 @@ RTL
|
||||
OnPlayerDead:
|
||||
PHA
|
||||
JSL SetDeathWorldChecked
|
||||
JSL DynamicDropGFXClear
|
||||
JSL DynamicDropGFXClear
|
||||
JSL SetSilverBowMode
|
||||
JSL RefreshRainAmmo
|
||||
PLA
|
||||
@@ -79,20 +79,30 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnUncleItemGet:
|
||||
PHA
|
||||
|
||||
LDA.l EscapeAssist
|
||||
BIT.b #$04 : BEQ + : STA.l InfiniteMagic : +
|
||||
BIT.b #$02 : BEQ + : STA.l InfiniteBombs : +
|
||||
BIT.b #$01 : BEQ + : STA.l InfiniteArrows : +
|
||||
|
||||
LDA.l UncleItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
|
||||
PLA
|
||||
JSL Link_ReceiveItem
|
||||
|
||||
LDA.l ProgressIndicator : BNE +
|
||||
LDA.b #$01 : STA.l ProgressIndicator ; set rain state
|
||||
JSL SetEscapeAssist
|
||||
JSL RefreshRainAmmo
|
||||
LDA.l UncleRefill : BIT.b #$04 : BEQ + : LDA.b #$80 : STA.l MagicFiller : + ; refill magic
|
||||
LDA.l UncleRefill : BIT.b #$02 : BEQ + : LDA.b #50 : STA.l BombsFiller : + ; refill bombs
|
||||
LDA.l UncleRefill : BIT.b #$01 : BEQ + ; refill arrows
|
||||
LDA.b #70 : STA.l ArrowsFiller
|
||||
|
||||
; grant arrows if we started with a bow in retro mode
|
||||
LDA.l ArrowMode : BEQ +
|
||||
LDA.l RainDeathRefillRupeeBow : ORA.l RainDeathRefillRupeeBow+1 : BEQ +
|
||||
LDA.b #$01 : STA.l ArrowsFiller
|
||||
LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking ; enable bow toggle
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.l CurrentRupees : !ADD.l FreeUncleItemAmount : STA.l CurrentRupees ; rupee arrows, so also give the player some money to start
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
+
|
||||
LDA.l ProgressIndicator : BNE +
|
||||
LDA.b #$01 : STA.l ProgressIndicator ; handle rain state
|
||||
+
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnAga1Defeated:
|
||||
@@ -191,12 +201,12 @@ OnNewFile:
|
||||
STZ.w TreePullKills
|
||||
STZ.w TreePullHits
|
||||
STZ.w PrizePackIndexes
|
||||
STZ.w PrizePackIndexes+1
|
||||
STZ.w PrizePackIndexes+2
|
||||
STZ.w PrizePackIndexes+3
|
||||
STZ.w PrizePackIndexes+4
|
||||
STZ.w PrizePackIndexes+5
|
||||
STZ.w PrizePackIndexes+6
|
||||
STZ.w PrizePackIndexes+1
|
||||
STZ.w PrizePackIndexes+2
|
||||
STZ.w PrizePackIndexes+3
|
||||
STZ.w PrizePackIndexes+4
|
||||
STZ.w PrizePackIndexes+5
|
||||
STZ.w PrizePackIndexes+6
|
||||
LDA.b #$00 : STA.l MosaicLevel
|
||||
JSL InitRNGPointerTable
|
||||
PLP : PLX
|
||||
|
||||
12
follower.asm
12
follower.asm
@@ -23,7 +23,7 @@ JSL SpritePrep_OldManFollower : NOP #2 : db $F0 ; BEQ
|
||||
org $9DFF18
|
||||
JSL SpriteDraw_OldManFollower
|
||||
org $9EE9BC
|
||||
JSL OldMan_WaitForCollision
|
||||
JSL Follower_CheckMessageCollision
|
||||
org $9EE9CC
|
||||
JSL OldMan_BecomeFollower : NOP #2
|
||||
|
||||
@@ -631,15 +631,6 @@ SpriteDraw_OldManFollower:
|
||||
dw 0, 0 : db $AC, $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:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BCC .set_follower_and_despawn
|
||||
PLA : PLA
|
||||
@@ -857,7 +848,6 @@ RTL
|
||||
Kiki_DontScareTheMonke:
|
||||
LDA.b LinkJumping : BEQ .return
|
||||
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 LinkThud : BNE .no_spook
|
||||
.spook
|
||||
|
||||
@@ -1,261 +0,0 @@
|
||||
db $00 ; 00 - Fighter Sword and Shield
|
||||
db $00 ; 01 - Master Sword
|
||||
db $00 ; 02 - Tempered Sword
|
||||
db $00 ; 03 - Butter Sword
|
||||
db $00 ; 04 - Fighter Shield
|
||||
db $00 ; 05 - Fire Shield
|
||||
db $00 ; 06 - Mirror Shield
|
||||
db $00 ; 07 - Fire Rod
|
||||
db $00 ; 08 - Ice Rod
|
||||
db $00 ; 09 - Hammer
|
||||
db $00 ; 0A - Hookshot
|
||||
db $00 ; 0B - Bow
|
||||
db $00 ; 0C - Boomerang
|
||||
db $00 ; 0D - Powder
|
||||
db $00 ; 0E - Bottle Refill (bee)
|
||||
db $00 ; 0F - Bombos
|
||||
db $00 ; 10 - Ether
|
||||
db $00 ; 11 - Quake
|
||||
db $00 ; 12 - Lamp
|
||||
db $00 ; 13 - Shovel
|
||||
db $00 ; 14 - Flute
|
||||
db $00 ; 15 - Somaria
|
||||
db $00 ; 16 - Bottle
|
||||
db $00 ; 17 - Heartpiece
|
||||
db $00 ; 18 - Byrna
|
||||
db $00 ; 19 - Cape
|
||||
db $00 ; 1A - Mirror
|
||||
db $00 ; 1B - Glove
|
||||
db $00 ; 1C - Mitts
|
||||
db $00 ; 1D - Book
|
||||
db $00 ; 1E - Flippers
|
||||
db $00 ; 1F - Pearl
|
||||
db $00 ; 20 - Crystal
|
||||
db $00 ; 21 - Net
|
||||
db $00 ; 22 - Blue Mail
|
||||
db $00 ; 23 - Red Mail
|
||||
db $00 ; 24 - Small Key
|
||||
db $00 ; 25 - Compass
|
||||
db $00 ; 26 - Heart Container from 4/4
|
||||
db $01 ; 27 - Bomb
|
||||
db $01 ; 28 - 3 bombs
|
||||
db $00 ; 29 - Mushroom
|
||||
db $00 ; 2A - Red boomerang
|
||||
db $00 ; 2B - Full bottle (red)
|
||||
db $00 ; 2C - Full bottle (green)
|
||||
db $00 ; 2D - Full bottle (blue)
|
||||
db $00 ; 2E - Potion refill (red)
|
||||
db $00 ; 2F - Potion refill (green)
|
||||
db $00 ; 30 - Potion refill (blue)
|
||||
db $01 ; 31 - 10 bombs
|
||||
db $00 ; 32 - Big key
|
||||
db $00 ; 33 - Map
|
||||
db $01 ; 34 - 1 rupee
|
||||
db $01 ; 35 - 5 rupees
|
||||
db $01 ; 36 - 20 rupees
|
||||
db $00 ; 37 - Green pendant
|
||||
db $00 ; 38 - Blue pendant
|
||||
db $00 ; 39 - Red pendant
|
||||
db $00 ; 3A - Tossed bow
|
||||
db $00 ; 3B - Silvers
|
||||
db $00 ; 3C - Full bottle (bee)
|
||||
db $00 ; 3D - Full bottle (fairy)
|
||||
db $00 ; 3E - Boss heart
|
||||
db $00 ; 3F - Sanc heart
|
||||
db $01 ; 40 - 100 rupees
|
||||
db $01 ; 41 - 50 rupees
|
||||
db $01 ; 42 - Heart
|
||||
db $01 ; 43 - Arrow
|
||||
db $01 ; 44 - 10 arrows
|
||||
db $01 ; 45 - Small magic
|
||||
db $01 ; 46 - 300 rupees
|
||||
db $01 ; 47 - 20 rupees green
|
||||
db $00 ; 48 - Full bottle (good bee)
|
||||
db $00 ; 49 - Tossed fighter sword
|
||||
db $00 ; 4A - Active Flute
|
||||
db $00 ; 4B - Boots
|
||||
|
||||
db $00 ; 4C - Bomb capacity (50)
|
||||
db $00 ; 4D - Arrow capacity (70)
|
||||
db $00 ; 4E - 1/2 magic
|
||||
db $00 ; 4F - 1/4 magic
|
||||
db $00 ; 50 - Safe master sword
|
||||
db $00 ; 51 - Bomb capacity (+5)
|
||||
db $00 ; 52 - Bomb capacity (+10)
|
||||
db $00 ; 53 - Arrow capacity (+5)
|
||||
db $00 ; 54 - Arrow capacity (+10)
|
||||
db $00 ; 55 - Programmable item 1
|
||||
db $00 ; 56 - Programmable item 2
|
||||
db $00 ; 57 - Programmable item 3
|
||||
db $00 ; 58 - Upgrade-only silver arrows
|
||||
db $01 ; 59 - Rupoor
|
||||
db $01 ; 5A - Nothing
|
||||
db $00 ; 5B - Red clock
|
||||
db $00 ; 5C - Blue clock
|
||||
db $00 ; 5D - Green clock
|
||||
db $00 ; 5E - Progressive sword
|
||||
db $00 ; 5F - Progressive shield
|
||||
db $00 ; 60 - Progressive armor
|
||||
db $00 ; 61 - Progressive glove
|
||||
db $00 ; 62 - RNG pool item (single)
|
||||
db $00 ; 63 - RNG pool item (multi)
|
||||
db $00 ; 64 - Progressive bow
|
||||
db $00 ; 65 - Progressive bow
|
||||
db $00 ; 66 -
|
||||
db $00 ; 67 -
|
||||
db $00 ; 68 -
|
||||
db $00 ; 69 -
|
||||
db $00 ; 6A - Triforce
|
||||
db $01 ; 6B - Power star
|
||||
db $01 ; 6C - Triforce Piece
|
||||
db $00 ; 6D - Server request item
|
||||
db $00 ; 6E - Server request item (dungeon drop)
|
||||
db $00 ; 6F -
|
||||
|
||||
db $00 ; 70 - Map of Light World
|
||||
db $00 ; 71 - Map of Dark World
|
||||
db $00 ; 72 - Map of Ganon's Tower
|
||||
db $00 ; 73 - Map of Turtle Rock
|
||||
db $00 ; 74 - Map of Thieves' Town
|
||||
db $00 ; 75 - Map of Tower of Hera
|
||||
db $00 ; 76 - Map of Ice Palace
|
||||
db $00 ; 77 - Map of Skull Woods
|
||||
db $00 ; 78 - Map of Misery Mire
|
||||
db $00 ; 79 - Map of Dark Palace
|
||||
db $00 ; 7A - Map of Swamp Palace
|
||||
db $00 ; 7B - Map of Agahnim's Tower
|
||||
db $00 ; 7C - Map of Desert Palace
|
||||
db $00 ; 7D - Map of Eastern Palace
|
||||
db $00 ; 7E - Map of Hyrule Castle
|
||||
db $00 ; 7F - Map of Sewers
|
||||
|
||||
db $00 ; 80 - Compass of Light World
|
||||
db $00 ; 81 - Compass of Dark World
|
||||
db $00 ; 82 - Compass of Ganon's Tower
|
||||
db $00 ; 83 - Compass of Turtle Rock
|
||||
db $00 ; 84 - Compass of Thieves' Town
|
||||
db $00 ; 85 - Compass of Tower of Hera
|
||||
db $00 ; 86 - Compass of Ice Palace
|
||||
db $00 ; 87 - Compass of Skull Woods
|
||||
db $00 ; 88 - Compass of Misery Mire
|
||||
db $00 ; 89 - Compass of Dark Palace
|
||||
db $00 ; 8A - Compass of Swamp Palace
|
||||
db $00 ; 8B - Compass of Agahnim's Tower
|
||||
db $00 ; 8C - Compass of Desert Palace
|
||||
db $00 ; 8D - Compass of Eastern Palace
|
||||
db $00 ; 8E - Compass of Hyrule Castle
|
||||
db $00 ; 8F - Compass of Sewers
|
||||
|
||||
db $00 ; 90 - Skull key
|
||||
db $00 ; 91 - Reserved
|
||||
db $00 ; 92 - Big key of Ganon's Tower
|
||||
db $00 ; 93 - Big key of Turtle Rock
|
||||
db $00 ; 94 - Big key of Thieves' Town
|
||||
db $00 ; 95 - Big key of Tower of Hera
|
||||
db $00 ; 96 - Big key of Ice Palace
|
||||
db $00 ; 97 - Big key of Skull Woods
|
||||
db $00 ; 98 - Big key of Misery Mire
|
||||
db $00 ; 99 - Big key of Dark Palace
|
||||
db $00 ; 9A - Big key of Swamp Palace
|
||||
db $00 ; 9B - Big key of Agahnim's Tower
|
||||
db $00 ; 9C - Big key of Desert Palace
|
||||
db $00 ; 9D - Big key of Eastern Palace
|
||||
db $00 ; 9E - Big key of Hyrule Castle
|
||||
db $00 ; 9F - Big key of Sewers
|
||||
|
||||
db $00 ; A0 - Small key of Sewers
|
||||
db $00 ; A1 - Small key of Hyrule Castle
|
||||
db $00 ; A2 - Small key of Eastern Palace
|
||||
db $00 ; A3 - Small key of Desert Palace
|
||||
db $00 ; A4 - Small key of Agahnim's Tower
|
||||
db $00 ; A5 - Small key of Swamp Palace
|
||||
db $00 ; A6 - Small key of Dark Palace
|
||||
db $00 ; A7 - Small key of Misery Mire
|
||||
db $00 ; A8 - Small key of Skull Woods
|
||||
db $00 ; A9 - Small key of Ice Palace
|
||||
db $00 ; AA - Small key of Tower of Hera
|
||||
db $00 ; AB - Small key of Thieves' Town
|
||||
db $00 ; AC - Small key of Turtle Rock
|
||||
db $00 ; AD - Small key of Ganon's Tower
|
||||
db $00 ; AE - Reserved
|
||||
db $00 ; AF - Generic small key
|
||||
db $00 ; B0 - Crystal 6
|
||||
db $00 ; B1 - Crystal 1
|
||||
db $00 ; B2 - Crystal 5
|
||||
db $00 ; B3 - Crystal 7
|
||||
db $00 ; B4 - Crystal 2
|
||||
db $00 ; B5 - Crystal 4
|
||||
db $00 ; B6 - Crystal 3
|
||||
db $00 ; B7 - Reserved
|
||||
db $00 ; B8 -
|
||||
db $00 ; B9 -
|
||||
db $00 ; BA -
|
||||
db $00 ; BB -
|
||||
db $00 ; BC -
|
||||
db $00 ; BD -
|
||||
db $00 ; BE -
|
||||
db $00 ; BF -
|
||||
db $00 ; C0 -
|
||||
db $00 ; C1 -
|
||||
db $00 ; C2 -
|
||||
db $00 ; C3 -
|
||||
db $00 ; C4 -
|
||||
db $00 ; C5 -
|
||||
db $00 ; C6 -
|
||||
db $00 ; C7 -
|
||||
db $00 ; C8 -
|
||||
db $00 ; C9 -
|
||||
db $00 ; CA -
|
||||
db $00 ; CB -
|
||||
db $00 ; CC -
|
||||
db $00 ; CD -
|
||||
db $00 ; CE -
|
||||
db $00 ; CF -
|
||||
db $01 ; D0 - Bee trap
|
||||
db $01 ; D1 - Apples
|
||||
db $01 ; D2 - Fairy
|
||||
db $01 ; D3 - Chicken
|
||||
db $01 ; D4 - Big Magic
|
||||
db $01 ; D5 - 5 Arrows
|
||||
db $01 ; D6 - Good Bee
|
||||
db $00 ; D7 -
|
||||
db $00 ; D8 -
|
||||
db $00 ; D9 -
|
||||
db $00 ; DA -
|
||||
db $00 ; DB -
|
||||
db $00 ; DC -
|
||||
db $00 ; DD -
|
||||
db $00 ; DE -
|
||||
db $00 ; DF -
|
||||
db $00 ; E0 -
|
||||
db $00 ; E1 -
|
||||
db $00 ; E2 -
|
||||
db $00 ; E3 -
|
||||
db $00 ; E4 -
|
||||
db $00 ; E5 -
|
||||
db $00 ; E6 -
|
||||
db $00 ; E7 -
|
||||
db $00 ; E8 -
|
||||
db $00 ; E9 -
|
||||
db $00 ; EA -
|
||||
db $00 ; EB -
|
||||
db $00 ; EC -
|
||||
db $00 ; ED -
|
||||
db $00 ; EE -
|
||||
db $00 ; EF -
|
||||
db $00 ; F0 -
|
||||
db $00 ; F1 -
|
||||
db $00 ; F2 -
|
||||
db $00 ; F3 -
|
||||
db $00 ; F4 -
|
||||
db $00 ; F5 -
|
||||
db $00 ; F6 -
|
||||
db $00 ; F7 -
|
||||
db $00 ; F8 -
|
||||
db $00 ; F9 -
|
||||
db $00 ; FA -
|
||||
db $00 ; FB -
|
||||
db $00 ; FC -
|
||||
db $00 ; FD -
|
||||
db $00 ; FE - Server request (async)
|
||||
db $00 ; FF -
|
||||
@@ -1,50 +0,0 @@
|
||||
LoadDungeonIndicator:
|
||||
; what we wrote over
|
||||
JSL InitializeTilesets
|
||||
|
||||
LDA.w DungeonID
|
||||
CMP.b #DungeonIndicatorMap_end-DungeonIndicatorMap : BCS .done
|
||||
TAX
|
||||
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
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
SetItemRiseTimer:
|
||||
LDA.w ItemReceiptMethod : CMP.b #$01 : BNE .not_from_chest
|
||||
LDA.b #$38 : STA.w AncillaTimer, X
|
||||
RTL
|
||||
|
||||
.not_from_chest
|
||||
JSL ItemIsJunk
|
||||
BEQ .default
|
||||
|
||||
.junk
|
||||
LDA.l JunkItemTimer : AND.b #$3F : STA.w AncillaTimer, X
|
||||
RTL
|
||||
|
||||
.default
|
||||
TYA : STA.w AncillaTimer, X ; What we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
ItemIsJunk:
|
||||
PHX
|
||||
LDA.l JunkItemTimer : BIT.b #$3F : BEQ .not_junk
|
||||
BIT.b #$80 : BNE .check
|
||||
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .check
|
||||
LDA.l !MULTIWORLD_RECEIVING_ITEM : BNE .check
|
||||
BRA .not_junk
|
||||
|
||||
.check
|
||||
LDA.w AncillaGet, X
|
||||
TAX
|
||||
LDA.l JunkTable, X
|
||||
PLX
|
||||
CMP.b #$00
|
||||
RTL
|
||||
|
||||
.not_junk
|
||||
PLX
|
||||
LDA.b #$00
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; A = item id being collected
|
||||
ItemGetAlternateSFX:
|
||||
PEA.w $C567 ; SNES to RTS to in bank 08
|
||||
LDA.w AncillaGet, X : CMP.b #$4A : BNE +
|
||||
; collecting pre-activated flute
|
||||
LDA.b #$13 : JML Ancilla_SFX2_Near
|
||||
+
|
||||
JSL ItemIsJunk : BEQ .normal
|
||||
LDA.b #$3B : JML Ancilla_SFX3_Near
|
||||
.normal
|
||||
LDA.b #$0F : JML Ancilla_SFX3_Near
|
||||
;--------------------------------------------------------------------------------
|
||||
; A = item id being collected
|
||||
ItemGetOverworldAlternateSFX:
|
||||
CPY.b #$4A : BNE +
|
||||
; pre-activated flute
|
||||
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$13 : STA.w SFX2
|
||||
RTL
|
||||
+
|
||||
JSL ItemIsJunk : BEQ .normal
|
||||
.junk
|
||||
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$3B : STA.w SFX3
|
||||
RTL
|
||||
.normal
|
||||
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$0F : STA.w SFX3
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
117
gk/loot_hud.asm
117
gk/loot_hud.asm
@@ -1,117 +0,0 @@
|
||||
pushpc
|
||||
org $828C73
|
||||
JSL EnterRoom
|
||||
NOP
|
||||
|
||||
org $86C0AB
|
||||
JSL CollectHeartPieceAndUpdate
|
||||
|
||||
org $86D1A8
|
||||
JSL SetDeathFlagAndUpdate
|
||||
|
||||
pullpc
|
||||
|
||||
SetDeathFlagAndUpdate:
|
||||
JSL UpdateLootHUD
|
||||
JSL Sprite_ManuallySetDeathFlagUW
|
||||
RTL
|
||||
|
||||
CollectHeartPieceAndUpdate:
|
||||
JSL $85F018
|
||||
JSL UpdateLootHUD
|
||||
RTL
|
||||
|
||||
ClearLootHUD:
|
||||
LDA.b GameMode
|
||||
CMP.b #$07
|
||||
BNE UpdateLootHUD
|
||||
;
|
||||
PHP
|
||||
REP #$20
|
||||
LDA.w #!BlankTile : STA.w EnemyDropIndicator
|
||||
PLP
|
||||
RTL
|
||||
|
||||
EnterRoom:
|
||||
; what we wrote over
|
||||
STZ.w $0200
|
||||
STZ.b $B0
|
||||
|
||||
; fall into UpdateLootHUD
|
||||
|
||||
UpdateLootHUD:
|
||||
PHP
|
||||
REP #$30
|
||||
PHX : PHY
|
||||
SEP #$30
|
||||
|
||||
LDA.l ShowLootInHUD : BEQ .setting_off
|
||||
LDA.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 CheckLoot
|
||||
|
||||
SEP #$30
|
||||
CMP.l ShowItems_hud_cap
|
||||
BCC +
|
||||
LDA.l ShowItems_hud_cap
|
||||
+
|
||||
|
||||
LDX.w DungeonID
|
||||
CPX.b #$FF
|
||||
BNE +
|
||||
CMP.l ShowItems_cave_cap
|
||||
BCC +
|
||||
LDA.l ShowItems_cave_cap
|
||||
+
|
||||
|
||||
REP #$30
|
||||
|
||||
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
|
||||
26
gk_meta.asm
26
gk_meta.asm
@@ -1,26 +0,0 @@
|
||||
org $B9EE00
|
||||
|
||||
;================================================================================
|
||||
warnpc $B9EEE0
|
||||
org $B9EEE0
|
||||
;--------------------------------------------------------------------------------
|
||||
B9Source:
|
||||
; $01 = GK Baserom
|
||||
; $FF = GK Adjuster Patch
|
||||
db $01
|
||||
;--------------------------------------------------------------------------------
|
||||
GKRomVersion:
|
||||
; $01 = Dungeon Maps
|
||||
; .., $01 = Dark rooms don't show on map from visition
|
||||
; .., $02 = OW Fog and Grid modes
|
||||
; .., $03 = Loot level of current supertile in HUD
|
||||
db $01, $03, $00
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
warnpc $B9EEF0
|
||||
org $B9EEF0
|
||||
GKRandomizerVersion:
|
||||
padbyte $00
|
||||
pad $B9EF00
|
||||
;--------------------------------------------------------------------------------
|
||||
73
goalitem.asm
73
goalitem.asm
@@ -40,14 +40,14 @@ RTL
|
||||
dw .crystals
|
||||
dw .pendant_bosses
|
||||
dw .crystal_bosses
|
||||
dw .prize_bosses
|
||||
dw .bosses
|
||||
dw .agahnim_defeated
|
||||
dw .agahnim2_defeated
|
||||
dw .goal_item
|
||||
dw .collection_rate
|
||||
dw .custom_goal
|
||||
dw .bingo
|
||||
dw .all_bosses
|
||||
dw .success
|
||||
dw .success
|
||||
dw .success
|
||||
dw .success
|
||||
@@ -70,24 +70,19 @@ RTL
|
||||
CMP.b #$07 : RTS
|
||||
.pendant_bosses
|
||||
PHP
|
||||
LDA.b #$20
|
||||
LDA.b #$02
|
||||
JSR CheckForBossesDefeated : PLP : BCC +
|
||||
CMP.b #$03 : RTS
|
||||
.crystal_bosses
|
||||
PHP
|
||||
LDA.b #$10
|
||||
LDA.b #$01
|
||||
JSR CheckForBossesDefeated : PLP : BCC +
|
||||
CMP.b #$07 : RTS
|
||||
.all_bosses
|
||||
PHP
|
||||
LDA.b #$30
|
||||
JSR CheckForBossesDefeated : PLP : BCC +
|
||||
CMP.b #$10 : RTS
|
||||
.prize_bosses
|
||||
.bosses
|
||||
PHP
|
||||
LDA.b #$00
|
||||
JSR CheckForBossesDefeated : PLP : BCC +
|
||||
CMP.b #$0A : RTS
|
||||
CMP.b #$10 : RTS
|
||||
+ CMP.b [Scrap00], Y : INY : RTS
|
||||
.agahnim_defeated
|
||||
LDA.l ProgressIndicator : CMP.b #$03 : RTS
|
||||
@@ -351,7 +346,7 @@ CheckTowerOpen:
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
CheckAgaForPed:
|
||||
REP #$20
|
||||
; seems light_speed option to force blue balls is unused for now
|
||||
; seems light_speed option to force blue balls is unused for now
|
||||
BRA .vanilla
|
||||
|
||||
.light_speed
|
||||
@@ -373,38 +368,12 @@ CheckAgaForPed:
|
||||
RTL
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
BossPrizeFlags:
|
||||
; $00 = all prize bosses
|
||||
db $00
|
||||
db $01, $01, $01, $01, $01, $01, $01 ; crystals
|
||||
db $01, $01, $01 ; pendants
|
||||
db $00, $00, $00, $00, $00 ; padding
|
||||
; $10 = all crystal bosses
|
||||
db $00
|
||||
db $01, $01, $01, $01, $01, $01, $01 ; crystals
|
||||
db $00, $00, $00 ; pendants
|
||||
db $00, $00, $00, $00, $00 ; padding
|
||||
; $20 = all pendant bosses
|
||||
db $00
|
||||
db $00, $00, $00, $00, $00, $00, $00 ; crystals
|
||||
db $01, $01, $01 ; pendants
|
||||
db $00, $00, $00, $00, $00 ; padding
|
||||
; $30 = all bosses
|
||||
db $01 ; agas
|
||||
db $01, $01, $01, $01, $01, $01, $01 ; crystals
|
||||
db $01, $01, $01 ; pendants
|
||||
db $00, $00, $00, $00, $00 ; padding
|
||||
|
||||
CheckForBossesDefeated:
|
||||
PHB : PHX : PHY
|
||||
|
||||
; $00 = check prize bosses
|
||||
; $10 = check crystal bosses
|
||||
; $20 = check pendant bosses
|
||||
; $30 = check all bosses
|
||||
STA.b Scrap04
|
||||
STA.b Scrap04 ; 0 = check all, 1 = check crystals, 2 = check pendants
|
||||
|
||||
LDA.b #bank(CrystalPendantFlags_3)
|
||||
LDA.b #CrystalPendantFlags_3>>16
|
||||
PHA : PLB
|
||||
|
||||
STZ.b Scrap03 ; count of number of bosses killed
|
||||
@@ -412,22 +381,22 @@ CheckForBossesDefeated:
|
||||
|
||||
REP #$30
|
||||
|
||||
LDY.w #11
|
||||
LDY.w #10
|
||||
|
||||
.next_check
|
||||
SEP #$30
|
||||
LDA.w CrystalPendantFlags_3+2, Y
|
||||
CLC : ADC.b Scrap04
|
||||
TAX
|
||||
LDA.l BossPrizeFlags, X
|
||||
REP #$30
|
||||
BEQ .skip
|
||||
LDA.w CrystalPendantFlags_3+2,Y : AND.w #$00FF : BEQ .skip
|
||||
CMP.w #$0008 ; C set = pendant, C clear = crystal
|
||||
LDA.b Scrap04 : BEQ .proceed
|
||||
PHP : ROR : BCC +
|
||||
PLP : BCS .skip : BRA .proceed
|
||||
+ PLP : BCC .skip
|
||||
|
||||
TYA : ASL A : TAX
|
||||
.proceed
|
||||
TYA : ASL : TAX
|
||||
|
||||
LDA.l DungeonMapBossRooms+4, X
|
||||
ASL A : TAX
|
||||
LDA.l RoomDataWRAM.l, X
|
||||
LDA.l DungeonMapBossRooms+4,X
|
||||
ASL : TAX
|
||||
LDA.l RoomDataWRAM.l,X
|
||||
|
||||
AND.w #$0800 : BEQ .skip
|
||||
INC.b Scrap03
|
||||
|
||||
35
hooks.asm
35
hooks.asm
@@ -120,7 +120,7 @@ JSL AddBonkTremors : NOP #4
|
||||
; Bonk Breakable Walls
|
||||
;--------------------------------------------------------------------------------
|
||||
org $81CF8E ; CF8E <- Bank01.asm : 11641 (LDA $0372 : AND.w #$00FF)
|
||||
JSL ValidDashCheck : NOP #2
|
||||
JSL BonkBreakableWall : NOP #2
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
@@ -139,11 +139,6 @@ GravestoneHook_continue:
|
||||
org $87C106
|
||||
moveGravestone:
|
||||
;--------------------------------------------------------------------------------
|
||||
org $899A30
|
||||
JSL ValidDashCheck : NOP #2
|
||||
org $899A3A
|
||||
JSL ValidDashCheck : NOP #2
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
; Jump Down Ledge
|
||||
@@ -1117,8 +1112,7 @@ JSL CompareBombsToMax : NOP #11
|
||||
org $85FC7E ; <- 2FC7E - sprite_dash_item.asm : 118 (LDA $7EF36F : INC A : STA $7EF36F)
|
||||
JSL GiveBonkItem : NOP #5
|
||||
org $85FC97 ; <- 2FC97 - sprite_dash_item.asm : 126 (LDA.b #$2F : JSL Sound_SetSfx3PanLong)
|
||||
JSL UpdateLootHUD
|
||||
NOP #2
|
||||
NOP #6
|
||||
;--------------------------------------------------------------------------------
|
||||
org $868D39 ; <- 30D39 - sprite_prep.asm : 1435 - (LDA.b #$08 : STA $0F50, X)
|
||||
JSL LoadBonkItemGFX
|
||||
@@ -1644,8 +1638,7 @@ JSL FixAga2Bunny : NOP
|
||||
; Open Mode Fixes
|
||||
;--------------------------------------------------------------------------------
|
||||
org $85DF65 ; <- 2DF65 - sprite_uncle_and_priest.asm:994 - (LDA.b #$01 : STA $7EF3C5)
|
||||
JSL UpdateLootHUD
|
||||
NOP #2
|
||||
NOP #6
|
||||
;--------------------------------------------------------------------------------
|
||||
org $85EDDF ; <- 2EDDF - sprite_zelda.asm:398 - (LDA.b #$02 : STA $7EF3C5)
|
||||
JSL EndRainState : NOP #2
|
||||
@@ -2109,11 +2102,6 @@ JSL FlipperScrollWarp
|
||||
;--------------------------------------------------------------------------------
|
||||
;org $878F51 ; <- 38F51 - Bank07.asm:2444 (JSR $AE54 ; $3AE54 IN ROM)
|
||||
;JSL OnEnterWater : NOP
|
||||
;--------------------------------------------------------------------------------
|
||||
; Fixes getting bumped while swimming, unable to screen transition
|
||||
org $879632
|
||||
LinkState_Swimming:
|
||||
JSL FixSwimBump
|
||||
;================================================================================
|
||||
; Floodgate Softlock Fix
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -2760,23 +2748,6 @@ JSL MimicDirection
|
||||
org $828068
|
||||
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
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -165,7 +165,6 @@ AddInventory:
|
||||
LDA.l !MULTIWORLD_RECEIVING_ITEM : BNE .done
|
||||
REP #$30
|
||||
LDA.l TotalItemCounter : INC : TAY
|
||||
JSL UpdateLootHUD
|
||||
LDA.l BootsEquipment : AND.w #$00FF : BNE +
|
||||
TYA : STA.l PreBootsLocations
|
||||
+
|
||||
@@ -793,13 +792,45 @@ RTL
|
||||
}
|
||||
;--------------------------------------------------------------------------------
|
||||
MaybePlaySelectSFX:
|
||||
LDA.w DungeonID : BMI .not_dungeon
|
||||
.play
|
||||
LDA.b #$20 : STA.w SFX3 ; menu select sound
|
||||
RTL
|
||||
.not_dungeon
|
||||
LDA.l HUDDungeonItems : BIT.b #$13 : BEQ .dont_play
|
||||
BIT.b #$0C : BEQ .dont_play
|
||||
BRA .play
|
||||
.dont_play
|
||||
LDA.w DungeonID : BMI .not_dungeon
|
||||
.play
|
||||
LDA.b #$20 : STA.w SFX3 ; menu select sound
|
||||
RTL
|
||||
.not_dungeon
|
||||
LDA.l HUDDungeonItems : BIT.b #$13 : BEQ .dont_play
|
||||
BIT.b #$0C : BEQ .dont_play
|
||||
BRA .play
|
||||
.dont_play
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
; A = item id being collected
|
||||
ItemGetAlternateSFX:
|
||||
PEA.w $C567 ; SNES to RTS to in bank 08
|
||||
LDA.w AncillaGet, X : CMP.b #$4A : BNE +
|
||||
; collecting pre-activated flute
|
||||
LDA.b #$13 : JML Ancilla_SFX2_Near
|
||||
+ ; not pre-activated flute
|
||||
JSL.l ItemIsJunk : BEQ .normal
|
||||
|
||||
.junk
|
||||
LDA.b #$3B : JML Ancilla_SFX3_Near ; what we wrote over
|
||||
|
||||
.normal
|
||||
LDA.b #$0F : JML Ancilla_SFX3_Near ; what we wrote over
|
||||
|
||||
; A = item id being collected
|
||||
ItemGetOverworldAlternateSFX:
|
||||
CPY.b #$4A : BNE +
|
||||
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$13 : STA.w SFX2
|
||||
RTL
|
||||
+ ; normal itemget sfx
|
||||
JSL.l ItemIsJunk : BEQ .normal
|
||||
|
||||
.junk
|
||||
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$3B : STA.w SFX3
|
||||
RTL
|
||||
|
||||
.normal
|
||||
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$0F : STA.w SFX3 ; what we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -46,7 +46,7 @@ dw $7F7F
|
||||
|
||||
; Ganons Tower
|
||||
Notice_GTower:
|
||||
db $76 : dw "Ganon's Tower"
|
||||
db $76 : dw "Ganons Tower"
|
||||
dw $7F7F
|
||||
|
||||
; Turtle Rock
|
||||
@@ -81,7 +81,7 @@ dw $7F7F
|
||||
|
||||
; Dark Palace
|
||||
Notice_PoD:
|
||||
db $76 : dw "Palace of Darkness"
|
||||
db $76 : dw "Dark Palace"
|
||||
dw $7F7F
|
||||
|
||||
; Swamp Palace
|
||||
|
||||
@@ -89,8 +89,7 @@ org $80FDEE
|
||||
InitializeMirrorHDMA:
|
||||
|
||||
org $89D62E
|
||||
;commenting out since this address can move
|
||||
;UWSpritesPointers: ; 0x250 bytes for 0x128 rooms' 16-bit pointers
|
||||
UWSpritesPointers: ; 0x250 bytes for 0x128 rooms' 16-bit pointers
|
||||
|
||||
if !FEATURE_FIX_BASEROM
|
||||
org $81DB67
|
||||
@@ -221,8 +220,7 @@ RevealPotItem:
|
||||
STZ.w SpawnedItemIsMultiWorld
|
||||
BIT.b Scrap08
|
||||
BVS LoadMultiWorldPotItem
|
||||
BPL .normal_secret
|
||||
JMP LoadMajorPotItem
|
||||
BMI LoadMajorPotItem
|
||||
|
||||
.normal_secret
|
||||
STA.b Scrap08
|
||||
@@ -243,7 +241,6 @@ RevealPotItem:
|
||||
; Could increment GT Tower Pre Big Key but we aren't showing that stat right now
|
||||
+ REP #$10
|
||||
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter ; Increment Item Total
|
||||
JSL UpdateLootHUD
|
||||
LDA.w #$0001 : STA.l UpdateHUDFlag
|
||||
.obtained
|
||||
PLY : PLX
|
||||
@@ -343,7 +340,6 @@ IncrementCountsForSubstitute:
|
||||
; 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
|
||||
JSL UpdateLootHUD
|
||||
LDA.w #$0001 : STA.l UpdateHUDFlag
|
||||
.obtained
|
||||
SEP #$30 : PLX
|
||||
@@ -360,7 +356,7 @@ ClearSpriteData:
|
||||
STZ.w SprSourceItemId, X : STZ.w SprItemReceipt, X : STZ.w SprItemMWPlayer, X
|
||||
STZ.w SprRedrawFlag, X
|
||||
DEX : BPL .loop
|
||||
JSL ClearLootHUD
|
||||
JSR SetupEnemyDropIndicator
|
||||
PLX
|
||||
RTL
|
||||
|
||||
@@ -407,7 +403,7 @@ SetupEnemyDropIndicator:
|
||||
|
||||
.done
|
||||
SEP #$20
|
||||
RTL
|
||||
RTS
|
||||
|
||||
|
||||
; Runs during sprite load of the room
|
||||
@@ -574,7 +570,7 @@ IncrementCountForMinor:
|
||||
LDA.l SpriteDropData, X : BIT.b Scrap0A : BNE .obtained
|
||||
ORA.b Scrap0A : STA.l SpriteDropData, X
|
||||
SEP #$10
|
||||
JSL UpdateLootHUD
|
||||
JSR SetupEnemyDropIndicator
|
||||
REP #$20
|
||||
LDX.w DungeonID : CPX.b #$FF : BEQ +
|
||||
CPX.b #$00 : BNE ++
|
||||
@@ -630,10 +626,10 @@ MarkSRAMForItem:
|
||||
TYX
|
||||
LDA.w SpawnedItemFlag : CMP.w #$0001 : BEQ +
|
||||
LDA.l SpriteDropData, X : ORA.b Scrap00 : STA.l SpriteDropData, X
|
||||
SEP #$10 : JSR SetupEnemyDropIndicator
|
||||
BRA .end
|
||||
+ LDA.l RoomPotData, X : ORA.b Scrap00 : STA.l RoomPotData, X
|
||||
.end
|
||||
JSL UpdateLootHUD
|
||||
SEP #$30 : PLY : PLX
|
||||
LDA.w RoomItemsTaken
|
||||
RTL
|
||||
|
||||
@@ -43,6 +43,7 @@ RTL
|
||||
;================================================================================
|
||||
SetOverlayIfLamp:
|
||||
JSL LampCheck
|
||||
CMP.b #$00
|
||||
BEQ +
|
||||
LDA.b #$01
|
||||
+
|
||||
|
||||
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
menu/drfont.2bpp
BIN
menu/drfont.2bpp
Binary file not shown.
@@ -9,7 +9,7 @@ UploadMenuOnlyIcons:
|
||||
REP #$20
|
||||
LDA.w #MenuOnlyIcons : STA.w $4342
|
||||
LDA.w #$1801 : STA.w $4340
|
||||
LDA.w #$0310 : STA.w $4345
|
||||
LDA.w #$0240 : STA.w $4345
|
||||
LDA.w #$0F800>>1 : STA.w $2116
|
||||
|
||||
SEP #$20
|
||||
@@ -20,4 +20,4 @@ UploadMenuOnlyIcons:
|
||||
RTL
|
||||
|
||||
MenuOnlyIcons:
|
||||
incbin "drfont.2bpp"
|
||||
incbin "drfont.2bpp"
|
||||
Binary file not shown.
Binary file not shown.
@@ -40,7 +40,7 @@ dw $0000
|
||||
|
||||
warnpc $8ABE2E
|
||||
org $8ABE2E
|
||||
; located posx/posy, dislocated posx/posy, prize posx/posy
|
||||
; located posx/posy, dislocated posx/posy, prize pox/posy
|
||||
; located = proper location of icon (default: if you have map)
|
||||
; dislocated = location of icon if proper location is hidden from player
|
||||
; highest bit on first posx indicates which world it should show in
|
||||
@@ -49,27 +49,27 @@ WorldMapIcon_pos:
|
||||
.hc
|
||||
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
|
||||
.ep
|
||||
dw $0F40, $0660, $FF00, $FF00, $0F40, $0660
|
||||
dw $0F31, $0620, $FF00, $FF00, $0F31, $0620
|
||||
.dp
|
||||
dw $0140, $0D00, $FF00, $FF00, $0140, $0D00
|
||||
dw $0108, $0D70, $FF00, $FF00, $0108, $0D70
|
||||
.at
|
||||
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
|
||||
.sp
|
||||
dw $8778, $0F50, $FF00, $FF00, $8778, $0F50
|
||||
dw $8759, $0ED0, $FF00, $FF00, $8759, $0ED0
|
||||
.pod
|
||||
dw $8F40, $0660, $FF00, $FF00, $8F40, $0660
|
||||
dw $8F40, $0620, $FF00, $FF00, $8F40, $0620
|
||||
.mm
|
||||
dw $8148, $0D00, $FF00, $FF00, $8148, $0D00
|
||||
dw $8100, $0CA0, $FF00, $FF00, $8100, $0CA0
|
||||
.sw
|
||||
dw $80B0, $00C0, $FF00, $FF00, $80B0, $00C0
|
||||
dw $8082, $00B0, $FF00, $FF00, $8082, $00B0
|
||||
.ip
|
||||
dw $8CA0, $0E00, $FF00, $FF00, $8CA0, $0E00
|
||||
dw $8CA0, $0DA0, $FF00, $FF00, $8CA0, $0DA0
|
||||
.toh
|
||||
dw $0900, $0100, $FF00, $FF00, $0900, $0100
|
||||
dw $08D0, $0080, $FF00, $FF00, $08D0, $0080
|
||||
.tt
|
||||
dw $81F8, $0800, $FF00, $FF00, $81F8, $0800
|
||||
dw $81D0, $0780, $FF00, $FF00, $81D0, $0780
|
||||
.tr
|
||||
dw $8F20, $0100, $FF00, $FF00, $8F20, $0100
|
||||
dw $8F11, $0103, $FF00, $FF00, $8F11, $0103
|
||||
.gt
|
||||
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
|
||||
|
||||
@@ -262,8 +262,8 @@ DrawPrizesOverride:
|
||||
|
||||
; determine if draw and/or continue
|
||||
JSR WorldMap_ValidateCoords : BCS .advance
|
||||
JSR WorldMap_DrawTile
|
||||
JSR WorldMap_DrawTileOverlay
|
||||
JSR WorldMap_DrawTile
|
||||
.advance
|
||||
LDY.b Scrap05 : DEY #2 : BMI + : JMP .next_dungeon : +
|
||||
PLB
|
||||
@@ -321,35 +321,24 @@ RTS
|
||||
|
||||
WorldMap_DrawTile:
|
||||
LDA.b Scrap00 : PHA
|
||||
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
|
||||
SEP #$20
|
||||
LDX.b Scrap0B : TXA : STA.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
|
||||
PLA : STA.b Scrap00
|
||||
LDA.b Scrap0E : STA.b (OAMPtr)
|
||||
INC.b OAMPtr : INC.b OAMPtr
|
||||
LDA.b Scrap0C : STA.b (OAMPtr)
|
||||
INC.b OAMPtr : INC.b OAMPtr
|
||||
.exit
|
||||
PLA : STA.b Scrap00
|
||||
RTS
|
||||
|
||||
; Y - dungeon index
|
||||
@@ -434,117 +423,6 @@ WorldMap_CheckPrizeCollected:
|
||||
RTS
|
||||
|
||||
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
|
||||
|
||||
WorldMap_LoadChrHalfSlot:
|
||||
|
||||
@@ -123,11 +123,6 @@ GetMultiworldItem:
|
||||
BRL .return
|
||||
+
|
||||
|
||||
LDA.b LinkPushDirection
|
||||
BEQ +
|
||||
BRL .return
|
||||
+
|
||||
|
||||
LDA.l !MULTIWORLD_ITEM : BNE +
|
||||
BRL .return
|
||||
+
|
||||
|
||||
15
newhud.asm
15
newhud.asm
@@ -309,13 +309,13 @@ MagicMeterColorMasks:
|
||||
;================================================================================
|
||||
PrizeIconTiles_Transparent:
|
||||
dw $0000 ; no icon
|
||||
dw $2891 ; crystal 1
|
||||
dw $2892 ; crystal 2
|
||||
dw $2893 ; crystal 3
|
||||
dw $2894 ; crystal 4
|
||||
dw $2895 ; crystal 5
|
||||
dw $2896 ; crystal 6
|
||||
dw $2897 ; crystal 7
|
||||
dw $2978 ; crystal 1
|
||||
dw $2979 ; crystal 2
|
||||
dw $297A ; crystal 3
|
||||
dw $297B ; crystal 4
|
||||
dw $297C ; crystal 5
|
||||
dw $297D ; crystal 6
|
||||
dw $297E ; crystal 7
|
||||
dw $2963 ; green pendant
|
||||
dw $295E ; blue pendant
|
||||
dw $296E ; red pendant
|
||||
@@ -386,7 +386,6 @@ RTS
|
||||
;================================================================================
|
||||
DrawMapCounts:
|
||||
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
|
||||
BIT.b #$02 : BNE .draw_map_count
|
||||
|
||||
194
newitems.asm
194
newitems.asm
@@ -155,8 +155,8 @@ AddReceivedItemExpandedGetItem:
|
||||
PHA : LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BEQ +
|
||||
PLA : BRA .done
|
||||
+ PLA
|
||||
JSR ItemBehavior
|
||||
SEP #$30
|
||||
JSR ItemBehavior
|
||||
SEP #$30
|
||||
.done
|
||||
PLB : PLX
|
||||
LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over
|
||||
@@ -229,13 +229,13 @@ ItemBehavior:
|
||||
JSR .increment_sword
|
||||
RTS
|
||||
|
||||
.fighter_shield
|
||||
.fighter_shield
|
||||
.red_shield
|
||||
.mirror_shield
|
||||
SEP #$10
|
||||
LDA.l ProgressiveFlag : BEQ +
|
||||
LDA.l HighestShield : INC : TAX
|
||||
JSR .increment_shield
|
||||
LDA.l HighestShield : INC : TAX
|
||||
JSR .increment_shield
|
||||
+ RTS
|
||||
|
||||
.blue_mail
|
||||
@@ -269,7 +269,7 @@ ItemBehavior:
|
||||
.prog_shield
|
||||
SEP #$10
|
||||
LDA.l HighestShield : INC : TAX
|
||||
JSR .increment_shield
|
||||
JSR .increment_shield
|
||||
REP #$10
|
||||
RTS
|
||||
|
||||
@@ -282,13 +282,13 @@ ItemBehavior:
|
||||
|
||||
.bow
|
||||
BIT.b #$40 : BNE .silversbow
|
||||
LDA.b #$01 : STA.l BowEquipment
|
||||
LDA.b #$01 : STA.l BowEquipment
|
||||
RTS
|
||||
|
||||
.silversbow
|
||||
LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking
|
||||
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
|
||||
RTS
|
||||
@@ -331,16 +331,16 @@ ItemBehavior:
|
||||
.bow_and_arrows
|
||||
LDA.l BowTracking : BIT.b #$40 : BEQ .no_silvers
|
||||
LDA.l SilverArrowsUseRestriction : BNE .no_silvers
|
||||
LDA.l CurrentArrows : BEQ +
|
||||
LDA.b #04 : STA.l BowEquipment
|
||||
LDA.l CurrentArrows : BEQ +
|
||||
LDA.b #04 : STA.l BowEquipment
|
||||
BRA .store_bow
|
||||
+
|
||||
LDA.b #$03
|
||||
BRA .store_bow
|
||||
+
|
||||
LDA.b #$03
|
||||
BRA .store_bow
|
||||
.no_silvers
|
||||
LDA.l CurrentArrows : BEQ +
|
||||
LDA.b #02
|
||||
BRA .store_bow
|
||||
LDA.b #02
|
||||
BRA .store_bow
|
||||
+
|
||||
LDA.b #$01
|
||||
.store_bow
|
||||
@@ -350,13 +350,13 @@ ItemBehavior:
|
||||
.silver_bow
|
||||
LDA.b #$40 : ORA.l BowTracking : STA.l BowTracking
|
||||
LDA.l SilverArrowsUseRestriction : BNE .noequip
|
||||
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip
|
||||
LDA.l CurrentArrows : BNE + ; check arrows
|
||||
LDA.b #$03 : BRA ++ ; bow without arrow
|
||||
+
|
||||
LDA.b #$04 ; bow with arrow
|
||||
++
|
||||
STA.l BowEquipment
|
||||
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip
|
||||
LDA.l CurrentArrows : BNE + ; check arrows
|
||||
LDA.b #$03 : BRA ++ ; bow without arrow
|
||||
+
|
||||
LDA.b #$04 ; bow with arrow
|
||||
++
|
||||
STA.l BowEquipment
|
||||
.noequip
|
||||
RTS
|
||||
|
||||
@@ -385,7 +385,7 @@ ItemBehavior:
|
||||
.master_sword_safe
|
||||
SEP #$10
|
||||
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
|
||||
JSR .increment_sword
|
||||
@@ -426,20 +426,20 @@ ItemBehavior:
|
||||
.silver_arrows
|
||||
LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking
|
||||
LDA.l SilverArrowsUseRestriction : BNE ++
|
||||
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ ++
|
||||
LDA.l BowEquipment : BEQ ++ : CMP.b #$03 : !BGE +
|
||||
!ADD.b #$02 : STA.l BowEquipment ; switch to silver bow
|
||||
+
|
||||
++
|
||||
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ ++
|
||||
LDA.l BowEquipment : BEQ ++ : CMP.b #$03 : !BGE +
|
||||
!ADD.b #$02 : STA.l BowEquipment ; switch to silver bow
|
||||
+
|
||||
++
|
||||
LDA.l ArrowMode : BEQ +
|
||||
LDA.b #$01 : STA.l ArrowsFiller
|
||||
LDA.b #$01 : STA.l ArrowsFiller
|
||||
+
|
||||
RTS
|
||||
|
||||
.single_arrow
|
||||
LDA.l ArrowMode : BEQ +
|
||||
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.l CurrentArrows : INC : STA.l CurrentArrows ; Should be sole write to this address
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag ; in retro/rupee bow mode.
|
||||
+
|
||||
RTS
|
||||
|
||||
@@ -474,7 +474,7 @@ ItemBehavior:
|
||||
.triforce
|
||||
LDA.b OverworldIndex : CMP.b #$80 : BNE +
|
||||
LDA.b LinkPosX+1 : BNE +
|
||||
JSL ActivateGoal
|
||||
JSL ActivateGoal
|
||||
+
|
||||
RTS
|
||||
|
||||
@@ -484,10 +484,10 @@ ItemBehavior:
|
||||
LDA.l GoalCounter : INC : STA.l GoalCounter
|
||||
CMP.w GoalItemRequirement : BCC +
|
||||
LDA.l TurnInGoalItems : AND.w #$00FF : BNE +
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA.b OverworldIndex : CMP.b #$80 : BNE +
|
||||
LDA.b LinkPosX+1 : BNE +
|
||||
JSL ActivateGoal
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA.b OverworldIndex : CMP.b #$80 : BNE +
|
||||
LDA.b LinkPosX+1 : BNE +
|
||||
JSL ActivateGoal
|
||||
+
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
RTS
|
||||
@@ -559,8 +559,8 @@ ItemBehavior:
|
||||
LSR
|
||||
AND.w #$000F : TAX
|
||||
ASL : CMP.w DungeonID : BEQ .same_dungeon
|
||||
LDA.l DungeonKeys,X : INC : STA.l DungeonKeys,X
|
||||
RTS
|
||||
LDA.l DungeonKeys,X : INC : STA.l DungeonKeys,X
|
||||
RTS
|
||||
.same_dungeon
|
||||
SEP #$20
|
||||
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys : STA.l DungeonKeys,X
|
||||
@@ -575,69 +575,69 @@ ItemBehavior:
|
||||
|
||||
.hc_smallkey
|
||||
LDA.w DungeonID : CMP.b #$03 : BCC .same_dungeon_hc
|
||||
LDA.l HyruleCastleKeys : INC : STA.l HyruleCastleKeys
|
||||
LDA.l SewerKeys : INC : STA.l SewerKeys
|
||||
RTS
|
||||
LDA.l HyruleCastleKeys : INC : STA.l HyruleCastleKeys
|
||||
LDA.l SewerKeys : INC : STA.l SewerKeys
|
||||
RTS
|
||||
|
||||
.generic_smallkey
|
||||
LDA.l GenericKeys : BEQ .normal
|
||||
LDA.l CurrentSmallKeys : INC
|
||||
STA.l CurrentGenericKeys : STA.l CurrentSmallKeys
|
||||
RTS
|
||||
LDA.l CurrentSmallKeys : INC
|
||||
STA.l CurrentGenericKeys : STA.l CurrentSmallKeys
|
||||
RTS
|
||||
.normal
|
||||
LDA.w DungeonID : BMI +
|
||||
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys
|
||||
RTS
|
||||
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys
|
||||
RTS
|
||||
+
|
||||
RTS
|
||||
|
||||
.increment_sword
|
||||
LDA.l HighestSword
|
||||
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
|
||||
|
||||
.increment_shield
|
||||
LDA.l HighestShield
|
||||
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
|
||||
|
||||
.increment_mail
|
||||
LDA.l HighestMail
|
||||
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
|
||||
|
||||
.increment_bigkey
|
||||
SEP #$20
|
||||
LDA.l StatsLocked : BNE +
|
||||
LDA.l BigKeysBigChests
|
||||
CLC : ADC.b #$10
|
||||
STA.l BigKeysBigChests
|
||||
LDA.l BigKeysBigChests
|
||||
CLC : ADC.b #$10
|
||||
STA.l BigKeysBigChests
|
||||
+
|
||||
RTS
|
||||
|
||||
.increment_map
|
||||
SEP #$20
|
||||
LDA.l StatsLocked : BNE +
|
||||
LDA.l MapsCompasses
|
||||
CLC : ADC.b #$10
|
||||
STA.l MapsCompasses
|
||||
JSL MaybeFlagMapTotalPickup
|
||||
LDA.l MapsCompasses
|
||||
CLC : ADC.b #$10
|
||||
STA.l MapsCompasses
|
||||
JSL MaybeFlagMapTotalPickup
|
||||
+
|
||||
RTS
|
||||
|
||||
.increment_compass
|
||||
SEP #$20
|
||||
LDA.l StatsLocked : BNE +
|
||||
LDA.l MapsCompasses : INC : AND.b #$0F : TAX
|
||||
LDA.l MapsCompasses : AND.b #$F0 : STA.l MapsCompasses
|
||||
TXA : ORA.l MapsCompasses : STA.l MapsCompasses
|
||||
JSL MaybeFlagCompassTotalPickup
|
||||
LDA.l MapsCompasses : INC : AND.b #$0F : TAX
|
||||
LDA.l MapsCompasses : AND.b #$F0 : STA.l MapsCompasses
|
||||
TXA : ORA.l MapsCompasses : STA.l MapsCompasses
|
||||
JSL MaybeFlagCompassTotalPickup
|
||||
+
|
||||
RTS
|
||||
|
||||
@@ -647,7 +647,7 @@ ItemBehavior:
|
||||
SEC : SBC.b #$37
|
||||
TAX
|
||||
LDA.w PendantMasks,X : AND.l PendantsField : BNE +
|
||||
LDA.l PendantCounter : INC : STA.l PendantCounter
|
||||
LDA.l PendantCounter : INC : STA.l PendantCounter
|
||||
+
|
||||
RTS
|
||||
|
||||
@@ -663,15 +663,15 @@ ItemBehavior:
|
||||
LDA.w #$0000
|
||||
SEC
|
||||
-
|
||||
ROL
|
||||
DEX
|
||||
ROL
|
||||
DEX
|
||||
BPL -
|
||||
SEP #$20
|
||||
TAX
|
||||
AND.l CrystalsField : BNE +
|
||||
TXA
|
||||
ORA.l CrystalsField : STA.l CrystalsField
|
||||
LDA.l CrystalCounter : INC : STA.l CrystalCounter
|
||||
TXA
|
||||
ORA.l CrystalsField : STA.l CrystalsField
|
||||
LDA.l CrystalCounter : INC : STA.l CrystalCounter
|
||||
+
|
||||
.done
|
||||
RTS
|
||||
@@ -682,56 +682,56 @@ ItemBehavior:
|
||||
.bee_trap
|
||||
SEP #$30
|
||||
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+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 LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
|
||||
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 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
|
||||
+
|
||||
RTS
|
||||
|
||||
.good_bee
|
||||
SEP #$30
|
||||
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+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 LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
|
||||
JSL GoldBee_SpawnSelf_SetProperties
|
||||
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 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
|
||||
JSL GoldBee_SpawnSelf_SetProperties
|
||||
+
|
||||
RTS
|
||||
|
||||
.apples
|
||||
SEP #$30
|
||||
LDA.b #$AC : JSL Sprite_SpawnDynamically : BMI +
|
||||
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 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 LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
|
||||
LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire
|
||||
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 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 LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
|
||||
LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire
|
||||
+
|
||||
RTS
|
||||
|
||||
.fairy
|
||||
SEP #$30
|
||||
LDA.b #$E3 : JSL Sprite_SpawnDynamically : BMI +
|
||||
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 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 LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
|
||||
LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire
|
||||
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 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 LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
|
||||
LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire
|
||||
+
|
||||
RTS
|
||||
|
||||
.chicken
|
||||
SEP #$30
|
||||
LDA.b #$0B : JSL Sprite_SpawnDynamically : BMI +
|
||||
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 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 LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
|
||||
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 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 LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
|
||||
+
|
||||
RTS
|
||||
|
||||
@@ -804,7 +804,7 @@ ResolveLootID:
|
||||
CMP.l ProgressiveSwordLimit : BCC +
|
||||
LDA.l ProgressiveSwordReplacement
|
||||
JMP .get_item
|
||||
++ LDA.l SwordEquipment
|
||||
++ LDA.l SwordEquipment
|
||||
+
|
||||
TAX
|
||||
LDA.w .prog_sword_ids,X
|
||||
@@ -820,7 +820,7 @@ ResolveLootID:
|
||||
CMP.l ProgressiveShieldLimit : BCC +
|
||||
LDA.l ProgressiveShieldReplacement
|
||||
JMP .get_item
|
||||
++ LDA.l HighestShield
|
||||
++ LDA.l HighestShield
|
||||
+
|
||||
TAX
|
||||
LDA.w .shields_ids,X
|
||||
@@ -836,7 +836,7 @@ ResolveLootID:
|
||||
LDA.l ProgressiveArmorReplacement
|
||||
JMP .get_item
|
||||
+
|
||||
++ LDA.l ArmorEquipment
|
||||
++ LDA.l ArmorEquipment
|
||||
TAX
|
||||
LDA.w .armor_ids,X
|
||||
JMP .have_item
|
||||
@@ -1190,7 +1190,7 @@ MaybeFlagCompassTotalPickup:
|
||||
RTL
|
||||
|
||||
MaybeFlagMapTotalPickup:
|
||||
LDA.l MapHUDMode : AND.b #$0F : BEQ .done
|
||||
; LDA.l MapHUDMode : AND.b #$0F : BEQ .done
|
||||
LDA.w DungeonID : BMI .done
|
||||
LDA.w ItemReceiptID : CMP.b #$33 : BEQ .set_flag
|
||||
REP #$20
|
||||
@@ -1212,7 +1212,7 @@ MaybeFlagDungeonTotalsEntrance:
|
||||
LDA.l CompassMode : AND.w #$000F : BEQ .maps ; Skip if we're not showing compass counts
|
||||
JSR FlagCompassCount
|
||||
.maps
|
||||
LDA.l MapHUDMode : AND.w #$000F : BEQ .done
|
||||
LDA.l MapHUDMode : AND.w #$000F
|
||||
LDX.w DungeonID
|
||||
JSR FlagMapCount
|
||||
.done
|
||||
|
||||
30
npcitems.asm
30
npcitems.asm
@@ -90,17 +90,11 @@ ItemSet_FairySword:
|
||||
RTL
|
||||
|
||||
ItemSet_SmithSword:
|
||||
PHA
|
||||
LDA.l NpcFlags+1 : ORA.b #$04 : STA.l NpcFlags+1
|
||||
JSL UpdateLootHUD
|
||||
PLA
|
||||
PHA : LDA.l NpcFlags+1 : ORA.b #$04 : STA.l NpcFlags+1 : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_MagicBat:
|
||||
PHA
|
||||
LDA.l NpcFlags+1 : ORA.b #$80 : STA.l NpcFlags+1
|
||||
JSL UpdateLootHUD
|
||||
PLA
|
||||
PHA : LDA.l NpcFlags+1 : ORA.b #$80 : STA.l NpcFlags+1 : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_OldMan:
|
||||
@@ -116,10 +110,7 @@ RTL
|
||||
ItemSet_SickKid:
|
||||
PHA : LDA.l SickKidItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
|
||||
JSL Link_ReceiveItem ; thing we wrote over
|
||||
PHA
|
||||
LDA.l NpcFlags : ORA.b #$04 : STA.l NpcFlags
|
||||
JSL UpdateLootHUD
|
||||
PLA
|
||||
PHA : LDA.l NpcFlags : ORA.b #$04 : STA.l NpcFlags : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_TreeKid:
|
||||
@@ -131,10 +122,7 @@ RTL
|
||||
ItemSet_Sahasrala:
|
||||
PHA : LDA.l SahasralaItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
|
||||
JSL Link_ReceiveItem ; thing we wrote over
|
||||
PHA
|
||||
LDA.l NpcFlags : ORA.b #$10 : STA.l NpcFlags
|
||||
JSL UpdateLootHUD
|
||||
PLA
|
||||
PHA : LDA.l NpcFlags : ORA.b #$10 : STA.l NpcFlags : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_Catfish:
|
||||
@@ -144,10 +132,7 @@ RTL
|
||||
ItemSet_Library:
|
||||
PHA : LDA.l LibraryItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
|
||||
JSL Link_ReceiveItem ; thing we wrote over
|
||||
PHA
|
||||
LDA.l NpcFlags : ORA.b #$80 : STA.l NpcFlags
|
||||
JSL UpdateLootHUD
|
||||
PLA
|
||||
PHA : LDA.l NpcFlags : ORA.b #$80 : STA.l NpcFlags : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_Mushroom:
|
||||
@@ -164,10 +149,7 @@ ItemSet_Mushroom:
|
||||
RTL
|
||||
|
||||
ItemSet_Powder:
|
||||
PHA
|
||||
LDA.l NpcFlags+1 : ORA.b #$20 : STA.l NpcFlags+1
|
||||
JSL UpdateLootHUD
|
||||
PLA
|
||||
PHA : LDA.l NpcFlags+1 : ORA.b #$20 : STA.l NpcFlags+1 : PLA
|
||||
RTL
|
||||
;================================================================================
|
||||
|
||||
|
||||
408
owrando.asm
408
owrando.asm
@@ -6,18 +6,18 @@ OWFlags:
|
||||
dw 0
|
||||
OWReserved:
|
||||
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
|
||||
OWVersionInfo:
|
||||
dw $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000
|
||||
|
||||
;Hooks
|
||||
org $82a92C
|
||||
JSL OWDetectEdgeTransition ; JSL Link_CheckForEdgeScreenTransition
|
||||
org $82a929
|
||||
OWDetectTransitionReturn:
|
||||
|
||||
org $82a936
|
||||
OverworldHandleTransitions_PerformEdgeTransition:
|
||||
org $82a939
|
||||
OverworldHandleTransitions_SpecialTrigger:
|
||||
JSL OWDetectEdgeTransition
|
||||
BCS OWDetectTransitionReturn
|
||||
|
||||
org $82a999
|
||||
jsl OWEdgeTransition : nop #4 ;LDA $02A4E3,X : ORA $7EF3CA
|
||||
@@ -78,6 +78,8 @@ org $8ab7af ;LDA $F2 : ORA $F0 : AND #$C0
|
||||
jml OWFluteCancel2 : nop
|
||||
org $8ab90d ;JSL $02E99D
|
||||
jsl OWFluteCancel
|
||||
org $8ab816
|
||||
JSL OWMapFluteCancelIcon
|
||||
|
||||
; 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)
|
||||
@@ -104,36 +106,20 @@ jsl OWOldManSpeed
|
||||
org $8aba6c ; < ? - Bank0a.asm:474 ()
|
||||
jsl OWMapWorldCheck16 : nop
|
||||
|
||||
; Custom Overworld Map
|
||||
org $8ABA52
|
||||
JSL OverworldMap_InitGfx_InitScrap
|
||||
|
||||
; Mixed Overworld Map
|
||||
org $8ABA99
|
||||
WorldMap_LoadDarkWorldMap:
|
||||
LDA.b GameMode : CMP.b #$14 ; attract module
|
||||
BEQ .vanilla_light
|
||||
LDA.l OWFlags : AND.b #!FLAG_OW_CUSTOM_MAP : BNE .custom
|
||||
LDA.l OWMode+1 : AND.b #!FLAG_OW_MIXED : BNE .mixed
|
||||
LDA.b OverworldIndex : AND.b #$40
|
||||
BEQ .vanilla_light
|
||||
.custom
|
||||
STZ.b ScrapBuffer72 ; clear tile swap flag
|
||||
JSL LoadMapDarkOrCustom_long
|
||||
NOP #2
|
||||
warnpc $8ABAB5
|
||||
.mixed
|
||||
PHB : PHK : PLB
|
||||
JSL LoadMapDarkOrMixed
|
||||
PLB
|
||||
.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)
|
||||
org $80d8c4 ; < ? - Bank00.asm:4068 ()
|
||||
jsl OWWorldCheck
|
||||
@@ -241,7 +227,6 @@ OWMapWorldCheck16:
|
||||
{
|
||||
lda.b GameMode : cmp.w #$0014 : beq .return ; attract module, return with Z flag cleared
|
||||
jsl OWWorldCheck16
|
||||
eor.b ScrapBuffer72 ; apply tile swap flag
|
||||
.return
|
||||
rtl
|
||||
}
|
||||
@@ -356,7 +341,7 @@ OWFluteCancel2:
|
||||
}
|
||||
OWMapFluteCancelIcon:
|
||||
{
|
||||
LDA.b #$02 : STA.b Scrap0B ; what we wrote over
|
||||
STA.b Scrap0B : LDX.b #$10 ; what we wrote over
|
||||
LDA.l OWFlags+1 : AND.b #$01 : BEQ .return
|
||||
LDA.b GameSubMode : CMP.b #$0A : BNE .return
|
||||
LDA.b FrameCounter : AND.b #$10 : BNE .return
|
||||
@@ -402,110 +387,51 @@ OWMarkVisited:
|
||||
RTL
|
||||
}
|
||||
|
||||
LoadMapDarkOrCustom:
|
||||
LoadMapDarkOrMixed:
|
||||
{
|
||||
CMP.b #!FLAG_OW_CUSTOM_MAP : REP #$30 : BEQ .custom
|
||||
CMP.b #!FLAG_OW_MIXED : REP #$30 : BEQ .mixed
|
||||
LDX.w #$03FE ; draw vanilla Dark World (what we wrote over)
|
||||
.copy_next
|
||||
LDA.w WorldMap_DarkWorldTilemap,X : STA.w GFXStripes,X
|
||||
DEX : DEX : BPL .copy_next
|
||||
BRL .end
|
||||
.custom
|
||||
.mixed
|
||||
LDX.b OverworldIndex
|
||||
LDA.l OWTileWorldAssoc,X
|
||||
AND.w #$0040
|
||||
EOR.b ScrapBuffer72 ; apply tile swap flag
|
||||
BEQ .draw_lw
|
||||
LDA.w #OWMapGridDark
|
||||
BRA .draw_dw
|
||||
.draw_lw
|
||||
LDA.w #OWMapGridLight
|
||||
.draw_dw
|
||||
STA.b Scrap00
|
||||
LDA.w #OWMapGridLight>>16 ; current program bank
|
||||
STA.b Scrap02
|
||||
LDX.w #$139C
|
||||
LDY.w #$003F
|
||||
.next_cell
|
||||
PHY
|
||||
JSR GetOWMapTilemapOffsetToCopy
|
||||
.copy_cell ; more efficient to have X on the right side
|
||||
TAY
|
||||
LDA.w WorldMap_LightWorldTilemap+$00,Y : STA.b $00,X
|
||||
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
|
||||
LDY.w #$139C
|
||||
LDX.w #$003F
|
||||
.next_screen
|
||||
PHX
|
||||
LDA.l OWTileWorldAssoc,X
|
||||
EOR.b Scrap00
|
||||
AND.w #$0040
|
||||
BEQ .light
|
||||
TYX : BRA .copy_screen
|
||||
.light
|
||||
TXA : AND.w #$0024 : LSR : TAX
|
||||
TYA : SEC : SBC.l LWQuadrantOffsets,X
|
||||
TYX : TAY
|
||||
.copy_screen ; more efficient to have X on the right side
|
||||
LDA.w $C739+$00,Y : STA.b $00,X
|
||||
LDA.w $C739+$02,Y : STA.b $02,X
|
||||
LDA.w $C739+$20,Y : STA.b $20,X
|
||||
LDA.w $C739+$22,Y : STA.b $22,X
|
||||
LDA.w $C739+$40,Y : STA.b $40,X
|
||||
LDA.w $C739+$42,Y : STA.b $42,X
|
||||
LDA.w $C739+$60,Y : STA.b $60,X
|
||||
LDA.w $C739+$62,Y : STA.b $62,X
|
||||
TXY : PLX
|
||||
DEY : DEY : DEY : DEY ; move one screen left
|
||||
TXA : AND.w #$0007 : BNE .same_row
|
||||
TYA : SEC : SBC.w #$0060 : TAY ; move one screen row up
|
||||
.same_row
|
||||
DEY
|
||||
BPL .next_cell
|
||||
DEX
|
||||
BPL .next_screen
|
||||
.end
|
||||
SEP #$30
|
||||
LDA.b #$15 : STA.b NMIINCR ; what we wrote over
|
||||
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
|
||||
RTL
|
||||
|
||||
LWQuadrantOffsets:
|
||||
dw $1000-$0210 ; top left
|
||||
@@ -515,143 +441,6 @@ GetOWMapTilemapOffsetToCopy:
|
||||
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:
|
||||
{
|
||||
LDA.b IndoorsFlag : BEQ +
|
||||
@@ -820,26 +609,27 @@ OWBonkDrops:
|
||||
JSL OWBonkSpritePrep
|
||||
|
||||
.mark_collected ; S = Collected, FlagBitmask, X (row + 2)
|
||||
PLA : BEQ + : - : JMP .return : + ; S = FlagBitmask, X (row + 2)
|
||||
TYX : JSL Sprite_IsOnscreen : BCC -
|
||||
LDA.b IndoorsFlag : BEQ +
|
||||
PLA : BNE + ; S = FlagBitmask, X (row + 2)
|
||||
TYX : JSL Sprite_IsOnscreen : BCC +
|
||||
LDA.b IndoorsFlag : BEQ ++
|
||||
LDA.l RoomDataWRAM[$0120].high : ORA.b 1,S : STA.l RoomDataWRAM[$0120].high
|
||||
LDA.w $0400 : ORA.b 1,S : STA.w $0400
|
||||
BRA .increment_collection
|
||||
+
|
||||
++
|
||||
LDA.b OverworldIndex
|
||||
BIT.b #$40 : BEQ +
|
||||
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
|
||||
|
||||
.increment_collection
|
||||
REP #$20
|
||||
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter
|
||||
INC.w UpdateHUDFlag
|
||||
SEP #$20
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
BRA .return
|
||||
+ BRA .return
|
||||
|
||||
; spawn itemget item
|
||||
.spawn_item ; A = item id ; Y = bonk sprite slot ; S = Collected, FlagBitmask, X (row + 2)
|
||||
@@ -948,29 +738,20 @@ OWBonkSpritePrep:
|
||||
org $aa9000
|
||||
OWDetectEdgeTransition:
|
||||
{
|
||||
JSL Link_CheckForEdgeScreenTransition ; what we wrote over
|
||||
BCS .return
|
||||
JSL OWDestroyItemSprites
|
||||
STZ.w RandoOverworldWalkDist
|
||||
LDA.l OWMode : ORA.l OWMode+1 : BEQ .vanilla
|
||||
PHY
|
||||
JSR OWShuffle
|
||||
PLY
|
||||
LDA.w RandoOverworldTargetEdge : BMI .specialOrDisabled
|
||||
LDA.w RandoOverworldTargetEdge : BMI .special
|
||||
.vanilla
|
||||
CLC ; allow transition
|
||||
REP #$31 : LDX.b Scrap02 : LDA.b OverworldMap16Buffer ; what we wrote over
|
||||
RTL
|
||||
.specialOrDisabled
|
||||
CMP.b #$FF : BNE .special
|
||||
STZ.w RandoOverworldTargetEdge
|
||||
PHB
|
||||
JML Link_CheckForEdgeScreenTransition_prevent_transition
|
||||
.special
|
||||
REP #$30
|
||||
AND.w #$0003 : TAY : ASL : TAX
|
||||
LDA.w #$007F : STA.w RandoOverworldTargetEdge
|
||||
JSR OWLoadSpecialArea
|
||||
SEC
|
||||
.return
|
||||
RTL
|
||||
}
|
||||
OWDetectSpecialTransition:
|
||||
@@ -980,23 +761,17 @@ OWDetectSpecialTransition:
|
||||
TXA : AND.w #$0002 : LSR
|
||||
STA.w RandoOverworldTerrain
|
||||
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
|
||||
.normal
|
||||
JSR OWLoadSpecialArea
|
||||
.return
|
||||
RTL
|
||||
|
||||
.disabled
|
||||
SEP #$30
|
||||
STZ.w RandoOverworldTargetEdge
|
||||
RTL
|
||||
|
||||
.switch_to_edge
|
||||
STA.w RandoOverworldTargetEdge
|
||||
LDA.l OWEdgeDataOffset,X : STA.w RandoOverworldEdgeAddr
|
||||
PLA : SEP #$30 : PLA ; delete 3 bytes from stack
|
||||
JSL Link_CheckForEdgeScreenTransition : BCS .return
|
||||
JSL Link_CheckForEdgeScreenTransition : BCS .return ; Link_CheckForEdgeScreenTransition
|
||||
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
|
||||
LDA.b #$06 : STA.b Scrap02
|
||||
@@ -1015,15 +790,16 @@ OWDetectSpecialTransition:
|
||||
LDA.b #$FF : STA.b LinkRecoilZ : STA.b $C7
|
||||
STZ.b $3D : STZ.b LinkSpeed : STZ.w $032B : STZ.w LinkDashing : STZ.b LinkState
|
||||
.not_dashing
|
||||
PLA : PLA : PLA ; delete 3 bytes from stack
|
||||
JML OverworldHandleTransitions_PerformEdgeTransition
|
||||
PLA : REP #$31 : PLA ; delete 3 bytes from stack
|
||||
LDX.b Scrap02
|
||||
LDA.b OverworldMap16Buffer
|
||||
JML OverworldHandleTransitions_SpecialTrigger+6
|
||||
}
|
||||
OWEdgeTransition:
|
||||
{
|
||||
LDA.l OWMode : ORA.l OWMode+1 : BEQ .unshuffled
|
||||
LDY.w RandoOverworldTargetEdge : STZ.w RandoOverworldTargetEdge
|
||||
CPY.b #$7F : BEQ .unshuffled
|
||||
JSL OWDestroyItemSprites
|
||||
REP #$10
|
||||
LDX.w RandoOverworldEdgeAddr
|
||||
PHB : PHK : PLB
|
||||
@@ -1341,7 +1117,6 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water,
|
||||
STZ.w RandoOverworldForceTrans
|
||||
CMP.b #$02 : BNE +
|
||||
DEC : STA.w LinkDeepWater : STZ.w LinkSwimDirection
|
||||
LDA.b FlagBY : AND.b #$7F : STA.b FlagBY
|
||||
LDA.b #$04 : BRA .set_state
|
||||
+
|
||||
CMP.b #$03 : BNE ++
|
||||
@@ -1362,7 +1137,6 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water,
|
||||
LDA.b #$01 : STA.w LinkDeepWater
|
||||
LDA.l FlippersEquipment : BEQ .no_flippers ; check if flippers obtained
|
||||
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
|
||||
.no_flippers
|
||||
PHX
|
||||
@@ -1714,7 +1488,7 @@ dw $0b28, $0b38, $0010, $0b30, $1515, $1018, $0001, $000e
|
||||
dw $0b70, $0ba0, $0030, $0b88, $1515, $1020, $0000, $000f
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $1d1d, $1006, $0000, $0010
|
||||
dw $0350, $0390, $0040, $0370, $1821, $2060, $0000, $0011
|
||||
dw $0670, $06a8, $0038, $068c, $1b23, $2004, $0000, $0012
|
||||
dw $0670, $06a8, $0038, $068c, $1b23, $2002, $0000, $0012
|
||||
dw $0898, $09b0, $0118, $0924, $1b24, $2054, $0000, $0013
|
||||
dw $0a40, $0ba0, $0160, $0af0, $2525, $100e, $0000, $0014
|
||||
dw $0c70, $0c90, $0020, $0c80, $1e26, $2002, $0000, $0015
|
||||
@@ -1746,7 +1520,7 @@ dw $0b28, $0b38, $0010, $0b30, $5555, $1018, $0001, $002e
|
||||
dw $0b70, $0ba0, $0030, $0b88, $5555, $1020, $0000, $002f
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $5d5d, $1006, $0000, $0030
|
||||
dw $0350, $0390, $0040, $0370, $5861, $2060, $0000, $0031
|
||||
dw $0670, $06a8, $0038, $068c, $5b63, $2004, $0000, $0032
|
||||
dw $0670, $06a8, $0038, $068c, $5b63, $2002, $0000, $0032
|
||||
dw $0898, $09b0, $0118, $0924, $5b64, $2054, $0000, $0033
|
||||
dw $0a40, $0ba0, $0160, $0af0, $6565, $100e, $0000, $0034
|
||||
dw $0c70, $0c90, $0020, $0c80, $5e66, $2002, $0000, $0035
|
||||
@@ -2053,42 +1827,16 @@ db $74, $4e, $10, $b1, $00, $1c
|
||||
UWBonkPrizeData:
|
||||
db $ff, $00, $02, $b5, $00, $08
|
||||
|
||||
org $AABC80 ;PC 153C80
|
||||
OWMapGridLight:
|
||||
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
|
||||
OWMapGridDark:
|
||||
db $40, $41, $42, $43, $44, $45, $46, $47
|
||||
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
|
||||
; temporary fix - murahdahla replaces one of the bonk tree prizes
|
||||
; so we copy the sprite table here and update the pointer
|
||||
; longterm solution should be to spawn in murahdahla separately
|
||||
org $89AE2A
|
||||
Overworld_Sprites_Screen1A_2:
|
||||
db $08, $0F, $41 ; yx:{ 0x080, 0x0F0 }
|
||||
db $0E, $0C, $41 ; yx:{ 0x0E0, 0x0C0 }
|
||||
db $11, $0D, $E3 ; yx:{ 0x110, 0x0D0 }
|
||||
db $18, $0A, $D8 ; yx:{ 0x180, 0x0A0 }
|
||||
db $18, $0F, $45 ; yx:{ 0x180, 0x0F0 }
|
||||
db $FF ; END
|
||||
org $89CA55
|
||||
dw Overworld_Sprites_Screen1A_2&$FFFF
|
||||
|
||||
@@ -291,10 +291,10 @@ RTL
|
||||
REP #$30
|
||||
;-------------------------------------------------------------------------------
|
||||
; dungeon names
|
||||
LDA.w #$2DA4
|
||||
LDA.w #$2D50
|
||||
LDY.w #00
|
||||
|
||||
.next_dungeon_name
|
||||
.next_dungeon_name
|
||||
LDX.w .dungeon_positions,Y
|
||||
STA.w GFXStripes+$0646,X
|
||||
INC
|
||||
@@ -310,10 +310,10 @@ RTL
|
||||
STA.w GFXStripes+$0706,X
|
||||
|
||||
DEX : DEX
|
||||
BPL --
|
||||
BPL --
|
||||
|
||||
LDA.l HudFlag : AND.w #$0020 : BEQ +
|
||||
JMP .maps_and_compasses
|
||||
JMP .maps_and_compasses
|
||||
;-------------------------------------------------------------------------------
|
||||
+
|
||||
LDA.l HUDDungeonItems : AND.w #$0001 : BNE +
|
||||
|
||||
@@ -115,9 +115,7 @@ RTL
|
||||
CheckTransitionOverworld:
|
||||
STA.b $8A
|
||||
STA.w $040A ; what we wrote over
|
||||
JSL MaybeMarkFluteSpotVisited
|
||||
LDA.b $8A
|
||||
RTL
|
||||
JML MaybeMarkFluteSpotVisited
|
||||
|
||||
CheckFlute:
|
||||
LDA.l FluteBitfield
|
||||
10
ram.asm
10
ram.asm
@@ -65,8 +65,6 @@ LinkSubPixelVelocty = $7E002A ; Word length
|
||||
LinkAnimationStep = $7E002E ;
|
||||
LinkDirection = $7E002F ; $00 = Up | $02 = Down | $04 = Left | $06 = Right
|
||||
;
|
||||
FlagBY = $7E003A ; Bitfield for B and Y buttons.
|
||||
;
|
||||
OAMOffsetY = $7E0044 ;
|
||||
OAMOffsetX = $7E0045 ;
|
||||
LinkIncapacitatedTimer = $7E0046 ; Countdown when Link takes damage, not same as I-frames
|
||||
@@ -237,8 +235,6 @@ CurrentYItem = $7E0303 ;
|
||||
AButtonAct = $7E0308 ; Bitfield for A-actions. $80 = Carry/toss | $02 Prayer | $01 = Tree pull
|
||||
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)
|
||||
;
|
||||
LinkDeepWater = $7E0345 ; Set when Link is in deep water.
|
||||
@@ -338,7 +334,6 @@ SpawnedItemFlag = $7E0726 ; 0x02 - one for pot, 2 for sprite drop
|
||||
SpawnedItemMWPlayer = $7E0728 ; Player Id for spawned item if Multiworld item 0x02
|
||||
;
|
||||
EnemyDropIndicator = $7E072A ; Used by HUD to indicate enemy drops remaining
|
||||
NpcItemIndicator = $7E072C ; Flag used by HUD to indicate NPC item present
|
||||
SkipBeeTrapDisguise = $7E072D ; Flag to skip bee trap disguise during draw routine
|
||||
|
||||
SprDropsItem = $7E0730 ; Array for whether a sprite drops an item 0x16
|
||||
@@ -598,8 +593,6 @@ HUDMultiIndicator = $7EC790 ;
|
||||
HUDKeysObtained = $7EC7A2 ;
|
||||
HUDKeysSlash = $7EC7A4 ;
|
||||
HUDKeysTotal = $7EC7A6 ;
|
||||
HUDKeysExtraPlus = $7EC7E4 ;
|
||||
HUDKeysExtraCount = $7EC7E6 ;
|
||||
;
|
||||
BigRAM = $7EC900 ; Big buffer of free ram (0x1F00)
|
||||
ItemGFXStack = $7ECB00 ; Pointers to source of decompressed item tiles deferred to NMI loading.
|
||||
@@ -784,7 +777,6 @@ endmacro
|
||||
%assertRAM(LinkRecoilZ, $7E0029)
|
||||
%assertRAM(LinkAnimationStep, $7E002E)
|
||||
%assertRAM(LinkDirection, $7E002F)
|
||||
%assertRAM(FlagBY, $7E003A)
|
||||
%assertRAM(OAMOffsetY, $7E0044)
|
||||
%assertRAM(OAMOffsetX, $7E0045)
|
||||
%assertRAM(LinkIncapacitatedTimer, $7E0046)
|
||||
@@ -882,8 +874,6 @@ endmacro
|
||||
%assertRAM(UseY1, $7E0301)
|
||||
%assertRAM(CurrentYItem, $7E0303)
|
||||
%assertRAM(AButtonAct, $7E0308)
|
||||
%assertRAM(CarryAct, $7E0309)
|
||||
%assertRAM(LinkIFrames, $7E031F)
|
||||
%assertRAM(LinkSwimDirection, $7E0340)
|
||||
%assertRAM(LinkDeepWater, $7E0345)
|
||||
%assertRAM(TileActIce, $7E0348)
|
||||
|
||||
26
tables.asm
26
tables.asm
@@ -237,8 +237,12 @@ db $00
|
||||
;a - Infinite Arrows
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B0804E ; PC 0x18004E
|
||||
UncleRefill_deprecated: ; no longer used
|
||||
UncleRefill:
|
||||
db $00
|
||||
;---- -mba
|
||||
;m - Refill Magic
|
||||
;b - Refill Bombs
|
||||
;a - Refill Arrows
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B0804F ; PC 0x18004F
|
||||
ByrnaInvulnerability:
|
||||
@@ -460,9 +464,10 @@ db $00 ; #$00 = Original Behavior (default) - #$01 = Book can flip crystal switc
|
||||
; 0x1800A7 - 0x1800AE (unused)
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x1800AF
|
||||
; m-ff ffff
|
||||
; mtff ffff
|
||||
;
|
||||
; m - 0 = only shorten timer on multiworld items, 1 = shorten all items
|
||||
; t - 0 = triforce pieces considered important, 1 = triforce pieces considered junk
|
||||
; f - number of frames to show items
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B080AF ; PC 0x1800AF
|
||||
@@ -886,8 +891,8 @@ SilverArrowsAutoEquip:
|
||||
db $01 ; #$00 = Off - #$01 = Collection Time (Default) - #$02 = Entering Ganon - #$03 = Collection Time & Entering Ganon
|
||||
;================================================================================
|
||||
org $B08183 ; PC 0x180183
|
||||
RainDeathRefillRupeeBow:
|
||||
dw $012C ; 300 rupees (Default)
|
||||
FreeUncleItemAmount:
|
||||
dw $12C ; 300 rupees (Default)
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B08185 ; PC 0x180185
|
||||
RainDeathRefillTable:
|
||||
@@ -1528,7 +1533,7 @@ db $19,$1A,$1B,$1C,$1D,$1E,$1F,$20
|
||||
db $21,$22,$11,$11,$10,$16,$16,$16
|
||||
db $16,$16,$11,$16,$16,$16,$15,$15
|
||||
db $15,$15,$15,$15,$15,$15,$15,$15
|
||||
db $15,$15,$2E,$02,$09,$00,$00,$00
|
||||
db $15,$15,$16,$02,$09,$00,$00,$00
|
||||
|
||||
MusicShuffleTable:
|
||||
db $01,$02,$03,$04,$05,$06,$07,$08
|
||||
@@ -1580,7 +1585,6 @@ dw $0000
|
||||
; STAIRS3
|
||||
; STAIRS4
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B0DA00
|
||||
RoomHeaders:
|
||||
org $B0DA00 : RoomHeader_0000: ; pc 0x185A00
|
||||
db $41, $21, $13, $22, $07, $3D, $00, $00, $00, $10, $C0, $00, $00, $04
|
||||
@@ -2660,7 +2664,7 @@ db #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00,
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B0EFE0 ; PC 0x186FE0-0x186FEF
|
||||
CrystalPendantFlags_3:
|
||||
db $00 ; Sewers
|
||||
db $00 ; Sewers
|
||||
db $00 ; Hyrule Castle
|
||||
db $08 ; Eastern Palace
|
||||
db $09 ; Desert Palace
|
||||
@@ -2668,7 +2672,7 @@ CrystalPendantFlags_3:
|
||||
db $02 ; Swamp Palace
|
||||
db $01 ; Palace of Darkness
|
||||
db $06 ; Misery Mire
|
||||
db $03 ; Skull Woods
|
||||
db $03 ; Skull Woods
|
||||
db $05 ; Ice Palace
|
||||
db $0A ; Tower of Hera
|
||||
db $04 ; Thieves' Town
|
||||
@@ -2682,9 +2686,9 @@ org $B0EFFF ; PC 0x186FFF
|
||||
BallNChainDungeon: ; Dungeon ID where ball n chain guard is located. Write
|
||||
db $02 ; $FF to count ball and chain item for collection stats.
|
||||
|
||||
org $B0F000
|
||||
ExtraChestKeys: ; PC 0x187000-0x18700F
|
||||
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x187000 - 18700F (unused)
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
org $B0F010
|
||||
ChestKeys: ; PC 0x187010-0x18701F
|
||||
|
||||
@@ -99,7 +99,6 @@ HandleFollowersAfterMirroring = $87AA8B
|
||||
LinkHop_FindArbitraryLandingSpot = $87E359
|
||||
Link_HandleMovingAnimation_FullLongEntry = $87E68F
|
||||
Link_CheckForEdgeScreenTransition = $87F413
|
||||
Link_CheckForEdgeScreenTransition_prevent_transition = $87F42C
|
||||
Sprite_CheckIfPlayerPreoccupied = $87F4AA
|
||||
FlashGanonTowerPalette_next_thunder = $87FA81
|
||||
FlashGanonTowerPalette_bright_white = $87FAAC
|
||||
@@ -222,8 +221,6 @@ Ancilla29_MilestoneItemReceipt_skip_crystal_sfx = $88CAE5
|
||||
Ancilla29_MilestoneItemReceipt_no_sparkle = $88CB2E
|
||||
Ancilla_SetOAM_XY = $88F6F3
|
||||
Ancilla_AddAncilla = $899CCE
|
||||
WorldMap_CalculateOAMCoordinates_exit_successfully = $8AC51F
|
||||
WorldMap_MultiplyAxB = $8AC57F
|
||||
UpdateHUD = $8DDFA9
|
||||
UpdateEquippedItem = $8DDFAF
|
||||
DrawProgressIcons = $8DE9C8
|
||||
@@ -291,17 +288,13 @@ EntranceData_layer = $82D2F9
|
||||
EntranceData_song = $82D592
|
||||
SpawnPointData_room_id = $82D8D2
|
||||
Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879
|
||||
RoomHeaderPointers = $84F1E2
|
||||
UncleItem = $85DF45
|
||||
Sprite_ShowSolicitedMessage_Direction = $85E1A3
|
||||
FluteMenuNumbers_bits = $8AB7A3
|
||||
WorldMap_RedXChars = $8ABF70
|
||||
WorldMap_CalculateOAMCoordinates = $8AC3B1
|
||||
WorldMap_HandleSpriteBlink = $8AC52E
|
||||
WorldMapIcon_AdjustCoordinate = $8AC59B
|
||||
WorldMap_LightWorldTilemap = $8AC739
|
||||
WorldMap_DarkWorldTilemap = $8AD739
|
||||
DungeonMapRoomMarkerYBase = $8AE803
|
||||
DungeonMapBossRooms = $8AE817
|
||||
DungeonMapFloorCountData = $8AF5E9
|
||||
DungeonMapFloorToDataOffset = $8AF605
|
||||
|
||||
14
zelda.asm
14
zelda.asm
@@ -1,14 +1,10 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
EndRainState:
|
||||
LDA.l InitProgressIndicator : BIT.b #$80 : BEQ + ; check for instant post-aga
|
||||
LDA.l InitLumberjackOW : STA.l OverworldEventDataWRAM+$02
|
||||
LDA.b #$03
|
||||
BRA ++
|
||||
LDA.l InitProgressIndicator : BIT.b #$80 : BNE + ; check for instant post-aga
|
||||
LDA.b #$02 : STA.l ProgressIndicator
|
||||
RTL
|
||||
+
|
||||
LDA.b #$02
|
||||
++
|
||||
STA.l ProgressIndicator
|
||||
|
||||
JSL SetEscapeAssist
|
||||
LDA.b #$03 : STA.l ProgressIndicator
|
||||
LDA.l InitLumberjackOW : STA.l OverworldEventDataWRAM+$02
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user