take-all support (testing)

This commit is contained in:
Karkat
2018-04-07 21:06:17 -04:00
parent 867272ab15
commit 0825db5c6f
3 changed files with 39 additions and 13 deletions

View File

@@ -136,7 +136,7 @@ endmacro
;carry set if caught ;carry set if caught
;incsrc eventdata.asm ;incsrc eventdata.asm
ProcessEventItems: ProcessEventItems:
STA $FFFFFF ;STA $FFFFFF
LDA $00 : PHA LDA $00 : PHA
LDA $01 : PHA LDA $01 : PHA
LDA $02 : PHA LDA $02 : PHA

View File

@@ -214,7 +214,7 @@ SpritePrep_ShopKeeper:
BRL - BRL -
.stop .stop
STA $FFFFFF ;STA $FFFFFF
LDA $A0 : CMP.b #$FF : BNE .normal LDA $A0 : CMP.b #$FF : BNE .normal
.dumb .dumb
LDA $2137 LDA $2137
@@ -229,7 +229,18 @@ SpritePrep_ShopKeeper:
;JSR.w QueueItemDMA ;JSR.w QueueItemDMA
.done .done
LDA.b #$00 : STA !SHOP_STATE STA $FFFFFF
LDA.l !SHOP_TYPE : BIT.b #$20 : BEQ .notTakeAll ; Take-all
.takeAll
LDA.b #$00 : XBA : LDA !SHOP_SRAM_INDEX : TAX
LDA.l !SHOP_PURCHASE_COUNTS, X
BRA ++
.notTakeAll
LDA.b #$00
++
STA !SHOP_STATE
PLP : PLY : PLX PLP : PLY : PLX
LDA.l !SHOP_TYPE : CMP.b #$FF : BNE + LDA.l !SHOP_TYPE : CMP.b #$FF : BNE +
@@ -346,12 +357,19 @@ Sprite_ShopKeeper:
; Draw Shopkeeper ; Draw Shopkeeper
JSR.w Shopkeeper_DrawMerchant JSR.w Shopkeeper_DrawMerchant
LDA.l !SHOP_TYPE : AND.b #$80 : BEQ + ; Take-any LDA.l !SHOP_TYPE : BIT.b #$80 : BEQ .normal ; Take-any
BIT.b #$20 : BNE + ; Not A Take-All
PHX PHX
LDA !SHOP_SRAM_INDEX : TAX LDA !SHOP_SRAM_INDEX : TAX
LDA !SHOP_PURCHASE_COUNTS, X : BEQ ++ : PLX : BRA .done : ++ LDA !SHOP_PURCHASE_COUNTS, X : BEQ ++ : PLX : BRA .done : ++
PLX PLX
+ BRA .normal
+ ; Take-All
;PHX
; LDA !SHOP_SRAM_INDEX : TAX
; LDA.w !SHOP_PURCHASE_COUNTS, X : STA.l !SHOP_STATE
;PLX
.normal
; Draw Items ; Draw Items
JSR.w Shopkeeper_DrawItems JSR.w Shopkeeper_DrawItems
@@ -498,13 +516,13 @@ Shopkeeper_BuyItem:
LDY.b #$01 LDY.b #$01
JSL.l Sprite_ShowMessageUnconditional JSL.l Sprite_ShowMessageUnconditional
LDA.b #$3C : STA $012E ; error sound LDA.b #$3C : STA $012E ; error sound
BRA .done BRL .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 $012E ; error sound LDA.b #$3C : STA $012E ; error sound
BRA .done BRL .done
.buy .buy
LDA !SHOP_TYPE : AND.b #$80 : BNE ++ ; don't charge if this is a take-any 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
@@ -513,7 +531,7 @@ Shopkeeper_BuyItem:
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
TXA : LSR #2 : TAX TXA : LSR #2 : TAX
LDA !SHOP_TYPE : AND.b #$80 : BNE + LDA !SHOP_TYPE : BIT.b #$80 : BNE +
LDA.l !SHOP_STATE : ORA.w Shopkeeper_ItemMasks, X : STA.l !SHOP_STATE LDA.l !SHOP_STATE : ORA.w Shopkeeper_ItemMasks, X : STA.l !SHOP_STATE
PHX PHX
TXA : !ADD !SHOP_SRAM_INDEX : TAX TXA : !ADD !SHOP_SRAM_INDEX : TAX
@@ -521,8 +539,15 @@ Shopkeeper_BuyItem:
PLX PLX
BRA ++ BRA ++
+ ; Take-any + ; Take-any
LDA.l !SHOP_STATE : ORA.b #$07 : STA.l !SHOP_STATE ;STA $FFFFFF
PHX : LDA !SHOP_SRAM_INDEX : TAX : LDA.b #$01 : STA !SHOP_PURCHASE_COUNTS, X : PLX BIT.b #$20 : BNE .takeAll
.takeAny
LDA.l !SHOP_STATE : ORA.b #$07 : STA.l !SHOP_STATE
PHX : LDA.l !SHOP_SRAM_INDEX : TAX : LDA.b #$01 : STA.l !SHOP_PURCHASE_COUNTS, X : PLX
BRA ++
.takeAll
LDA.l !SHOP_STATE : ORA.w Shopkeeper_ItemMasks, X : STA.l !SHOP_STATE
PHX : LDA.l !SHOP_SRAM_INDEX : TAX : LDA.l !SHOP_STATE : STA.l !SHOP_PURCHASE_COUNTS, X : PLX
++ ++
.done .done
PLY : PLX PLY : PLX

View File

@@ -1560,9 +1560,10 @@ db $FF, $FF, $FF, $FF
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; 0x184008 - 0x1847FF (unused) ; 0x184008 - 0x1847FF (unused)
;================================================================================ ;================================================================================
;shop_config - td-- --qq ;shop_config - tda- --qq
; t - 0=Shop - 1=TakeAny ; t - 0=Shop - 1=TakeAny
; d - 0=Check Door - 1=Skip Door Check ; d - 0=Check Door - 1=Skip Door Check
; a - 0=Shop/TakeAny - 1=TakeAll
; qq - # of items for sale ; qq - # of items for sale
;shopkeeper_config - ppp- --ss ;shopkeeper_config - ppp- --ss
@@ -1571,10 +1572,10 @@ db $FF, $FF, $FF, $FF
org $30C800 ; PC 0x184800 - 0x1848FF - max 32 shops ; do not exceed 36 tracked items sram_index > ($24) org $30C800 ; PC 0x184800 - 0x1848FF - max 32 shops ; do not exceed 36 tracked items sram_index > ($24)
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, $FF, $00, $00, $00, $43, $A0, $00 db $01, $FF, $00, $00, $00, $43, $A0, $00
db $02, $0F, $01, $60, $00, $03, $C1, $03 db $02, $0F, $01, $60, $00, $03, $C1, $03
db $FF, $12, $01, $58, $00, $02, $E3, $06 db $FF, $12, $01, $58, $00, $A3, $E3, $06
db $02, $0F, $01, $57, $00, $03, $A0, $09 db $02, $0F, $01, $57, $00, $03, $A0, $09
db $03, $0F, $01, $60, $00, $03, $A0, $0c db $03, $0F, $01, $60, $00, $03, $A0, $0c
db $04, $0F, $01, $6F, $00, $03, $A0, $0f db $04, $0F, $01, $6F, $00, $03, $A0, $0f