Item receipt refactor

Inverted maps
Fix shops
This commit is contained in:
cassidoxa
2023-06-30 21:21:59 -04:00
parent 83377b6bea
commit 0a073df728
7 changed files with 711 additions and 844 deletions

View File

@@ -114,7 +114,7 @@ TransferItemReceiptToBuffer_using_ReceiptID:
;=================================================================================================== ;===================================================================================================
TransferItemReceiptToVRAM: TransferItemToVRAM:
REP #$21 REP #$21
SEP #$10 SEP #$10
@@ -128,9 +128,9 @@ TransferItemReceiptToVRAM:
LDX.b #ItemReceiptGraphicsROM>>16 LDX.b #ItemReceiptGraphicsROM>>16
.set_address .set_address
STA.w $4202 STA.w $4302
ADC.w #$0200 ADC.w #$0200
STA.w $4212 STA.w $4312
STX.w $4304 STX.w $4304
STX.w $4314 STX.w $4314
@@ -146,7 +146,7 @@ TransferItemReceiptToVRAM:
STA.w $4305 STA.w $4305
STA.w $4315 STA.w $4315
LDA.w ItemGFXTgt LDA.w ItemGFXTarget
STA.w $2116 STA.w $2116
LDX.b #$01 LDX.b #$01
@@ -159,6 +159,7 @@ TransferItemReceiptToVRAM:
STX.w $420B STX.w $420B
STZ.w ItemGFXPtr STZ.w ItemGFXPtr
STZ.w ItemGFXTarget
.exit .exit
RTL RTL
@@ -888,7 +889,7 @@ StandingItemGraphicsOffsets:
dw BigDecompressionBuffer+$0DA0 ; 46 - 300 rupees dw BigDecompressionBuffer+$0DA0 ; 46 - 300 rupees
dw BigDecompressionBuffer+$0000 ; 47 - 20 rupees green dw BigDecompressionBuffer+$0000 ; 47 - 20 rupees green
dw BigDecompressionBuffer+$09A0 ; 48 - Full bottle (good bee) dw BigDecompressionBuffer+$09A0 ; 48 - Full bottle (good bee)
dw BigDecompressionBuffer+$1C20 ; 49 - Tossed fighter sword dw $00A0 ; 49 - Tossed fighter sword
dw BigDecompressionBuffer+$09A0 ; 4A - Bottle refill (good bee) dw BigDecompressionBuffer+$09A0 ; 4A - Bottle refill (good bee)
dw BigDecompressionBuffer+$0040 ; 4B - Boots dw BigDecompressionBuffer+$0040 ; 4B - Boots

View File

@@ -14,7 +14,7 @@
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; BowTracking ; BowTracking
; Item Tracking Slot #2 ; Item Tracking Slot #2
; bsp----- ; -------- bsp-----
; b = bow ; b = bow
; s = silver arrow bow ; s = silver arrow bow
; p = 2nd progressive bow ; p = 2nd progressive bow

View File

@@ -223,6 +223,7 @@ Overworld_LoadNewTiles:
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
.stripe .stripe
JSR .get_increment
LDX.w $0000,Y LDX.w $0000,Y
BRA ++ ; to increment at start of loop properly BRA ++ ; to increment at start of loop properly
@@ -256,6 +257,7 @@ Overworld_LoadNewTiles:
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
.stripe_rle_inc .stripe_rle_inc
JSR .get_increment
JSR .get_rle_size_and_tile JSR .get_rle_size_and_tile
LDX.w $0000,Y LDX.w $0000,Y
@@ -270,13 +272,11 @@ Overworld_LoadNewTiles:
INC INC
STA.b OWWriteTile STA.b OWWriteTile
++ INY ++ STA.l $7E0000,X
INY
STA.l $7E0000,X
DEC.b OWWriteSize DEC.b OWWriteSize
BNE -- BNE --
INY #2
RTS RTS
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
@@ -297,6 +297,7 @@ Overworld_LoadNewTiles:
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
.stripe_rle .stripe_rle
JSR .get_increment
JSR .get_rle_size_and_tile JSR .get_rle_size_and_tile
LDX.w $0000,Y LDX.w $0000,Y
@@ -309,13 +310,11 @@ Overworld_LoadNewTiles:
LDA.b OWWriteTile LDA.b OWWriteTile
++ INY ++ STA.l $7E0000,X
INY
STA.l $7E0000,X
DEC.b OWWriteSize DEC.b OWWriteSize
BNE -- BNE --
INY #2
RTS RTS
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
@@ -405,7 +404,7 @@ dw $0000 ; 2C
dw $0000 ; 2D dw $0000 ; 2D
dw $0000 ; 2E dw $0000 ; 2E
dw $0000 ; 2F dw $0000 ; 2F
dw $0000 ; 30 dw .map30 ; 30
dw .map31 ; 31 dw .map31 ; 31
dw .map32 ; 32 dw .map32 ; 32
dw .map33 ; 33 dw .map33 ; 33
@@ -428,7 +427,7 @@ dw $0000 ; 41
dw $0000 ; 42 dw $0000 ; 42
dw .map43 ; 43 dw .map43 ; 43
dw .map44 ; 44 dw .map44 ; 44
dw $0000 ; 45 dw .map45 ; 45
dw $0000 ; 46 dw $0000 ; 46
dw .map47 ; 47 dw .map47 ; 47
dw $0000 ; 48 dw $0000 ; 48
@@ -471,7 +470,7 @@ dw $0000 ; 6C
dw $0000 ; 6D dw $0000 ; 6D
dw $0000 ; 6E dw $0000 ; 6E
dw .map6F ; 6F dw .map6F ; 6F
dw $0000 ; 70 dw .map70 ; 70
dw $0000 ; 71 dw $0000 ; 71
dw $0000 ; 72 dw $0000 ; 72
dw .map73 ; 73 dw .map73 ; 73
@@ -491,6 +490,7 @@ dw $0000 ; 7F
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
.map03 .map03
dw !OWW_InvertedOnly
; singles ; singles
dw $0034, $2BE0 dw $0034, $2BE0
@@ -508,29 +508,23 @@ dw $0000 ; 7F
.map05 .map05
dw $0101, $2E18 ; OWG sign dw $0101, $2E18 ; OWG sign
dw !OWW_InvertedOnly dw !OWW_InvertedOnly
; singles ; singles
dw $0034, $21F2 dw $0034, $21F2
dw $0034, $3D4A dw $0034, $3D4A
dw $0116, $216E dw $0116, $216E
dw $0126, $21F4 dw $0126, $21F4
dw $0139, $2970
dw $0139, $2C6C dw $0139, $2C6C
dw $014B, $2972
dw $014B, $2C6E dw $014B, $2C6E
dw $016B, $29F0 dw $016B, $29F0
dw $016B, $2CEC dw $016B, $2CEC
dw $0182, $29F2 dw $0182, $29F2
dw $0182, $2CEE dw $0182, $2CEE
dw $01B3, $236C
dw $01B4, $236E
dw !OWW_Stripe|!OWW_Horizontal dw !OWW_Stripe|!OWW_Horizontal
dw $206C ; address dw $206E ; address
dw $0112, $0111, $0113, $0113, $0112|!OWW_STOP dw $0112, $0113, $0113, $0112|!OWW_STOP
dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(2) dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(2)
dw $0111, $20EC ; tile, start dw $0111, $20EC ; tile, start
@@ -538,6 +532,10 @@ dw $0000 ; 7F
dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(3) dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(3)
dw $0116, $20F0 ; tile, start dw $0116, $20F0 ; tile, start
dw !OWW_Stripe|!OWW_Horizontal
dw $216C ; address
dw $0112, $0116, $011C, $011D, $011E|!OWW_STOP
dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(3) dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(3)
dw $011C, $2170 ; tile, start dw $011C, $2170 ; tile, start
@@ -547,6 +545,13 @@ dw $0000 ; 7F
dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(4) dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(4)
dw $0144, $2364 ; tile, start dw $0144, $2364 ; tile, start
dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(2)
dw $01B3, $236C ; tile, start
dw !OWW_Stripe|!OWW_Horizontal
dw $2970 ; address
dw $0139, $014B|!OWW_STOP
dw !OWW_ArbitraryRLE dw !OWW_ArbitraryRLE
dw $0130 ; tile dw $0130 ; tile
dw $21E2, $21F0, $22E2, $22F0|!OWW_STOP dw $21E2, $21F0, $22E2, $22F0|!OWW_STOP
@@ -565,7 +570,7 @@ dw $0000 ; 7F
dw !OWW_Stripe|!OWW_Horizontal dw !OWW_Stripe|!OWW_Horizontal
dw $22E4 ; start dw $22E4 ; start
dw $013C, $013C, $013D, $013D, $013C, $013C dw $013C, $013C, $013D, $013D, $013C, $013C|!OWW_STOP
dw !OWW_END dw !OWW_END
@@ -580,7 +585,7 @@ dw $0000 ; 7F
dw $0034, $2826 dw $0034, $2826
dw !OWW_ArbitraryRLE dw !OWW_ArbitraryRLE
dw $0135 ; tile dw $021B ; tile
dw $259E, $25A2, $25A4, $261C dw $259E, $25A2, $25A4, $261C
dw $2626, $269A, $26A8, $271A dw $2626, $269A, $26A8, $271A
dw $2728, $279A, $27A8, $281E dw $2728, $279A, $27A8, $281E
@@ -803,6 +808,201 @@ dw $0000 ; 7F
dw !OWW_END dw !OWW_END
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
.map30
dw !OWW_InvertedOnly
dw $0178, $224E
dw $00D3, $22E2
dw $0302, $22E4
dw $00AA, $2368
dw $00AB, $236C
dw $01C2, $245C
dw $015C, $23E0
dw $0218, $245E
dw $0162, $2460
dw $0105, $255A
dw $01D4, $24DC
dw $0219, $24DE
dw $0171, $25DE
dw $0166, $255E
dw $0766, $2560
dw $06E1, $27D6
dw $00CF, $27DA
dw $0034, $3D94
dw !OWW_ArbitraryRLE
dw $017E
dw $2050, $20CE|!OWW_STOP
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7)
dw $00D1, $2052
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(6)
dw $00D1, $21E6
dw !OWW_ArbitraryRLE
dw $00D2
dw $2060, $20E2, $2164|!OWW_STOP
dw !OWW_ArbitraryRLE
dw $0183
dw $20D0, $214E|!OWW_STOP
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7)
dw $00C9, $20D2
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7)
dw $00C9, $2152
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(6)
dw $00C9, $2266
dw $00C9, $22CC
dw !OWW_ArbitraryRLE
dw $00D0
dw $20E0, $2162, $21E4|!OWW_STOP
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(3)
dw $0153, $2150
dw !OWW_ArbitraryRLE
dw $0153
dw $21CE, $22CE|!OWW_STOP
dw !OWW_ArbitraryRLE
dw $00C8
dw $2160, $21E2, $2264, $28DA, $295C|!OWW_STOP
dw !OWW_ArbitraryRLE
dw $00CA
dw $21E0, $2262, $285A, $28DC|!OWW_STOP
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7)
dw $00DC, $21D2
dw $00DC, $224C
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(2)
dw $00E3, $2252
dw !OWW_ArbitraryRLE
dw $0186
dw $22D0, $234E|!OWW_STOP
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(4)
dw $0034, $22D2
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(7)
dw $0034, $22D4
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(7)
dw $0034, $22D6
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2)
dw $0034, $2350
dw !OWW_ArbitraryRLE
dw $0034
dw $2458, $2656|!OWW_STOP
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(6)
dw $00CC, $22E6
dw $00CC, $234C
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2)
dw $00CE, $2362
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(4)
dw $00CE, $25D8
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2)
dw $00C5, $2364
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(4)
dw $00C5, $25DC
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(4)
dw $06AB, $2366
dw !OWW_ArbitraryRLE
dw $06AB
dw $24E4, $2760|!OWW_STOP
dw !OWW_ArbitraryRLE
dw $0384
dw $236A, $236E, $23EC, $246A|!OWW_STOP
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4)
dw $0384, $24E8
dw !OWW_ArbitraryRLE
dw $0759
dw $23C8, $244A, $24CC, $254E, $26D0, $2752, $27D4|!OWW_STOP
dw !OWW_ArbitraryRLE
dw $0757
dw $23CA, $244C, $24CE, $2550, $26D2, $2754|!OWW_STOP
dw !OWW_ArbitraryRLE
dw $01FF
dw $23CC, $244E, $24D0, $2652, $26D4, $2756|!OWW_STOP
dw !OWW_ArbitraryRLE
dw $017C
dw $23CE, $2450, $24D2, $2654, $26D6|!OWW_STOP
dw !OWW_ArbitraryRLE
dw $0100
dw $245A, $24D8|!OWW_STOP
dw !OWW_ArbitraryRLE
dw $0104
dw $24DA, $2558|!OWW_STOP
dw !OWW_ArbitraryRLE
dw $0106
dw $2462, $24E0, $255C|!OWW_STOP
dw !OWW_ArbitraryRLE
dw $0107
dw $2464, $24E2|!OWW_STOP
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2)
dw $0179, $2552
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(8)
dw $06B4, $2562
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2)
dw $06E5, $25D0
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(4)
dw $00C4, $25DA
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7)
dw $0165, $25E4
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2)
dw $06E4, $27D2
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2)
dw $06E4, $2854
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(3)
dw $06E4, $2856
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2)
dw $06E4, $2958
dw $06E4, $29DA
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2)
dw $02FD, $27D8
dw !OWW_ArbitraryRLE
dw $06E7
dw $28D8, $295A, $29DC|!OWW_STOP
dw !OWW_END
;---------------------------------------------------------------------------------------------------
.map31 .map31
dw !OWW_InvertedOnly dw !OWW_InvertedOnly
@@ -855,150 +1055,6 @@ dw $0000 ; 7F
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4) dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4)
dw $0034, $22D2 dw $0034, $22D2
; TODO clean up and optimize
dw $00D2, $2060
dw $00D0, $20E0
dw $00D2, $20E2
dw $0153, $2150
dw $00C8, $2160
dw $00D0, $2162
dw $00D2, $2164
dw $0153, $21CE
dw $0153, $21D0
dw $00CA, $21E0
dw $00C8, $21E2
dw $00D0, $21E4
dw $00DC, $224C
dw $0178, $224E
dw $0153, $2250
dw $00E3, $2252
dw $00E3, $2254
dw $00CA, $2262
dw $00C8, $2264
dw $00C9, $22CC
dw $0153, $22CE
dw $0186, $22D0
dw $00D3, $22E2
dw $0302, $22E4
dw $00CC, $234C
dw $0186, $234E
dw $00CE, $2362
dw $00C5, $2364
dw $06AB, $2366
dw $00AA, $2368
dw $0384, $236A
dw $00AB, $236C
dw $0384, $236E
dw $0759, $23C8
dw $0757, $23CA
dw $01FF, $23CC
dw $017C, $23CE
dw $015C, $23E0
dw $00CE, $23E2
dw $00C5, $23E4
dw $06AB, $23E6
dw $0384, $23EC
dw $0759, $244A
dw $0757, $244C
dw $01FF, $244E
dw $017C, $2450
dw $0100, $245A
dw $01C2, $245C
dw $0218, $245E
dw $0162, $2460
dw $0106, $2462
dw $0107, $2464
dw $06AB, $2466
dw $0384, $246A
dw $0759, $24CC
dw $0757, $24CE
dw $01FF, $24D0
dw $017C, $24D2
dw $0034, $24D4
dw $0034, $24D6
dw $0100, $24D8
dw $0104, $24DA
dw $01D4, $24DC
dw $0219, $24DE
dw $0106, $24E0
dw $0107, $24E2
dw $06AB, $24E4
dw $06AB, $24E6
dw $0759, $254E
dw $0757, $2550
dw $0179, $2552
dw $0034, $2554
dw $0034, $2556
dw $0104, $2558
dw $0105, $255A
dw $0106, $255C
dw $0166, $255E
dw $0766, $2560
dw $06E5, $25D0
dw $0179, $25D2
dw $0034, $25D4
dw $0034, $25D6
dw $00CE, $25D8
dw $00C4, $25DA
dw $00C5, $25DC
dw $0171, $25DE
dw $06E5, $2650
dw $01FF, $2652
dw $017C, $2654
dw $0034, $2656
dw $00CE, $2658
dw $00C4, $265A
dw $00C5, $265C
dw $0759, $26D0
dw $0757, $26D2
dw $01FF, $26D4
dw $017C, $26D6
dw $00CE, $26D8
dw $00C4, $26DA
dw $00C5, $26DC
dw $0759, $2752
dw $0757, $2754
dw $01FF, $2756
dw $00CE, $2758
dw $00C4, $275A
dw $00C5, $275C
dw $06AB, $2760
dw $06E4, $27D2
dw $0759, $27D4
dw $06E1, $27D6
dw $02FD, $27D8
dw $00CF, $27DA
dw $06E4, $2852
dw $06E4, $2854
dw $06E4, $2856
dw $02FD, $2858
dw $00CA, $285A
dw $06E4, $28D4
dw $06E4, $28D6
dw $06E7, $28D8
dw $00C8, $28DA
dw $00CA, $28DC
dw $06E4, $2956
dw $06E4, $2958
dw $06E7, $295A
dw $00C8, $295C
dw $06E4, $29D8
dw $06E4, $29DA
dw $06E7, $29DC
dw $0769, $38F8
dw $06E1, $38FA
dw $06E1, $38FC
dw $06E1, $38FE
dw $06E3, $3978
dw $02E5, $397A
dw $02EC, $397C
dw $02E5, $397E
dw $02F0, $39F8
dw $02F3, $39FA
dw $02F3, $39FC
dw $02F3, $39FE
dw $0034, $3D94
dw !OWW_END dw !OWW_END
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
@@ -1065,7 +1121,7 @@ dw $0000 ; 7F
dw !OWW_ArbitraryRLE dw !OWW_ArbitraryRLE
dw $0034 dw $0034
dw $270E, $278E, $2790|!OWW_STOP dw $270E, $278E, $2790, $2918, $291A, $2998, $299A, $291C, $291E, $2920|!OWW_STOP
dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(8) dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(8)
dw $0034, $280E dw $0034, $280E
@@ -1268,10 +1324,32 @@ dw $0000 ; 7F
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
.map43 .map43
dw !OWW_SkipIfInverted, ReliableOWWSentinel dw !OWW_SkipIfInverted, .map43_inverted
dw $0101, $2550 ; GT sign dw $0101, $2550 ; GT sign
.map43_inverted
dw !OWW_InvertedOnly
dw $0212, $2BE0
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(5)
dw $0E96, $235E
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(5)
dw $0E97, $2360
dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(2)
dw $0E94, $25DE ; tile, start
dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(2)
dw $0180, $275E
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2)
dw $0184, $27DE
dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2)
dw $0185, $27E0
dw !OWW_END dw !OWW_END
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
@@ -1300,6 +1378,12 @@ dw $0000 ; 7F
dw !OWW_END dw !OWW_END
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
.map45
dw !OWW_InvertedOnly
dw $0239, $3D4A
dw !OWW_END
;---------------------------------------------------------------------------------------------------
.map47 .map47
dw !OWW_InvertedOnly dw !OWW_InvertedOnly
@@ -1474,6 +1558,13 @@ dw $0000 ; 7F
dw !OWW_END dw !OWW_END
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
.map70
dw !OWW_InvertedOnly
dw $0239, $3D94
dw !OWW_END
;---------------------------------------------------------------------------------------------------
.map73 .map73
dw !OWW_InvertedOnly dw !OWW_InvertedOnly

View File

@@ -125,6 +125,35 @@ macro ValueShift()
BRA ?start : ?end: BRA ?start : ?end:
endmacro endmacro
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
GetDungeonBitByID:
LDA.w #$8000
CPX.w #$0000 : BEQ .castle
DEX
-
LSR
DEX
BPL -
RTS
.castle
LSR
RTS
;--------------------------------------------------------------------------------
GetDungeonBitByOffset:
LDA.w #$0001
CPX.w #$000E : BEQ .castle
CPX.w #$000F : BEQ .castle
DEX
-
ASL
DEX
BPL -
RTS
.castle
LDA.w #$00C0
RTS
;--------------------------------------------------------------------------------
;carry clear if pass ;carry clear if pass
;carry set if caught ;carry set if caught
;incsrc eventdata.asm ;incsrc eventdata.asm
@@ -167,47 +196,77 @@ ProcessEventItems:
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
AddReceivedItemLong: AddReceivedItemLong:
JSR ResolveReceipt JSR.w ResolveReceipt
PHB : PHK PHB : PHK
JML AddReceivedItem+2 JML AddReceivedItem+2
AddReceivedItemExpandedGetItem: AddReceivedItemExpandedGetItem:
PHX PHX : PHB
LDA.w ItemReceiptID ; check inventory LDA.w ItemReceiptID
;JSR ResolveReceipt
JSL.l FreeDungeonItemNotice JSL.l FreeDungeonItemNotice
JSR ItemBehavior JSR ItemBehavior
SEP #$30
PLX PLB : PLX
LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over
RTL RTL
ItemBehavior: ItemBehavior:
REP #$30 REP #$30
AND #$00FF : ASL : TAX AND #$00FF : ASL : TAX
LDA.l ItemReceipts_behavior, X : STA.w ScratchBufferV SEP #$20
SEP #$30 JMP.w (ItemReceipts_behavior,X)
JMP.w (ScratchBufferV)
.skip .skip
RTS RTS
.bow .bow
LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking
LDA.l SilverArrowsUseRestriction : BNE ++ BIT #$40 : BNE .silversbow
LDA.b #03 : STA.l BowEquipment ; set bow to silver LDA.b #$01 : STA.l BowEquipment
++
RTS RTS
.silversbow
LDA.l SilverArrowsUseRestriction : BNE +
LDA.b #03 : STA.l BowEquipment ; set bow to silver
+
LDA.b #$01 : STA.l BowEquipment
RTS
.dungeon_compass
REP #$20
LDA.w DungeonID : LSR : TAX
JSR.w GetDungeonBitByID
ORA.l CompassField : STA.l CompassField
SEP #$20
RTS
.dungeon_bigkey
REP #$20
LDA.w DungeonID : LSR : TAX
JSR.w GetDungeonBitByID
ORA.l BigKeyField : STA.l BigKeyField
SEP #$20
RTS
.dungeon_map
REP #$20
LDA.w DungeonID : LSR : TAX
JSR.w GetDungeonBitByID
ORA.l MapField : STA.l MapField
SEP #$20
RTS
.bow_and_arrows .bow_and_arrows
LDA.l BowTracking : ORA.l ScratchBufferV+6 : STA.l BowTracking
BIT.b #$40 : BEQ + BIT.b #$40 : BEQ +
LDA.l SilverArrowsUseRestriction : BNE + LDA.l SilverArrowsUseRestriction : BNE +
LDA.b #03 : STA.l BowEquipment ; set bow to silver LDA.b #03 : STA.l BowEquipment ; set bow to silver
+ +
RTS RTS
.silver_bow .silver_bow
LDA.l BowTracking : ORA.l ScratchBufferV+6 : STA.l BowTracking LDA.b #$04 : ORA.l BowTracking : STA.l BowTracking
LDA.l SilverArrowsUseRestriction : BNE .noequip LDA.l SilverArrowsUseRestriction : BNE .noequip
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip
LDA.l ArrowsFiller : BNE + ; check arrows LDA.l ArrowsFiller : BNE + ; check arrows
@@ -219,54 +278,67 @@ ItemBehavior:
.noequip .noequip
LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking ; mark silver bow on y-toggle LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking ; mark silver bow on y-toggle
RTS RTS
.bombs_50 .bombs_50
LDA.b #50 : STA.l BombCapacity ; upgrade bombs LDA.b #50 : STA.l BombCapacity ; upgrade bombs
LDA.b #50 : STA.l BombsFiller ; fill bombs LDA.b #50 : STA.l BombsFiller ; fill bombs
RTS RTS
.arrows_70 .arrows_70
LDA.b #70 : STA.l ArrowCapacity ; upgrade arrows LDA.b #70 : STA.l ArrowCapacity ; upgrade arrows
LDA.b #70 : STA.l ArrowsFiller ; fill arrows LDA.b #70 : STA.l ArrowsFiller ; fill arrows
RTS RTS
.magic_2 .magic_2
LDA.l MagicConsumption : CMP.b #$02 : !BGE + LDA.l MagicConsumption : CMP.b #$02 : !BGE +
INC : STA.l MagicConsumption ; upgrade magic INC : STA.l MagicConsumption ; upgrade magic
+ +
LDA.b #$80 : STA.l MagicFiller ; fill magic LDA.b #$80 : STA.l MagicFiller ; fill magic
RTS RTS
.magic_4 .magic_4
LDA.b #$02 : STA.l MagicConsumption ; upgrade magic LDA.b #$02 : STA.l MagicConsumption ; upgrade magic
LDA.b #$80 : STA.l MagicFiller ; fill magic LDA.b #$80 : STA.l MagicFiller ; fill magic
RTS RTS
.master_sword_safe .master_sword_safe
LDA.l SwordEquipment : CMP.b #$02 : !BGE + ; skip if we have a better sword LDA.l SwordEquipment : CMP.b #$02 : !BGE + ; skip if we have a better sword
LDA.b #$02 : STA.l SwordEquipment ; set master sword LDA.b #$02 : STA.l SwordEquipment ; set master sword
+ +
RTS RTS
.bombs_5 .bombs_5
LDA.l BombCapacity : !ADD.b #$05 : STA.l BombCapacity ; upgrade bombs +5 LDA.l BombCapacity : !ADD.b #$05 : STA.l BombCapacity ; upgrade bombs +5
LDA.l Upgrade5BombsRefill : STA.l BombsFiller ; fill bombs LDA.l Upgrade5BombsRefill : STA.l BombsFiller ; fill bombs
RTS RTS
.bombs_10 .bombs_10
LDA.l BombCapacity : !ADD.b #$0A : STA.l BombCapacity ; upgrade bombs +10 LDA.l BombCapacity : !ADD.b #$0A : STA.l BombCapacity ; upgrade bombs +10
LDA.l Upgrade10BombsRefill : STA.l BombsFiller ; fill bombs LDA.l Upgrade10BombsRefill : STA.l BombsFiller ; fill bombs
RTS RTS
.arrows_5 .arrows_5
LDA.l ArrowCapacity : !ADD.b #$05 : STA.l ArrowCapacity ; upgrade arrows +5 LDA.l ArrowCapacity : !ADD.b #$05 : STA.l ArrowCapacity ; upgrade arrows +5
LDA.l Upgrade5ArrowsRefill : STA.l ArrowsFiller ; fill arrows LDA.l Upgrade5ArrowsRefill : STA.l ArrowsFiller ; fill arrows
RTS RTS
.arrows_10 .arrows_10
LDA.l ArrowCapacity : !ADD.b #$0A : STA.l ArrowCapacity ; upgrade arrows +10 LDA.l ArrowCapacity : !ADD.b #$0A : STA.l ArrowCapacity ; upgrade arrows +10
LDA.l Upgrade10ArrowsRefill : STA.l ArrowsFiller ; fill arrows LDA.l Upgrade10ArrowsRefill : STA.l ArrowsFiller ; fill arrows
RTS RTS
.programmable_1 .programmable_1
%ProgrammableItemLogic(1) %ProgrammableItemLogic(1)
RTS RTS
.programmable_2 .programmable_2
%ProgrammableItemLogic(2) %ProgrammableItemLogic(2)
RTS RTS
.programmable_3 .programmable_3
%ProgrammableItemLogic(3) %ProgrammableItemLogic(3)
RTS RTS
.silver_arrows .silver_arrows
LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking
LDA.l SilverArrowsUseRestriction : BNE ++ LDA.l SilverArrowsUseRestriction : BNE ++
@@ -279,32 +351,39 @@ ItemBehavior:
LDA.b #$01 : STA.l ArrowsFiller LDA.b #$01 : STA.l ArrowsFiller
+ +
RTS RTS
.rupoor .rupoor
REP #$20 : LDA.l CurrentRupees : !SUB RupoorDeduction : STA.l CurrentRupees : SEP #$20 ; Take 1 rupee REP #$20 : LDA.l CurrentRupees : !SUB RupoorDeduction : STA.l CurrentRupees : SEP #$20 ; Take 1 rupee
RTS RTS
.null .null
RTS RTS
.red_clock .red_clock
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
LDA.l ChallengeTimer : !ADD.l RedClockAmount : STA.l ChallengeTimer LDA.l ChallengeTimer : !ADD.l RedClockAmount : STA.l ChallengeTimer
LDA.l ChallengeTimer+2 : ADC.l RedClockAmount+2 : STA.l ChallengeTimer+2 LDA.l ChallengeTimer+2 : ADC.l RedClockAmount+2 : STA.l ChallengeTimer+2
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
RTS RTS
.blue_clock .blue_clock
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
LDA.l ChallengeTimer : !ADD.l BlueClockAmount : STA.l ChallengeTimer LDA.l ChallengeTimer : !ADD.l BlueClockAmount : STA.l ChallengeTimer
LDA.l ChallengeTimer+2 : ADC.l BlueClockAmount+2 : STA.l ChallengeTimer+2 LDA.l ChallengeTimer+2 : ADC.l BlueClockAmount+2 : STA.l ChallengeTimer+2
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
RTS RTS
.green_clock .green_clock
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
LDA.l ChallengeTimer : !ADD.l GreenClockAmount : STA.l ChallengeTimer LDA.l ChallengeTimer : !ADD.l GreenClockAmount : STA.l ChallengeTimer
LDA.l ChallengeTimer+2 : ADC.l GreenClockAmount+2 : STA.l ChallengeTimer+2 LDA.l ChallengeTimer+2 : ADC.l GreenClockAmount+2 : STA.l ChallengeTimer+2
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
RTS RTS
.triforce .triforce
JSL.l ActivateGoal JSL.l ActivateGoal
RTS RTS
.goal_item .goal_item
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
LDA.l GoalItemRequirement : BEQ + LDA.l GoalItemRequirement : BEQ +
@@ -315,65 +394,70 @@ ItemBehavior:
+ +
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
RTS RTS
.request_F0 .request_F0
JSL.l ItemGetServiceRequest_F0 JSL.l ItemGetServiceRequest_F0
RTS RTS
.request_F1 .request_F1
JSL.l ItemGetServiceRequest_F1 JSL.l ItemGetServiceRequest_F1
RTS RTS
.request_F2 .request_F2
JSL.l ItemGetServiceRequest_F2 JSL.l ItemGetServiceRequest_F2
RTS RTS
.request_async .request_async
; JSL.l ItemGetServiceRequest ; JSL.l ItemGetServiceRequest
RTS RTS
.free_map .free_map
AND.b #$0F : CMP.b #$08 : !BGE + REP #$20
%ValueShift() AND.w #$000F : LSR : TAX
ORA.l MapField : STA.l MapField ; Map 1 JSR.w GetDungeonBitByOffset
RTS ORA.l MapField : STA.l MapField
+ SEP #$20
!SUB #$08
%ValueShift()
ORA.l MapField+1 : STA.l MapField+1 ; Map 2
RTS RTS
.hc_map .hc_map
LDA.b #$C0 : ORA.l MapField+1 : STA.l MapField+1 LDA.b #$C0 : ORA.l MapField+1 : STA.l MapField+1
RTS RTS
.free_compass .free_compass
AND.b #$0F : CMP.b #$08 : !BGE ++ REP #$20
%ValueShift() AND.w #$000F : LSR : TAX
ORA.l CompassField : STA.l CompassField ; Compass 1 JSR.w GetDungeonBitByOffset
RTS ORA.l CompassField : STA.l CompassField
++ SEP #$20
!SUB #$08
%ValueShift()
ORA.l CompassField+1 : STA.l CompassField+1 ; Compass 2
RTS RTS
.hc_compass .hc_compass
LDA.b #$C0 : ORA.l CompassField+1 : STA.l CompassField+1 LDA.b #$C0 : ORA.l CompassField+1 : STA.l CompassField+1
RTS RTS
.free_bigkey .free_bigkey
AND.b #$0F : CMP.b #$08 : !BGE ++ REP #$20
%ValueShift() AND.w #$000F : LSR : TAX
ORA.l BigKeyField : STA.l BigKeyField ; Big Key 1 JSR.w GetDungeonBitByOffset
RTS ORA.l BigKeyField : STA.l BigKeyField
++ SEP #$20
!SUB #$08
%ValueShift()
ORA.l BigKeyField+1 : STA.l BigKeyField+1 ; Big Key 2
RTS RTS
.hc_bigkey .hc_bigkey
LDA.b #$C0 : ORA.l BigKeyField+1 : STA.l BigKeyField+1 LDA.b #$C0 : ORA.l BigKeyField+1 : STA.l BigKeyField+1
RTS RTS
.free_smallkey .free_smallkey
AND.b #$0F : TAX REP #$20
AND.w #$000F : TAX
LDA.l DungeonKeys, X : INC : STA.l DungeonKeys, X ; Increment Key Count LDA.l DungeonKeys, X : INC : STA.l DungeonKeys, X ; Increment Key Count
RTS RTS
.hc_smallkey .hc_smallkey
LDA.l HyruleCastleKeys : INC : STA.l HyruleCastleKeys LDA.l HyruleCastleKeys : INC : STA.l HyruleCastleKeys
LDA.l SewerKeys : INC : STA.l SewerKeys LDA.l SewerKeys : INC : STA.l SewerKeys
RTS RTS
.generic_smallkey .generic_smallkey
LDA.l GenericKeys : BEQ .normal LDA.l GenericKeys : BEQ .normal
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys
@@ -385,39 +469,42 @@ ItemBehavior:
.done .done
RTS RTS
;--------------------------------------------------------------------------------
;2B:Bottle Already Filled w/ Red Potion
;2C:Bottle Already Filled w/ Green Potion
;2D:Bottle Already Filled w/ Blue Potion
;3C:Bottle Already Filled w/ Bee
;3D:Bottle Already Filled w/ Fairy
;48:Bottle Already Filled w/ Gold Bee
ResolveReceipt: ResolveReceipt:
PHA : PHX PHA : PHX
PHK : PLB PHK : PLB
JSL.l PreItemGet JSL.l PreItemGet
LDA.w ItemReceiptID ; Item Value LDA.w ItemReceiptID ; Item Value
.get_item .get_item
JSR AttemptItemSubstitution JSR.w AttemptItemSubstitution
LDX.b #ItemReceipts>>16 : STX.w ScratchBufferV+2 JSR.w HandleBowTracking ; Progressive bows get resolved to new loot id
REP #$30 JSR.w ResolveLootID
AND.w #$00FF : ASL : TAX
LDA.w ItemReceipts_resolution, X
STA.w ScratchBufferV
SEP #$30
JMP.w (ScratchBufferV)
.have_item .have_item
JSR IncrementItemCounters
STA.w ItemReceiptID STA.w ItemReceiptID
JSR IncrementItemCounters
PLX : PLA PLX : PLA
RTS RTS
;PHB : PHK ; we're skipping the corresponding instructions to grab the data bank
;JML.l AddReceivedItem+2 ResolveLootID:
.items ; In: A - Loot ID
; Out: A - Resolved Loot ID
; Caller is responsible for running AttemptItemSubstitution prior if applicable.
PHX : PHB
PHK : PLB
.get_item
TAY
REP #$30
AND.w #$00FF : ASL : TAX
SEP #$30
TYA
JMP.w (ItemReceipts_resolution,X)
.have_item
PLB : PLX
RTS
.skip .skip
LDA.w ItemReceiptID
JMP.w .have_item JMP.w .have_item
.bottles .bottles
JSR.w CountBottles : CMP.l BottleLimit : !BLT + JSR.w CountBottles : CMP.l BottleLimit : !BLT +
LDA.l BottleLimitReplacement LDA.l BottleLimitReplacement
@@ -425,55 +512,90 @@ ResolveReceipt:
+ +
LDA.w ItemReceiptID LDA.w ItemReceiptID
JMP.w .have_item JMP.w .have_item
.magic .magic
LDA.l MagicConsumption : BEQ + LDA.l MagicConsumption : TAX
LDA.b #$4F : JMP.w .have_item LDA.w ResolveLootID_magic_ids,X
+ : LDA.b #$4E
JMP.w .have_item JMP.w .have_item
..ids
db $4E, $4F, $4F
.swords .swords
LDA.l HighestSword : CMP.l ProgressiveSwordLimit : BCC + LDA.l HighestSword : CMP.l ProgressiveSwordLimit : BCC +
LDA.l ProgressiveSwordReplacement : JMP.w .get_item LDA.l ProgressiveSwordReplacement
JMP.w .get_item
+ +
ADC.b #$43 : JMP.w .have_item TAX
LDA.w ResolveLootID_swords_ids,X
JMP.w .have_item
..ids
db $49, $01, $02, $03, $03
.shields .shields
LDA.l HighestShield : CMP.l ProgressiveShieldLimit : BCC + LDA.l HighestShield : CMP.l ProgressiveShieldLimit : BCC +
LDA.l ProgressiveShieldReplacement : JMP.w .get_item LDA.l ProgressiveShieldReplacement
JMP.w .get_item
+ +
ADC.b #$04 : JMP.w .have_item TAX
LDA.w ResolveLootID_shields_ids,X
JMP.w .have_item
..ids
db $04, $05, $06, $06
.armor .armor
LDA.l HighestMail : CMP.l ProgressiveArmorLimit : BCC + LDA.l HighestMail : CMP.l ProgressiveArmorLimit : BCC +
LDA.l ProgressiveArmorReplacement : JMP.w .get_item LDA.l ProgressiveArmorReplacement
JMP.w .get_item
+ +
ADC.b #$22 : JMP.w .have_item LDA.w ResolveLootID_armor_ids,X
JMP.w .have_item
..ids
db $22, $23, $23
.gloves .gloves
LDA.l GloveEquipment : BNE + ; No Lift LDA.l GloveEquipment : TAX
LDA.b #$1B : JMP.w .have_item LDA.w ResolveLootID_gloves_ids,X
+ : LDA.b #$1C : JMP.w .have_item ; Everything Else JMP.w .have_item
..ids
db $1B, $1C, $1C
.progressive_bow .progressive_bow
LDA.b #$80 : STA.l ScratchBufferV+6 LDA.l BowEquipment : INC : LSR : CMP.l ProgressiveBowLimit : BCC +
BRA .both_bows LDA.l ProgressiveBowReplacement
JMP.w .get_item
+
TAX
LDA.w ResolveLootID_bows_ids,X
JMP.w .get_item
.progressive_bow_2 .progressive_bow_2
LDA.b #$20 : STA.l ScratchBufferV+6 LDA.l BowEquipment : INC : LSR : CMP.l ProgressiveBowLimit : BCC +
.both_bows LDA.l ProgressiveBowReplacement
LDA.l BowEquipment : INC : LSR : CMP.l ProgressiveBowLimit : !BLT + JMP.w .get_item
LDA.l ProgressiveBowReplacement : JMP.w .get_item +
+ : CMP.b #$00 : BNE + ; No Bow TAX
LDA.b #$3A : JMP.w .have_item LDA.w ResolveLootID_bows_ids,X
+ : LDA.b #$3B : JMP.w .have_item ; Any Bow JMP.w .get_item
.bows
..ids
db $3A, $3B, $3B
.null_chest .null_chest
; JSL ChestItemServiceRequest ; JSL ChestItemServiceRequest
JMP.w .have_item JMP.w .have_item
.rng_single .rng_single
JSL.l GetRNGItemSingle : STA.w ScratchBufferV+6 JSL.l GetRNGItemSingle : STA.w ScratchBufferV+6
XBA : JSR.w MarkRNGItemSingle XBA : JSR.w MarkRNGItemSingle
LDA.b #$FF : STA.l RNGLockIn ; clear lock-in LDA.b #$FF : STA.l RNGLockIn ; clear lock-in
LDA.w ScratchBufferV+6 : JMP.w .get_item LDA.w ScratchBufferV+6 : JMP.w .get_item
.rng_multi .rng_multi
JSL.l GetRNGItemMulti : STA.w ScratchBufferV+6 JSL.l GetRNGItemMulti : STA.w ScratchBufferV+6
LDA.b #$FF : STA.l RNGLockIn ; clear lock-in LDA.b #$FF : STA.l RNGLockIn ; clear lock-in
LDA.w ScratchBufferV+6 : JMP.w .get_item LDA.w ScratchBufferV+6 : JMP.w .get_item
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;DATA AddReceivedItemExpanded ;DATA AddReceivedItemExpanded
{ {
@@ -526,7 +648,7 @@ macro ReceiptProps(id, y, x, gfx, width, pal, sram, value, pal_override, behavio
org ItemReceipts_value+<id> : db <value> org ItemReceipts_value+<id> : db <value>
org ItemReceipts_pal_override+<id> : db <pal_override> org ItemReceipts_pal_override+<id> : db <pal_override>
org ItemReceipts_behavior+<id>+<id> : dw ItemBehavior_<behavior> org ItemReceipts_behavior+<id>+<id> : dw ItemBehavior_<behavior>
org ItemReceipts_resolution+<id>+<id> : dw ResolveReceipt_<res> org ItemReceipts_resolution+<id>+<id> : dw ResolveLootID_<res>
pullpc pullpc
@@ -569,7 +691,7 @@ endmacro
%ReceiptProps($22, -4, 0, $04, 2, $02, $F35B, $FF, $00, skip, skip) ; 22 - Blue mail %ReceiptProps($22, -4, 0, $04, 2, $02, $F35B, $FF, $00, skip, skip) ; 22 - Blue mail
%ReceiptProps($23, -5, 0, $04, 2, $01, $F35B, $02, $00, skip, skip) ; 23 - Red mail %ReceiptProps($23, -5, 0, $04, 2, $01, $F35B, $02, $00, skip, skip) ; 23 - Red mail
%ReceiptProps($24, -4, 4, $0F, 0, $02, $F36F, $FF, $00, skip, skip) ; 24 - Small key %ReceiptProps($24, -4, 4, $0F, 0, $02, $F36F, $FF, $00, skip, skip) ; 24 - Small key
%ReceiptProps($25, -4, 0, $16, 2, $02, $F364, $FF, $00, skip, skip) ; 25 - Compass %ReceiptProps($25, -4, 0, $16, 2, $02, $F364, $FF, $00, dungeon_compass, skip) ; 25 - Compass
%ReceiptProps($26, -4, 0, $03, 2, $01, $F36C, $FF, $00, skip, skip) ; 26 - Heart container from 4/4 %ReceiptProps($26, -4, 0, $03, 2, $01, $F36C, $FF, $00, skip, skip) ; 26 - Heart container from 4/4
%ReceiptProps($27, -4, 0, $13, 2, $02, $F375, $FF, $00, skip, skip) ; 27 - Bomb %ReceiptProps($27, -4, 0, $13, 2, $02, $F375, $FF, $00, skip, skip) ; 27 - Bomb
%ReceiptProps($28, -4, 0, $01, 2, $02, $F375, $FF, $00, skip, skip) ; 28 - 3 bombs %ReceiptProps($28, -4, 0, $01, 2, $02, $F375, $FF, $00, skip, skip) ; 28 - 3 bombs
@@ -582,8 +704,8 @@ endmacro
%ReceiptProps($2F, -4, 0, $00, 2, $04, $F36E, $FF, $00, skip, bottles) ; 2F - Potion refill (green) %ReceiptProps($2F, -4, 0, $00, 2, $04, $F36E, $FF, $00, skip, bottles) ; 2F - Potion refill (green)
%ReceiptProps($30, -4, 0, $00, 2, $02, $F36E, $FF, $00, skip, bottles) ; 30 - Potion refill (blue) %ReceiptProps($30, -4, 0, $00, 2, $02, $F36E, $FF, $00, skip, bottles) ; 30 - Potion refill (blue)
%ReceiptProps($31, -4, 0, $30, 2, $02, $F375, $FF, $00, skip, skip) ; 31 - 10 bombs %ReceiptProps($31, -4, 0, $30, 2, $02, $F375, $FF, $00, skip, skip) ; 31 - 10 bombs
%ReceiptProps($32, -4, 0, $22, 2, $04, $F366, $FF, $00, skip, skip) ; 32 - Big key %ReceiptProps($32, -4, 0, $22, 2, $04, $F366, $FF, $00, dungeon_bigkey, skip) ; 32 - Big key
%ReceiptProps($33, -4, 0, $21, 2, $04, $F368, $FF, $00, skip, skip) ; 33 - Map %ReceiptProps($33, -4, 0, $21, 2, $04, $F368, $FF, $00, dungeon_map, skip) ; 33 - Map
%ReceiptProps($34, -2, 4, $24, 0, $04, $F360, $FF, $00, skip, skip) ; 34 - 1 rupee %ReceiptProps($34, -2, 4, $24, 0, $04, $F360, $FF, $00, skip, skip) ; 34 - 1 rupee
%ReceiptProps($35, -2, 4, $24, 0, $02, $F360, $FB, $00, skip, skip) ; 35 - 5 rupees %ReceiptProps($35, -2, 4, $24, 0, $02, $F360, $FB, $00, skip, skip) ; 35 - 5 rupees
%ReceiptProps($36, -2, 4, $24, 0, $01, $F360, $EC, $00, skip, skip) ; 36 - 20 rupees %ReceiptProps($36, -2, 4, $24, 0, $01, $F360, $EC, $00, skip, skip) ; 36 - 20 rupees
@@ -613,7 +735,7 @@ endmacro
%ReceiptProps($4E, -4, 0, $3B, 2, $04, $F373, $80, $00, magic_2, magic) ; 4E - 1/2 magic %ReceiptProps($4E, -4, 0, $3B, 2, $04, $F373, $80, $00, magic_2, magic) ; 4E - 1/2 magic
%ReceiptProps($4F, -4, 0, $3C, 2, $04, $F373, $80, $00, magic_4, magic) ; 4F - 1/4 magic %ReceiptProps($4F, -4, 0, $3C, 2, $04, $F373, $80, $00, magic_4, magic) ; 4F - 1/4 magic
%ReceiptProps($50, -5, 4, $18, 0, $05, $F359, $02, $00, master_sword_safe, skip) ; 50 - Safe master sword - TODO gfx value %ReceiptProps($50, -5, 4, $18, 0, $05, $F359, $02, $00, master_sword_safe, skip) ; 50 - Safe master sword - TODO gfx value
%ReceiptProps($51, -4, 0, $39, 2, $04, $F375, $FF, $00, bombs_5, skip) ; 51 - Bomb capacity (+5) %ReceiptProps($51, -4, 0, $42, 2, $04, $F375, $FF, $00, bombs_5, skip) ; 51 - Bomb capacity (+5)
%ReceiptProps($52, -4, 0, $3E, 2, $04, $F375, $FF, $00, bombs_10, skip) ; 52 - Bomb capacity (+10) %ReceiptProps($52, -4, 0, $3E, 2, $04, $F375, $FF, $00, bombs_10, skip) ; 52 - Bomb capacity (+10)
%ReceiptProps($53, -4, 0, $3F, 2, $04, $F376, $FF, $00, arrows_5, skip) ; 53 - Arrow capacity (+5) %ReceiptProps($53, -4, 0, $3F, 2, $04, $F376, $FF, $00, arrows_5, skip) ; 53 - Arrow capacity (+5)
%ReceiptProps($54, -4, 0, $40, 2, $04, $F376, $FF, $00, arrows_10, skip) ; 54 - Arrow capacity (+10) %ReceiptProps($54, -4, 0, $40, 2, $04, $F376, $FF, $00, arrows_10, skip) ; 54 - Arrow capacity (+10)
@@ -845,6 +967,20 @@ Link_ReceiveItemAlternatesExpanded:
PLB PLB
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
HandleBowTracking:
; In: A - Item Receipt ID
CMP.b #$64 : BEQ .prog_one
CMP.b #$65 : BEQ .prog_two
RTS
.prog_one
LDA.b #$80
BRA .done
.prog_two
LDA.b #$20
.done
ORA.l BowTracking : STA.l BowTracking
RTS
;--------------------------------------------------------------------------------
;Return BowEquipment but also draw silver arrows if you have the upgrade even if you don't have the bow ;Return BowEquipment but also draw silver arrows if you have the upgrade even if you don't have the bow
CheckHUDSilverArrows: CheckHUDSilverArrows:
LDA.l ArrowMode : BEQ .normal LDA.l ArrowMode : BEQ .normal

View File

@@ -273,7 +273,7 @@ ItemGFXPtr = $7E0AFA ; Pointer for item receipt graphics transfers
; $0000 - no transfer, do nothing ; $0000 - no transfer, do nothing
; bit 7 reset - offset into ROM table ; bit 7 reset - offset into ROM table
; bit 7 set - explicit bank7 address ; bit 7 set - explicit bank7 address
ItemGFXTgt = $7E0AFC ; target VRAM 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.

View File

@@ -3,6 +3,7 @@
; 286 - Northeast Dark Swamp Cave ; 286 - Northeast Dark Swamp Cave
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
!FREE_TILE_BUFFER = $1180 !FREE_TILE_BUFFER = $1180
!FREE_TILE = $5A40
; A = Tile ID ; A = Tile ID
macro UploadOAM(dest) macro UploadOAM(dest)
PHA : PHP PHA : PHP
@@ -17,7 +18,7 @@ macro UploadOAM(dest)
LDA.b $01,s LDA.b $01,s
JSL.l GetSpritePalette JSL.l GetSpritePalette_resolved
STA.l SpriteOAM+5 : STA.l SpriteOAM+13 STA.l SpriteOAM+5 : STA.l SpriteOAM+13
PLA PLA
JSL.l IsNarrowSprite : BCS .narrow JSL.l IsNarrowSprite : BCS .narrow
@@ -174,9 +175,9 @@ SpritePrep_ShopKeeper:
JMP - JMP -
.stop .stop
LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA.w NMIAux+2 ;LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA.w NMIAux+2
LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA.w NMIAux+1 ;LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA.w NMIAux+1
LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA.w NMIAux ;LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA.w NMIAux
.done .done
LDA.l ShopType : BIT.b #$20 : BEQ .notTakeAll ; Take-all LDA.l ShopType : BIT.b #$20 : BEQ .notTakeAll ; Take-all
@@ -218,114 +219,21 @@ dw $0100, $0000
; X - Tile Buffer Offset ; X - Tile Buffer Offset
; Y - Item ID ; Y - Item ID
LoadTile: LoadTile:
TXA : !ADD.w #!FREE_TILE_BUFFER : STA.l TileUploadOffsetOverride ; load offset from X TXA : LSR #2 : !ADD.w #!FREE_TILE : STA.w ItemGFXTarget ; load offset from X
SEP #$30 ; set 8-bit accumulator & index registers ;SEP #$30
TYA ; load item ID from Y TYA : ASL : TAX
JSL.l GetSpriteID ; convert loot id to sprite id LDA.l StandingItemGraphicsOffsets,X : STA.w ItemGFXPtr
JSL.l GetAnimatedSpriteTile_variable JSL.l TransferItemToVRAM
TDC
;JSL.l GetSpriteID ; convert loot id to sprite id
;JSL.l GetAnimatedSpriteTile_variable
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
@@ -686,7 +594,7 @@ Shopkeeper_DrawNextItem:
STA.l SpriteOAM+4 STA.l SpriteOAM+4
LDA.l ShopInventory, X ; get item palette LDA.l ShopInventory, X ; get item palette
JSL.l GetSpritePalette : STA.l SpriteOAM+5 JSL.l GetSpritePalette_resolved : STA.l SpriteOAM+5
LDA.b #$00 : STA.l SpriteOAM+6 LDA.b #$00 : STA.l SpriteOAM+6

View File

@@ -6,7 +6,8 @@
; out: A - Sprite GFX ID ; out: A - Sprite GFX ID
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
GetSpriteID: GetSpriteID:
JSR AttemptItemSubstitution JSR.w AttemptItemSubstitution
JSR.w ResolveLootID
CMP.b #$16 : BEQ .bottle ; Bottle CMP.b #$16 : BEQ .bottle ; Bottle
CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle
CMP.b #$2C : BEQ .bottle ; Green Potion w/bottle CMP.b #$2C : BEQ .bottle ; Green Potion w/bottle
@@ -37,134 +38,8 @@ GetSpriteID:
PHX PHX
TAX : LDA.l ItemReceipts_graphics, X ; look up item gfx TAX : LDA.l ItemReceipts_graphics, X ; look up item gfx
PLX PLX
CMP.b #$F8 : !BGE .special_handling
RTL RTL
;---------------------------------------------------------------------------------------------------
.special_handling
PHX
AND.b #$07
ASL
TAX
REP #$20
LDA.l .handlers,X
PLX
PHA
SEP #$20
RTS
.handlers
dw .handler_F8-1
dw .handler_F9-1
dw .handler_FA-1
dw .handler_FB-1
dw .handler_FC-1
dw .handler_FD-1
dw .handler_FE-1
dw .handler_FF-1
;---------------------------------------------------------------------------------------------------
.handler_F8
LDA.l BowEquipment
INC
LSR
CMP.l ProgressiveBowLimit
BCC ++
LDA.l ProgressiveBowReplacement
JMP GetSpriteID
++ CMP.b #$00
LDA.b #$29
ADC.b #$00
RTL
;---------------------------------------------------------------------------------------------------
.handler_F9
LDA.l MagicConsumption
CMP.b #$00
LDA.b #$3B
ADC.b #$00
RTL
;---------------------------------------------------------------------------------------------------
.handler_FA
JSL GetRNGItemSingle
JMP GetSpriteID
;---------------------------------------------------------------------------------------------------
.handler_FB
JSL GetRNGItemMulti
JMP GetSpriteID
;---------------------------------------------------------------------------------------------------
.handler_FC
RTL
;---------------------------------------------------------------------------------------------------
.handler_FD
LDA.l ArmorEquipment
CMP.l ProgressiveArmorLimit
BCC ++
LDA.l ProgressiveArmorReplacement
JMP GetSpriteID
++ LDA.b #$04
RTL
;---------------------------------------------------------------------------------------------------
.handler_FE
LDA.l HighestSword
CMP.l ProgressiveSwordLimit
BCC ++
LDA.l ProgressiveSwordReplacement
JMP GetSpriteID
; 00 => 43
; 01 => 44
; 02 => 45
; 03 => 46
++ ADC.b #$43
RTL
;---------------------------------------------------------------------------------------------------
.handler_FF
LDA.l HighestShield
CMP.l ProgressiveShieldLimit
BCC ++
LDA.l ProgressiveShieldReplacement
JMP GetSpriteID
++ CMP.b #$01 ; no shield
BEQ .fighter_shield ; if exactly 1
; if 0 => 2D (carry is clear)
; all others are 2E (carry set for +1)
LDA.b #$2D
ADC.b #$00
RTL
.fighter_shield
LDA.b #$20
RTL
;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; GetSpritePalette ; GetSpritePalette
; in: A - Loot ID ; in: A - Loot ID
@@ -172,6 +47,8 @@ RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
GetSpritePalette: GetSpritePalette:
JSR AttemptItemSubstitution JSR AttemptItemSubstitution
JSR.w ResolveLootID
.resolved
CMP.b #$16 : BEQ .bottle ; Bottle CMP.b #$16 : BEQ .bottle ; Bottle
CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle
CMP.b #$2C : BEQ .bottle ; Green Potion w/bottle CMP.b #$2C : BEQ .bottle ; Green Potion w/bottle
@@ -189,157 +66,10 @@ GetSpritePalette:
PHX PHX
TAX : LDA.l GfxPalettes, X ; look up item gfx TAX : LDA.l GfxPalettes, X ; look up item gfx
PLX PLX
CMP.b #$F8 : !BGE .special_handling
RTL RTL
;--------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------
.special_handling
PHX
AND.b #$07
ASL
TAX
REP #$20
LDA.l .handlers,X
PLX
PHA
SEP #$20
RTS
.handlers
dw .handler_F8-1
dw .handler_F9-1
dw .handler_FA-1
dw .handler_FB-1
dw .handler_FC-1
dw .handler_FD-1
dw .handler_FE-1
dw .handler_FF-1
;---------------------------------------------------------------------------------------------------
.handler_F8
LDA.l BowEquipment
INC
LSR
CMP.l ProgressiveBowLimit
BCC ++
LDA.l ProgressiveBowReplacement
JMP GetSpritePalette
++ CMP.b #$00
BNE ++
LDA.b #$08
RTL
++ LDA.b #$02
RTL
LDA.b #$29
ADC.b #$00
RTL
;---------------------------------------------------------------------------------------------------
.handler_F9
RTL
;---------------------------------------------------------------------------------------------------
.handler_FA
JSL GetRNGItemSingle
JMP GetSpritePalette
;---------------------------------------------------------------------------------------------------
.handler_FB
JSL GetRNGItemMulti
JMP GetSpritePalette
;---------------------------------------------------------------------------------------------------
.handler_FC
LDA.l GloveEquipment
BNE ++
LDA.b #$02
RTL
++ LDA.b #$08
RTL
;---------------------------------------------------------------------------------------------------
.handler_FD
LDA.l HighestSword
CMP.l ProgressiveSwordLimit
BCC ++
LDA.l ProgressiveSwordReplacement
JMP GetSpritePalette
; 00 => 04
; 01 => 04
; 02 => 02
; 03 => 08
++ CMP.b #$02
BEQ ++ ; 2 exits with 2
LDA.b #$04
BCC ++ ; 0 or 1 get 4
; everything else is 8
ASL
++ RTL
;---------------------------------------------------------------------------------------------------
.handler_FE
LDA.l HighestShield
CMP.l ProgressiveShieldLimit
BCC ++
LDA.l ProgressiveShieldReplacement
JMP GetSpritePalette
; 0 => 4
; 1 => 2
; 2 => 8
++ CMP.b #$01 ; no shield
BEQ .fighter_shield ; if exactly 1, ASL for 2
LDA.b #$04 ; load 4 for 0
BCC ++ ; exit if < 1, otherwise, ASL for 8
.fighter_shield
ASL
++ RTL
;---------------------------------------------------------------------------------------------------
.handler_FF
LDA.l ArmorEquipment
CMP.l ProgressiveArmorLimit
BCC ++
LDA.l ProgressiveArmorReplacement
JMP GetSpritePalette
++ CMP.b #$01 ; carry set means nonzero
LDA.b #$02
BCS ++ ; nonzero gets 2
ASL ; ASL for 4 if zero
++ RTL
;---------------------------------------------------------------------------------------------------
;DATA - Loot Identifier to Sprite Palette ;DATA - Loot Identifier to Sprite Palette
{ {
GfxPalettes: GfxPalettes:
@@ -478,11 +208,12 @@ RTL
; in: A - Loot ID ; in: A - Loot ID
;-------------------------------------------------------------------------------- 20/8477 ;-------------------------------------------------------------------------------- 20/8477
PrepDynamicTile: PrepDynamicTile:
PHA : PHX : PHY PHA : PHX : PHY : PHB
JSR.w ResolveLootID
JSR.w LoadDynamicTileOAMTable JSR.w LoadDynamicTileOAMTable
JSL TransferItemReceiptToBuffer_using_ReceiptID JSL TransferItemReceiptToBuffer_using_ReceiptID
SEP #$30 SEP #$30
PLY : PLX : PLA PLB : PLY : PLX : PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -503,7 +234,7 @@ LoadDynamicTileOAMTable:
LDA.b $01,s LDA.b $01,s
JSL.l GetSpritePalette JSL.l GetSpritePalette_resolved
STA.l SpriteOAM+5 : STA.l SpriteOAM+13 STA.l SpriteOAM+5 : STA.l SpriteOAM+13
PLA PLA
JSL.l IsNarrowSprite : BCS .narrow JSL.l IsNarrowSprite : BCS .narrow