- Created detailed documentation for the Kydrog Boss sprite, outlining its phases, behaviors, and mechanics. - Added analysis for the Manhandla sprite, including its transformation into Big Chuchu and phase management. - Documented the Octoboss sprite, highlighting its unique mechanics and interactions with a "brother" Octoboss. - Provided an overview of the Twinrova boss sprite, detailing its transformation and phase-based attacks. - Included analysis for the Vampire Bat mini-boss, emphasizing its enhanced behavior compared to standard Keese. - Documented the Wolfos mini-boss, focusing on its integration into a mask quest and unique pacification mechanics.
63 lines
5.2 KiB
Markdown
63 lines
5.2 KiB
Markdown
# Wolfos Mini-Boss Sprite Analysis
|
|
|
|
## Overview
|
|
The `wolfos` sprite (ID: `Sprite_Wolfos`, which is `$A9`) functions as a mini-boss or special enemy. It engages Link in combat with various movement and attack patterns. A key aspect of this sprite is its integration into a mask quest, where it can be subdued and, under specific conditions, grants Link the Wolf Mask.
|
|
|
|
## Key Properties:
|
|
* **Sprite ID:** `Sprite_Wolfos` (`$A9`)
|
|
* **Description:** A mini-boss/special enemy that fights Link and is part of a mask quest.
|
|
* **Number of Tiles:** 4
|
|
* **Health:** `30` (decimal)
|
|
* **Damage:** `00` (Damage dealt to Link is likely handled by its attacks.)
|
|
* **Special Properties:**
|
|
* `!Boss = 00` (Not marked as a boss, but functions as a mini-boss/special enemy.)
|
|
* `!ImperviousArrow = 01` (Impervious to arrows.)
|
|
|
|
## Custom Variables/Macros:
|
|
* `WolfosDialogue = SprMiscD`: Stores a flag to control Wolfos dialogue.
|
|
* `Wolfos_AnimateAction = SprMiscE`: Stores the current animation action.
|
|
* `AttackForward()`, `AttackBack()`, `WalkRight()`, `WalkLeft()`, `AttackRight()`, `AttackLeft()`, `Subdued()`, `GrantMask()`, `Dismiss()`: Macros for setting `SprAction` and `Wolfos_AnimateAction`, improving code clarity.
|
|
* `!NormalSpeed = $08`, `!AttackSpeed = $0F`: Constants for movement speeds.
|
|
|
|
## Main Logic Flow (`Sprite_Wolfos_Main`):
|
|
The Wolfos's behavior is governed by a state machine:
|
|
* **`Wolfos_AttackForward` (0x00), `Wolfos_AttackBack` (0x01), `Wolfos_WalkRight` (0x02), `Wolfos_WalkLeft` (0x03), `Wolfos_AttackRight` (0x04), `Wolfos_AttackLeft` (0x05):** These states manage the Wolfos's movement and attacks. They call `Wolfos_Move` and can randomly trigger attack actions with increased speed and temporary imperviousness.
|
|
* **`Wolfos_Subdued` (0x06):** In this state, the Wolfos stops moving, displays dialogue (`$23`), and waits for Link to play the Song of Healing (`SongFlag = $01`). If the song is played, it transitions to `Wolfos_GrantMask`.
|
|
* **`Wolfos_GrantMask` (0x07):** Displays the Wolfos mask graphic, shows a message (`$10F`), grants Link the `WolfMask` item, and transitions to `Wolfos_Dismiss`.
|
|
* **`Wolfos_Dismiss` (0x08):** Stops moving, kills the sprite, and clears Link's `BRANDISH` flag.
|
|
|
|
## Initialization (`Sprite_Wolfos_Prep`):
|
|
* Checks if Link is outdoors (`$1B`). If so, it further checks if the Wolfos has already been defeated (`$7EF303 = $01`). If defeated, the sprite is killed to prevent respawning.
|
|
* Sets initial timers (`SprTimerA = $40`, `SprTimerC = $40`).
|
|
* Configures deflection properties (`SprDefl = $82`, making it impervious to arrows).
|
|
* Sets `SprNbrOAM = $08` and initializes `SprMiscG, X` and `SprMiscE, X` to `0`.
|
|
|
|
## Defeat Check (`Sprite_Wolfos_CheckIfDefeated`):
|
|
* Checks if Link is outdoors. If `SprHealth, X` drops below `$04`, the Wolfos is considered "defeated."
|
|
* Upon defeat, it sets `SprAction = $06` (Wolfos_Subdued), `SprState = $09` (normal state, avoiding a full death animation), refills its health to `$40`, and clears `WolfosDialogue`. This indicates pacification rather than outright killing.
|
|
|
|
## Movement (`Wolfos_Move`, `Wolfos_DecideAction`, `Wolfos_MoveAction_Basic`, `Wolfos_MoveAction_CirclePlayer`, `Wolfos_MoveAction_Dodge`):
|
|
* **`Wolfos_Move`:** Handles damage flash, checks damage from player, prevents player from passing through, bounces from tile collision, checks for recoiling, moves the sprite, and calls `Wolfos_DecideAction`.
|
|
* **`Wolfos_DecideAction`:** Determines the Wolfos's next movement action based on timers and random chance. It uses a jump table to select between `Wolfos_MoveAction_Basic`, `Wolfos_MoveAction_CirclePlayer`, and `Wolfos_MoveAction_Dodge`.
|
|
* **`Wolfos_MoveAction_Basic`:** Basic movement towards or away from Link based on distance.
|
|
* **`Wolfos_MoveAction_CirclePlayer`:** Attempts to circle the player.
|
|
* **`Wolfos_MoveAction_Dodge`:** Dodges by applying speed towards the player.
|
|
|
|
## Animation (`Sprite_Wolfos_Animate`):
|
|
* This routine is called from `Sprite_Wolfos_Main`.
|
|
* It uses `Wolfos_AnimateAction` (stored in `SprMiscE, X`) to determine which animation to play.
|
|
* It has separate animation routines for `AttackForward`, `AttackBack`, `WalkRight`, `WalkLeft`, `AttackRight`, `AttackLeft`, and `Subdued`.
|
|
* It also spawns sparkle garnishes (`JSL Sprite_SpawnSparkleGarnish`).
|
|
|
|
## Drawing (`Sprite_Wolfos_Draw`):
|
|
* Uses standard OAM allocation routines.
|
|
* Handles animation frames, x/y offsets, character data, properties, and sizes for drawing the Wolfos.
|
|
* Includes a special frame for the Wolf Mask (`$CC`) when granting the item.
|
|
|
|
## Discrepancies/Notes:
|
|
* **Mask Quest Integration:** The Wolfos is directly integrated into a mask quest, where playing the Song of Healing subdues it and leads to receiving the Wolf Mask.
|
|
* **Health Refill on Defeat:** When defeated, its health is refilled to `$40`, and its state is set to `Wolfos_Subdued`, indicating it's not truly killed but rather pacified.
|
|
* **Hardcoded Values:** Many numerical values for timers, speeds, and offsets are hardcoded. Replacing these with named constants would improve readability and maintainability.
|
|
* **`JSL Link_ReceiveItem`:** This is a standard function for giving items to Link.
|
|
* **`JSL Sprite_SpawnSparkleGarnish`:** This is a generic garnish spawning function.
|