let's dev 1/30/18
more shop dev
This commit is contained in:
@@ -26,7 +26,7 @@ org $3FFFFF ; <- 1FFFFF
|
||||
db #$00 ; expand file to 2mb
|
||||
|
||||
org $1FFFF8 ; <- FFFF8 timestamp rom
|
||||
db #$20, #$18, #$01, #$27 ; year/month/day
|
||||
db #$20, #$18, #$01, #$29 ; year/month/day
|
||||
|
||||
;================================================================================
|
||||
|
||||
@@ -71,6 +71,7 @@ db #$20, #$18, #$01, #$27 ; year/month/day
|
||||
!INVENTORY_SWAP_2 = "$7EF38E"
|
||||
|
||||
!ITEM_LIMIT_COUNTS = "$7EF390"
|
||||
!SHOP_PURCHASE_COUNTS = "$7EF3A0"
|
||||
;================================================================================
|
||||
|
||||
incsrc hooks.asm
|
||||
@@ -513,6 +514,9 @@ Sprite_SpawnDynamically_arbitrary:
|
||||
org $1DFD4B
|
||||
DiggingGameGuy_AttemptPrizeSpawn:
|
||||
|
||||
org $1EDE28
|
||||
Sprite_GetEmptyBottleIndex: ; this is totally in sprite_bees.asm
|
||||
|
||||
org $1EF4E7
|
||||
Sprite_PlayerCantPassThrough:
|
||||
;================================================================================
|
||||
|
||||
108
shopkeeper.asm
108
shopkeeper.asm
@@ -126,9 +126,11 @@ RTS
|
||||
!FREE_TILE_BUFFER = "#$1180"
|
||||
!SHOP_ID = "$7F5050"
|
||||
!SHOP_TYPE = "$7F5051"
|
||||
!SHOP_INVENTORY = "$7F5052"
|
||||
!SCRATCH_CAPACITY = "$7F5020"
|
||||
!SCRATCH_TEMP_X = "$7F5021"
|
||||
!SHOP_INVENTORY = "$7F5052" ; $7F505E
|
||||
!SHOP_STATE = "$7F505F"
|
||||
!SCRATCH_CAPACITY = "$7F5060"
|
||||
!SCRATCH_TEMP_X = "$7F5061"
|
||||
!SHOP_SRAM_INDEX = "$7F5062"
|
||||
;--------------------------------------------------------------------------------
|
||||
.digit_properties
|
||||
dw $0230, $0231, $0202, $0203, $0212, $0213, $0222, $0223, $0232, $0233
|
||||
@@ -148,6 +150,7 @@ SpritePrep_ShopKeeper:
|
||||
LDA ShopTable, X : STA !SHOP_ID
|
||||
LDA ShopTable+5, X : STA !SHOP_TYPE
|
||||
AND.b #$03 : ASL #2 : STA !SCRATCH_CAPACITY
|
||||
TXA : LSR #3 : PHA : ASL : !ADD 1,s : STA !SHOP_SRAM_INDEX : PLA
|
||||
BRA .success
|
||||
+
|
||||
TXA : !ADD.w #$0008 : TAX
|
||||
@@ -157,7 +160,7 @@ SpritePrep_ShopKeeper:
|
||||
.fail
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA.b #$FF : STA !SHOP_TYPE ; $FF = error condition
|
||||
BRA .done
|
||||
BRL .done
|
||||
|
||||
.success
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
@@ -165,22 +168,43 @@ SpritePrep_ShopKeeper:
|
||||
LDX.w #$0000
|
||||
LDY.w #$0000
|
||||
-
|
||||
TYA : CMP !SCRATCH_CAPACITY : !BGE .stop
|
||||
LDA.l ShopContentsTable+1, X : CMP.b #$FF : BEQ .stop
|
||||
LDA.l ShopContentsTable, X : CMP !SHOP_ID : BNE +
|
||||
TYA : CMP !SCRATCH_CAPACITY : !BLT ++ : BRL .stop : ++
|
||||
LDA.l ShopContentsTable+1, X : CMP.b #$FF : BNE ++ : BRL .stop : ++
|
||||
|
||||
|
||||
LDA.l ShopContentsTable, X : CMP !SHOP_ID : BEQ ++ : BRL + : ++
|
||||
LDA.l ShopContentsTable+1, X : PHX : TYX : STA.l !SHOP_INVENTORY, X : PLX
|
||||
LDA.l ShopContentsTable+2, X : PHX : TYX : STA.l !SHOP_INVENTORY+1, X : PLX
|
||||
LDA.l ShopContentsTable+3, X : PHX : TYX : STA.l !SHOP_INVENTORY+2, X : LDA.b #$00 : STA.l !SHOP_INVENTORY+3, X : PLX
|
||||
LDA.l ShopContentsTable+3, X : PHX : TYX : STA.l !SHOP_INVENTORY+2, X : PLX
|
||||
|
||||
PHY
|
||||
PHX
|
||||
LDA.b #$00 : XBA : TYA : LSR #2 : !ADD !SHOP_SRAM_INDEX : TAX
|
||||
LDA !SHOP_PURCHASE_COUNTS, X : TYX : STA.l !SHOP_INVENTORY+3, X : TAY
|
||||
PLX
|
||||
|
||||
LDA.l ShopContentsTable+4, X : BEQ ++
|
||||
TYA : CMP.l ShopContentsTable+4, X : !BLT ++
|
||||
PLY
|
||||
LDA.l ShopContentsTable+5, X : PHX : TYX : STA.l !SHOP_INVENTORY, X : PLX
|
||||
LDA.l ShopContentsTable+6, X : PHX : TYX : STA.l !SHOP_INVENTORY+1, X : PLX
|
||||
LDA.l ShopContentsTable+7, X : PHX : TYX : STA.l !SHOP_INVENTORY+2, X : PLX
|
||||
BRA +++
|
||||
++
|
||||
PLY : +++
|
||||
|
||||
PHX : PHY
|
||||
LDA.l ShopContentsTable+1, X : TAY
|
||||
PHX : TYX : LDA.l !SHOP_INVENTORY, X : PLX : TAY
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA 1,s : TAX : LDA.l .tile_offsets, X : TAX
|
||||
JSR LoadTile
|
||||
PLY : PLX
|
||||
INX #4
|
||||
INX #8
|
||||
INY #4
|
||||
+
|
||||
BRA -
|
||||
|
||||
|
||||
BRL -
|
||||
.stop
|
||||
|
||||
LDA #$80 : STA $2100
|
||||
@@ -188,6 +212,7 @@ SpritePrep_ShopKeeper:
|
||||
LDA #$0F : STA $2100
|
||||
|
||||
.done
|
||||
LDA.b #$00 : STA !SHOP_STATE
|
||||
PLP : PLY : PLX
|
||||
RTL
|
||||
.tile_offsets
|
||||
@@ -206,6 +231,9 @@ LoadTile:
|
||||
REP #$10 ; set 16-bit index registers
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
;!SHOP_INVENTORY, X
|
||||
;[id][$lo][$hi][purchase_counter]
|
||||
;--------------------------------------------------------------------------------
|
||||
;shop_config - t--- --qq
|
||||
; t - 0=Shop - 1=TakeAny
|
||||
; qq - # of items for sale
|
||||
@@ -214,11 +242,12 @@ RTS
|
||||
;;db [id][roomID-low][roomID-high][entranceID-low][entranceID-high][shop_config][pad][pad]
|
||||
;db $FF, $12, $01, $58, $00, $FF, $00, $00
|
||||
;ShopContentsTable:
|
||||
;;db [id][item][price-low][price-high]
|
||||
;db $FF, $AF, $50, $00
|
||||
;db $FF, $27, $0A, $00
|
||||
;db $FF, $12, $F4, $01
|
||||
;db $FF, $FF, $FF, $FF
|
||||
;;db [id][item][price-low][price-high][max][repl_id][repl_price-low][repl_price-high]
|
||||
;db $FF, $AF, $50, $00, $00, $FF, $00, $00
|
||||
;db $FF, $27, $0A, $00, $00, $FF, $00, $00
|
||||
;db $FF, $12, $F4, $01, $01, $2F, $3C, $00
|
||||
;db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
|
||||
;!SHOP_PURCHASE_COUNTS = "$7EF3A0"
|
||||
;--------------------------------------------------------------------------------
|
||||
UploadVRAMTiles:
|
||||
LDA $4300 : PHA ; preserve DMA parameters
|
||||
@@ -328,6 +357,12 @@ Shopkeeper_SetupHitboxes:
|
||||
PHX : PHY : PHP
|
||||
LDY.b #$00
|
||||
-
|
||||
PHY
|
||||
TYA : LSR #2 : TAY
|
||||
LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BEQ +
|
||||
PLY : BRA .no_interaction
|
||||
+
|
||||
PLY
|
||||
LDA $00EE : CMP $0F20, X : BNE .no_interaction
|
||||
|
||||
JSR.w Setup_LinksHitbox
|
||||
@@ -349,20 +384,55 @@ Shopkeeper_SetupHitboxes:
|
||||
PLP : PLY : PLX
|
||||
RTS
|
||||
;--------------------
|
||||
;!SHOP_STATE
|
||||
Shopkeeper_BuyItem:
|
||||
PHX : PHY
|
||||
TYX
|
||||
|
||||
LDA.l !SHOP_INVENTORY, X
|
||||
CMP.b #$0E : BEQ .refill ; Bee Refill
|
||||
CMP.b #$2E : BEQ .refill ; Red Potion Refill
|
||||
CMP.b #$2F : BEQ .refill ; Green Potion Refill
|
||||
CMP.b #$30 : BEQ .refill ; Blue Potion Refill
|
||||
BRA +
|
||||
.refill
|
||||
STA $FFFFFF
|
||||
JSL.l Sprite_GetEmptyBottleIndex : BMI .full_bottles
|
||||
+
|
||||
|
||||
REP #$20 : LDA $7EF360 : CMP.l !SHOP_INVENTORY+1, X : SEP #$20 : !BGE .buy
|
||||
|
||||
.cant_afford
|
||||
LDA.b #$7A
|
||||
LDY.b #$01
|
||||
JSL.l Sprite_ShowMessageUnconditional
|
||||
LDA.b #$3C : STA $012E ; error sound
|
||||
BRA .done
|
||||
.full_bottles
|
||||
LDA.b #$6B
|
||||
LDY.b #$01
|
||||
JSL.l Sprite_ShowMessageUnconditional
|
||||
BRA .done
|
||||
.buy
|
||||
REP #$20 : LDA $7EF360 : !SUB !SHOP_INVENTORY+1, X : STA $7EF360 : SEP #$20 ; Take price away
|
||||
LDA !SHOP_INVENTORY, X : TAY : JSL.l Link_ReceiveItem
|
||||
LDA !SHOP_INVENTORY+3, X : INC : STA !SHOP_INVENTORY+3, X
|
||||
LDA.l !SHOP_INVENTORY, X : TAY : JSL.l Link_ReceiveItem
|
||||
LDA.l !SHOP_INVENTORY+3, X : INC : STA.l !SHOP_INVENTORY+3, X
|
||||
|
||||
TXA : LSR #2 : TAX
|
||||
LDA.l !SHOP_STATE : ORA.w Shopkeeper_ItemMasks, X : STA.l !SHOP_STATE
|
||||
PHX
|
||||
TXA : !ADD !SHOP_SRAM_INDEX : TAX
|
||||
LDA !SHOP_PURCHASE_COUNTS, X : INC : BEQ + : STA !SHOP_PURCHASE_COUNTS, X : +
|
||||
PLX
|
||||
.done
|
||||
PLY : PLX
|
||||
RTS
|
||||
Shopkeeper_ItemMasks:
|
||||
db #$01, #$02, #$04
|
||||
;--------------------
|
||||
;!SHOP_ID = "$7F5050"
|
||||
;!SHOP_SRAM_INDEX = "$7F5062"
|
||||
;!SHOP_PURCHASE_COUNTS = "$7EF3A0"
|
||||
;--------------------
|
||||
Setup_ShopItemCollisionHitbox:
|
||||
;The complications with XBA are to handle the fact that nintendo likes to store
|
||||
@@ -462,7 +532,7 @@ RTS
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
Shopkeeper_DrawNextItem:
|
||||
LDA !SHOP_INVENTORY+3, X : BNE .next
|
||||
LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BNE .next
|
||||
|
||||
PHY
|
||||
TYA : ASL #2 : TAY
|
||||
|
||||
21
tables.asm
21
tables.asm
@@ -1278,8 +1278,8 @@ dw #9999 ; Rupee Limit
|
||||
; $7F5042 - Tile Upload Offset Override (Low)
|
||||
; $7F5043 - Tile Upload Offset Override (High)
|
||||
; $7F5044 - $7F504F - Unused
|
||||
; $7F5050 - $7F505F - Shop Block
|
||||
; $7F5060 - $7F507E - Unused
|
||||
; $7F5050 - $7F506F - Shop Block
|
||||
; $7F5070 - $7F507E - Unused
|
||||
; $7F507E - Clock Status
|
||||
; $7F507F - Always Zero
|
||||
; $7F5080 - $7F5083 - Clock Hours
|
||||
@@ -1389,7 +1389,7 @@ dw $0000, $0000
|
||||
;===============================================================================
|
||||
org $30C000 ; PC 0x184000 - 0x184007
|
||||
ItemSubstitutionRules:
|
||||
;db [item][quantity][substitution][pad]
|
||||
;db [item][quantity][substitution][pad] - CURRENT LIMIT 16 ENTRIES
|
||||
db $12, $01, $35, $FF
|
||||
db $FF, $FF, $FF, $FF
|
||||
;================================================================================
|
||||
@@ -1401,16 +1401,19 @@ ShopTable:
|
||||
;db [id][roomID-low][roomID-high][entranceID-low][entranceID-high][shop_config][pad][pad]
|
||||
db $FF, $12, $01, $58, $00, $03, $00, $00
|
||||
ShopContentsTable:
|
||||
;db [id][item][price-low][price-high]
|
||||
db $FF, $AF, $50, $00
|
||||
db $FF, $27, $0A, $00
|
||||
db $FF, $12, $F4, $01
|
||||
db $FF, $FF, $FF, $FF
|
||||
;db [id][item][price-low][price-high][max][repl_id][repl_price-low][repl_price-high]
|
||||
db $FF, $AF, $50, $00, $00, $FF, $00, $00
|
||||
db $FF, $27, $0A, $00, $00, $FF, $00, $00
|
||||
db $FF, $12, $F4, $01, $01, $2F, $3C, $00
|
||||
db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
|
||||
;================================================================================
|
||||
track_list:
|
||||
db $00,$01,$03,$03,$03,$03,$03,$03
|
||||
db $01,$03,$01,$03,$03,$03,$03,$03
|
||||
db $03,$03,$03,$01,$03,$03,$03,$03
|
||||
db $03,$03,$03,$03,$03,$01,$03,$03
|
||||
db $03,$01,$01
|
||||
db $03,$01,$01,$FF,$FF,$FF,$FF,$FF
|
||||
db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
||||
db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
||||
db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
||||
;================================================================================
|
||||
|
||||
Reference in New Issue
Block a user