- Created detailed documentation for the Minecart sprite, outlining its properties, constants, collision setup, main logic, and design patterns. - Added documentation for the Pedestal sprite, including its vanilla overrides, custom logic for item interaction, and event triggering based on area context. - Introduced documentation for the Portal sprite, detailing its two-way warping system, initialization, main logic, and helper routines for seamless transitions. - Documented the Switch Track sprite, explaining its interactive behavior, state-based animation, and integration with external switches for dynamic track manipulation.
5.4 KiB
Maku Tree
Overview
The Maku Tree sprite (!SPRID = Sprite_MakuTree) represents a significant NPC in the game, likely serving as a quest giver or a key character in the narrative. Its interactions are primarily dialogue-driven and tied to game progression, culminating in the granting of a Heart Container. Notably, its graphics are not handled by a conventional sprite drawing routine within this file, suggesting it might be a background element or drawn by a separate system.
Sprite Properties
!SPRID:Sprite_MakuTree(Custom symbol, likely a remapped vanilla ID)!NbrTiles:00(Indicates graphics are handled externally or as a background)!Harmless:01!HVelocity:00!Health:0!Damage:0!DeathAnimation:00!ImperviousAll:00!SmallShadow:00!Shadow:00!Palette:0!Hitbox:$0D!Persist:00!Statis:00!CollisionLayer:00!CanFall:00!DeflectArrow:00!WaterSprite:00!Blockable:00!Prize:0!Sound:00!Interaction:00!Statue:00!DeflectProjectiles:00!ImperviousArrow:00!ImpervSwordHammer:00!Boss:00
Main Structure (Sprite_MakuTree_Long)
This routine primarily checks if the Maku Tree sprite is active and then dispatches to its main logic routine. The absence of a direct drawing call (JSR Sprite_MakuTree_Draw) here suggests its visual representation is managed outside of the standard sprite drawing pipeline.
Sprite_MakuTree_Long:
{
PHB : PHK : PLB
JSL Sprite_CheckActive : BCC .SpriteIsNotActive
JSR Sprite_MakuTree_Main
.SpriteIsNotActive
PLB
RTL
}
Initialization (Sprite_MakuTree_Prep)
This routine initializes the Maku Tree upon spawning. It sets SprDefl, X and includes logic to potentially play the "Maku Song" by checking a custom progression flag (OOSPROG2).
Sprite_MakuTree_Prep:
{
PHB : PHK : PLB
; Play the Maku Song
LDA.l OOSPROG2 : AND.b #$04 : BEQ +
LDA.b #$03 : STA.w $012C
+
PLB
RTL
}
Main Logic & State Machine (Sprite_MakuTree_Main)
The Maku Tree's core behavior is managed by a state machine that guides its interaction with Link and quest progression.
- Player Collision: Prevents Link from passing through the Maku Tree (
JSL Sprite_PlayerCantPassThrough). MakuTree_Handler: Checks theMakuTreeQuestflag to determine if Link has already met the Maku Tree, transitioning toMakuTree_MeetLinkorMakuTree_HasMetLinkaccordingly.MakuTree_MeetLink: When Link is close enough, the Maku Tree displays an unconditional message (%ShowUnconditionalMessage($20)), updates quest flags (MakuTreeQuest,MapIcon,$7EF3D6), and transitions toMakuTree_SpawnHeartContainer.MakuTree_SpawnHeartContainer: Grants Link a Heart Container (LDY #$3E : JSL Link_ReceiveItem) and then transitions toMakuTree_HasMetLink.MakuTree_HasMetLink: Displays a solicited message (%ShowSolicitedMessage($22)) and updates a progression flag ($7EF3D6) upon message dismissal.
Sprite_MakuTree_Main:
{
JSL Sprite_PlayerCantPassThrough
LDA.w SprAction, X
JSL JumpTableLocal
dw MakuTree_Handler
dw MakuTree_MeetLink
dw MakuTree_SpawnHeartContainer
dw MakuTree_HasMetLink
MakuTree_Handler:
{
; Check the progress flags
LDA.l MakuTreeQuest : AND.b #$01 : BNE .has_met_link
%GotoAction(1)
RTS
.has_met_link
%GotoAction(3)
RTS
}
MakuTree_MeetLink:
{
JSL GetDistance8bit_Long : CMP #$28 : BCS .not_too_close
%ShowUnconditionalMessage($20)
LDA.b #$01 : STA.l MakuTreeQuest
LDA.b #$01 : STA.l MapIcon ; Mushroom Grotto
LDA.l $7EF3D6 : ORA.b #$02 : STA.l $7EF3D6
%GotoAction(2)
.not_too_close
RTS
}
MakuTree_SpawnHeartContainer:
{
; Give Link a heart container
LDY #$3E : JSL Link_ReceiveItem
%GotoAction(3)
RTS
}
MakuTree_HasMetLink:
{
%ShowSolicitedMessage($22) : BCC .no_talk
LDA.l $7EF3D6 : ORA.b #$02 : STA.l $7EF3D6
.no_talk
RTS
}
}
Drawing
There is no Sprite_MakuTree_Draw routine defined within this file. This strongly suggests that the Maku Tree's graphical representation is handled as a background element or by a separate drawing system, rather than as a conventional sprite with its own OAM data.
Design Patterns
- Background/Static NPC: The Maku Tree functions as a static NPC whose visual representation is likely integrated into the background, as evidenced by the absence of a dedicated sprite drawing routine.
- Quest Gating/Progression: The Maku Tree's interactions are deeply tied to custom quest flags (
MakuTreeQuest,OOSPROG2,$7EF3D6), controlling when Link can meet it, engage in dialogue, and receive rewards. - Item Granting: The Maku Tree serves as a source for a significant reward, granting Link a Heart Container upon meeting specific quest conditions.
- Player Collision: Implements
Sprite_PlayerCantPassThroughto make the Maku Tree a solid, impassable object in the game world. - Dialogue-Driven Progression: Dialogue (
%ShowUnconditionalMessage,%ShowSolicitedMessage) is strategically used to advance the quest narrative and provide context to the player's journey.