Merge pull request #193 from spannerisms/decompressed

Decompressed
This commit is contained in:
Lexi Rose
2023-08-16 01:56:09 -05:00
committed by GitHub
91 changed files with 16557 additions and 6742 deletions

View File

@@ -3,34 +3,40 @@
;================================================================================ ;================================================================================
lorom lorom
;===================================================================================================
; THIS NEEDS TO BE THE FIRST INCLUDE BECAUSE IT CHANGES THINGS EVERYWHERE
; If this were to be included later, it would almost certainly overwrite other changes
incsrc "fastrom.asm"
;================================================================================ ;================================================================================
;org $00FFC0 ; <- 7FC0 - Bank00.asm : 9173 (db "THE LEGEND OF ZELDA " ; 21 bytes) ;org $80FFC0 ; <- 7FC0 - Bank00.asm : 9173 (db "THE LEGEND OF ZELDA " ; 21 bytes)
;db #$23, $4E ;db $23, $4E
org $00FFD5 ; <- 7FD5 - Bank00.asm : 9175 (db $20 ; rom layout) org $80FFD5 ; <- 7FD5 - Bank00.asm : 9175 (db $20 ; rom layout)
db #$30 ; set fast lorom db $30 ; set fast lorom
;org $00FFD6 ; <- 7FD6 - Bank00.asm : 9176 (db $02 ; cartridge type) ;org $80FFD6 ; <- 7FD6 - Bank00.asm : 9176 (db $02 ; cartridge type)
;db #$55 ; enable S-RTC ;db $55 ; enable S-RTC
org $00FFD7 ; <- 7FD7 - Bank00.asm : 9177 (db $0A ; rom size) org $80FFD7 ; <- 7FD7 - Bank00.asm : 9177 (db $0A ; rom size)
db #$0B ; mark rom as 16mbit db $0B ; mark rom as 16mbit
org $00FFD8 ; <- 7FD8 - Bank00.asm : 9178 (db $03 ; ram size (sram size)) org $80FFD8 ; <- 7FD8 - Bank00.asm : 9178 (db $03 ; ram size (sram size))
db #$05 ; mark sram as 32k db $05 ; mark sram as 32k
org $3FFFFF ; <- 1FFFFF org $BFFFFF ; <- 1FFFFF
db #$00 ; expand file to 2mb db $00 ; expand file to 2mb
org $1FFFF8 ; <- FFFF8 timestamp rom org $9FFFF8 ; <- FFFF8 timestamp rom
db #$20, #$19, #$08, #$31 ; year/month/day db $20, $19, $08, $31 ; year/month/day
;================================================================================ ;================================================================================
!ROM_VERSION_LOW ?= 1 ; ROM version (two 16-bit integers) !ROM_VERSION_LOW ?= 1 ; ROM version (two 16-bit integers)
!ROM_VERSION_HIGH ?= 3 ; !ROM_VERSION_HIGH ?= 4 ;
org $00FFE0 ; Unused hardware vector org $80FFE0 ; Unused hardware vector
RomVersion: RomVersion:
dw !ROM_VERSION_LOW dw !ROM_VERSION_LOW
dw !ROM_VERSION_HIGH dw !ROM_VERSION_HIGH
@@ -56,10 +62,9 @@ incsrc ram.asm
incsrc sram.asm incsrc sram.asm
incsrc registers.asm incsrc registers.asm
incsrc vanillalabels.asm incsrc vanillalabels.asm
incsrc overworldmap.asm ; Overwrites some code in bank $8A
;org $208000 ; bank #$20 org $A08000 ; bank $20
org $A08000 ; bank #$A0
incsrc newitems.asm ; LEAVE THIS AS FIRST
incsrc itemdowngrade.asm incsrc itemdowngrade.asm
incsrc bugfixes.asm incsrc bugfixes.asm
incsrc darkworldspawn.asm incsrc darkworldspawn.asm
@@ -67,7 +72,6 @@ incsrc lampmantlecone.asm
incsrc floodgatesoftlock.asm incsrc floodgatesoftlock.asm
incsrc heartpieces.asm incsrc heartpieces.asm
incsrc npcitems.asm incsrc npcitems.asm
incsrc utilities.asm
incsrc flipperkill.asm incsrc flipperkill.asm
incsrc pendantcrystalhud.asm incsrc pendantcrystalhud.asm
incsrc potions.asm incsrc potions.asm
@@ -78,7 +82,6 @@ incsrc tablets.asm
incsrc fairyfixes.asm incsrc fairyfixes.asm
incsrc rngfixes.asm incsrc rngfixes.asm
incsrc medallions.asm incsrc medallions.asm
incsrc inventory.asm
incsrc zelda.asm incsrc zelda.asm
incsrc maidencrystals.asm incsrc maidencrystals.asm
incsrc flute.asm incsrc flute.asm
@@ -98,9 +101,9 @@ incsrc roomloading.asm
incsrc icepalacegraphics.asm incsrc icepalacegraphics.asm
warnpc $A18000 warnpc $A18000
org $1C8000 ; text tables for translation org $9C8000 ; text tables for translation
incbin "data/i18n_en.bin" incbin "data/i18n_en.bin"
warnpc $1CF356 warnpc $9CF356
org $A18000 ; static mapping area org $A18000 ; static mapping area
incsrc framehook.asm incsrc framehook.asm
@@ -111,7 +114,7 @@ incsrc hud.asm
warnpc $A18800 warnpc $A18800
org $A18800 ; static mapping area org $A18800 ; static mapping area
incsrc zsnes.asm
warnpc $A19000 warnpc $A19000
org $A1A000 ; static mapping area. Referenced by front end. Do not move. org $A1A000 ; static mapping area. Referenced by front end. Do not move.
@@ -131,7 +134,6 @@ incsrc glitched.asm
incsrc hardmode.asm incsrc hardmode.asm
incsrc goalitem.asm incsrc goalitem.asm
incsrc quickswap.asm incsrc quickswap.asm
incsrc endingsequence.asm
incsrc cuccostorm.asm incsrc cuccostorm.asm
incsrc retro.asm incsrc retro.asm
incsrc controllerjank.asm incsrc controllerjank.asm
@@ -144,7 +146,6 @@ incsrc hashalphabet.asm
incsrc inverted.asm incsrc inverted.asm
incsrc invertedmaps.asm incsrc invertedmaps.asm
incsrc newhud.asm incsrc newhud.asm
incsrc compasses.asm
incsrc save.asm incsrc save.asm
incsrc password.asm incsrc password.asm
incsrc enemy_adjustments.asm incsrc enemy_adjustments.asm
@@ -152,110 +153,127 @@ incsrc hudtext.asm
incsrc servicerequest.asm incsrc servicerequest.asm
incsrc elder.asm incsrc elder.asm
incsrc toast.asm incsrc toast.asm
incsrc darkroomitems.asm
incsrc fastcredits.asm incsrc fastcredits.asm
incsrc msu.asm incsrc msu.asm
incsrc dungeonmap.asm incsrc dungeonmap.asm
incsrc hextodec.asm incsrc hextodec.asm
if !FEATURE_NEW_TEXT if !FEATURE_NEW_TEXT
incsrc textrenderer.asm incsrc textrenderer.asm
endif endif
warnpc $A58000 warnpc $A58000
org $A28000 org $A28000
ItemReceiptGraphicsROM:
; we need some empty space here so that 0000 can mean nothing
fillbyte $00 : fill 32
incbin "data/customitems.4bpp"
warnpc $A2B000
org $A2B000
incsrc itemdatatables.asm ; Statically mapped
incsrc decompresseditemgraphics.asm
incsrc newitems.asm
incsrc utilities.asm
incsrc inventory.asm
org $A38000 org $A38000
incsrc stats/credits.asm ; Statically mapped
incsrc stats/main.asm incsrc stats/main.asm
incsrc stats/statConfig.asm
FontTable:
incsrc stats/fonttable.asm
org $308000 ; bank #$30 org $B08000 ; bank $30
incsrc tables.asm incsrc tables.asm
org $348000 org $B48000
incsrc spc.asm incsrc spc.asm
org $318000 ; bank #$31 org $B18000 ; bank $31
GFX_Mire_Bombos: GFX_Mire_Bombos:
incbin "data/99ff1_bombos.gfx" incbin "data/99ff1_bombos.gfx"
warnpc $318800 warnpc $B18800
org $318800 org $B18800
GFX_Mire_Quake: GFX_Mire_Quake:
incbin "data/99ff1_quake.gfx" incbin "data/99ff1_quake.gfx"
warnpc $319000 warnpc $B19000
org $319000 org $B19000
GFX_TRock_Bombos: GFX_TRock_Bombos:
incbin "data/a6fc4_bombos.gfx" incbin "data/a6fc4_bombos.gfx"
warnpc $319800 warnpc $B19800
org $319800 org $B19800
GFX_TRock_Ether: GFX_TRock_Ether:
incbin "data/a6fc4_ether.gfx" incbin "data/a6fc4_ether.gfx"
warnpc $31A000 warnpc $B1A000
org $31A000 org $B1A000
GFX_HUD_Items: GFX_HUD_Items:
incbin "data/c2807_v4.gfx" incbin "data/c2807_v4.gfx"
warnpc $31A800 warnpc $B1A800
org $31A800 org $B1A800
GFX_New_Items:
incbin "data/newitems.gfx"
;incbin eventitems.gfx ; *EVENT*
warnpc $31B000
org $31B000 warnpc $B1B000
org $B1B000
GFX_HUD_Main: GFX_HUD_Main:
incbin "data/c2e3e.gfx" incbin "data/c2e3e.gfx"
warnpc $31B800 warnpc $B1B800
org $31C000 org $B1C000
IcePalaceFloorGfx: IcePalaceFloorGfx:
incbin "data/ice_palace_floor.bin" incbin "data/ice_palace_floor.bin"
warnpc $31C801 warnpc $B1C801
org $31C800 org $B1C800
Damage_Table: Damage_Table:
incbin "data/damage_table.bin" incbin "data/damage_table.bin"
warnpc $31D001 warnpc $B1D001
org $31D000 org $B1D000
FileSelectNewGraphics: FileSelectNewGraphics:
incbin "data/fileselectgfx.2bpp" incbin "data/fileselectgfx.2bpp"
warnpc $31E001 warnpc $B1E001
org $31E000 org $B1E000
InvertedCastleHole: ;address used by front end. DO NOT MOVE! InvertedCastleHole: ;address used by front end. DO NOT MOVE!
incbin "data/sheet73.gfx" incbin "data/sheet73.gfx"
warnpc $31E501 warnpc $B1E501
org $338000 org $B38000
GFX_HUD_Palette: GFX_HUD_Palette:
incbin "data/hudpalette.pal" incbin "data/hudpalette.pal"
warnpc $338041 warnpc $B38041
org $339000 org $B39000
ExpandedTrinexx:
incbin "data/sheet178.gfx" incbin "data/sheet178.gfx"
warnpc $339600 warnpc $B39600
org $339600 org $B39600
BossMapIconGFX: BossMapIconGFX:
incbin "data/bossicons.4bpp" incbin "data/bossicons.4bpp"
if !FEATURE_NEW_TEXT if !FEATURE_NEW_TEXT
org $339C00 org $B39C00
NewFont: NewFont:
incbin "data/newfont.bin" incbin "data/newfont.bin"
NewFontInverted: NewFontInverted:
incbin "data/newfont_inverted.bin" incbin "data/newfont_inverted.bin"
SmallCharacters:
org $0CD7DF incbin "data/smallchars.2bpp"
incbin "data/text_unscramble1.bin" org $8CD7DF
org $0CE4D5 incsrc data/playernamecharmap.asm
incbin "data/text_unscramble2.bin" org $8CE73D
incbin data/playernamestripes_1.bin
org $8CE911
incbin data/playernamestripes_2.bin
incsrc data/kanjireplacements.asm ; Overwrites text gfx data and masks in bank $8E
endif endif
org $328000 org $B28000
Extra_Text_Table: Extra_Text_Table:
if !FEATURE_NEW_TEXT if !FEATURE_NEW_TEXT
incsrc itemtext_lower.asm incsrc itemtext_lower.asm
@@ -265,9 +283,13 @@ endif
incsrc externalhooks.asm incsrc externalhooks.asm
;================================================================================ ;================================================================================
org $119100 ; PC 0x89100 org $919100 ; PC 0x89100
incbin "data/map_icons.gfx" incbin "data/map_icons.gfx"
warnpc $119401 warnpc $919401
;================================================================================
org $9BB1E0
incsrc custompalettes.asm
warnpc $9BB880
;================================================================================ ;================================================================================
org $AF8000 ; PC 0x178000 org $AF8000 ; PC 0x178000
Static_RNG: ; each line below is 512 bytes of rng Static_RNG: ; each line below is 512 bytes of rng
@@ -318,25 +340,18 @@ warnpc $B08000
;$70:6000 (8K) Scratch buffers ;$70:6000 (8K) Scratch buffers
;================================================================================ ;================================================================================
org $00D09C ; 0x509C - HUD Items H org $80D09C ; 0x509C - HUD Items H
db GFX_HUD_Items>>16 db GFX_HUD_Items>>16
org $00D17B ; 0x517B - HUD Items M org $80D17B ; 0x517B - HUD Items M
db GFX_HUD_Items>>8 db GFX_HUD_Items>>8
org $00D25A ; 0x525A - HUD Items L org $80D25A ; 0x525A - HUD Items L
db GFX_HUD_Items db GFX_HUD_Items
; this used to be a pointer to a dummy file org $80D09D ; 0x509D - HUD Main H
org $00D065 ; 005065 - New Items H
db GFX_New_Items>>16
org $00D144 ; 005114 - New Items M
db GFX_New_Items>>8
org $00D223 ; 005223 - New Items L
db GFX_New_Items
org $00D09D ; 0x509D - HUD Main H
db GFX_HUD_Main>>16 db GFX_HUD_Main>>16
org $00D17C ; 0x517C - HUD Main M org $80D17C ; 0x517C - HUD Main M
db GFX_HUD_Main>>8 db GFX_HUD_Main>>8
org $00D25B ; 0x525B - HUD Main L org $80D25B ; 0x525B - HUD Main L
db GFX_HUD_Main db GFX_HUD_Main
;================================================================================ ;================================================================================

View File

@@ -153,7 +153,7 @@ RestoreBgEther:
INX #2 : CPX.b #$10 : BNE - INX #2 : CPX.b #$10 : BNE -
BRA ++ BRA ++
++ ++
JML $02FF51 ; Bank0E.asm : 3936 vanilla restore routine after loop which RTLs JML $82FF51 ; Bank0E.asm : 3936 vanilla restore routine after loop which RTLs
;================================================================================ ;================================================================================
DDMConditionalLightning: DDMConditionalLightning:
LDA.l DisableFlashing LDA.l DisableFlashing
@@ -161,7 +161,7 @@ DDMConditionalLightning:
BNE + BNE +
LDA.w Scrap LDA.w Scrap
LDX.b #$02 LDX.b #$02
JML $07FA7F ; Bank0E.asm : 4738 vanilla loop equivalent to below beginning at LDY #$00 JML $87FA7F ; Bank0E.asm : 4738 vanilla loop equivalent to below beginning at LDY #$00
+ +
LDA.b Scrap00 : LDX.b #$02 : LDY.b #$00 LDA.b Scrap00 : LDX.b #$02 : LDY.b #$00
- -
@@ -172,7 +172,7 @@ DDMConditionalLightning:
LDA.w $F523, Y : LDA.l PaletteBuffer+$F0, X LDA.w $F523, Y : LDA.l PaletteBuffer+$F0, X
INY #2 INY #2
INX #2 : CPX.b #$10 : BNE - INX #2 : CPX.b #$10 : BNE -
JML $07FAAC ; Bank0E.asm : 4754 both branches converge here JML $87FAAC ; Bank0E.asm : 4754 both branches converge here
;================================================================================ ;================================================================================
ConditionalGTFlash: ConditionalGTFlash:
LDA.l DisableFlashing : REP #$20 : BNE + LDA.l DisableFlashing : REP #$20 : BNE +
@@ -222,17 +222,17 @@ LoadElectroPalette:
LDA.w #$0404 : STA.b Scrap0E LDA.w #$0404 : STA.b Scrap0E
LDA.w #$001B : STA.b Scrap02 LDA.w #$001B : STA.b Scrap02
SEP #$10 SEP #$10
LDX.b Scrap0C : LDA.l $1BEBB4, X : AND.w #$00FF : ADC.w #$D630 LDX.b Scrap0C : LDA.l $9BEBB4, X : AND.w #$00FF : ADC.w #$D630
REP #$10 : LDX.w #$01B2 : LDY.w #$0002 REP #$10 : LDX.w #$01B2 : LDY.w #$0002
JSR ConditionalLoadGearPalette JSR ConditionalLoadGearPalette
SEP #$10 SEP #$10
LDX.b Scrap0D LDX.b Scrap0D
LDA.l $1BEBC1, X : AND.w #$00FF : ADC.w #$D648 LDA.l $9BEBC1, X : AND.w #$00FF : ADC.w #$D648
REP #$10 : LDX.w #$01B8 : LDY.w #$0003 REP #$10 : LDX.w #$01B8 : LDY.w #$0003
JSR ConditionalLoadGearPalette JSR ConditionalLoadGearPalette
SEP #$10 SEP #$10
LDX.b Scrap0E LDX.b Scrap0E
LDA.l $1BEC06, X : AND.w #$00FF : ASL A : ADC.w #$D308 LDA.l $9BEC06, X : AND.w #$00FF : ASL A : ADC.w #$D308
REP #$10 : LDX.w #$01E2 : LDY.w #$000E REP #$10 : LDX.w #$01E2 : LDY.w #$000E
JSR ConditionalLoadGearPalette JSR ConditionalLoadGearPalette
SEP #$30 SEP #$30

View File

@@ -3,19 +3,20 @@
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
LoadLibraryItemGFX: LoadLibraryItemGFX:
%GetPossiblyEncryptedItem(LibraryItem, SpriteItemValues) %GetPossiblyEncryptedItem(LibraryItem, SpriteItemValues)
STA.w SpriteItemType, X ; Store item type JSL.l ResolveLootIDLong
JSL.l PrepDynamicTile STA.w SpriteID, X
JSL.l PrepDynamicTile_loot_resolved
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DrawLibraryItemGFX: DrawLibraryItemGFX:
PHA PHA
LDA.w SpriteItemType, X ; Retrieve stored item type LDA.w SpriteID, X
JSL.l DrawDynamicTile JSL.l DrawDynamicTile
PLA PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
SetLibraryItem: SetLibraryItem:
LDY.w SpriteItemType, X ; Retrieve stored item type LDY.w SpriteID, X
JSL.l ItemSet_Library ; contains thing we wrote over JSL.l ItemSet_Library ; contains thing we wrote over
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -29,12 +30,14 @@ LoadBonkItemGFX:
LoadBonkItemGFX_inner: LoadBonkItemGFX_inner:
LDA.b #$00 : STA.l RedrawFlag LDA.b #$00 : STA.l RedrawFlag
JSR LoadBonkItem JSR LoadBonkItem
STA.w SpriteItemType, X
STA.w SpriteID, X
JSL.l PrepDynamicTile JSL.l PrepDynamicTile
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DrawBonkItemGFX: DrawBonkItemGFX:
PHA PHA
LDA.l RedrawFlag : BEQ .skipInit ; skip init if already ready LDA.l RedrawFlag : BEQ .skipInit
JSL.l LoadBonkItemGFX_inner JSL.l LoadBonkItemGFX_inner
BRA .done ; don't draw on the init frame BRA .done ; don't draw on the init frame

View File

@@ -64,7 +64,7 @@ FixBunnyOnExitToLightWorld:
STZ.b LinkState ; set player mode to Normal STZ.b LinkState ; set player mode to Normal
STZ.w BunnyFlag : STZ.b BunnyFlagDP ; return player graphics to normal STZ.w BunnyFlag : STZ.b BunnyFlagDP ; return player graphics to normal
+ +
RTS RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -245,3 +245,10 @@ ParadoxCaveGfxFix:
LDX.w #$00C0 : STX.w DAS0L LDX.w #$00C0 : STX.w DAS0L
BRA .uploadLine BRA .uploadLine
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
SetItemRiseTimer:
LDA.w ItemReceiptMethod : CMP #$01 : BNE .not_from_chest
LDA.b #$38 : STA.w AncillaTimer, X
RTL
.not_from_chest
TYA : STA.w AncillaTimer, X ; What we wrote over
RTL

View File

@@ -1,31 +0,0 @@
DungeonItemMasks: ; these are dungeon correlations to $7EF364 - $7EF369 so it knows where to store compasses, etc
dw $C000, $C000, $2000, $1000, $0800, $0400, $0200, $0100
dw $0080, $0040, $0020, $0010, $0008, $0004
;--------------------------------------------------------------------------------
InitDungeonCounts:
PHB
LDX.b #$0F
-
LDA.l CompassTotalsROM, X : STA.l CompassTotalsWRAM, X
DEX
BPL -
LDX.b #$0F
-
LDA.l ChestKeys, X : STA.l MapTotalsWRAM, X
DEX
BPL -
LDA.b #$7E
PHA : PLB
REP #$30
LDA.l TotalItemCount
JSL.l HUDHex4Digit_Long
SEP #$20
LDA.b Scrap04 : TAX : STX.w TotalItemCountTiles+$00
LDA.b Scrap05 : TAX : STX.w TotalItemCountTiles+$02
LDA.b Scrap06 : TAX : STX.w TotalItemCountTiles+$04
LDA.b Scrap07 : TAX : STX.w TotalItemCountTiles+$06
SEP #$10
PLB
RTL

View File

@@ -119,5 +119,5 @@ HandleOneMindController:
.no_onemind .no_onemind
STZ.b NMIDoneFlag STZ.b NMIDoneFlag
JML $008034 ; reset frame loop JML $808034 ; reset frame loop

17
custompalettes.asm Normal file
View File

@@ -0,0 +1,17 @@
PalettesCustom:
.master_sword
dw $0000, $7E4E, $6FF4, $1CF5, $7FFF, $1CE7, $7A10, $64A5
.tempered_sword
dw $0000, $7FFF, $1979, $14B6, $39DC, $14A5, $66F7, $45EF
.golden_sword
dw $0000, $033F, $7FFF, $2640, $7FFF, $1CE7, $7A10, $64A5
.fighter_shield
dw $0000, $7FFF, $27FF, $5E2D, $7FFF, $1CE7, $7A10, $64A5
.red_shield
dw $0000, $7FFF, $27FF, $5E2D, $4F5F, $1CE7, $2E9C, $14B6
.mirror_shield
dw $0000, $7FFF, $27FF, $5E2D, $7399, $1CE7, $02F9, $0233
.crystal
dw $7FFF, $7FFF, $0000, $5907, $6E0E, $0000, $7FBB, $7672
.off_black
dw $0000, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5

View File

@@ -1,27 +0,0 @@
CheckReceivedItemPropertiesBeforeLoad:
LDA.b RoomIndex : BEQ .normalCode
LDA.l RoomFade : BNE .lightOff
.normalCode
LDA.l AddReceivedItemExpanded_properties, X ;Restore Rando Code
RTL
.lightOff
PHX : PHY : PHB
LDA.l AddReceivedItemExpanded_properties, X ; get palette
REP #$30
AND.w #$0007 ; mask out palette
ASL #5 ; multiply by 32
ADC.w #$C610 ; offset to latter half
TAX ; give to destination
LDY.w #$C610 ; target palette SP0 colors 8-F
LDA.w #$000F ; 16 bytes
MVN $7E, $7E ; move palette
SEP #$30
PLB : PLY : PLX
INC.b NMICGRAM
LDA.b #$00
RTL

View File

@@ -35,8 +35,45 @@ W=73
X=74 X=74
Y=75 Y=75
Z=76 Z=76
'=77 a=A0
.=A0 b=A1
/=A2 c=A2
:=A3 d=A3
_=A6 e=A4
f=A5
g=A6
h=A7
i=A8
j=A9
k=AA
l=AB
m=AC
n=AD
o=AE
p=AF
q=B0
r=B1
s=B2
t=B3
u=B4
v=B5
w=B6
x=B7
y=B8
z=B9
'=D9
"=DA
/=DB
.=DC
:=DD
_=DE
^=DF
&=E0
#=E1
@=E2
>=E3
?=E4
!=E5
~=E6
,=E7
-=E8

View File

@@ -35,8 +35,45 @@ W=99
X=9A X=9A
Y=9B Y=9B
Z=9C Z=9C
'=9d a=BB
.=C0 b=BC
/=C2 c=BD
:=C3 d=BE
_=C6 e=BF
f=C0
g=C1
h=C2
i=C3
j=C4
k=C5
l=C6
m=C7
n=C8
o=C9
p=CA
q=CB
r=CC
s=CD
t=CE
u=CF
v=D0
w=D1
x=D2
y=D3
z=D4
'=EC
"=ED
/=EE
.=EF
:=F0
_=F1
^=F2
&=F3
#=F4
@=F5
>=F6
?=F7
!=F8
~=F9
,=FA
-=FB

View File

@@ -25,3 +25,4 @@ W=4E
X=4F X=4F
Y=50 Y=50
Z=51 Z=51
.=52

View File

@@ -25,3 +25,7 @@ W=30
X=31 X=31
Y=32 Y=32
Z=33 Z=33
,=34
'=35
-=36
.=37

BIN
data/customitems.4bpp Normal file

Binary file not shown.

BIN
data/customitems.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

View File

@@ -0,0 +1,55 @@
; Kanji replacement characters
org $8E9AC9
;.charDD ; 𓄿
db $FB, $8C, $73, $CB, $30, $4B, $30, $54
db $2B, $5B, $24, $2D, $12, $13, $61, $1E
db $36, $09, $1B, $04, $14, $0B, $15, $0A
db $15, $0A, $21, $1E, $1E, $48, $30, $38
;.charDE ; ☥
db $1E, $33, $0C, $2D, $12, $2D, $12, $2D
db $12, $F3, $0C, $01, $01, $BF, $40, $C0
db $3F, $BF, $40, $F2, $0C, $12, $0C, $12
db $0C, $12, $0C, $1E, $50, $A0, $F0
;.charDF ; ≈
db $01, $3B, $6E, $11, $C4, $3B, $91, $6E
db $BB, $44, $26, $18, $3C, $E7, $3B, $6E
db $11, $C4, $3B, $91, $6E, $BB, $44, $EE
db $98, $60, $F0
;.charE0 ; 🡅
db $0C, $12, $0C, $21, $1E, $40, $3F, $80
db $7F, $02, $01, $01, $E1, $1E, $21, $1E
db $21, $1E, $21, $1E, $21, $1E, $21, $1E
db $21, $1E, $3F, $80, $80
;.charE1 ; 🡇
db $3F, $21, $1E, $21, $1E, $21, $1E, $21
db $1E, $21, $1E, $21, $1E, $E1, $1E, $80
db $7F, $40, $3F, $21, $1E, $12, $0C, $0C
db $28, $10, $30
;.charE2 ; 🡆
db $18, $14, $08, $12, $0C, $F1, $0E, $80
db $7F, $01, $80, $7F, $80, $7F, $80, $7F
db $F1, $0E, $12, $0C, $14, $08, $18, $20
db $C0, $C0
;.charE3 ; 🡄
db $06, $0A, $04, $12, $0C, $23, $1C, $40
db $3F, $02, $01, $03, $80, $7F, $80, $7F
db $40, $3F, $23, $1C, $12, $0C, $0A, $04
db $06, $10, $E0, $F0
org $8EBD94
;.charDD ; 𓄿
db $BF, $FE, $3F, $FF, $B8 ; 10111111 11111110 00111111 11111111 10111000
;.charDE ; ☥
db $BF, $FA, $3F, $FF, $B8 ; 10111111 11111010 00111111 11111111 10111000
;.charDF ; ≈
db $AF, $FE, $2B, $FE, $38 ; 10101111 11111110 00101011 11111110 00111000
;.charE0 ; 🡅
db $2F, $FE, $3F, $FF, $A8 ; 00101111 11111110 00111111 11111111 10101000
;.charE1 ; 🡇
db $2F, $F0, $3F, $FF, $B8 ; 00101111 11110000 00111111 11111111 10111000
;.charE2 ; 🡆
db $2F, $F8, $3F, $FE, $38 ; 00101111 11111000 00111111 11111110 00111000
;.charE3 ; 🡄
db $2F, $FE, $3F, $FE, $38 ; 00101111 11111110 00111111 11111110 00111000

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,59 @@
db $00, $01, $02, $03, $04, $CC, $CC ; あ い う え お ⎵ ⎵
db $15, $16, $17, $1D, $1E, $CC ; が ぎ ぐ げ ご ⎵
db $50, $51, $52, $53, $54, $CC, $CC ; ア イ ウ エ オ ⎵ ⎵
db $D0, $D1, $D2, $D3, $D4, $CC ; a b c d e ⎵
db $AA, $AB, $AC, $AD, $CC, $CC ; A B C D ⎵ ⎵
db $08, $09, $0A, $0B, $0C, $CC, $CC ; か き く け こ ⎵ ⎵
db $1F, $25, $26, $27, $2D, $CC ; ざ じ ず ぜ ぞ ⎵
db $58, $59, $5A, $5B, $5C, $CC, $CC ; カ キ ク ケ コ ⎵ ⎵
db $D5, $D6, $D7, $D8, $D9, $CC ; ザ ジ ズ ゼ ゾ ⎵
db $AE, $AF, $B0, $B1, $CC, $CC ; E F G H ⎵ ⎵
db $10, $11, $12, $13, $14, $CC, $CC ; さ し す せ そ ⎵ ⎵
db $2E, $2F, $35, $36, $37, $CC ; だ ぢ づ で ど ⎵
db $60, $61, $62, $63, $64, $CC, $CC ; サ シ ス セ ソ ⎵ ⎵
db $DA, $DB, $DC, $DD, $DE, $CC ; ダ ヂ ヅ デ ド ⎵
db $B2, $B3, $B4, $B5, $CC, $CC ; I J K L ⎵ ⎵
db $18, $19, $1A, $1B, $1C, $CC, $CC ; た ち つ て と ⎵ ⎵
db $3D, $3E, $3F, $40, $41, $CC ; ば び ぶ べ ぼ ⎵
db $68, $69, $6A, $6B, $6C, $CC, $CC ; タ チ ツ テ ト ⎵ ⎵
db $DF, $E0, $E1, $E2, $E3, $CC ; バ ビ ブ ベ ボ ⎵
db $B6, $B7, $B8, $B9, $CC, $CC ; M N O P ⎵ ⎵
db $20, $21, $22, $23, $24, $CC, $CC ; な に ぬ ね の ⎵ ⎵
db $42, $43, $44, $45, $46, $CC ; ぱ ぴ ぷ ぺ ぽ ⎵
db $70, $71, $72, $73, $74, $CC, $CC ; ナ ニ ヌ ネ ⎵ ⎵
db $E4, $E5, $E6, $E7, $E8, $CC ; パ ピ プ ペ ポ ⎵
db $BA, $BB, $BC, $BD, $CC, $CC ; Q R S T ⎵ ⎵
db $28, $29, $2A, $2B, $2C, $CC, $CC ; は ひ ふ へ ほ ⎵ ⎵
db $65, $66, $67, $6D, $6E, $CC
db $78, $79, $7A, $7B, $7C, $CC, $CC ; ハ ヒ フ ヘ ホ ⎵ ⎵
db $E9, $EA, $EB, $EC, $C6, $CC ; ァ ィ ゥ ェ ォ ⎵
db $BE, $BF, $C0, $C1, $CC, $CC ; U V W X ⎵ ⎵
db $30, $31, $32, $33, $34, $CC, $CC ; ま み む め も ⎵ ⎵
db $6F, $75, $76, $77, $7D, $CC ; ザ ジ ズ ゼ ゾ ⎵
db $80, $81, $82, $83, $84, $CC, $CC ; マ ミ ム メ モ ⎵ ⎵
db $CC, $CC, $CC, $CC, $9A, $CC ; ャ ュ ョ ⎵ ッ ⎵
db $C2, $C3, $C9, $CE, $CC, $CC ; Y Z 〜 ⎵ ⎵
db $05, $CC, $06, $CC, $07, $CC, $CC ; や ⎵ ゆ ⎵ よ ⎵ ⎵
db $7E, $7F, $85, $86, $87, $CC ; ダ ヂ ヅ デ ド ⎵
db $55, $CC, $56, $CC, $57, $CC, $CC ; ヤ ⎵ ユ ⎵ ヨ ⎵ ⎵
db $A0, $A1, $A2, $A3, $A4, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵
db $CC, $CC, $CC, $CC, $CC, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵
db $38, $39, $3A, $3B, $3C, $CC, $CC ; ら り る れ ろ ⎵ ⎵
db $8D, $8E, $8F, $90, $91, $CC ; バ ビ ブ ベ ボ ⎵
db $88, $89, $8A, $8B, $8C, $CC, $CC ; ラ リ ル レ ロ ⎵ ⎵
db $A5, $A6, $A7, $A8, $A9, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵
db $CA, $CB, $CD, $CD, $CC, $CC ; 🡄 🡆 END ⎵ ⎵
db $0D, $0E, $0F, $CC, $C9, $CC, $CC ; わ を ん ⎵ ⎵ ⎵
db $92, $93, $94, $95, $96, $CC ; パ ピ プ ペ ポ ⎵
db $5D, $5E, $5F, $CC, $C9, $CC, $CC ; ワ ヲ ン ⎵ ⎵ ⎵
db $CC, $CC, $CC, $CC, $CC, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵
db $CC, $CC, $CC, $CC, $CC, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵

BIN
data/playernamecharmap.bin Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,72 @@
dw $E164, $3900 ; VRAM $C9C2 | 58 bytes | Horizontal
dw $1CA2, $0188, $1CA3, $0188, $1CA4, $0188, $0188, $0188
dw $0188, $0188, $1DA0, $0188, $1DA1, $0188, $1DA2, $0188
dw $1DA3, $0188, $1DA4, $0188, $0188, $0188, $1D4A, $0188
dw $1D4B, $0188, $1D4C, $0188, $1D4D
dw $0165, $3900 ; VRAM $CA02 | 58 bytes | Horizontal
dw $1CB2, $0188, $1CB3, $0188, $1CB4, $0188, $0188, $0188
dw $0188, $0188, $1DB0, $0188, $1DB1, $0188, $1DB2, $0188
dw $1DB3, $0188, $1DB4, $0188, $0188, $0188, $1D5A, $0188
dw $1D5B, $0188, $1D5C, $0188, $1D5D
dw $2165, $3900 ; VRAM $CA42 | 58 bytes | Horizontal
dw $1CAA, $0188, $1CAB, $0188, $1CAC, $0188, $0188, $0188
dw $0188, $0188, $1DA5, $0188, $1DA6, $0188, $1DA7, $0188
dw $1DA8, $0188, $1DA9, $0188, $0188, $0188, $1D4E, $0188
dw $1D4F, $0188, $1D60, $0188, $1D61
dw $4165, $3900 ; VRAM $CA82 | 58 bytes | Horizontal
dw $1CBA, $0188, $1CBB, $0188, $1CBC, $0188, $0188, $0188
dw $0188, $0188, $1DB5, $0188, $1DB6, $0188, $1DB7, $0188
dw $1DB8, $0188, $1DB9, $0188, $0188, $0188, $1D5E, $0188
dw $1D5F, $0188, $1D70, $0188, $1D71
dw $6165, $3900 ; VRAM $CAC2 | 58 bytes | Horizontal
dw $1CC2, $0188, $1CC3, $0188, $1CC4, $0188, $0188, $0188
dw $0188, $0188, $1DAA, $0188, $1DAB, $0188, $1DAC, $0188
dw $1DAD, $0188, $1DAE, $0188, $0188, $0188, $1D62, $0188
dw $1D63, $0188, $1D64, $0188, $1D65
dw $8165, $3900 ; VRAM $CB02 | 58 bytes | Horizontal
dw $1CD2, $0188, $1CD3, $0188, $1CD4, $0188, $0188, $0188
dw $0188, $0188, $1DBA, $0188, $1DBB, $0188, $1DBC, $0188
dw $1DBD, $0188, $1DBE, $0188, $0188, $0188, $1D72, $0188
dw $1D73, $0188, $1D74, $0188, $1D75
dw $A165, $3900 ; VRAM $CB42 | 58 bytes | Horizontal
dw $1CCA, $0188, $1CCB, $0188, $1CCC, $0188, $0188, $0188
dw $0188, $0188, $1DAF, $0188, $1DC0, $0188, $1DC1, $0188
dw $1DC2, $0188, $1DC3, $0188, $0188, $0188, $1D66, $0188
dw $1D67, $0188, $1D68, $0188, $1D69
dw $C165, $3900 ; VRAM $CB82 | 58 bytes | Horizontal
dw $1CDA, $0188, $1CDB, $0188, $1CDC, $0188, $0188, $0188
dw $0188, $0188, $1DBF, $0188, $1DD0, $0188, $1DD1, $0188
dw $1DD2, $0188, $1DD3, $0188, $0188, $0188, $1D76, $0188
dw $1D77, $0188, $1D78, $0188, $1D79
dw $E165, $3900 ; VRAM $CBC2 | 58 bytes | Horizontal
dw $1CE2, $0188, $1CE3, $0188, $1CE4, $0188, $0188, $0188
dw $0188, $0188, $1DC4, $0188, $1DC5, $0188, $1DC6, $0188
dw $1DC7, $0188, $1DC8, $0188, $0188, $0188, $1D6A, $0188
dw $1D6B, $0188, $1D6C, $0188, $1D6D
dw $0166, $3900 ; VRAM $CC02 | 58 bytes | Horizontal
dw $1CF2, $0188, $1CF3, $0188, $1CF4, $0188, $0188, $0188
dw $0188, $0188, $1DD4, $0188, $1DD5, $0188, $1DD6, $0188
dw $1DD7, $0188, $1DD8, $0188, $0188, $0188, $1D7A, $0188
dw $1D7B, $0188, $1D7C, $0188, $1D7D
; dw $2166, $3900 ; VRAM $CC42 | 58 bytes | Horizontal
; dw $1CEA, $0188, $1CEB, $0188, $1CEC, $0188, $0188, $0188
; dw $0188, $0188, $1DC9, $0188, $1DCA, $0188, $1DCB, $0188
; dw $1DCC, $0188, $1D86, $0188, $0188, $0188, $1D6E, $0188
; dw $1D6F, $0188, $1D80, $0188, $1D81
;
; dw $4166, $3900 ; VRAM $CC82 | 58 bytes | Horizontal
; dw $1CFA, $0188, $1CFB, $0188, $1CFC, $0188, $0188, $0188
; dw $0188, $0188, $1DD9, $0188, $1DDA, $0188, $1DDB, $0188
; dw $1DDC, $0188, $1D96, $0188, $0188, $0188, $1D7E, $0188
; dw $1D7F, $0188, $1D90, $0188, $1D91

Binary file not shown.

View File

@@ -0,0 +1,72 @@
dw $E164, $3900 ; VRAM $C9C2 | 58 bytes | Horizontal
dw $1CA2, $0188, $1CA3, $0188, $1CA4, $0188, $0188, $0188
dw $0188, $0188, $1DA0, $0188, $1DA1, $0188, $1DA2, $0188
dw $1DA3, $0188, $1DA4, $0188, $0188, $0188, $1D4A, $0188
dw $1D4B, $0188, $1D4C, $0188, $1D4D
dw $0165, $3900 ; VRAM $CA02 | 58 bytes | Horizontal
dw $1CB2, $0188, $1CB3, $0188, $1CB4, $0188, $0188, $0188
dw $0188, $0188, $1DB0, $0188, $1DB1, $0188, $1DB2, $0188
dw $1DB3, $0188, $1DB4, $0188, $0188, $0188, $1D5A, $0188
dw $1D5B, $0188, $1D5C, $0188, $1D5D
dw $2165, $3900 ; VRAM $CA42 | 58 bytes | Horizontal
dw $1CAA, $0188, $1CAB, $0188, $1CAC, $0188, $0188, $0188
dw $0188, $0188, $1DA5, $0188, $1DA6, $0188, $1DA7, $0188
dw $1DA8, $0188, $1DA9, $0188, $0188, $0188, $1D4E, $0188
dw $1D4F, $0188, $1D60, $0188, $1D61
dw $4165, $3900 ; VRAM $CA82 | 58 bytes | Horizontal
dw $1CBA, $0188, $1CBB, $0188, $1CBC, $0188, $0188, $0188
dw $0188, $0188, $1DB5, $0188, $1DB6, $0188, $1DB7, $0188
dw $1DB8, $0188, $1DB9, $0188, $0188, $0188, $1D5E, $0188
dw $1D5F, $0188, $1D70, $0188, $1D71
dw $6165, $3900 ; VRAM $CAC2 | 58 bytes | Horizontal
dw $1CC2, $0188, $1CC3, $0188, $1CC4, $0188, $0188, $0188
dw $0188, $0188, $1DAA, $0188, $1DAB, $0188, $1DAC, $0188
dw $1DAD, $0188, $1DAE, $0188, $0188, $0188, $1D62, $0188
dw $1D63, $0188, $1D64, $0188, $1D65
dw $8165, $3900 ; VRAM $CB02 | 58 bytes | Horizontal
dw $1CD2, $0188, $1CD3, $0188, $1CD4, $0188, $0188, $0188
dw $0188, $0188, $1DBA, $0188, $1DBB, $0188, $1DBC, $0188
dw $1DBD, $0188, $1DBE, $0188, $0188, $0188, $1D72, $0188
dw $1D73, $0188, $1D74, $0188, $1D75
dw $A165, $3900 ; VRAM $CB42 | 58 bytes | Horizontal
dw $1CCA, $0188, $1CCB, $0188, $1CCC, $0188, $0188, $0188
dw $0188, $0188, $1DAF, $0188, $1DC0, $0188, $1DC1, $0188
dw $1DC2, $0188, $1DC3, $0188, $0188, $0188, $1D66, $0188
dw $1D67, $0188, $1D68, $0188, $1D69
dw $C165, $3900 ; VRAM $CB82 | 58 bytes | Horizontal
dw $1CDA, $0188, $1CDB, $0188, $1CDC, $0188, $0188, $0188
dw $0188, $0188, $1DBF, $0188, $1DD0, $0188, $1DD1, $0188
dw $1DD2, $0188, $1DD3, $0188, $0188, $0188, $1D76, $0188
dw $1D77, $0188, $1D78, $0188, $1D79
dw $E165, $3900 ; VRAM $CBC2 | 58 bytes | Horizontal
dw $1CE2, $0188, $1CE3, $0188, $1CE4, $0188, $0188, $0188
dw $0188, $0188, $1DC4, $0188, $1DC5, $0188, $1DC6, $0188
dw $1DC7, $0188, $1DC8, $0188, $0188, $0188, $1D6A, $0188
dw $1D6B, $0188, $1D6C, $0188, $1D6D
dw $0166, $3900 ; VRAM $CC02 | 58 bytes | Horizontal
dw $1CF2, $0188, $1CF3, $0188, $1CF4, $0188, $0188, $0188
dw $0188, $0188, $1DD4, $0188, $1DD5, $0188, $1DD6, $0188
dw $1DD7, $0188, $1DD8, $0188, $0188, $0188, $1D7A, $0188
dw $1D7B, $0188, $1D7C, $0188, $1D7D
dw $2166, $3900 ; VRAM $CC42 | 58 bytes | Horizontal
dw $1CEA, $0188, $1CEB, $0188, $1CEC, $0188, $0188, $0188
dw $0188, $0188, $1DC9, $0188, $1DCA, $0188, $1DCB, $0188
dw $1DCC, $0188, $1D86, $0188, $0188, $0188, $1D6E, $0188
dw $1D6F, $0188, $1D80, $0188, $1D81
dw $4166, $3900 ; VRAM $CC82 | 58 bytes | Horizontal
dw $1CFA, $0188, $1CFB, $0188, $1CFC, $0188, $0188, $0188
dw $0188, $0188, $1DD9, $0188, $1DDA, $0188, $1DDB, $0188
dw $1DDC, $0188, $1D96, $0188, $0188, $0188, $1D7E, $0188
dw $1D7F, $0188, $1D90, $0188, $1D91

View File

@@ -0,0 +1,25 @@
dw $2362, $3900 ; VRAM $C446 | 58 bytes | Horizontal
dw $1C48, $0188, $1C49, $0188, $1C4A, $0188, $1C4B, $0188
dw $1C4C, $0188, $0188, $0188, $0188, $0188, $1CC5, $0188
dw $1CC6, $0188, $1CC7, $0188, $1CCD, $0188, $1CCE, $0188
dw $0188, $0188, $1CE8, $0188, $1CE9
dw $4362, $3900 ; VRAM $C486 | 58 bytes | Horizontal
dw $1C58, $0188, $1C59, $0188, $1C5A, $0188, $1C5B, $0188
dw $1C5C, $0188, $0188, $0188, $0188, $0188, $1CD5, $0188
dw $1CD6, $0188, $1CD7, $0188, $1CDD, $0188, $1CDE, $0188
dw $0188, $0188, $1CF8, $0188, $1CF9
dw $6362, $3900 ; VRAM $C4C6 | 58 bytes | Horizontal
dw $1C60, $0188, $1C61, $0188, $1C62, $0188, $1C63, $0188
dw $1C64, $0188, $0188, $0188, $0188, $0188, $1CCF, $0188
dw $1CE5, $0188, $1CE6, $0188, $1CE7, $0188, $1CED, $0188
dw $0188, $0188, $1D00, $0188, $1D01
dw $8362, $3900 ; VRAM $C506 | 58 bytes | Horizontal
dw $1C70, $0188, $1C71, $0188, $1C72, $0188, $1C73, $0188
dw $1C74, $0188, $0188, $0188, $0188, $0188, $1CDF, $0188
dw $1CF5, $0188, $1CF6, $0188, $1CF7, $0188, $1CFD, $0188
dw $0188, $0188, $1D10, $0188, $1D11

BIN
data/smallchars.2bpp Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,539 @@
;===================================================================================================
; Get the item's graphic from WRAM/ROM
; Bit 7 set indicates an explicit WRAM address
; Bit 7 reset indicates an offset into the ROM buffer
;===================================================================================================
;---------------------------------------------------------------------------------------------------
; Enters with A for parameter
;---------------------------------------------------------------------------------------------------
TransferItemReceiptToBuffer_using_GraphicsID:
PHP
PHB
REP #$30
PHX
PHY
SEP #$30
LDX.b #$00
.find_reverse
CMP.l ItemReceipts_graphics,X
BEQ .found
INX
BNE .find_reverse
.found
TXA
REP #$30
BRA ++
;===================================================================================================
TransferRupeesProperly:
PHP
PHB
REP #$31
PHX
PHY
AND.w #$00FF
SBC.w #$0023
XBA
LSR
LSR
LSR
ADC.w #BigDecompressionBuffer+$800
BRA TransferItemReceiptToBuffer_using_ExplicitBufferAddress
;===================================================================================================
TransferItemReceiptToBuffer_using_ReceiptID:
PHP : PHB
REP #$30
PHX : PHY
++ AND.w #$00FF
ASL : TAX
LDA.l BusyItem : BNE +
LDA.l StandingItemGraphicsOffsets,X
BRA .have_address
+
LDA.l ItemReceiptGraphicsOffsets,X
.have_address
BMI TransferItemReceiptToBuffer_using_ExplicitBufferAddress
.rom_address
ADC.w #ItemReceiptGraphicsROM
PHK
BRA .continue
#TransferItemReceiptToBuffer_using_ExplicitBufferAddress:
PEA.w $7F7F
PLB
.continue
PLB
TAY
LDX.w #62
.next_write
LDA.w $003E,Y
STA.l ItemGetGFX+$00,X
LDA.w $023E,Y
STA.l ItemGetGFX+$40,X
DEY
DEY
DEX
DEX
BPL .next_write
REP #$30
PLY
PLX
PLB
PLP
RTL
;===================================================================================================
TransferItemToVRAM:
REP #$21
SEP #$10
LDA.w ItemGFXPtr
BEQ .exit
BMI .wram_address
.rom_address
ADC.w #ItemReceiptGraphicsROM
LDX.b #ItemReceiptGraphicsROM>>16
.set_address
STA.w $4302
ADC.w #$0200
STA.w $4312
STX.w $4304
STX.w $4314
LDX.b #$80
STX.w $2115
LDA.w #$1801
STA.w $4300
STA.w $4310
LDA.w #$0040
STA.w $4305
STA.w $4315
LDA.w ItemGFXTarget
STA.w $2116
LDX.b #$01
STX.w $420B
ADC.w #$0100
STA.w $2116
INX
STX.w $420B
STZ.w ItemGFXPtr
STZ.w ItemGFXTarget
.exit
RTL
.wram_address
LDX.b #$7F
BRA .set_address
;===================================================================================================
; Decompress everything at the start of the game
;===================================================================================================
DecompBufferOffset = $18
DecompTestByte = $04
DecompCommand = $02
DecompSize = $00
DecompTileCount = $1A
DecompSaveY = $1A
Decomp3BPPScratch = $20
;===================================================================================================
DecompressAllItemGraphics:
PHP
PHB
PHD
REP #$38
; Stack change for safety
TSX
LDA.w #$1400
TCS
PHX
; direct page change for speed
LDA.w #$1200
TCD
STZ.b DecompBufferOffset
SEP #$34
STA.l $4200 ; already 0 from the LDA above
LDX.b #$5D+$73 : JSR FastSpriteDecomp
LDX.b #$5C+$73 : JSR FastSpriteDecomp
LDX.b #$5B+$73 : JSR FastSpriteDecomp
LDX.b #$5A+$73 : JSR FastSpriteDecomp
REP #$30
PLX
TXS
SEP #$20
LDA.b #$81
STA.l $4200
PLD
PLB
PLP
RTL
;===================================================================================================
; I normally hate macros like this... but I don't feel like constantly rewriting this
;===================================================================================================
macro GetNextByte()
LDA.w $0000,Y
INY
BNE ?++
; Y pulls more than it needs, but that's fine
; the high byte should only be affected if we somehow have FF as our bank
; and if that happens, we have other problems
PHB
PLY
INY
PHY
PLB
LDY.w #$8000
?++
endmacro
;===================================================================================================
; There's no long vanilla routine, and we're going to make heavy use of this
; so might as well rewrite it to be fast
;===================================================================================================
FastSpriteDecomp:
SEP #$30
LDA.l $80CFC0,X : PHA : PLB ; bank
LDA.l $80D09F,X : XBA ; high
LDA.l $80D17E,X ; low
REP #$10
TAY
LDX.w #$0000
.next_command
%GetNextByte()
CMP.b #$FF
BNE .continue
;---------------------------------------------------------------------------------------------------
JMP Unrolled3BPPConvert
;---------------------------------------------------------------------------------------------------
.continue
CMP.b #$E0
BCS .expanded
STA.b DecompTestByte
REP #$20
AND.w #$001F
BRA .normal
;---------------------------------------------------------------------------------------------------
; Putting some commands up here for branch distance
;---------------------------------------------------------------------------------------------------
.nonrepeating
REP #$21
TYA
ADC.b DecompSize
ORA.w #$8000
STA.b DecompSize
SEP #$20
.next_nonrepeating
%GetNextByte()
STA.l DecompBuffer2,X
INX
CPY.b DecompSize
BNE .next_nonrepeating
BRA .next_command
;---------------------------------------------------------------------------------------------------
.repeating
%GetNextByte()
STY.b DecompSaveY
LDY.b DecompSize
.next_repeating
STA.l DecompBuffer2,X
INX
DEY
BNE .next_repeating
LDY.b DecompSaveY
BRA .next_command
;---------------------------------------------------------------------------------------------------
; Rest of command handling
;---------------------------------------------------------------------------------------------------
.expanded
STA.b DecompCommand
ASL
ASL
ASL
STA.b DecompTestByte
LDA.b DecompCommand
AND.b #$03
XBA
%GetNextByte()
REP #$20
;---------------------------------------------------------------------------------------------------
.normal
INC
STA.b DecompSize
SEP #$20
LDA.b DecompTestByte
AND.b #$E0
BEQ .nonrepeating
BMI .copy
ASL
BPL .repeating
ASL
BPL .repeating_word
;---------------------------------------------------------------------------------------------------
.incremental
%GetNextByte()
STY.b DecompSaveY
LDY.b DecompSize
.next_incremental
STA.l DecompBuffer2,X
INC
INX
DEY
BNE .next_incremental
LDY.b DecompSaveY
JMP .next_command
;---------------------------------------------------------------------------------------------------
.repeating_word
JSR .get_next_word
REP #$20
STY.b DecompSaveY
LDY.b DecompSize
DEY
.next_word
STA.l DecompBuffer2,X
INX
INX
DEY
DEY
BPL .next_word
INY
BEQ .not_too_far
DEX
.not_too_far
SEP #$20
LDY.b DecompSaveY
JMP .next_command
;---------------------------------------------------------------------------------------------------
.copy
JSR .get_next_word
STY.b DecompSaveY
TAY
LDA.b DecompSize
BNE ++
DEC.b DecompSize+1
++ PHB
LDA.b #$7F
PHA
PLB
.next_copy
LDA.w DecompBuffer2,Y
STA.w DecompBuffer2,X
INX
INY
DEC.b DecompSize+0
BNE .next_copy
DEC.b DecompSize+1
BPL .next_copy
PLB
LDY.b DecompSaveY
JMP .next_command
;---------------------------------------------------------------------------------------------------
; These are only used once per command, so I'm fine with letting them be a JSR I guess
;---------------------------------------------------------------------------------------------------
.get_next_word
%GetNextByte()
XBA
%GetNextByte()
XBA
RTS
;===================================================================================================
; More macros, because lazy
;===================================================================================================
macro DoPlanesA(offset)
LDA.w DecompBuffer2+<offset>+<offset>,Y
STA.w BigDecompressionBuffer+<offset>+<offset>,X
ORA.w DecompBuffer2+<offset>+<offset>-1,Y
AND.w #$FF00
STA.b Decomp3BPPScratch
LDA.w DecompBuffer2+$10+<offset>,Y
AND.w #$00FF
TSB.b Decomp3BPPScratch
XBA
ORA.b Decomp3BPPScratch
STA.w BigDecompressionBuffer+$10+<offset>+<offset>,X
endmacro
;===================================================================================================
Unrolled3BPPConvert:
LDA.b #$7F
PHA
PLB
REP #$21
LDY.w #$0000
LDX.b DecompBufferOffset
.next_3bpp_tile
%DoPlanesA(0) ; 8 times
%DoPlanesA(1)
%DoPlanesA(2)
%DoPlanesA(3)
%DoPlanesA(4)
%DoPlanesA(5)
%DoPlanesA(6)
%DoPlanesA(7)
; carry will always be clear
; don't worry
TXA
ADC.w #32
TAX
; just trust me
TYA
ADC.w #24
TAY
CMP.w #24*64
BCS .done
JMP .next_3bpp_tile
.done
STX.b DecompBufferOffset
SEP #$30
RTS
;===================================================================================================

View File

@@ -114,26 +114,45 @@ FreeDungeonItemNotice:
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key
LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of... LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of...
%CopyDialog(Notice_BigKeyOf) %CopyDialog(Notice_BigKeyOf)
BRA .dungeon JMP .dungeon
+ : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key + : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key
LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of... LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
LDA.w ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++ LDA.w ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++
%CopyDialog(Notice_SmallKeyOf) %CopyDialog(Notice_SmallKeyOf)
LDA.b #$01 : STA.w ScratchBufferNV ; set up a flip for small keys LDA.b #$01 : STA.w ScratchBufferNV ; set up a flip for small keys
BRA .dungeon BRA .dungeon
+ + : LDA.l FreeItemText : AND.b #$20 : BEQ + ; show message for crystal
LDA.w ScratchBufferV : CMP.b #$B0 : !BLT + ; crystal #
CMP.b #$B7 : !BGE +
%CopyDialog(Notice_Crystal)
JMP .crystal
+
JMP .skip ; it's not something we are going to give a notice for JMP .skip ; it's not something we are going to give a notice for
.dungeon .dungeon
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
LDA.w ScratchBufferV LDA.w ScratchBufferV
AND.b #$0F ; looking at low bits only AND.b #$0F
STA.w ScratchBufferNV+1 STA.w ScratchBufferNV+1
LDA.w ScratchBufferNV : BEQ + LDA.w ScratchBufferNV : BEQ +
LDA.w ScratchBufferNV LDA.w ScratchBufferNV
LDA.b #$0F : !SUB.w ScratchBufferNV+1 : STA.w ScratchBufferNV+1 ; flip the values for small keys LDA.b #$0F : !SUB.w ScratchBufferNV+1 : STA.w ScratchBufferNV+1 ; flip the values for small keys
+ +
LDA.w ScratchBufferNV+1 LDA.w ScratchBufferNV+1
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
%CopyDialog(Notice_Self)
JMP.w .done
+
SEP #$20
LDA.w ScratchBufferNV+1
CMP.b #$00 : BNE + ; ...light world CMP.b #$00 : BNE + ; ...light world
%CopyDialog(Notice_LightWorld) : JMP .done %CopyDialog(Notice_LightWorld) : JMP .done
+ : CMP.b #$01 : BNE + ; ...dark world + : CMP.b #$01 : BNE + ; ...dark world
@@ -161,12 +180,34 @@ FreeDungeonItemNotice:
+ : CMP.b #$0C : BNE + ; ...desert palace + : CMP.b #$0C : BNE + ; ...desert palace
%CopyDialog(Notice_Desert) : JMP .done %CopyDialog(Notice_Desert) : JMP .done
+ : CMP.b #$0D : BNE + ; ...eastern palace + : CMP.b #$0D : BNE + ; ...eastern palace
%CopyDialog(Notice_Eastern) : BRA .done %CopyDialog(Notice_Eastern) : JMP .done
+ : CMP.b #$0E : BNE + ; ...hyrule castle + : CMP.b #$0E : BNE + ; ...hyrule castle
%CopyDialog(Notice_Castle) : BRA .done %CopyDialog(Notice_Castle) : JMP .done
+ : CMP.b #$0F : BNE + ; ...sewers + : CMP.b #$0F : BNE + ; ...sewers
%CopyDialog(Notice_Sewers) %CopyDialog(Notice_Sewers)
+ +
JMP .done
.crystal
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
LDA.w ScratchBufferV
AND.b #$0F ; looking at low bits only
CMP.b #$00 : BNE +
%CopyDialog(Notice_Six) : JMP .done
+ : CMP.b #$01 : BNE +
%CopyDialog(Notice_One) : JMP .done
+ : CMP.b #$02 : BNE +
%CopyDialog(Notice_Five) : JMP .done
+ : CMP.b #$03 : BNE +
%CopyDialog(Notice_Seven) : JMP .done
+ : CMP.b #$04 : BNE +
%CopyDialog(Notice_Two) : JMP .done
+ : CMP.b #$05 : BNE +
%CopyDialog(Notice_Four) : JMP .done
+ : CMP.b #$06 : BNE +
%CopyDialog(Notice_Three) : JMP .done
+
.done .done
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
@@ -341,7 +382,7 @@ AgahnimAsksAboutPed:
STA.w TextID STA.w TextID
.vanilla .vanilla
JML $05FA8E ; Sprite_ShowMessageMinimal JML $85FA8E ; Sprite_ShowMessageMinimal
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
Main_ShowTextMessage_Alt: Main_ShowTextMessage_Alt:
; Are we in text mode? If so then end the routine. ; Are we in text mode? If so then end the routine.
@@ -433,7 +474,7 @@ Sprite_ShowSolicitedMessageIfPlayerFacing_Alt:
; Make sure that the sprite is facing towards the player, otherwise ; Make sure that the sprite is facing towards the player, otherwise
; talking can't happen. (What sprites actually use this???) ; talking can't happen. (What sprites actually use this???)
LDA.l $05E1A3, X : PLX : CMP.b LinkDirection : BNE .not_facing_each_other LDA.l $85E1A3, X : PLX : CMP.b LinkDirection : BNE .not_facing_each_other
PHY PHY
@@ -490,7 +531,7 @@ Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage:
; Make sure that the sprite is facing towards the player, otherwise ; Make sure that the sprite is facing towards the player, otherwise
; talking can't happen. (What sprites actually use this???) ; talking can't happen. (What sprites actually use this???)
LDA.l $05E1A3, X : PLX : CMP.b LinkDirection : BNE .not_facing_each_other LDA.l $85E1A3, X : PLX : CMP.b LinkDirection : BNE .not_facing_each_other
PLA : XBA : PLA PLA : XBA : PLA

View File

@@ -8,7 +8,7 @@
StoreLastOverworldDoorID: StoreLastOverworldDoorID:
TXA : INC TXA : INC
STA.l PreviousOverworldDoor STA.l PreviousOverworldDoor
LDA.l $1BBB73, X : STA.w EntranceIndex LDA.l $9BBB73, X : STA.w EntranceIndex
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------

View File

@@ -1,9 +1,328 @@
;================================================================================ ;================================================================================
; Dungeon & Boss Drop Fixes ; Dungeon & Boss Drop Fixes
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DropSafeDungeon: SpawnDungeonPrize:
LDA.w DungeonID : CMP.b #$08 : BEQ + PHX : PHB
LDA.l $01C6FC, X : JML Sprite_SpawnFallingItem JSL.l ResolveLootIDLong
+ STA.w ItemReceiptID
TAX
LDA.b #$29 : LDY.b #$06
JSL.l AddAncillaLong
BCS .failed_spawn
LDA.w ItemReceiptID
STA.w AncillaGet,X : STA.w SpriteID,X
JSR.w AddDungeonPrizeAncilla
.failed_spawn
PLB : PLX
RTL
AddDungeonPrizeAncilla:
LDY.w ItemReceiptID
STZ.w AncillaVelocityY,X
STZ.w AncillaVelocityX,X
STZ.w AncillaGeneral,X
STZ.w $0385,X
STZ.w $0C54,X
LDA.b #$D0 : STA.w AncillaVelocityZ,X
LDA.b #$80 : STA.w AncillaZCoord,X
LDA.b #$09 : STA.w AncillaTimer,X
LDA.b #$00 : STA.w $0394,X
LDA.w AncillaGet,X : STA.w ItemReceiptID
LDA.w DungeonID : CMP.b #$14 : BNE .not_hera
LDA.b LinkAbsoluteY+1 : AND.b #$FE
INC A
STA.b Scrap01
STZ.b Scrap00
LDA.b LinkAbsoluteX+1 : AND.b #$FE
INC A
STA.b Scrap03
STZ.b Scrap02
BRA .set_coords_exit
.not_hera
TYA : ASL : TAY
REP #$20
LDA.w #$0078
CLC : ADC.b BG2V
STA.b Scrap00
LDA.w #$0078
CLC : ADC.b BG2H
STA.b Scrap02
SEP #$20
.set_coords_exit
LDA.b Scrap00 : STA.w AncillaCoordYLow,X
LDA.b Scrap01 : STA.w AncillaCoordYHigh,X
LDA.b Scrap02 : STA.w AncillaCoordXLow,X
LDA.b Scrap03 : STA.w AncillaCoordXHigh,X
RTS
PrepPrizeTile:
PHA : PHX : PHY
LDA.w AncillaGet, X
JSL.l ResolveLootIDLong
STA.w SpriteID,X
JSL.l TransferItemReceiptToBuffer_using_ReceiptID
PLY : PLX : PLA
RTL
SetItemPose:
PHA
LDA.w RoomItemsTaken : BIT.b #$80 : BNE +
.one_handed
PLA
JML $8799F2
+
JSR.w CrystalOrPendantBehavior : BCC .one_handed
.two_handed
PLA
JML $8799EE ; cool pose
SetPrizeCoords:
PHX : PHY
STZ.b Scrap03
LDA.w ItemReceiptMethod : CMP.b #$03 : BEQ +
.regular_coords
PLY : PLX
LDY.w AncillaGet,X
RTL
+
JSR.w CrystalOrPendantBehavior : BCC .regular_coords
PLY : PLX
LDY.b #$20 ; Treat as crystal
RTL
SetCutsceneFlag:
; Out: c - Cutscene flag $02 if set, $01 if unset.
PHX
LDY.b #$01 ; wrote over
LDA.w RoomItemsTaken : BIT #$80 : BNE .dungeon_prize
.no_cutscene
PLX
CLC
RTL
.dungeon_prize
JSR.w SetDungeonCompletion
LDA.w ItemReceiptID : TAX
LDA.l InventoryTable_properties,X : BPL .no_cutscene
PLX
SEC
RTL
AnimatePrizeCutscene:
LDA.w ItemReceiptMethod : CMP.b #$03 : BNE +
JSR.w CrystalOrPendantBehavior : BCC +
LDA.w RoomItemsTaken : BIT #$80 : BEQ +
SEC
RTL
+
CLC
RTL
PrizeDropSparkle:
LDA.w AncillaID,X : CMP.b #$29 : BNE .no_sparkle
JSR.w CrystalOrPendantBehavior : BCC .no_sparkle
SEC
RTL
.no_sparkle
CLC
RTL
HandleDropSFX:
LDA.w RoomItemsTaken : BIT #$80 : BEQ .no_sound
JSR.w CrystalOrPendantBehavior : BCC .no_sound
SEC
RTL
.no_sound
CLC
RTL
HandleCrystalsField:
TAX
LDA.w ItemReceiptID : CMP.b #$20 : BNE .not_crystal
TXA
STA.l CrystalsField
RTL
.not_crystal
RTL
MaybeKeepLootID:
PHA
LDA.w RoomItemsTaken : BIT #$80 : BNE .prize
STZ.w ItemReceiptID
STZ.w ItemReceiptPose
PLA
RTL
.prize
STZ.w ItemReceiptPose
PLA
RTL
CheckSpawnPrize:
; In: A - DungeonID
; Out: c - Spawn prize if set
REP #$20
LDX.w DungeonID
LDA.l DungeonItemMasks,X : AND.l DungeonsCompleted : BEQ .spawn
SEP #$20
CLC
RTL
.spawn
SEP #$21
RTL
SetDungeonCompletion:
LDX.w DungeonID : BMI +
REP #$20
LDA.l DungeonItemMasks, X : ORA.l DungeonsCompleted : STA.l DungeonsCompleted
SEP #$20
+
RTS
CheckDungeonCompletion:
LDX.w DungeonID
REP #$20
LDA.l DungeonItemMasks,X : AND.l DungeonsCompleted
SEP #$20
RTL
MaybeOpenDoor:
;LDA.w ItemReceiptID : TAX
LDA.w DungeonID : LSR : TAX
LDA.l DungeonPrizeReceiptID,X : TAX
LDA.l InventoryTable_properties,X : BMI .no_open
REP #$20
LDX.w DungeonID
LDA.l DungeonMask,X : AND.l DungeonsCompleted
SEP #$20
SEC
RTL
.no_open
REP #$20
LDX.w DungeonID
LDA.l DungeonMask,X : AND.l DungeonsCompleted
SEP #$20
CLC
RTL
PendantMusicCheck:
; In: A - Item receipt ID
PHX
TAY
LDA.w ItemReceiptMethod : CMP.b #$03 : BNE .dont_wait
TYX
LDA.l InventoryTable_properties,X : BMI .dont_wait
PLX
SEC
RTL
.dont_wait
PLX
CLC
RTL
PrepPrizeOAMCoordinates:
PHX : PHY
LDY.w AncillaLayer,X
LDA.w $F67F,Y : STA.b $65
STZ.b $64
LDA.w AncillaCoordYLow,X : STA.b Scrap00
LDA.w AncillaCoordYHigh,X : STA.b Scrap01
LDA.w AncillaCoordXLow,X : STA.b Scrap02
LDA.w AncillaCoordXHigh,X : STA.b Scrap03
REP #$20
LDA.b Scrap00
SEC : SBC.w $0122
STA.b Scrap00
LDA.b Scrap02
SEC : SBC.w $011E
STA.b Scrap02
STA.b Scrap04
REP #$20
LDA.w $029E,X
AND.w #$00FF
STA.b $72
LDA.b $00
STA.b $06
SEC
SBC.b $72
STA.b $00
SEP #$20
TXY
LDA.w AncillaGet,X : TAX
LDA.l SpriteProperties_chest_width,X : BNE .wide
TYX
LDA.w AncillaID,X : CMP.b #$3E : BEQ .rising_crystal
REP #$20
LDA.b Scrap00
CLC : ADC.w #$0008
STA.b Scrap08
LDA.b Scrap02
CLC : ADC.w #$0004
STA.b Scrap02 : STA.b Scrap0A
BRA .wide
.rising_crystal
REP #$20
LDA.b Scrap00
CLC : ADC.w #$0008 : STA.b Scrap08
LDA.b Scrap02 : STA.b Scrap0A
.wide
PLY : PLX
SEP #$20
RTL
PrepPrizeShadow:
PHX
LDA.w ItemReceiptID : TAX
LDA.l SpriteProperties_standing_width,X : BNE .wide
LDA.b Scrap02
SEC : SBC.b #$04
STA.b Scrap02
.wide
LDA.b #$20 : STA.b Scrap04 ; What we wrote over
PLX
RTL
CheckPoseItemCoordinates:
PHX
LDA.w ItemReceiptPose : BEQ .done
BIT.b #$02 : BEQ .done
LDA.w AncillaGet,X : TAX
LDA.l SpriteProperties_chest_width,X : BNE .done
LDA.b Scrap02
CLC : ADC.b #$04
STA.b Scrap02
.done
PLX
LDA.w AncillaGet,X
TAX
RTL
CrystalOrPendantBehavior:
; Out: c - Crystal Behavior if set, pendant if unset
PHA : PHX
LDA.w AncillaGet,X : TAX
LDA.l InventoryTable_properties,X : BMI .crystal_behavior
PLX : PLA
CLC
RTS
.crystal_behavior
PLX : PLA
SEC
RTS
CheckDungeonWorld:
; Maintain vanilla door opening behavior with dungeon prizes
TXA : CMP.b #$05 : BCS .dark_world
REP #$02
RTL
.dark_world
SEP #$02
RTL RTL
;--------------------------------------------------------------------------------

View File

@@ -2,7 +2,7 @@ NewElderCode:
{ {
LDA.b OverworldIndex : CMP.b #$1B : BEQ .newCodeContinue LDA.b OverworldIndex : CMP.b #$1B : BEQ .newCodeContinue
;Restore Jump we can keep the RTL so JML ;Restore Jump we can keep the RTL so JML
JML $05F0CD JML $85F0CD
.newCodeContinue .newCodeContinue
PHB : PHK : PLB PHB : PHK : PLB
LDA.b #$07 : STA.w SpriteOAMProp, X ; Palette LDA.b #$07 : STA.w SpriteOAMProp, X ; Palette

View File

@@ -1,22 +0,0 @@
;================================================================================
; Dialog Pointer Override
;--------------------------------------------------------------------------------
EndingSequenceTableOverride:
PHY
PHX
TYX
LDA.l EndingSequenceText, X
PLX
STA.w $1008, X
PLY
RTL
;--------------------------------------------------------------------------------
EndingSequenceTableLookupOverride:
PHY
PHX
TYX
LDA.l EndingSequenceText, X : AND.w #$00FF
PLX
PLY
RTL
;--------------------------------------------------------------------------------

View File

@@ -20,7 +20,7 @@ RTL
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
NewFireBarDamage: NewFireBarDamage:
LDA.w $00EE : CMP.w SpriteLayer, X : BNE .NotSameLayer LDA.b LinkLayer : CMP.w SpriteLayer, X : BNE .NotSameLayer
JSL Sprite_AttemptDamageToPlayerPlusRecoilLong JSL Sprite_AttemptDamageToPlayerPlusRecoilLong
RTL RTL
.NotSameLayer .NotSameLayer

View File

@@ -29,7 +29,7 @@ LockAgahnimDoors:
LDA.w #$0001 : RTL ;Keep the door locked LDA.w #$0001 : RTL ;Keep the door locked
++ ++
SEP #$30 SEP #$30
JSL $099B6F ;Add tower break seal JSL $899B6F ;Add tower break seal
REP #$30 REP #$30
LDA.w #$0001 ;Prevent door from opening that frame otherwise it glitchy LDA.w #$0001 ;Prevent door from opening that frame otherwise it glitchy
RTL RTL
@@ -142,11 +142,11 @@ JML.l AllowStartFromExitReturn
.doStart .doStart
LDA.l $028481, X ;Module_LocationMenu_starting_points LDA.l $828481, X ;Module_LocationMenu_starting_points
ASL : TAX ASL : TAX
LDA.l $02D8D2, X : STA.b RoomIndex LDA.l $82D8D2, X : STA.b RoomIndex
LDA.l $02D8D3, X : STA.b RoomIndex+1 LDA.l $82D8D3, X : STA.b RoomIndex+1
; Go to pre-overworld mode ; Go to pre-overworld mode
LDA.b #$08 : STA.b GameMode LDA.b #$08 : STA.b GameMode
@@ -166,9 +166,9 @@ RTL
CheckHole: CheckHole:
LDX.w #$0024 LDX.w #$0024
.nextHoleClassic .nextHoleClassic
LDA.b Scrap00 : CMP.l $1BB800, X LDA.b Scrap00 : CMP.l $9BB800, X
BNE .wrongMap16Classic BNE .wrongMap16Classic
LDA.b OverworldIndex : CMP.l $1BB826, X LDA.b OverworldIndex : CMP.l $9BB826, X
BEQ .matchedHoleClassic BEQ .matchedHoleClassic
.wrongMap16Classic .wrongMap16Classic
DEX #2 : BPL .nextHoleClassic DEX #2 : BPL .nextHoleClassic

View File

@@ -1,10 +1,15 @@
OnPrepFileSelect: OnPrepFileSelect:
LDA.b GameSubMode : CMP.b #$03 : BNE + LDA.b GameSubMode : CMP.b #$03 : BNE +
LDA.b #$06 : STA.b NMISTRIPES ; thing we wrote over LDA.b #$06 : STA.b NMISTRIPES ; thing we wrote over
RTL RTL
+ +
JSL.l LoadAlphabetTilemap PHA : PHX
JML.l LoadFullItemTiles REP #$10
JSL.l LoadAlphabetTilemap
JSL.l LoadFullItemTiles
SEP #$10
PLX : PLA
RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
OnDrawHud: OnDrawHud:
JSL.l DrawChallengeTimer ; this has to come before NewDrawHud because the timer overwrites the compass counter JSL.l DrawChallengeTimer ; this has to come before NewDrawHud because the timer overwrites the compass counter
@@ -20,6 +25,10 @@ OnDungeonEntrance:
INC.w UpdateHUD INC.w UpdateHUD
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
OnDungeonBossExit:
JSL.l StatTransitionCounter
RTL
;--------------------------------------------------------------------------------
OnPlayerDead: OnPlayerDead:
PHA PHA
JSL.l SetDeathWorldChecked JSL.l SetDeathWorldChecked
@@ -37,8 +46,8 @@ OnDungeonExit:
STA.w DungeonID : STZ.w Map16ChangeIndex ; thing we wrote over STA.w DungeonID : STZ.w Map16ChangeIndex ; thing we wrote over
PHA : PHP PHA : PHP
JSL.l HUD_RebuildLong
INC.w UpdateHUD INC.w UpdateHUD
JSL.l HUD_RebuildLong
JSL.l FloodGateResetInner JSL.l FloodGateResetInner
JSL.l SetSilverBowMode JSL.l SetSilverBowMode
PLP : PLA PLP : PLA
@@ -84,21 +93,19 @@ OnAga2Defeated:
JML.l IncrementAgahnim2Sword JML.l IncrementAgahnim2Sword
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
OnFileCreation: OnFileCreation:
; Copy initial SRAM state from ROM to cart SRAM
; If the inital SRAM table is move these addresses must be changed
PHB PHB
LDA.w #$03D7 ; \ LDA.w #$03D7
LDX.w #$B000 ; | Copies from beginning of inital sram table up to file name LDX.w #$B000
LDY.w #$0000 ; | (exclusively) LDY.w #$0000
MVN !SRAMBank, !SRAMTableBank ; / MVN CartridgeSRAM>>16, InitSRAMTable>>16
; Skip file name and validity value ; Skip file name and validity value
LDA.w #$010C ; \ LDA.w #$010C
LDX.w #$B3E3 ; | Rando-Specific Assignments & Game Stats block LDX.w #$B3E3
LDY.w #$03E3 ; | LDY.w #$03E3
MVN !SRAMBank, !SRAMTableBank ; / MVN CartridgeSRAM>>16, InitSRAMTable>>16
PLB PLB
; resolve instant post-aga if standard ; Resolve instant post-aga if standard
SEP #$20 SEP #$20
LDA.l InitProgressIndicator : BIT #$80 : BEQ + LDA.l InitProgressIndicator : BIT #$80 : BEQ +
LDA.b #$00 : STA.l ProgressIndicatorSRAM ; set post-aga after zelda rescue LDA.b #$00 : STA.l ProgressIndicatorSRAM ; set post-aga after zelda rescue
@@ -106,13 +113,13 @@ OnFileCreation:
+ +
REP #$20 REP #$20
; Set validity value and do some cleanup. Jump to checksum. ; Set validity value and do some cleanup. Jump to checksum done.
LDA.w #$55AA : STA.l FileValiditySRAM LDA.w #$55AA : STA.l FileValiditySRAM
JSL.l WriteNewFileChecksum JSL.l WriteSaveChecksumAndBackup
STZ.b Scrap00 STZ.b Scrap00
STZ.b Scrap01 STZ.b Scrap01
JML.l InitializeSaveFile_done JML.l InitializeSaveFile_checksum_done
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
OnFileLoad: OnFileLoad:
REP #$10 ; set 16 bit index registers REP #$10 ; set 16 bit index registers
@@ -224,19 +231,40 @@ PostItemGet:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
PostItemAnimation: PostItemAnimation:
LDA.b #$00 : STA.l BusyItem ; mark item as finished LDA.b #$00 : STA.l BusyItem ; mark item as finished
LDA.l TextBoxDefer : BEQ +
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
JSL.l Main_ShowTextMessage_Alt
LDA.b #$00 : STA.l TextBoxDefer
+
LDA.w ItemReceiptMethod : CMP.b #$01 : BNE +
LDA.b LinkDirection : BEQ +
JSL.l IncrementChestTurnCounter
+
REP #$20
LDA.w TransparencyFlag : BNE .SP05
LDA.l PalettesCustom_off_black+$00 : STA.l PaletteBuffer+$0170
LDA.l PalettesCustom_off_black+$02 : STA.l PaletteBuffer+$0172
LDA.l PalettesCustom_off_black+$04 : STA.l PaletteBuffer+$0174
LDA.l PalettesCustom_off_black+$06 : STA.l PaletteBuffer+$0176
LDA.l PalettesCustom_off_black+$08 : STA.l PaletteBuffer+$0178
LDA.l PalettesCustom_off_black+$0A : STA.l PaletteBuffer+$017A
LDA.l PalettesCustom_off_black+$0C : STA.l PaletteBuffer+$017C
LDA.l PalettesCustom_off_black+$0E : STA.l PaletteBuffer+$017E
BRA .done
.SP05
LDA.l PalettesCustom_off_black+$00 : STA.l PaletteBuffer+$01B0
LDA.l PalettesCustom_off_black+$02 : STA.l PaletteBuffer+$01B2
LDA.l PalettesCustom_off_black+$04 : STA.l PaletteBuffer+$01B4
LDA.l PalettesCustom_off_black+$06 : STA.l PaletteBuffer+$01B6
LDA.l PalettesCustom_off_black+$08 : STA.l PaletteBuffer+$01B8
LDA.l PalettesCustom_off_black+$0A : STA.l PaletteBuffer+$01BA
LDA.l PalettesCustom_off_black+$0C : STA.l PaletteBuffer+$01BC
LDA.l PalettesCustom_off_black+$0E : STA.l PaletteBuffer+$01BE
.done
INC.b NMICGRAM
SEP #$20
LDA.l TextBoxDefer : BEQ + STZ.w ItemReceiptMethod : LDA.w AncillaGet, X ; thing we wrote over to get here
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
JSL.l Main_ShowTextMessage_Alt
LDA.b #$00 : STA.l TextBoxDefer
+
LDA.w ItemReceiptMethod : CMP.b #$01 : BNE +
LDA.b LinkDirection : BEQ +
JSL.l IncrementChestTurnCounter
+
STZ.w ItemReceiptMethod : LDA.w AncillaGet, X ; thing we wrote over to get here
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------

View File

@@ -1,4 +1,4 @@
org $298000 ; 0x148000 org $A98000 ; 0x148000
Ext_OnFileCreate: ;x Ext_OnFileCreate: ;x
RTL : RTL : RTL : RTL : RTL RTL : RTL : RTL : RTL : RTL
Ext_OnFileLoad: ;x immediately after load Ext_OnFileLoad: ;x immediately after load

View File

@@ -1,3 +1,18 @@
CheckZSNES:
SEP #$28
LDA.b #$FF
CLC
ADC.b #$FF
CMP.b #$64
REP #$28
BEQ .zsnes
LDA.w #$01FF : TCS ; thing we wrote over - initialize stack
JML ReturnCheckZSNES
.zsnes
JML DontUseZSNES
;===================================================================================================
pushtable pushtable
table "data/bsodencode.txt" table "data/bsodencode.txt"

View File

@@ -1,21 +1,51 @@
FastCreditsActive = $50
;===================================================================================================
FlagFastCredits:
LDA.b #$40
TRB.b FastCreditsActive
AND.b Joy1B_All
TSB.b FastCreditsActive
LDA.b #$20
AND.b Joy1A_New
EOR.b FastCreditsActive
STA.b FastCreditsActive
LDA.b FastCreditsActive
AND.b #$60
BEQ .slow
LDA.b #$01
TSB.b FastCreditsActive
.slow
LDA.b $11
ASL
TAX
RTL
;=================================================================================================== ;===================================================================================================
FastCreditsCutsceneTimer: FastCreditsCutsceneTimer:
BIT.b Joy1B_All-1 : BVC .slow
LDA.w #$0001 : STA.b $50
LDA.b ScrapBufferBD+$0B LDA.b ScrapBufferBD+$0B
CLC INC
ADC.w #$0004
AND.w #$FFFE
STA.b ScrapBufferBD+$0B
SEP #$20
RTL
JSR IsFastCredits
BCC .slow
INC
INC
INC
AND.w #$FFFE
.slow .slow
INC.b ScrapBufferBD+$0B STA.b ScrapBufferBD+$0B
SEP #$20 SEP #$20
RTL RTL
@@ -49,18 +79,20 @@ FastCreditsCutsceneScrollY:
FastCreditsCutsceneScroll: FastCreditsCutsceneScroll:
LDA.w $00E2,Y LDA.w $00E2,Y
CMP.l $0EC308,X ; compare to target CMP.l $8EC308,X ; compare to target
ROL.b Scrap00 ; put carry in here ROL.b Scrap00 ; put carry in here
LDA.l $0EC348,X ; get movement LDA.l $8EC348,X ; get movement
BPL ++ ; if positive, leave saved carry alone BPL ++ ; if positive, leave saved carry alone
INC.b Scrap00 ; otherwise, flip it INC.b Scrap00 ; otherwise, flip it
++ ROR.b Scrap00 ; recover carry ++ ROR.b Scrap00 ; recover carry
BCC ++ ; scroll if carry not set BCC ++ ; scroll if carry not set
LDA.w #$0000 LDA.w #$0000
++ BIT.b Joy1B_All-1 : BVC .slow ; check for X held ++ JSR IsFastCredits
BCC .slow
AND.w #$FFFF ; get sign of A AND.w #$FFFF ; get sign of A
BPL .positive BPL .positive
@@ -77,16 +109,9 @@ FastCreditsCutsceneScroll:
ASL ASL
ASL ASL
.slow .slow
RTS RTS
FastCreditsCutsceneUnderworldX: FastCreditsCutsceneUnderworldX:
JSR FastCreditsCutsceneScrollX JSR FastCreditsCutsceneScrollX
CLC CLC
@@ -106,19 +131,27 @@ FastCreditsCutsceneUnderworldY:
FastTextScroll: FastTextScroll:
LDA.b FrameCounter LDA.b FrameCounter
BIT.b Joy1B_All-1 : BVC .slow SEP #$10
JSR IsFastCredits
BCC .slow
AND.w #$0000 AND.w #$0000
REP #$10
RTL RTL
.slow .slow
AND.w #$0003 AND.w #$0003
REP #$10
RTL RTL
DumbFlagForMSU: DumbFlagForMSU:
STA.l CurrentWorld STA.l CurrentWorld
STZ.b $50 STZ.b FastCreditsActive
RTL RTL
IsFastCredits:
LDY.b FastCreditsActive
CPY.b #$20
RTS

6591
fastrom.asm Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,4 @@
;FS prefix means file_select, since these defines and macros are specific to this screen ;FS prefix means file_select, since these defines and macros are specific to this screen
!FS_COLOR_BROWN = $0000 ;(only used for: Shovel, hammer, powder) !FS_COLOR_BROWN = $0000 ;(only used for: Shovel, hammer, powder)
!FS_COLOR_RED = $0400 !FS_COLOR_RED = $0400
!FS_COLOR_YELLOW = $0800 !FS_COLOR_YELLOW = $0800
@@ -110,6 +108,7 @@ JMP DrawItem
DrawPlayerFile: DrawPlayerFile:
LDA.b FrameCounter : AND.w #$0001 : BNE .normal LDA.b FrameCounter : AND.w #$0001 : BNE .normal
JSR DrawPlayerFileShared JSR DrawPlayerFileShared
INC.w SkipOAM ; Suppress animated tile updates for this frame INC.w SkipOAM ; Suppress animated tile updates for this frame
; re-enable Stripe Image format upload on this frame ; re-enable Stripe Image format upload on this frame
@@ -146,7 +145,7 @@ DrawPlayerFile:
AND.w #$00FF AND.w #$00FF
BEQ .flashing BEQ .flashing
LDA.w #$26BE LDA.w #$26FE
BRA .draw_access_icon BRA .draw_access_icon
.flashing .flashing
@@ -155,10 +154,8 @@ DrawPlayerFile:
.draw_access_icon .draw_access_icon
STA.w GFXStripes+$0412 STA.w GFXStripes+$0412
LDA.w #$FFFF LDA.w #$FFFF
STA.w GFXStripes+$0414 STA.w GFXStripes+$0414
BRA .done BRA .done
.normal .normal
STZ.w SkipOAM ; ensure core animated tile updates are not suppressed STZ.w SkipOAM ; ensure core animated tile updates are not suppressed
@@ -357,23 +354,40 @@ DrawPlayerFileShared:
++ ++
; Heart Pieces ; Heart Pieces
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l EquipmentSRAM+$2B : AND.w #$00FF : BNE + LDA.l EquipmentSRAM+$2B : AND.w #$00FF : BNE +
%fs_drawItem(9,26,FileSelectItems_heart_piece_0_of_4) LDY.w #9*$20+26*2+$1004
BRA ++ LDA.w #$02C0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0000, Y
LDA.w #$42C0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0002, Y
LDA.w #$02D0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0040, Y
LDA.w #$42D0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0042, Y
JMP ++
+ : DEC : BNE + + : DEC : BNE +
%fs_drawItem(9,26,FileSelectItems_heart_piece_1_of_4) LDY.w #9*$20+26*2+$1004
BRA ++ LDA.w #$02C1 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0000, Y
LDA.w #$42C0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0002, Y
LDA.w #$02D0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0040, Y
LDA.w #$42D0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0042, Y
JMP ++
+ : DEC : BNE + + : DEC : BNE +
%fs_drawItem(9,26,FileSelectItems_heart_piece_2_of_4) LDY.w #9*$20+26*2+$1004
BRA ++ LDA.w #$02C1 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0000, Y
LDA.w #$42C0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0002, Y
LDA.w #$02D1 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0040, Y
LDA.w #$42D0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0042, Y
JMP ++
+ +
%fs_drawItem(9,26,FileSelectItems_heart_piece_3_of_4) LDY.w #9*$20+26*2+$1004
LDA.w #$02C1 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0000, Y
LDA.w #$42C1 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0002, Y
LDA.w #$02D1 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0040, Y
LDA.w #$42D0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0042, Y
++ ++
LDA.l EquipmentSRAM+$0130 : AND.w #$00FF LDA.l EquipmentSRAM+$0130 : AND.w #$00FF
JSL.l HUDHex2Digit_Long JSL.l HexToDec
TYA : AND.w #$00FF : !ADD.w #$0210+!FS_COLOR_BW : %fs_draw8x8(11,26) LDA.l HexToDecDigit4 : AND.w #$00FF : ORA.w #!FS_COLOR_BW|$02E0 : %fs_draw8x8(11,26)
TXA : AND.w #$00FF : !ADD.w #$0210+!FS_COLOR_BW : %fs_draw8x8(11,27) LDA.l HexToDecDigit5 : AND.w #$00FF : ORA.w #!FS_COLOR_BW|$02E0 : %fs_draw8x8(11,27)
; Boots ; Boots
%fs_drawItemBasic(EquipmentSRAM+$15,3,28,FileSelectItems_boots) %fs_drawItemBasic(EquipmentSRAM+$15,3,28,FileSelectItems_boots)
@@ -419,52 +433,52 @@ DrawPlayerFileShared:
; Crystals ; Crystals
LDA.l EquipmentSRAM+$3A : AND.w #$0002 : BEQ + LDA.l EquipmentSRAM+$3A : AND.w #$0002 : BEQ +
LDA.w #$0297|!FS_COLOR_BLUE LDA.w #$02D7|!FS_COLOR_BLUE
BRA ++ BRA ++
+ +
LDA.w #$0287|!FS_COLOR_GRAY LDA.w #$02C7|!FS_COLOR_GRAY
++ : %fs_draw16x8(13,18) ++ : %fs_draw16x8(13,18)
LDA.l EquipmentSRAM+$3A : AND.w #$0010 : BEQ + LDA.l EquipmentSRAM+$3A : AND.w #$0010 : BEQ +
LDA.w #$0297|!FS_COLOR_BLUE LDA.w #$02D7|!FS_COLOR_BLUE
BRA ++ BRA ++
+ +
LDA.w #$0287|!FS_COLOR_GRAY LDA.w #$02C7|!FS_COLOR_GRAY
++ : %fs_draw16x8(12,19) ++ : %fs_draw16x8(12,19)
LDA.l EquipmentSRAM+$3A : AND.w #$0040 : BEQ + LDA.l EquipmentSRAM+$3A : AND.w #$0040 : BEQ +
LDA.w #$0297|!FS_COLOR_BLUE LDA.w #$02D7|!FS_COLOR_BLUE
BRA ++ BRA ++
+ +
LDA.w #$0287|!FS_COLOR_GRAY LDA.w #$02C7|!FS_COLOR_GRAY
++ : %fs_draw16x8(13,20) ++ : %fs_draw16x8(13,20)
LDA.l EquipmentSRAM+$3A : AND.w #$0020 : BEQ + LDA.l EquipmentSRAM+$3A : AND.w #$0020 : BEQ +
LDA.w #$0297|!FS_COLOR_BLUE LDA.w #$02D7|!FS_COLOR_BLUE
BRA ++ BRA ++
+ +
LDA.w #$0287|!FS_COLOR_GRAY LDA.w #$02C7|!FS_COLOR_GRAY
++ : %fs_draw16x8(12,21) ++ : %fs_draw16x8(12,21)
LDA.l EquipmentSRAM+$3A : AND.w #$0004 : BEQ + LDA.l EquipmentSRAM+$3A : AND.w #$0004 : BEQ +
LDA.w #$0297|!FS_COLOR_RED LDA.w #$02D7|!FS_COLOR_RED
BRA ++ BRA ++
+ +
LDA.w #$0287|!FS_COLOR_GRAY LDA.w #$02C7|!FS_COLOR_GRAY
++ : %fs_draw16x8(13,22) ++ : %fs_draw16x8(13,22)
LDA.l EquipmentSRAM+$3A : AND.w #$0001 : BEQ + LDA.l EquipmentSRAM+$3A : AND.w #$0001 : BEQ +
LDA.w #$0297|!FS_COLOR_RED LDA.w #$02D7|!FS_COLOR_RED
BRA ++ BRA ++
+ +
LDA.w #$0287|!FS_COLOR_GRAY LDA.w #$02C7|!FS_COLOR_GRAY
++ : %fs_draw16x8(12,23) ++ : %fs_draw16x8(12,23)
LDA.l EquipmentSRAM+$3A : AND.w #$0008 : BEQ + LDA.l EquipmentSRAM+$3A : AND.w #$0008 : BEQ +
LDA.w #$0297|!FS_COLOR_BLUE LDA.w #$02D7|!FS_COLOR_BLUE
BRA ++ BRA ++
+ +
LDA.w #$0287|!FS_COLOR_GRAY LDA.w #$02C7|!FS_COLOR_GRAY
++ : %fs_draw16x8(13,24) ++ : %fs_draw16x8(13,24)
@@ -474,157 +488,148 @@ RTS
FileSelectItems: FileSelectItems:
.empty_bow ;for an eventual update for retro mode .empty_bow ;for an eventual update for retro mode
dw #$0201|!FS_COLOR_YELLOW, #$02B8|!FS_COLOR_YELLOW, #$02B7|!FS_COLOR_YELLOW, #$0212|!FS_COLOR_YELLOW dw #$0241|!FS_COLOR_YELLOW, #$02F8|!FS_COLOR_YELLOW, #$02F7|!FS_COLOR_YELLOW, #$0252|!FS_COLOR_YELLOW
.bow .bow
dw #$0201|!FS_COLOR_YELLOW, #$0202|!FS_COLOR_YELLOW, #$0211|!FS_COLOR_YELLOW, #$0212|!FS_COLOR_YELLOW dw #$0241|!FS_COLOR_YELLOW, #$0242|!FS_COLOR_YELLOW, #$0251|!FS_COLOR_YELLOW, #$0252|!FS_COLOR_YELLOW
.silver_bow .silver_bow
dw #$0201|!FS_COLOR_YELLOW, #$0204|!FS_COLOR_YELLOW, #$0203|!FS_COLOR_RED, #$0212|!FS_COLOR_YELLOW dw #$0241|!FS_COLOR_YELLOW, #$0244|!FS_COLOR_YELLOW, #$0243|!FS_COLOR_RED, #$0252|!FS_COLOR_YELLOW
.regular_arrow ;for an eventual update for retro mode .regular_arrow ;for an eventual update for retro mode
dw #$0200|!FS_COLOR_YELLOW, #$02BA|!FS_COLOR_YELLOW, #$02B9|!FS_COLOR_RED, #$0200|!FS_COLOR_YELLOW dw #$0240|!FS_COLOR_YELLOW, #$02FA|!FS_COLOR_YELLOW, #$02F9|!FS_COLOR_RED, #$0240|!FS_COLOR_YELLOW
.silver_arrow .silver_arrow
dw #$0200|!FS_COLOR_YELLOW, #$0214|!FS_COLOR_YELLOW, #$0213|!FS_COLOR_RED, #$0200|!FS_COLOR_YELLOW dw #$0240|!FS_COLOR_YELLOW, #$0254|!FS_COLOR_YELLOW, #$0253|!FS_COLOR_RED, #$0240|!FS_COLOR_YELLOW
.blue_boomerang .blue_boomerang
dw #$0205|!FS_COLOR_BLUE, #$0206|!FS_COLOR_BLUE, #$0200|!FS_COLOR_BW, #$0216|!FS_COLOR_BLUE dw #$0245|!FS_COLOR_BLUE, #$0246|!FS_COLOR_BLUE, #$0240|!FS_COLOR_BW, #$0256|!FS_COLOR_BLUE
.red_boomerang .red_boomerang
dw #$0205|!FS_COLOR_RED, #$0206|!FS_COLOR_RED, #$0200|!FS_COLOR_BW, #$0216|!FS_COLOR_RED dw #$0245|!FS_COLOR_RED, #$0246|!FS_COLOR_RED, #$0240|!FS_COLOR_BW, #$0256|!FS_COLOR_RED
.both_boomerang .both_boomerang
dw #$02B6|!FS_COLOR_BLUE, #$02B6|!FS_COLOR_RED, #$02B6|!FS_COLOR_BLUE|!FS_VFLIP, #$02B6|!FS_COLOR_RED|!FS_VFLIP dw #$02F6|!FS_COLOR_BLUE, #$02F6|!FS_COLOR_RED, #$02F6|!FS_COLOR_BLUE|!FS_VFLIP, #$02F6|!FS_COLOR_RED|!FS_VFLIP
.hookshot .hookshot
dw #$0200|!FS_COLOR_RED, #$0215|!FS_COLOR_RED, #$0230|!FS_COLOR_RED, #$0200|!FS_COLOR_BW dw #$0240|!FS_COLOR_RED, #$0255|!FS_COLOR_RED, #$0270|!FS_COLOR_RED, #$0240|!FS_COLOR_BW
.bombs .bombs
dw #$020C|!FS_COLOR_BLUE, #$020D|!FS_COLOR_BLUE, #$021C|!FS_COLOR_BLUE, #$021C|!FS_COLOR_BLUE|!FS_HFLIP dw #$024C|!FS_COLOR_BLUE, #$024D|!FS_COLOR_BLUE, #$025C|!FS_COLOR_BLUE, #$025C|!FS_COLOR_BLUE|!FS_HFLIP
.fire_rod .fire_rod
dw #$0220|!FS_COLOR_RED, #$0210|!FS_COLOR_RED, #$0230|!FS_COLOR_RED, #$0231|!FS_COLOR_RED dw #$0260|!FS_COLOR_RED, #$0250|!FS_COLOR_RED, #$0270|!FS_COLOR_RED, #$0271|!FS_COLOR_RED
.ice_rod .ice_rod
dw #$0220|!FS_COLOR_BLUE, #$0221|!FS_COLOR_BLUE, #$0230|!FS_COLOR_BLUE, #$0231|!FS_COLOR_BLUE dw #$0260|!FS_COLOR_BLUE, #$0261|!FS_COLOR_BLUE, #$0270|!FS_COLOR_BLUE, #$0271|!FS_COLOR_BLUE
.bombos .bombos
dw #$0207|!FS_COLOR_YELLOW, #$0217|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0217|!FS_COLOR_YELLOW, #$0207|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP dw #$0247|!FS_COLOR_YELLOW, #$0257|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0257|!FS_COLOR_YELLOW, #$0247|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP
.ether .ether
dw #$0208|!FS_COLOR_YELLOW, #$0218|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0218|!FS_COLOR_YELLOW, #$0208|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP dw #$0248|!FS_COLOR_YELLOW, #$0258|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0258|!FS_COLOR_YELLOW, #$0248|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP
.quake .quake
dw #$0209|!FS_COLOR_YELLOW, #$0219|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0219|!FS_COLOR_YELLOW, #$0209|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP dw #$0249|!FS_COLOR_YELLOW, #$0259|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0259|!FS_COLOR_YELLOW, #$0249|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP
.lamp .lamp
dw #$022C|!FS_COLOR_RED, #$022C|!FS_COLOR_RED|!FS_HFLIP, #$023C|!FS_COLOR_RED, #$023D|!FS_COLOR_RED dw #$026C|!FS_COLOR_RED, #$026C|!FS_COLOR_RED|!FS_HFLIP, #$027C|!FS_COLOR_RED, #$027D|!FS_COLOR_RED
.hammer .hammer
dw #$0222|!FS_COLOR_BROWN, #$0223|!FS_COLOR_BROWN, #$0232|!FS_COLOR_BROWN, #$0233|!FS_COLOR_BROWN dw #$0262|!FS_COLOR_BROWN, #$0263|!FS_COLOR_BROWN, #$0272|!FS_COLOR_BROWN, #$0273|!FS_COLOR_BROWN
.bugnet .bugnet
dw #$0228|!FS_COLOR_YELLOW, #$0229|!FS_COLOR_YELLOW, #$0238|!FS_COLOR_YELLOW, #$0239|!FS_COLOR_YELLOW dw #$0268|!FS_COLOR_YELLOW, #$0269|!FS_COLOR_YELLOW, #$0278|!FS_COLOR_YELLOW, #$0279|!FS_COLOR_YELLOW
.shovel .shovel
dw #$0224|!FS_COLOR_BROWN, #$0225|!FS_COLOR_BROWN, #$0234|!FS_COLOR_BROWN, #$0235|!FS_COLOR_BROWN dw #$0264|!FS_COLOR_BROWN, #$0265|!FS_COLOR_BROWN, #$0274|!FS_COLOR_BROWN, #$0275|!FS_COLOR_BROWN
.flute .flute
dw #$0226|!FS_COLOR_BLUE, #$0227|!FS_COLOR_BLUE, #$0236|!FS_COLOR_BLUE, #$0237|!FS_COLOR_BLUE dw #$0266|!FS_COLOR_BLUE, #$0267|!FS_COLOR_BLUE, #$0276|!FS_COLOR_BLUE, #$0277|!FS_COLOR_BLUE
.book .book
dw #$022A|!FS_COLOR_GREEN, #$022B|!FS_COLOR_GREEN, #$023A|!FS_COLOR_GREEN, #$023B|!FS_COLOR_GREEN dw #$026A|!FS_COLOR_GREEN, #$026B|!FS_COLOR_GREEN, #$027A|!FS_COLOR_GREEN, #$027B|!FS_COLOR_GREEN
.redcane .redcane
dw #$021D|!FS_COLOR_RED, #$021E|!FS_COLOR_RED, #$022D|!FS_COLOR_RED, #$022E|!FS_COLOR_RED dw #$025D|!FS_COLOR_RED, #$025E|!FS_COLOR_RED, #$026D|!FS_COLOR_RED, #$026E|!FS_COLOR_RED
.bluecane .bluecane
dw #$021D|!FS_COLOR_BLUE, #$021E|!FS_COLOR_BLUE, #$022D|!FS_COLOR_BLUE, #$022E|!FS_COLOR_BLUE dw #$025D|!FS_COLOR_BLUE, #$025E|!FS_COLOR_BLUE, #$026D|!FS_COLOR_BLUE, #$026E|!FS_COLOR_BLUE
.cape .cape
dw #$0248|!FS_COLOR_RED, #$0249|!FS_COLOR_RED, #$0258|!FS_COLOR_RED, #$0259|!FS_COLOR_RED dw #$0288|!FS_COLOR_RED, #$0289|!FS_COLOR_RED, #$0298|!FS_COLOR_RED, #$0299|!FS_COLOR_RED
.mirror .mirror
dw #$024A|!FS_COLOR_BLUE, #$024B|!FS_COLOR_BLUE, #$025A|!FS_COLOR_BLUE, #$025B|!FS_COLOR_BLUE dw #$028A|!FS_COLOR_BLUE, #$028B|!FS_COLOR_BLUE, #$029A|!FS_COLOR_BLUE, #$029B|!FS_COLOR_BLUE
.flippers .flippers
dw #$020E|!FS_COLOR_BLUE, #$020F|!FS_COLOR_BLUE, #$021F|!FS_COLOR_BLUE|!FS_HFLIP, #$021F|!FS_COLOR_BLUE dw #$024E|!FS_COLOR_BLUE, #$024F|!FS_COLOR_BLUE, #$025F|!FS_COLOR_BLUE|!FS_HFLIP, #$025F|!FS_COLOR_BLUE
.boots .boots
dw #$024C|!FS_COLOR_BOOTS, #$024D|!FS_COLOR_BOOTS, #$025C|!FS_COLOR_BOOTS, #$025D|!FS_COLOR_BOOTS dw #$028C|!FS_COLOR_BOOTS, #$028D|!FS_COLOR_BOOTS, #$029C|!FS_COLOR_BOOTS, #$029D|!FS_COLOR_BOOTS
.pearl .pearl
dw #$0264|!FS_COLOR_RED, #$0265|!FS_COLOR_RED, #$0274|!FS_COLOR_RED, #$0275|!FS_COLOR_RED dw #$02A4|!FS_COLOR_RED, #$02A5|!FS_COLOR_RED, #$02B4|!FS_COLOR_RED, #$02B5|!FS_COLOR_RED
.no_pendant .no_pendant
dw #$0285|!FS_COLOR_GRAY, #$0286|!FS_COLOR_GRAY, #$02B2|!FS_COLOR_GRAY, #$0296|!FS_COLOR_GRAY dw #$02C5|!FS_COLOR_GRAY, #$02C6|!FS_COLOR_GRAY, #$02F2|!FS_COLOR_GRAY, #$02D6|!FS_COLOR_GRAY
.green_pendant .green_pendant
dw #$0285|!FS_COLOR_GREEN, #$0286|!FS_COLOR_GREEN, #$0295|!FS_COLOR_GREEN, #$0296|!FS_COLOR_GREEN dw #$02C5|!FS_COLOR_GREEN, #$02C6|!FS_COLOR_GREEN, #$02D5|!FS_COLOR_GREEN, #$02D6|!FS_COLOR_GREEN
.blue_pendant .blue_pendant
dw #$0285|!FS_COLOR_BLUE, #$0286|!FS_COLOR_BLUE, #$0295|!FS_COLOR_BLUE, #$0296|!FS_COLOR_BLUE dw #$02C5|!FS_COLOR_BLUE, #$02C6|!FS_COLOR_BLUE, #$02D5|!FS_COLOR_BLUE, #$02D6|!FS_COLOR_BLUE
.red_pendant .red_pendant
dw #$0285|!FS_COLOR_RED, #$0286|!FS_COLOR_RED, #$0295|!FS_COLOR_RED, #$0296|!FS_COLOR_RED dw #$02C5|!FS_COLOR_RED, #$02C6|!FS_COLOR_RED, #$02D5|!FS_COLOR_RED, #$02D6|!FS_COLOR_RED
.gloves .gloves
dw #$024E|!FS_COLOR_BROWN, #$024F|!FS_COLOR_BROWN, #$025E|!FS_COLOR_BROWN, #$025F|!FS_COLOR_BROWN dw #$028E|!FS_COLOR_BROWN, #$028F|!FS_COLOR_BROWN, #$029E|!FS_COLOR_BROWN, #$029F|!FS_COLOR_BROWN
.mitts .mitts
dw #$0260|!FS_COLOR_YELLOW, #$0261|!FS_COLOR_YELLOW, #$0270|!FS_COLOR_YELLOW, #$0271|!FS_COLOR_YELLOW dw #$02A0|!FS_COLOR_YELLOW, #$02A1|!FS_COLOR_YELLOW, #$02B0|!FS_COLOR_YELLOW, #$02B1|!FS_COLOR_YELLOW
.mushroom .mushroom
dw #$0262|!FS_COLOR_RED, #$0263|!FS_COLOR_RED, #$0272|!FS_COLOR_RED, #$0273|!FS_COLOR_RED dw #$02A2|!FS_COLOR_RED, #$02A3|!FS_COLOR_RED, #$02B2|!FS_COLOR_RED, #$02B3|!FS_COLOR_RED
.powder .powder
dw #$020A|!FS_COLOR_BROWN, #$020B|!FS_COLOR_BROWN, #$021A|!FS_COLOR_BROWN, #$021B|!FS_COLOR_BROWN dw #$024A|!FS_COLOR_BROWN, #$024B|!FS_COLOR_BROWN, #$025A|!FS_COLOR_BROWN, #$025B|!FS_COLOR_BROWN
.fighters_sword .fighters_sword
dw #$0266|!FS_COLOR_BLUE, #$0267|!FS_COLOR_BLUE, #$0276|!FS_COLOR_BLUE, #$0277|!FS_COLOR_BLUE dw #$02A6|!FS_COLOR_BLUE, #$02A7|!FS_COLOR_BLUE, #$02B6|!FS_COLOR_BLUE, #$02B7|!FS_COLOR_BLUE
.master_sword .master_sword
dw #$0268|!FS_COLOR_BLUE, #$0269|!FS_COLOR_BLUE, #$0278|!FS_COLOR_RED, #$0279|!FS_COLOR_BLUE dw #$02A8|!FS_COLOR_BLUE, #$02A9|!FS_COLOR_BLUE, #$02B8|!FS_COLOR_RED, #$02B9|!FS_COLOR_BLUE
.tempered_sword .tempered_sword
dw #$0268|!FS_COLOR_RED, #$0269|!FS_COLOR_RED, #$0278|!FS_COLOR_GREEN, #$026A|!FS_COLOR_RED dw #$02A8|!FS_COLOR_RED, #$02A9|!FS_COLOR_RED, #$02B8|!FS_COLOR_GREEN, #$02AA|!FS_COLOR_RED
.gold_sword .gold_sword
dw #$0268|!FS_COLOR_YELLOW, #$0269|!FS_COLOR_YELLOW, #$0278|!FS_COLOR_BLUE, #$027A|!FS_COLOR_YELLOW dw #$02A8|!FS_COLOR_YELLOW, #$02A9|!FS_COLOR_YELLOW, #$02B8|!FS_COLOR_BLUE, #$02BA|!FS_COLOR_YELLOW
.fighters_shield .fighters_shield
dw #$026B|!FS_COLOR_BLUE, #$026B|!FS_COLOR_BLUE|!FS_HFLIP, #$027B|!FS_COLOR_BLUE, #$027B|!FS_COLOR_BLUE|!FS_HFLIP dw #$02AB|!FS_COLOR_BLUE, #$02AB|!FS_COLOR_BLUE|!FS_HFLIP, #$02BB|!FS_COLOR_BLUE, #$02BB|!FS_COLOR_BLUE|!FS_HFLIP
.fire_shield .fire_shield
dw #$026C|!FS_COLOR_BOOTS, #$026C|!FS_COLOR_BOOTS|!FS_HFLIP, #$027C|!FS_COLOR_BOOTS, #$027C|!FS_COLOR_BOOTS|!FS_HFLIP dw #$02AC|!FS_COLOR_BOOTS, #$02AC|!FS_COLOR_BOOTS|!FS_HFLIP, #$02BC|!FS_COLOR_BOOTS, #$02BC|!FS_COLOR_BOOTS|!FS_HFLIP
.mirror_shield .mirror_shield
dw #$026D|!FS_COLOR_YELLOW, #$026E|!FS_COLOR_YELLOW, #$027D|!FS_COLOR_YELLOW, #$027E|!FS_COLOR_YELLOW dw #$02AD|!FS_COLOR_YELLOW, #$02AE|!FS_COLOR_YELLOW, #$02BD|!FS_COLOR_YELLOW, #$02BE|!FS_COLOR_YELLOW
.green_mail .green_mail
dw #$026F|!FS_COLOR_GREEN, #$026F|!FS_COLOR_GREEN|!FS_HFLIP, #$027F|!FS_COLOR_GREEN, #$02B3|!FS_COLOR_GREEN dw #$02AF|!FS_COLOR_GREEN, #$02AF|!FS_COLOR_GREEN|!FS_HFLIP, #$02BF|!FS_COLOR_GREEN, #$02F3|!FS_COLOR_GREEN
.blue_mail .blue_mail
dw #$026F|!FS_COLOR_BLUE, #$026F|!FS_COLOR_BLUE|!FS_HFLIP, #$027F|!FS_COLOR_BLUE, #$02B4|!FS_COLOR_BLUE dw #$02AF|!FS_COLOR_BLUE, #$02AF|!FS_COLOR_BLUE|!FS_HFLIP, #$02BF|!FS_COLOR_BLUE, #$02F4|!FS_COLOR_BLUE
.red_mail .red_mail
dw #$026F|!FS_COLOR_RED, #$026F|!FS_COLOR_RED|!FS_HFLIP, #$027F|!FS_COLOR_RED, #$02B5|!FS_COLOR_RED dw #$02AF|!FS_COLOR_RED, #$02AF|!FS_COLOR_RED|!FS_HFLIP, #$02BF|!FS_COLOR_RED, #$02F5|!FS_COLOR_RED
.heart_piece_0_of_4
dw #$0280|!FS_COLOR_RED, #$0280|!FS_COLOR_RED|!FS_HFLIP, #$0290|!FS_COLOR_RED, #$0290|!FS_COLOR_RED|!FS_HFLIP
.heart_piece_1_of_4
dw #$0281|!FS_COLOR_RED, #$0280|!FS_COLOR_RED|!FS_HFLIP, #$0290|!FS_COLOR_RED, #$0290|!FS_COLOR_RED|!FS_HFLIP
.heart_piece_2_of_4
dw #$0281|!FS_COLOR_RED, #$0280|!FS_COLOR_RED|!FS_HFLIP, #$0291|!FS_COLOR_RED, #$0290|!FS_COLOR_RED|!FS_HFLIP
.heart_piece_3_of_4
dw #$0281|!FS_COLOR_RED, #$0281|!FS_COLOR_RED|!FS_HFLIP, #$0291|!FS_COLOR_RED, #$0290|!FS_COLOR_RED|!FS_HFLIP
.empty_bottle .empty_bottle
dw #$0240|!FS_COLOR_BW, #$0241|!FS_COLOR_BW, #$0250|!FS_COLOR_BW, #$0251|!FS_COLOR_BW dw #$0280|!FS_COLOR_BW, #$0281|!FS_COLOR_BW, #$0290|!FS_COLOR_BW, #$0291|!FS_COLOR_BW
.red_potion .red_potion
dw #$0242|!FS_COLOR_RED, #$0242|!FS_COLOR_RED|!FS_HFLIP, #$0252|!FS_COLOR_RED, #$0243|!FS_COLOR_RED dw #$0282|!FS_COLOR_RED, #$0282|!FS_COLOR_RED|!FS_HFLIP, #$0292|!FS_COLOR_RED, #$0283|!FS_COLOR_RED
.green_potion .green_potion
dw #$0242|!FS_COLOR_GREEN, #$0242|!FS_COLOR_GREEN|!FS_HFLIP, #$0252|!FS_COLOR_GREEN, #$0244|!FS_COLOR_GREEN dw #$0282|!FS_COLOR_GREEN, #$0282|!FS_COLOR_GREEN|!FS_HFLIP, #$0292|!FS_COLOR_GREEN, #$0284|!FS_COLOR_GREEN
.blue_potion .blue_potion
dw #$0242|!FS_COLOR_BLUE, #$0242|!FS_COLOR_BLUE|!FS_HFLIP, #$0252|!FS_COLOR_BLUE, #$0245|!FS_COLOR_BLUE dw #$0282|!FS_COLOR_BLUE, #$0282|!FS_COLOR_BLUE|!FS_HFLIP, #$0292|!FS_COLOR_BLUE, #$0285|!FS_COLOR_BLUE
.fairy_bottle .fairy_bottle
dw #$0247|!FS_COLOR_YELLOW|!FS_HFLIP, #$0247|!FS_COLOR_YELLOW, #$0256|!FS_COLOR_BLUE, #$0257|!FS_COLOR_BLUE dw #$0287|!FS_COLOR_YELLOW|!FS_HFLIP, #$0287|!FS_COLOR_YELLOW, #$0296|!FS_COLOR_BLUE, #$0297|!FS_COLOR_BLUE
.bee_bottle .bee_bottle
dw #$0240|!FS_COLOR_BW, #$0241|!FS_COLOR_BW, #$0254|!FS_COLOR_YELLOW, #$0255|!FS_COLOR_YELLOW dw #$0280|!FS_COLOR_BW, #$0281|!FS_COLOR_BW, #$0294|!FS_COLOR_YELLOW, #$0295|!FS_COLOR_YELLOW
.good_bee_bottle .good_bee_bottle
dw #$0240|!FS_COLOR_BW, #$0241|!FS_COLOR_BW, #$0254|!FS_COLOR_YELLOW, #$0246|!FS_COLOR_YELLOW dw #$0280|!FS_COLOR_BW, #$0281|!FS_COLOR_BW, #$0294|!FS_COLOR_YELLOW, #$0286|!FS_COLOR_YELLOW
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
FileSelectDrawHudBar: FileSelectDrawHudBar:
LDA.w #$029B|!FS_COLOR_GREEN : %fs_draw16x8(0,10) LDA.w #$02DB|!FS_COLOR_GREEN : %fs_draw16x8(0,10)
LDA.l DisplayRupeesSRAM LDA.l DisplayRupeesSRAM
JSL.l HUDHex4Digit_Long JSL.l HUDHex4Digit_Long
LDA.b Scrap04 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,9) LDA.b Scrap04 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,9)
LDA.b Scrap05 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,10) LDA.b Scrap05 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,10)
LDA.b Scrap06 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,11) LDA.b Scrap06 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,11)
LDA.b Scrap07 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,12) LDA.b Scrap07 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,12)
LDA.w #$028B|!FS_COLOR_BLUE : %fs_draw16x8(0,14) LDA.w #$02CB|!FS_COLOR_BLUE : %fs_draw16x8(0,14)
LDA.l BombsEquipmentSRAM : AND.w #$00FF LDA.l BombsEquipmentSRAM : AND.w #$00FF
JSL.l HUDHex2Digit_Long JSL.l HUDHex2Digit_Long
TYA : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,14) TYA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,14)
TXA : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,15) TXA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,15)
LDA.l BowTrackingSRAM : AND.w #$0040 : BEQ + LDA.l BowTrackingSRAM : AND.w #$0040 : BEQ +
LDA.w #$0299|!FS_COLOR_RED : %fs_draw16x8(0,17) LDA.w #$02D9|!FS_COLOR_RED : %fs_draw16x8(0,17)
BRA ++ BRA ++
+ +
LDA.w #$0289|!FS_COLOR_BROWN : %fs_draw16x8(0,17) LDA.w #$02C9|!FS_COLOR_BROWN : %fs_draw16x8(0,17)
++ ++
LDA.l CurrentArrowsSRAM : AND.w #$00FF LDA.l CurrentArrowsSRAM : AND.w #$00FF
JSL.l HUDHex2Digit_Long JSL.l HUDHex2Digit_Long
TYA : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,17) TYA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,17)
TXA : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,18) TXA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,18)
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
AltBufferTable: AltBufferTable:
@@ -759,44 +764,61 @@ RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
LoadFullItemTiles: LoadFullItemTiles:
PHA : PHX LDA.b #$80 : STA.w VMAIN
LDA.w DMAP0 : PHA ; preserve DMA parameters LDA.b #$01 : STA.w DMAP0
LDA.w BBAD0 : PHA ; preserve DMA parameters LDA.b #$18 : STA.w BBAD0
LDA.w A1T0L : PHA ; preserve DMA parameters LDX.w #$3200 : STX.w VMADDL
LDA.w A1T0H : PHA ; preserve DMA parameters LDA.b #FileSelectNewGraphics>>16 : STA.w A1B0
LDA.w A1B0 : PHA ; preserve DMA parameters LDX.w #FileSelectNewGraphics : STX.w A1T0L
LDA.w DAS0L : PHA ; preserve DMA parameters LDX.w #$0C00 : STX.w DAS0L
LDA.w DAS0H : PHA ; preserve DMA parameters LDA.b #$01 : STA.w MDMAEN
;--------------------------------------------------------------------------------
LDA.b #$80 : STA.w VMAIN ; write read increment on $2119
LDA.b #$01 : STA.w DMAP0 ; set DMA transfer direction A -> B, bus A auto increment, double-byte mode
LDA.b #$18 : STA.w BBAD0 ; set bus B destination to VRAM register
LDA.b #$00 : STA.w VMADDL ; write VRAM destination address
LDA.b #$30 : STA.w VMADDH ; write VRAM destination address
LDA.b #$31 : STA.w A1B0 ; set bus A source bank
LDA.b #FileSelectNewGraphics : STA.w A1T0L ; set bus A source address to ROM
LDA.b #FileSelectNewGraphics>>8 : STA.w A1T0H ; set bus A source address to ROM
LDA.w INIDISP : PHA : LDA.b #$80 : STA.w INIDISP ; save screen state & turn screen off
STZ.w DAS0L : LDA.b #$10 : STA.w DAS0H ; set transfer size to 0x1000
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
PLA : STA.w INIDISP ; put screen back however it was before
;--------------------------------------------------------------------------------
PLA : STA.w DAS0H ; restore DMA parameters
PLA : STA.w DAS0L ; restore DMA parameters
PLA : STA.w A1B0 ; restore DMA parameters
PLA : STA.w A1T0H ; restore DMA parameters
PLA : STA.w A1T0L ; restore DMA parameters
PLA : STA.w BBAD0 ; restore DMA parameters
PLA : STA.w DMAP0 ; restore DMA parameters
PLX : PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; z colon @
; length $340
; target vram $6C00
; NewFont+$400
LoadLowerCaseLettersSymbols:
LDA.b #$80 : STA.w VMAIN
LDA.b #$01 : STA.w DMAP0
LDA.b #$18 : STA.w BBAD0
; Lower case letters
LDA.b #NewFont>>16 : STA.w A1B0
LDX.w #NewFont+$400 : STX.w A1T0L
LDX.w #$0400 : STX.w DAS0L
LDX.w #$2D00 : STX.w VMADDL
LDA.b #$01 : STA.w MDMAEN
; : @ #
LDA.b #NewFont>>16 : STA.w A1B0
LDX.w #NewFont+$A80 : STX.w A1T0L
LDA.b #NewFont>>16 : STA.w A1B1
LDX.w #NewFont+$B80 : STX.w A1T1L
LDX.w #$0030 : STX.w DAS0L : STX.w DAS1L
LDX.w #$2E50 : STX.w VMADDL
LDA.b #$01 : STA.w MDMAEN
LDX.w #$2ED0 : STX.w VMADDL
LDA.b #$02 : STA.w MDMAEN
RTL
;--------------------------------------------------------------------------------
LoadFileSelectVanillaItems:
REP #$10
LDA.b #$80 : STA.w VMAIN
LDA.b #$01 : STA.w DMAP0
LDA.b #$18 : STA.w BBAD0
; Lower case letters
LDA.b #DecompBuffer2>>16 : STA.w A1B0
LDX.w #DecompBuffer2 : STX.w A1T0L
LDX.w #$0600 : STX.w DAS0L
LDX.w #$2F00 : STX.w VMADDL
LDA.b #$01 : STA.w MDMAEN
SEP #$10
RTL
;--------------------------------------------------------------------------------
SetFileSelectPalette: SetFileSelectPalette:
LDA.b GameMode : CMP.b #$04 : BNE + LDA.b GameMode : CMP.b #$04 : BNE +
; load the vanilla file select screen BG3 palette for naming screen ; load the vanilla file select screen BG3 palette for naming screen
@@ -840,7 +862,7 @@ DrawPlayerFile_credits:
LDA.l EquipmentSRAM+$2C : AND.w #$00FF : LSR #3 : STA.b Scrap02 LDA.l EquipmentSRAM+$2C : AND.w #$00FF : LSR #3 : STA.b Scrap02
%fs_LDY_screenpos(0,20) %fs_LDY_screenpos(0,20)
LDA.w #$028F|!FS_COLOR_RED LDA.w #$02CF|!FS_COLOR_RED
LDX.w #$000A LDX.w #$000A
.nextHeart .nextHeart

View File

@@ -4,10 +4,10 @@
; Written over and used by OnEnterWater hook. ; Written over and used by OnEnterWater hook.
UnequipCapeQuiet: UnequipCapeQuiet:
LDA.b #$20 : STA.w PoofTimer LDA.b #$20 : STA.w PoofTimer
STZ.w NoDamage STZ.w NoDamage
STZ.b CapeOn STZ.b CapeOn
STZ.w LinkZap STZ.w LinkZap
RTL RTL
protectff: protectff:
@@ -43,7 +43,7 @@ protectff:
BMI .special_overworld BMI .special_overworld
AND.b #$3F AND.b #$3F
CMP.l $02A4E3,X CMP.l $82A4E3,X
BEQ ++ BEQ ++
.protect .protect

View File

@@ -5,9 +5,6 @@ SpawnHauntedGroveItem:
LDA.b OverworldIndex : CMP.b #$2A : BEQ + : RTL : + ; Skip if not the haunted grove LDA.b OverworldIndex : CMP.b #$2A : BEQ + : RTL : + ; Skip if not the haunted grove
LDA.b IndoorsFlag : BEQ + : RTL : + ; Skip if indoors LDA.b IndoorsFlag : BEQ + : RTL : + ; Skip if indoors
%GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues)
JSL.l PrepDynamicTile
LDA.b #$EB LDA.b #$EB
STA.l MiniGameTime STA.l MiniGameTime
JSL Sprite_SpawnDynamically JSL Sprite_SpawnDynamically

View File

@@ -2,7 +2,7 @@
; Frame Hook ; Frame Hook
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
FrameHookAction: FrameHookAction:
JSL $0080B5 ; Module_MainRouting JSL $8080B5 ; Module_MainRouting
JSL CheckMusicLoadRequest JSL CheckMusicLoadRequest
PHP : REP #$30 : PHA PHP : REP #$30 : PHA
SEP #$20 SEP #$20
@@ -35,7 +35,27 @@ PostNMIHookAction:
.return .return
STZ.w NMIAux ; zero bank byte of NMI hook pointer STZ.w NMIAux ; zero bank byte of NMI hook pointer
+ +
JSR.w TransferItemGFX
LDA.b INIDISPQ : STA.w INIDISP ; thing we wrote over, turn screen back on LDA.b INIDISPQ : STA.w INIDISP ; thing we wrote over, turn screen back on
JML.l PostNMIHookReturn JML.l PostNMIHookReturn
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
TransferItemGFX:
; Only used for shops now but could be used for anything. We should look at how door rando does this
; and try to unify one approach.
REP #$30
LDX.w ItemQueuePtr : BEQ .done
-
LDA.w ItemGFXQueue,X : STA.w ItemGFXPtr
LDA.w ItemTargetQueue,X : STA.w ItemGFXTarget
PHX
JSL.l TransferItemToVRAM
REP #$10
PLX
DEX #2
BPL -
STZ.w ItemQueuePtr
.done
SEP #$30
RTS

View File

@@ -70,7 +70,7 @@ GetAgahnimLightning:
;1 = Forbid ;1 = Forbid
AllowJoypadInput: AllowJoypadInput:
LDA.l PermitSQFromBosses : BEQ .fullCheck LDA.l PermitSQFromBosses : BEQ .fullCheck
LDA.w ItemsTaken : AND.b #$80 : BEQ .fullCheck LDA.w RoomItemsTaken : AND.b #$80 : BEQ .fullCheck
LDA.w MedallionFlag : ORA.w CutsceneFlag ; we have heart container, do short check LDA.w MedallionFlag : ORA.w CutsceneFlag ; we have heart container, do short check
RTL RTL
.fullCheck .fullCheck

View File

@@ -81,7 +81,7 @@ GetItemDamageValue:
CPX.b #$3d : BEQ .hookshot CPX.b #$3d : BEQ .hookshot
.normal .normal
LDA.l $0db8f1,x ;what we wrote over LDA.l $8DB8F1,x ;what we wrote over
RTL RTL
.boomerang .boomerang
LDA.l StunItemAction : AND.b #$01 : BNE .normal LDA.l StunItemAction : AND.b #$01 : BNE .normal

View File

@@ -69,110 +69,88 @@ RTL
; DMAAlphabetTilemap: ; DMAAlphabetTilemap:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DMAAlphabetTilemap: DMAAlphabetTilemap:
PHA : PHX PHA : PHX
LDA.w DMAP0 : PHA ; preserve DMA parameters REP #$10
LDA.w BBAD0 : PHA ; preserve DMA parameters LDA.b #$01 : STA.w DMAP0
LDA.w A1T0L : PHA ; preserve DMA parameters LDA.b #$80 : STA.w VMAIN
LDA.w A1T0H : PHA ; preserve DMA parameters LDA.b #$18 : STA.w BBAD0
LDA.w A1B0 : PHA ; preserve DMA parameters LDX.w #$6060 : STX.w VMADDL
LDA.w DAS0L : PHA ; preserve DMA parameters LDA.b #BigRAM>>16 : STA.w A1B0
LDA.w DAS0H : PHA ; preserve DMA parameters LDX.w #BigRAM : STX.w A1T0L
;-------------------------------------------------------------------------------- LDX.w #$0080 : STX.w DAS0L
LDA.b #$01 : STA.w DMAP0 ; set DMA transfer direction A -> B, bus A auto increment, double-byte mode LDA.b #$01 : STA.w MDMAEN
LDA.b #$80 : STA.w VMAIN ; write read increment on $2119 SEP #$10
LDA.b #$18 : STA.w BBAD0 ; set bus B destination to VRAM register PLX : PLA
LDA.b #$60 : STA.w VMADDL ; write VRAM destination address
STA.w VMADDH ; write VRAM destination address
LDA.b #BigRAM : STA.w A1T0L ; set bus A source address to WRAM
LDA.b #BigRAM>>8 : STA.w A1T0H ; set bus A source address to WRAM
LDA.b #BigRAM>>16 : STA.w A1B0 ; set bus A source bank
LDA.b #$80 : STA.w DAS0L : STZ.w DAS0H ; set transfer size to 0x40
LDA.w INIDISP : PHA : LDA.b #$80 : STA.w INIDISP ; save screen state & turn screen off
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
PLA : STA.w INIDISP ; put screen back however it was before
;--------------------------------------------------------------------------------
PLA : STA.w DAS0H ; restore DMA parameters
PLA : STA.w DAS0L ; restore DMA parameters
PLA : STA.w A1B0 ; restore DMA parameters
PLA : STA.w A1T0H ; restore DMA parameters
PLA : STA.w A1T0L ; restore DMA parameters
PLA : STA.w BBAD0 ; restore DMA parameters
PLA : STA.w DMAP0 ; restore DMA parameters
PLX : PLA
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
HashAlphabetTilesWithBlank: HashAlphabetTilesWithBlank:
;BLANK ;BLANK
dw #$0186|!FS_COLOR_BW, #$0186|!FS_COLOR_BW, #$0196|!FS_COLOR_BW, #$0196|!FS_COLOR_BW dw #$0188, #$0188, #$0188, #$0188
HashAlphabetTiles: HashAlphabetTiles:
;BOW ;BOW
dw #$0201|!FS_COLOR_YELLOW, #$0202|!FS_COLOR_YELLOW, #$0211|!FS_COLOR_YELLOW, #$0212|!FS_COLOR_YELLOW dw #$0241|!FS_COLOR_YELLOW, #$0242|!FS_COLOR_YELLOW, #$0251|!FS_COLOR_YELLOW, #$0252|!FS_COLOR_YELLOW
;BOOM ;BOOM
dw #$0205|!FS_COLOR_BLUE, #$0206|!FS_COLOR_BLUE, #$0200|!FS_COLOR_BW, #$0216|!FS_COLOR_BLUE dw #$0245|!FS_COLOR_BLUE, #$0246|!FS_COLOR_BLUE, #$0240|!FS_COLOR_BW, #$0256|!FS_COLOR_BLUE
;HOOK ;HOOK
dw #$0200|!FS_COLOR_RED, #$0215|!FS_COLOR_RED, #$0230|!FS_COLOR_RED, #$0200|!FS_COLOR_BW dw #$0240|!FS_COLOR_RED, #$0255|!FS_COLOR_RED, #$0270|!FS_COLOR_RED, #$0240|!FS_COLOR_BW
;BOMB ;BOMB
dw #$020C|!FS_COLOR_BLUE, #$020D|!FS_COLOR_BLUE, #$021C|!FS_COLOR_BLUE, #$021C|!FS_COLOR_BLUE|!FS_HFLIP dw #$024C|!FS_COLOR_BLUE, #$024D|!FS_COLOR_BLUE, #$025C|!FS_COLOR_BLUE, #$025C|!FS_COLOR_BLUE|!FS_HFLIP
;SHROOM ;SHROOM
dw #$0262|!FS_COLOR_RED, #$0263|!FS_COLOR_RED, #$0272|!FS_COLOR_RED, #$0273|!FS_COLOR_RED dw #$02A2|!FS_COLOR_RED, #$02A3|!FS_COLOR_RED, #$02B2|!FS_COLOR_RED, #$02B3|!FS_COLOR_RED
;POWDER ;POWDER
dw #$020A|!FS_COLOR_BROWN, #$020B|!FS_COLOR_BROWN, #$021A|!FS_COLOR_BROWN, #$021B|!FS_COLOR_BROWN dw #$024A|!FS_COLOR_BROWN, #$024B|!FS_COLOR_BROWN, #$025A|!FS_COLOR_BROWN, #$025B|!FS_COLOR_BROWN
;ROD ;ROD
dw #$0220|!FS_COLOR_BLUE, #$0221|!FS_COLOR_BLUE, #$0230|!FS_COLOR_BLUE, #$0231|!FS_COLOR_BLUE dw #$0260|!FS_COLOR_BLUE, #$0261|!FS_COLOR_BLUE, #$0270|!FS_COLOR_BLUE, #$0271|!FS_COLOR_BLUE
;PENDANT ;PENDANT
dw #$0285|!FS_COLOR_GREEN, #$0286|!FS_COLOR_GREEN, #$0295|!FS_COLOR_GREEN, #$0296|!FS_COLOR_GREEN dw #$02C5|!FS_COLOR_GREEN, #$02C6|!FS_COLOR_GREEN, #$02D5|!FS_COLOR_GREEN, #$02D6|!FS_COLOR_GREEN
;BOMBOS ;BOMBOS
dw #$0207|!FS_COLOR_YELLOW, #$0217|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0217|!FS_COLOR_YELLOW, #$0207|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP dw #$0247|!FS_COLOR_YELLOW, #$0257|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0257|!FS_COLOR_YELLOW, #$0247|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP
;ETHER ;ETHER
dw #$0208|!FS_COLOR_YELLOW, #$0218|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0218|!FS_COLOR_YELLOW, #$0208|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP dw #$0248|!FS_COLOR_YELLOW, #$0258|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0258|!FS_COLOR_YELLOW, #$0248|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP
;QUAKE ;QUAKE
dw #$0209|!FS_COLOR_YELLOW, #$0219|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0219|!FS_COLOR_YELLOW, #$0209|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP dw #$0249|!FS_COLOR_YELLOW, #$0259|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0259|!FS_COLOR_YELLOW, #$0249|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP
;LAMP ;LAMP
dw #$022C|!FS_COLOR_RED, #$022C|!FS_COLOR_RED|!FS_HFLIP, #$023C|!FS_COLOR_RED, #$023D|!FS_COLOR_RED dw #$026C|!FS_COLOR_RED, #$026C|!FS_COLOR_RED|!FS_HFLIP, #$027C|!FS_COLOR_RED, #$027D|!FS_COLOR_RED
;HAMMER ;HAMMER
dw #$0222|!FS_COLOR_BROWN, #$0223|!FS_COLOR_BROWN, #$0232|!FS_COLOR_BROWN, #$0233|!FS_COLOR_BROWN dw #$0262|!FS_COLOR_BROWN, #$0263|!FS_COLOR_BROWN, #$0272|!FS_COLOR_BROWN, #$0273|!FS_COLOR_BROWN
;SHOVEL ;SHOVEL
dw #$0224|!FS_COLOR_BROWN, #$0225|!FS_COLOR_BROWN, #$0234|!FS_COLOR_BROWN, #$0235|!FS_COLOR_BROWN dw #$0264|!FS_COLOR_BROWN, #$0265|!FS_COLOR_BROWN, #$0274|!FS_COLOR_BROWN, #$0275|!FS_COLOR_BROWN
;FLUTE ;FLUTE
dw #$0226|!FS_COLOR_BLUE, #$0227|!FS_COLOR_BLUE, #$0236|!FS_COLOR_BLUE, #$0237|!FS_COLOR_BLUE dw #$0266|!FS_COLOR_BLUE, #$0267|!FS_COLOR_BLUE, #$0276|!FS_COLOR_BLUE, #$0277|!FS_COLOR_BLUE
;NET ;NET
dw #$0228|!FS_COLOR_YELLOW, #$0229|!FS_COLOR_YELLOW, #$0238|!FS_COLOR_YELLOW, #$0239|!FS_COLOR_YELLOW dw #$0268|!FS_COLOR_YELLOW, #$0269|!FS_COLOR_YELLOW, #$0278|!FS_COLOR_YELLOW, #$0279|!FS_COLOR_YELLOW
;BOOK ;BOOK
dw #$022A|!FS_COLOR_GREEN, #$022B|!FS_COLOR_GREEN, #$023A|!FS_COLOR_GREEN, #$023B|!FS_COLOR_GREEN dw #$026A|!FS_COLOR_GREEN, #$026B|!FS_COLOR_GREEN, #$027A|!FS_COLOR_GREEN, #$027B|!FS_COLOR_GREEN
;BOTTLE ;BOTTLE
dw #$0240|!FS_COLOR_BW, #$0241|!FS_COLOR_BW, #$0250|!FS_COLOR_BW, #$0251|!FS_COLOR_BW dw #$0280|!FS_COLOR_BW, #$0281|!FS_COLOR_BW, #$0290|!FS_COLOR_BW, #$0291|!FS_COLOR_BW
;POTION ;POTION
dw #$0242|!FS_COLOR_GREEN, #$0242|!FS_COLOR_GREEN|!FS_HFLIP, #$0252|!FS_COLOR_GREEN, #$0253|!FS_COLOR_GREEN dw #$0282|!FS_COLOR_GREEN, #$0282|!FS_COLOR_GREEN|!FS_HFLIP, #$0292|!FS_COLOR_GREEN, #$0293|!FS_COLOR_GREEN
;CANE ;CANE
dw #$021D|!FS_COLOR_RED, #$021E|!FS_COLOR_RED, #$022D|!FS_COLOR_RED, #$022E|!FS_COLOR_RED dw #$025D|!FS_COLOR_RED, #$025E|!FS_COLOR_RED, #$026D|!FS_COLOR_RED, #$026E|!FS_COLOR_RED
;CAPE ;CAPE
dw #$0248|!FS_COLOR_RED, #$0249|!FS_COLOR_RED, #$0258|!FS_COLOR_RED, #$0259|!FS_COLOR_RED dw #$0288|!FS_COLOR_RED, #$0289|!FS_COLOR_RED, #$0298|!FS_COLOR_RED, #$0299|!FS_COLOR_RED
;MIRROR ;MIRROR
dw #$024A|!FS_COLOR_BLUE, #$024B|!FS_COLOR_BLUE, #$025A|!FS_COLOR_BLUE, #$025B|!FS_COLOR_BLUE dw #$028A|!FS_COLOR_BLUE, #$028B|!FS_COLOR_BLUE, #$029A|!FS_COLOR_BLUE, #$029B|!FS_COLOR_BLUE
;BOOTS ;BOOTS
dw #$024C|!FS_COLOR_BOOTS, #$024D|!FS_COLOR_BOOTS, #$025C|!FS_COLOR_BOOTS, #$025D|!FS_COLOR_BOOTS dw #$028C|!FS_COLOR_BOOTS, #$028D|!FS_COLOR_BOOTS, #$029C|!FS_COLOR_BOOTS, #$029D|!FS_COLOR_BOOTS
;GLOVES ;GLOVES
dw #$024E|!FS_COLOR_BROWN, #$024F|!FS_COLOR_BROWN, #$025E|!FS_COLOR_BROWN, #$025F|!FS_COLOR_BROWN dw #$028E|!FS_COLOR_BROWN, #$028F|!FS_COLOR_BROWN, #$029E|!FS_COLOR_BROWN, #$029F|!FS_COLOR_BROWN
;FLIPPERS ;FLIPPERS
dw #$020E|!FS_COLOR_BLUE, #$020F|!FS_COLOR_BLUE, #$021F|!FS_COLOR_BLUE|!FS_HFLIP, #$021F|!FS_COLOR_BLUE dw #$024E|!FS_COLOR_BLUE, #$024F|!FS_COLOR_BLUE, #$025F|!FS_COLOR_BLUE|!FS_HFLIP, #$025F|!FS_COLOR_BLUE
;PEARL ;PEARL
dw #$0264|!FS_COLOR_RED, #$0265|!FS_COLOR_RED, #$0274|!FS_COLOR_RED, #$0275|!FS_COLOR_RED dw #$02A4|!FS_COLOR_RED, #$02A5|!FS_COLOR_RED, #$02B4|!FS_COLOR_RED, #$02B5|!FS_COLOR_RED
;SHIELD ;SHIELD
dw #$026D|!FS_COLOR_YELLOW, #$026E|!FS_COLOR_YELLOW, #$027D|!FS_COLOR_YELLOW, #$027E|!FS_COLOR_YELLOW dw #$02AD|!FS_COLOR_YELLOW, #$02AE|!FS_COLOR_YELLOW, #$02BD|!FS_COLOR_YELLOW, #$02BE|!FS_COLOR_YELLOW
;TUNIC ;TUNIC
dw #$026F|!FS_COLOR_GREEN, #$026F|!FS_COLOR_GREEN|!FS_HFLIP, #$027F|!FS_COLOR_GREEN, #$027F|!FS_COLOR_GREEN|!FS_HFLIP dw #$02AF|!FS_COLOR_GREEN, #$02AF|!FS_COLOR_GREEN|!FS_HFLIP, #$02BF|!FS_COLOR_GREEN, #$02BF|!FS_COLOR_GREEN|!FS_HFLIP
;HEART ;HEART
dw #$0281|!FS_COLOR_RED, #$0281|!FS_COLOR_RED|!FS_HFLIP, #$0291|!FS_COLOR_RED, #$0291|!FS_COLOR_RED|!FS_HFLIP dw #$02C1|!FS_COLOR_RED, #$02C1|!FS_COLOR_RED|!FS_HFLIP, #$02D1|!FS_COLOR_RED, #$02D1|!FS_COLOR_RED|!FS_HFLIP
;MAP ;MAP
dw #$0282|!FS_COLOR_YELLOW, #$0283|!FS_COLOR_YELLOW, #$0292|!FS_COLOR_YELLOW, #$0293|!FS_COLOR_YELLOW dw #$02C2|!FS_COLOR_YELLOW, #$02C3|!FS_COLOR_YELLOW, #$02D2|!FS_COLOR_YELLOW, #$02D3|!FS_COLOR_YELLOW
;COMPASS ;COMPASS
dw #$0284|!FS_COLOR_RED, #$0284|!FS_COLOR_RED|!FS_HFLIP, #$0294|!FS_COLOR_RED, #$0294|!FS_COLOR_RED|!FS_HFLIP dw #$02C4|!FS_COLOR_RED, #$02C4|!FS_COLOR_RED|!FS_HFLIP, #$02D4|!FS_COLOR_RED, #$02D4|!FS_COLOR_RED|!FS_HFLIP
;KEY ;KEY
dw #$022F|!FS_COLOR_YELLOW|!FS_HFLIP, #$022F|!FS_COLOR_YELLOW, #$023E|!FS_COLOR_YELLOW, #$023F|!FS_COLOR_YELLOW dw #$026F|!FS_COLOR_YELLOW|!FS_HFLIP, #$026F|!FS_COLOR_YELLOW, #$027E|!FS_COLOR_YELLOW, #$027F|!FS_COLOR_YELLOW
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
FileSelect_PlayerSelectText_Top: FileSelect_PlayerSelectText_Top:
;db $60, $62, $00, $37 ;db $60, $62, $00, $37

View File

@@ -55,76 +55,76 @@
!FSTILE_Y_TOP = $1D82 !FSTILE_Y_TOP = $1D82
!FSTILE_Y_BOTTOM = $1D92 !FSTILE_Y_BOTTOM = $1D92
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $0CDE60 ; <- 65E60 org $8CDE60 ; <- 65E60
FileSelect_CopyFile_Top: FileSelect_CopyFile_Top:
db $62, $A5, $00, $15 db $62, $A5, $00, $15
dw !FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE dw !FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $0CDE7A ; <- 65E7A org $8CDE7A ; <- 65E7A
FileSelect_CopyFile_Bottom: FileSelect_CopyFile_Bottom:
db $62, $C5, $00, $15 db $62, $C5, $00, $15
dw !FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE dw !FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $0CDE94 ; <- 65E94 org $8CDE94 ; <- 65E94
FileSelect_KillFile_Top: FileSelect_KillFile_Top:
db $63, $25, $00, $19 db $63, $25, $00, $19
dw !FSTILE_D_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_T_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_F_TOP, !FSTILE_I_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_D_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_T_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_F_TOP, !FSTILE_I_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_SPACE
org $0CDEB2 ; <- 65EB2 org $8CDEB2 ; <- 65EB2
FileSelect_KillFile_Bottom: FileSelect_KillFile_Bottom:
db $63, $45, $00, $19 db $63, $45, $00, $19
dw !FSTILE_D_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_T_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_F_BOTTOM, !FSTILE_I_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_D_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_T_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_F_BOTTOM, !FSTILE_I_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE
;CopyFile_Header: ;CopyFile_Header:
org $0CE228 ; <- 66228 org $8CE228 ; <- 66228
dw !FSTILE_BRACKET_OPEN_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_C_TOP, !FSTILE_O_TOP, !FSTILE_P_TOP, !FSTILE_Y_TOP, !FSTILE_SPACE, !FSTILE_F_TOP, !FSTILE_I_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_TOP dw !FSTILE_BRACKET_OPEN_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_C_TOP, !FSTILE_O_TOP, !FSTILE_P_TOP, !FSTILE_Y_TOP, !FSTILE_SPACE, !FSTILE_F_TOP, !FSTILE_I_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_TOP
org $0CE24A ; <- 6624A org $8CE24A ; <- 6624A
dw !FSTILE_BRACKET_OPEN_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_C_BOTTOM, !FSTILE_O_BOTTOM, !FSTILE_P_BOTTOM, !FSTILE_Y_BOTTOM, !FSTILE_SPACE, !FSTILE_F_BOTTOM, !FSTILE_I_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_BOTTOM dw !FSTILE_BRACKET_OPEN_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_C_BOTTOM, !FSTILE_O_BOTTOM, !FSTILE_P_BOTTOM, !FSTILE_Y_BOTTOM, !FSTILE_SPACE, !FSTILE_F_BOTTOM, !FSTILE_I_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_BOTTOM
;CopyFile_Which: ;CopyFile_Which:
org $0CE2DB ; <- 662DB org $8CE2DB ; <- 662DB
dw $0D80, $0D61, $0D62, $0D4C, $0D61, $0D86, !FSTILE_SPACE dw $0D80, $0D61, $0D62, $0D4C, $0D61, $0D86, !FSTILE_SPACE
org $0CE2ED ; <- 662ED org $8CE2ED ; <- 662ED
dw $0D90, $0D71, $0D72, $0D5C, $0D71, $0D96, !FSTILE_SPACE dw $0D90, $0D71, $0D72, $0D5C, $0D71, $0D96, !FSTILE_SPACE
;CopyFile_Where: ;CopyFile_Where:
org $0CE39C ; <- 6639C org $8CE39C ; <- 6639C
dw $0D80, $0D61, $0D4E, $0D6B, $0D4E, $0D86, !FSTILE_SPACE dw $0D80, $0D61, $0D4E, $0D6B, $0D4E, $0D86, !FSTILE_SPACE
org $0CE3AE ; <- 663AE org $8CE3AE ; <- 663AE
dw $0D90, $0D71, $0D5E, $0D7B, $0D5E, $0D96, !FSTILE_SPACE dw $0D90, $0D71, $0D5E, $0D7B, $0D5E, $0D96, !FSTILE_SPACE
;CopyFile_Execute: ;CopyFile_Execute:
org $0CD13A ; <- 6513A org $8CD13A ; <- 6513A
dw !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_O_TOP, !FSTILE_SPACE, !FSTILE_P_TOP, !FSTILE_SPACE, !FSTILE_Y_TOP, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_O_TOP, !FSTILE_SPACE, !FSTILE_P_TOP, !FSTILE_SPACE, !FSTILE_Y_TOP, !FSTILE_SPACE, !FSTILE_SPACE
org $0CD150 ; <- 65150 org $8CD150 ; <- 65150
dw !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_O_BOTTOM, !FSTILE_SPACE, !FSTILE_P_BOTTOM, !FSTILE_SPACE, !FSTILE_Y_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_O_BOTTOM, !FSTILE_SPACE, !FSTILE_P_BOTTOM, !FSTILE_SPACE, !FSTILE_Y_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE
;CopyFile_Cancel: ;CopyFile_Cancel:
org $0CE29A ; <- 6629A org $8CE29A ; <- 6629A
dw !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_A_TOP, !FSTILE_SPACE, !FSTILE_N_TOP, !FSTILE_SPACE, !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_A_TOP, !FSTILE_SPACE, !FSTILE_N_TOP, !FSTILE_SPACE, !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
org $0CE2BA ; <- 662BA org $8CE2BA ; <- 662BA
dw !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_A_BOTTOM, !FSTILE_SPACE, !FSTILE_N_BOTTOM, !FSTILE_SPACE, !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_A_BOTTOM, !FSTILE_SPACE, !FSTILE_N_BOTTOM, !FSTILE_SPACE, !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
;KillFile_Header: ;KillFile_Header:
org $0CE002 ; <- 66002 org $8CE002 ; <- 66002
dw !FSTILE_BRACKET_OPEN_TOP, !FSTILE_SPACE, !FSTILE_D_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_T_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_F_TOP, !FSTILE_I_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_TOP, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_BRACKET_OPEN_TOP, !FSTILE_SPACE, !FSTILE_D_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_T_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_F_TOP, !FSTILE_I_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_TOP, !FSTILE_SPACE, !FSTILE_SPACE
org $0CE028 ; <- 66028 org $8CE028 ; <- 66028
dw !FSTILE_BRACKET_OPEN_BOTTOM, !FSTILE_SPACE, !FSTILE_D_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_T_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_F_BOTTOM, !FSTILE_I_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_BRACKET_OPEN_BOTTOM, !FSTILE_SPACE, !FSTILE_D_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_T_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_F_BOTTOM, !FSTILE_I_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE
;KillFile_Which: ;KillFile_Which:
org $0CE04E ; <- 6604E org $8CE04E ; <- 6604E
dw !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
org $0CE084 ; <- 66084 org $8CE084 ; <- 66084
dw !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
;KillFile_Execute: ;KillFile_Execute:
org $0CD328 ; <- 65328 org $8CD328 ; <- 65328
dw !FSTILE_D_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_T_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_D_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_T_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
org $0CD344 ; <- 65344 org $8CD344 ; <- 65344
dw !FSTILE_D_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_T_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_D_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_T_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
;KillFile_Cancel: ;KillFile_Cancel:
org $0CE0BA ; <- 660BA org $8CE0BA ; <- 660BA
dw !FSTILE_C_TOP, !FSTILE_A_TOP, !FSTILE_N_TOP, !FSTILE_C_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_C_TOP, !FSTILE_A_TOP, !FSTILE_N_TOP, !FSTILE_C_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
org $0CE0DA ; <- 660DA org $8CE0DA ; <- 660DA
dw !FSTILE_C_BOTTOM, !FSTILE_A_BOTTOM, !FSTILE_N_BOTTOM, !FSTILE_C_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_C_BOTTOM, !FSTILE_A_BOTTOM, !FSTILE_N_BOTTOM, !FSTILE_C_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE

View File

@@ -3,31 +3,17 @@
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
HeartPieceGet: HeartPieceGet:
PHX : PHY PHX : PHY
LDY.w SpriteItemType, X ; load item value into Y register JSL.l LoadHeartPieceRoomValue
BNE + JSL.l ResolveLootIDLong
; if for any reason the item value is 0 reload it, just in case TAY
JSL.l LoadHeartPieceRoomValue : TAY
+
JSL.l MaybeMarkDigSpotCollected JSL.l MaybeMarkDigSpotCollected
.skipLoad .skipLoad
CPY.b #$26 : BNE .not_heart ; don't add a 1/4 heart if it's not a heart piece
LDA.l HeartPieceQuarter : INC A : AND.b #$03 : STA.l HeartPieceQuarter
.not_heart
JSL.l $8791B3 ; Player_HaltDashAttackLong
STZ.w ItemReceiptMethod ; 0 = Receiving item from an NPC or message STZ.w ItemReceiptMethod ; 0 = Receiving item from an NPC or message
CPY.b #$26 : BNE .notHeart ; don't add a 1/4 heart if it's not a heart piece
LDA.l HeartPieceQuarter : INC A : AND.b #$03 : STA.l HeartPieceQuarter : BNE .unfinished_heart ; add up heart quarters
BRA .giveItem
.notHeart
.giveItem
JSL.l $0791B3 ; Player_HaltDashAttackLong
JSL.l Link_ReceiveItem JSL.l Link_ReceiveItem
CLC ; return false
JMP .done ; finished
.unfinished_heart
SEC ; return true
.done
JSL MaybeUnlockTabletAnimation JSL MaybeUnlockTabletAnimation
PLY : PLX PLY : PLX
@@ -35,42 +21,38 @@ RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
HeartContainerGet: HeartContainerGet:
PHX : PHY PHX : PHY
JSL.l AddInventory_incrementBossSwordLong JSL.l IncrementBossSword
LDY.w SpriteItemType, X ; load item value into Y register LDY.w SpriteID, X : BNE +
BNE +
; if for any reason the item value is 0 reload it, just in case
JSL.l LoadHeartContainerRoomValue : TAY JSL.l LoadHeartContainerRoomValue : TAY
+ +
BRA HeartPieceGet_skipLoad BRA HeartPieceGet_skipLoad
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DrawHeartPieceGFX: DrawHeartPieceGFX:
PHP PHP
JSL.l Sprite_IsOnscreen : BCC .offscreen JSL.l Sprite_IsOnscreen : BCC .offscreen
PHA : PHY
PHA : PHY LDA.l RedrawFlag : BEQ .skipInit ; skip init if already ready
LDA.l RedrawFlag : BEQ .skipInit ; skip init if already ready JSL.l HeartPieceSpritePrep
JSL.l HeartPieceSpritePrep JMP .done ; don't draw on the init frame
JMP .done ; don't draw on the init frame .skipInit
LDA.w SpriteID, X ; Retrieve stored item type
.skipInit .skipLoad
LDA.w SpriteItemType, X ; Retrieve stored item type PHA : PHX
TAX
.skipLoad LDA.l SpriteProperties_standing_width,X : BNE +
PLX
PHA LDA.w SpriteControl, X : ORA.b #$20 : STA.w SpriteControl, X
JSL.l IsNarrowSprite : BCC + BRA .draw
LDA.w SpriteControl, X : ORA.b #$20 : STA.w SpriteControl, X +
+ PLX
PLA .draw
PLA
JSL.l DrawDynamicTile JSL.l DrawDynamicTile
JSL.l Sprite_DrawShadowLong JSL.l Sprite_DrawShadowLong
.done
.done PLY : PLA
PLY : PLA .offscreen
.offscreen PLP
PLP
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DrawHeartContainerGFX: DrawHeartContainerGFX:
@@ -83,37 +65,36 @@ DrawHeartContainerGFX:
BRA DrawHeartPieceGFX_done ; don't draw on the init frame BRA DrawHeartPieceGFX_done ; don't draw on the init frame
.skipInit .skipInit
LDA.w SpriteItemType, X ; Retrieve stored item type LDA.w SpriteID, X ; Retrieve stored item type
BRA DrawHeartPieceGFX_skipLoad BRA DrawHeartPieceGFX_skipLoad
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
HeartContainerSound: HeartContainerSound:
CPY.b #$20 : BEQ + ; Skip for Crystal LDA.w ItemReceiptMethod : CMP.b #$03 : BEQ +
CPY.b #$37 : BEQ + ; Skip for Pendants JSL.l CheckIfBossRoom : BCC + ; Skip if not in a boss room
CPY.b #$38 : BEQ + LDA.b #$2E
CPY.b #$39 : BEQ + SEC
JSL.l CheckIfBossRoom : BCC + ; Skip if not in a boss room RTL
LDA.b #$2E
SEC
RTL
+ +
CLC CLC
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
NormalItemSkipSound: NormalItemSkipSound:
LDA.w AncillaGet, X ; thing we wrote over ; Out: C - skip sounds if set
JSL.l CheckIfBossRoom : BCS .boss_room
CPY.b #$20 : BEQ + ; Skip for Crystal TDC
CPY.b #$37 : BEQ + ; Skip for Pendants CPY #$17 : BEQ .skip
CPY.b #$38 : BEQ + CLC
CPY.b #$39 : BEQ +
PHA
JSL.l CheckIfBossRoom
PLA
RTL RTL
+ .boss_room
CLC LDA.w ItemReceiptMethod : CMP.b #$03 : BEQ +
.skip
SEC
RTL
+
LDA.b #$20
.dont_skip
CLC
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
HeartPieceSpritePrep: HeartPieceSpritePrep:
@@ -125,9 +106,10 @@ HeartPieceSpritePrep:
LDA.b LinkState : CMP.b #$14 : BEQ .skip ; skip if we're mid-mirror LDA.b LinkState : CMP.b #$14 : BEQ .skip ; skip if we're mid-mirror
LDA.b #$00 : STA.l RedrawFlag LDA.b #$00 : STA.l RedrawFlag
JSL.l LoadHeartPieceRoomValue ; load item type JSL.l LoadHeartPieceRoomValue
STA.w SpriteItemType, X ; Store item type JSL.l ResolveLootIDLong
JSL.l PrepDynamicTile STA.w SpriteID, X
JSL.l PrepDynamicTile_loot_resolved
.skip .skip
PLA PLA
@@ -138,8 +120,9 @@ HeartContainerSpritePrep:
LDA.b #$00 : STA.l RedrawFlag LDA.b #$00 : STA.l RedrawFlag
JSL.l LoadHeartContainerRoomValue ; load item type JSL.l LoadHeartContainerRoomValue ; load item type
STA.w SpriteItemType, X ; Store item type JSL.l ResolveLootIDLong
JSL.l PrepDynamicTile STA.w SpriteID, X
JSL.l PrepDynamicTile_loot_resolved
PLA PLA
RTL RTL
@@ -155,7 +138,7 @@ LoadHeartPieceRoomValue:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
HPItemReset: HPItemReset:
JSL $09AD58 ; GiveRupeeGift - thing we wrote over JSL $89AD58 ; GiveRupeeGift - thing we wrote over
PHA : LDA.b #$01 : STA.l RedrawFlag : PLA PHA : LDA.b #$01 : STA.l RedrawFlag : PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -378,9 +361,9 @@ RTL
;#13 - Ganon's Tower - Agahnim II ;#13 - Ganon's Tower - Agahnim II
;#0 - Pyramid of Power - Ganon ;#0 - Pyramid of Power - Ganon
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;JSL $06DD40 ; DashKey_Draw ;JSL $86DD40 ; DashKey_Draw
;JSL $06DBF8 ; Sprite_PrepAndDrawSingleLargeLong ;JSL $86DBF8 ; Sprite_PrepAndDrawSingleLargeLong
;JSL $06DC00 ; Sprite_PrepAndDrawSingleSmallLong ; draw first cell correctly ;JSL $86DC00 ; Sprite_PrepAndDrawSingleSmallLong ; draw first cell correctly
;JSL $00D51B ; GetAnimatedSpriteTile ;JSL $80D51B ; GetAnimatedSpriteTile
;JSL $00D52D ; GetAnimatedSpriteTile.variable ;JSL $80D52D ; GetAnimatedSpriteTile.variable
;================================================================================ ;================================================================================

2366
hooks.asm

File diff suppressed because it is too large Load Diff

86
hud.asm
View File

@@ -1,47 +1,47 @@
;org $0DFE97 ; <- 6FE97 - headsup_display.asm:1009 (.hud_tilemap) ;org $8DFE97 ; <- 6FE97 - headsup_display.asm:1009 (.hud_tilemap)
; DO NOT EXCEED 0x150 ; DO NOT EXCEED 0x150
HUD_TileMap: HUD_TileMap:
dw $207F, $207F, $2850, $A856 dw $207F, $207F, $2850, $A856
dw $2852, $285B, $285B, $285C dw $2852, $285B, $285B, $285C
;dw $207F, $3CA8, $207F, $207F, $207F ;dw $207F, $3CA8, $207F, $207F, $207F
dw $207F, $3C02, $3C03, $207F, $207F ; normal mode dw $207F, $3C02, $3C03, $207F, $207F ; normal mode
;dw $3C02, $3C03, $207F, $207F, $207F ; rupee arrows ;dw $3C02, $3C03, $207F, $207F, $207F ; rupee arrows
dw $2C88, $2C89, $207F, $20A7 dw $2C88, $2C89, $207F, $20A7
dw $20A9, $207F, $2871 ;, $207F dw $20A9, $207F, $2871 ;, $207F
dw $207F, $207F, $288B, $288F dw $207F, $207F, $288B, $288F
dw $24AB, $24AC, $688F, $688B dw $24AB, $24AC, $688F, $688B
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $2854, $2871 dw $207F, $207F, $2854, $2871
dw $2858, $207F, $207F, $285D dw $2858, $207F, $207F, $285D
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $2854, $304E dw $207F, $207F, $2854, $304E
dw $2858, $207F, $207F, $285D dw $2858, $207F, $207F, $285D
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $2854, $305E dw $207F, $207F, $2854, $305E
dw $2859, $A85B, $A85B, $A85C dw $2859, $A85B, $A85B, $A85C
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $2854, $305E dw $207F, $207F, $2854, $305E
dw $6854, $207F, $207F, $207F dw $6854, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $207F, $207F dw $207F, $207F, $207F, $207F
dw $207F, $207F, $A850, $2856 dw $207F, $207F, $A850, $2856
dw $E850 dw $E850

View File

@@ -53,7 +53,10 @@ Init_Primary:
LDA.b #$10 : STA.b PlayerSpriteBank ; set default player sprite bank LDA.b #$10 : STA.b PlayerSpriteBank ; set default player sprite bank
LDA.b #$81 : STA.w NMITIMEN ; thing we wrote over, turn on NMI & gamepad LDA.b #$81 : STA.w NMITIMEN ; thing we wrote over, turn on NMI & gamepad
RTL
JML ReturnFromInit
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; Init_PostRAMClear ; Init_PostRAMClear
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -64,6 +67,35 @@ Init_PostRAMClear:
JSL MSUInit JSL MSUInit
JSL InitRNGPointerTable JSL InitRNGPointerTable
JSL InitDungeonCounts JSL DecompressAllItemGraphics
JSR InitDungeonCounts
JML $00D463 ; The original target of the jump table that we hijacked JML $80D463 ; The original target of the jump table that we hijacked
;===================================================================================================
InitDungeonCounts:
PHB
LDX.b #$0F
-
LDA.l CompassTotalsROM, X : STA.l CompassTotalsWRAM, X
DEX
BPL -
LDX.b #$0F
-
LDA.l ChestKeys, X : STA.l MapTotalsWRAM, X
DEX
BPL -
LDA.b #$7E
PHA : PLB
REP #$30
LDA.l TotalItemCount
JSL.l HUDHex4Digit_Long
SEP #$20
LDA.b Scrap04 : TAX : STX.w TotalItemCountTiles+$00
LDA.b Scrap05 : TAX : STX.w TotalItemCountTiles+$02
LDA.b Scrap06 : TAX : STX.w TotalItemCountTiles+$04
LDA.b Scrap07 : TAX : STX.w TotalItemCountTiles+$06
SEP #$10
PLB
RTS

View File

@@ -14,30 +14,30 @@
fillword $0000 ; Zero out the table fillword $0000 ; Zero out the table
fill $500 ; fill $500 ;
org $30B000 ; PC 0x183000 org $B0B000 ; PC 0x183000
InitSRAMTable: InitSRAMTable:
InitRoomDataWRAM: InitRoomDataWRAM:
org $30B060 ; PC 0x183060 org $B0B060 ; PC 0x183060
InitATAltarRoom: dw $0000 ; aga curtains InitATAltarRoom: dw $0000 ; aga curtains
org $30B092 ; PC 0x183092 org $B0B092 ; PC 0x183092
InitSWBackEntryRoom: dw $0000 ; skull woods curtains InitSWBackEntryRoom: dw $0000 ; skull woods curtains
org $30B20C org $B0B20C
dw $F000, $F000 ; Pre-open kak bomb hut & brewery dw $F000, $F000 ; Pre-open kak bomb hut & brewery
org $30B280 ; PC 0x183280 - 0x1832FF org $B0B280 ; PC 0x183280 - 0x1832FF
InitOverworldEvents: InitOverworldEvents:
org $30B282 ; PC 0x183282 - Lumberjacks org $B0B282 ; PC 0x183282 - Lumberjacks
InitLumberjackOW: db $00 InitLumberjackOW: db $00
org $30B29B ; PC 0x18329B - Open castle gate org $B0B29B ; PC 0x18329B - Open castle gate
InitHyruleCastleOW: db $20 InitHyruleCastleOW: db $20
org $30B2DB ; PC 0x1832DB - Pyramid hole org $B0B2DB ; PC 0x1832DB - Pyramid hole
InitPyramidOW: db $00 InitPyramidOW: db $00
org $30B2C3 ; PC 0x1832C3 - GT org $B0B2C3 ; PC 0x1832C3 - GT
InitDDMWestOW: db $00 InitDDMWestOW: db $00
org $30B340 ; PC 0x183340 org $B0B340 ; PC 0x183340
StartingEquipment: StartingEquipment:
StartingBow: skip 1 ; PC 0x183340 StartingBow: skip 1 ; PC 0x183340
StartingBoomerang: skip 1 ; PC 0x183341 StartingBoomerang: skip 1 ; PC 0x183341
@@ -129,13 +129,13 @@ InitDroppedFollowerIndoors: skip 1 ; PC 0x1833D1
InitDroppedFollowerLayer: skip 1 ; PC 0x1833D2 InitDroppedFollowerLayer: skip 1 ; PC 0x1833D2
InitFollowerDropped: skip 1 ; PC 0x1833D3 InitFollowerDropped: skip 1 ; PC 0x1833D3
org $30B3D9 ; PC 0x1833D9 - 0x1833F0 org $B0B3D9 ; PC 0x1833D9 - 0x1833F0
StaticFileName: ; The validity value ($55AA) must be written manually on SRAM init at $7003E1 StaticFileName: ; The validity value ($55AA) must be written manually on SRAM init at $7003E1
dw $0181, $0068, $006E, $018C dw $0181, $0068, $006E, $018C
dw $0166, $0064, $0068, $018C dw $0166, $0064, $0068, $018C
dw $0165, $0068, $006D, $018C dw $0165, $0068, $006D, $018C
org $30B401 ; PC 0x183401 org $B0B401 ; PC 0x183401
InitDeathCounter: InitDeathCounter:
dw $FFFF dw $FFFF
@@ -147,29 +147,29 @@ dw $FFFF
; excluding ~28 bytes (File name, validity value, and checksum.) ; excluding ~28 bytes (File name, validity value, and checksum.)
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $30B414 ; PC 0x183414-0x183416 org $B0B414 ; PC 0x183414-0x183416
InitMapOverlay: dw $0000 InitMapOverlay: dw $0000
org $30B417 ; PC 0x183417 org $B0B417 ; PC 0x183417
InitHighestSword: db $00 InitHighestSword: db $00
org $30B414 ; PC 0x183418-0x183419 org $B0B414 ; PC 0x183418-0x183419
InitGoalCounter: dw $0000 InitGoalCounter: dw $0000
org $30B422 ; PC 0x183422 org $B0B422 ; PC 0x183422
InitHighestShield: db $00 InitHighestShield: db $00
org $30B428 ; PC 0x183428 org $B0B428 ; PC 0x183428
InitMapsCompasses: db $00 InitMapsCompasses: db $00
org $30B429 ; PC 0x183429 org $B0B429 ; PC 0x183429
InitPendantCounter: db $00 InitPendantCounter: db $00
org $30B454 ; PC 0x183454-0x183457 org $B0B454 ; PC 0x183454-0x183457
InitChallengeTimer: dw $0000, $0000 InitChallengeTimer: dw $0000, $0000
org $30B46E ; PC 0x18346E org $B0B46E ; PC 0x18346E
InitHighestMail: db $00 InitHighestMail: db $00
org $30B471 ; PC 0x183471 org $B0B471 ; PC 0x183471
InitCrystalCounter: db $00 InitCrystalCounter: db $00

View File

@@ -1,28 +1,6 @@
;================================================================================ ;================================================================================
; Inventory Updates ; Inventory Updates
;================================================================================ ;================================================================================
; InventoryTracking
; ------oq brmpnskf
; b = blue boomerang | -
; r = red boomerang | -
; m = mushroom current | -
; p = magic powder | -
; n = mushroom past | -
; s = shovel | -
; k = fake flute | o = any bomb acquired from item location
; f = working flute | q = quickswap locked
;--------------------------------------------------------------------------------
; BowTracking
; Item Tracking Slot #2
; bsp-----
; b = bow
; s = silver arrow bow
; p = 2nd progressive bow
; -
; -
; -
; -
; -
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; ProcessMenuButtons: ; ProcessMenuButtons:
; out: Carry - 0 = No Button, 1 = Yes Button ; out: Carry - 0 = No Button, 1 = Yes Button
@@ -129,10 +107,6 @@ ProcessBottleMenu:
.no_bottles .no_bottles
LDA.b #$00 ; pretend like the controller state was 0 from the overridden load LDA.b #$00 ; pretend like the controller state was 0 from the overridden load
RTL RTL
; .y_not_pressed
; LDA.b Joy1A_New : AND.b #$0C ; thing we wrote over - load controller state
;RTL
;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;OpenBottleMenu: ;OpenBottleMenu:
@@ -162,522 +136,201 @@ RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; AddInventory: ; AddInventory:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
macro TopHalf(address)
LDA.l <address> : !ADD #$10 : STA.l <address>
endmacro
macro BottomHalf(address)
PHA : PHX
LDA.l <address> : INC : AND.b #$0F : TAX
LDA.l <address> : AND.b #$F0 : STA.l <address>
TXA : ORA.l <address> : STA.l <address>
PLX : PLA
endmacro
;--------------------------------------------------------------------------------
FullInventoryExternal:
PHA : PHX : PHP : JMP AddInventory_incrementCounts
;--------------------------------------------------------------------------------
AddInventory: AddInventory:
PHA : PHX : PHP ; In: Y - Receipt ID
CPY.b #$0C : BNE + ; Blue Boomerang ; Uses $0B-$0D for long absolute addressing
LDA.l InventoryTracking : ORA.b #$80 : STA.l InventoryTracking PHA : PHX : PHY : PHP : PHB
JMP .incrementCounts PHK : PLB
+ CPY.b #$2A : BNE + ; Red Boomerang LDA.b #$7E : STA.b Scrap0D
LDA.l InventoryTracking : ORA.b #$40 : STA.l InventoryTracking LDA.l StatsLocked : BNE .done
JMP .incrementCounts LDA.w InventoryTable_properties,Y : BIT #$01 : BEQ .done
+ CPY.b #$29 : BNE + ; Mushroom JSR.w ShopCheck : BCS .done
LDA.l InventoryTracking : ORA.b #$28 : STA.l InventoryTracking JSR.w DungeonIncrement : BCS .done
JMP .incrementCounts JSR.w IncrementByOne
+ CPY.b #$0D : BNE + ; Magic Powder JSR.w StampItem
LDA.l InventoryTracking : ORA.b #$10 : STA.l InventoryTracking SEP #$20
JMP .incrementCounts JSR.w IncrementYAItems
+ CPY.b #$13 : BNE + ; Shovel REP #$20
LDA.l InventoryTracking : ORA.b #$04 : STA.l InventoryTracking LDA.l TotalItemCounter : INC : TAY
JMP .incrementCounts LDA.l BootsEquipment : BNE +
+ CPY.b #$14 : BNE + ; Flute (Inactive) TYA : STA.l PreBootsLocations
LDA.l InventoryTracking : ORA.b #$02 : STA.l InventoryTracking +
JMP .incrementCounts LDA.l MirrorEquipment : BNE +
+ CPY.b #$4A : BNE + ; Flute (Active) TYA : STA.l PreMirrorLocations
LDA.l InventoryTracking : ORA.b #$01 : STA.l InventoryTracking +
JMP .incrementCounts LDA.l FluteEquipment : BNE +
+ CPY.b #$0B : BNE + ; Bow TYA : STA.l PreFluteLocations
LDA.l ArrowMode : BNE +++ +
LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking TYA
+++ STA.l TotalItemCounter
JMP .incrementCounts .done
+ CPY.b #$3A : BNE + ; Bow & Arrows PLB : PLP : PLY : PLX : PLA
LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking RTL
JMP .incrementCounts
+ CPY.b #$3B : BNE + ; Bow & Silver Arrows ShopCheck:
LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking LDA.b IndoorsFlag : BEQ .count
LDA.l ArrowMode : BNE +++ LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ .count
LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking ; activate wood arrows when not in rupee bow LDA.w InventoryTable_properties,Y : BIT.b #$02 : BNE .count
+++ REP #$20
JMP .incrementCounts LDA.b RoomIndex
+ CPY.b #$43 : BNE + ; Single arrow CMP.w #274 : BEQ .nocount ; dark world death mountain shop, ornamental shield shop
LDA.l ArrowMode : BEQ +++ CMP.w #271 : BEQ .nocount ; villiage of outcasts shop, lumberjack shop, lake hylia shop, dark world magic shop
LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking ; activate wood arrows in quick-swap CMP.w #272 : BEQ .nocount ; red shield shop
+++ CMP.w #284 : BEQ .nocount ; bomb shop
JMP .incrementCounts CMP.w #287 : BEQ .nocount ; kakariko shop
+ CPY.b #$58 : BNE + ; Upgrade-Only Silver Arrows CMP.w #255 : BEQ .nocount ; light world death mountain shop
LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking CMP.w #276 : BEQ .nocount ; waterfall fairy
+ CMP.w #277 : BEQ .nocount ; upgrade fairy (shop)
CMP.w #278 : BEQ .nocount ; pyramid fairy
.incrementCounts SEP #$20
; don't count any of this stuff .count
CPY.b #$20 : BNE + : JMP .itemCounts : + ; Crystal CLC
CPY.b #$26 : BNE + : JMP .itemCounts : + ; Heart Piece Completion Heart RTS
CPY.b #$2E : BNE + : JMP .itemCounts : + ; Red Potion (Refill) .nocount
CPY.b #$2F : BNE + : JMP .itemCounts : + ; Green Potion (Refill) SEP #$21
CPY.b #$30 : BNE + : JMP .itemCounts : + ; Blue Potion (Refill) RTS
CPY.b #$37 : BNE + : JMP .itemCounts : + ; Pendant
CPY.b #$38 : BNE + : JMP .itemCounts : + ; Pendant DungeonIncrement:
CPY.b #$39 : BNE + : JMP .itemCounts : + ; Pendant LDA.w InventoryTable_properties,Y : BIT.b #$40 : BEQ +
JSL.l CountChestKeyLong
CPY.b #$04 : !BLT .isSword ; Swords - Skip Shop/Fairy Check for Swords +
CPY.b #$49 : BEQ .isSword LDA.b IndoorsFlag : BEQ .done
CPY.b #$50 : BEQ .isSword LDA.w DungeonID : BMI .done
CPY.b #$5E : BEQ .isSword CMP.l BallNChainDungeon : BNE +
BRA + CPY.b #$32 : BEQ .ballchain_bigkey
.isSword +
JMP .dungeonCounts CMP.b #$04 : BCS +
+ LDA.l SewersLocations : INC : STA.l SewersLocations : STA.l HCLocations
CPY.b #$3B : BNE + : JMP .dungeonCounts : + ; Silver Arrow Bow - Skip Shop/Fairy Check for Silver Arrow Bow BRA .done
+
LDA.b IndoorsFlag : BEQ ++ ; skip shop check if outdoors LSR : TAX : LDA.l DungeonLocationsChecked, X : INC : STA.l DungeonLocationsChecked, X
LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ ++ ; skip shop check for chests CPX.b #$0D : BNE +
PHP : REP #$20 ; set 16-bit accumulator LDA.l BigKeyField : BIT.b #$04 : BNE ++
LDA.b RoomIndex LDA.l PreGTBKLocations : INC : STA.l PreGTBKLocations
CMP.w #274 : BNE + : JMP .shop : + ; dark world death mountain shop, ornamental shield shop ++
CMP.w #271 : BNE + : JMP .shop : + ; villiage of outcasts shop, lumberjack shop, lake hylia shop, dark world magic shop +
CMP.w #272 : BNE + : JMP .shop : + ; red shield shop .done
CMP.w #284 : BNE + : JMP .shop : + ; bomb shop CLC
;CMP.w #265 : BNE + : JMP .shop : + ; potion shop - commented this out because it's easier to just block potion refills because this one interferes with the powder item being counted RTS
;CMP.w #271 : BNE + : JMP .shop : + ; lake hylia shop .ballchain_bigkey
CMP.w #287 : BNE + : JMP .shop : + ; kakariko shop LDA.l BigKeysBigChests
CMP.w #255 : BNE + : JMP .shop : + ; light world death mountain shop CLC : ADC.b #$10
CMP.w #276 : BNE + : JMP .shop : + ; waterfall fairy STA.l BigKeysBigChests
CMP.w #277 : BNE + : JMP .shop : + ; upgrade fairy (shop) SEC
CMP.w #278 : BNE + : JMP .shop : + ; pyramid fairy RTS
PLP : BRA ++
.shop StampItem:
PLP : JMP .done REP #$30
++ TYA : ASL : TAX
LDA.w InventoryTable_stamp,X : BEQ .skip
.dungeonCounts STA.b Scrap0B
LDA.b IndoorsFlag : BNE + : JMP .fullItemCounts : + LDA.b [Scrap0B] : BNE .skip
SEP #$20 ; Set 8-bit Accumulator LDA.l NMIFrames : STA.b [Scrap0B]
INC.b Scrap0B : INC.b Scrap0B
LDA.w DungeonID ; get dungeon id LDA.l NMIFrames+2 : STA.b [Scrap0B]
CMP.b #$FF : BEQ .fullItemCounts .skip
RTS
CMP.l BallNChainDungeon : BNE +
CPY.b #$32 : BNE + IncrementYAItems:
JMP .done LDA.w InventoryTable_properties,Y
+ BIT.b #$10 : BNE .bomb_check
CMP.b #$04 : BCS + BIT.b #$20 : BNE .bow_check
LDA.l SewersLocations : INC : STA.l SewersLocations BIT.b #$04 : BEQ .not_y
LDA.l HCLocations : INC : STA.l HCLocations .y_item
BRA .fullItemCounts LDA.l YAItemCounter : !ADD #$08 : STA.l YAItemCounter
+ LSR : TAX : LDA.l DungeonLocationsChecked, X : INC : STA.l DungeonLocationsChecked, X BRA .done
++ CPX.b #$0D : BNE + .not_y
LDA.l BigKeyField : AND.b #$04 : BNE ++ BIT.b #$08 : BEQ .done
JSR .incrementGTowerPreBigKey .a_item
++ LDA.l YAItemCounter : INC : AND.b #$07 : TAX
+ LDA.l YAItemCounter : AND.b #$F8 : STA.l YAItemCounter
; == END INDOOR-ONLY SECTION TXA : ORA.l YAItemCounter : STA.l YAItemCounter
.fullItemCounts .done
RTS
LDA.l BootsEquipment : BNE + ; Check for Boots .bow_check
LDA.l PreBootsLocations : INC : STA.l PreBootsLocations ; Increment Pre Boots Counter LDA.l BowEquipment : BNE +
+ BRA .y_item
+
LDA.l MirrorEquipment : BNE + ; Check for Mirror RTS
LDA.l PreMirrorLocations : INC : STA.l PreMirrorLocations ; Increment Pre Mirror Counter .bomb_check
+ LDA.l InventoryTracking+1 : BIT.b #$02 : BNE +
ORA.b #$02 : STA.l InventoryTracking+1
LDA.l FluteEquipment : BNE + ; Check for Flute BRA .y_item
LDA.l PreFluteLocations : INC : STA.l PreFluteLocations ; Increment Pre Mirror Counter
+ +
RTS
IncrementByOne:
REP #$20 REP #$20
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter ; Increment Item Total TYA : ASL : TAX
LDA.w InventoryTable_stat,X : BEQ .skip
STA.b Scrap0B
SEP #$20
LDA.b #$01 : ADC.b [Scrap0B] : STA.b [Scrap0B]
.skip
SEP #$20 SEP #$20
.itemCounts
CPY.b #$00 : BNE + ; Fighter's Sword & Fighter's Shield
LDX.b #$01
JSR .incrementSword
JSR .incrementShield
JMP .done
+ CPY.b #$01 : BNE + ; Master Sword
LDX.b #$02
JSR .incrementSword
JMP .done
+ CPY.b #$02 : BNE + ; Tempered Sword
LDX.b #$03
JSR .incrementSword
JMP .done
+ CPY.b #$03 : BNE + ; Golden Sword
LDX.b #$04
JSR .incrementSword
JMP .done
+ CPY.b #$04 : BNE + ; Fighter's Shield
LDX.b #$01
JSR .incrementShield
JMP .done
+ CPY.b #$05 : BNE + ; Red Shield
LDX.b #$02
JSR .incrementShield
JMP .done
+ CPY.b #$06 : BNE + ; Mirror Shield
LDX.b #$03
JSR .incrementShield
JMP .done
+ CPY.b #$07 : !BLT + ; Items $07 - $0D
CPY.b #$0E : !BGE +
JSR .incrementY
JMP .done
+ CPY.b #$14 : BNE + ; Flute (Inactive) - LEAVE THIS ABOVE THE 0F-16 CONDITION - kkat
JSR .stampFlute
JSR .incrementY
JMP .done
+ CPY.b #$0F : !BLT + ; Items $0F - $16
CPY.b #$17 : !BGE +
JSR .incrementY
JMP .done
+ CPY.b #$17 : BNE + ; Heart Piece
JSR .incrementHeartPiece
JMP .done
+ CPY.b #$18 : !BLT + ; Items $18 - $19
CPY.b #$1A : !BGE +
JSR .incrementY
JMP .done
+ CPY.b #$1A : BNE + ; Magic Mirror
JSR .stampMirror
JSR .incrementY
JMP .done
+ CPY.b #$1D : BNE + ; Book of Mudora - LEAVE THIS ABOVE THE 1B-1F CONDITION - kkat
JSR .incrementY
JMP .done
+ CPY.b #$1B : !BLT + ; Items IndoorsFlag - $1F
CPY.b #$20 : !BGE +
JSR .incrementA
JMP .done
+ CPY.b #$20 : BNE + ; Crystal
JSR .incrementCrystal
JSR .setDungeonCompletion
JMP .done
+ CPY.b #$21 : BNE + ; Bug Net
JSR .incrementY
JMP .done
+ CPY.b #$22 : BNE + ; Blue Mail
LDX.b #$01
JSR .incrementMail
+ CPY.b #$23 : BNE + ; Red Mail
LDX.b #$02
JSR .incrementMail
+ CPY.b #$24 : BNE + ; Small Key
JSR .incrementVanillaKey
JMP .done
+ CPY.b #$25 : BNE + ; Compass
JSL MaybeFlagCompassTotalPickup
JSR .incrementCompass
JMP .done
+ CPY.b #$26 : BNE + ; Liar Heart (Container)
;JSR .incrementHeartContainer
JMP .done
+ CPY.b #$27 : BNE + ; 1 Bomb
JSR .maybeIncrementBombs
JMP .done
+ CPY.b #$28 : BNE + ; 3 Bombs
JSR .maybeIncrementBombs
JMP .done
+ CPY.b #$29 : BNE + ; Mushroom
JSR .incrementY
JMP .done
+ CPY.b #$2A : !BLT + ; Items $2A - $2D
CPY.b #$2E : !BGE +
JSR .incrementY
JMP .done
+ CPY.b #$31 : BNE + ; 10 Bombs
JSR .maybeIncrementBombs
JMP .done
+ CPY.b #$32 : BNE + ; Big Key
JSR .incrementBigKey
JMP .done
+ CPY.b #$33 : BNE + ; Map
JSL MaybeFlagMapTotalPickup
JSR .incrementMap
JMP .done
+ CPY.b #$37 : !BLT + ; Items $37 - $39 - Pendants
CPY.b #$3A : !BGE +
JSR .incrementPendant
JSR .setDungeonCompletion
JMP .done
+ CPY.b #$3A : !BLT + ; Items $3A - $3B - Bow & Silver Arrows
CPY.b #$3C : !BGE +
JSR .incrementBow
JMP .done
+ CPY.b #$3C : BNE + ; Bottle w/Bee
JSR .incrementY
JMP .done
+ CPY.b #$3D : BNE + ; Bottle w/Fairy
JSR .incrementY
JMP .done
+ CPY.b #$3E : !BLT + ; Items $3E - $3F - Heart Containers
CPY.b #$40 : !BGE +
JSR .incrementHeartContainer
JMP .done
+ CPY.b #$48 : BNE + ; Bottle w/Gold Bee
JSR .incrementY
JMP .done
+ CPY.b #$49 : BNE + ; Fighter's Sword
LDX.b #$01
JSR .incrementSword
JMP .done
+ CPY.b #$4A : BNE + ; Flute (Active)
JSR .stampFlute
JSR .incrementY
JMP .done
+ CPY.b #$4B : BNE + ; Pegasus Boots
JSR .stampBoots
JSR .incrementA
JMP .done
+ CPY.b #$4C : BNE + ; 50 Bomb Capacity Upgrade
JSR .incrementCapacity
JSR .maybeIncrementBombs
JMP .done
+ CPY.b #$4D : !BLT + ; Items $4D - $4F - Capacity Upgrades
CPY.b #$50 : !BGE +
JSR .incrementCapacity
JMP .done
+ CPY.b #$50 : BNE + ; Master Sword (Safe)
LDX.b #$02
JSR .incrementSword
JMP .done
+ CPY.b #$51 : BNE + ; 5 Bomb Capacity Upgrade
LDX.b #$02
JSR .maybeIncrementBombs
JMP .done
+ CPY.b #$52 : BNE + ; 10 Bomb Capacity Upgrade
LDX.b #$02
JSR .maybeIncrementBombs
JMP .done
+ CPY.b #$51 : !BLT + ; Items $51 - $54 - Capacity Upgrades
CPY.b #$55 : !BGE +
JSR .incrementCapacity
JMP .done
+ CPY.b #$58 : BNE + ; Upgrade-Only Silver Arrows
JSR .incrementBow
JMP .done
+ CPY.b #$5E : BNE + ; Progressive Sword
LDA.l SwordEquipment : INC : TAX
JSR .incrementSword
JMP .done
+ CPY.b #$5F : BNE + ; Progressive Shield
LDA.l ShieldEquipment : INC : TAX
JSR .incrementShield
JMP .done
+ CPY.b #$60 : BNE + ; Progressive Armor
LDA.l ArmorEquipment : INC : TAX
JSR .incrementMail
JMP .done
+ CPY.b #$61 : BNE + ; Progressive Lifting Glove
JSR .incrementA
JMP .done
+ CPY.b #$64 : !BLT + ; Items $64 & $65 - Progressive Bow
CPY.b #$66 : !BGE +
JSR .incrementBow
JMP .done
+ CPY.b #$70 : !BLT + ; Items $70 - $7F - Free Maps
CPY.b #$80 : !BGE +
JSL MaybeFlagMapTotalPickup
JSR .incrementMap
JMP .done
+ CPY.b #$80 : !BLT + ; Items $80 - $8F - Free Compasses
CPY.b #$90 : !BGE +
JSL MaybeFlagCompassTotalPickup
JSR .incrementCompass
JMP .done
+ CPY.b #$90 : !BLT + ; Items $90 - $9F - Free Big Keys
CPY.b #$A0 : !BGE +
JSR .incrementBigKey
JMP .done
+ CPY.b #$A0 : !BLT + ; Items $A0 - $AF - Free Small Keys
CPY.b #$B0 : !BGE +
JSR .incrementKey
JMP .done
+
.done
PLP : PLX : PLA
RTL
; WHICH BEE IS BOTTLED?
; MAKE SURE FAIRY FOUNTAINS DON'T FUCK THE COUNTS UP
.stampSword
REP #$20 ; set 16-bit accumulator
LDA.l SwordTime : BNE +
LDA.l SwordTime+2 : BNE +
LDA.l NMIFrames : STA.l SwordTime
LDA.l NMIFrames+2 : STA.l SwordTime+2
+
SEP #$20 ; set 8-bit accumulator
RTS RTS
.stampBoots IncrementBossSword:
REP #$20 ; set 16-bit accumulator PHX
LDA.l BootsTime : BNE + LDA.l StatsLocked : BNE .done
LDA.l BootsTime+2 : BNE + LDA.l SwordEquipment : CMP.b #$FF : BNE +
LDA.l NMIFrames : STA.l BootsTime BRA .none
LDA.l NMIFrames+2 : STA.l BootsTime+2
+
SEP #$20 ; set 8-bit accumulator
RTS
.stampFlute
REP #$20 ; set 16-bit accumulator
LDA.l FluteTime : BNE +
LDA.l FluteTime+2 : BNE +
LDA.l NMIFrames : STA.l FluteTime
LDA.l NMIFrames+2 : STA.l FluteTime+2
+
SEP #$20 ; set 8-bit accumulator
RTS
.stampMirror
REP #$20 ; set 16-bit accumulator
LDA.l MirrorTime : BNE +
LDA.l MirrorTime+2 : BNE +
LDA.l NMIFrames : STA.l MirrorTime
LDA.l NMIFrames+2 : STA.l MirrorTime+2
+
SEP #$20 ; set 8-bit accumulator
RTS
.incrementSword
JSR .stampSword
LDA.l HighestSword
INC : STA.b Scrap04 : CPX.b Scrap04 : !BLT + ; don't increment unless we're getting a better sword
TXA : STA.l HighestSword
+ +
RTS ASL : TAX
JMP.w (.vectors,X)
.incrementShield .vectors
LDA.l HighestShield dw .none
INC : STA.b Scrap04 : CPX.b Scrap04 : !BLT + ; don't increment unless we're getting a better shield dw .fighter
TXA : STA.l HighestShield dw .master
+ dw .tempered
RTS dw .golden
.incrementBow .none
LDA.l BowEquipment : BNE .dontCount ; Don't increment Y item count for extra bows LDA.l SwordlessBossKills : INC : STA.l SwordlessBossKills
.incrementY .done
LDA.l YAItemCounter : !ADD #$08 : STA.l YAItemCounter PLX
.dontCount RTL
RTS .fighter
LDA.l SwordBossKills
.incrementA CLC : ADC.b #$10
LDA.l YAItemCounter : INC : AND.b #$07 : TAX STA.l SwordBossKills
LDA.l YAItemCounter : AND.b #$F8 : STA.l YAItemCounter PLX
TXA : ORA.l YAItemCounter : STA.l YAItemCounter RTL
RTS .master
LDA.l SwordBossKills : INC : AND.b #$0F : TAX
.incrementPendant LDA.l SwordBossKills : AND.b #$F0 : STA.l SwordBossKills
LDA.l PendantCounter : INC : STA.l PendantCounter TXA : ORA.l SwordBossKills : STA.l SwordBossKills
RTS PLX
RTL
.incrementCapacity .tempered
LDA.l CapacityUpgrades : INC : STA.l CapacityUpgrades LDA.l SwordBossKills+1
RTS CLC : ADC.b #$10
STA.l SwordBossKills+1
.incrementHeartPiece PLX
LDA.l HeartPieceCounter : INC : STA.l HeartPieceCounter RTL
RTS .golden
LDA.l SwordBossKills+1 : INC : AND.b #$0F : TAX
.incrementHeartContainer LDA.l SwordBossKills+1 : AND.b #$F0 : STA.l SwordBossKills+1
LDA.l HeartContainerCounter : INC : STA.l HeartContainerCounter TXA : ORA.l SwordBossKills+1 : STA.l SwordBossKills+1
RTS PLX
RTL
.incrementCrystal
LDA.l CrystalCounter : INC : STA.l CrystalCounter
RTS
.incrementMail
LDA.l HighestMail
INC : STA.b Scrap04 : CPX.b Scrap04 : !BLT + ; don't increment unless we're getting a better mail
TXA : STA.l HighestMail
+
RTS
.incrementKeyLong
JSR .incrementKey
RTL
.incrementVanillaKey
JSL.l UpdateKeys
.incrementKey
LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter
RTS
.incrementCompass
%BottomHalf(MapsCompasses)
RTS
.incrementBigKey
%TopHalf(BigKeysBigChests)
RTS
.incrementGTowerPreBigKey
LDA.l PreGTBKLocations : INC : STA.l PreGTBKLocations
RTS
.maybeIncrementBombs
LDA.l InventoryTracking+1 : AND.b #$02 : BNE +
LDA.l InventoryTracking+1 : ORA.b #$02 : STA.l InventoryTracking+1
JSR .incrementY
+
RTS
.incrementMap
%TopHalf(MapsCompasses)
RTS
.incrementBossSwordLong
JSR .incrementBossSword
RTL
.incrementBossSword
LDA.l SwordEquipment
BNE + : -
LDA.l SwordlessBossKills : INC : STA.l SwordlessBossKills
RTS
+ CMP.b #$FF : BEQ -
+ CMP.b #$01 : BNE +
%TopHalf(SwordBossKills) : RTS
+ CMP.b #$02 : BNE +
%BottomHalf(SwordBossKills) : RTS
+ CMP.b #$03 : BNE +
%TopHalf(SwordBossKills+1) : RTS
+ CMP.b #$04 : BNE +
%BottomHalf(SwordBossKills+1)
+
RTS
.setDungeonCompletion
LDX.w DungeonID : BMI +
REP #$20 ; 16 bit
LDA.l DungeonMask, X
ORA.l DungeonsCompleted : STA.l DungeonsCompleted
SEP #$20 ; 8 bit
+
RTS
;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; Link_ReceiveItem_HUDRefresh: IncrementFinalSword:
PHX
REP #$20
LDA.w RoomIndex : BNE .done
SEP #$20
LDA.l SwordEquipment : CMP.b #$FF : BNE +
BRA IncrementBossSword_none
+
ASL : TAX
JMP.w (IncrementBossSword_vectors,X)
.done
SEP #$20
PLX
RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
Link_ReceiveItem_HUDRefresh: Link_ReceiveItem_HUDRefresh:
LDA.l BombsEquipment : BNE + ; skip if we have bombs LDA.l BombsEquipment : BNE + ; skip if we have bombs
@@ -835,7 +488,7 @@ ClearOWKeys:
JSL.l TurtleRockEntranceFix JSL.l TurtleRockEntranceFix
JSL.l FakeWorldFix JSL.l FakeWorldFix
JSR.w FixBunnyOnExitToLightWorld JSL.l FixBunnyOnExitToLightWorld
LDA.l GenericKeys : BEQ + LDA.l GenericKeys : BEQ +
PLA : LDA.l CurrentGenericKeys : STA.l CurrentSmallKeys PLA : LDA.l CurrentGenericKeys : STA.l CurrentSmallKeys
RTL RTL
@@ -858,10 +511,14 @@ RTL
; LoadPowder: ; LoadPowder:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
LoadPowder: LoadPowder:
PHX
JSL.l Sprite_SpawnDynamically ; thing we wrote over JSL.l Sprite_SpawnDynamically ; thing we wrote over
%GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) %GetPossiblyEncryptedItem(WitchItem, SpriteItemValues)
STA.w SpriteAuxTable, Y ; Store item type JSL.l ResolveLootIDLong
JSL.l PrepDynamicTile STA.w SpriteID, Y
TYX
JSL.l PrepDynamicTile_loot_resolved
PLX
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -884,12 +541,12 @@ RTL
DrawPowder: DrawPowder:
LDA.w ItemReceiptPose : BNE .defer ; defer if link is buying a potion LDA.w ItemReceiptPose : BNE .defer ; defer if link is buying a potion
LDA.l RedrawFlag : BEQ + LDA.l RedrawFlag : BEQ +
LDA.w SpriteAuxTable, X ; Retrieve stored item type ; LDA.w SpriteAuxTable, X ; Retrieve stored item type
JSL.l PrepDynamicTile JSL.l PrepDynamicTile_loot_resolved
LDA.b #$00 : STA.l RedrawFlag ; reset redraw flag LDA.b #$00 : STA.l RedrawFlag ; reset redraw flag
BRA .defer BRA .defer
+ +
LDA.w SpriteAuxTable, X ; Retrieve stored item type LDA.w SpriteID, X ; Retrieve stored item type
JSL.l DrawDynamicTile JSL.l DrawDynamicTile
.defer .defer
RTL RTL
@@ -909,7 +566,8 @@ LoadMushroom:
LDA.b #$00 : STA.l RedrawFlag LDA.b #$00 : STA.l RedrawFlag
%GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues) %GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues)
STA.w SpriteItemType, X ; Store item type JSR.w ResolveLootID
STA.w SpriteID,X
JSL.l PrepDynamicTile JSL.l PrepDynamicTile
.skip .skip
@@ -927,7 +585,7 @@ DrawMushroom:
BRA .done ; don't draw on the init frame BRA .done ; don't draw on the init frame
.skipInit .skipInit
LDA.w SpriteItemType, X ; Retrieve stored item type LDA.w SpriteID, X ; Retrieve stored item type
JSL.l DrawDynamicTile JSL.l DrawDynamicTile
.done .done
@@ -939,15 +597,14 @@ RTL
; CollectPowder: ; CollectPowder:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CollectPowder: CollectPowder:
LDY.w SpriteAuxTable, X ; Retrieve stored item type LDY.w SpriteID, X ; Retrieve stored item type
BNE + BNE +
; if for any reason the item value is 0 reload it, just in case ; if for any reason the item value is 0 reload it, just in case
%GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) : TAY %GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) : TAY
+ +
STZ.w ItemReceiptMethod ; item from NPC STZ.w ItemReceiptMethod ; item from NPC
JSL.l Link_ReceiveItem JSL.l Link_ReceiveItem
;JSL.l FullInventoryExternal JSL.l ItemSet_Powder
JSL.l ItemSet_Powder
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------

File diff suppressed because it is too large Load Diff

1369
itemdatatables.asm Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -2,11 +2,6 @@
; Item Downgrade Fix ; Item Downgrade Fix
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
ItemDowngradeFix: ItemDowngradeFix:
JSR ItemDowngradeFixMain
JSL CountChestKeyLong
RTL
ItemDowngradeFixMain:
JSL.l AddInventory JSL.l AddInventory
BMI .dontWrite ; thing we wrote over part 1 BMI .dontWrite ; thing we wrote over part 1
@@ -34,7 +29,7 @@ ItemDowngradeFixMain:
.done .done
STA.b [Scrap00] ; thing we wrote over part 2 STA.b [Scrap00] ; thing we wrote over part 2
.dontWrite .dontWrite
RTS RTL
.isPowerGloves .isPowerGloves
.isBlueShield .isBlueShield
.isRedShield .isRedShield
@@ -43,7 +38,7 @@ RTS
.isBowAndArrows .isBowAndArrows
CMP.b [$00] : !BGE .done ; finished if we're upgrading CMP.b [$00] : !BGE .done ; finished if we're upgrading
LDA.b [$00] ; reload old value LDA.b [$00] ; reload old value
RTS RTL
.isSilverArrowBow .isSilverArrowBow
.isRedBoomerang .isRedBoomerang
.isMagicPowder .isMagicPowder
@@ -54,10 +49,10 @@ RTS
LDA.b [Scrap00] : BNE + ; don't upgrade if we already have the toggle for it LDA.b [Scrap00] : BNE + ; don't upgrade if we already have the toggle for it
PLA PLA
STA.b [Scrap00] STA.b [Scrap00]
RTS RTL
+ +
PLA PLA
RTS RTL
.isSword .isSword
PHA PHA
LDA.l HighestSword : STA.b Scrap04 LDA.l HighestSword : STA.b Scrap04
@@ -77,5 +72,5 @@ JMP .done
INC.b Scrap00 INC.b Scrap00
LDA.l HighestShield : STA.b [Scrap00] LDA.l HighestShield : STA.b [Scrap00]
PLA PLA
RTS RTL
;================================================================================ ;================================================================================

View File

@@ -1,4 +1,4 @@
org $328000 org $B28000
; You have found ; You have found
; the map of ; the map of
Notice_MapOf: Notice_MapOf:
@@ -27,6 +27,11 @@ Notice_SmallKeyOf:
db $75, $00, $BC, $00, $B6, $00, $AA, $00, $B5, $00, $B5, $00, $FF, $00, $B4, $00, $AE, $00, $C2, $00, $FF, $00, $BD, $00, $B8 db $75, $00, $BC, $00, $B6, $00, $AA, $00, $B5, $00, $B5, $00, $FF, $00, $B4, $00, $AE, $00, $C2, $00, $FF, $00, $BD, $00, $B8
dw #$7F7F dw #$7F7F
;
Notice_Crystal:
db $74, $00, $C2, $00, $B8, $00, $BE, $00, $FF, $00, $B9, $00, $B2, $00, $AC, $00, $B4, $00, $AE, $00, $AD, $00, $FF, $00, $BE, $00, $B9
dw $7F7F
; light world ; light world
Notice_LightWorld: Notice_LightWorld:
db $76, $00, $B5, $00, $B2, $00, $B0, $00, $B1, $00, $BD, $00, $FF, $00, $C0, $00, $B8, $00, $BB, $00, $B5, $00, $AD db $76, $00, $B5, $00, $B2, $00, $B0, $00, $B1, $00, $BD, $00, $FF, $00, $C0, $00, $B8, $00, $BB, $00, $B5, $00, $AD
@@ -111,3 +116,32 @@ Notice_Sewers:
Notice_Self: Notice_Self:
db $76, $00, $BD, $00, $B1, $00, $B2, $00, $BC, $00, $FF, $00, $AD, $00, $BE, $00, $B7, $00, $B0, $00, $AE, $00, $B8, $00, $B7 db $76, $00, $BD, $00, $B1, $00, $B2, $00, $BC, $00, $FF, $00, $AD, $00, $BE, $00, $B7, $00, $B0, $00, $AE, $00, $B8, $00, $B7
dw #$7F7F dw #$7F7F
; Crystal numbers
Notice_One:
db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $B8, $00, $B7, $00, $AE
dw #$7F7F
Notice_Two:
db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $BD, $00, $C0, $00, $B8
dw #$7F7F
Notice_Three:
db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $BD, $00, $B1, $00, $BB, $00, $AE, $00, $AE
dw #$7F7F
Notice_Four:
db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $AF, $00, $B8, $00, $BE, $00, $BB
dw #$7F7F
Notice_Five:
db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $AF, $00, $B2, $00, $BF, $00, $AE
dw #$7F7F
Notice_Six:
db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $BC, $00, $B2, $00, $C1
dw #$7F7F
Notice_Seven:
db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $BC, $00, $AE, $00, $BF, $00, $AE, $00, $B7
dw #$7F7F

View File

@@ -1,113 +1,147 @@
org $328000 org $B28000
; You have found ; You have found
; the map of ; the map of
Notice_MapOf: Notice_MapOf:
db $74, $00, $C2, $00, $3E, $00, $44, $00, $FF, $00, $37, $00, $30, $00, $45, $00, $34, $00, $FF, $00, $35, $00, $3E, $00, $44, $00, $3D, $00, $33 db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $D7, $00, $D0, $00, $E5, $00, $D4, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $DD, $00, $D3
db $75, $00, $43, $00, $37, $00, $34, $00, $FF, $00, $3C, $00, $30, $00, $3F, $00, $FF, $00, $3E, $00, $35 db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $DC, $00, $D0, $00, $DF, $00, $FF, $00, $DE, $00, $D5
dw #$7F7F dw #$7F7F
; You have found ; You have found
; the compass of ; the compass of
Notice_CompassOf: Notice_CompassOf:
db $74, $00, $C2, $00, $3E, $00, $44, $00, $FF, $00, $37, $00, $30, $00, $45, $00, $34, $00, $FF, $00, $35, $00, $3E, $00, $44, $00, $3D, $00, $33 db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $D7, $00, $D0, $00, $E5, $00, $D4, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $DD, $00, $D3
db $75, $00, $43, $00, $37, $00, $34, $00, $FF, $00, $32, $00, $3E, $00, $3C, $00, $3F, $00, $30, $00, $42, $00, $42, $00, $FF, $00, $3E, $00, $35 db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $D2, $00, $DE, $00, $DC, $00, $DF, $00, $D0, $00, $E2, $00, $E2, $00, $FF, $00, $DE, $00, $D5
dw #$7F7F dw #$7F7F
; Oh look! it's ; Oh look! it's
; the big key of ; the big key of
Notice_BigKeyOf: Notice_BigKeyOf:
db $74, $00, $B8, $00, $37, $00, $FF, $00, $3B, $00, $3E, $00, $3E, $00, $3A, $00, $C7, $00, $FF, $00, $38, $00, $43, $00, $D8, $00, $42 db $74, $00, $B8, $00, $D7, $00, $FF, $00, $DB, $00, $DE, $00, $DE, $00, $DA, $00, $C7, $00, $FF, $00, $D8, $00, $E3, $00, $D8, $00, $E2
db $75, $00, $43, $00, $37, $00, $34, $00, $FF, $00, $31, $00, $38, $00, $36, $00, $FF, $00, $3A, $00, $34, $00, $48, $00, $FF, $00, $3E, $00, $35 db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $D1, $00, $D8, $00, $D6, $00, $FF, $00, $DA, $00, $D4, $00, $E8, $00, $FF, $00, $DE, $00, $D5
dw #$7F7F dw #$7F7F
; this is a ; this is a
; small key to ; small key to
Notice_SmallKeyOf: Notice_SmallKeyOf:
db $74, $00, $BD, $00, $37, $00, $38, $00, $42, $00, $FF, $00, $38, $00, $42, $00, $FF, $00, $30 db $74, $00, $BD, $00, $D7, $00, $D8, $00, $E2, $00, $FF, $00, $D8, $00, $E2, $00, $FF, $00, $D0
db $75, $00, $42, $00, $3C, $00, $30, $00, $3B, $00, $3B, $00, $FF, $00, $3A, $00, $34, $00, $48, $00, $FF, $00, $43, $00, $3e db $75, $00, $E2, $00, $DC, $00, $D0, $00, $DB, $00, $DB, $00, $FF, $00, $DA, $00, $D4, $00, $E8, $00, $FF, $00, $E3, $00, $DE
dw #$7F7F dw #$7F7F
; You picked up
Notice_Crystal:
db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $DF, $00, $D8, $00, $D2, $00, $DA, $00, $D4, $00, $D3, $00, $FF, $00, $E4, $00, $DF
dw $7F7F
; light world ; light world
Notice_LightWorld: Notice_LightWorld:
db $76, $00, $B5, $00, $38, $00, $36, $00, $37, $00, $43, $00, $FF, $00, $C0, $00, $3E, $00, $41, $00, $3B, $00, $33 db $76, $00, $B5, $00, $D8, $00, $D6, $00, $D7, $00, $E3, $00, $FF, $00, $C0, $00, $DE, $00, $E1, $00, $DB, $00, $D3
dw #$7F7F dw #$7F7F
; dark world ; dark world
Notice_DarkWorld: Notice_DarkWorld:
db $76, $00, $AD, $00, $30, $00, $41, $00, $3A, $00, $FF, $00, $C0, $00, $3E, $00, $41, $00, $3B, $00, $33 db $76, $00, $AD, $00, $D0, $00, $E1, $00, $DA, $00, $FF, $00, $C0, $00, $DE, $00, $E1, $00, $DB, $00, $D3
dw #$7F7F dw #$7F7F
; Ganons Tower ; Ganons Tower
Notice_GTower: Notice_GTower:
db $76, $00, $B0, $00, $30, $00, $3D, $00, $3E, $00, $3D, $00, $42, $00, $FF, $00, $BD, $00, $3E, $00, $46, $00, $34, $00, $41 db $76, $00, $B0, $00, $D0, $00, $DD, $00, $DE, $00, $DD, $00, $E2, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1
dw #$7F7F dw #$7F7F
; Turtle Rock ; Turtle Rock
Notice_TRock: Notice_TRock:
db $76, $00, $BD, $00, $44, $00, $41, $00, $43, $00, $3B, $00, $34, $00, $FF, $00, $BB, $00, $3E, $00, $32, $00, $3a db $76, $00, $BD, $00, $E4, $00, $E1, $00, $E3, $00, $DB, $00, $D4, $00, $FF, $00, $BB, $00, $DE, $00, $D2, $00, $DA
dw #$7F7F dw #$7F7F
; Thieves Town ; Thieves Town
Notice_Thieves: Notice_Thieves:
db $76, $00, $BD, $00, $37, $00, $38, $00, $34, $00, $45, $00, $34, $00, $42, $00, $FF, $00, $BD, $00, $3E, $00, $46, $00, $3d db $76, $00, $BD, $00, $D7, $00, $D8, $00, $D4, $00, $E5, $00, $D4, $00, $E2, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $DD
dw #$7F7F dw #$7F7F
; Tower of Hera ; Tower of Hera
Notice_Hera: Notice_Hera:
db $76, $00, $BD, $00, $3E, $00, $46, $00, $34, $00, $41, $00, $FF, $00, $3E, $00, $35, $00, $FF, $00, $B1, $00, $34, $00, $41, $00, $30 db $76, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1, $00, $FF, $00, $DE, $00, $D5, $00, $FF, $00, $B1, $00, $D4, $00, $E1, $00, $D0
dw #$7F7F dw #$7F7F
; Ice Palace ; Ice Palace
Notice_Ice: Notice_Ice:
db $76, $00, $B2, $00, $32, $00, $34, $00, $FF, $00, $B9, $00, $30, $00, $3B, $00, $30, $00, $32, $00, $34 db $76, $00, $B2, $00, $D2, $00, $D4, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4
dw #$7F7F dw #$7F7F
; Skull Woods ; Skull Woods
Notice_Skull: Notice_Skull:
db $76, $00, $BC, $00, $3A, $00, $44, $00, $3B, $00, $3B, $00, $FF, $00, $C0, $00, $3E, $00, $3E, $00, $33, $00, $42 db $76, $00, $BC, $00, $DA, $00, $E4, $00, $DB, $00, $DB, $00, $FF, $00, $C0, $00, $DE, $00, $DE, $00, $D3, $00, $E2
dw #$7F7F dw #$7F7F
; Misery Mire ; Misery Mire
Notice_Mire: Notice_Mire:
db $76, $00, $B6, $00, $38, $00, $42, $00, $34, $00, $41, $00, $48, $00, $FF, $00, $B6, $00, $38, $00, $41, $00, $34 db $76, $00, $B6, $00, $D8, $00, $E2, $00, $D4, $00, $E1, $00, $E8, $00, $FF, $00, $B6, $00, $D8, $00, $E1, $00, $D4
dw #$7F7F dw #$7F7F
; Dark Palace ; Dark Palace
Notice_PoD: Notice_PoD:
db $76, $00, $AD, $00, $30, $00, $41, $00, $3A, $00, $FF, $00, $B9, $00, $30, $00, $3B, $00, $30, $00, $32, $00, $34 db $76, $00, $AD, $00, $D0, $00, $E1, $00, $DA, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4
dw #$7F7F dw #$7F7F
; Swamp Palace ; Swamp Palace
Notice_Swamp: Notice_Swamp:
db $76, $00, $BC, $00, $46, $00, $30, $00, $3C, $00, $3F, $00, $FF, $00, $B9, $00, $30, $00, $3B, $00, $30, $00, $32, $00, $34 db $76, $00, $BC, $00, $E6, $00, $D0, $00, $DC, $00, $DF, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4
dw #$7F7F dw #$7F7F
; Castle Tower ; Castle Tower
Notice_AgaTower: Notice_AgaTower:
db $76, $00, $AC, $00, $30, $00, $42, $00, $43, $00, $3B, $00, $34, $00, $FF, $00, $BD, $00, $3E, $00, $46, $00, $34, $00, $41 db $76, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1
dw #$7F7F dw #$7F7F
; Desert Palace ; Desert Palace
Notice_Desert: Notice_Desert:
db $76, $00, $AD, $00, $34, $00, $42, $00, $34, $00, $41, $00, $43, $00, $FF, $00, $B9, $00, $30, $00, $3B, $00, $30, $00, $32, $00, $34 db $76, $00, $AD, $00, $D4, $00, $E2, $00, $D4, $00, $E1, $00, $E3, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4
dw #$7F7F dw #$7F7F
; Eastern Palace ; Eastern Palace
Notice_Eastern: Notice_Eastern:
db $76, $00, $AE, $00, $30, $00, $42, $00, $43, $00, $34, $00, $41, $00, $3D, $00, $FF, $00, $B9, $00, $30, $00, $3B, $00, $30, $00, $32, $00, $34 db $76, $00, $AE, $00, $D0, $00, $E2, $00, $E3, $00, $D4, $00, $E1, $00, $DD, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4
dw #$7F7F dw #$7F7F
; Hyrule Castle ; Hyrule Castle
Notice_Castle: Notice_Castle:
db $76, $00, $B1, $00, $48, $00, $41, $00, $44, $00, $3B, $00, $34, $00, $FF, $00, $AC, $00, $30, $00, $42, $00, $43, $00, $3B, $00, $34 db $76, $00, $B1, $00, $E8, $00, $E1, $00, $E4, $00, $DB, $00, $D4, $00, $FF, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4
dw #$7F7F dw #$7F7F
; Hyrule Castle ; Hyrule Castle
Notice_Sewers: Notice_Sewers:
db $76, $00, $B1, $00, $48, $00, $41, $00, $44, $00, $3B, $00, $34, $00, $FF, $00, $AC, $00, $30, $00, $42, $00, $43, $00, $3B, $00, $34 db $76, $00, $B1, $00, $E8, $00, $E1, $00, $E4, $00, $DB, $00, $D4, $00, $FF, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4
dw #$7F7F dw #$7F7F
; This Dungeon ; This Dungeon
Notice_Self: Notice_Self:
db $76, $00, $43, $00, $37, $00, $38, $00, $42, $00, $FF, $00, $33, $00, $44, $00, $3D, $00, $36, $00, $34, $00, $3E, $00, $3d db $76, $00, $E3, $00, $D7, $00, $D8, $00, $E2, $00, $FF, $00, $D3, $00, $E4, $00, $DD, $00, $D6, $00, $D4, $00, $DE, $00, $Dd
dw #$7F7F
; Crystal numbers
Notice_One:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $DE, $00, $DD, $00, $D4
dw #$7F7F
Notice_Two:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E3, $00, $E6, $00, $DE
dw #$7F7F
Notice_Three:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E3, $00, $D7, $00, $E1, $00, $D4, $00, $D4
dw #$7F7F
Notice_Four:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $E1
dw #$7F7F
Notice_Five:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $D5, $00, $D8, $00, $E5, $00, $D4
dw #$7F7F
Notice_Six:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E2, $00, $D8, $00, $E7
dw #$7F7F
Notice_Seven:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E2, $00, $D4, $00, $E5, $00, $D4, $00, $DD
dw #$7F7F dw #$7F7F

View File

@@ -14,5 +14,5 @@ MaidenCrystalScript:
LDA.l CrystalsField : AND.b #$7F : CMP.b #$7F : BNE + ; check if we have all crystals LDA.l CrystalsField : AND.b #$7F : CMP.b #$7F : BNE + ; check if we have all crystals
LDA.b #$08 : STA.l MapIcons ; Update the map icon to just be Ganon's Tower LDA.b #$08 : STA.l MapIcons ; Update the map icon to just be Ganon's Tower
+ +
JML.l $1ECF35 ; <- F4F35 - sprite_crystal_maiden.asm : 426 JML.l $9ECF35 ; <- F4F35 - sprite_crystal_maiden.asm : 426
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------

View File

@@ -103,7 +103,7 @@ Overworld_FinishMirrorWarp:
LDA.w #$0000 : STA.l FadeTimer : STA.l FadeDirection LDA.w #$0000 : STA.l FadeTimer : STA.l FadeDirection
SEP #$20 SEP #$20
JSL $00D7C8 JSL $80D7C8
LDA.b #$80 : STA.b HDMAENQ LDA.b #$80 : STA.b HDMAENQ
LDX.b #$04 ; bunny theme LDX.b #$04 ; bunny theme
@@ -245,10 +245,10 @@ RTL
; ;
; On entry, A = $8A (overworld area being loaded) ; On entry, A = $8A (overworld area being loaded)
Overworld_MosaicDarkWorldChecks: Overworld_MosaicDarkWorldChecks:
CMP.b #$40 : beq .checkCrystals CMP.b #$40 : BEQ .checkCrystals
CMP.b #$42 : beq .checkCrystals CMP.b #$42 : BEQ .checkCrystals
CMP.b #$50 : beq .checkCrystals CMP.b #$50 : BEQ .checkCrystals
CMP.b #$51 : bne .doFade CMP.b #$51 : BNE .doFade
.checkCrystals .checkCrystals
LDA.l CrystalsField : CMP.b #$7F : BEQ .done LDA.l CrystalsField : CMP.b #$7F : BEQ .done

View File

@@ -64,10 +64,8 @@ NewHUD_DrawArrows:
;================================================================================ ;================================================================================
NewHUD_DrawGoal: NewHUD_DrawGoal:
LDA.w UpdateHUD : BEQ .no_goal
REP #$20 REP #$20
LDA.w UpdateHUD : BEQ .no_goal
LDA.l GoalItemRequirement : BEQ .no_goal LDA.l GoalItemRequirement : BEQ .no_goal
LDA.l GoalItemIcon : STA.w HUDGoalIndicator LDA.l GoalItemIcon : STA.w HUDGoalIndicator
@@ -172,13 +170,15 @@ NewHUD_DrawPrizeIcon:
LDA.l MapField LDA.l MapField
AND.l DungeonItemMasks,X AND.l DungeonItemMasks,X
BEQ .no_prize BEQ .no_prize
.prize .prize
TYX TYX
LDA.l CrystalPendantFlags_2,X LDA.l CrystalPendantFlags_2,X
AND.w #$0040 BIT.w #$0080
BNE .no_icon
BIT.w #$0040
BNE .crystal BNE .crystal
LDY.w #!PTile LDY.w #!PTile
@@ -186,6 +186,10 @@ NewHUD_DrawPrizeIcon:
.crystal .crystal
LDY.w #!CTile LDY.w #!CTile
BRA .draw_prize
.no_icon
LDY.w #!BlankTile
.draw_prize .draw_prize
STY.w HUDPrizeIcon STY.w HUDPrizeIcon
@@ -221,8 +225,6 @@ NewHUD_DrawItemCounter:
LDA.b $06 : TAX : STX.w HUDGoalIndicator+$04 LDA.b $06 : TAX : STX.w HUDGoalIndicator+$04
LDA.b $07 : TAX : STX.w HUDGoalIndicator+$06 LDA.b $07 : TAX : STX.w HUDGoalIndicator+$06
;================================================================================ ;================================================================================
DrawMagicMeter_mp_tilemap = $0DFE0F DrawMagicMeter_mp_tilemap = $0DFE0F
NewHUD_DrawMagicMeter: NewHUD_DrawMagicMeter:
@@ -251,7 +253,6 @@ NewHUD_DrawMagicMeter:
TDC TDC
.recolor .recolor
TAX TAX
LDA.l MagicMeterColorMasks,X LDA.l MagicMeterColorMasks,X
TYX TYX
@@ -361,8 +362,6 @@ HUDHex2Digit:
RTS RTS
;===================================================================================================
HUDHex4Digit: HUDHex4Digit:
JSL HexToDec JSL HexToDec
@@ -376,7 +375,6 @@ HUDHex4Digit:
SEP #$20 SEP #$20
RTS RTS
;================================================================================
HUDHex2Digit_Long: HUDHex2Digit_Long:
JSR HUDHex2Digit JSR HUDHex2Digit
REP #$20 REP #$20
@@ -386,3 +384,115 @@ HUDHex4Digit_Long:
JSR HUDHex4Digit JSR HUDHex4Digit
REP #$20 REP #$20
RTL RTL
;================================================================================
UpdateHearts:
PHB
REP #$20
SEP #$10
LDX.b #$7E
PHX
PLB
LDA.w $7EF36C
LSR
LSR
LSR
AND.w #$1F1F
TAX
XBA
TAY
LDA.w #HUDTileMapBuffer+$068
STA.b $07
STA.b $09
.next_filled_heart
CPX.b #$01
BMI .done_hearts
JSR.w CheckHeartPalette
CPY.b #$01
BPL .add_heart
INC
INC
.add_heart
STA.b ($07)
DEY
DEX
LDA.b $07
INC
INC
CMP.w #HUDTileMapBuffer+$07C
BEQ .next_row
CMP.w #HUDTileMapBuffer+$0BC
BNE .fine
.next_row
ADC.w #$002B
.fine
STA.b $07
CPY.b #$00
BNE .next_filled_heart
STA.b $09
BRA .next_filled_heart
.done_hearts
LDA.w $7EF36D
AND.w #$0007
BEQ .skip_partial
CMP.w #$0005
JSR.w CheckHeartPalette
BCS .more_than_half
INC
.more_than_half
STA.b ($09)
.skip_partial
SEP #$30
PLB
RTL
CheckHeartPaletteFileSelect:
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_file_select,X
ORA.w #$0200
LDX.w #$000A
RTL
CheckHeartPalette:
PHX
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
ORA.w #$20A0
PLX
RTS
ColorAnimatedHearts:
REP #$20
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
ORA.l HeartFramesBaseTiles,X
STA.b [Scrap00],Y
SEP #$20
RTL
HeartFramesBaseTiles:
dw $20A3, $20A4, $20A3, $20A0

File diff suppressed because it is too large Load Diff

View File

@@ -47,23 +47,23 @@ ItemCheck_SickKid:
RTL RTL
ItemCheck_TreeKid: ItemCheck_TreeKid:
LDA.l NpcFlags : AND.b #$08 ; FluteBoy_Chillin - 73: LDA FluteEquipment LDA.l NpcFlags : AND.b #$08
RTL RTL
ItemCheck_TreeKid2: ItemCheck_TreeKid2:
LDA.l NpcFlags : AND.b #$08 : LSR #$02 ; FluteAardvark_InitialStateFromFluteState - 225: LDA FluteEquipment : AND.b #$03 LDA.l NpcFlags : AND.b #$08 : CMP.b #$08
TDC ; ?? TODO
RTL RTL
ItemCheck_TreeKid3: ItemCheck_TreeKid3:
JSL $0DD030 ; FluteAardvark_Draw - thing we wrote over JSL $8DD030 ; FluteAardvark_Draw - thing we wrote over
LDA.l NpcFlags : AND.b #$08 LDA.l NpcFlags : AND.b #$08
BEQ .normal BNE .done
BRA .done
LDA.b #$05 LDA.b #$05
.normal .normal
LDA.w SpriteActivity, X LDA.w SpriteActivity, X
.done .done
RTL RTL
ItemCheck_Sahasrala: ItemCheck_Sahasrala:
LDA.l NpcFlags : AND.b #$10 LDA.l NpcFlags : AND.b #$10
@@ -74,7 +74,7 @@ ItemCheck_Library:
RTL RTL
ItemCheck_Mushroom: ItemCheck_Mushroom:
LDA.l NpcFlags+1 : ROL #4 ; does the same thing as below LDA.l NpcFlags+1 : AND.b #$10 : CMP.b #$10 ; does the same thing as below
RTL RTL
ItemCheck_Powder: ItemCheck_Powder:
@@ -133,7 +133,7 @@ RTL
ItemSet_Mushroom: ItemSet_Mushroom:
PHA PHA
LDA.l NpcFlags+1 : ORA.b #$10 : STA.l NpcFlags+1 LDA.l NpcFlags+1 : ORA.b #$10 : STA.l NpcFlags+1
LDY.w SpriteItemType, X ; Retrieve stored item type LDY.w SpriteID, X ; Retrieve stored item type
BNE + BNE +
; if for any reason the item value is 0 reload it, just in case ; if for any reason the item value is 0 reload it, just in case
%GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues) : TAY %GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues) : TAY
@@ -174,8 +174,11 @@ RTL
; Randomize Zora King ; Randomize Zora King
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
LoadZoraKingItemGFX: LoadZoraKingItemGFX:
LDA.l $1DE1C3 ; location randomizer writes zora item to LDA.l $9DE1C3 ; location randomizer writes zora item to
JML.l PrepDynamicTile JSL.l ResolveLootIDLong
STA.w SpriteID,Y
TYX
JML.l PrepDynamicTile_loot_resolved
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
JumpToSplashItemTarget: JumpToSplashItemTarget:
LDA.w SpriteMovement, X LDA.w SpriteMovement, X
@@ -186,18 +189,20 @@ JumpToSplashItemTarget:
; Randomize Catfish ; Randomize Catfish
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
LoadCatfishItemGFX: LoadCatfishItemGFX:
LDA.l $1DE185 ; location randomizer writes catfish item to LDA.l $9DE185 ; location randomizer writes catfish item to
JML PrepDynamicTile JSL.l ResolveLootIDLong
STA.w SpriteID, Y
TYX
JML.l PrepDynamicTile_loot_resolved
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DrawThrownItem: DrawThrownItem:
LDA.b OverworldIndex : CMP.b #$81 : BNE .catfish LDA.b OverworldIndex : CMP.b #$81 : BNE .catfish
.zora .zora
LDA.b #$01 : STA.l RedrawFlag LDA.b #$01 : STA.l RedrawFlag
LDA.l $1DE1C3 ; location randomizer writes zora item to
BRA .draw BRA .draw
.catfish .catfish
LDA.l $1DE185 ; location randomizer writes catfish item to
.draw .draw
LDA.w SpriteID,X
JML DrawDynamicTile JML DrawDynamicTile
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
MarkThrownItem: MarkThrownItem:

143
overworldmap.asm Normal file
View File

@@ -0,0 +1,143 @@
pushpc
org $0AC02B
DrawPrizesOverride:
LDX.b #$FF
.loopStart
INX : PHX
JSR OverworldMap_CheckForPrize
BCC + : JMP .skip_draw : +
TXA : ASL A : TAX
LDA.l MapCompassFlag
AND #$01 : BNE +
LDA.l WorldMapIcon_posx_vanilla+1, X : STA.l $7EC10B
LDA.l WorldMapIcon_posx_vanilla, X : STA.l $7EC10A
LDA.l WorldMapIcon_posy_vanilla+1, X : STA.l $7EC109
LDA.l WorldMapIcon_posy_vanilla, X : STA.l $7EC108
BRA .adjustment
+ LDA.l WorldMapIcon_posx_located+1, X : STA.l $7EC10B
LDA.l WorldMapIcon_posx_located, X : STA.l $7EC10A
LDA.l WorldMapIcon_posy_located+1, X : STA.l $7EC109
LDA.l WorldMapIcon_posy_located, X : STA.l $7EC108
.adjustment
LDA.l WorldMapIcon_tile, X : CMP #$FF : BEQ .skip_draw
LDA.l WorldMapIcon_tile+1, X : BEQ .dont_adjust
CMP.b #$64 : BEQ .is_crystal
LDA.b $1A : AND.b #$10 : BNE .skip_draw
.is_crystal
JSR.w WorldMapIcon_AdjustCoordinate
.dont_adjust
JSR.w WorldMap_CalculateOAMCoordinates
BCC .skip_draw
PLX : PHX : TXA : ASL A : TAX
LDA.l WorldMapIcon_tile+1, X : BEQ .is_red_x
LDA.l MapCompassFlag : CMP.b #$01 : BEQ .is_red_x
LDA.l WorldMapIcon_tile+1, X : STA.b $0D
LDA.l WorldMapIcon_tile, X : STA.b $0C
LDA.b #$02 : BRA .continue
.is_red_x
LDA.b $1A : LSR #3 : AND.b #$03 : TAX
LDA.l WorldMap_RedXChars,X : STA.b $0D
LDA.b #$32 : STA.b $0C : LDA.b #$00
.continue
STA.b $0B
PLX : PHX
INX : JSR.w WorldMap_HandleSpriteBlink
.skip_draw
; end of loop
PLX : CPX #12 : BCS + : JMP .loopStart : +
PLA : STA.l $7EC10B
PLA : STA.l $7EC10A
PLA : STA.l $7EC109
PLA : STA.l $7EC108
RTS
; X - the index of the prize marker
OverworldMap_CheckForPrize:
PHX
LDA #$00 : STA.l MapCompassFlag
JSR OverworldMap_CheckForCompass
BCC +
LDA.l MapCompassFlag : ORA #$01 : STA.l MapCompassFlag
LDA CurrentWorld : AND #$40 : BNE ++ ; is the compass position on LW or DW?
LDA.l WorldCompassMask, X : BEQ + : JMP .fail
++ LDA.l WorldCompassMask, X : BNE + : JMP .fail
+ JSR OverworldMap_CheckForMap
BCC +
LDA.l MapCompassFlag : ORA #$02 : STA.l MapCompassFlag
+
LDA.l MapCompassFlag : BEQ .fail
CMP #$02 : BNE .checkIfObtained
LDA CurrentWorld : AND #$40 : BNE +
CPX #3 : BCS .fail : BRA .checkIfObtained
+ CPX #10 : BCS .fail
CPX #3 : BCC .fail
.checkIfObtained
LDA.l MC_DungeonIdsForPrize, X
BPL +++ : CLC : BRA .done : +++ ; non-prize flags
CMP.b #$02 : BCC .hyrule_castle
ASL : TAX
REP #$20
LDA.l DungeonsCompleted : AND.l DungeonItemMasks,X : BNE .fail
CLC : BRA .done
; see if hyrule castle has been completely cleared
.hyrule_castle
LDA.l CompassTotalsWRAM, X : SEC : SBC DungeonLocationsChecked, X : BEQ .fail
CLC : BRA .done
.fail
SEC
.done
SEP #$20
PLX
RTS
; X - which compass in question
; CLC - should not move indicator
; SEC - yep indicator can move
OverworldMap_CheckForCompass:
LDA.l CompassMode : AND #$80 : BEQ .unset ; should I check for compass logic
LDA.l CompassMode : AND #$40 : BEQ .set ; compasses/maps aren't shuffled
LDA.l CompassMode : AND #$20 : BNE +
JSR OverworldMap_CheckForMap : BCC .unset : BRA .set
+ LDA.l CompassExists, X : BEQ .set ; compass doesn't exist
PHX
LDA.l MC_SRAM_Offsets, X : TAX ; put compass offset into X
LDA CompassField, X : ORA MapOverlay, X
PLX
AND.l MC_Masks, X : BNE .set ; is the compass obtained
.unset
CLC
RTS
.set
SEC
RTS
; map - which map in question
; CLC - should not show exact prize
; SEC - yep should show exact prize
OverworldMap_CheckForMap:
LDA.l MapMode : BEQ .set ; obtaining map doesn't change anything
LDA CurrentWorld : AND #$40 : BNE + ; not really sure on this check
LDA MapField : ORA MapOverlay : AND.b #$01 : BNE .set : BRA .continue
+ LDA MapField : ORA MapOverlay : AND.b #$02 : BNE .set
.continue
PHX
LDA.l MC_SRAM_Offsets, X : TAX ; put map offset into X
LDA MapField, X : ORA MapOverlay, X
PLX
AND.l MC_Masks, X : BNE .set ; is the map obtained?
.unset
CLC
RTS
.set
SEC
RTS
pullpc

View File

@@ -1,7 +1,7 @@
Module_Password: Module_Password:
LDA.b GameSubMode LDA.b GameSubMode
JSL.l UseImplicitRegIndexedLongJumpTable JSL.l JumpTableLong
dl Password_BeginInit ; 0 dl Password_BeginInit ; 0
dl Password_EndInit ; 1 dl Password_EndInit ; 1

View File

@@ -51,70 +51,6 @@ GetCrystalNumber:
PLX PLX
RTL RTL
;================================================================================ ;================================================================================
OverworldMap_CheckObject:
PHX
;CPX.b #$01 : BNE + : JMP ++ : + : JMP .fail
LDA.l CurrentWorld : AND.b #$40 : BNE +
;LW Map
LDA.l MapMode : BEQ +++
LDA.l MapField : ORA.l MapOverlay : AND.b #$01 : BNE +++
PHX
LDA.l .lw_map_offsets, X : TAX ; put map offset into X
LDA.l MapField, X : ORA.l MapOverlay, X
PLX
AND.l .lw_map_masks, X : BNE +++
JMP .fail
+++
LDA.l .lw_offsets, X
BPL +++ : CLC : BRA .done : +++ ; don't display master sword
TAX : BRA ++
+
;DW Map
LDA.l MapMode : BEQ +++
LDA.l MapField : ORA.l MapOverlay : AND.b #$02 : BNE +++
PHX
LDA.l .dw_map_offsets, X : TAX ; put map offset into X
LDA.l MapField, X : ORA.l MapOverlay, X
PLX
AND.l .dw_map_masks, X : BNE +++
JMP .fail
+++
LDA.l .dw_offsets, X
TAX : BRA ++
SEC
PLX
RTL
++
LDA.l CrystalPendantFlags_2, X
AND.b #$40 : BNE .checkCrystal
.checkPendant
LDA.l PendantsField : AND.l CrystalPendantFlags, X : BNE .fail
CLC : BRA .done
.checkCrystal
LDA.l CrystalsField : AND.l CrystalPendantFlags, X : BNE .fail
CLC : BRA .done
.fail
SEC
.done
PLX
RTL
.lw_offsets
db $02, $0A, $03, $FF
.dw_offsets
db $06, $08, $0C, $0B, $07, $09, $05
.lw_map_offsets
db $01, $00, $01
; pod skull trock thieves mire ice swamp
.dw_map_offsets
db $01, $00, $00, $00, $01, $00, $01
.lw_map_masks
db $20, $20, $10, $00
.dw_map_masks
db $02, $80, $08, $10, $01, $40, $04
;================================================================================
SetLWDWMap: SetLWDWMap:
PHP PHP
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
@@ -175,7 +111,7 @@ CheckCloseItemMenu:
LDA.l MenuCollapse : BNE + LDA.l MenuCollapse : BNE +
LDA.b Joy1A_New : AND.b #$10 : RTL LDA.b Joy1A_New : AND.b #$10 : RTL
+ +
LDA.b Joy1A_All : AND.b #$10 : EOR.b #$10 LDA.b Joy1A_All : EOR.b #$10
RTL RTL
;================================================================================ ;================================================================================
ShowDungeonItems: ShowDungeonItems:
@@ -187,19 +123,23 @@ ShowDungeonItems:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
UpdateKeys: UpdateKeys:
PHX : PHP PHX : PHP
SEP #$30 ; set 8-bit accumulator & index registers SEP #$30 ; set 8-bit accumulator & index registers
LDA.w DungeonID : CMP.b #$1F : !BGE .skip LDA.w DungeonID : CMP.b #$1F : !BLT .skip
LSR : TAX ; get dungeon index and store to X
LDA.l CurrentSmallKeys : STA.l DungeonKeys, X
CPX.b #$00 : BNE + LSR : TAX ; get dungeon index and store to X
STA.l HyruleCastleKeys ; copy HC to sewers
+ : CPX.b #$01 : BNE + LDA.l CurrentSmallKeys ; load current key count
STA.l SewerKeys ; copy sewers to HC STA.l DungeonKeys, X ; save to main counts
+
.skip CPX.b #$00 : BNE +
PLP : PLX STA.l HyruleCastleKeys ; copy HC to sewers
+ : CPX.b #$01 : BNE +
STA.l SewerKeys ; copy sewers to HC
+
.skip
JSL.l PostItemGet
PLP : PLX
RTL RTL
;$37C = Sewer Passage ;$37C = Sewer Passage
;$37D = Hyrule Castle ;$37D = Hyrule Castle
@@ -284,7 +224,7 @@ DrawHUDDungeonItems:
.dungeon_bitmasks .dungeon_bitmasks
dw $4000 ; Hyrule Castle dw $C000 ; Hyrule Castle
dw $2000 ; Eastern dw $2000 ; Eastern
dw $1000 ; Desert dw $1000 ; Desert
dw $0020 ; Hera dw $0020 ; Hera
@@ -690,3 +630,38 @@ RestoreMenu_SetSubModule:
LDA.b #$03 : STA.w SubModuleInterface LDA.b #$03 : STA.w SubModuleInterface
RTL RTL
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
DrawHeartPiecesMenu:
LDA.l HUDHeartColors_index : AND.w #$00FF
ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
STA.b Scrap0D
LDA.l HeartPieceQuarter : AND.w #$00FF
ASL #3 : TAX
LDY.w #$16F2
LDA.l HeartPieceMenuBaseTiles,X
ORA.b Scrap0D
STA.w $0000,Y
INX #2
LDA.l HeartPieceMenuBaseTiles,X
ORA.b Scrap0D
STA.w $0002,Y
INX #2
LDA.l HeartPieceMenuBaseTiles,X
ORA.b Scrap0D
STA.w $0040,Y
INX #2
LDA.l HeartPieceMenuBaseTiles,X
ORA.b Scrap0D
STA.w $0042,Y
RTL
HeartPieceMenuBaseTiles:
dw $2084, $6084, $2085, $6085 ; 0 heart pieces
dw $20AD, $6084, $2085, $6085 ; 1 heart piece
dw $20AD, $6084, $20AE, $6085 ; 2 heart pieces
dw $20AD, $60AD, $20AE, $6085 ; 3 heart pieces

View File

@@ -26,7 +26,7 @@ WriteCharacterToPlayerName:
RTL RTL
ReadCharacterFromPlayerName: ;Only for use on Name Screen ReadCharacterFromPlayerName: ;Only for use on Name Screen
LDA.l ExtendedFileNameSRAM, X LDA.l ExtendedFileNameSRAM, X
CPX.w #$0008 : !BGE + CPX.w #$0008 : !BGE +
LDA.l FileNameVanillaSRAM, X ;what we wrote over LDA.l FileNameVanillaSRAM, X ;what we wrote over
+ +
@@ -59,7 +59,7 @@ db $98, $a0, $a8, $b0
db $c0, $c8, $d0, $d8 db $c0, $c8, $d0, $d8
NumberStripes: NewNameStripes:
dw $AB66, $1100 ; 0-4 top dw $AB66, $1100 ; 0-4 top
dw $1D40, $0188, $1D41, $0188, $1D42, $0188, $1D43, $0188 dw $1D40, $0188, $1D41, $0188, $1D42, $0188, $1D43, $0188
dw $1D44 dw $1D44
@@ -72,15 +72,36 @@ dw $1D49
dw $0B67, $1100 ; 5-9 bottom dw $0B67, $1100 ; 5-9 bottom
dw $1D55, $0188, $1D56, $0188, $1D57, $0188, $1D58, $0188 dw $1D55, $0188, $1D56, $0188, $1D57, $0188, $1D58, $0188
dw $1D59 dw $1D59
; Move JP characters where a-z are to column where second END button was
dw $B162, $1100
dw $1CEE, $0188, $1CEF, $0188, $1D05, $0188, $1D06, $0188
dw $1D07
dw $D162, $1100
dw $1CFE, $0188, $1CFF, $0188, $1D15, $0188, $1D16, $0188
dw $1D17
dw $F162, $1100
dw $1D0D, $0188, $1D0E, $0188, $1D0F, $0188, $1D20, $0188
dw $1D21
dw $1163, $1100
dw $1D1D, $0188, $1D1E, $0188, $1D1F, $0188, $1D30, $0188
dw $1D31
dw $3163, $1100
dw $1D22, $0188, $1D23, $0188, $1D24, $0188, $1D25, $0188
dw $1D26
dw $5163, $1100
dw $1D32, $0188, $1D33, $0188, $1D34, $0188, $1D35, $0188
dw $1D36
db $80 ; termination db $80 ; termination
TransferNumericStripes: TransferNewNameStripes:
REP #$30 REP #$30
LDA.w GameMode : CMP.w #$0204 : BNE .exit LDA.w GameMode : CMP.w #$0204 : BNE .exit
SEP #$20 SEP #$20
LDA.b #NumberStripes>>0 : STA.b $00 LDA.b #NewNameStripes>>0 : STA.b $00
LDA.b #NumberStripes>>8 : STA.b $01 LDA.b #NewNameStripes>>8 : STA.b $01
LDA.b #NumberStripes>>16 : STA.b $02 : STA.w DMA1ADDRB LDA.b #NewNameStripes>>16 : STA.b $02 : STA.w DMA1ADDRB
STZ.b $06 : LDY.w #$0000 STZ.b $06 : LDY.w #$0000
.check_next .check_next
LDA.b [$00],Y : BPL .next_stripe LDA.b [$00],Y : BPL .next_stripe

View File

@@ -11,7 +11,7 @@ QuickSwap:
LDA.l QuickSwapFlag : BEQ .done LDA.l QuickSwapFlag : BEQ .done
LDA.w ItemCursor : BEQ .done ; Skip everything if we don't have any items LDA.w ItemCursor : BEQ .done ; Skip everything if we don't have any items
LDY.b #$14 LDY.b #$14
PHX PHX
XBA ; restore the stashed value XBA ; restore the stashed value
CMP.b #$30 : BNE + CMP.b #$30 : BNE +

65
ram.asm
View File

@@ -48,6 +48,8 @@ NMIHUD = $7E0016 ; during NMI.
NMIINCR = $7E0017 ; NMIINCR = $7E0017 ;
NMIUP1100 = $7E0018 ; NMIUP1100 = $7E0018 ;
UPINCVH = $7E0019 ; Incremental upload VRAM high byte UPINCVH = $7E0019 ; Incremental upload VRAM high byte
LinkAbsoluteY = $7E0020 ; Link's absolute coordinates. Word length
LinkAbsoluteX = $7E0022 ;
FrameCounter = $7E001A ; Increments every frame that the game isn't lagging FrameCounter = $7E001A ; Increments every frame that the game isn't lagging
IndoorsFlag = $7E001B ; $00 = Outdoors | $01 = Indoors IndoorsFlag = $7E001B ; $00 = Outdoors | $01 = Indoors
MAINDESQ = $7E001C ; PPU register queues written during NMI MAINDESQ = $7E001C ; PPU register queues written during NMI
@@ -186,6 +188,15 @@ RaceGameFlag = $7E021B ;
; ;
MessageJunk = $7E0223 ; Zeroed but never used (?) MessageJunk = $7E0223 ; Zeroed but never used (?)
; ;
ShopPurchaseFlag = $7E0224 ; $01 = Shop purchase item receipt.
;CoolScratch = $7E0224 ; 0x5C bytes of free ram
ItemQueuePtr = $7E0226 ; Pointer into Item GFX and VRAM target queues. Word length.
SpriteID = $7E0230 ; 0x0A bytes. Receipt ID for main loop sprite we're handling.
ItemGFXQueue = $7E0230 ; Pointers to decompressed item tiles deferred to NMI loading. $10 bytes
ItemTargetQueue = $7E0240 ; Pointers to VRAM targets for ItemGFXQueue. $10 bytes
AncillaVelocityZ = $7E0294 ; 0x0A bytes
AncillaZCoord = $7E029E ; 0x0A bytes
;
ItemReceiptID = $7E02D8 ; ItemReceiptID = $7E02D8 ;
ItemReceiptPose = $7E02DA ; $00 = No pose | $01 = One hand up | $02 = Two hands up ItemReceiptPose = $7E02DA ; $00 = No pose | $01 = One hand up | $02 = Two hands up
; ;
@@ -193,7 +204,7 @@ BunnyFlag = $7E02E0 ; $00 = Link | $01 = Bunny
Poofing = $7E02E1 ; Flags cape and bunny poof. Poofing = $7E02E1 ; Flags cape and bunny poof.
PoofTimer = $7E02E2 ; Countdown timer for poofing. PoofTimer = $7E02E2 ; Countdown timer for poofing.
SwordCooldown = $7E02E3 ; Cooldown for sword after dashing through an enemy. SwordCooldown = $7E02E3 ; Cooldown for sword after dashing through an enemy.
CutsceneFlag = $7E02E4 ; Flags various cutscenes. All non-zero behave the same. CutsceneFlag = $7E02E4 ; Flags various cutscenes.
; ;
ItemReceiptMethod = $7E02E9 ; ItemReceiptMethod = $7E02E9 ;
; ;
@@ -221,6 +232,8 @@ NoDamage = $7E037B ; Prevents Link from receiving damage.
; ;
AncillaGeneral = $7E039F ; General use buffer for front slot ancillae. $0F bytes. AncillaGeneral = $7E039F ; General use buffer for front slot ancillae. $0F bytes.
; ;
AncillaTimer = $7E03B1 ; Used as a timer for ancilla.
;
AncillaSearch = $7E03C4 ; Used to search through ancilla when every front slot is occupied. AncillaSearch = $7E03C4 ; Used to search through ancilla when every front slot is occupied.
; ;
ForceSwordUp = $7E03EF ; $01 = Force sword up pose. ForceSwordUp = $7E03EF ; $01 = Force sword up pose.
@@ -228,7 +241,7 @@ FluteTimer = $7E03F0 ; Countdown timer for being able to use the fl
; ;
YButtonOverride = $7E03FC ; Y override for minigames. $00 = Selected item | $01 = Shovel | $02 = Bow YButtonOverride = $7E03FC ; Y override for minigames. $00 = Selected item | $01 = Shovel | $02 = Bow
; ;
ItemsTaken = $7E0403 ; Items taken in a room: b k u t s e h c RoomItemsTaken = $7E0403 ; Items taken in a room: b k u t s e h c
; b = boss kill/item | k = key/heart piece (prevents crystals) ; b = boss kill/item | k = key/heart piece (prevents crystals)
; u = 2nd key/heart piece | t = chest 4/rupees/swamp drain/bomb floor/mire wall ; u = 2nd key/heart piece | t = chest 4/rupees/swamp drain/bomb floor/mire wall
; s = chest 3/pod or dp wall | e, h, c = chest 2, 1, 0 ; s = chest 3/pod or dp wall | e, h, c = chest 2, 1, 0
@@ -262,8 +275,19 @@ TileMapTile32 = $7E0698 ; Tilemap location of new tile32 objects, such
SkipOAM = $7E0710 ; Set to skip OAM updates. High byte written $FF with exploding walls SkipOAM = $7E0710 ; Set to skip OAM updates. High byte written $FF with exploding walls
OWScreenSize = $7E0712 ; Flags overworld screen size. OWScreenSize = $7E0712 ; Flags overworld screen size.
; ;
OAMBuffer = $7E0800 ; Main OAM buffer sent to OAM. $200 bytes.
OAMBuffer2 = $7E0A00 ;
;
TransparencyFlag = $7E0ABD ; Flags transparency effects e.g. in Thieves Town Hellway
;
OWTransitionFlag = $7E0ABF ; Used for certain transitions like smith, witch, etc. OWTransitionFlag = $7E0ABF ; Used for certain transitions like smith, witch, etc.
; ;
ItemGFXPtr = $7E0AFA ; Pointer for item receipt graphics transfers
; $0000 - no transfer, do nothing
; bit 7 reset - offset into ROM table
; bit 7 set - explicit bank7 address
ItemGFXTarget = $7E0AFC ; target VRAM address
;
ArcVariable = $7E0B08 ; Arc variable. Word length. ArcVariable = $7E0B08 ; Arc variable. Word length.
OverlordXLow = $7E0B08 ; $08 bytes. OverlordXLow = $7E0B08 ; $08 bytes.
OverlordXHigh = $7E0B10 ; $08 bytes. OverlordXHigh = $7E0B10 ; $08 bytes.
@@ -279,6 +303,11 @@ SaveFileIndex = $7E0B9D ;
; ;
SpriteAncillaInteract = $7E0BA0 ; If nonzero, ancillae do not interact with the sprite. $10 bytes. SpriteAncillaInteract = $7E0BA0 ; If nonzero, ancillae do not interact with the sprite. $10 bytes.
; ;
AncillaCoordYLow = $7E0BFA ;
AncillaCoordXLow = $7E0C04 ;
AncillaCoordYHigh = $7E0C0E ;
AncillaCoordXHigh = $7E0C18 ;
;
AncillaVelocityY = $7E0C22 ; $0A bytes. AncillaVelocityY = $7E0C22 ; $0A bytes.
AncillaVelocityX = $7E0C2C ; $0A bytes. AncillaVelocityX = $7E0C2C ; $0A bytes.
; ;
@@ -286,6 +315,8 @@ AncillaID = $7E0C4A ; $0A bytes.
; ;
AncillaGet = $7E0C5E ; Used by varius ancilla in various ways. $0F bytes. AncillaGet = $7E0C5E ; Used by varius ancilla in various ways. $0F bytes.
; ;
AncillaLayer = $7E0C7C ;
;
SpriteBump = $7E0CD2 ; See symbols_wram.asm. $10 bytes. SpriteBump = $7E0CD2 ; See symbols_wram.asm. $10 bytes.
; ;
TreePullKills = $7E0CFB ; Kills for tree pulls. TreePullKills = $7E0CFB ; Kills for tree pulls.
@@ -316,7 +347,7 @@ SpriteOAMProperties = $7E0E40 ; h m w o o o o o | h = Harmless | m = m
SpriteHitPoints = $7E0E50 ; Set from $0DB173 SpriteHitPoints = $7E0E50 ; Set from $0DB173
SpriteControl = $7E0E60 ; n i o s p p p t | n = Death animation? | i = Immune to attack/collion? SpriteControl = $7E0E60 ; n i o s p p p t | n = Death animation? | i = Immune to attack/collion?
; o = Shadow | p = OAM prop palette | t = OAM prop name table ; o = Shadow | p = OAM prop palette | t = OAM prop name table
SpriteItemType = $7E0E80 ; Sprite Item Type. $10 bytes. SpriteItemType = $7E0E80 ; Sprite Item Type. Also used for jump table local. $10 bytes.
; ;
SpriteSpawnStep = $7E0ED0 ; Related to enemies spawning other sprites (eg pikit, zirro) SpriteSpawnStep = $7E0ED0 ; Related to enemies spawning other sprites (eg pikit, zirro)
; ;
@@ -333,6 +364,8 @@ SpriteZCoord = $7E0F70 ;
SpriteVelocityZ = $7E0F80 ; SpriteVelocityZ = $7E0F80 ;
SpriteSubPixelZ = $7E0F90 ; SpriteSubPixelZ = $7E0F90 ;
; ;
CurrentSpriteSlot = $7E0FA0 ; Holds the current sprite/ancilla's index
;
FreezeSprites = $7E0FC1 ; "Seems to freeze sprites" FreezeSprites = $7E0FC1 ; "Seems to freeze sprites"
; ;
PrizePackIndexes = $7E0FC7 ; $07 bytes. One for each prize pack. PrizePackIndexes = $7E0FC7 ; $07 bytes. One for each prize pack.
@@ -383,6 +416,8 @@ ScratchBufferV = $7E1EB0 ; Volatile scratch buffer. Can clobber at will
TileUploadBuffer = $7EA180 ; 0x300 bytes TileUploadBuffer = $7EA180 ; 0x300 bytes
; ;
ItemGetGFX = $7EBD40 ; Item receipt graphics location
;
RoomFade = $7EC005 ; Flags fade to black on room transitions. Word length. RoomFade = $7EC005 ; Flags fade to black on room transitions. Word length.
FadeTimer = $7EC007 ; Timer for transition fading and mosaics. Word length. FadeTimer = $7EC007 ; Timer for transition fading and mosaics. Word length.
FadeDirection = $7EC009 ; Word length FadeDirection = $7EC009 ; Word length
@@ -448,6 +483,9 @@ TotalItemCountTiles = $7ECB00 ; Cached total item count tiles for HUD. Four
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DecompressionBuffer = $7F0000 ; Decompression Buffer. $2000 bytes. DecompressionBuffer = $7F0000 ; Decompression Buffer. $2000 bytes.
DecompBuffer2 = $7F4000 ; Another buffer
base $7F5000 base $7F5000
RedrawFlag: skip 1 ; RedrawFlag: skip 1 ;
skip 2 ; Unused skip 2 ; Unused
@@ -464,15 +502,16 @@ BossKills: skip 1 ;
LagTime: skip 4 ; Computed during stats preparation for display LagTime: skip 4 ; Computed during stats preparation for display
RupeesCollected: skip 2 ; Computed during stats preparation for display RupeesCollected: skip 2 ; Computed during stats preparation for display
NonChestCounter: skip 2 ; Computed during stats preparation for display NonChestCounter: skip 2 ; Computed during stats preparation for display
skip 2 ; Unused BowTrackingFlags: skip 2 ; Stores tracking bits for progressive bows before resolution to concrete item.
TileUploadOffsetOverride: skip 2 ; Offset override for loading sprite gfx TileUploadOffsetOverride: skip 2 ; Offset override for loading sprite gfx
skip 3 ; skip 3 ;
skip 9 ; skip 9 ;
; Shop Block $7F5050 - $7F506F ; Shop Block $7F5050 - $7F506F
ShopId: skip 1 ; Shop ID. Used for indexing and loading inventory for custom shops ShopId: skip 1 ; Shop ID. Used for indexing and loading inventory for custom shops
ShopType: skip 1 ; Shop type. $FF = vanilla shop ShopType: skip 1 ; Shop type. $FF = vanilla shop
; t - - - - - - - ; t d a v - - q q
; t = Take-any ; t = $01 - Take-any | d = $01 - Door check | a = $01 = Take-all
; v = Use alt vram | q = Number of items
ShopInventory: skip $0D ; For three possible shop items, row major: ShopInventory: skip $0D ; For three possible shop items, row major:
; [Item ID][Price low][Price High][Purchase Count] ; [Item ID][Price low][Price High][Purchase Count]
ShopState: skip 1 ; - - - - - l c r | Bitfield that determines whether to draw an item ShopState: skip 1 ; - - - - - l c r | Bitfield that determines whether to draw an item
@@ -551,13 +590,17 @@ CompassTotalsWRAM: skip $10 ; \ Compass and map dungeon HUD display total
MapTotalsWRAM: skip $10 ; / on boot for tracking. MapTotalsWRAM: skip $10 ; / on boot for tracking.
skip $30 ; Reserved for general dungeon tracking data. May have over skip $30 ; Reserved for general dungeon tracking data. May have over
; allocated here. Feel free to reassign. ; allocated here. Feel free to reassign.
skip $40 ; Unused MapCompassFlag: skip 2 ; Used to flag overworld map drawing.
skip $3E ; Unused
skip $260 ; Unused skip $260 ; Unused
DialogBuffer: skip $100 ; Dialog Buffer DialogBuffer: skip $100 ; Dialog Buffer
; ;
PrivateBlockWRAM = $7F7700 ; Reserved for 3rd party use. $500 bytes. PrivateBlockWRAM = $7F7700 ; Reserved for 3rd party use. $500 bytes.
; See also: $200 bytes at PrivateBlockPersistent, copied to SRAM. ; See also: $200 bytes at PrivateBlockPersistent, copied to SRAM.
BigDecompressionBuffer = $7F8000 ; Reserved for large gfx decompression buffer. $5000 bytes. BigDecompressionBuffer = $7F8000 ; Reserved for large gfx decompression buffer. $5000 bytes.
; KEEP THIS AT $8000+
; its location at an address with bit 7 set is used for detecting
; ROM location versus RAM locations
; ;
MiniGameTime = $7FFE00 ; Time spent in mini game. 32-bits. MiniGameTime = $7FFE00 ; Time spent in mini game. 32-bits.
MiniGameTimeFinal = $7FFE04 ; Final mini game time. 32 bits. MiniGameTimeFinal = $7FFE04 ; Final mini game time. 32 bits.
@@ -706,7 +749,7 @@ endmacro
%assertRAM(ForceSwordUp, $7E03EF) %assertRAM(ForceSwordUp, $7E03EF)
%assertRAM(FluteTimer, $7E03F0) %assertRAM(FluteTimer, $7E03F0)
%assertRAM(YButtonOverride, $7E03FC) %assertRAM(YButtonOverride, $7E03FC)
%assertRAM(ItemsTaken, $7E0403) %assertRAM(RoomItemsTaken, $7E0403)
%assertRAM(DungeonID, $7E040C) %assertRAM(DungeonID, $7E040C)
%assertRAM(LayerAdjustment, $7E047A) %assertRAM(LayerAdjustment, $7E047A)
%assertRAM(RoomIndexMirror, $7E048E) %assertRAM(RoomIndexMirror, $7E048E)
@@ -725,6 +768,9 @@ endmacro
%assertRAM(TileMapTile32, $7E0698) %assertRAM(TileMapTile32, $7E0698)
%assertRAM(SkipOAM, $7E0710) %assertRAM(SkipOAM, $7E0710)
%assertRAM(OWScreenSize, $7E0712) %assertRAM(OWScreenSize, $7E0712)
%assertRAM(OAMBuffer, $7E0800)
%assertRAM(OAMBuffer2, $7E0A00)
%assertRAM(TransparencyFlag, $7E0ABD)
%assertRAM(OWTransitionFlag, $7E0ABF) %assertRAM(OWTransitionFlag, $7E0ABF)
%assertRAM(TreePullKills, $7E0CFB) %assertRAM(TreePullKills, $7E0CFB)
%assertRAM(TreePullHits, $7E0CFC) %assertRAM(TreePullHits, $7E0CFC)
@@ -741,6 +787,7 @@ endmacro
%assertRAM(AncillaVelocityX, $7E0C2C) %assertRAM(AncillaVelocityX, $7E0C2C)
%assertRAM(AncillaID, $7E0C4A) %assertRAM(AncillaID, $7E0C4A)
%assertRAM(AncillaGet, $7E0C5E) %assertRAM(AncillaGet, $7E0C5E)
%assertRAM(AncillaLayer, $7E0C7C)
%assertRAM(SpriteBump, $7E0CD2) %assertRAM(SpriteBump, $7E0CD2)
%assertRAM(SpritePosYLow, $7E0D00) %assertRAM(SpritePosYLow, $7E0D00)
%assertRAM(SpritePosXLow, $7E0D10) %assertRAM(SpritePosXLow, $7E0D10)
@@ -799,6 +846,7 @@ endmacro
%assertRAM(SpriteZCoord, $7E0F70) %assertRAM(SpriteZCoord, $7E0F70)
%assertRAM(SpriteVelocityZ, $7E0F80) %assertRAM(SpriteVelocityZ, $7E0F80)
%assertRAM(SpriteSubPixelZ, $7E0F90) %assertRAM(SpriteSubPixelZ, $7E0F90)
%assertRAM(CurrentSpriteSlot, $7E0FA0)
%assertRAM(FreezeSprites, $7E0FC1) %assertRAM(FreezeSprites, $7E0FC1)
%assertRAM(PrizePackIndexes, $7E0FC7) %assertRAM(PrizePackIndexes, $7E0FC7)
%assertRAM(SpriteCoordCacheX, $7E0FD8) %assertRAM(SpriteCoordCacheX, $7E0FD8)
@@ -918,6 +966,7 @@ endmacro
%assertRAM(TxStatus, $7F53FF) %assertRAM(TxStatus, $7F53FF)
%assertRAM(CompassTotalsWRAM, $7F5410) %assertRAM(CompassTotalsWRAM, $7F5410)
%assertRAM(MapTotalsWRAM, $7F5420) %assertRAM(MapTotalsWRAM, $7F5420)
%assertRAM(MapCompassFlag, $7F5460)
%assertRAM(DialogBuffer, $7F5700) %assertRAM(DialogBuffer, $7F5700)
%assertRAM(MiniGameTime, $7FFE00) %assertRAM(MiniGameTime, $7FFE00)
%assertRAM(MiniGameTimeFinal, $7FFE04) %assertRAM(MiniGameTimeFinal, $7FFE04)

View File

@@ -21,7 +21,7 @@ RigChestRNG:
RTL RTL
.forceHeart .forceHeart
LDA.b #$33 : STA.b ScrapBufferBD+$0B ; assure the correct state if player talked to shopkeeper LDA.b #$33 : STA.b ScrapBufferBD+$0B ; assure the correct state if player talked to shopkeeper
LDA.w ItemsTaken : AND.b #$40 : BNE .notHeart LDA.w RoomItemsTaken : AND.b #$40 : BNE .notHeart
LDA.b #$07 ; give prize item LDA.b #$07 ; give prize item
RTL RTL
.notHeart .notHeart
@@ -35,9 +35,8 @@ RTL
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
FixChestCounterForChestGame: FixChestCounterForChestGame:
JSL.l DecrementItemCounter JSL DecrementItemCounter
JSL.l $0DBA71 JML $8DBA71
RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
RNG_Lanmolas1: RNG_Lanmolas1:
LDA.b #$00 : BRA _rng_done LDA.b #$00 : BRA _rng_done
@@ -129,20 +128,20 @@ InitRNGPointerTable:
PLP : PLX PLP : PLX
RTL RTL
.rngDefaults .rngDefaults
dw #$0000 ; 00 = Lanmolas 1 dw $0000 ; 00 = Lanmolas 1
dw #$0040 ; 01 = Moldorm 1 dw $0040 ; 01 = Moldorm 1
dw #$0080 ; 02 = Agahnim 1 dw $0080 ; 02 = Agahnim 1
dw #$00C0 ; 03 = Helmasaur dw $00C0 ; 03 = Helmasaur
dw #$0100 ; 04 = Arrghus dw $0100 ; 04 = Arrghus
dw #$0140 ; 05 = Mothula dw $0140 ; 05 = Mothula
dw #$0180 ; 06 = Kholdstare dw $0180 ; 06 = Kholdstare
dw #$01C0 ; 07 = Vitreous dw $01C0 ; 07 = Vitreous
dw #$0200 ; 08 = Trinexx dw $0200 ; 08 = Trinexx
dw #$0240 ; 09 = Lanmolas 2 dw $0240 ; 09 = Lanmolas 2
dw #$0280 ; 10 = Moldorm 2 dw $0280 ; 10 = Moldorm 2
dw #$02C0 ; 11 = Agahnim 2 dw $02C0 ; 11 = Agahnim 2
dw #$0300 ; 12 = Agahnim 2 Phantoms dw $0300 ; 12 = Agahnim 2 Phantoms
dw #$0340 ; 13 = Ganon dw $0340 ; 13 = Ganon
dw #$0380 ; 14 = Ganon Extra Warp dw $0380 ; 14 = Ganon Extra Warp
dw #$03C0 ; 15 = Standard Escape Enemy Drops dw $03C0 ; 15 = Standard Escape Enemy Drops
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------

View File

@@ -7,7 +7,7 @@ LoadRoomHook:
LDX.b RoomIndex ; Room ID LDX.b RoomIndex ; Room ID
LDA.l RoomCallbackTable, X LDA.l RoomCallbackTable, X
SEP #$10 ; 8 bit XY SEP #$10 ; 8 bit XY
JSL UseImplicitRegIndexedLongJumpTable JSL JumpTableLong
; Callback routines: ; Callback routines:
dl NoCallback ; 00 dl NoCallback ; 00
dl IcePalaceBombosSE ; 01 dl IcePalaceBombosSE ; 01

175
save.asm
View File

@@ -1,60 +1,74 @@
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
WriteSaveChecksumAndBackup: WriteSaveChecksumAndBackup:
LDX.w #$0000 : TXA : - ; Checksum first $04FE bytes TDC
CLC : ADC.l SaveDataWRAM, X CLC
INX #2 LDX.w #$004FC
CPX.w #$04FE : BNE - -
LDX.w #$0000 : - ; Checksum extended save data ADC.l CartridgeSRAM, X
CLC : ADC.l ExtendedFileNameWRAM, X DEX #2
INX #2 BPL -
CPX.w #$0FFE : BNE - LDX.w #$0FFE
-
ADC.l ExtendedFileNameSRAM, X
DEX #2
BPL -
STA.b Scrap00 STA.b Scrap00
LDA.w #$5A5A LDA.w #$5A5A
SEC : SBC.b Scrap00 SEC : SBC.b Scrap00
STA.l InverseChecksumSRAM STA.l InverseChecksumSRAM
.backup_save
PHB PHB
LDA.w #$14FF ; \ LDA.w #$14FF
LDX.w #CartridgeSRAM&$FFFF ; | Copies $1500 bytes from beginning of cart SRAM to LDX.w #CartridgeSRAM
LDY.w #SaveBackupSRAM&$FFFF ; | $704000 LDY.w #SaveBackupSRAM
MVN !SRAMBank, !SRAMBank ; / MVN CartridgeSRAM>>16, CartridgeSRAM>>16
PLB PLB
TDC
TAX
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
ValidateSRAM: ValidateSRAM:
REP #$30 REP #$30
LDX.w #$0000 : TXA : - ; Checksum first $04FE bytes TDC
CLC : ADC.l CartridgeSRAM, X CLC
INX #2 LDX.w #$04FC
CPX.w #$04FE : BNE - -
LDX.w #$0000 : - ; Checksum extended save data ADC.l CartridgeSRAM, X
CLC : ADC.l ExtendedFileNameSRAM, X DEX #2
INX #2 BPL -
CPX.w #$0FFE : BNE - LDX.w #$0FFE
-
ADC.l ExtendedFileNameSRAM, X
DEX #2
BPL -
STA.b Scrap00 STA.b Scrap00
LDA.w #$5A5A LDA.w #$5A5A
SEC : SBC.b Scrap00 SEC : SBC.b Scrap00
CMP.l InverseChecksumSRAM : BEQ .goodchecksum CMP.l InverseChecksumSRAM : BEQ .goodchecksum
LDX.w #$0000 : TXA : - ; Do the same for the backup save TDC
CLC : ADC.l SaveBackupSRAM, X LDX.w #$04FC
INX #2 -
CPX.w #$04FE : BNE - ADC.l SaveBackupSRAM, X
LDX.w #$0000 : - DEX #2
CLC : ADC.l SaveBackupSRAM+$500, X BPL -
INX #2 LDX.w #$0FFE
CPX.w #$0FFE : BNE - -
ADC.l SaveBackupSRAM+$500, X
DEX #2
BPL -
STA.b Scrap00 STA.b Scrap00
LDA.w #$5A5A LDA.w #$5A5A
SEC : SBC.b Scrap00 SEC : SBC.b Scrap00
CMP.l SaveBackupSRAM+$4FE : BEQ + CMP.l SaveBackupSRAM+$4FE : BEQ +
TDC : STA.l FileValiditySRAM ; Delete save by way of zeroing validity marker TDC : STA.l FileValiditySRAM ; Delete save
BRA .goodchecksum : + BRA .goodchecksum
+
PHB PHB
LDA.w #$14FF ; \ LDA.w #$14FF
LDX.w #SaveBackupSRAM&$FFFF ; | Copies $1500 bytes from backup on cart SRAM to LDX.w #SaveBackupSRAM
LDY.w #CartridgeSRAM&$FFFF ; | main save location at $700000 LDY.w #CartridgeSRAM
MVN !SRAMBank, !SRAMBank ; / MVN CartridgeSRAM>>16, CartridgeSRAM>>16
PLB PLB
.goodchecksum .goodchecksum
@@ -146,88 +160,23 @@ RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CopyExtendedSaveFileToWRAM: CopyExtendedSaveFileToWRAM:
PHA PHA
SEP #$30 PHB
LDA.w DMAP0 : PHA ; preserve DMA parameters LDA.w #$0FFF
LDA.w BBAD0 : PHA ; preserve DMA parameters LDX.w #ExtendedSaveDataSRAM
LDA.w A1T0L : PHA ; preserve DMA parameters LDY.w #ExtendedSaveDataWRAM
LDA.w A1T0H : PHA ; preserve DMA parameters MVN ExtendedSaveDataWRAM>>16, CartridgeSRAM>>16
LDA.w A1B0 : PHA ; preserve DMA parameters PLB
LDA.w DAS0L : PHA ; preserve DMA parameters
LDA.w DAS0H : PHA ; preserve DMA parameters
;--------------------------------------------------------------------------------
STZ.w NMITIMEN ; Disable NMI, V/H, joypad
STZ.w HDMAEN ; Disable HDMA
LDA.b #$00 : STA.w DMAP0 ; set DMA transfer direction A -> B, bus A auto increment, single-byte mode
LDA.b #$80 : STA.w BBAD0 ; set bus B source to WRAM register
LDA.b #$00 : STA.w WMADDL ; set WRAM register source address
LDA.b #$60 : STA.w WMADDH
LDA.b #$7F : STA.w WMADDB
STZ.w A1T0L ; set bus A destination address to SRAM
LDA.b #$05 : STA.w A1T0H
LDA.b #$70 : STA.w A1B0
LDA.b #$00 : STA.w DAS0L ; set transfer size to 0x1000
LDA.b #$10 : STA.w DAS0H ; STZ DAS0B
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
LDA.b #$81 : STA.w NMITIMEN ; Re-enable NMI and joypad
;--------------------------------------------------------------------------------
PLA : STA.w DAS0H ; restore DMA parameters
PLA : STA.w DAS0L ; restore DMA parameters
PLA : STA.w A1B0 ; restore DMA parameters
PLA : STA.w A1T0H ; restore DMA parameters
PLA : STA.w A1T0L ; restore DMA parameters
PLA : STA.w BBAD0 ; restore DMA parameters
PLA : STA.w DMAP0 ; restore DMA parameters
REP #$30
PLA PLA
STA.l $7EC00D ; what we wrote over STA.l $7EC00D ; What we wrote over. Keep this write last.
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CopyExtendedWRAMSaveFileToSRAM: CopyExtendedWRAMSaveFileToSRAM:
PHA
PHB PHB
SEP #$30 LDA.w #$0FFF
LDA.b #$00 : PHA : PLB LDX.w #ExtendedSaveDataSRAM
LDA.w DMAP0 : PHA ; preserve DMA parameters LDY.w #ExtendedSaveDataWRAM
LDA.w BBAD0 : PHA ; preserve DMA parameters MVN CartridgeSRAM>>16, ExtendedSaveDataWRAM>>16
LDA.w A1T0L : PHA ; preserve DMA parameters
LDA.w A1T0H : PHA ; preserve DMA parameters
LDA.w A1B0 : PHA ; preserve DMA parameters
LDA.w DAS0L : PHA ; preserve DMA parameters
LDA.w DAS0H : PHA ; preserve DMA parameters
;--------------------------------------------------------------------------------
STZ.w NMITIMEN ; Disable NMI, V/H, joypad
STZ.w HDMAEN ; Disable HDMA
LDA.b #$80 : STA.w DMAP0 ; set DMA transfer direction B -> A, bus A auto increment, single-byte mode
STA.w BBAD0 ; set bus B source to WRAM register
LDA.b #$00 : STA.w WMADDL ; set WRAM register source address
LDA.b #$60 : STA.w WMADDH
LDA.b #$7F : STA.w WMADDB
STZ.w A1T0L ; set bus A destination address to SRAM
LDA.b #$05 : STA.w A1T0H
LDA.b #$70 : STA.w A1B0
LDA.b #$10 : STA.w DAS0L ; set transfer size to 0xB00
LDA.b #$0B : STA.w DAS0H ; STZ DAS0B
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
LDA.b #$81 : STA.w NMITIMEN; Re-enable NMI and joypad
;--------------------------------------------------------------------------------
PLA : STA.w DAS0H ; restore DMA parameters
PLA : STA.w DAS0L ; restore DMA parameters
PLA : STA.w A1B0 ; restore DMA parameters
PLA : STA.w A1T0H ; restore DMA parameters
PLA : STA.w A1T0L ; restore DMA parameters
PLA : STA.w BBAD0 ; restore DMA parameters
PLA : STA.w DMAP0 ; restore DMA parameters
REP #$30
PLB PLB
PLA TDC
TAX
RTL RTL

View File

@@ -1,39 +1,7 @@
;--------------------------------------------------------------------------------
; 291 - Moldorm Cave
; 286 - Northeast Dark Swamp Cave
;--------------------------------------------------------------------------------
!FREE_TILE_BUFFER = $1180 !FREE_TILE_BUFFER = $1180
; A = Tile ID !FREE_TILE = $5C60
macro UploadOAM(dest) !FREE_TILE_ALT = $5A40
PHA : PHP
PHA
REP #$20 ; set 16-bit accumulator
LDA.w #$0000 : STA.l SpriteOAM
STA.l SpriteOAM+2
LDA.w #$0200 : STA.l SpriteOAM+6
SEP #$20 ; set 8-bit accumulator
LDA.b <dest> : STA.l SpriteOAM+4
LDA.b $01,s
JSL.l GetSpritePalette
STA.l SpriteOAM+5 : STA.l SpriteOAM+13
PLA
JSL.l IsNarrowSprite : BCS .narrow
BRA .done
.narrow
REP #$20 ; set 16-bit accumulator
LDA.w #$0000 : STA.l SpriteOAM+7
STA.l SpriteOAM+14
LDA.w #$0800 : STA.l SpriteOAM+9
LDA.w #$3400 : STA.l SpriteOAM+11
.done
PLP : PLA
endmacro
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; $0A : Digit Offset ; $0A : Digit Offset
; $0C-$0D : Value to Display ; $0C-$0D : Value to Display
@@ -162,10 +130,13 @@ SpritePrep_ShopKeeper:
PLY : +++ PLY : +++
PHX : PHY PHX : PHY
PHX : TYX : LDA.l ShopInventory, X : PLX : TAY PHX : TYX : LDA.l ShopInventory, X : PLX
REP #$20 ; set 16-bit accumulator SEP #$10
JSL.l ResolveLootIDLong
TAY
REP #$30
LDA.b 1,s : TAX : LDA.l .tile_offsets, X : TAX LDA.b 1,s : TAX : LDA.l .tile_offsets, X : TAX
JSR LoadTile JSR.w SetupTileTransfer
PLY : PLX PLY : PLX
INY #4 INY #4
@@ -173,10 +144,12 @@ SpritePrep_ShopKeeper:
INX #8 INX #8
JMP - JMP -
.stop .stop
REP #$20
LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA.w NMIAux+2 LDA.w ItemQueuePtr
LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA.w NMIAux+1 DEC #2
LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA.w NMIAux AND.w #$00E
STA.w ItemQueuePtr
SEP #$20
.done .done
LDA.l ShopType : BIT.b #$20 : BEQ .notTakeAll ; Take-all LDA.l ShopType : BIT.b #$20 : BEQ .notTakeAll ; Take-all
@@ -217,122 +190,42 @@ dw $0100, $0000
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; X - Tile Buffer Offset ; X - Tile Buffer Offset
; Y - Item ID ; Y - Item ID
LoadTile: SetupTileTransfer:
TXA : !ADD.w #!FREE_TILE_BUFFER : STA.l TileUploadOffsetOverride ; load offset from X LDA.l ShopType : BIT.w #$0010 : BNE .alt_vram
SEP #$30 ; set 8-bit accumulator & index registers TXA : LSR #2
TYA ; load item ID from Y CLC : ADC.w #!FREE_TILE
JSL.l GetSpriteID ; convert loot id to sprite id BRA .store_target
JSL.l GetAnimatedSpriteTile_variable .alt_vram
TXA : LSR #2
CLC : ADC.w #!FREE_TILE_ALT
.store_target
LDX.w ItemQueuePtr
STA.w ItemTargetQueue,X
TYA : ASL : TAX
LDA.l StandingItemGraphicsOffsets,X
LDX.w ItemQueuePtr
STA.w ItemGFXQueue,X
TXA
INC #2
AND.w #$000E
STA.w ItemQueuePtr
TDC
REP #$10 ; set 16-bit index registers REP #$10 ; set 16-bit index registers
SEP #$20
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;ShopInventory, X ;ShopInventory, X
;[id][$lo][$hi][purchase_counter] ;[id][$lo][$hi][purchase_counter]
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
Shopkeeper_UploadVRAMTilesLong:
JSR.w Shopkeeper_UploadVRAMTiles
RTL
Shopkeeper_UploadVRAMTiles:
LDA.w DMAP0 : PHA ; preserve DMA parameters
LDA.w BBAD0 : PHA ; preserve DMA parameters
LDA.w A1T0L : PHA ; preserve DMA parameters
LDA.w A1T0H : PHA ; preserve DMA parameters
LDA.w A1B0 : PHA ; preserve DMA parameters
LDA.w DAS0L : PHA ; preserve DMA parameters
LDA.w DAS0H : PHA ; preserve DMA parameters
;--------------------------------------------------------------------------------
LDA.b #$01 : STA.w DMAP0 ; set DMA transfer direction A -> B, bus A auto increment, double-byte mode
LDA.b #$18 : STA.w BBAD0 ; set bus B destination to VRAM register
LDA.b #$80 : STA.w VMAIN ; set VRAM to increment by 2 on high register write
LDA.b #$80 : STA.w A1T0L ; set bus A source address to tile buffer
LDA.b #$A1 : STA.w A1T0H
LDA.b #$7E : STA.w A1B0
LDA.l ShopType : AND.b #$10 : BNE .special
JMP .normal
.special
LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40
LDA.b #$40 : STA.w VMADDL ; set VRAM register destination address
LDA.b #$5A : STA.w VMADDH
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40
LDA.b #$40 : STA.w VMADDL ; set VRAM register destination address
LDA.b #$5B : STA.w VMADDH
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40
LDA.b #$60 : STA.w VMADDL ; set VRAM register destination address
LDA.b #$5A : STA.w VMADDH
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40
LDA.b #$60 : STA.w VMADDL ; set VRAM register destination address
LDA.b #$5B : STA.w VMADDH
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40
LDA.b #$80 : STA.w VMADDL ; set VRAM register destination address
LDA.b #$5A : STA.w VMADDH
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40
LDA.b #$80 : STA.w VMADDL ; set VRAM register destination address
LDA.b #$5B : STA.w VMADDH
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
JMP .end
.normal
LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40
LDA.b #$60 : STA.w VMADDL ; set VRAM register destination address
LDA.b #$5C : STA.w VMADDH
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40
LDA.b #$60 : STA.w VMADDL ; set VRAM register destination address
LDA.b #$5D : STA.w VMADDH
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40
LDA.b #$80 : STA.w VMADDL ; set VRAM register destination address
LDA.b #$5C : STA.w VMADDH
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40
LDA.b #$80 : STA.w VMADDL ; set VRAM register destination address
LDA.b #$5D : STA.w VMADDH
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40
LDA.b #$A0 : STA.w VMADDL ; set VRAM register destination address
LDA.b #$5C : STA.w VMADDH
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40
LDA.b #$A0 : STA.w VMADDL ; set VRAM register destination address
LDA.b #$5D : STA.w VMADDH
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
;--------------------------------------------------------------------------------
.end
PLA : STA.w DAS0H ; restore DMA parameters
PLA : STA.w DAS0L ; restore DMA parameters
PLA : STA.w A1B0 ; restore DMA parameters
PLA : STA.w A1T0H ; restore DMA parameters
PLA : STA.w A1T0L ; restore DMA parameters
PLA : STA.w BBAD0 ; restore DMA parameters
PLA : STA.w DMAP0 ; restore DMA parameters
RTS
;--------------------------------------------------------------------------------
Shopkepeer_CallOriginal: Shopkepeer_CallOriginal:
PLA : PLA : PLA PLA : PLA : PLA
LDA.b #ShopkeeperJumpTable>>16 : PHA LDA.b #ShopkeeperJumpTable>>16 : PHA
LDA.b #ShopkeeperJumpTable>>8 : PHA LDA.b #ShopkeeperJumpTable>>8 : PHA
LDA.b #ShopkeeperJumpTable : PHA LDA.b #ShopkeeperJumpTable : PHA
LDA.w SpriteItemType, X LDA.w SpriteItemType, X
JML.l UseImplicitRegIndexedLocalJumpTable JML.l JumpTableLocal
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
Sprite_ShopKeeper: Sprite_ShopKeeper:
@@ -476,59 +369,59 @@ Shopkeeper_SetupHitboxes:
RTS RTS
Shopkeeper_BuyItem: Shopkeeper_BuyItem:
PHX : PHY PHX : PHY
TYX TYX
LDA.l ShopInventory, X LDA.l ShopInventory, X
CMP.b #$0E : BEQ .refill ; Bee Refill CMP.b #$0E : BEQ .refill ; Bee Refill
CMP.b #$2E : BEQ .refill ; Red Potion Refill CMP.b #$2E : BEQ .refill ; Red Potion Refill
CMP.b #$2F : BEQ .refill ; Green Potion Refill CMP.b #$2F : BEQ .refill ; Green Potion Refill
CMP.b #$30 : BEQ .refill ; Blue Potion Refill CMP.b #$30 : BEQ .refill ; Blue Potion Refill
BRA + BRA +
.refill .refill
JSL.l Sprite_GetEmptyBottleIndex : BMI .full_bottles JSL.l Sprite_GetEmptyBottleIndex : BMI .full_bottles
+ +
LDA.l ShopType : AND.b #$80 : BNE .buy ; don't charge if this is a take-any LDA.l ShopType : AND.b #$80 : BNE .buy ; don't charge if this is a take-any
REP #$20 : LDA.l CurrentRupees : CMP.l ShopInventory+1, X : SEP #$20 : !BGE .buy REP #$20 : LDA.l CurrentRupees : CMP.l ShopInventory+1, X : SEP #$20 : !BGE .buy
.cant_afford .cant_afford
LDA.b #$7A LDA.b #$7A
LDY.b #$01 LDY.b #$01
JSL.l Sprite_ShowMessageUnconditional JSL.l Sprite_ShowMessageUnconditional
LDA.b #$3C : STA.w SFX2 ; error sound LDA.b #$3C : STA.w SFX2 ; error sound
JMP .done JMP .done
.full_bottles .full_bottles
LDA.b #$6B LDA.b #$6B : LDY.b #$01
LDY.b #$01 JSL.l Sprite_ShowMessageUnconditional
JSL.l Sprite_ShowMessageUnconditional LDA.b #$3C : STA.w SFX2 ; error sound
LDA.b #$3C : STA.w SFX2 ; error sound JMP .done
JMP .done .buy
.buy LDA.l ShopType : AND.b #$80 : BNE ++ ; don't charge if this is a take-any
LDA.l ShopType : AND.b #$80 : BNE ++ ; don't charge if this is a take-any REP #$20 : LDA.l CurrentRupees : !SUB ShopInventory+1, X : STA.l CurrentRupees : SEP #$20 ; Take price away
REP #$20 : LDA.l CurrentRupees : !SUB ShopInventory+1, X : STA.l CurrentRupees : SEP #$20 ; Take price away ++
++ INC.w ShopPurchaseFlag
LDA.l ShopInventory, X : TAY : JSL.l Link_ReceiveItem LDA.l ShopInventory, X : TAY : JSL.l Link_ReceiveItem
LDA.l ShopInventory+3, X : INC : STA.l ShopInventory+3, X LDA.l ShopInventory+3, X : INC : STA.l ShopInventory+3, X
TXA : LSR #2 : TAX TXA : LSR #2 : TAX
LDA.l ShopType : BIT.b #$80 : BNE + LDA.l ShopType : BIT.b #$80 : BNE +
LDA.l ShopState : ORA.w Shopkeeper_ItemMasks, X : STA.l ShopState LDA.l ShopState : ORA.w Shopkeeper_ItemMasks, X : STA.l ShopState
PHX PHX
TXA : !ADD ShopSRAMIndex : TAX TXA : !ADD ShopSRAMIndex : TAX
LDA.l PurchaseCounts, X : INC : BEQ +++ : STA.l PurchaseCounts, X : +++ LDA.l PurchaseCounts, X : INC : BEQ +++ : STA.l PurchaseCounts, X : +++
PLX PLX
BRA ++ BRA ++
+ ; Take-any + ; Take-any
BIT.b #$20 : BNE .takeAll BIT.b #$20 : BNE .takeAll
.takeAny .takeAny
LDA.l ShopState : ORA.b #$07 : STA.l ShopState LDA.l ShopState : ORA.b #$07 : STA.l ShopState
PHX : LDA.l ShopSRAMIndex : TAX : LDA.b #$01 : STA.l PurchaseCounts, X : PLX PHX : LDA.l ShopSRAMIndex : TAX : LDA.b #$01 : STA.l PurchaseCounts, X : PLX
BRA ++ BRA ++
.takeAll .takeAll
LDA.l ShopState : ORA.w Shopkeeper_ItemMasks, X : STA.l ShopState LDA.l ShopState : ORA.w Shopkeeper_ItemMasks, X : STA.l ShopState
PHX : LDA.l ShopSRAMIndex : TAX : LDA.l ShopState : STA.l PurchaseCounts, X : PLX PHX : LDA.l ShopSRAMIndex : TAX : LDA.l ShopState : STA.l PurchaseCounts, X : PLX
++ ++
.done .done
PLY : PLX PLY : PLX
RTS RTS
@@ -668,6 +561,8 @@ Shopkeeper_DrawNextItem:
PLY PLY
LDA.l ShopInventory, X ; get item id LDA.l ShopInventory, X ; get item id
JSL.l ResolveLootIDLong
STA.b Scrap0D
CMP.b #$2E : BNE + : BRA .potion CMP.b #$2E : BNE + : BRA .potion
+ CMP.b #$2F : BNE + : BRA .potion + CMP.b #$2F : BNE + : BRA .potion
+ CMP.b #$30 : BEQ .potion + CMP.b #$30 : BEQ .potion
@@ -685,19 +580,25 @@ Shopkeeper_DrawNextItem:
STA.l SpriteOAM+4 STA.l SpriteOAM+4
LDA.l ShopInventory, X ; get item palette LDA.b Scrap0D
JSL.l GetSpritePalette : STA.l SpriteOAM+5 PHX
JSL.l GetSpritePalette_resolved : STA.l SpriteOAM+5
PLX
LDA.b #$00 : STA.l SpriteOAM+6 LDA.b #$00 : STA.l SpriteOAM+6
LDA.l ShopInventory, X ; get item palette LDA.b Scrap0D
JSL.l IsNarrowSprite : BCS .narrow PHX
TAX
LDA.l SpriteProperties_standing_width,X : BEQ .narrow
.full .full
PLX
LDA.b #$02 LDA.b #$02
STA.l SpriteOAM+7 STA.l SpriteOAM+7
LDA.b #$01 LDA.b #$01
BRA ++ BRA ++
.narrow .narrow
PLX
LDA.b #$00 LDA.b #$00
STA.l SpriteOAM+7 STA.l SpriteOAM+7
JSR.w PrepNarrowLower JSR.w PrepNarrowLower

View File

@@ -2,23 +2,23 @@ org $008A01 ; 0xA01 - Bank00.asm (LDA.b #$10 : STA $4304 : STA $4314 : STA $4324
LDA.b PlayerSpriteBank LDA.b PlayerSpriteBank
org $1BEDF9 org $1BEDF9
JSL SpriteSwap_Palette_ArmorAndGloves ;4bytes JSL SpriteSwap_Palette_ArmorAndGloves ; 4bytes
RTL ;1byte RTL ; 1byte
NOP #$01 NOP
org $1BEE1B org $1BEE1B
JSL SpriteSwap_Palette_ArmorAndGloves_part_two JSL SpriteSwap_Palette_ArmorAndGloves_part_two
RTL RTL
!BANK_BASE = $29 !BANK_BASE = $A9
org $BF8000 org $BF8000
SwapSpriteIfNecessary: SwapSpriteIfNecessary:
PHP PHP
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
LDA.l SpriteSwapper : BEQ + : !ADD #!BANK_BASE : CMP.b PlayerSpriteBank : BEQ + LDA.l SpriteSwapper : BEQ + : CLC : ADC.b #!BANK_BASE : CMP.b PlayerSpriteBank : BEQ +
STA.b PlayerSpriteBank STA.b PlayerSpriteBank
STZ.w SkipOAM ; Set Normal Sprite NMI STZ.w SkipOAM ; Set Normal Sprite NMI
JSL.l SpriteSwap_Palette_ArmorAndGloves_part_two JSL.l SpriteSwap_Palette_ArmorAndGloves_part_two
+ +
PLP PLP
@@ -26,57 +26,57 @@ RTL
SpriteSwap_Palette_ArmorAndGloves: SpriteSwap_Palette_ArmorAndGloves:
{ {
;DEDF9 ; DEDF9
LDA.l SpriteSwapper : BNE .continue LDA.l SpriteSwapper : BNE .continue
LDA.b #$10 : STA.b PlayerSpriteBank ; Load Original Sprite Location LDA.b #$10 : STA.b PlayerSpriteBank ; Load Original Sprite Location
REP #$21 REP #$21
LDA.l ArmorEquipment LDA.l ArmorEquipment
JSL $1BEDFF ; Read Original Palette Code JSL $9BEDFF ; Read Original Palette Code
RTL RTL
.part_two .part_two
SEP #$30 SEP #$30
LDA.l SpriteSwapper : BNE .continue LDA.l SpriteSwapper : BNE .continue
REP #$30 REP #$30
LDA.l GloveEquipment LDA.l GloveEquipment
JSL $1BEE21 ; Read Original Palette Code JSL $9BEE21 ; Read Original Palette Code
RTL RTL
.continue .continue
PHX : PHY : PHA PHX : PHY : PHA
; Load armor palette ; Load armor palette
PHB : PHK : PLB PHB : PHK : PLB
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
; Check what Link's armor value is. ; Check what Link's armor value is.
LDA.l ArmorEquipment : AND.w #$00FF : TAX LDA.l ArmorEquipment : AND.w #$00FF : TAX
LDA.l $1BEC06, X : AND.w #$00FF : ASL A : ADC.w #$F000 : STA.b Scrap00 LDA.l $9BEC06, X : AND.w #$00FF : ASL A : ADC.w #$F000 : STA.b Scrap00
;replace D308 by 7000 and search ; replace D308 by 7000 and search
REP #$10 ; set 16-bit index registers REP #$10 ; set 16-bit index registers
LDA.w #$01E2 ; Target SP-7 (sprite palette 6) LDA.w #$01E2 ; Target SP-7 (sprite palette 6)
LDX.w #$000E ; Palette has 15 colors LDX.w #$000E ; Palette has 15 colors
TXY : TAX TXY : TAX
LDA.b PlayerSpriteBank : AND.w #$00FF : STA.b Scrap02 LDA.b PlayerSpriteBank : AND.w #$00FF : STA.b Scrap02
.loop .loop
LDA.b [Scrap00] : STA.l PaletteBufferAux, X : STA.l PaletteBuffer, X LDA.b [Scrap00] : STA.l PaletteBufferAux, X : STA.l PaletteBuffer, X
INC.b Scrap00 : INC.b Scrap00 INC.b Scrap00 : INC.b Scrap00
INX #2 INX #2
DEY : BPL .loop DEY : BPL .loop
SEP #$30 SEP #$30
PLB PLB
INC.b NMICGRAM INC.b NMICGRAM
PLA : PLY : PLX PLA : PLY : PLX
RTL RTL
} }

View File

@@ -382,6 +382,7 @@ InverseChecksumWRAM: skip 2 ; Vanilla Inverse Checksum. Don't write unless c
; beginning at $700500 ; beginning at $700500
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
base $7F6000 ; $1000 byte buffer we place beginning at second save file base $7F6000 ; $1000 byte buffer we place beginning at second save file
ExtendedSaveDataWRAM: ;
ExtendedFileNameWRAM: skip 24 ; File name, 12 word-length characters. ExtendedFileNameWRAM: skip 24 ; File name, 12 word-length characters.
RoomPotData: skip 592 ; Table for expanded pot shuffle. One word per room. RoomPotData: skip 592 ; Table for expanded pot shuffle. One word per room.
SpritePotData: skip 592 ; Table for expanded pot shuffle. One word per room. SpritePotData: skip 592 ; Table for expanded pot shuffle. One word per room.
@@ -414,6 +415,7 @@ FileNameVanillaSRAM: skip 8 ; First four characters of file name
FileValiditySRAM: skip 2 ; FileValiditySRAM: skip 2 ;
skip 283 ; skip 283 ;
InverseChecksumSRAM: skip 2 ; InverseChecksumSRAM: skip 2 ;
ExtendedSaveDataSRAM: ;
ExtendedFileNameSRAM: skip 24 ; We read and write the file name directly from and to SRAM (24 bytes) ExtendedFileNameSRAM: skip 24 ; We read and write the file name directly from and to SRAM (24 bytes)
skip $1AE4 ; skip $1AE4 ;
RomVersionSRAM: skip 4 ; ALTTPR ROM version. Low byte is the version, high byte writes RomVersionSRAM: skip 4 ; ALTTPR ROM version. Low byte is the version, high byte writes
@@ -426,15 +428,6 @@ SaveBackupSRAM: ; Backup copy of save ram. Game will attempt to
; checksum on file select screen load fails. ; checksum on file select screen load fails.
base off base off
;================================================================================
; Bank Definitions
;--------------------------------------------------------------------------------
; If these move (most likely by placing initsramtable.asm somewhere else) these
; bank definitions need to be changed as well.
;================================================================================
!SRAMBank = $70
!SRAMTableBank = $30|$80
;================================================================================ ;================================================================================
; Assertions ; Assertions
;================================================================================ ;================================================================================
@@ -656,6 +649,7 @@ endmacro
%assertSRAM(GTCollectedKeys, $7EF4ED) %assertSRAM(GTCollectedKeys, $7EF4ED)
%assertSRAM(FileMarker, $7EF4F0) %assertSRAM(FileMarker, $7EF4F0)
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
%assertSRAM(ExtendedSaveDataWRAM, $7F6000)
%assertSRAM(ExtendedFileNameWRAM, $7F6000) %assertSRAM(ExtendedFileNameWRAM, $7F6000)
%assertSRAM(RoomPotData, $7F6018) %assertSRAM(RoomPotData, $7F6018)
%assertSRAM(SpritePotData, $7F6268) %assertSRAM(SpritePotData, $7F6268)
@@ -678,6 +672,7 @@ endmacro
%assertSRAM(FileNameVanillaSRAM, $7003D9) %assertSRAM(FileNameVanillaSRAM, $7003D9)
%assertSRAM(FileValiditySRAM, $7003E1) %assertSRAM(FileValiditySRAM, $7003E1)
%assertSRAM(InverseChecksumSRAM, $7004FE) %assertSRAM(InverseChecksumSRAM, $7004FE)
%assertSRAM(ExtendedSaveDataSRAM, $700500)
%assertSRAM(ExtendedFileNameSRAM, $700500) %assertSRAM(ExtendedFileNameSRAM, $700500)
%assertSRAM(RomVersionSRAM, $701FFC) %assertSRAM(RomVersionSRAM, $701FFC)
%assertSRAM(RomNameSRAM, $702000) %assertSRAM(RomNameSRAM, $702000)

135
stats.asm
View File

@@ -33,7 +33,7 @@ DecrementSaveCounter:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DungeonHoleWarpTransition: DungeonHoleWarpTransition:
LDA.l $01C31F, X LDA.l $81C31F, X
BRA StatTransitionCounter BRA StatTransitionCounter
DungeonHoleEntranceTransition: DungeonHoleEntranceTransition:
JSL EnableForceBlank JSL EnableForceBlank
@@ -78,33 +78,37 @@ IncrementSmallKeys:
STA.l CurrentSmallKeys ; thing we wrote over, write small key count STA.l CurrentSmallKeys ; thing we wrote over, write small key count
PHX PHX
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
JSL AddInventory_incrementKeyLong LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter
+ +
JSL.l UpdateKeys JSL.l UpdateKeys
PHY : LDY.b #24 : JSL.l FullInventoryExternal : PLY PHY : LDY.b #24 : JSL.l AddInventory : PLY
JSL.l HUD_RebuildLong JSL.l HUD_RebuildLong
INC.w UpdateHUD INC.w UpdateHUD
PLX PLX
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementSmallKeysNoPrimary: IncrementSmallKeysNoPrimary:
STA.l CurrentSmallKeys ; thing we wrote over, write small key count STA.l CurrentSmallKeys ; thing we wrote over, write small key count
PHX PHX
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
JSL AddInventory_incrementKeyLong LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter
+ +
JSL.l UpdateKeys JSL.l UpdateKeys
LDA.b IndoorsFlag : BEQ + ; skip room check if outdoors LDA.b IndoorsFlag : BEQ + ; skip room check if outdoors
PHP : REP #$20 ; set 16-bit accumulator PHP : REP #$20 ; set 16-bit accumulator
LDA.b RoomIndex : CMP.w #$0087 : BNE ++ ; hera basement LDA.b RoomIndex : CMP.w #$0087 : BNE ++ ; hera basement
PLP : PHY : LDY.b #$24 : JSL.l FullInventoryExternal PLP : PHY
JSR CountChestKey : PLY : BRA + LDY.b #$24
++ JSL.l AddInventory
PLP JSR CountChestKey
+ PLY
JSL.l HUD_RebuildLong BRA +
INC.w UpdateHUD ++
PLX PLP
+
INC.w UpdateHUD
JSL.l HUD_RebuildLong
PLX
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DecrementSmallKeys: DecrementSmallKeys:
@@ -112,53 +116,56 @@ DecrementSmallKeys:
JSL.l UpdateKeys JSL.l UpdateKeys
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CountChestKeyLong: ; called from ItemDowngradeFix in itemdowngrade.asm CountChestKeyLong:
JSR CountChestKey JSR.w CountChestKey
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CountChestKey: ; called by neighbor functions CountChestKey:
PHA : PHX PHA : PHX
CPY.b #$24 : BEQ + ; small key for this dungeon - use DungeonID LDA.l StatsLocked : BNE .done
CPY.b #$A0 : !BLT .end ; Ignore most items CPY.b #$24 : BEQ .this_dungeon
CPY.b #$AE : !BGE .end ; Ignore reserved key and generic key TYA
TYA : AND.B #$0F AND.b #$0F : CMP.b #$02 : BCC .hc_sewers
TAX : BRA .count ; use Key id instead of DungeonID (Keysanity) TAX
+ LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X
LDA.w DungeonID : LSR : TAX BRA .done
.count .this_dungeon
LDA.l DungeonCollectedKeys, X : INC : STA.l DungeonCollectedKeys, X LDA.w DungeonID : CMP.b #$03 : BCC .hc_sewers
LSR : TAX
LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X
BRA .done
CPX.b #$00 : BNE + .hc_sewers
STA.l HCCollectedKeys ; copy HC to sewers LDA.l SewerCollectedKeys : INC
+ STA.l SewerCollectedKeys : STA.l HCCollectedKeys
CPX.b #$01 : BNE +
STA.l SewerCollectedKeys ; copy sewers to HC .done
+
.end
PLX : PLA PLX : PLA
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CountBonkItem: ; called from GetBonkItem in bookofmudora.asm CountBonkItem: ; called from GetBonkItem in bookofmudora.asm
LDA.b RoomIndex ; check room ID - only bonk keys in 2 rooms so we're just checking the lower byte LDA.b RoomIndex
CMP.b #115 : BNE + ; Desert Bonk Key CMP.b #115 : BNE +
LDA.l BonkKey_Desert : BRA ++ LDA.l BonkKey_Desert
+ : CMP.b #140 : BNE + ; GTower Bonk Key BRA ++
LDA.l BonkKey_GTower : BRA ++ +
+ LDA.b #$24 ; default to small key CMP.b #140 : BNE +
++ LDA.l BonkKey_GTower : BRA ++
CMP.b #$24 : BNE + +
PHY LDA.b #$24
TAY : JSR CountChestKey ++
PLY CMP.b #$24 : BNE +
+ PHY
TAY
JSR CountChestKey
PLY
+
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementAgahnim2Sword: IncrementAgahnim2Sword:
PHA PHA
LDA.l StatsLocked : BNE + JSL.l IncrementBossSword
JSL AddInventory_incrementBossSwordLong PLA
+
PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementDeathCounter: IncrementDeathCounter:
@@ -215,12 +222,14 @@ DecrementItemCounter:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementBigChestCounter: IncrementBigChestCounter:
JSL.l Dungeon_SaveRoomQuadrantData ; thing we wrote over JSL.l Dungeon_SaveRoomQuadrantData ; thing we wrote over
PHA PHA
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
%BottomHalf(BigKeysBigChests) LDA.l BigKeysBigChests : INC : AND.b #$0F : TAX
+ LDA.l BigKeysBigChests : AND.b #$F0 : STA.l BigKeysBigChests
PLA TXA : ORA.l BigKeysBigChests : STA.l BigKeysBigChests
+
PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementDamageTakenCounter_Eight: IncrementDamageTakenCounter_Eight:
@@ -333,7 +342,7 @@ StatsFinalPrep:
LDA.l StatsLocked : BNE .ramPostOnly LDA.l StatsLocked : BNE .ramPostOnly
INC : STA.l StatsLocked INC : STA.l StatsLocked
JSL.l AddInventory_incrementBossSwordLong JSL.l IncrementFinalSword
LDA.l HighestMail : INC : STA.l HighestMail ; add green mail to mail count LDA.l HighestMail : INC : STA.l HighestMail ; add green mail to mail count

View File

@@ -530,7 +530,7 @@ CreditsLineBlank:
%blankline() %blankline()
%bigcredits("AND...") %bigcredits("AND&")
%blankline() %blankline()

Binary file not shown.

268
stats/fonttable.asm Normal file
View File

@@ -0,0 +1,268 @@
; Small letters red
dw $39E0 ; A ; $00
dw $39E1 ; B ;
dw $39E2 ; C ;
dw $39E3 ; D ;
dw $39E4 ; E ;
dw $39E5 ; F ;
dw $39E6 ; G ;
dw $39E7 ; H ;
dw $39E8 ; I ;
dw $39E9 ; J ;
dw $39EA ; K ;
dw $39EB ; L ;
dw $39EC ; M ;
dw $39ED ; N ;
dw $39EE ; O ;
dw $39EF ; P ;
dw $39F0 ; Q ;
dw $39F1 ; R ;
dw $39F2 ; S ;
dw $39F3 ; T ;
dw $39F4 ; U ;
dw $39F5 ; V ;
dw $39F6 ; W ;
dw $39F7 ; X ;
dw $39F8 ; Y ;
dw $39F9 ; Z ; $19
;
; Small letters yellow ;
dw $2DE0 ; A ; $1A
dw $2DE1 ; B ;
dw $2DE2 ; C ;
dw $2DE3 ; D ;
dw $2DE4 ; E ;
dw $2DE5 ; F ;
dw $2DE6 ; G ;
dw $2DE7 ; H ;
dw $2DE8 ; I ;
dw $2DE9 ; J ;
dw $2DEA ; K ;
dw $2DEB ; L ;
dw $2DEC ; M ;
dw $2DED ; N ;
dw $2DEE ; O ;
dw $2DEF ; P ;
dw $2DF0 ; Q ;
dw $2DF1 ; R ;
dw $2DF2 ; S ;
dw $2DF3 ; T ;
dw $2DF4 ; U ;
dw $2DF5 ; V ;
dw $2DF6 ; W ;
dw $2DF7 ; X ;
dw $2DF8 ; Y ;
dw $2DF9 ; Z ; $33
dw $2DFB ; , ;
dw $2DFC ; ' ;
dw $2DFD ; - ;
dw $2DFE ; . ;
;
; Small letters green ;
dw $29E0 ; A ; $38
dw $29E1 ; B ;
dw $29E2 ; C ;
dw $29E3 ; D ;
dw $29E4 ; E ;
dw $29E5 ; F ;
dw $29E6 ; G ;
dw $29E7 ; H ;
dw $29E8 ; I ;
dw $29E9 ; J ;
dw $29EA ; K ;
dw $29EB ; L ;
dw $29EC ; M ;
dw $29ED ; N ;
dw $29EE ; O ;
dw $29EF ; P ;
dw $29F0 ; Q ;
dw $29F1 ; R ;
dw $29F2 ; S ;
dw $29F3 ; T ;
dw $29F4 ; U ;
dw $29F5 ; V ;
dw $29F6 ; W ;
dw $29F7 ; X ;
dw $29F8 ; Y ;
dw $29F9 ; Z ; $51
dw $29FA ; • ;
;
; Big characters top ;
dw $3D40 ; 0 ; $53
dw $3D41 ; 1 ;
dw $3D42 ; 2 ;
dw $3D43 ; 3 ;
dw $3D44 ; 4 ;
dw $3D45 ; 5 ;
dw $3D46 ; 6 ;
dw $3D47 ; 7 ;
dw $3D48 ; 8 ;
dw $3D49 ; 9 ;
dw $3D4A ; A ;
dw $3D4B ; B ;
dw $3D4C ; C ;
dw $3D4D ; D ;
dw $3D4E ; E ;
dw $3D4F ; F ; $62
dw $3D60 ; G ;
dw $3D61 ; H ;
dw $3D62 ; I ;
dw $3D63 ; J ;
dw $3D64 ; K ;
dw $3D65 ; L ;
dw $3D66 ; M ;
dw $3D67 ; N ;
dw $3D68 ; O ;
dw $3D69 ; P ;
dw $3D6A ; Q ;
dw $3D6B ; R ;
dw $3D6C ; S ;
dw $3D6D ; T ;
dw $3D6E ; U ;
dw $3D6F ; V ; $72
dw $3D80 ; W ;
dw $3D81 ; X ;
dw $3D82 ; Y ;
dw $3D83 ; Z ;
dw $0000 ; ;
dw $0000 ; ;
; Big characters bottom ;
dw $3D50 ; 0 ; $79
dw $3D51 ; 1 ;
dw $3D52 ; 2 ;
dw $3D53 ; 3 ;
dw $3D54 ; 4 ;
dw $3D55 ; 5 ;
dw $3D56 ; 6 ;
dw $3D57 ; 7 ;
dw $3D58 ; 8 ;
dw $3D59 ; 9 ;
dw $3D5A ; A ; $83
dw $3D5B ; B ;
dw $3D5C ; C ;
dw $3D5D ; D ;
dw $3D5E ; E ;
dw $3D5F ; F ;
dw $3D70 ; G ;
dw $3D71 ; H ;
dw $3D72 ; I ;
dw $3D73 ; J ;
dw $3D74 ; K ;
dw $3D75 ; L ;
dw $3D76 ; M ;
dw $3D77 ; N ;
dw $3D78 ; O ;
dw $3D79 ; P ;
dw $3D7A ; Q ;
dw $3D7B ; R ;
dw $3D7C ; S ;
dw $3D7D ; T ;
dw $3D7E ; U ;
dw $3D7F ; V ; $98
dw $3D90 ; W ;
dw $3D91 ; X ;
dw $3D92 ; Y ;
dw $3D93 ; Z ; $9C
dw $0000 ; ;
dw $0000 ; ;
dw $3D9C ; <sp> ; $9F
; Lower case letters top ;
dw $3DA0 ; a ; $A0
dw $3DA1 ; b ;
dw $3DA2 ; c ;
dw $3DA3 ; d ;
dw $3DA4 ; e ;
dw $3DA5 ; f ;
dw $3DA6 ; g ;
dw $3DA7 ; h ;
dw $3DA8 ; i ;
dw $3DA9 ; j ;
dw $3DAA ; k ;
dw $3DAB ; l ;
dw $3DAC ; m ;
dw $3DAD ; n ;
dw $3DAE ; o ;
dw $3DAF ; p ;
dw $3DC0 ; q ; $B0
dw $3DC1 ; r ;
dw $3DC2 ; s ;
dw $3DC3 ; t ;
dw $3DC4 ; u ;
dw $3DC5 ; v ;
dw $3DC6 ; w ;
dw $3DC7 ; x ;
dw $3DC8 ; y ;
dw $3DC9 ; z ;
dw $0000 ; ;
; Lower case letters bottom;
dw $3DB0 ; a ;
dw $3DB1 ; b ;
dw $3DB2 ; c ;
dw $3DB3 ; d ;
dw $3DB4 ; e ;
dw $3DB5 ; f ; $C0
dw $3DB6 ; g ;
dw $3DB7 ; h ;
dw $3DB8 ; i ;
dw $3DB9 ; j ;
dw $3DBA ; k ;
dw $3DBB ; l ;
dw $3DBC ; m ;
dw $3DBD ; n ;
dw $3DBE ; o ;
dw $3DBF ; p ;
dw $3DD0 ; q ;
dw $3DD1 ; r ;
dw $3DD2 ; s ;
dw $3DD3 ; t ;
dw $3DD4 ; u ;
dw $3DD5 ; v ; $D0
dw $3DD6 ; w ;
dw $3DD7 ; x ;
dw $3DD8 ; y ;
dw $3DD9 ; z ;
dw $0000 ; ;
dw $0000 ; ;
dw $0000 ; ;
dw $0000 ; ;
; Special chars top ;
dw $3D2D ; ' ; $D9
dw $3D2E ; " ;
dw $3D27 ; / ;
dw $3D8D ; . ;
dw $3DCA ; : ;
dw $3DCD ; _ ;
dw $3D28 ; • ;
dw $3D2F ; ... ; $E0
dw $3DCC ; # ;
dw $3DCB ; @ ;
dw $3D29 ; |> ;
dw $3D86 ; ? ;
dw $3D87 ; ! ;
dw $3D8E ; ~ ;
dw $3D88 ; , ;
dw $3D89 ; - ;
dw $0000 ; ;
dw $0000 ; ;
dw $0000 ; ;
; Special chars bottom ;
dw $3D3D ; ' ; $EC
dw $3D3E ; " ;
dw $3D37 ; / ;
dw $3D9D ; . ;
dw $3DDA ; : ; $F0
dw $3DDD ; _ ;
dw $3D38 ; • ;
dw $3D3F ; ... ;
dw $3DDC ; # ;
dw $3DDB ; @ ;
dw $3D39 ; |> ;
dw $3D96 ; ? ;
dw $3D97 ; ! ;
dw $3D9E ; ~ ;
dw $3D98 ; , ;
dw $3D99 ; - ; $FB
dw $0000 ; ;
dw $0000 ; ;
dw $0000 ; ;
dw $0000 ; ;

View File

@@ -1 +0,0 @@
ź9°9±9´9µ9¶9·9Ü9Ý9Ţ9ß9đ9ń9ň9ó9ô9ő9ö9÷9ř9ů9ú9ű9ü9ý9ţ9ź-°-±-´-µ-¶-·-Ü-Ý-Ţ-ß-đ-ń-ň-ó-ô-ő-ö-÷-ř-ů-ú-ű-ü-ý-ţ-©-ą-ş-»-ź)°)±)´)µ)¶)·)Ü)Ý)Ţ)ß)đ)ń)ň)ó)ô)ő)ö)÷)ř)ů)ú)ű)ü)ý)ţ)Ľ)@=A=B=C=D=E=F=G=H=I=J=K=L=M=N=O=`=a=b=c=d=e=f=g=h=i=j=k=l=m=n=o=€=<3D>==<3D>=¨=‡=P=Q=R=S=T=U=V=W=X=Y=Z=[=\=]=^=_=p=q=r=s=t=u=v=w=x=y=z={=|=}=~==<3D>===“=¸=—=<3D>=Ŕ=Á=Â=Ă=<3D>=†=‰=Ä=‰=Ĺ=Ć=Ç=˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Đ=Ń=Ň=Ó=<3D>==™˝Ô=™=Ő=Ö=×=˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙

View File

@@ -5,16 +5,6 @@ lorom
!BLT = "BCC" !BLT = "BCC"
!BGE = "BCS" !BGE = "BCS"
org $238000
incsrc stats/credits.asm
FontGfx:
if !FEATURE_NEW_TEXT
incbin stats/font.2bpp
else
incbin stats/font.gb
endif
FontGfxEnd:
; Custom addresses. Most are arbitrary. Feel free to make sure they're okay or moving them elsewhere within ZP ; Custom addresses. Most are arbitrary. Feel free to make sure they're okay or moving them elsewhere within ZP
CreditsPtr = $7C ; 3 bytes CreditsPtr = $7C ; 3 bytes
@@ -41,8 +31,8 @@ PreparePointer:
LDY.w #$0000 LDY.w #$0000
RTL RTL
; Regular stat: XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA ; Regular stat: XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA
; Time stat: XXXX X01L LLLL LLLL ---- ---- ---- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA ; Time stat: XXXX X01L LLLL LLLL ---- ---- ---- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA
; End of data: 1111 1111 1111 1111 ; End of data: 1111 1111 1111 1111
; X X offset (measured in 8x8 tiles) ; X X offset (measured in 8x8 tiles)
@@ -58,55 +48,55 @@ RTL
; A Memory Address ; A Memory Address
ValueCaps: ValueCaps:
dw 0 dw 0
dw 9 dw 9
dw 99 dw 99
dw 999 dw 999
dw 9999 dw 9999
dw 9999 ; TODO - 5 digits need to be fixed at a later date dw 9999 ; TODO - 5 digits need to be fixed at a later date
BitMasks: BitMasks:
dw $FFFF dw $FFFF
dw $0001 dw $0001
dw $0003 dw $0003
dw $0007 dw $0007
dw $000F dw $000F
dw $001F dw $001F
dw $003F dw $003F
dw $007F dw $007F
dw $00FF dw $00FF
dw $01FF dw $01FF
dw $03FF dw $03FF
dw $07FF dw $07FF
dw $0FFF dw $0FFF
dw $1FFF dw $1FFF
dw $3FFF dw $3FFF
dw $7FFF dw $7FFF
macro StripeStart(xPos, length) macro StripeStart(xPos, length)
LDA.b $C8 LDA.b $C8
CLC CLC
ADC.w #<xPos> ADC.w #<xPos>
XBA XBA
STA.w $1002,x STA.w $1002,x
LDA.w #<length>*2-1 LDA.w #<length>*2-1
XBA XBA
LDA.w #$0500 LDA.w #$0500
STA.w $1004,x STA.w $1004,x
endmacro endmacro
macro StripeTile() macro StripeTile()
STA.w $1006,x STA.w $1006,x
INX INX
INX INX
endmacro endmacro
macro StripeEnd() macro StripeEnd()
INX INX
INX INX
INX INX
INX INX
endmacro endmacro
HexToDecStats: HexToDecStats:
@@ -140,52 +130,52 @@ HexToDecStats:
RTL RTL
LastHexDigit: LastHexDigit:
TYA TYA
AND.w #$000F AND.w #$000F
PHA PHA
TYA TYA
LSR #4 LSR #4
TAY TAY
CLC CLC
LDA.b StatsBottom LDA.b StatsBottom
BNE + BNE +
; Upper half ; Upper half
PLA PLA
ADC #$3D40 ADC #$3D40
RTS RTS
+ ; Lower half + ; Lower half
PLA PLA
ADC #$3D50 ADC #$3D50
RTS RTS
FindLine: FindLine:
LDY.w #$0000 LDY.w #$0000
- LDA.w CreditsStats,y - LDA.w CreditsStats,y
STZ.b StatsBottom STZ.b StatsBottom
CMP #$FFFF CMP #$FFFF
BEQ .noLine BEQ .noLine
XBA XBA
AND.w #$01FF AND.w #$01FF
CMP.b LineNumber CMP.b LineNumber
BEQ .lineFound BEQ .lineFound
INC INC
INC.b StatsBottom INC.b StatsBottom
CMP.b LineNumber CMP.b LineNumber
BEQ .lineFound BEQ .lineFound
INY #8 INY #8
BRA - BRA -
.lineFound .lineFound
SEC SEC
RTS RTS
.noLine .noLine
CLC CLC
RTS RTS
!FRAMES_PER_SECOND = 60 !FRAMES_PER_SECOND = 60
!FRAMES_PER_MINUTE = 60*60 !FRAMES_PER_MINUTE = 60*60
@@ -193,408 +183,376 @@ FindLine:
!MAX_FRAME_COUNT = 59*60+59*60+59*60+99 !MAX_FRAME_COUNT = 59*60+59*60+59*60+99
macro CountUnits(framesPerUnit, unitCounter) macro CountUnits(framesPerUnit, unitCounter)
STZ.b <unitCounter> STZ.b <unitCounter>
?loop: ?loop:
LDA.b ValueLow LDA.b ValueLow
SEC SEC
SBC.w #<framesPerUnit> SBC.w #<framesPerUnit>
STA.b Temp STA.b Temp
LDA.b ValueHigh LDA.b ValueHigh
SBC.w #<framesPerUnit>>>16 SBC.w #<framesPerUnit>>>16
BCC ?end BCC ?end
STA.b ValueHigh STA.b ValueHigh
LDA.b Temp LDA.b Temp
STA.b ValueLow STA.b ValueLow
INC.b <unitCounter> INC.b <unitCounter>
BRA ?loop BRA ?loop
?end: ?end:
endmacro endmacro
!ColonOffset = $83 !ColonOffset = $8A
!PeriodOffset = $80 !PeriodOffset = $4D
BlankTile = $883D BlankCreditsTile = $883D
RenderCreditsStatCounter: RenderCreditsStatCounter:
PHB PHB
PHK PHK
PLB PLB
JSR FindLine JSR FindLine
BCS + BCS +
JMP .endStats JMP .endStats
+ +
; XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA ; XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA
; == Determine stat type == ; == Determine stat type ==
LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL
LSR LSR
AND.w #$0003 ; TT AND.w #$0003 ; TT
CMP.w #$0000 CMP.w #$0000
BEQ .normalStat BEQ .normalStat
JMP .timeStat JMP .timeStat
.normalStat .normalStat
; == Write Stripe header (VRAM address, i.e. tile coordinates) == ; == Write Stripe header (VRAM address, i.e. tile coordinates) ==
LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL
LSR #3 LSR #3
AND.w #$001F ; X XXXX AND.w #$001F ; X XXXX
CLC CLC
ADC.w $C8 ADC.w $C8
XBA XBA
STA.w $1002,x STA.w $1002,x
; == Write Stripe header (Length of data) == ; == Write Stripe header (Length of data) ==
LDA.w #4*2-1 ; 4 tiles = 8 bytes LDA.w #4*2-1 ; 4 tiles = 8 bytes
XBA XBA
STA.w $1004,x STA.w $1004,x
PHX PHX
; == Load tile base (upper or lower half of white two-line zero) == ; == Load tile base (upper or lower half of white two-line zero) ==
LDA.b StatsBottom LDA.b StatsBottom
BNE + BNE +
LDA.w #$3D40 LDA.w #$3D40
BRA ++ BRA ++
+ LDA.w #$3D50 + LDA.w #$3D50
++ STA.b Temp ++ STA.b Temp
; == Load the actual stat word == ; == Load the actual stat word ==
LDA.w CreditsStats+5,y LDA.w CreditsStats+5,y
STA.b StatsPtr STA.b StatsPtr
LDA.w CreditsStats+6,y LDA.w CreditsStats+6,y
STA.b StatsPtr+1 STA.b StatsPtr+1
LDA.b [StatsPtr] LDA.b [StatsPtr]
STA.b ValueLow STA.b ValueLow
; == Shift value == ; == Shift value ==
LDA.w CreditsStats+2,y; CCC- ---- BBBB SSSS LDA.w CreditsStats+2,y; CCC- ---- BBBB SSSS
AND.w #$000F ; SSSS AND.w #$000F ; SSSS
BEQ + BEQ +
TAX TAX
LDA.b ValueLow LDA.b ValueLow
- LSR - LSR
DEX DEX
BNE - BNE -
STA.b ValueLow STA.b ValueLow
+ +
; == Mask value == ; == Mask value ==
LDA.w CreditsStats+2,y; CCC- ---- BBBB SSSS LDA.w CreditsStats+2,y; CCC- ---- BBBB SSSS
;LSR #4 ;LSR #4
;AND.w #$000F ; BBBB ;AND.w #$000F ; BBBB
LSR #3 LSR #3
AND.w #$001E AND.w #$001E
TAX TAX
LDA.l BitMasks,x LDA.l BitMasks,x
AND.b ValueLow AND.b ValueLow
STA.b ValueLow STA.b ValueLow
; == Cap value == ; == Cap value ==
LDA.w CreditsStats+3,y; ---- ---- CCC- ---- LDA.w CreditsStats+3,y; ---- ---- CCC- ----
LSR #5 LSR #5
AND.w #$0007 ; CCC AND.w #$0007 ; CCC
BEQ + BEQ +
ASL : TAX ASL : TAX
LDA.l ValueCaps,x LDA.l ValueCaps,x
CMP.b ValueLow CMP.b ValueLow
!BGE + !BGE +
STA.b ValueLow STA.b ValueLow
+ +
; == Display value == ; == Display value ==
LDA.b ValueLow LDA.b ValueLow
JSL HexToDecStats JSL HexToDecStats
PLX PLX
STZ.b RemoveZero STZ.b RemoveZero
LDA.l $7F5004 LDA.l $7F5004
AND.w #$00FF AND.w #$00FF
CMP.b RemoveZero CMP.b RemoveZero
BNE + BNE +
LDA.w #BlankTile LDA.w #BlankCreditsTile
BRA ++ BRA ++
+ DEC.b RemoveZero + DEC.b RemoveZero
CLC CLC
ADC.b Temp ADC.b Temp
++ %StripeTile() ++ %StripeTile()
LDA.l $7F5005 LDA.l $7F5005
AND.w #$00FF AND.w #$00FF
CMP.b RemoveZero CMP.b RemoveZero
BNE + BNE +
LDA.w #BlankTile LDA.w #BlankCreditsTile
BRA ++ BRA ++
+ DEC.b RemoveZero + DEC.b RemoveZero
CLC CLC
ADC.b Temp ADC.b Temp
++ %StripeTile() ++ %StripeTile()
LDA.l $7F5006 LDA.l $7F5006
AND.w #$00FF AND.w #$00FF
CMP.b RemoveZero CMP.b RemoveZero
BNE + BNE +
LDA.w #BlankTile LDA.w #BlankCreditsTile
BRA ++ BRA ++
+ DEC.b RemoveZero + DEC.b RemoveZero
CLC CLC
ADC.b Temp ADC.b Temp
++ %StripeTile() ++ %StripeTile()
LDA.l $7F5007 LDA.l $7F5007
AND.w #$00FF AND.w #$00FF
CLC CLC
ADC.b Temp ADC.b Temp
%StripeTile() %StripeTile()
%StripeEnd() %StripeEnd()
.endStats .endStats
PLB PLB
RTL RTL
.timeStat .timeStat
; Output format: HH:MM:SS.FF ; Output format: HH:MM:SS.FF
; == Write Stripe header (VRAM address, i.e. tile coordinates) == ; == Write Stripe header (VRAM address, i.e. tile coordinates) ==
LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL
LSR #3 LSR #3
AND.w #$001F ; X XXXX AND.w #$001F ; X XXXX
CLC CLC
ADC.b $C8 ADC.b $C8
XBA XBA
STA.w $1002,x STA.w $1002,x
; == Write Stripe header (Length of data) == ; == Write Stripe header (Length of data) ==
LDA.w #11*2-1 ; 11 tiles = 22 bytes LDA.w #11*2-1 ; 11 tiles = 22 bytes
XBA XBA
STA.w $1004,x STA.w $1004,x
PHX PHX
; == Load the actual stat words == ; == Load the actual stat words ==
LDA.w CreditsStats+5,y LDA.w CreditsStats+5,y
STA.b StatsPtr STA.b StatsPtr
LDA.w CreditsStats+6,y LDA.w CreditsStats+6,y
STA.b StatsPtr+1 STA.b StatsPtr+1
LDA.b [StatsPtr] LDA.b [StatsPtr]
STA.b ValueLow STA.b ValueLow
INC.b StatsPtr INC.b StatsPtr
INC.b StatsPtr INC.b StatsPtr
LDA.b [StatsPtr] LDA.b [StatsPtr]
STA.b ValueHigh STA.b ValueHigh
CMP.w #!MAX_FRAME_COUNT>>16+1 CMP.w #!MAX_FRAME_COUNT>>16+1
!BGE ++ !BGE ++
; == Convert total frames into hours, minutes, seconds and frames == ; == Convert total frames into hours, minutes, seconds and frames ==
%CountUnits(!FRAMES_PER_HOUR, Hours) %CountUnits(!FRAMES_PER_HOUR, Hours)
%CountUnits(!FRAMES_PER_MINUTE, Minutes) %CountUnits(!FRAMES_PER_MINUTE, Minutes)
%CountUnits(!FRAMES_PER_SECOND, Seconds) %CountUnits(!FRAMES_PER_SECOND, Seconds)
; == Cap at 99:59:59.59 == ; == Cap at 99:59:59.59 ==
LDA.b Hours LDA.b Hours
CMP.w #100 CMP.w #100
!BLT + !BLT +
++ LDA.w #99 ++ LDA.w #99
STA.b Hours STA.b Hours
LDA.w #59 LDA.w #59
STA.b Minutes STA.b Minutes
STA.b Seconds STA.b Seconds
STA.b ValueLow STA.b ValueLow
+ +
; == Load tile base (upper or lower half of white two-line zero) == ; == Load tile base (upper or lower half of white two-line zero) ==
LDA.b StatsBottom LDA.b StatsBottom
BNE + BNE +
LDA.w #$3D40 LDA.w #$3D40
BRA ++ BRA ++
+ LDA.w #$3D50 + LDA.w #$3D50
++ STA.b Temp ++ STA.b Temp
PLX PLX
; == Display value == ; == Display value ==
LDA.b Hours LDA.b Hours
JSL HexToDecStats JSL HexToDecStats
LDA.l $7F5006 LDA.l $7F5006
AND.w #$00FF AND.w #$00FF
CLC CLC
ADC.b Temp ADC.b Temp
%StripeTile() %StripeTile()
LDA.l $7F5007 LDA.l $7F5007
AND.w #$00FF AND.w #$00FF
CLC CLC
ADC.b Temp ADC.b Temp
%StripeTile() %StripeTile()
LDA.w #!ColonOffset LDA.w #!ColonOffset
CLC CLC
ADC.b Temp ADC.b Temp
%StripeTile() %StripeTile()
LDA.b Minutes LDA.b Minutes
JSL HexToDecStats JSL HexToDecStats
LDA.l $7F5006 LDA.l $7F5006
AND.w #$00FF AND.w #$00FF
CLC CLC
ADC.b Temp ADC.b Temp
%StripeTile() %StripeTile()
LDA.l $7F5007 LDA.l $7F5007
AND.w #$00FF AND.w #$00FF
CLC CLC
ADC.b Temp ADC.b Temp
%StripeTile() %StripeTile()
LDA.w #!ColonOffset LDA.w #!ColonOffset
CLC CLC
ADC.b Temp ADC.b Temp
%StripeTile() %StripeTile()
LDA.b Seconds LDA.b Seconds
JSL HexToDecStats JSL HexToDecStats
LDA.l $7F5006 LDA.l $7F5006
AND.w #$00FF AND.w #$00FF
CLC CLC
ADC.b Temp ADC.b Temp
%StripeTile() %StripeTile()
LDA.l $7F5007 LDA.l $7F5007
AND.w #$00FF AND.w #$00FF
CLC CLC
ADC.b Temp ADC.b Temp
%StripeTile() %StripeTile()
LDA.w #!PeriodOffset LDA.w #!PeriodOffset
CLC CLC
ADC.b Temp ADC.b Temp
%StripeTile() %StripeTile()
LDA.b ValueLow LDA.b ValueLow
JSL HexToDecStats JSL HexToDecStats
LDA.l $7F5006 LDA.l $7F5006
AND.w #$00FF AND.w #$00FF
CLC CLC
ADC.b Temp ADC.b Temp
%StripeTile() %StripeTile()
LDA.l $7F5007 LDA.l $7F5007
AND.w #$00FF AND.w #$00FF
CLC CLC
ADC.b Temp ADC.b Temp
%StripeTile() %StripeTile()
%StripeEnd() %StripeEnd()
JMP .endStats JMP .endStats
RenderLineNumber: RenderLineNumber:
%StripeStart(0, 3) %StripeStart(0, 3)
STZ.b StatsBottom STZ.b StatsBottom
LDA.b $CA LDA.b $CA
TAY TAY
AND.w #$0001 AND.w #$0001
BEQ + BEQ +
DEY DEY
INC.b StatsBottom INC.b StatsBottom
+ +
JSR LastHexDigit JSR LastHexDigit
PHA PHA
JSR LastHexDigit JSR LastHexDigit
PHA PHA
JSR LastHexDigit JSR LastHexDigit
%StripeTile() %StripeTile()
PLA PLA
%StripeTile() %StripeTile()
PLA PLA
%StripeTile() %StripeTile()
%StripeEnd() %StripeEnd()
RTS RTS
LoadModifiedFont: LoadCreditsTiles:
; Based on CopyFontToVram(Bank00) JSL.l CopyFontToVRAM ; What we wrote over
; copies font graphics to VRAM (for BG3)
; set name base table to vram $4000 (word) REP #$10
LDA.b #$02 : STA.w OBSEL LDA.b #$80 : STA.w VMAIN
LDA.b #$01 : STA.w DMAP0
LDA.b #$18 : STA.w BBAD0
; increment on writes to $2119 ; Item tiles
LDA.b #$80 : STA.w VMAIN LDX.w #$8200 : STX.w VMADDL
LDA.b #FileSelectNewGraphics>>16 : STA.w A1B0
LDX.w #FileSelectNewGraphics : STX.w A1T0L
LDX.w #$0C00 : STX.w DAS0L
LDA.b #$01 : STA.w MDMAEN
; set bank of the source address (see below) ; Small characters A-Z
LDA.b #FontGfx>>16 : STA.b Scrap02 LDX.w #$7F00 : STX.w VMADDL
LDA.b #SmallCharacters>>16 : STA.w A1B0
LDX.w #SmallCharacters : STX.w A1T0L
LDX.w #$0200 : STX.w DAS0L
LDA.b #$01 : STA.w MDMAEN
REP #$30 SEP #$10
RTL
; vram target address is $7000 (word) LoadOverworldCreditsTiles:
LDA.w #$7000 : STA.w VMADDL JSL.l CopyFontToVRAM ; What we wrote over
REP #$10
; $00[3] = $0E8000 (offset for the font data) ; Small characters A-Z
LDA.w #FontGfx : STA.b Scrap00 LDA.b #$80 : STA.w VMAIN
LDA.b #$01 : STA.w DMAP0
LDA.b #$18 : STA.w BBAD0
LDA.b #SmallCharacters>>16 : STA.w A1B0
LDX.w #SmallCharacters : STX.w A1T0L
LDX.w #$0200 : STX.w DAS0L
LDX.w #$7F00 : STX.w VMADDL
LDA.b #$01 : STA.w MDMAEN
; going to write 0x1000 bytes (0x800 words) SEP #$10
LDX.w #FontGfxEnd-FontGfx/2-1 RTL
.nextWord
; read a word from the font data
LDA.b [$00] : STA.w VMDATAL
; increment source address by 2
INC.b Scrap00 : INC.b Scrap00
DEX : BPL .nextWord
SEP #$30
JSL LoadFullItemTilesCredits
RTL
LoadFullItemTilesCredits:
; Based on CopyFontToVram(Bank00)
; copies font graphics to VRAM (for BG3)
; increment on writes to $2119
LDA.b #$80 : STA.w VMAIN
; set bank of the source address (see below)
LDA.b #FileSelectNewGraphics>>16 : STA.b Scrap02
REP #$30
; vram target address is $8000 (word) (Wraps to start of VRAM on normal SNES, but using the correct address so it works on extended VRAM machines)
LDA.w #$8000 : STA.w VMADDL
; $00[3] = $0E8000 (offset for the font data)
LDA.w #FileSelectNewGraphics : STA.b Scrap00
; going to write 0x1000 bytes (0x800 words)
LDX.w #$800-1
.nextWord
; read a word from the font data
LDA.b [$00] : STA.w VMDATAL
; increment source address by 2
INC.b Scrap00 : INC.b Scrap00
DEX : BPL .nextWord
SEP #$30
RTL
CheckFontTable: CheckFontTable:
TAY TAY
PHB PHB
PHK PHK
PLB PLB
LDA.w FontTable,Y LDA.w FontTable,Y
PLB PLB
RTL RTL
NearEnding: NearEnding:
STZ.w $012A ; disable triforce helper thread STZ.w $012A ; disable triforce helper thread
@@ -602,7 +560,7 @@ NearEnding:
REP #$10 REP #$10
JSL AltBufferTable_credits JSL AltBufferTable_credits
JSR DrawEndingItems JSR DrawEndingItems
JML.l $00ec03 ; PaletteFilter_InitTheEndSprite JML.l $80EC03 ; PaletteFilter_InitTheEndSprite
EndingItems: EndingItems:
; This function is not strictly needed, simply updating the tracker ; This function is not strictly needed, simply updating the tracker
@@ -620,39 +578,27 @@ DrawEndingItems:
LDA.b #$01 : STA.b NMISTRIPES LDA.b #$01 : STA.b NMISTRIPES
RTS RTS
FontTable: ;================================================================================
incbin stats/fonttable.bin ; Dialog Pointer Override
;--------------------------------------------------------------------------------
CreditsStats: EndingSequenceTableOverride:
incsrc stats/statConfig.asm PHY
dw $FFFF PHX
TYX
org $0eedd9 LDA.l EndingSequenceText, X
JSL EndingItems PLX
STA.w $1008, X
org $0eedaf PLY
JSL NearEnding RTL
;--------------------------------------------------------------------------------
org $0EE651 EndingSequenceTableLookupOverride:
JSL LoadModifiedFont PHX : PHB
PHK : PLB
org $0EE828 TYX
JSL PreparePointer LDA.l EndingSequenceText, X : AND.w #$00FF
LDA.b [CreditsPtr],Y ASL
NOP TAY
org $0EE83F LDA.w FontTable,Y
LDA.b [CreditsPtr],Y PLB : PLX
NOP RTL
org $0EE853 ;--------------------------------------------------------------------------------
LDA.b [CreditsPtr],Y
NOP
AND.w #$00ff
ASL A
JSL CheckFontTable
org $0ee86d
JSL RenderCreditsStatCounter
JMP.w AfterDeathCounterOutput
org $0ee8fd
AfterDeathCounterOutput:

View File

@@ -46,6 +46,7 @@ macro AddStat(address, type, shiftRight, bits, digits, xPos, lineNumber)
dl <address> dl <address>
endmacro endmacro
CreditsStats:
%AddStat(SwordTime, 1, 0, 32, 4, !FIRST_SWORD_X, !FIRST_SWORD_Y) %AddStat(SwordTime, 1, 0, 32, 4, !FIRST_SWORD_X, !FIRST_SWORD_Y)
%AddStat(BootsTime, 1, 0, 32, 4, !PEGASUS_BOOTS_X, !PEGASUS_BOOTS_Y) %AddStat(BootsTime, 1, 0, 32, 4, !PEGASUS_BOOTS_X, !PEGASUS_BOOTS_Y)
%AddStat(FluteTime, 1, 0, 32, 4, !FLUTE_X, !FLUTE_Y) %AddStat(FluteTime, 1, 0, 32, 4, !FLUTE_X, !FLUTE_Y)
@@ -65,3 +66,5 @@ endmacro
%AddStat(LagTime, 1, 0, 32, 4, !TOTAL_LAG_TIME_X, !TOTAL_LAG_TIME_Y) %AddStat(LagTime, 1, 0, 32, 4, !TOTAL_LAG_TIME_X, !TOTAL_LAG_TIME_Y)
%AddStat(TotalItemCounter, 0, 0, 16, 3, !COLLECTION_RATE_X, !COLLECTION_RATE_Y) %AddStat(TotalItemCounter, 0, 0, 16, 3, !COLLECTION_RATE_X, !COLLECTION_RATE_Y)
%AddStat(NMIFrames, 1, 0, 32, 4, !TOTAL_TIME_X, !TOTAL_TIME_Y) %AddStat(NMIFrames, 1, 0, 32, 4, !TOTAL_TIME_X, !TOTAL_TIME_Y)
dw $FFFF

1590
tables.asm

File diff suppressed because it is too large Load Diff

View File

@@ -30,25 +30,21 @@ RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
SpawnTabletItem: SpawnTabletItem:
JSL.l LoadOutdoorValue JSL.l LoadOutdoorValue
PHA JSL.l ResolveLootIDLong
JSL.l PrepDynamicTile PHA
LDA.b #$EB : STA.l MiniGameTime
JSL Sprite_SpawnDynamically
PLA
STA.w SpriteID,Y
TYX
JSL.l PrepDynamicTile_loot_resolved
JSL.l GetSpriteID LDA.b LinkPosX : STA.w SpritePosXLow, Y
LDA.b LinkPosX+1 : STA.w SpritePosXHigh, Y
LDA.b #$EB LDA.b LinkPosY : STA.w SpritePosYLow, Y
STA.l MiniGameTime LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
JSL Sprite_SpawnDynamically LDA.b #$00 : STA.w SpriteLayer, Y
LDA.b #$7F : STA.w SpriteZCoord, Y ; spawn WAY up high
PLA : STA.w SpriteItemType, Y ; Store item type
LDA.b LinkPosX : STA.w SpritePosXLow, Y
LDA.b LinkPosX+1 : STA.w SpritePosXHigh, Y
LDA.b LinkPosY : STA.w SpritePosYLow, Y
LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
LDA.b #$00 : STA.w SpriteLayer, Y
LDA.b #$7F : STA.w SpriteZCoord, Y ; spawn WAY up high
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
MaybeUnlockTabletAnimation: MaybeUnlockTabletAnimation:
@@ -92,7 +88,7 @@ IsMedallion:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
LoadNarrowObject: LoadNarrowObject:
LDA.l AddReceivedItemExpanded_wide_item_flag, X : STA.b ($92), Y ; AddReceiveItem.wide_item_flag? LDA.l SpriteProperties_standing_width, X : STA.b ($92), Y ; AddReceiveItem.wide_item_flag?
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CheckTabletItem: CheckTabletItem:

View File

@@ -1,6 +1,6 @@
RenderCharSetColorExtended_init: RenderCharSetColorExtended_init:
stz.b Scrap0C stz.b Scrap0C
jsl $00d84e jsl Attract_DecompressStoryGfx
rtl rtl
RenderCharSetColorExtended_close: RenderCharSetColorExtended_close:
@@ -26,9 +26,7 @@ RenderCharSetColorExtended:
RenderCharToMapExtended: RenderCharToMapExtended:
phx : tya : asl #2 : tax phx : tya : asl #2 : tax
lda.l FontProperties, x lda.l FontProperties, x : bit.w #$0001 : bne .uncompressed
and.w #$0001
bne .uncompressed
.compressed .compressed
plx plx
lda.w #$0000 lda.w #$0000
@@ -104,9 +102,7 @@ RenderCharThinTable:
RenderCharExtended: RenderCharExtended:
pha pha
asl : asl : tax asl : asl : tax
lda.l FontProperties, x lda.l FontProperties, x : and.w #$00ff : bne .renderUncompressed
and.w #$00ff
bne .renderUncompressed
.renderOriginal .renderOriginal
pla : asl : tax : asl : adc.b Scrap0E pla : asl : tax : asl : adc.b Scrap0E
@@ -209,39 +205,39 @@ FontProperties:
dw $0000, $0000 ; 2E dw $0000, $0000 ; 2E
dw $0000, $0000 ; 2F dw $0000, $0000 ; 2F
dw $8001, $0400 ; 30 ; a dw $0000, $0000 ; 30
dw $8001, $0410 ; 31 dw $0000, $0000 ; 31
dw $8001, $0420 ; 32 dw $0000, $0000 ; 32
dw $8001, $0430 ; 33 dw $0000, $0000 ; 33
dw $8001, $0440 ; 34 dw $0000, $0000 ; 34
dw $8001, $0450 ; 35 dw $0000, $0000 ; 35
dw $8001, $0460 ; 36 dw $0000, $0000 ; 36
dw $8001, $0470 ; 37 dw $0000, $0000 ; 37
dw $8001, $0480 ; 38 dw $0000, $0000 ; 38
dw $8001, $0490 ; 39 dw $0000, $0000 ; 39
dw $8001, $04A0 ; 3A dw $0000, $0000 ; 3A
dw $8001, $04B0 ; 3B dw $0000, $0000 ; 3B
dw $8001, $04C0 ; 3C dw $0000, $0000 ; 3C
dw $8001, $04D0 ; 3D dw $0000, $0000 ; 3D
dw $8001, $04E0 ; 3E dw $0000, $0000 ; 3E
dw $8001, $04F0 ; 3F dw $0000, $0000 ; 3F
dw $8001, $0600 ; 40 dw $0000, $0000 ; 40
dw $8001, $0610 ; 41 dw $0000, $0000 ; 41
dw $8001, $0620 ; 42 dw $0000, $0000 ; 42
dw $8001, $0630 ; 43 dw $0000, $0000 ; 43
dw $8001, $0640 ; 44 dw $0000, $0000 ; 44
dw $8001, $0650 ; 45 dw $0000, $0000 ; 45
dw $8001, $0660 ; 46 dw $0000, $0000 ; 46
dw $8001, $0670 ; 47 dw $0000, $0000 ; 47
dw $8001, $0680 ; 48 dw $0000, $0000 ; 48
dw $8001, $0690 ; 49 ; z dw $0000, $0000 ; 49
dw $8001, $06F0 ; 4A ; : dw $0000, $0000 ; 4A
dw $8001, $0A90 ; 4B ; @ (thin) dw $0000, $0000 ; 4B
dw $8001, $0AA0 ; 4C ; # (thin) dw $0000, $0000 ; 4C
dw $0000, $0000 ; 4D dw $0000, $0000 ; 4D
dw $0000, $0000 ; 4E dw $0000, $0000 ; 4E
dw $8001, $0EF0 ; 4F ; <sp> dw $8001, $0DF0 ; 4F ; <sp>
dw $0000, $0000 ; 50 dw $0000, $0000 ; 50
dw $0000, $0000 ; 51 dw $0000, $0000 ; 51
@@ -318,15 +314,15 @@ FontProperties:
dw $0000, $0000 ; 94 dw $0000, $0000 ; 94
dw $0000, $0000 ; 95 dw $0000, $0000 ; 95
dw $0000, $0000 ; 96 dw $0000, $0000 ; 96
dw $0000, $0000 ; 97 dw $8001, $0AD0 ; 97 ; /
dw $0000, $0000 ; 98 dw $8001, $0AE0 ; 98 ; •
dw $0000, $0000 ; 99 dw $8001, $02A0 ; 99 ; Cursor |>
dw $0000, $0000 ; 9A dw $0000, $0000 ; 9A ; smiley lookin JP char
dw $0000, $0000 ; 9B dw $8001, $06A0 ; 9B ; Link face left
dw $0000, $0000 ; 9C dw $8001, $06B0 ; 9C ; Link face right
dw $0000, $0000 ; 9D dw $8001, $06E0 ; 9D ; '
dw $0000, $0000 ; 9E dw $8001, $0AF0 ; 9E ; "
dw $0000, $0000 ; 9F dw $8001, $02E0 ; 9F ; ellipsis ...
dw $8001, $0800 ; A0 ; 0 dw $8001, $0800 ; A0 ; 0
dw $8001, $0810 ; A1 dw $8001, $0810 ; A1
@@ -372,44 +368,44 @@ FontProperties:
dw $8001, $06C0 ; C7 ; ! dw $8001, $06C0 ; C7 ; !
dw $8001, $02D0 ; C8 ; , dw $8001, $02D0 ; C8 ; ,
dw $8001, $02B0 ; C9 ; - dw $8001, $02B0 ; C9 ; -
dw $8000, $0000 ; CA dw $8000, $0000 ; CA ; 🡄"
dw $8000, $0000 ; CB dw $8000, $0000 ; CB ; 🡆
dw $8000, $02E0 ; CC ; ... dw $0000, $0000 ; CC ; Blank char
dw $8001, $02C0 ; CD ; . dw $8001, $02C0 ; CD ; .
dw $8001, $02F0 ; CE ; ~ dw $8001, $02F0 ; CE ; ~
dw $8000, $0000 ; CF dw $8000, $0000 ; CF ;
dw $0000, $0000 ; D0 dw $8001, $0400 ; D0 ; a
dw $0000, $0000 ; D1 dw $8001, $0410 ; D1
dw $8001, $06a0 ; D2 ; Link face left dw $8001, $0420 ; D2
dw $8001, $06b0 ; D3 ; Link face right dw $8001, $0430 ; D3
dw $0000, $0000 ; D4 dw $8001, $0440 ; D4
dw $0000, $0000 ; D5 dw $8001, $0450 ; D5
dw $0000, $0000 ; D6 dw $8001, $0460 ; D6
dw $0000, $0000 ; D7 dw $8001, $0470 ; D7
dw $8001, $06E0 ; D8 ; ' dw $8001, $0480 ; D8
dw $0000, $0000 ; D9 dw $8001, $0490 ; D9
dw $0000, $0000 ; DA dw $8001, $04A0 ; DA
dw $0000, $0000 ; DB dw $8001, $04B0 ; DB
dw $0000, $0000 ; DC dw $8001, $04C0 ; DC
dw $0000, $0000 ; DD dw $8001, $04D0 ; DD
dw $0000, $0000 ; DE dw $8001, $04E0 ; DE
dw $0000, $0000 ; DF dw $8001, $04F0 ; DF ; p
dw $0000, $0000 ; E0 dw $8001, $0600 ; E0 ; q
dw $0000, $0000 ; E1 dw $8001, $0610 ; E1
dw $0000, $0000 ; E2 dw $8001, $0620 ; E2
dw $0000, $0000 ; E3 dw $8001, $0630 ; E3
dw $8001, $02A0 ; E4 ; Cursor |> dw $8001, $0640 ; E4
dw $0000, $0000 ; E5 dw $8001, $0650 ; E5
dw $0000, $0000 ; E6 dw $8001, $0660 ; E6
dw $0000, $0000 ; E7 dw $8001, $0670 ; E7
dw $0000, $0000 ; E8 dw $8001, $0680 ; E8
dw $0000, $0000 ; E9 dw $8001, $0690 ; E9 ; z
dw $0000, $0000 ; EA dw $8001, $0A80 ; EA ; :
dw $0000, $0000 ; EB dw $8001, $0A90 ; EB ; @ (thin)
dw $0000, $0000 ; EC dw $8001, $0AA0 ; EC ; # (thin)
dw $0000, $0000 ; ED dw $8001, $0A00 ; ED ; _
dw $0000, $0000 ; EE dw $0000, $0000 ; EE
dw $0000, $0000 ; EF dw $0000, $0000 ; EF
@@ -428,4 +424,4 @@ FontProperties:
dw $0000, $0000 ; FC dw $0000, $0000 ; FC
dw $0000, $0000 ; FD dw $0000, $0000 ; FD
dw $0000, $0000 ; FE dw $0000, $0000 ; FE
dw $8001, $0EF0 ; FF ; <sp> dw $8001, $0DF0 ; FF ; <sp>

View File

@@ -6,150 +6,25 @@
; out: A - Sprite GFX ID ; out: A - Sprite GFX ID
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
GetSpriteID: GetSpriteID:
JSR AttemptItemSubstitution JSR.w AttemptItemSubstitution
CMP.b #$16 : BEQ .bottle ; Bottle JSR.w ResolveLootID
CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle CMP.b #$6D : BEQ .server_F0 ; Server Request F0
CMP.b #$2C : BEQ .bottle ; Green Potion w/bottle CMP.b #$6E : BEQ .server_F1 ; Server Request F1
CMP.b #$2D : BEQ .bottle ; Blue Potion w/bottle CMP.b #$6F : BEQ .server_F2 ; Server Request F2
CMP.b #$3C : BEQ .bottle ; Bee w/bottle
CMP.b #$3D : BEQ .bottle ; Fairy w/bottle
CMP.b #$48 : BEQ .bottle ; Gold Bee w/bottle
CMP.b #$6D : BEQ .server_F0 ; Server Request F0
CMP.b #$6E : BEQ .server_F1 ; Server Request F1
CMP.b #$6F : BEQ .server_F2 ; Server Request F2
BRA .normal BRA .normal
.bottle .server_F0
PHA : JSR.w CountBottles : CMP.l BottleLimit : !BLT + JSL.l ItemVisualServiceRequest_F0
PLA : LDA.l BottleLimitReplacement BRA .normal
JMP GetSpriteID .server_F1
+ JSL.l ItemVisualServiceRequest_F1
PLA : BRA .normal BRA .normal
.server_F0
JSL.l ItemVisualServiceRequest_F0
BRA .normal
.server_F1
JSL.l ItemVisualServiceRequest_F1
BRA .normal
.server_F2 .server_F2
JSL.l ItemVisualServiceRequest_F2 JSL.l ItemVisualServiceRequest_F2
.normal .normal
PHX PHX
PHB : PHK : PLB TAX : LDA.l ItemReceipts_graphics, X ; look up item gfx
;-------- PLX
TAX : LDA.l .gfxSlots, X ; look up item gfx
PLB : PLX
CMP.b #$F8 : !BGE .specialHandling
RTL RTL
.specialHandling
CMP.b #$F9 : BNE ++ ; Progressive Magic
LDA.l MagicConsumption : BNE +++
LDA.b #$3B : RTL ; Half Magic
+++
LDA.b #$3C : RTL ; Quarter Magic
++ CMP.b #$FA : BNE ++ ; RNG Item (Single)
JSL.l GetRNGItemSingle : JMP GetSpriteID
++ CMP.b #$FB : BNE ++ ; RNG Item (Multi)
JSL.l GetRNGItemMulti : JMP GetSpriteID
++ CMP.b #$FD : BNE ++ ; Progressive Armor
LDA.l ArmorEquipment : CMP.l ProgressiveArmorLimit : !BLT + ; Progressive Armor Limit
LDA.l ProgressiveArmorReplacement
JMP GetSpriteID
+
LDA.b #$04 : RTL
++ CMP.b #$FE : BNE ++ ; Progressive Sword
LDA.l HighestSword
CMP.l ProgressiveSwordLimit : !BLT + ; Progressive Sword Limit
LDA.l ProgressiveSwordReplacement
JMP GetSpriteID
+ : CMP.b #$00 : BNE + ; No Sword
LDA.b #$43 : RTL
+ : CMP.b #$01 : BNE + ; Fighter Sword
LDA.b #$44 : RTL
+ : CMP.b #$02 : BNE + ; Master Sword
LDA.b #$45 : RTL
+ ; CMP.b #$03 : BNE + ; Tempered Sword
LDA.b #$46 : RTL
+
++ : CMP.b #$FF : BNE ++ ; Progressive Shield
LDA.l HighestShield
CMP.l ProgressiveShieldLimit : !BLT + ; Progressive Shield Limit
LDA.l ProgressiveShieldReplacement
JMP GetSpriteID
+ : CMP.b #$00 : BNE + ; No Shield
LDA.b #$2D : RTL
+ : CMP.b #$01 : BNE + ; Fighter Shield
LDA.b #$20 : RTL
+ ; Everything Else
LDA.b #$2E : RTL
++ : CMP.b #$F8 : BNE ++ ; Progressive Bow
LDA.l BowEquipment : INC : LSR
CMP.l ProgressiveBowLimit : !BLT +
LDA.l ProgressiveBowReplacement
JMP GetSpriteID
+ : CMP.b #$00 : BNE + ; No Bow
LDA.b #$29 : RTL
+ ; Any Bow
LDA.b #$2A : RTL
++
RTL
;DATA - Loot Identifier to Sprite ID
{
.gfxSlots
db $06, $44, $45, $46, $2D, $20, $2E, $09
db $09, $0A, $08, $05, $10, $0B, $2C, $1B
db $1A, $1C, $14, $19, $0C, $07, $1D, $2F
db $07, $15, $12, $0D, $0D, $0E, $11, $17
db $28, $27, $04, $04, $0F, $16, $03, $13
db $01, $1E, $10, $00, $00, $00, $00, $00
db $00, $30, $22, $21, $24, $24, $24, $23
db $23, $23, $29, $2A, $2C, $2B, $03, $03
db $34, $35, $31, $33, $02, $32, $36, $37
db $2C, $43, $0C, $38, $39, $3A, $F9, $3C
; db $2C, $06, $0C, $38, $FF, $FF, $FF, $FF
;5x
db $44 ; Safe Master Sword
db $3D, $3E, $3F, $40 ; Bomb & Arrow +5/+10
db $2C, $00, $00 ; 3x Programmable Item
db $41 ; Upgrade-Only Silver Arrows
db $24 ; 1 Rupoor
db $47 ; Null Item
db $48, $48, $48 ; Red, Blue & Green Clocks
db $FE, $FF ; Progressive Sword & Shield
;6x
db $FD, $0D ; Progressive Armor & Gloves
db $FA, $FB ; RNG Single & Multi
db $F8, $F8 ; Progressive Bow x2
db $FF, $FF, $FF, $FF ; Unused
db $49, $4A, $49 ; Goal Item Single, Multi & Alt Multi
db $39, $39, $39 ; Server Request F0, F1, F2
;7x
db $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21 ; Free Map
;8x
db $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16 ; Free Compass
;9x
db $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22 ; Free Big Key
;Ax
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F ; Free Small Key
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Reserved
}
;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; GetSpritePalette ; GetSpritePalette
@@ -157,264 +32,67 @@ RTL
; out: A - Palette ; out: A - Palette
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
GetSpritePalette: GetSpritePalette:
JSR AttemptItemSubstitution JSR AttemptItemSubstitution
CMP.b #$16 : BEQ .bottle ; Bottle JSR.w ResolveLootID
CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle .resolved
CMP.b #$2C : BEQ .bottle ; Green Potion w/bottle TAX
CMP.b #$2D : BEQ .bottle ; Blue Potion w/bottle LDA.l SpriteProperties_standing_palette, X : BIT #$80 : BNE .load_palette
CMP.b #$3C : BEQ .bottle ; Bee w/bottle ASL
CMP.b #$3D : BEQ .bottle ; Fairy w/bottle
CMP.b #$48 : BEQ .bottle ; Gold Bee w/bottle
BRA .notBottle
.bottle
PHA : JSR.w CountBottles : CMP.l BottleLimit : !BLT +
PLA : LDA.l BottleLimitReplacement
JMP GetSpritePalette
+
PLA : .notBottle
PHX
PHB : PHK : PLB
;--------
TAX : LDA.l GfxPalettes, X ; look up item gfx
PLB : PLX
CMP.b #$F8 : !BGE .specialHandling
RTL RTL
.specialHandling .load_palette
CMP.b #$FD : BNE ++ ; Progressive Sword JSL.l LoadItemPalette
LDA.l HighestSword ASL
CMP.l ProgressiveSwordLimit : !BLT + ; Progressive Sword Limit
LDA.l ProgressiveSwordReplacement
JMP GetSpritePalette
+ : CMP.b #$00 : BNE + ; No Sword
LDA.b #$04 : RTL
+ : CMP.b #$01 : BNE + ; Fighter Sword
LDA.b #$04 : RTL
+ : CMP.b #$02 : BNE + ; Master Sword
LDA.b #$02 : RTL
+ ; Everything Else
LDA.b #$08 : RTL
++ : CMP.b #$FE : BNE ++ ; Progressive Shield
LDA.l HighestShield
CMP.l ProgressiveShieldLimit : !BLT + ; Progressive Shield Limit
LDA.l ProgressiveShieldReplacement
JMP GetSpritePalette
+ : CMP.b #$00 : BNE + ; No Shield
LDA.b #$04 : RTL
+ : CMP.b #$01 : BNE + ; Fighter Shield
LDA.b #$02 : RTL
+ ; Everything Else
LDA.b #$08 : RTL
++ : CMP.b #$FF : BNE ++ ; Progressive Armor
LDA.l HighestMail
CMP.l ProgressiveArmorLimit : !BLT + ; Progressive Armor Limit
LDA.l ProgressiveArmorReplacement
JMP GetSpritePalette
+ : CMP.b #$00 : BNE + ; Green Tunic
LDA.b #$04 : RTL
+ ; Everything Else
LDA.b #$02 : RTL
++ : CMP.b #$FC : BNE ++ ; Progressive Gloves
LDA.l GloveEquipment : BNE + ; No Gloves
LDA.b #$02 : RTL
+ ; Everything Else
LDA.b #$08 : RTL
++ : CMP.b #$F8 : BNE ++ ; Progressive Bow
LDA.l BowEquipment : INC : LSR
CMP.l ProgressiveBowLimit : !BLT +
LDA.l ProgressiveBowReplacement
JMP GetSpritePalette
+ : CMP.b #$00 : BNE + ; No Bow
LDA.b #$08 : RTL
+ ; Any Bow
LDA.b #$02 : RTL
++ : CMP.b #$FA : BNE ++ ; RNG Item (Single)
JSL.l GetRNGItemSingle : JMP GetSpritePalette
++ : CMP.b #$FB : BNE ++ ; RNG Item (Multi)
JSL.l GetRNGItemMulti : JMP GetSpritePalette
++
RTL RTL
;DATA - Loot Identifier to Sprite Palette
{
GfxPalettes:
db $00, $04, $02, $08, $04, $02, $08, $02
db $04, $02, $02, $02, $04, $04, $04, $08
db $08, $08, $02, $02, $04, $02, $02, $02
db $04, $02, $04, $02, $08, $08, $04, $02
db $0A, $02, $04, $02, $04, $04, $00, $04
db $04, $08, $02, $02, $08, $04, $02, $08
db $04, $04, $08, $08, $08, $04, $02, $08
db $02, $04, $08, $02, $04, $04, $02, $02
db $08, $08, $02, $04, $04, $08, $08, $08
db $04, $04, $04, $02, $08, $08, $08, $08
; db $04, $0A, $04, $02, $FF, $FF, $FF, $FF
db $04 ; Safe Master Sword
db $08, $08, $08, $08 ; Bomb & Arrow +5/+10
db $04, $00, $00 ; Programmable Items 1-3
db $02 ; Upgrade-Only Silver Arrows
db $06 ; 1 Rupoor
db $02 ; Null Item
db $02, $04, $08 ; Red, Blue & Green Clocks
db $FD, $FE, $FF, $FC ; Progressive Sword, Shield, Armor & Gloves
db $FA, $FB ; RNG Single & Multi
db $F8, $F8 ; Progressive Bow
db $00, $00, $00, $00 ; Unused
db $08, $08, $08 ; Goal Item Single, Multi & Alt Multi
db $04, $04, $04 ; Server Request F0, F1, F2
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Free Map
db $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04 ; Free Compass
;db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; *EVENT*
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Free Big Key
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Free Small Key
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused
}
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; IsNarrowSprite
; in: A - Loot ID
; out: Carry - 0 = Full, 1 = Narrow
;--------------------------------------------------------------------------------
IsNarrowSprite:
PHA : PHX
PHB : PHK : PLB
JSR AttemptItemSubstitution
;--------
CMP.b #$16 : BEQ .bottle ; Bottle
CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle
CMP.b #$2C : BEQ .bottle ; Green Potion w/bottle
CMP.b #$2D : BEQ .bottle ; Blue Potion w/bottle
CMP.b #$3C : BEQ .bottle ; Bee w/bottle
CMP.b #$3D : BEQ .bottle ; Fairy w/bottle
CMP.b #$48 : BEQ .bottle ; Gold Bee w/bottle
BRA .notBottle
.bottle
JSR.w CountBottles : CMP.l BottleLimit : !BLT +
LDA.l BottleLimitReplacement
JSL.l IsNarrowSprite
JMP .done
+ : JMP .continue
.notBottle
CMP.b #$5E : BNE ++ ; Progressive Sword
LDA.l HighestSword : CMP.l ProgressiveSwordLimit : !BLT + ; Progressive Sword Limit
LDA.l ProgressiveSwordReplacement
JSL.l IsNarrowSprite
JMP .done
+ : JMP .continue
++ CMP.b #$5F : BNE ++ ; Progressive Shield
LDA.l HighestShield : BNE + : JMP .done ; No Shield
+ : CMP.l ProgressiveShieldLimit : !BLT .continue
LDA.l ProgressiveShieldReplacement
JSL.l IsNarrowSprite
JMP .done
++ CMP.b #$60 : BNE ++ ; Progressive Armor
LDA.l HighestMail : CMP.l ProgressiveArmorLimit : !BLT .continue
LDA.l ProgressiveArmorReplacement
JSL.l IsNarrowSprite
JMP .done
+
++ CMP.b #$62 : BNE ++ ; RNG Item (Single)
JSL.l GetRNGItemSingle : JMP .continue
++ CMP.b #$63 : BNE ++ ; RNG Item (Multi)
JSL.l GetRNGItemMulti
++ CMP.b #$64 : BEQ + ; Progressive Bow
CMP.b #$65 : BNE .continue ; Progressive Bow (alt)
+ : LDA.l BowEquipment : INC : LSR
CMP.l ProgressiveBowLimit : !BLT +
LDA.l ProgressiveBowReplacement
JSL.l IsNarrowSprite
JMP .done
.continue
;--------
LDX.b #$00 ; set index counter to 0
;----
-
CPX.b #$24 : !BGE .false ; finish if we've done the whole list
CMP.l .smallSprites, X : BNE + ; skip to next if we don't match
;--
SEC ; set true state
BRA .done ; we're done
;--
+
INX ; increment index
BRA - ; go back to beginning of loop
;----
.false
CLC
.done
PLB : PLX : PLA
RTL
;DATA - Half-Size Sprite Markers
{
.smallSprites
db $04, $07, $08, $09, $0A, $0B, $0C, $13
db $15, $18, $24, $2A, $34, $35, $36, $42
db $43, $45, $59, $A0, $A1, $A2, $A3, $A4
db $A5, $A6, $A7, $A8, $A9, $AA, $AB, $AC
db $AD, $AE, $AF, $FF, $FF, $FF, $FF, $FF
}
;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; PrepDynamicTile ; PrepDynamicTile
; in: A - Loot ID ; in: SpriteID,X - Loot ID
;-------------------------------------------------------------------------------- 20/8477 ;-------------------------------------------------------------------------------- 20/8477
PrepDynamicTile: PrepDynamicTile:
PHA : PHX : PHY PHX : PHY : PHB
JSR.w ResolveLootID
-
JSR.w LoadDynamicTileOAMTable JSR.w LoadDynamicTileOAMTable
JSL.l GetSpriteID ; convert loot id to sprite id JSL TransferItemReceiptToBuffer_using_ReceiptID
JSL.l GetAnimatedSpriteTile_variable SEP #$30
PLY : PLX : PLA PLB : PLY : PLX
RTL RTL
.loot_resolved
PHX : PHY : PHB
BRA -
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; LoadDynamicTileOAMTable ; LoadDynamicTileOAMTable
; in: A - Loot ID ; in: SpriteID,X - Loot ID
; out: A - Loot ID
;-------------------------------------------------------------------------------- 20/847B ;-------------------------------------------------------------------------------- 20/847B
LoadDynamicTileOAMTable: LoadDynamicTileOAMTable:
PHA : PHP PHP
REP #$20
LDA.w #$0000 : STA.l SpriteOAM : STA.l SpriteOAM+2
LDA.w #$0200 : STA.l SpriteOAM+6
SEP #$20
LDA.b #$24 : STA.l SpriteOAM+4
PHA LDA.w SpriteID,X
REP #$20 ; set 16-bit accumulator JSL.l GetSpritePalette_resolved
LDA.w #$0000 : STA.l SpriteOAM STA.l SpriteOAM+5 : STA.l SpriteOAM+13
STA.l SpriteOAM+2 PHX
LDA.w #$0200 : STA.l SpriteOAM+6 LDA.l SpriteProperties_standing_width,X : BEQ .narrow
SEP #$20 ; set 8-bit accumulator BRA .done
LDA.b #$24 : STA.l SpriteOAM+4
LDA.b $01,s .narrow
REP #$20
LDA.w #$0000 : STA.l SpriteOAM+7 : STA.l SpriteOAM+14
LDA.w #$0800 : STA.l SpriteOAM+9
LDA.w #$3400 : STA.l SpriteOAM+11
JSL.l GetSpritePalette .done
STA.l SpriteOAM+5 : STA.l SpriteOAM+13 TXA
PLA PLX
JSL.l IsNarrowSprite : BCS .narrow PLP
BRA .done
.narrow
REP #$20 ; set 16-bit accumulator
LDA.w #$0000 : STA.l SpriteOAM+7
STA.l SpriteOAM+14
LDA.w #$0800 : STA.l SpriteOAM+9
LDA.w #$3400 : STA.l SpriteOAM+11
.done
PLP : PLA
RTS RTS
;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; DrawDynamicTile ; DrawDynamicTile
@@ -424,58 +102,66 @@ RTS
; This wastes two OAM slots if you don't want a shadow - fix later - I wrote "fix later" over a year ago and it's still not fixed (Aug 6, 2017) - lol (May 25th, 2019) ; This wastes two OAM slots if you don't want a shadow - fix later - I wrote "fix later" over a year ago and it's still not fixed (Aug 6, 2017) - lol (May 25th, 2019)
;-------------------------------------------------------------------------------- 2084B8 ;-------------------------------------------------------------------------------- 2084B8
DrawDynamicTile: DrawDynamicTile:
JSL.l IsNarrowSprite : BCS .narrow PHX
TAX
LDA.l SpriteProperties_standing_width,X : BEQ .narrow
.full .full
LDA.b #$01 : STA.b Scrap06 PLX
LDA.b #$0C : JSL.l OAM_AllocateFromRegionC LDA.b #$01 : STA.b Scrap06
LDA.b #$02 : PHA LDA.b #$0C : JSL.l OAM_AllocateFromRegionC
BRA .draw LDA.b #$02 : PHA
BRA .draw
.narrow .narrow
LDA.b #$02 : STA.b Scrap06 PLX
LDA.b #$10 : JSL.l OAM_AllocateFromRegionC LDA.b #$02 : STA.b Scrap06
LDA.b #$03 : PHA LDA.b #$10 : JSL.l OAM_AllocateFromRegionC
LDA.b #$03 : PHA
.draw .draw
LDA.b #SpriteOAM>>0 : STA.b Scrap08 LDA.b #SpriteOAM>>0 : STA.b Scrap08
LDA.b #SpriteOAM>>8 : STA.b Scrap09 LDA.b #SpriteOAM>>8 : STA.b Scrap09
STZ.b Scrap07 STZ.b Scrap07
LDA.b #$7E : PHB : PHA : PLB LDA.b #$7E : PHB : PHA : PLB
LDA.b #$01 : STA.l SpriteSkipEOR LDA.b #$01 : STA.l SpriteSkipEOR
JSL Sprite_DrawMultiple_quantity_preset JSL Sprite_DrawMultiple_quantity_preset
LDA.b #$00 : STA.l SpriteSkipEOR LDA.b #$00 : STA.l SpriteSkipEOR
PLB PLB
LDA.b OAMPtr : !ADD.b #$08 : STA.b OAMPtr ; leave the pointer in the right spot to draw the shadow, if desired LDA.b OAMPtr : !ADD.b #$08 : STA.b OAMPtr ; leave the pointer in the right spot to draw the shadow, if desired
LDA.b OAMPtr+2 : INC #2 : STA.b OAMPtr+2 LDA.b OAMPtr+2 : INC #2 : STA.b OAMPtr+2
PLA PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DrawDynamicTileNoShadow: DrawDynamicTileNoShadow:
JSL.l IsNarrowSprite : BCS .narrow PHX
TAX
LDA.l SpriteProperties_standing_width,X : BEQ .narrow
.full .full
LDA.b #$01 : STA.b Scrap06 PLX
LDA.b #$04 : JSL.l OAM_AllocateFromRegionC LDA.b #$01 : STA.b Scrap06
BRA .draw LDA.b #$04 : JSL.l OAM_AllocateFromRegionC
BRA .draw
.narrow .narrow
LDA.b #$02 : STA.b Scrap06 PLX
LDA.b #$08 : JSL.l OAM_AllocateFromRegionC LDA.b #$02 : STA.b Scrap06
LDA.b #$08 : JSL.l OAM_AllocateFromRegionC
.draw .draw
LDA.b #SpriteOAM>>0 : STA.b Scrap08 LDA.b #SpriteOAM>>0 : STA.b Scrap08
LDA.b #SpriteOAM>>8 : STA.b Scrap09 LDA.b #SpriteOAM>>8 : STA.b Scrap09
STZ.b Scrap07 STZ.b Scrap07
LDA.b #$7E : PHB : PHA : PLB LDA.b #$7E : PHB : PHA : PLB
LDA.b #$01 : STA.l SpriteSkipEOR LDA.b #$01 : STA.l SpriteSkipEOR
JSL Sprite_DrawMultiple_quantity_preset JSL Sprite_DrawMultiple_quantity_preset
LDA.l Bob : BNE + : LDA.b #$00 : STA.l SpriteSkipEOR : + ; Bob fix is conditional LDA.l Bob : BNE + : LDA.b #$00 : STA.l SpriteSkipEOR : + ; Bob fix is conditional
PLB PLB
LDA.b OAMPtr : !ADD.b #$08 : STA.b OAMPtr LDA.b OAMPtr : !ADD.b #$08 : STA.b OAMPtr
LDA.b OAMPtr+2 : INC #2 : STA.b OAMPtr+2 LDA.b OAMPtr+2 : INC #2 : STA.b OAMPtr+2
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -501,13 +187,13 @@ RTL
; out: Carry - 1 = On Screen, 0 = Off Screen ; out: Carry - 1 = On Screen, 0 = Off Screen
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
Sprite_IsOnscreen: Sprite_IsOnscreen:
JSR _Sprite_IsOnscreen_DoWork JSR .check_sprite
BCS + BCS +
REP #$20 REP #$20
LDA.b BG2H : PHA : !SUB.w #$0F : STA.b BG2H LDA.b BG2H : PHA : !SUB.w #$0F : STA.b BG2H
LDA.b BG2V : PHA : !SUB.w #$0F : STA.b BG2V LDA.b BG2V : PHA : !SUB.w #$0F : STA.b BG2V
SEP #$20 SEP #$20
JSR _Sprite_IsOnscreen_DoWork JSR .check_sprite
REP #$20 REP #$20
PLA : STA.b BG2V PLA : STA.b BG2V
PLA : STA.b BG2H PLA : STA.b BG2H
@@ -515,7 +201,7 @@ Sprite_IsOnscreen:
+ +
RTL RTL
_Sprite_IsOnscreen_DoWork: .check_sprite
LDA.w SpritePosXLow, X : CMP.b BG2H LDA.w SpritePosXLow, X : CMP.b BG2H
LDA.w SpritePosXHigh, X : SBC.b BG2H+1 : BNE .offscreen LDA.w SpritePosXHigh, X : SBC.b BG2H+1 : BNE .offscreen
@@ -558,7 +244,7 @@ RTL
SkipDrawEOR: SkipDrawEOR:
LDA.l SpriteSkipEOR : BEQ .normal LDA.l SpriteSkipEOR : BEQ .normal
LDA.w #$0000 : STA.l SpriteSkipEOR LDA.w #$0000 : STA.l SpriteSkipEOR
LDA.w Scrap04 : AND.w #$F0FF : STA.w Scrap04 LDA.w #$0F00 : TRB.b Scrap04
.normal .normal
LDA.b ($08), Y : EOR.w Scrap04 ; thing we wrote over LDA.b ($08), Y : EOR.w Scrap04 ; thing we wrote over
RTL RTL
@@ -628,8 +314,89 @@ RTL
;This feature makes it easy to draw the same tile repeatedly. If this bit is set, the length bits should be set to 2 times the number of copies of the tile to upload. (Without subtracting 1!) ;This feature makes it easy to draw the same tile repeatedly. If this bit is set, the length bits should be set to 2 times the number of copies of the tile to upload. (Without subtracting 1!)
;It is followed by a single tile (word). Combining this this with the D bit makes it easy to draw large horizontal or vertical runs of a tile without using much space. Geat for erasing or drawing horizontal or verical box edges. ;It is followed by a single tile (word). Combining this this with the D bit makes it easy to draw large horizontal or vertical runs of a tile without using much space. Geat for erasing or drawing horizontal or verical box edges.
;================================================================================ ;================================================================================
DynamicDrawCleanup:
PHA
REP #$20
LDA.w #$F000
STA.w OAMBuffer
STA.w OAMBuffer+$04
STA.w OAMBuffer+$08
STA.w OAMBuffer+$0C
STZ.w OAMBuffer+$02
STZ.w OAMBuffer+$06
STZ.w OAMBuffer+$0A
STZ.w OAMBuffer+$0E
SEP #$20
PLA
RTL
;------------------------------------------------------------------------------
CheckReceivedItemPropertiesBeforeLoad:
PHX
LDX.w CurrentSpriteSlot
LDA.w AncillaID,X : CMP.b #$29 : BEQ .falling_sprite
PLX
LDA.b RoomIndex : BEQ .normalCode
LDA.l RoomFade : BNE .load_palette
.normalCode
LDA.l SpriteProperties_chest_palette,X : BIT #$80 : BNE .load_palette
RTL
.load_palette
JSL.l LoadItemPalette
RTL
.falling_sprite
PLX
LDA.l SpriteProperties_standing_palette,X : BIT #$80 : BNE .load_palette
RTL
;------------------------------------------------------------------------------
LoadItemPalette:
; In: X - Loot ID
; Out: A - Sprite palette index
PHX : PHY : PHB
LDA.b #PalettesVanillaBank>>16 : STA.b Scrap0C
LDA.b #$7E
PHA : PLB
REP #$30
TXA : ASL : TAX
LDA.l SpriteProperties_palette_addr,X : STA.b Scrap0A
LDY.w #$000E
LDA.w TransparencyFlag : BNE .SP05
-
LDA.b [Scrap0A], Y : STA.w PaletteBuffer+$0170,Y
DEY #2
BPL -
LDA.w #$0003
BRA .done
.SP05
-
LDA.b [Scrap0A], Y : STA.w PaletteBuffer+$01B0,Y
DEY #2
BPL -
LDA.w #$0005
.done
SEP #$30
PLB : PLY : PLX
INC.b NMICGRAM
RTL
TransferVRAMStripes: TransferVRAMStripes:
JSL.l TransferNumericStripes JSL.l TransferNewNameStripes
JSL.l DoDungeonMapBossIcon JSL.l DoDungeonMapBossIcon
LDA.b NMISTRIPES : CMP.b #$01 ; What we wrote over LDA.b NMISTRIPES : CMP.b #$01 ; What we wrote over
RTL RTL
ItemReceiptWidthCheck:
PHX
LDX.w CurrentSpriteSlot
LDA.w AncillaID,X : CMP.b #$29 : BEQ .falling_sprite
PLX
LDA.l SpriteProperties_chest_width, X
RTL
.falling_sprite
PLX
LDA.l SpriteProperties_standing_width, X
RTL

View File

@@ -1,123 +1,185 @@
;================================================================================ ;===================================================================================================
; Vanilla Labels ; Vanilla Labels
;================================================================================ ;===================================================================================================
; EVERY LABEL SHOULD BE IN A FAST ROM BANK
;===================================================================================================
; Labels for routines in the vanilla portion of the ROM. More or less in sequential ; Labels for routines in the vanilla portion of the ROM. More or less in sequential
; order. Most of these names came from the MoN US disassembly. But we should ; order. Most of these names came from the MoN US disassembly. But we should
; refer to the JP 1.0 disassembly as that's what the randomizer is based on. ; refer to the JP 1.0 disassembly as that's what the randomizer is based on.
; All routines can be assumed to return long unless otherwise noted. ;===================================================================================================
;================================================================================ ;---------------------------------------------------------------------------------------------------
;===================================================================================================
; Long routines (use JSL)
;===================================================================================================
Vram_EraseTilemaps_triforce = $808333
JumpTableLocal = $808781
JumpTableLong = $80879C
Sound_LoadLightWorldSongBank = $808913
Sound_LoadLightWorldSongBank_do_load = $80891D
EnableForceBlank = $80893D
DungeonMask = $8098C0
DecompSwordGfx = $80D308
DecompShieldGfx = $80D348
Tagalong_LoadGfx = $80D463
GetAnimatedSpriteTile = $80D51B
GetAnimatedSpriteTile_variable = $80D52D
Attract_DecompressStoryGfx = $80D84E
InitializeTilesets = $80E1DB
LoadSelectScreenGfx = $80E529
CopyFontToVRAM = $80E596
PrepDungeonExit = $80F945
Mirror_InitHdmaSettings = $80FDEE
Dungeon_LoadRoom = $81873A
Underworld_HandleRoomTags = $81C2FD
Module_PreDungeon = $82821E
Module_PreDungeon_setAmbientSfx = $828296
Dungeon_SaveRoomData = $82A0A8
Dungeon_SaveRoomData_justKeys = $82A0BE
Dungeon_SaveRoomQuadrantData = $82B861
LoadGearPalettes_bunny = $82FD8A
LoadGearPalettes_variable = $82FD95
Filter_Majorly_Whiten_Color = $82FEAB
Ancilla_SpawnFallingPrize = $85A51D
Sprite_DrawMultiple = $85DF6C
Sprite_DrawMultiple_quantity_preset = $85DF70
Sprite_DrawMultiple_player_deferred = $85DF75
Sprite_ShowSolicitedMessageIfPlayerFacing = $85E1A7
Sprite_ShowMessageFromPlayerContact = $85E1F0
Sprite_ShowMessageUnconditional = $85E219
Sprite_ZeldaLong = $85EC96
Sprite_EA_HeartContainer = $85EF3F
Sprite_EB_HeartPiece_handle_flags = $85F0C0
Player_ApplyRumbleToSprites = $8680FA
Sprite_Main = $868328
Utility_CheckIfHitBoxesOverlapLong = $8683E6
Sprite_PrepAndDrawSingleLargeLong = $86DBF8
Sprite_PrepAndDrawSingleSmallLong = $86DC00
Sprite_DrawShadowLong = $86DC5C
DashKey_Draw = $86DD40
Sprite_ApplySpeedTowardsPlayerLong = $86EA18
Sprite_DirectionToFacePlayerLong = $86EAA6
Sprite_CheckDamageToPlayerSameLayerLong = $86F12F
OAM_AllocateDeferToPlayerLong = $86F86A
Player_HaltDashAttackLong = $8791B3
Link_ReceiveItem = $87999D
Sprite_CheckIfPlayerPreoccupied = $87F4AA
Sprite_AttemptDamageToPlayerPlusRecoilLong = $86F425
Ancilla_Main = $888242
Ancilla_ReceiveItem = $88C3AE
Ancilla_BreakTowerSeal_draw_single_crystal = $88CE93
Ancilla_BreakTowerSeal_stop_spawning_sparkles = $88CEC3
BreakTowerSeal_ExecuteSparkles = $88CF59
Ancilla_SetOam_XY_Long = $88F710
AddReceivedItem = $8985E2
AncillaAdd_ItemReceipt_not_crystal = $898605
AncillaAdd_FallingPrize = $898BAD
AncillaAdd_FallingPrize_not_medallion = $898BD6
AddWeathervaneExplosion = $898CFD
AddDashTremor = $8993DF
AddAncillaLong = $899D04
Ancilla_CheckIfAlreadyExistsLong = $899D1A
GiveRupeeGift = $89AD58
Sprite_SetSpawnedCoords = $89AE64
OverworldMap_InitGfx = $8ABA4F
OverworldMap_DarkWorldTilemap = $8ABA99
OverworldMap_LoadSprGfx = $8ABAB9
NameFile_MakeScreenVisible = $8CD7D1
InitializeSaveFile = $8CDB3E
InitializeSaveFile_build_checksum = $8CDBC0
InitializeSaveFile_checksum_done = $8CDBDB
GetRandomInt = $8DBA71
OAM_AllocateFromRegionA = $8DBA80
OAM_AllocateFromRegionB = $8DBA84
OAM_AllocateFromRegionC = $8DBA88
OAM_AllocateFromRegionD = $8DBA8C
OAM_AllocateFromRegionE = $8DBA90
OAM_AllocateFromRegionF = $8DBA94
Sound_SetSfxPanWithPlayerCoords = $8DBB67
Sound_SetSfx1PanLong = $8DBB6E
Sound_SetSfx2PanLong = $8DBB7C
Sound_SetSfx3PanLong = $8DBB8A
HUD_RefreshIconLong = $8DDB7F
Equipment_UpdateEquippedItemLong = $8DDD32
BottleMenu_movingOn = $8DE01E
RestoreNormalMenu = $8DE346
Equipment_SearchForEquippedItemLong = $8DE395
HUD_RebuildLong = $8DFA78
HUD_RebuildIndoor_Palace = $8DFA88
HUD_RebuildLong2 = $8DFA88
RebuildHUD_update = $8DFAA5
Messaging_Text = $8EEE10
AfterDeathCounterOutput = $8E8FD
Overworld_TileAttr = $8FFD94
Overworld_DrawPersistentMap16 = $9BC97C
Palette_Sword = $9BED03
Palette_Shield = $9BED29
Palette_ArmorAndGloves = $9BEDF9
Palette_Hud = $9BEE52
Palette_SelectScreen = $9BEF96
Sprite_NullifyHookshotDrag = $9CF500
Ancilla_CheckForAvailableSlot = $9CF537
ShopKeeper_RapidTerminateReceiveItem = $9CFAAA
Filter_MajorWhitenMain = $9DE9B6
Sprite_SpawnDynamically = $9DF65D
Sprite_SpawnDynamically_arbitrary = $9DF65F
DiggingGameGuy_AttemptPrizeSpawn = $9DFD4B
Sprite_GetEmptyBottleIndex = $9EDE28
CrystalCutscene_Initialize_skip_palette = $9ECD39
Sprite_PlayerCantPassThrough = $9EF4E7
;===================================================================================================
; Local routines (use JSR)
;===================================================================================================
LoadBackgroundGraphics = $80E649
LoadBackgroundGraphics_arbitrary = $80E64D
RoomTag_PrizeTriggerDoor_open = $81C529
RoomTag_PrizeTriggerDoor_exit = $81C529
RoomTag_GetHeartForPrize = $81C709
RoomTag_GetHeartForPrize_spawn_prize = $81C731
RoomTag_GetHeartForPrize_delete_tag = $81C749
Chicken_SpawnAvengerChicken = $86A7DB
Link_PerformOpenChest_no_replacement = $87B59F
Sprite_EA_HeartContainer_main = $85EF47
Ancilla_ExecuteAll = $88832B
Ancilla_ExecuteOne = $88833C
Ancilla22_ItemReceipt_is_pendant = $88C421
Ancilla22_ItemReceipt_wait_for_music = $88C42B
ItemReceipt_Animate_continue = $88C637
AncillaDraw_ItemReceipt = $88C6B4
Ancilla29_MilestoneItemReceipt = $88CAB0
Ancilla29_MilestoneItemReceipt_skip_crystal_sfx = $88CAE5
Ancilla29_MilestoneItemReceipt_no_sparkle = $88CB2E
Ancilla_SetOAM_XY = $88F6F3
Ancilla_AddAncilla = $899CCE
DrawProgressIcons = $8DE9C8
ItemMenu_DrawEquippedYItem = $8DEB3A
ItemMenu_DrawEquippedYItem_exit = $8DECE6
ItemMenu_DrawEquipment_dungeonitems = $8DEDCC
DrawEquipment = $8DED29
DrawEquipment_in_a_dungeon = $8DEDFE
UpdateHUDBuffer_update_item_check_arrows = $8DFB41
RenderText_DecompressAndDrawSingle = $8EF4FB
DecompressFontGFX = $8EF572
CopyDecompressedCharToTransferBuffer = $8EF5BC
CopyDecompressedToFullBuffer = $8EF6A8
UseImplicitRegIndexedLocalJumpTable = $008781 ;===================================================================================================
UseImplicitRegIndexedLongJumpTable = $00879C ; Palettes
Vram_EraseTilemaps_triforce = 008333 ;===================================================================================================
Sound_LoadLightWorldSongBank = $008913 PalettesVanillaBank = $9B0000
Sound_LoadLightWorldSongBank_do_load = $00891D PalettesVanilla_none = $9B0000
EnableForceBlank = $00893D PalettesVanilla_red_melon = $9BD218
SaveGameFile = $00894A ; long PalettesVanilla_blue_ice = $9BD236
DungeonMask = $0098C0 PalettesVanilla_green_blue_guard = $9BD272
DecompSwordGfx = $00D308 PalettesVanilla_dark_world_melon = $9BD290
DecompShieldGfx = $00D348 PalettesVanilla_blue_dark_ice = $9BD2BC
Tagalong_LoadGfx = $00D463 PalettesVanilla_spraux09 = $9BD47E
GetAnimatedSpriteTile = $00D51B
GetAnimatedSpriteTile_variable = $00D52D
Attract_DecompressStoryGfx = $00D84E
LoadSelectScreenGfx = $00E529
PrepDungeonExit = $00F945
Mirror_InitHdmaSettings = $00FDEE
Dungeon_LoadRoom = $01873A
Module_PreDungeon = $02821E
Module_PreDungeon_setAmbientSfx = $028296
Dungeon_SaveRoomData = $02A0A8
Dungeon_SaveRoomData_justKeys = $02A0BE
Dungeon_SaveRoomQuadrantData = $02B861
LoadGearPalettes_bunny = $02FD8A
LoadGearPalettes_variable = $02FD95
Filter_Majorly_Whiten_Color = $02FEAB
Sprite_SpawnFallingItem = $05A51D
Sprite_DrawMultiple = $05DF6C
Sprite_DrawMultiple_quantity_preset = $05DF70
Sprite_DrawMultiple_player_deferred = $05DF75
Sprite_ShowSolicitedMessageIfPlayerFacing = $05E1A7
Sprite_ShowMessageFromPlayerContact = $05E1F0
Sprite_ShowMessageUnconditional = $05E219
Sprite_ZeldaLong = $05EC96
Sprite_EB_HeartPiece_handle_flags = $05F0C0
Player_ApplyRumbleToSprites = $0680FA
Utility_CheckIfHitBoxesOverlapLong = $0683E6
Chicken_SpawnAvengerChicken = $06A7DB ; returns short
Sprite_DrawShadowLong = $06DC5C
DashKey_Draw = $06DD40
Sprite_PrepAndDrawSingleLargeLong = $06DBF8
Sprite_PrepAndDrawSingleSmallLong = $06DC00
Sprite_ApplySpeedTowardsPlayerLong = $06EA18
Sprite_DirectionToFacePlayerLong = $06EAA6
Sprite_CheckDamageToPlayerSameLayerLong = $06F12F
OAM_AllocateDeferToPlayerLong = $06F86A
Player_HaltDashAttackLong = $0791B3
Link_ReceiveItem = $07999D
Sprite_CheckIfPlayerPreoccupied = $07F4AA
Ancilla_ReceiveItem = $08C3AE
Ancilla_BreakTowerSeal_draw_single_crystal = $08CE93
Ancilla_BreakTowerSeal_stop_spawning_sparkles = $08CEC3
BreakTowerSeal_ExecuteSparkles = $08CF59
Ancilla_SetOam_XY_Long = $08F710
AddReceivedItem = $0985E2
AddPendantOrCrystal = $098BAD
AddWeathervaneExplosion = $098CFD
AddDashTremor = $0993DF
AddAncillaLong = $099D04
Ancilla_CheckIfAlreadyExistsLong = $099D1A
Sprite_SetSpawnedCoords = $09AE64
GiveRupeeGift = $09AD58
Overworld_LoadOverlayAndMap = $0AB96C
OverworldMap_InitGfx = $0ABA4F
OverworldMap_DarkWorldTilemap = $0ABA99
OverworldMap_LoadSprGfx = $0ABAB9
NameFile_MakeScreenVisible = $0CD7D1
InitializeSaveFile = $0CDB3E
InitializeSaveFile_build_checksum = $0CDBC0
InitializeSaveFile_done = $0CDBDB
GetRandomInt = $0DBA71
OAM_AllocateFromRegionA = $0DBA80
OAM_AllocateFromRegionB = $0DBA84
OAM_AllocateFromRegionC = $0DBA88
OAM_AllocateFromRegionD = $0DBA8C
OAM_AllocateFromRegionE = $0DBA90
OAM_AllocateFromRegionF = $0DBA94
Sound_SetSfxPanWithPlayerCoords = $0DBB67
Sound_SetSfx1PanLong = $0DBB6E
Sound_SetSfx2PanLong = $0DBB7C
Sound_SetSfx3PanLong = $0DBB8A
HUD_RefreshIconLong = $0DDB7F
Equipment_UpdateEquippedItemLong = $0DDD32
BottleMenu_movingOn = $0DE01E
RestoreNormalMenu = $0DE346
Equipment_SearchForEquippedItemLong = $0DE395
DrawProgressIcons = $0DE9C8 ; returns short
ItemMenu_DrawEquippedYItem = $0DEB3A ; returns short
ItemMenu_DrawEquippedYItem_exit = $0DECE6 ; returns short
ItemMenu_DrawEquipment_dungeonitems = $0DEDCC ; returns short
DrawEquipment = $0DED29 ; returns short
HUD_RebuildLong = $0DFA78
HUD_RebuildIndoor_Palace = $0DFA88
HUD_RebuildLong2 = $0DFA88
RebuildHUD_update = $0DFAA5
Messaging_Text = $0EEE10
Overworld_TileAttr = $0FFD94
Overworld_DrawPersistentMap16 = $1BC97C
Palette_Sword = $1BED03
Palette_Shield = $1BED29
Palette_ArmorAndGloves = $1BEDF9
Palette_Hud = $1BEE52
Palette_SelectScreen = $1BEF96
ShopKeeper_RapidTerminateReceiveItem = $1CFAAA
Sprite_NullifyHookshotDrag = $1CF500
Ancilla_CheckForAvailableSlot = $1CF537
Filter_MajorWhitenMain = $1DE9B6
Sprite_SpawnDynamically = $1DF65D
Sprite_SpawnDynamically_arbitrary = $1DF65F
DiggingGameGuy_AttemptPrizeSpawn = $1DFD4B
Sprite_GetEmptyBottleIndex = $1EDE28
Sprite_PlayerCantPassThrough = $1EF4E7
;===================================================================================================
; Misc. Data
;===================================================================================================
WorldMapIcon_AdjustCoordinate = $8AC59B
WorldMap_CalculateOAMCoordinates = $8AC3B1
WorldMap_HandleSpriteBlink = $8AC52E
WorldMap_RedXChars = $8ABF70
TextCharMasks = $8EB844

View File

@@ -1,15 +0,0 @@
;--------------------------------------------------------------------------------
CheckZSNES:
SEP #$28
LDA.b #$FF
CLC
ADC.b #$FF
CMP.b #$64
CLD
BEQ .zsnes
REP #$20
LDA.w #$01FF : TCS ; thing we wrote over - initialize stack
JML.l ReturnCheckZSNES
.zsnes
JML DontUseZSNES
;--------------------------------------------------------------------------------