let's dev 1/30/18

more shop dev
This commit is contained in:
Karkat
2018-01-30 00:24:24 -05:00
parent 1bd2550c2c
commit 53602a48c5
3 changed files with 106 additions and 29 deletions

View File

@@ -26,7 +26,7 @@ org $3FFFFF ; <- 1FFFFF
db #$00 ; expand file to 2mb db #$00 ; expand file to 2mb
org $1FFFF8 ; <- FFFF8 timestamp rom 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" !INVENTORY_SWAP_2 = "$7EF38E"
!ITEM_LIMIT_COUNTS = "$7EF390" !ITEM_LIMIT_COUNTS = "$7EF390"
!SHOP_PURCHASE_COUNTS = "$7EF3A0"
;================================================================================ ;================================================================================
incsrc hooks.asm incsrc hooks.asm
@@ -513,6 +514,9 @@ Sprite_SpawnDynamically_arbitrary:
org $1DFD4B org $1DFD4B
DiggingGameGuy_AttemptPrizeSpawn: DiggingGameGuy_AttemptPrizeSpawn:
org $1EDE28
Sprite_GetEmptyBottleIndex: ; this is totally in sprite_bees.asm
org $1EF4E7 org $1EF4E7
Sprite_PlayerCantPassThrough: Sprite_PlayerCantPassThrough:
;================================================================================ ;================================================================================

View File

@@ -126,9 +126,11 @@ RTS
!FREE_TILE_BUFFER = "#$1180" !FREE_TILE_BUFFER = "#$1180"
!SHOP_ID = "$7F5050" !SHOP_ID = "$7F5050"
!SHOP_TYPE = "$7F5051" !SHOP_TYPE = "$7F5051"
!SHOP_INVENTORY = "$7F5052" !SHOP_INVENTORY = "$7F5052" ; $7F505E
!SCRATCH_CAPACITY = "$7F5020" !SHOP_STATE = "$7F505F"
!SCRATCH_TEMP_X = "$7F5021" !SCRATCH_CAPACITY = "$7F5060"
!SCRATCH_TEMP_X = "$7F5061"
!SHOP_SRAM_INDEX = "$7F5062"
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
.digit_properties .digit_properties
dw $0230, $0231, $0202, $0203, $0212, $0213, $0222, $0223, $0232, $0233 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, X : STA !SHOP_ID
LDA ShopTable+5, X : STA !SHOP_TYPE LDA ShopTable+5, X : STA !SHOP_TYPE
AND.b #$03 : ASL #2 : STA !SCRATCH_CAPACITY AND.b #$03 : ASL #2 : STA !SCRATCH_CAPACITY
TXA : LSR #3 : PHA : ASL : !ADD 1,s : STA !SHOP_SRAM_INDEX : PLA
BRA .success BRA .success
+ +
TXA : !ADD.w #$0008 : TAX TXA : !ADD.w #$0008 : TAX
@@ -157,7 +160,7 @@ SpritePrep_ShopKeeper:
.fail .fail
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
LDA.b #$FF : STA !SHOP_TYPE ; $FF = error condition LDA.b #$FF : STA !SHOP_TYPE ; $FF = error condition
BRA .done BRL .done
.success .success
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
@@ -165,22 +168,43 @@ SpritePrep_ShopKeeper:
LDX.w #$0000 LDX.w #$0000
LDY.w #$0000 LDY.w #$0000
- -
TYA : CMP !SCRATCH_CAPACITY : !BGE .stop TYA : CMP !SCRATCH_CAPACITY : !BLT ++ : BRL .stop : ++
LDA.l ShopContentsTable+1, X : CMP.b #$FF : BEQ .stop LDA.l ShopContentsTable+1, X : CMP.b #$FF : BNE ++ : BRL .stop : ++
LDA.l ShopContentsTable, X : CMP !SHOP_ID : BNE +
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+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+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 PHX : PHY
LDA.l ShopContentsTable+1, X : TAY PHX : TYX : LDA.l !SHOP_INVENTORY, X : PLX : TAY
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
LDA 1,s : TAX : LDA.l .tile_offsets, X : TAX LDA 1,s : TAX : LDA.l .tile_offsets, X : TAX
JSR LoadTile JSR LoadTile
PLY : PLX PLY : PLX
INX #4 INX #8
INY #4 INY #4
+ +
BRA -
BRL -
.stop .stop
LDA #$80 : STA $2100 LDA #$80 : STA $2100
@@ -188,6 +212,7 @@ SpritePrep_ShopKeeper:
LDA #$0F : STA $2100 LDA #$0F : STA $2100
.done .done
LDA.b #$00 : STA !SHOP_STATE
PLP : PLY : PLX PLP : PLY : PLX
RTL RTL
.tile_offsets .tile_offsets
@@ -206,6 +231,9 @@ LoadTile:
REP #$10 ; set 16-bit index registers REP #$10 ; set 16-bit index registers
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;!SHOP_INVENTORY, X
;[id][$lo][$hi][purchase_counter]
;--------------------------------------------------------------------------------
;shop_config - t--- --qq ;shop_config - t--- --qq
; t - 0=Shop - 1=TakeAny ; t - 0=Shop - 1=TakeAny
; qq - # of items for sale ; 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 [id][roomID-low][roomID-high][entranceID-low][entranceID-high][shop_config][pad][pad]
;db $FF, $12, $01, $58, $00, $FF, $00, $00 ;db $FF, $12, $01, $58, $00, $FF, $00, $00
;ShopContentsTable: ;ShopContentsTable:
;;db [id][item][price-low][price-high] ;;db [id][item][price-low][price-high][max][repl_id][repl_price-low][repl_price-high]
;db $FF, $AF, $50, $00 ;db $FF, $AF, $50, $00, $00, $FF, $00, $00
;db $FF, $27, $0A, $00 ;db $FF, $27, $0A, $00, $00, $FF, $00, $00
;db $FF, $12, $F4, $01 ;db $FF, $12, $F4, $01, $01, $2F, $3C, $00
;db $FF, $FF, $FF, $FF ;db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
;!SHOP_PURCHASE_COUNTS = "$7EF3A0"
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
UploadVRAMTiles: UploadVRAMTiles:
LDA $4300 : PHA ; preserve DMA parameters LDA $4300 : PHA ; preserve DMA parameters
@@ -328,6 +357,12 @@ Shopkeeper_SetupHitboxes:
PHX : PHY : PHP PHX : PHY : PHP
LDY.b #$00 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 LDA $00EE : CMP $0F20, X : BNE .no_interaction
JSR.w Setup_LinksHitbox JSR.w Setup_LinksHitbox
@@ -349,20 +384,55 @@ Shopkeeper_SetupHitboxes:
PLP : PLY : PLX PLP : PLY : PLX
RTS RTS
;-------------------- ;--------------------
;!SHOP_STATE
Shopkeeper_BuyItem: Shopkeeper_BuyItem:
PHX : PHY PHX : PHY
TYX 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 REP #$20 : LDA $7EF360 : CMP.l !SHOP_INVENTORY+1, X : SEP #$20 : !BGE .buy
.cant_afford .cant_afford
LDA.b #$7A
LDY.b #$01
JSL.l Sprite_ShowMessageUnconditional
LDA.b #$3C : STA $012E ; error sound LDA.b #$3C : STA $012E ; error sound
BRA .done BRA .done
.full_bottles
LDA.b #$6B
LDY.b #$01
JSL.l Sprite_ShowMessageUnconditional
BRA .done
.buy .buy
REP #$20 : LDA $7EF360 : !SUB !SHOP_INVENTORY+1, X : STA $7EF360 : SEP #$20 ; Take price away 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.l !SHOP_INVENTORY, X : TAY : JSL.l Link_ReceiveItem
LDA !SHOP_INVENTORY+3, X : INC : STA !SHOP_INVENTORY+3, X 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 .done
PLY : PLX PLY : PLX
RTS RTS
Shopkeeper_ItemMasks:
db #$01, #$02, #$04
;--------------------
;!SHOP_ID = "$7F5050"
;!SHOP_SRAM_INDEX = "$7F5062"
;!SHOP_PURCHASE_COUNTS = "$7EF3A0"
;-------------------- ;--------------------
Setup_ShopItemCollisionHitbox: Setup_ShopItemCollisionHitbox:
;The complications with XBA are to handle the fact that nintendo likes to store ;The complications with XBA are to handle the fact that nintendo likes to store
@@ -462,7 +532,7 @@ RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
Shopkeeper_DrawNextItem: Shopkeeper_DrawNextItem:
LDA !SHOP_INVENTORY+3, X : BNE .next LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BNE .next
PHY PHY
TYA : ASL #2 : TAY TYA : ASL #2 : TAY

View File

@@ -1278,8 +1278,8 @@ dw #9999 ; Rupee Limit
; $7F5042 - Tile Upload Offset Override (Low) ; $7F5042 - Tile Upload Offset Override (Low)
; $7F5043 - Tile Upload Offset Override (High) ; $7F5043 - Tile Upload Offset Override (High)
; $7F5044 - $7F504F - Unused ; $7F5044 - $7F504F - Unused
; $7F5050 - $7F505F - Shop Block ; $7F5050 - $7F506F - Shop Block
; $7F5060 - $7F507E - Unused ; $7F5070 - $7F507E - Unused
; $7F507E - Clock Status ; $7F507E - Clock Status
; $7F507F - Always Zero ; $7F507F - Always Zero
; $7F5080 - $7F5083 - Clock Hours ; $7F5080 - $7F5083 - Clock Hours
@@ -1389,7 +1389,7 @@ dw $0000, $0000
;=============================================================================== ;===============================================================================
org $30C000 ; PC 0x184000 - 0x184007 org $30C000 ; PC 0x184000 - 0x184007
ItemSubstitutionRules: ItemSubstitutionRules:
;db [item][quantity][substitution][pad] ;db [item][quantity][substitution][pad] - CURRENT LIMIT 16 ENTRIES
db $12, $01, $35, $FF db $12, $01, $35, $FF
db $FF, $FF, $FF, $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 [id][roomID-low][roomID-high][entranceID-low][entranceID-high][shop_config][pad][pad]
db $FF, $12, $01, $58, $00, $03, $00, $00 db $FF, $12, $01, $58, $00, $03, $00, $00
ShopContentsTable: ShopContentsTable:
;db [id][item][price-low][price-high] ;db [id][item][price-low][price-high][max][repl_id][repl_price-low][repl_price-high]
db $FF, $AF, $50, $00 db $FF, $AF, $50, $00, $00, $FF, $00, $00
db $FF, $27, $0A, $00 db $FF, $27, $0A, $00, $00, $FF, $00, $00
db $FF, $12, $F4, $01 db $FF, $12, $F4, $01, $01, $2F, $3C, $00
db $FF, $FF, $FF, $FF db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
;================================================================================ ;================================================================================
track_list: track_list:
db $00,$01,$03,$03,$03,$03,$03,$03 db $00,$01,$03,$03,$03,$03,$03,$03
db $01,$03,$01,$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,$01,$03,$03,$03,$03
db $03,$03,$03,$03,$03,$01,$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
;================================================================================ ;================================================================================