Big pass at dungeon item indicators
This commit is contained in:
99
dungeon_map/blink_loot.asm
Normal file
99
dungeon_map/blink_loot.asm
Normal file
@@ -0,0 +1,99 @@
|
||||
; we want the icons indicating what is left in a room to blink
|
||||
; but we don't want to redraw to BG1 every few frames
|
||||
; so we duplicate the left side of BG1 to a lower portion and just toggle vertical scroll
|
||||
|
||||
BlinkLoot:
|
||||
; do not show icons if we're scrolling
|
||||
LDA.w $0210
|
||||
BNE .hide
|
||||
|
||||
LDA.b FrameCounter
|
||||
AND.b #$10
|
||||
BEQ .show
|
||||
.hide
|
||||
LDA.b #$01
|
||||
.show
|
||||
STZ.b $E6
|
||||
STA.w $E7
|
||||
JSL $8AE96B
|
||||
RTL
|
||||
|
||||
StartDoubleWrite:
|
||||
; what we wrote over
|
||||
REP #$30
|
||||
STZ.w GFXStripes
|
||||
|
||||
STZ.w $021B
|
||||
RTL
|
||||
|
||||
CheckDoubleWrite:
|
||||
LDA.w $021C
|
||||
BNE .done
|
||||
|
||||
LDA.b #$08
|
||||
STA.w $021C
|
||||
REP #$30
|
||||
JML $8AE20B
|
||||
|
||||
.done
|
||||
; what we wrote over
|
||||
REP #$10
|
||||
LDY.w GFXStripes
|
||||
LDA.b #$FF
|
||||
JML $8AE2E7
|
||||
|
||||
DrawMountain:
|
||||
LDX.w GFXStripes
|
||||
PHX
|
||||
LDY.w #$0000
|
||||
.next_word
|
||||
LDA.w $8AEFEF, Y
|
||||
STA.w GFXStripes+2, X
|
||||
INX : INX
|
||||
INY : INY
|
||||
CPY.w #$002A
|
||||
BCC .next_word
|
||||
|
||||
PLY
|
||||
LDA.w $021B
|
||||
BEQ .done
|
||||
|
||||
; if second copy of mountain, adjust VRAM addresses
|
||||
SEP #$20
|
||||
LDA.w GFXStripes+$02, Y
|
||||
ORA.w $021C
|
||||
STA.w GFXStripes+$02, Y
|
||||
|
||||
LDA.w GFXStripes+$08, Y
|
||||
ORA.w $021C
|
||||
STA.w GFXStripes+$08, Y
|
||||
|
||||
LDA.w GFXStripes+$10, Y
|
||||
ORA.w $021C
|
||||
STA.w GFXStripes+$10, Y
|
||||
|
||||
LDA.w GFXStripes+$20, Y
|
||||
ORA.w $021C
|
||||
STA.w GFXStripes+$20, Y
|
||||
|
||||
LDA.w GFXStripes+$26, Y
|
||||
ORA.w $021C
|
||||
STA.w GFXStripes+$26, Y
|
||||
REP #$20
|
||||
|
||||
.done
|
||||
RTL
|
||||
|
||||
WriteBigEndianAddressX:
|
||||
ORA.w $021B
|
||||
XBA
|
||||
STA.w GFXStripes+2, X
|
||||
AND.w #$FFF7
|
||||
RTL
|
||||
|
||||
WriteBigEndianAddressY:
|
||||
ORA.w $021B
|
||||
XBA
|
||||
STA.w GFXStripes+2, Y
|
||||
AND.w #$FFF7
|
||||
RTL
|
||||
251
dungeon_map/check_loot.asm
Normal file
251
dungeon_map/check_loot.asm
Normal file
@@ -0,0 +1,251 @@
|
||||
; A = room_id
|
||||
; out A = level of loot
|
||||
CheckLoot:
|
||||
PHP
|
||||
REP #$30
|
||||
PHB : PHX : PHY
|
||||
|
||||
STA.b $00
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
LDA.b $06 : PHA
|
||||
|
||||
STZ.b $02 ; best item class found
|
||||
|
||||
JSR CheckChests
|
||||
JSR CheckBoss
|
||||
JSR CheckPots
|
||||
JSR CheckEnemies
|
||||
|
||||
PLA : STA.b $06
|
||||
PLY : PLX : PLB
|
||||
PLP
|
||||
LDA.b $02
|
||||
RTL
|
||||
|
||||
CheckChests:
|
||||
LDA.w #($81<<8)
|
||||
PHA
|
||||
PLB : PLB
|
||||
|
||||
LDA.w #$0008
|
||||
STA.b $04
|
||||
|
||||
LDY.w #$FFFD
|
||||
.increment_mask
|
||||
LDA.b $04
|
||||
ASL A
|
||||
STA.b $04
|
||||
.next_chest
|
||||
INY #3
|
||||
CPY.w #$01F8
|
||||
BCS .done
|
||||
|
||||
LDA.w RoomData_ChestItems, Y
|
||||
AND.w #$7FFF
|
||||
CMP.b $00
|
||||
BNE .next_chest
|
||||
|
||||
LDA.l SaveDataWRAM, X
|
||||
AND.b $04
|
||||
BNE .increment_mask ; already got item
|
||||
|
||||
LDA.w RoomData_ChestItems+2, Y
|
||||
AND.w #$00FF
|
||||
JSR GetLootClass
|
||||
BRA .increment_mask
|
||||
|
||||
.done
|
||||
RTS
|
||||
|
||||
CheckBoss:
|
||||
LDX.w #$FFFA
|
||||
.next_boss
|
||||
INX #6
|
||||
LDA.l MiscLocations, X
|
||||
BPL .check
|
||||
RTS
|
||||
|
||||
.check
|
||||
CMP.b $00
|
||||
BNE .next_boss
|
||||
|
||||
TXY
|
||||
CMP.b RoomIndex
|
||||
BEQ .current_room
|
||||
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l SaveDataWRAM, X
|
||||
BRA .continue
|
||||
|
||||
.current_room
|
||||
LDA.w RoomItemsTaken ; if checking our current room, $0403 has fresher flags
|
||||
ASL #4
|
||||
|
||||
.continue
|
||||
STA.b $04
|
||||
|
||||
TYX
|
||||
LDA.l MiscLocations+2, X ; get bit of room data to check
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l DungeonMask, X
|
||||
|
||||
TYX
|
||||
BIT.b $04
|
||||
BNE .next_boss ; continue checking if we already got the item
|
||||
|
||||
LDA.l MiscLocations+4, X
|
||||
STA.b $05
|
||||
|
||||
LDA.l MiscLocations+3, X
|
||||
STA.b $04
|
||||
|
||||
LDA.b [$04]
|
||||
AND.w #$00FF
|
||||
JSR GetLootClass
|
||||
|
||||
BRA .next_boss
|
||||
|
||||
CheckPots:
|
||||
LDA.b $00
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
LDA.l UWPotsPointers, X
|
||||
STA.b $04
|
||||
LDA.w #bank(UWPotsData)
|
||||
STA.b $06
|
||||
|
||||
LDY.w #$0000
|
||||
LDX.w #$FFFF
|
||||
.next_pot
|
||||
LDA.b [$04], Y
|
||||
CMP.w #$FFFF : BEQ .done
|
||||
INX : INY : INY
|
||||
BIT.w #$8000 : BNE .we_care ; marked as major item
|
||||
LDA.b [$04], Y
|
||||
AND.w #$00FF
|
||||
CMP.w #$0008 : BEQ .small_key
|
||||
INY
|
||||
BRA .next_pot
|
||||
|
||||
.small_key
|
||||
LDA.w #$0024
|
||||
.we_care
|
||||
INY
|
||||
PHA
|
||||
PHX
|
||||
TXA : ASL A
|
||||
EOR.w #$FFFF
|
||||
CLC : ADC.w #$001F ; bit mask table is in opposite order of what we want
|
||||
TAX
|
||||
LDA.l DungeonMask, X : STA.b $08
|
||||
|
||||
LDA.b $00 : ASL A : TAX
|
||||
LDA.l RoomPotData, X
|
||||
PLX
|
||||
AND.b $08
|
||||
BEQ .not_obtained
|
||||
PLA
|
||||
BRA .next_pot
|
||||
|
||||
.not_obtained
|
||||
PLA
|
||||
AND.w #$00FF
|
||||
JSR GetLootClass
|
||||
BRA .next_pot
|
||||
|
||||
.done
|
||||
RTS
|
||||
|
||||
CheckEnemies:
|
||||
LDA.b $00
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
LDA.l UWSpritesPointers, X
|
||||
INC A ; skip the layered/unlayered indicator
|
||||
STA.b $04
|
||||
LDA.w #bank(UWSpritesData)
|
||||
STA.b $06
|
||||
|
||||
LDY.w #$0000
|
||||
LDX.w #$FFFF
|
||||
.next_enemy
|
||||
LDA.b [$04], Y
|
||||
AND.w #$00FF
|
||||
CMP.w #$00FF : BEQ .done
|
||||
INY : INY
|
||||
LDA.b [$04], Y
|
||||
AND.w #$00FF
|
||||
CMP.w #$00F8 : BEQ .major ; major item
|
||||
CMP.w #$00F9 : BEQ .major ; major item in other world
|
||||
CMP.w #$00E4 : BEQ .vanilla_key
|
||||
INY
|
||||
BRA .next_enemy
|
||||
|
||||
.vanilla_key
|
||||
DEY : DEY
|
||||
LDA.b [$04], Y
|
||||
AND.w #$00FF
|
||||
CMP.w #$00FD ; big key
|
||||
BEQ .big_key
|
||||
CMP.w #$00FE ; small key
|
||||
BEQ .small_key
|
||||
INY #3 ; false alarm -- probably hera basement key
|
||||
BRA .next_enemy
|
||||
.small_key
|
||||
LDA.w #$0024
|
||||
BRA .proceed
|
||||
.big_key
|
||||
LDA.w #$0032
|
||||
BRA .proceed
|
||||
|
||||
.major
|
||||
DEY : DEY
|
||||
LDA.b [$04], Y
|
||||
AND.w #$00FF
|
||||
|
||||
.proceed
|
||||
INX
|
||||
INY : INY : INY
|
||||
|
||||
PHA
|
||||
PHX
|
||||
TXA : ASL A
|
||||
TAX
|
||||
LDA.l DungeonMask, X : STA.b $08
|
||||
|
||||
LDA.b $00 : ASL A : TAX
|
||||
LDA.l SpriteDropData, X
|
||||
PLX
|
||||
AND.b $08
|
||||
BEQ .not_obtained
|
||||
PLA
|
||||
BRA .next_enemy
|
||||
|
||||
.not_obtained
|
||||
PLA
|
||||
AND.w #$00FF
|
||||
JSR GetLootClass
|
||||
BRA .next_enemy
|
||||
|
||||
.done
|
||||
RTS
|
||||
|
||||
; A = item id
|
||||
; updates "best loot" value if better
|
||||
GetLootClass:
|
||||
PHX
|
||||
TAX
|
||||
LDA.l LootTypeMapping, X
|
||||
AND.w #$00FF
|
||||
CMP.b $02
|
||||
BCC +
|
||||
STA.b $02
|
||||
+ PLX
|
||||
RTS
|
||||
261
dungeon_map/data/item_mapping.asm
Normal file
261
dungeon_map/data/item_mapping.asm
Normal file
@@ -0,0 +1,261 @@
|
||||
db $0A ; 00 - Fighter Sword and Shield
|
||||
db $0A ; 01 - Master Sword
|
||||
db $0A ; 02 - Tempered Sword
|
||||
db $0A ; 03 - Butter Sword
|
||||
db $05 ; 04 - Fighter Shield
|
||||
db $05 ; 05 - Fire Shield
|
||||
db $05 ; 06 - Mirror Shield
|
||||
db $0A ; 07 - Fire Rod
|
||||
db $0A ; 08 - Ice Rod
|
||||
db $0A ; 09 - Hammer
|
||||
db $0A ; 0A - Hookshot
|
||||
db $0A ; 0B - Bow
|
||||
db $0A ; 0C - Boomerang
|
||||
db $0A ; 0D - Powder
|
||||
db $02 ; 0E - Bottle Refill (bee)
|
||||
db $0A ; 0F - Bombos
|
||||
db $0A ; 10 - Ether
|
||||
db $0A ; 11 - Quake
|
||||
db $0A ; 12 - Lamp
|
||||
db $0A ; 13 - Shovel
|
||||
db $0A ; 14 - Flute
|
||||
db $0A ; 15 - Somaria
|
||||
db $0A ; 16 - Bottle
|
||||
db $05 ; 17 - Heartpiece
|
||||
db $0A ; 18 - Byrna
|
||||
db $0A ; 19 - Cape
|
||||
db $0A ; 1A - Mirror
|
||||
db $0A ; 1B - Glove
|
||||
db $0A ; 1C - Mitts
|
||||
db $0A ; 1D - Book
|
||||
db $0A ; 1E - Flippers
|
||||
db $0A ; 1F - Pearl
|
||||
db $0C ; 20 - Crystal
|
||||
db $0A ; 21 - Net
|
||||
db $05 ; 22 - Blue Mail
|
||||
db $05 ; 23 - Red Mail
|
||||
db $03 ; 24 - Small Key
|
||||
db $06 ; 25 - Compass
|
||||
db $05 ; 26 - Heart Container from 4/4
|
||||
db $02 ; 27 - Bomb
|
||||
db $02 ; 28 - 3 bombs
|
||||
db $0A ; 29 - Mushroom
|
||||
db $0A ; 2A - Red boomerang
|
||||
db $0A ; 2B - Full bottle (red)
|
||||
db $0A ; 2C - Full bottle (green)
|
||||
db $0A ; 2D - Full bottle (blue)
|
||||
db $05 ; 2E - Potion refill (red)
|
||||
db $05 ; 2F - Potion refill (green)
|
||||
db $05 ; 30 - Potion refill (blue)
|
||||
db $02 ; 31 - 10 bombs
|
||||
db $08 ; 32 - Big key
|
||||
db $02 ; 33 - Map
|
||||
db $02 ; 34 - 1 rupee
|
||||
db $02 ; 35 - 5 rupees
|
||||
db $02 ; 36 - 20 rupees
|
||||
db $09 ; 37 - Green pendant
|
||||
db $09 ; 38 - Blue pendant
|
||||
db $09 ; 39 - Red pendant
|
||||
db $0A ; 3A - Tossed bow
|
||||
db $0A ; 3B - Silvers
|
||||
db $0A ; 3C - Full bottle (bee)
|
||||
db $0A ; 3D - Full bottle (fairy)
|
||||
db $05 ; 3E - Boss heart
|
||||
db $05 ; 3F - Sanc heart
|
||||
db $02 ; 40 - 100 rupees
|
||||
db $02 ; 41 - 50 rupees
|
||||
db $02 ; 42 - Heart
|
||||
db $02 ; 43 - Arrow
|
||||
db $02 ; 44 - 10 arrows
|
||||
db $02 ; 45 - Small magic
|
||||
db $02 ; 46 - 300 rupees
|
||||
db $02 ; 47 - 20 rupees green
|
||||
db $0A ; 48 - Full bottle (good bee)
|
||||
db $0A ; 49 - Tossed fighter sword
|
||||
db $0A ; 4A - Active Flute
|
||||
db $0A ; 4B - Boots
|
||||
|
||||
db $05 ; 4C - Bomb capacity (50)
|
||||
db $05 ; 4D - Arrow capacity (70)
|
||||
db $0A ; 4E - 1/2 magic
|
||||
db $0A ; 4F - 1/4 magic
|
||||
db $0A ; 50 - Safe master sword
|
||||
db $05 ; 51 - Bomb capacity (+5)
|
||||
db $05 ; 52 - Bomb capacity (+10)
|
||||
db $05 ; 53 - Arrow capacity (+5)
|
||||
db $05 ; 54 - Arrow capacity (+10)
|
||||
db $02 ; 55 - Programmable item 1
|
||||
db $02 ; 56 - Programmable item 2
|
||||
db $02 ; 57 - Programmable item 3
|
||||
db $0A ; 58 - Upgrade-only silver arrows
|
||||
db $02 ; 59 - Rupoor
|
||||
db $02 ; 5A - Nothing
|
||||
db $02 ; 5B - Red clock
|
||||
db $02 ; 5C - Blue clock
|
||||
db $02 ; 5D - Green clock
|
||||
db $0A ; 5E - Progressive sword
|
||||
db $05 ; 5F - Progressive shield
|
||||
db $05 ; 60 - Progressive armor
|
||||
db $0A ; 61 - Progressive glove
|
||||
db $02 ; 62 - RNG pool item (single)
|
||||
db $02 ; 63 - RNG pool item (multi)
|
||||
db $0A ; 64 - Progressive bow
|
||||
db $0A ; 65 - Progressive bow
|
||||
db $02 ; 66 -
|
||||
db $02 ; 67 -
|
||||
db $02 ; 68 -
|
||||
db $02 ; 69 -
|
||||
db $0E ; 6A - Triforce
|
||||
db $0D ; 6B - Power star
|
||||
db $0D ; 6C - Triforce Piece
|
||||
db $02 ; 6D - Server request item
|
||||
db $02 ; 6E - Server request item (dungeon drop)
|
||||
db $02 ; 6F -
|
||||
|
||||
db $02 ; 70 - Map of Light World
|
||||
db $02 ; 71 - Map of Dark World
|
||||
db $02 ; 72 - Map of Ganon's Tower
|
||||
db $02 ; 73 - Map of Turtle Rock
|
||||
db $02 ; 74 - Map of Thieves' Town
|
||||
db $02 ; 75 - Map of Tower of Hera
|
||||
db $02 ; 76 - Map of Ice Palace
|
||||
db $02 ; 77 - Map of Skull Woods
|
||||
db $02 ; 78 - Map of Misery Mire
|
||||
db $02 ; 79 - Map of Dark Palace
|
||||
db $02 ; 7A - Map of Swamp Palace
|
||||
db $02 ; 7B - Map of Agahnim's Tower
|
||||
db $02 ; 7C - Map of Desert Palace
|
||||
db $02 ; 7D - Map of Eastern Palace
|
||||
db $02 ; 7E - Map of Hyrule Castle
|
||||
db $02 ; 7F - Map of Sewers
|
||||
|
||||
db $06 ; 80 - Compass of Light World
|
||||
db $06 ; 81 - Compass of Dark World
|
||||
db $06 ; 82 - Compass of Ganon's Tower
|
||||
db $06 ; 83 - Compass of Turtle Rock
|
||||
db $06 ; 84 - Compass of Thieves' Town
|
||||
db $06 ; 85 - Compass of Tower of Hera
|
||||
db $06 ; 86 - Compass of Ice Palace
|
||||
db $06 ; 87 - Compass of Skull Woods
|
||||
db $06 ; 88 - Compass of Misery Mire
|
||||
db $06 ; 89 - Compass of Dark Palace
|
||||
db $06 ; 8A - Compass of Swamp Palace
|
||||
db $06 ; 8B - Compass of Agahnim's Tower
|
||||
db $06 ; 8C - Compass of Desert Palace
|
||||
db $06 ; 8D - Compass of Eastern Palace
|
||||
db $06 ; 8E - Compass of Hyrule Castle
|
||||
db $06 ; 8F - Compass of Sewers
|
||||
|
||||
db $08 ; 90 - Skull key
|
||||
db $08 ; 91 - Reserved
|
||||
db $08 ; 92 - Big key of Ganon's Tower
|
||||
db $08 ; 93 - Big key of Turtle Rock
|
||||
db $08 ; 94 - Big key of Thieves' Town
|
||||
db $08 ; 95 - Big key of Tower of Hera
|
||||
db $08 ; 96 - Big key of Ice Palace
|
||||
db $08 ; 97 - Big key of Skull Woods
|
||||
db $08 ; 98 - Big key of Misery Mire
|
||||
db $08 ; 99 - Big key of Dark Palace
|
||||
db $08 ; 9A - Big key of Swamp Palace
|
||||
db $08 ; 9B - Big key of Agahnim's Tower
|
||||
db $08 ; 9C - Big key of Desert Palace
|
||||
db $08 ; 9D - Big key of Eastern Palace
|
||||
db $08 ; 9E - Big key of Hyrule Castle
|
||||
db $08 ; 9F - Big key of Sewers
|
||||
|
||||
db $07 ; A0 - Small key of Sewers
|
||||
db $07 ; A1 - Small key of Hyrule Castle
|
||||
db $07 ; A2 - Small key of Eastern Palace
|
||||
db $07 ; A3 - Small key of Desert Palace
|
||||
db $07 ; A4 - Small key of Agahnim's Tower
|
||||
db $07 ; A5 - Small key of Swamp Palace
|
||||
db $07 ; A6 - Small key of Dark Palace
|
||||
db $07 ; A7 - Small key of Misery Mire
|
||||
db $07 ; A8 - Small key of Skull Woods
|
||||
db $07 ; A9 - Small key of Ice Palace
|
||||
db $07 ; AA - Small key of Tower of Hera
|
||||
db $07 ; AB - Small key of Thieves' Town
|
||||
db $07 ; AC - Small key of Turtle Rock
|
||||
db $07 ; AD - Small key of Ganon's Tower
|
||||
db $02 ; AE - Reserved
|
||||
db $03 ; AF - Generic small key
|
||||
db $0C ; B0 - Crystal 6
|
||||
db $0C ; B1 - Crystal 1
|
||||
db $0C ; B2 - Crystal 5
|
||||
db $0C ; B3 - Crystal 7
|
||||
db $0C ; B4 - Crystal 2
|
||||
db $0C ; B5 - Crystal 4
|
||||
db $0C ; B6 - Crystal 3
|
||||
db $02 ; B7 - Reserved
|
||||
db $02 ; B8 -
|
||||
db $02 ; B9 -
|
||||
db $02 ; BA -
|
||||
db $02 ; BB -
|
||||
db $02 ; BC -
|
||||
db $02 ; BD -
|
||||
db $02 ; BE -
|
||||
db $02 ; BF -
|
||||
db $02 ; C0 -
|
||||
db $02 ; C1 -
|
||||
db $02 ; C2 -
|
||||
db $02 ; C3 -
|
||||
db $02 ; C4 -
|
||||
db $02 ; C5 -
|
||||
db $02 ; C6 -
|
||||
db $02 ; C7 -
|
||||
db $02 ; C8 -
|
||||
db $02 ; C9 -
|
||||
db $02 ; CA -
|
||||
db $02 ; CB -
|
||||
db $02 ; CC -
|
||||
db $02 ; CD -
|
||||
db $02 ; CE -
|
||||
db $02 ; CF -
|
||||
db $02 ; D0 - Bee trap
|
||||
db $02 ; D1 - Apples
|
||||
db $02 ; D2 - Fairy
|
||||
db $02 ; D3 - Chicken
|
||||
db $02 ; D4 - Big Magic
|
||||
db $02 ; D5 - 5 Arrows
|
||||
db $02 ; D6 - Good Bee
|
||||
db $02 ; D7 -
|
||||
db $02 ; D8 -
|
||||
db $02 ; D9 -
|
||||
db $02 ; DA -
|
||||
db $02 ; DB -
|
||||
db $02 ; DC -
|
||||
db $02 ; DD -
|
||||
db $02 ; DE -
|
||||
db $02 ; DF -
|
||||
db $02 ; E0 -
|
||||
db $02 ; E1 -
|
||||
db $02 ; E2 -
|
||||
db $02 ; E3 -
|
||||
db $02 ; E4 -
|
||||
db $02 ; E5 -
|
||||
db $02 ; E6 -
|
||||
db $02 ; E7 -
|
||||
db $02 ; E8 -
|
||||
db $02 ; E9 -
|
||||
db $02 ; EA -
|
||||
db $02 ; EB -
|
||||
db $02 ; EC -
|
||||
db $02 ; ED -
|
||||
db $02 ; EE -
|
||||
db $02 ; EF -
|
||||
db $02 ; F0 -
|
||||
db $02 ; F1 -
|
||||
db $02 ; F2 -
|
||||
db $02 ; F3 -
|
||||
db $02 ; F4 -
|
||||
db $02 ; F5 -
|
||||
db $02 ; F6 -
|
||||
db $02 ; F7 -
|
||||
db $02 ; F8 -
|
||||
db $02 ; F9 -
|
||||
db $02 ; FA -
|
||||
db $02 ; FB -
|
||||
db $02 ; FC -
|
||||
db $02 ; FD -
|
||||
db $02 ; FE - Server request (async)
|
||||
db $02 ; FF -
|
||||
256
dungeon_map/data/supertile_shapes.asm
Normal file
256
dungeon_map/data/supertile_shapes.asm
Normal file
@@ -0,0 +1,256 @@
|
||||
db $0F, $00, $1F, $0E ; 00
|
||||
db $46, $46, $0E, $0E
|
||||
db $00, $30, $14, $14
|
||||
db $0E, $1F, $20, $0F
|
||||
db $65, $74, $2D, $2E ; 04
|
||||
db $FF, $FF, $FF, $FF ; 05 - unused
|
||||
db $FF, $FF, $4F, $FF
|
||||
db $00, $40, $00, $00 ; 07
|
||||
db $0E, $0E, $10, $20 ; 08 - useless fairy entrance
|
||||
db $66, $66, $FF, $FF
|
||||
db $44, $44, $0E, $0E
|
||||
db $2E, $67, $2E, $70 ; 0B
|
||||
db $31, $31, $24, $24 ; 0C
|
||||
db $FF, $FF, $4F, $FF ; 0D
|
||||
db $FF, $FF, $57, $5F ; 0E
|
||||
db $FF, $FF, $FF, $FF ; 0F - unused and should never be, treated as non-id
|
||||
db $00, $00, $20, $00 ; 10
|
||||
db $00, $30, $00, $10
|
||||
db $14, $14, $24, $24
|
||||
db $FF, $77, $FF, $77 ; 13
|
||||
db $11, $01, $11, $11
|
||||
db $34, $00, $01, $00
|
||||
db $75, $65, $2E, $2E ; 16
|
||||
db $40, $40, $00, $00
|
||||
db $10, $0F, $00, $0F ; 18 - useless fairy drop
|
||||
db $0F, $03, $0F, $02
|
||||
db $6E, $6F, $6D, $75 ; 1A
|
||||
db $2E, $67, $75, $FF
|
||||
db $74, $74, $3E, $2E ; 1C
|
||||
db $72, $67, $FF, $FF
|
||||
db $FF, $68, $57, $4B
|
||||
db $FF, $FF, $71, $57 ; 1F
|
||||
db $FF, $FF, $4F, $FF ; 20
|
||||
db $00, $10, $00, $01
|
||||
db $0E, $0E, $15, $14
|
||||
db $FF, $FF, $FF, $6B
|
||||
db $10, $10, $01, $20 ; 24
|
||||
db $FF, $FF, $FF, $FF ; 25 - unused
|
||||
db $00, $3C, $14, $42 ; 26
|
||||
db $40, $40, $00, $00
|
||||
db $30, $1E, $24, $24 ; 28
|
||||
db $1F, $0E, $0F, $00
|
||||
db $10, $12, $10, $5E
|
||||
db $12, $1E, $36, $00
|
||||
db $00, $00, $10, $10 ; 2C - hookshot cave fairies
|
||||
db $FF, $FF, $FF, $FF ; 2D - unused
|
||||
db $FF, $4F, $FF, $FF ; 2E
|
||||
db $00, $1E, $00, $20 ; 2F - kakariko well
|
||||
db $75, $FF, $65, $FF ; 30
|
||||
db $2E, $57, $2E, $57 ; 31
|
||||
db $14, $14, $44, $44
|
||||
db $FF, $FF, $4F, $FF ; 33
|
||||
db $00, $01, $40, $01
|
||||
db $4D, $77, $71, $3D ; 35
|
||||
db $15, $15, $15, $15
|
||||
db $77, $4D, $3D, $71 ; 37
|
||||
db $6C, $FF, $77, $FF ; 38
|
||||
db $FF, $FF, $72, $69 ; 39
|
||||
db $64, $64, $14, $14
|
||||
db $65, $FF, $75, $FF
|
||||
db $00, $10, $00, $20 ; 3C - hookshot cave
|
||||
db $2E, $2E, $75, $65 ; 3D
|
||||
db $FF, $74, $72, $2E ; 3E
|
||||
db $FF, $FF, $57, $57
|
||||
db $65, $FF, $2E, $57 ; 40
|
||||
db $00, $30, $14, $14
|
||||
db $44, $31, $0E, $0E
|
||||
db $72, $2E, $FF, $75
|
||||
db $70, $3D, $70, $3D
|
||||
db $6C, $74, $3D, $2E ; 45
|
||||
db $14, $14, $00, $00
|
||||
db $FF, $FF, $FF, $FF ; 47 - unused
|
||||
db $FF, $FF, $FF, $FF ; 48 - unused
|
||||
db $72, $2E, $72, $2E ; 49
|
||||
db $61, $61, $24, $24
|
||||
db $75, $74, $2E, $2E
|
||||
db $FF, $65, $FF, $77 ; 4C
|
||||
db $10, $30, $01, $00
|
||||
db $72, $57, $FF, $FF ; 4E
|
||||
db $1E, $00, $01, $1E
|
||||
db $FF, $77, $FF, $75 ; 50
|
||||
db $14, $14, $44, $44
|
||||
db $01, $1E, $04, $14
|
||||
db $65, $75, $2E, $2E
|
||||
db $50, $50, $40, $00 ; 54
|
||||
db $00, $00, $20, $00
|
||||
db $74, $74, $2B, $3D
|
||||
db $2E, $70, $63, $5B
|
||||
db $00, $00, $21, $10 ; 58 - split
|
||||
db $10, $00, $20, $00
|
||||
db $FF, $FF, $FF, $4F
|
||||
db $FF, $77, $FF, $75 ; 5B
|
||||
db $71, $6A, $FF, $74 ; 5C
|
||||
db $2E, $67, $75, $FF ; 5D
|
||||
db $FF, $68, $57, $4B ; 5E
|
||||
db $FF, $FF, $7B, $FF
|
||||
db $0F, $13, $0F, $22 ; 60
|
||||
db $47, $45, $26, $26
|
||||
db $06, $14, $22, $00
|
||||
db $65, $FF, $76, $FF ; 63
|
||||
db $FF, $FF, $57, $71
|
||||
db $FF, $FF, $71, $69
|
||||
db $00, $30, $10, $00
|
||||
db $00, $10, $00, $01
|
||||
db $00, $10, $01, $00 ; 68
|
||||
db $00, $00, $00, $00
|
||||
db $FF, $4C, $FF, $74 ; 6A
|
||||
db $65, $75, $2E, $2E
|
||||
db $65, $FF, $2E, $71 ; 6C
|
||||
db $75, $FF, $77, $FF ; 6D
|
||||
db $FF, $4E, $FF, $FF ; 6E
|
||||
db $00, $00, $00, $00
|
||||
db $7A, $FF, $FF, $FF ; 70
|
||||
db $65, $FF, $2D, $70 ; 71
|
||||
db $44, $44, $04, $14 ; 72 - slight cheating I guess...
|
||||
db $74, $74, $2E, $4B ; 73
|
||||
db $00, $00, $05, $05
|
||||
db $74, $74, $4A, $75 ; 75
|
||||
db $2D, $7C, $2E, $57 ; 76
|
||||
db $30, $00, $60, $60
|
||||
db $00, $00, $00, $00 ; 78
|
||||
db $00, $00, $00, $00
|
||||
db $00, $00, $00, $00
|
||||
db $70, $71, $4F, $4D
|
||||
db $77, $74, $77, $77
|
||||
db $2E, $70, $77, $4F ; 7D
|
||||
db $FF, $77, $53, $2D ; 7E
|
||||
db $77, $FF, $55, $FF
|
||||
db $67, $70, $FF, $FF ; 80
|
||||
db $10, $01, $00, $01
|
||||
db $5D, $14, $01, $00
|
||||
db $74, $75, $2B, $2E ; 83
|
||||
db $04, $05, $24, $24
|
||||
db $4B, $72, $2E, $5F ; 85
|
||||
db $00, $00, $00, $00
|
||||
db $67, $2E, $54, $74
|
||||
db $00, $00, $00, $00 ; 88
|
||||
db $00, $00, $0E, $0E
|
||||
db $00, $00, $00, $00
|
||||
db $2D, $71, $2D, $70
|
||||
db $7E, $7F, $7D, $78 ; 8C
|
||||
db $71, $2D, $70, $2D ; 8D
|
||||
db $FF, $4E, $FF, $FF
|
||||
db $00, $00, $00, $00
|
||||
db $FF, $FF, $4F, $FF ; 90
|
||||
db $FF, $65, $FF, $77
|
||||
db $00, $00, $01, $01 ; 92 - should it be split? idk
|
||||
db $2C, $2C, $77, $74 ; 93
|
||||
db $00, $00, $00, $00
|
||||
db $FF, $77, $FF, $75 ; 95
|
||||
db $77, $FF, $2E, $57
|
||||
db $65, $74, $2E, $2F ; 97
|
||||
db $0E, $0E, $20, $40 ; 98
|
||||
db $1E, $00, $42, $14
|
||||
db $00, $00, $00, $00
|
||||
db $72, $70, $70, $71
|
||||
db $10, $10, $01, $01
|
||||
db $70, $72, $71, $70
|
||||
db $1E, $30, $00, $52
|
||||
db $0E, $1F, $11, $0F
|
||||
db $72, $57, $FF, $FF ; A0
|
||||
db $00, $02, $1E, $12
|
||||
db $45, $45, $16, $06
|
||||
db $02, $0F, $12, $0F
|
||||
db $FF, $FF, $4E, $FF ; A4
|
||||
db $65, $75, $2E, $2E
|
||||
db $00, $30, $00, $00
|
||||
db $00, $0F, $0E, $1F
|
||||
db $00, $03, $00, $12 ; A8
|
||||
db $17, $17, $16, $16
|
||||
db $03, $00, $12, $00
|
||||
db $FF, $FF, $5A, $FF
|
||||
db $FF, $FF, $FF, $4F ; AC
|
||||
db $00, $00, $00, $00
|
||||
db $0F, $34, $1F, $0E
|
||||
db $11, $0F, $0E, $1F
|
||||
db $2E, $67, $2E, $57 ; B0
|
||||
db $74, $75, $2E, $2D
|
||||
db $14, $05, $10, $11 ; B2 - split this monster somehow?
|
||||
db $4A, $FF, $4A, $FF
|
||||
db $10, $00, $44, $44
|
||||
db $30, $00, $10, $00
|
||||
db $65, $74, $75, $75
|
||||
db $74, $FF, $75, $FF
|
||||
db $FF, $4A, $FF, $74 ; B8
|
||||
db $15, $15, $14, $14
|
||||
db $73, $70, $FF, $FF
|
||||
db $10, $01, $00, $01
|
||||
db $34, $10, $11, $10
|
||||
db $00, $00, $00, $00
|
||||
db $FF, $65, $FF, $4A
|
||||
db $FF, $FF, $4D, $FF
|
||||
db $2E, $67, $2E, $57 ; C0
|
||||
db $2E, $73, $2D, $73
|
||||
db $11, $13, $01, $13
|
||||
db $13, $00, $03, $00
|
||||
db $44, $44, $00, $01 ; C4
|
||||
db $75, $FF, $4A, $FF
|
||||
db $10, $11, $10, $11
|
||||
db $11, $00, $01, $00
|
||||
db $FF, $FF, $FF, $4F ; C8
|
||||
db $14, $14, $24, $24
|
||||
db $00, $00, $00, $00
|
||||
db $00, $03, $14, $07
|
||||
db $13, $10, $07, $14 ; CC
|
||||
db $00, $00, $00, $00
|
||||
db $FF, $78, $FF, $FF
|
||||
db $00, $00, $00, $00
|
||||
db $2E, $67, $2E, $57 ; D0
|
||||
db $4E, $4F, $70, $70
|
||||
db $FF, $75, $FF, $55
|
||||
db $FF, $FF, $FF, $FF ; D3 - unused
|
||||
db $FF, $FF, $FF, $FF ; D4 - unused
|
||||
db $75, $FF, $76, $FF
|
||||
db $75, $75, $74, $76
|
||||
db $00, $00, $00, $00
|
||||
db $FF, $75, $FF, $77 ; D8
|
||||
db $FF, $FF, $71, $71
|
||||
db $FF, $FF, $5C, $FF
|
||||
db $14, $06, $24, $3F
|
||||
db $06, $14, $03, $00 ; DC
|
||||
db $00, $00, $00, $00
|
||||
db $0F, $00, $1F, $0E
|
||||
db $0E, $0E, $24, $24
|
||||
db $2E, $67, $76, $FF ; E0
|
||||
db $00, $00, $20, $00
|
||||
db $00, $1E, $00, $20
|
||||
db $1E, $00, $20, $00
|
||||
db $00, $02, $20, $02
|
||||
db $02, $00, $26, $24
|
||||
db $00, $01, $10, $00
|
||||
db $01, $00, $00, $20
|
||||
db $30, $30, $40, $20 ; E8 more cheating
|
||||
db $00, $00, $00, $00
|
||||
db $30, $0F, $20, $0F
|
||||
db $0F, $30, $0F, $20
|
||||
db $00, $00, $00, $00
|
||||
db $30, $30, $00, $20
|
||||
db $00, $00, $00, $20
|
||||
db $1E, $00, $60, $60
|
||||
db $00, $02, $20, $02 ; F0
|
||||
db $02, $02, $00, $20
|
||||
db $1F, $0E, $0F, $20
|
||||
db $0E, $1F, $20, $0F
|
||||
db $1F, $0E, $0F, $20
|
||||
db $0E, $1F, $20, $0F
|
||||
db $00, $00, $00, $00
|
||||
db $00, $00, $00, $00
|
||||
db $30, $30, $60, $24 ; F8
|
||||
db $00, $01, $20, $00
|
||||
db $34, $00, $20, $00
|
||||
db $1E, $30, $24, $24
|
||||
db $00, $00, $00, $00
|
||||
db $30, $30, $24, $24
|
||||
db $0F, $0F, $00, $20
|
||||
db $00, $00, $00, $20
|
||||
130
dungeon_map/draw_loot.asm
Normal file
130
dungeon_map/draw_loot.asm
Normal file
@@ -0,0 +1,130 @@
|
||||
RedrawLoot:
|
||||
JSL DrawLoot
|
||||
|
||||
; what we wrote over
|
||||
SEP #$20
|
||||
STZ.w $0210
|
||||
RTL
|
||||
|
||||
FirstDrawLoot:
|
||||
; what we wrote over
|
||||
LDA.b #$08
|
||||
STA.b $17
|
||||
|
||||
DrawLoot:
|
||||
LDA.b $07
|
||||
STA.w $021B
|
||||
|
||||
REP #$30
|
||||
PHX : PHY
|
||||
|
||||
STZ.b $0E
|
||||
|
||||
LDX.w DungeonID
|
||||
LDA.l $8AF615, X
|
||||
STA.b $0C
|
||||
|
||||
SEP #$20
|
||||
LDA.l $8AF5E9, X
|
||||
AND.b #$0F
|
||||
CLC : ADC.w $020E
|
||||
PHA
|
||||
|
||||
JSR DrawSingleFloorLoot
|
||||
|
||||
INC.b $0F
|
||||
LDA.b #$80
|
||||
STA.b $0E
|
||||
PLA : DEC A
|
||||
JSR DrawSingleFloorLoot
|
||||
|
||||
LDX.w GFXStripes
|
||||
LDA.b #$FF
|
||||
STA.w GFXStripes+2, X
|
||||
|
||||
LDA.b #$01
|
||||
STA.b NMISTRIPES
|
||||
|
||||
PLY : PLX
|
||||
LDA.b #$00
|
||||
RTL
|
||||
|
||||
DrawSingleFloorLoot:
|
||||
REP #$20
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
LDA.l $8AF605, X
|
||||
TAY
|
||||
STZ.b $06
|
||||
|
||||
.next_row
|
||||
REP #$20
|
||||
LDA.w GFXStripes
|
||||
TAX
|
||||
CLC : ADC.w #$0030
|
||||
STA.w GFXStripes
|
||||
|
||||
LDA.b $07
|
||||
AND.w #$00FF
|
||||
XBA
|
||||
LSR A : LSR A
|
||||
CLC : ADC.w #$1092
|
||||
ADC.b $0E
|
||||
XBA
|
||||
STA.w GFXStripes+2, X
|
||||
CLC : ADC.w #$2000
|
||||
STA.w GFXStripes+$1A, X
|
||||
|
||||
LDA.w #$1300
|
||||
STA.w GFXStripes+$04, X
|
||||
STA.w GFXStripes+$1C, X
|
||||
|
||||
.next_room
|
||||
REP #$20
|
||||
LDA.b ($0C), Y ; get room id
|
||||
PHY
|
||||
|
||||
AND.w #$00FF
|
||||
CMP.w #$000F ; $0F = empty room
|
||||
|
||||
BNE .valid_room
|
||||
LDA.w #$0000
|
||||
BRA +
|
||||
.valid_room
|
||||
JSL CheckLoot
|
||||
+
|
||||
ASL A : ASL A : ASL A
|
||||
|
||||
TXY
|
||||
TAX
|
||||
|
||||
LDA.l LootTypeIcons+0, X
|
||||
STA.w GFXStripes+$06, Y
|
||||
LDA.l LootTypeIcons+2, X
|
||||
STA.w GFXStripes+$08, Y
|
||||
LDA.l LootTypeIcons+4, X
|
||||
STA.w GFXStripes+$1E, Y
|
||||
LDA.l LootTypeIcons+6, X
|
||||
STA.w GFXStripes+$20, Y
|
||||
|
||||
TYX
|
||||
PLY
|
||||
INY : INX #4
|
||||
|
||||
SEP #$20
|
||||
INC.b $06
|
||||
LDA.b $06
|
||||
CMP.b #$05
|
||||
BCC .next_room
|
||||
|
||||
STZ.b $06
|
||||
INC.b $07
|
||||
LDA.b $07
|
||||
CMP.b #$05
|
||||
BCS .done
|
||||
JMP .next_row
|
||||
|
||||
.done
|
||||
RTS
|
||||
84
dungeon_map/draw_rooms.asm
Normal file
84
dungeon_map/draw_rooms.asm
Normal file
@@ -0,0 +1,84 @@
|
||||
; $CA has room_id
|
||||
DrawDungeonMapRoom:
|
||||
PHB : PHK : PLB ; need to keep this in same bank as data, or else specify bank
|
||||
|
||||
; base no-info palette
|
||||
LDA.w #$0C00
|
||||
STA.b $0C
|
||||
|
||||
PHX
|
||||
LDX.w DungeonID
|
||||
LDA.l MapField
|
||||
AND.l DungeonMask, X
|
||||
BEQ +
|
||||
LDA.w #$1400
|
||||
STA.b $0C
|
||||
LDA.b $0E
|
||||
ORA.w #$8000
|
||||
STA.b $0E
|
||||
+
|
||||
|
||||
LDA.l CompassField
|
||||
AND.l DungeonMask, X
|
||||
BEQ +
|
||||
LDA.b $0E
|
||||
ORA.w #$4000
|
||||
STA.b $0E
|
||||
+
|
||||
PLX
|
||||
|
||||
LDA.b $0E
|
||||
BNE +
|
||||
; we haven't seen the supertile at all and don't have map or compass
|
||||
LDA.w #$0F7B
|
||||
STA.l $7F0042, X
|
||||
ORA.w #$4000
|
||||
STA.l $7F0040, X
|
||||
ORA.w #$8000
|
||||
STA.l $7F0000, X
|
||||
AND.w #$BFFF
|
||||
STA.l $7F0002, X
|
||||
JMP .done
|
||||
+
|
||||
|
||||
AND.w #$000F
|
||||
BEQ +
|
||||
LDA.w #$1400
|
||||
STA.b $0C
|
||||
+
|
||||
|
||||
LDA.b $CA
|
||||
AND.w #$00FF
|
||||
ASL A : ASL A
|
||||
TAY
|
||||
|
||||
macro DrawQuadrant(quadrant, writeOffset)
|
||||
?DrawQuadrant:
|
||||
LDA.w SupertileRoomShapes+<quadrant>, Y
|
||||
AND.w #$00FF
|
||||
CMP.w #$00FF : BEQ ?.empty
|
||||
CLC : ADC.w #$0340
|
||||
ORA.w #(3-<quadrant>)<<14
|
||||
PHA
|
||||
LDA.b $0E
|
||||
AND.w #1<<(3-<quadrant>)
|
||||
BNE ?.visited
|
||||
PLA
|
||||
ORA.b $0C
|
||||
BRA ?.write
|
||||
?.visited
|
||||
PLA
|
||||
ORA.w #$0800
|
||||
?.write
|
||||
STA.l $7F0000+<writeOffset>, X
|
||||
?.empty
|
||||
endmacro
|
||||
|
||||
%DrawQuadrant(0, $00)
|
||||
%DrawQuadrant(1, $02)
|
||||
%DrawQuadrant(2, $40)
|
||||
%DrawQuadrant(3, $42)
|
||||
|
||||
.done
|
||||
PLB
|
||||
RTL
|
||||
101
dungeon_map/dungeon_switch.asm
Normal file
101
dungeon_map/dungeon_switch.asm
Normal file
@@ -0,0 +1,101 @@
|
||||
CheckSwitchMap:
|
||||
SEP #$20
|
||||
LDA.b $F6
|
||||
AND.b #$30
|
||||
BNE +
|
||||
|
||||
; what we wrote over
|
||||
REP #$20
|
||||
LDA.w $8AF5E9, X
|
||||
AND.w #$000F
|
||||
CLC : ADC.b $00
|
||||
RTL
|
||||
|
||||
+ PHA
|
||||
TXA
|
||||
ASL A
|
||||
TAX
|
||||
PLA
|
||||
BIT.b #$20
|
||||
BNE +
|
||||
INX
|
||||
+ LDA.l DungeonMapData.prev, X
|
||||
STA.w DungeonID
|
||||
|
||||
LDA.b #$04
|
||||
STA.w $0200
|
||||
REP #$20
|
||||
LDA.w #$0000
|
||||
RTL
|
||||
|
||||
DungeonMapSwitch_Submodule:
|
||||
; LDA.b $9B
|
||||
; STA.l $7EC229
|
||||
|
||||
JSL $80893D
|
||||
JSL $80833F
|
||||
; LDA.l $7EC229
|
||||
; STA.b $9B
|
||||
|
||||
LDA.b #$09
|
||||
STA.b $14
|
||||
STA.w $0710
|
||||
|
||||
LDA.b #$01
|
||||
STA.w $0200
|
||||
STA.w $020D
|
||||
STZ.w $021B
|
||||
STZ.w $021C
|
||||
STZ.b $06
|
||||
STZ.b $07
|
||||
|
||||
LDA.w DungeonID
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l DungeonMapData.floor, X
|
||||
STA.b $A4
|
||||
|
||||
REP #$20
|
||||
JML $98BC8A
|
||||
|
||||
SkipMapSprites:
|
||||
STZ.b $00
|
||||
STZ.b $0E
|
||||
|
||||
LDA.w $0200
|
||||
CMP.b #$04
|
||||
BNE +
|
||||
JML $8AEAFC
|
||||
+ LDA.l $7EC22A
|
||||
CMP.w DungeonID
|
||||
BEQ +
|
||||
JML $8AEAF3
|
||||
+ JML $8AEADE
|
||||
|
||||
CacheCurrentDungeon:
|
||||
STA.l $7EC206
|
||||
SEP #$20
|
||||
LDA.w DungeonID
|
||||
STA.l $7EC22A
|
||||
LDA.b $A4
|
||||
STA.l $7EC22B
|
||||
REP #$20
|
||||
RTL
|
||||
|
||||
RestoreCurrentDungeon:
|
||||
LDA.b #$F3
|
||||
STA.w $012C ; what we wrote over
|
||||
LDA.l $7EC22A
|
||||
STA.w DungeonID
|
||||
LDA.l $7EC22B
|
||||
STA.b $4A
|
||||
RTL
|
||||
|
||||
RestoreDungeonMapFloorIndex:
|
||||
STZ.w $020F
|
||||
LDA.w $021B
|
||||
STA.b $07
|
||||
STZ.b $06
|
||||
LDA.b $0A
|
||||
AND.b #$08
|
||||
RTL
|
||||
105
dungeon_map/hooks.asm
Normal file
105
dungeon_map/hooks.asm
Normal file
@@ -0,0 +1,105 @@
|
||||
; move aga boss icon to correct room
|
||||
org $8AEE75
|
||||
db $08
|
||||
|
||||
; change dungeon map subsheet gfx in TR
|
||||
org $80DDC9
|
||||
db $57
|
||||
|
||||
; Dungeon Map Palettes 2-5 left half
|
||||
org $9BE544
|
||||
dw $0000, $71E7, $7FFF, $3B5F, $0000, $0000, $7EB5, $1CE7
|
||||
|
||||
org $9BE564
|
||||
dw $0000, $34E0, $7FFF, $34E0, $34E0, $0000, $7EB5, $1CE7
|
||||
|
||||
org $9BE584
|
||||
dw $0000, $71E7, $2DFF, $3B5F, $7FFF, $0000, $0018, $1CE7
|
||||
|
||||
org $9BE5A4
|
||||
dw $0000, $34E0, $7FFF, $2656, $34E0, $0000, $7EB5, $1CE7
|
||||
|
||||
; move BG1 to main screen in dungeon map screen
|
||||
org $8AE130
|
||||
LDA.b #$17 : STA.b $1C
|
||||
LDA.b #$00 : STA.b $1D
|
||||
|
||||
; make skull icon blink opposite our loot icons
|
||||
org $8AEE2B
|
||||
AND.b #$10
|
||||
NOP #2
|
||||
db $F0 ; BEQ to replace BCS
|
||||
|
||||
;================================================================================
|
||||
; Overhaul of Dungeon Map Screen
|
||||
;--------------------------------------------------------------------------------
|
||||
org $8AE64F
|
||||
PLX
|
||||
JSL DrawDungeonMapRoom
|
||||
JMP.w $8AE7F2
|
||||
|
||||
org $8AE152
|
||||
JSL LoadLastHUDPalette
|
||||
|
||||
;================================================================================
|
||||
; Swapping Dungeon in Dungeon Map Screen (L/R)
|
||||
;--------------------------------------------------------------------------------
|
||||
org $8AE9A7
|
||||
JSL CheckSwitchMap
|
||||
BRA + : NOP #3 : +
|
||||
|
||||
org $8AEF06
|
||||
DEC.b $13
|
||||
BNE +
|
||||
JML DungeonMapSwitch_Submodule
|
||||
+ RTL
|
||||
warnpc $8AEF29
|
||||
|
||||
org $8AEADA
|
||||
JML SkipMapSprites
|
||||
|
||||
org $8AE9C7
|
||||
JSL RestoreDungeonMapFloorIndex
|
||||
NOP
|
||||
|
||||
org $98BC86
|
||||
JSL CacheCurrentDungeon
|
||||
|
||||
org $8AEFC5
|
||||
JSL RestoreCurrentDungeon
|
||||
NOP
|
||||
|
||||
;================================================================================
|
||||
; Show indicators of what is left in each room
|
||||
;--------------------------------------------------------------------------------
|
||||
org $8AEABA
|
||||
JSL RedrawLoot
|
||||
NOP
|
||||
|
||||
org $8AE42B
|
||||
JSL FirstDrawLoot
|
||||
|
||||
;================================================================================
|
||||
; Blink indicators of what is left in each room
|
||||
;--------------------------------------------------------------------------------
|
||||
org $8AE964
|
||||
JSL BlinkLoot
|
||||
|
||||
org $8AE235
|
||||
JSL WriteBigEndianAddressX
|
||||
org $8AE290
|
||||
JSL WriteBigEndianAddressY
|
||||
org $8AE350
|
||||
JSL WriteBigEndianAddressY
|
||||
|
||||
org $8AE206
|
||||
JSL StartDoubleWrite
|
||||
NOP
|
||||
|
||||
org $8AE2E0
|
||||
JML CheckDoubleWrite
|
||||
NOP
|
||||
|
||||
org $8AE21C
|
||||
JSL DrawMountain
|
||||
BRA + : NOP #9 : +
|
||||
33
dungeon_map/main.asm
Normal file
33
dungeon_map/main.asm
Normal file
@@ -0,0 +1,33 @@
|
||||
pushpc
|
||||
incsrc hooks.asm
|
||||
|
||||
macro WriteGFXSheetPointer(sheet, location)
|
||||
pushpc
|
||||
org $80CFC0+<sheet>
|
||||
db <location>>>16
|
||||
|
||||
org $80D09F+<sheet>
|
||||
db <location>>>8
|
||||
|
||||
org $80D17E+<sheet>
|
||||
db <location>>>0
|
||||
|
||||
pullpc
|
||||
endmacro
|
||||
|
||||
%WriteGFXSheetPointer($C9, DungeonMapIcons1)
|
||||
%WriteGFXSheetPointer($CA, DungeonMapIcons2)
|
||||
|
||||
%WriteGFXSheetPointer($D5, DungeonMapIcons1)
|
||||
%WriteGFXSheetPointer($D6, DungeonMapIcons2)
|
||||
|
||||
%WriteGFXSheetPointer($D4, MapSheetD4)
|
||||
|
||||
pullpc
|
||||
|
||||
incsrc draw_rooms.asm
|
||||
incsrc map_bg3.asm
|
||||
incsrc dungeon_switch.asm
|
||||
incsrc draw_loot.asm
|
||||
incsrc check_loot.asm
|
||||
incsrc blink_loot.asm
|
||||
96
dungeon_map/map_bg3.asm
Normal file
96
dungeon_map/map_bg3.asm
Normal file
@@ -0,0 +1,96 @@
|
||||
pushpc
|
||||
org $809383
|
||||
db BG3DungeonMapStripes>>0
|
||||
|
||||
org $80938C
|
||||
db BG3DungeonMapStripes>>8
|
||||
|
||||
org $809395
|
||||
db BG3DungeonMapStripes>>16
|
||||
pullpc
|
||||
|
||||
LoadLastHUDPalette:
|
||||
; what we wrote over
|
||||
JSL $9BEE52
|
||||
|
||||
REP #$20
|
||||
LDA.l MapHUDPalette
|
||||
STA.l PaletteBuffer+$3A
|
||||
LDA.l MapHUDPalette+2
|
||||
STA.l PaletteBuffer+$3C
|
||||
LDA.l MapHUDPalette+4
|
||||
STA.l PaletteBuffer+$3E
|
||||
SEP #$20
|
||||
RTL
|
||||
|
||||
BG3DungeonMapStripes:
|
||||
; boring stuff from vanilla
|
||||
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 $4E60, $0100, $2100
|
||||
dw $4F60, $1A40, $2101
|
||||
dw $5D60, $0100, $6100
|
||||
dw $6E60, $2EC0, $2110
|
||||
dw $7D60, $2EC0, $6110
|
||||
dw $6E63, $0100, $A100
|
||||
dw $6F63, $1A40, $A101
|
||||
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
|
||||
|
||||
; new stuff here:
|
||||
; horizontal borders
|
||||
dw $7260, $1340, $1D11
|
||||
dw $D261, $1340, $1D11
|
||||
dw $F261, $1340, $1D11
|
||||
dw $5263, $1340, $1D11
|
||||
|
||||
; vertical borders
|
||||
dw $7160, $2FC0, $1D11
|
||||
dw $7C60, $2FC0, $1D11
|
||||
|
||||
macro TopOfSquares(start)
|
||||
; silly Big Endian
|
||||
db <start>>>8, <start>, $00, $13
|
||||
dw $5D4C, $1D4C, $5D4C, $1D4C, $5D4C, $1D4C, $5D4C, $1D4C, $5D4C, $1D4C
|
||||
endmacro
|
||||
|
||||
macro BottomOfSquares(start)
|
||||
; silly Big Endian
|
||||
db <start>>>8, <start>, $00, $13
|
||||
dw $DD4C, $9D4C, $DD4C, $9D4C, $DD4C, $9D4C, $DD4C, $9D4C, $DD4C, $9D4C
|
||||
endmacro
|
||||
|
||||
macro FullRow(start)
|
||||
%TopOfSquares(<start>)
|
||||
%BottomOfSquares(<start>+$20)
|
||||
endmacro
|
||||
|
||||
; top grid
|
||||
%FullRow($6092)
|
||||
%FullRow($60D2)
|
||||
%FullRow($6112)
|
||||
%FullRow($6152)
|
||||
%FullRow($6192)
|
||||
|
||||
%FullRow($6212)
|
||||
%FullRow($6252)
|
||||
%FullRow($6292)
|
||||
%FullRow($62D2)
|
||||
%FullRow($6312)
|
||||
|
||||
db $FF
|
||||
83
dungeon_map/settings.asm
Normal file
83
dungeon_map/settings.asm
Normal file
@@ -0,0 +1,83 @@
|
||||
; $B9F000
|
||||
SupertileRoomShapes:
|
||||
incsrc data/supertile_shapes.asm
|
||||
warnpc $B9F400
|
||||
|
||||
org $B9F400
|
||||
DungeonMapData:
|
||||
db $02, $04, $00, $00 ; Sewers
|
||||
db $1A, $00, $00, $00 ; Hyrule Castle
|
||||
db $00, $06, $00, $00 ; Eastern Palace
|
||||
db $04, $14, $00, $00 ; Desert Palace
|
||||
db $14, $0C, $01, $00 ; Castle Tower
|
||||
db $0C, $10, $00, $00 ; Swamp Palace
|
||||
db $08, $0A, $00, $00 ; Palace of Darkness
|
||||
db $12, $18, $00, $00 ; Misery Mire
|
||||
db $0A, $16, $FF, $00 ; Skull Woods
|
||||
db $16, $0E, $00, $00 ; Ice Palace
|
||||
db $06, $08, $01, $00 ; Tower of Hera
|
||||
db $10, $12, $00, $00 ; Thieves Town
|
||||
db $0E, $1A, $00, $00 ; Turtle Rock
|
||||
db $18, $02, $01, $00 ; Ganon's Tower
|
||||
db $1A, $02, $00, $00 ; Extra
|
||||
db $1A, $02, $00, $00 ; Extra
|
||||
|
||||
struct DungeonMapData DungeonMapData
|
||||
.prev: skip 1
|
||||
.next: skip 1
|
||||
.floor: skip 1
|
||||
.unused: skip 1
|
||||
endstruct
|
||||
|
||||
; $B9F480
|
||||
LootTypeIcons:
|
||||
dw $1300, $1300, $1300, $1300 ; 00 - nothing
|
||||
dw $334D, $734D, $335D, $735D ; 01 - unknown - basic chest
|
||||
dw $330D, $730D, $333D, $733D ; 02 - junk - pot
|
||||
dw $3307, $3308, $3317, $3318 ; 03 - small key
|
||||
dw $330A, $730A, $333A, $733A ; 04 - triforce piece
|
||||
dw $330C, $730C, $333C, $733C ; 05 - safety - heart
|
||||
dw $330E, $730E, $333E, $733E ; 06 - compass
|
||||
dw $3307, $3308, $3317, $3318 ; 07 - small key
|
||||
dw $3305, $7305, $3315, $3316 ; 08 - big key
|
||||
dw $3309, $7309, $3339, $7339 ; 09 - pendant
|
||||
dw $330F, $730F, $333F, $733F ; 0A - inventory item - big chest
|
||||
dw $3309, $7309, $3339, $7339 ; 0B - also pendant
|
||||
dw $3303, $7303, $B303, $F303 ; 0C - crystal
|
||||
dw $330A, $730A, $333A, $733A ; 0D - triforce piece
|
||||
dw $330B, $730B, $333B, $733B ; 0E - triforce
|
||||
dw $1300, $1300, $1300, $1300 ; 0F - empty (reserved)
|
||||
|
||||
; $B9F500
|
||||
LootTypeMapping:
|
||||
incsrc data/item_mapping.asm
|
||||
|
||||
; $B9F600
|
||||
; Room ID mappings to bit to check for presence and address of item drop
|
||||
MiscLocations:
|
||||
dw $00C8 : db $04 : dl HeartContainer_ArmosKnights
|
||||
dw $0033 : db $04 : dl HeartContainer_Lanmolas
|
||||
dw $0007 : db $04 : dl HeartContainer_Moldorm
|
||||
|
||||
dw $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 $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
|
||||
dw $FFFF
|
||||
|
||||
; $B9F682
|
||||
MapHUDPalette:
|
||||
dw $0000, $3ED8, $2E54
|
||||
|
||||
; $B9F688
|
||||
Reference in New Issue
Block a user