let's dev 2/17/18

continued shop dev
This commit is contained in:
Karkat
2018-02-18 00:05:08 -05:00
parent d80295f5ea
commit 9135b34e52
3 changed files with 121 additions and 52 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, #$02, #$15 ; year/month/day db #$20, #$18, #$02, #$17 ; year/month/day
;================================================================================ ;================================================================================

View File

@@ -345,33 +345,52 @@ Sprite_ShopKeeper:
PLB PLB
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------- macro DrawMerchant(head,body,speed)
Shopkeeper_DrawMerchant: PHX : LDX.b #$00
LDA.l !SHOP_MERCHANT : AND.b #$0F LDA $1A : AND <speed> : BEQ +
BEQ Shopkeeper_DrawMerchant_Type0 -
CMP.b #$01 : BEQ Shopkeeper_DrawMerchant_Type1 LDA.w .oam_shopkeeper_f1, X : STA !BIGRAM, X : INX
Shopkeeper_DrawMerchant_Type0: CPX.b #$10 : !BLT -
+
-
LDA.w .oam_shopkeeper_f2, X : STA !BIGRAM, X : INX
CPX.b #$10 : !BLT -
++
PLX
LDA !SHOP_MERCHANT : LSR #4 : AND.b #$0E : ORA !BIGRAM+5 : STA !BIGRAM+5
LDA !SHOP_MERCHANT : LSR #4 : AND.b #$0E : ORA !BIGRAM+13 : STA !BIGRAM+13
PHB
LDA.b #$02 : STA $06 ; request 2 OAM slots LDA.b #$02 : STA $06 ; request 2 OAM slots
LDA #$08 : JSL.l OAM_AllocateFromRegionA ; request 8 bytes LDA #$08 : JSL.l OAM_AllocateFromRegionA ; request 8 bytes
STZ $07 STZ $07
LDA $1A : AND #$10 : BEQ +
LDA.b #.oam_shopkeeper_f1 : STA $08 LDA.b #!BIGRAM : STA $08
LDA.b #.oam_shopkeeper_f1>>8 : STA $09 LDA.b #!BIGRAM>>8 : STA $09
BRA ++ LDA.b #$7E : PHA : PLB ; set data bank to $7E
+
LDA.b #.oam_shopkeeper_f2 : STA $08
LDA.b #.oam_shopkeeper_f2>>8 : STA $09
++
JSL.l Sprite_DrawMultiple_quantity_preset JSL.l Sprite_DrawMultiple_quantity_preset
LDA $90 : !ADD.b #$04*2 : STA $90 ; increment oam pointer LDA $90 : !ADD.b #$04*2 : STA $90 ; increment oam pointer
LDA $92 : INC #2 : STA $92 LDA $92 : INC #2 : STA $92
PLB
RTS RTS
.oam_shopkeeper_f1 .oam_shopkeeper_f1
dw 0, -8 : db $00, $0A, $00, $02 dw 0, -8 : db <head>, $00, $00, $02
dw 0, 0 : db $10, $0A, $00, $02 dw 0, 0 : db <body>, $00, $00, $02
.oam_shopkeeper_f2 .oam_shopkeeper_f2
dw 0, -8 : db $00, $0A, $00, $02 dw 0, -8 : db <head>, $00, $00, $02
dw 0, 0 : db $10, $4A, $00, $02 dw 0, 0 : db <body>, $40, $00, $02
endmacro
;--------------------------------------------------------------------------------
Shopkeeper_DrawMerchant:
LDA.l !SHOP_MERCHANT : AND.b #$03
BEQ Shopkeeper_DrawMerchant_Type0
CMP.b #$01 : BNE + : BRL Shopkeeper_DrawMerchant_Type1 : +
CMP.b #$02 : BNE + : BRL Shopkeeper_DrawMerchant_Type2 : +
CMP.b #$03 : BNE + : BRL Shopkeeper_DrawMerchant_Type3 : +
;--------------------------------------------------------------------------------
Shopkeeper_DrawMerchant_Type0:
%DrawMerchant(#$00, #$10, #$10)
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
Shopkeeper_DrawMerchant_Type1: Shopkeeper_DrawMerchant_Type1:
LDA.b #$01 : STA $06 ; request 1 OAM slot LDA.b #$01 : STA $06 ; request 1 OAM slot
@@ -394,6 +413,12 @@ dw 0, 0 : db $46, $0A, $00, $02
.oam_shopkeeper_f2 .oam_shopkeeper_f2
dw 0, 0 : db $46, $4A, $00, $02 dw 0, 0 : db $46, $4A, $00, $02
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
Shopkeeper_DrawMerchant_Type2:
%DrawMerchant(#$84, #$10, #$40)
;--------------------------------------------------------------------------------
Shopkeeper_DrawMerchant_Type3:
%DrawMerchant(#$8E, #$10, #$40)
;--------------------------------------------------------------------------------
Shopkeeper_SetupHitboxes: Shopkeeper_SetupHitboxes:
PHX : PHY : PHP PHX : PHY : PHP
LDY.b #$00 LDY.b #$00
@@ -440,6 +465,7 @@ Shopkeeper_BuyItem:
JSL.l Sprite_GetEmptyBottleIndex : BMI .full_bottles JSL.l Sprite_GetEmptyBottleIndex : BMI .full_bottles
+ +
LDA !SHOP_TYPE : AND.b #$80 : BNE .buy ; don't charge if this is a take-any
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
@@ -455,7 +481,9 @@ Shopkeeper_BuyItem:
LDA.b #$3C : STA $012E ; error sound LDA.b #$3C : STA $012E ; error sound
BRA .done BRA .done
.buy .buy
LDA !SHOP_TYPE : AND.b #$80 : BNE ++ ; don't charge if this is a take-any
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.l !SHOP_INVENTORY, X : TAY : JSL.l Link_ReceiveItem LDA.l !SHOP_INVENTORY, X : TAY : JSL.l Link_ReceiveItem
LDA.l !SHOP_INVENTORY+3, X : INC : STA.l !SHOP_INVENTORY+3, X LDA.l !SHOP_INVENTORY+3, X : INC : STA.l !SHOP_INVENTORY+3, X
@@ -484,11 +512,21 @@ db #$01, #$02, #$04
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
;high and low bytes of 16 bit postion values seperately :-( ;high and low bytes of 16 bit postion values seperately :-(
REP #$20 ; set 16-bit accumulator
LDA $00 : PHA
SEP #$20 ; set 8-bit accumulator
; load shopkeeper X (16 bit) ; load shopkeeper X (16 bit)
LDA $0D30, X : XBA : LDA $0D10, X LDA $0D30, X : XBA : LDA $0D10, X
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
!ADD.w Shopkeeper_DrawNextItem_item_offsets, Y PHA : PHY
LDA !SHOP_TYPE : AND.w #$0003 : DEC : ASL : TAY
LDA.w Shopkeeper_DrawNextItem_item_offsets_idx, Y : STA $00 ; get table from the table table
PLY : PLA
!ADD ($00), Y
!ADD.w #$0002 ; a small negative margin !ADD.w #$0002 ; a small negative margin
; TODO: add 4 for a narrow item ; TODO: add 4 for a narrow item
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
@@ -500,7 +538,9 @@ Setup_ShopItemCollisionHitbox:
LDA $0D20, X : XBA : LDA $0D00, X LDA $0D20, X : XBA : LDA $0D00, X
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
!ADD.w Shopkeeper_DrawNextItem_item_offsets+2, Y PHY : INY #2
!ADD ($00), Y
PLY
PHA : LDA !SHOP_TYPE : AND.w #$0080 : BEQ + ; lower by 4 for Take-any PHA : LDA !SHOP_TYPE : AND.w #$0080 : BEQ + ; lower by 4 for Take-any
PLA : !ADD.w #$0004 PLA : !ADD.w #$0004
BRA ++ BRA ++
@@ -514,6 +554,10 @@ Setup_ShopItemCollisionHitbox:
; TODO: for narrow sprite store make width 4 (i.e. 8 pixels smaller) ; TODO: for narrow sprite store make width 4 (i.e. 8 pixels smaller)
LDA.b #14 : STA $07 ; Hitbox height, always 14 LDA.b #14 : STA $07 ; Hitbox height, always 14
REP #$20 ; set 16-bit accumulator
PLA : STA $00
SEP #$20 ; set 8-bit acc
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; Adjusts the already set up collision hitbox to be a suitable interaction hitbox ; Adjusts the already set up collision hitbox to be a suitable interaction hitbox
@@ -586,13 +630,17 @@ Shopkeeper_DrawNextItem:
LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BEQ + : BRL .next : + LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BEQ + : BRL .next : +
PHY PHY
TYA : ASL #2 : TAY
LDA !SHOP_TYPE : AND.b #$03 : DEC : ASL : TAY
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
LDA.w .item_offsets, Y : STA.l !SPRITE_OAM LDA.w .item_offsets_idx, Y : STA $00 ; get table from the table table
LDA 1,s : ASL #2 : TAY ; set Y to the item index
LDA ($00), Y : STA.l !SPRITE_OAM ; load X-coordinate
INY #2
LDA !SHOP_TYPE : AND.w #$0080 : BNE + LDA !SHOP_TYPE : AND.w #$0080 : BNE +
LDA.w .item_offsets+2, Y : STA.l !SPRITE_OAM+2 : BRA ++ LDA ($00), Y : STA.l !SPRITE_OAM+2 : BRA ++ ; load Y-coordinate
+ +
LDA.w .item_offsets+2, Y : !ADD.w #$0004 : STA.l !SPRITE_OAM+2 LDA ($00), Y : !ADD.w #$0004 : STA.l !SPRITE_OAM+2 ; load Y-coordinate
++ ++
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
PLY PLY
@@ -637,7 +685,16 @@ Shopkeeper_DrawNextItem:
INX #4 INX #4
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
.item_offsets .item_offsets_idx
dw #.item_offsets_1
dw #.item_offsets_2
dw #.item_offsets_3
.item_offsets_1
dw 8, 40
.item_offsets_2
dw -16, 40
dw 32, 40
.item_offsets_3
dw -40, 40 dw -40, 40
dw 8, 40 dw 8, 40
dw 56, 40 dw 56, 40
@@ -652,9 +709,15 @@ Shopkeeper_DrawNextPrice:
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
PHY PHY
TYA : ASL : TAY LDA !SHOP_TYPE : AND.w #$0003 : DEC : ASL : TAY
LDA.w .price_columns, Y : STA !COLUMN_LOW LDA.w Shopkeeper_DrawNextItem_item_offsets_idx, Y : STA $00 ; get table from the table table
LDA.w .price_offsets, Y : STA $0E ; set coordinate LDA.w .price_columns_idx, Y : STA $02 ; get table from the table table
PLY : PHY
TYA : ASL #2 : TAY
LDA ($00), Y : STA $0E ; set coordinate
TYA : LSR : TAY
LDA ($02), Y : STA !COLUMN_LOW
INY : LDA ($02), Y : STA !COLUMN_HIGH
PLY PLY
LDA.l !SHOP_INVENTORY+1, X : STA $0C ; set value LDA.l !SHOP_INVENTORY+1, X : STA $0C ; set value
JSR.w DrawPrice JSR.w DrawPrice
@@ -673,10 +736,16 @@ Shopkeeper_DrawNextPrice:
PLP : PLY : PLX PLP : PLY : PLX
PLB PLB
RTS RTS
.price_columns .price_columns_idx
dw #.price_columns_1
dw #.price_columns_2
dw #.price_columns_3
.price_columns_1
db #$00, #$FF
.price_columns_2
db #$00, #$80, #$80, $FF
.price_columns_3
db #$00, #$60, #$60, #$90, #$90, $FF db #$00, #$60, #$60, #$90, #$90, $FF
.price_offsets
dw #-40, #8, #56
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
RequestItemOAM: RequestItemOAM:
PHX : PHY : PHA PHX : PHY : PHA

View File

@@ -1427,22 +1427,22 @@ db $FF, $FF, $FF, $FF
; d - 0=Check Door - 1=Skip Door Check ; d - 0=Check Door - 1=Skip Door Check
; qq - # of items for sale ; qq - # of items for sale
;shopkeeper_config - -ppp --ss ;shopkeeper_config - ppp- --ss
; ppp - palette ; ppp - palette
; ss - sprite type ; ss - sprite type
org $30C800 ; PC 0x184800 - 0x18487F - max 16 shops org $30C800 ; PC 0x184800 - 0x18487F - max 16 shops
ShopTable: ShopTable:
;db [id][roomID-low][roomID-high][doorID][zero][shop_config][shopkeeper_config][sram_index] ;db [id][roomID-low][roomID-high][doorID][zero][shop_config][shopkeeper_config][sram_index]
db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
db $01, $0F, $01, $57, $00, $03, $51, $00 db $01, $0F, $01, $57, $00, $03, $C1, $00
db $02, $0F, $01, $60, $00, $03, $51, $03 db $02, $0F, $01, $60, $00, $03, $C1, $03
db $FF, $12, $01, $58, $00, $03, $50, $06 db $FF, $12, $01, $58, $00, $02, $E3, $06
db $02, $0F, $01, $57, $00, $03, $50, $09 db $02, $0F, $01, $57, $00, $03, $A0, $09
db $03, $0F, $01, $60, $00, $03, $50, $0c db $03, $0F, $01, $60, $00, $03, $A0, $0c
db $04, $0F, $01, $6F, $00, $03, $50, $0f db $04, $0F, $01, $6F, $00, $03, $A0, $0f
db $05, $FF, $00, $00, $00, $03, $50, $12 db $05, $FF, $00, $00, $00, $03, $A0, $12
db $06, $1F, $01, $46, $00, $03, $50, $15 db $06, $1F, $01, $46, $00, $03, $A0, $15
db $FF, $12, $01, $58, $00, $03, $50, $18 db $FF, $12, $01, $58, $00, $03, $A0, $18
org $30C880 ; PC 0x184880 - 0x184FFF - max 240 entries org $30C880 ; PC 0x184880 - 0x184FFF - max 240 entries
ShopContentsTable: ShopContentsTable:
;db [id][item][price-low][price-high][max][repl_id][repl_price-low][repl_price-high] ;db [id][item][price-low][price-high][max][repl_id][repl_price-low][repl_price-high]
@@ -1453,7 +1453,7 @@ db $02, $2E, $96, $00, $00, $FF, $00, $00
db $02, $AF, $50, $00, $00, $FF, $00, $00 db $02, $AF, $50, $00, $00, $FF, $00, $00
db $02, $31, $32, $00, $00, $FF, $00, $00 db $02, $31, $32, $00, $00, $FF, $00, $00
db $FF, $2E, $96, $00, $00, $FF, $00, $00 db $FF, $2E, $96, $00, $00, $FF, $00, $00
db $FF, $AF, $50, $00, $00, $FF, $00, $00 db $FF, $30, $2C, $01, $00, $FF, $00, $00
db $FF, $31, $32, $00, $00, $FF, $00, $00 db $FF, $31, $32, $00, $00, $FF, $00, $00
db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
;================================================================================ ;================================================================================