reskin wolf as hyena — visual + lean-in flavor

Replaces the procedural brown-rectangle "wolf" with the CraftPix Free
Desert Enemy Sprite Sheets hyena. 48×48, side-view, 2-direction via
horizontal flip. AnimatedSprite2D mounted in Wolf.setup() and
Wolf.from_dict() (same pattern as pawn reskin Slice 1). Anims: idle
(4f @ 5fps) + walk (6f @ 10fps). Attack/hurt/death anims skipped for
MVP scope.

Player-facing copy renamed wolf→hyena in strings.gd (6 entries) and
event_catalog.gd (3 EventDef title/body fields). Internal identifiers
(class Wolf, World.wolves, EventBus.wolf_spawned, save class_id
&"wolf", event IDs like &"lone_wolf") stay the same for save compat
— see header comment in wolf.gd.

MCP runtime verified: hyena AnimatedSprite2D mounted on spawn, idle
anim plays, storyteller modal renders "Lone Hyena — A starving hyena
circles your livestock."

Sprites: CraftPix Free Desert Enemy Sprite Sheets.
License: CraftPix Free (commercial OK, attribution appreciated).
https://free-game-assets.itch.io/free-enemy-sprite-sheets-pixel-art

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
megaproxy 2026-05-16 21:03:46 +01:00
parent 8a7584e411
commit f30c7a858b
9 changed files with 179 additions and 31 deletions

View file

@ -124,7 +124,7 @@ static func _event_04_walls() -> EventDef:
var d := EventDef.new()
d.id = &"walls"
d.title = "Walls?"
d.body = "Sleeping under stars is romantic until the wolves arrive."
d.body = "Sleeping under stars is romantic until the hyenas arrive."
d.category = EventDef.Category.NUDGE
d.display = EventDef.Display.BANNER
d.cooldown_days = 4
@ -317,8 +317,8 @@ static func _event_12_the_wandering_healer() -> EventDef:
static func _event_13_wolves_at_the_edge() -> EventDef:
var d := EventDef.new()
d.id = &"wolves_at_the_edge"
d.title = "Wolves at the Edge"
d.body = "Wolves howl in the distance. They will be here by nightfall."
d.title = "Hyenas at the Edge"
d.body = "Hyenas howl in the distance. They will be here by nightfall."
d.category = EventDef.Category.THREAT
d.display = EventDef.Display.MODAL
d.cooldown_days = 3
@ -337,8 +337,8 @@ static func _event_13_wolves_at_the_edge() -> EventDef:
static func _event_14_lone_wolf() -> EventDef:
var d := EventDef.new()
d.id = &"lone_wolf"
d.title = "Lone Wolf"
d.body = "A starving wolf circles your livestock."
d.title = "Lone Hyena"
d.body = "A starving hyena circles your livestock."
d.category = EventDef.Category.THREAT
d.display = EventDef.Display.MODAL
d.cooldown_days = 3