Add MagicBean_FertileSoil and setup sprite detection

This commit is contained in:
scawful
2024-12-15 16:14:22 -05:00
parent 2459ea0e98
commit 3c1a8d7298

View File

@@ -37,7 +37,11 @@
Sprite_BeanVendor_Long: Sprite_BeanVendor_Long:
{ {
PHB : PHK : PLB PHB : PHK : PLB
LDA.w SprMiscD, X : BNE +
JSR Sprite_BeanVendor_Draw JSR Sprite_BeanVendor_Draw
+
JSL Sprite_CheckActive : BCC .SpriteIsNotActive JSL Sprite_CheckActive : BCC .SpriteIsNotActive
LDA.w SprSubtype, X : BEQ + LDA.w SprSubtype, X : BEQ +
JSR Sprite_VillageElder_Main JSR Sprite_VillageElder_Main
@@ -55,16 +59,23 @@ Sprite_BeanVendor_Long:
Sprite_BeanVendor_Prep: Sprite_BeanVendor_Prep:
{ {
PHB : PHK : PLB PHB : PHK : PLB
LDA.b #$80 : STA.w SprDefl, X ; Persist in dungeons LDA.b #$80 : STA.w SprDefl, X
LDA.b #$40 : STA.w SprTimerA, X LDA.b #$40 : STA.w SprTimerA, X
LDA.w SprSubtype, X : STA.w SprAction, X STZ.w SprMiscD, X
LDA.b $8A : CMP.b #$00 : BNE + LDA.b $8A : CMP.b #$00 : BNE +
LDA.l MagicBeanProg : BNE .in_progress LDA.l MagicBeanProg : BNE .in_progress
STZ.w SprState, X
.in_progress
; Sprite is the flower on ranch map
LDA.b #$04 : STA.w SprAction, X LDA.b #$04 : STA.w SprAction, X
JMP +
.in_progress
CMP.b #$3F : BNE .not_flower
; Sprite is the flower on ranch map
LDA.b #$05 : STA.w SprAction, X
JMP +
.not_flower
CMP.b #$7F : BNE .not_done
STZ.w SprState, X
.not_done
+ +
PLB PLB
RTL RTL
@@ -74,10 +85,13 @@ Sprite_BeanVendor_Prep:
Sprite_BeanVendor_Main: Sprite_BeanVendor_Main:
{ {
%SpriteJumpTable(BeanVendor, MagicBean, SpawnMagicBean, %SpriteJumpTable(BeanVendor,
PlayerSaidNo, MagicBean_RanchFlower) MagicBean,
BeanVendor_SpawnMagicBean,
BeanVendor_PlayerSaidNo,
MagicBean_FertileSoil,
MagicBean_RanchFlower)
; 0x00 - Bean Vendor
BeanVendor: BeanVendor:
{ {
%PlayAnimation(0,0,1) %PlayAnimation(0,0,1)
@@ -106,8 +120,7 @@ Sprite_BeanVendor_Main:
RTS RTS
} }
; 0x02 - Spawn Magic Bean BeanVendor_SpawnMagicBean:
SpawnMagicBean:
{ {
%PlayAnimation(0,0,1) %PlayAnimation(0,0,1)
LDA $1CE8 : BNE .player_said_no_or_not_enough_rupees LDA $1CE8 : BNE .player_said_no_or_not_enough_rupees
@@ -142,8 +155,7 @@ Sprite_BeanVendor_Main:
RTS RTS
} }
; 0x03 - Player Said No BeanVendor_PlayerSaidNo:
PlayerSaidNo:
{ {
%PlayAnimation(0,0,1) %PlayAnimation(0,0,1)
%ShowUnconditionalMessage($144) %ShowUnconditionalMessage($144)
@@ -151,10 +163,26 @@ Sprite_BeanVendor_Main:
RTS RTS
} }
MagicBean_FertileSoil:
{
LDA.b #Sprite_BeanVendor : STA.b $00
JSL Sprite_CheckForPresence : BCC +
PHX
LDA.b $02 : TAX
JSL Sprite_SetupHitBox
PLX
JSL Sprite_SetupHitBox_Alt
JSL CheckIfHitBoxesOverlap : BCC +
INC.w SprAction, X
LDA.l MagicBeanProg
ORA.b #$01
STA.l MagicBeanProg
+
RTS
}
MagicBean_RanchFlower: MagicBean_RanchFlower:
{ {
LDA.b #$04 : STA.w SprFrame, X
; Check for the good bee ; Check for the good bee
LDA.l MagicBeanProg : AND.b #$02 : BEQ + LDA.l MagicBeanProg : AND.b #$02 : BEQ +
LDA.b #$B2 : STA.b $00 LDA.b #$B2 : STA.b $00
@@ -165,11 +193,15 @@ Sprite_BeanVendor_Main:
JSL Sprite_SetupHitBox JSL Sprite_SetupHitBox
PLX PLX
JSL Sprite_SetupHitBox_Alt JSL Sprite_SetupHitBox_Alt
JSL CheckIfHitboxesOverlap : BCC + JSL CheckIfHitBoxesOverlap : BCC +
LDA.l MagicBeanProg LDA.l MagicBeanProg
ORA.l #$02 : STA.l MagicBeanProg ORA.l #$02
STA.l MagicBeanProg
; Set a timer and maybe a jingle effect? ; Set a timer and maybe a jingle effect?
+ +
AND.b #$3F : BEQ ++
LDA.b #$04 : STA.w SprFrame, X
++
JSL ThrownSprite_TileAndSpriteInteraction_long JSL ThrownSprite_TileAndSpriteInteraction_long
RTS RTS
@@ -186,7 +218,7 @@ ReleaseMagicBean:
LDA $21 : STA.w SprYH, Y LDA $21 : STA.w SprYH, Y
LDA $22 : STA.w SprX, Y LDA $22 : STA.w SprX, Y
LDA $23 : STA.w SprXH, Y LDA $23 : STA.w SprXH, Y
LDA.b #$01 : STA.w SprAction, Y : STA.w SprSubtype, Y LDA.b #$01 : STA.w SprAction, Y
LDA.b #$02 : STA.l $7EF35C, X LDA.b #$02 : STA.l $7EF35C, X
RTL RTL
.not_the_ranch .not_the_ranch
@@ -239,7 +271,6 @@ Sprite_BeanVendor_Draw:
LDA $0DC0, X : CLC : ADC $0D90, X : TAY;Animation Frame LDA $0DC0, X : CLC : ADC $0D90, X : TAY;Animation Frame
LDA .start_index, Y : STA $06 LDA .start_index, Y : STA $06
PHX PHX
LDX .nbr_of_tiles, Y ;amount of tiles -1 LDX .nbr_of_tiles, Y ;amount of tiles -1
LDY.b #$00 LDY.b #$00