Files
oracle-of-secrets/Docs/Sprites/Wolfos.md
scawful 6780dd0d45 Add sprite analysis documentation for various bosses and mini-bosses
- 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.
2025-10-02 21:24:44 -04:00

5.2 KiB

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.