From 0825db5c6f061dc6da2137f70c5d2f844f24ff11 Mon Sep 17 00:00:00 2001 From: Karkat Date: Sat, 7 Apr 2018 21:06:17 -0400 Subject: [PATCH] take-all support (testing) --- newitems.asm | 2 +- shopkeeper.asm | 43 ++++++++++++++++++++++++++++++++++--------- tables.asm | 7 ++++--- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/newitems.asm b/newitems.asm index 5c87463..d88b2eb 100755 --- a/newitems.asm +++ b/newitems.asm @@ -136,7 +136,7 @@ endmacro ;carry set if caught ;incsrc eventdata.asm ProcessEventItems: - STA $FFFFFF + ;STA $FFFFFF LDA $00 : PHA LDA $01 : PHA LDA $02 : PHA diff --git a/shopkeeper.asm b/shopkeeper.asm index 3150dfd..cb2522a 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -214,7 +214,7 @@ SpritePrep_ShopKeeper: BRL - .stop - STA $FFFFFF + ;STA $FFFFFF LDA $A0 : CMP.b #$FF : BNE .normal .dumb LDA $2137 @@ -229,7 +229,18 @@ SpritePrep_ShopKeeper: ;JSR.w QueueItemDMA .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 LDA.l !SHOP_TYPE : CMP.b #$FF : BNE + @@ -346,12 +357,19 @@ Sprite_ShopKeeper: ; Draw Shopkeeper 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 LDA !SHOP_SRAM_INDEX : TAX LDA !SHOP_PURCHASE_COUNTS, X : BEQ ++ : PLX : BRA .done : ++ 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 JSR.w Shopkeeper_DrawItems @@ -498,13 +516,13 @@ Shopkeeper_BuyItem: LDY.b #$01 JSL.l Sprite_ShowMessageUnconditional LDA.b #$3C : STA $012E ; error sound - BRA .done + BRL .done .full_bottles LDA.b #$6B LDY.b #$01 JSL.l Sprite_ShowMessageUnconditional LDA.b #$3C : STA $012E ; error sound - BRA .done + BRL .done .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 @@ -513,7 +531,7 @@ Shopkeeper_BuyItem: LDA.l !SHOP_INVENTORY+3, X : INC : STA.l !SHOP_INVENTORY+3, X 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 PHX TXA : !ADD !SHOP_SRAM_INDEX : TAX @@ -521,8 +539,15 @@ Shopkeeper_BuyItem: PLX BRA ++ + ; Take-any - LDA.l !SHOP_STATE : ORA.b #$07 : STA.l !SHOP_STATE - PHX : LDA !SHOP_SRAM_INDEX : TAX : LDA.b #$01 : STA !SHOP_PURCHASE_COUNTS, X : PLX + ;STA $FFFFFF + 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 PLY : PLX diff --git a/tables.asm b/tables.asm index 1cfe533..ff99453 100644 --- a/tables.asm +++ b/tables.asm @@ -1560,9 +1560,10 @@ db $FF, $FF, $FF, $FF ;-------------------------------------------------------------------------------- ; 0x184008 - 0x1847FF (unused) ;================================================================================ -;shop_config - td-- --qq +;shop_config - tda- --qq ; t - 0=Shop - 1=TakeAny ; d - 0=Check Door - 1=Skip Door Check +; a - 0=Shop/TakeAny - 1=TakeAll ; qq - # of items for sale ;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) ShopTable: ;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 $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 $03, $0F, $01, $60, $00, $03, $A0, $0c db $04, $0F, $01, $6F, $00, $03, $A0, $0f