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

@ -92,7 +92,7 @@ const TABLE: Dictionary = {
&"event.no_fire.title": "No Fire",
&"event.no_fire.body": "Without a hearth, the cold will bite by night.",
&"event.walls.title": "Walls?",
&"event.walls.body": "Sleeping under stars is romantic until the wolves arrive.",
&"event.walls.body": "Sleeping under stars is romantic until the hyenas arrive.",
&"event.spring_awakens.title": "Spring Awakens",
&"event.spring_awakens.body": "The thaw runs in every stream. Crops will grow fast now.",
&"event.summers_heat.title": "Summer's Heat",
@ -109,10 +109,10 @@ const TABLE: Dictionary = {
&"event.the_old_soldier.body": "A retired soldier offers his blade for a place by your fire. Combat 8, but old and tired.",
&"event.the_wandering_healer.title": "The Wandering Healer",
&"event.the_wandering_healer.body": "A traveling healer asks for shelter. She brings knowledge of medicine.",
&"event.wolves_at_the_edge.title": "Wolves at the Edge",
&"event.wolves_at_the_edge.body": "Wolves howl in the distance. They will be here by nightfall.",
&"event.lone_wolf.title": "Lone Wolf",
&"event.lone_wolf.body": "A starving wolf circles your livestock.",
&"event.wolves_at_the_edge.title": "Hyenas at the Edge",
&"event.wolves_at_the_edge.body": "Hyenas howl in the distance. They will be here by nightfall.",
&"event.lone_wolf.title": "Lone Hyena",
&"event.lone_wolf.body": "A starving hyena circles your livestock.",
&"event.pack_hunt.title": "Pack Hunt",
&"event.pack_hunt.body": "A hunting pack moves through the forest. They smell your colony.",
&"event.bandit_scouts.title": "Bandit Scouts",
@ -225,7 +225,7 @@ const TABLE: Dictionary = {
&"ui.day_summary.title": "Day {day} — {season}",
&"ui.day_summary.continue": "Continue",
&"ui.day_summary.pawns_alive": "Pawns alive",
&"ui.day_summary.wolves_on_map": "Wolves on map",
&"ui.day_summary.wolves_on_map": "Hyenas on map",
&"ui.day_summary.tension": "Tension",
&"ui.day_summary.tension_fmt": "{t} / 100",
# Weather labels (weather.<name>)
@ -288,9 +288,9 @@ const TABLE: Dictionary = {
&"help.priorities.heading": "Work Priorities",
&"help.priorities.body": "Each pawn has priorities (0-4) per work category. The Work matrix grid lets you tune them.\n\n0 = Off. Pawn won't do this work.\n1 = Background. Only if nothing else fits.\n2 = Low.\n3 = Normal (default).\n4 = Urgent. Drops other work to take this.\n\nNeeds (rest, eat, sleep) always run regardless - you can't starve a pawn by setting priorities.",
&"help.storyteller.heading": "Storyteller Events",
&"help.storyteller.body": "Each in-game day at 6 AM the Storyteller may roll an event. Categories include nudges (gentle hints), threats (wolves, raids), wanderers (recruit offers), seasonal beats, disease, resource booms, lore, and milestones.\n\nThreat events auto-pause the sim and show a modal with a choice. Other events show a banner that fades in a few seconds.\n\nThe Storyteller's tension rises and falls based on what happens to your colony - calmer when nothing has happened recently, escalating after kills, damage, or near-misses.",
&"help.storyteller.body": "Each in-game day at 6 AM the Storyteller may roll an event. Categories include nudges (gentle hints), threats (hyenas, raids), wanderers (recruit offers), seasonal beats, disease, resource booms, lore, and milestones.\n\nThreat events auto-pause the sim and show a modal with a choice. Other events show a banner that fades in a few seconds.\n\nThe Storyteller's tension rises and falls based on what happens to your colony - calmer when nothing has happened recently, escalating after kills, damage, or near-misses.",
&"help.tips.heading": "Early-game Tips",
&"help.tips.body": "Build at least one bed and one wall before nightfall - pawns sleep on the ground and grow tired, and wolves come at night.\n\nKeep beds indoors (under a roof). Rain and cold ruin sleep quality.\n\nPaint a stockpile early - items left on the ground decay (corpses, food) or just clutter the map.\n\nWatch tension. If it climbs, slow down and reinforce. The Storyteller is reactive - give it nothing to react to and it stays quiet.\n\nFood priority order: Meal > Bread > Vegetable / Grain / Strawberry > raw Wheat. Cook before eating raw.",
&"help.tips.body": "Build at least one bed and one wall before nightfall - pawns sleep on the ground and grow tired, and hyenas come at night.\n\nKeep beds indoors (under a roof). Rain and cold ruin sleep quality.\n\nPaint a stockpile early - items left on the ground decay (corpses, food) or just clutter the map.\n\nWatch tension. If it climbs, slow down and reinforce. The Storyteller is reactive - give it nothing to react to and it stays quiet.\n\nFood priority order: Meal > Bread > Vegetable / Grain / Strawberry > raw Wheat. Cook before eating raw.",
# Phase 19 — Onboarding section in SettingsMenu.
&"ui.settings.section.onboarding": "Onboarding",
&"ui.settings.show_hints": "Show hints (first session)",