Merge branch 'master' into worktree-local-location-view

Brings in the encounter-status feature (cleared/resumed hunt encounters)
and its own independent Verwilderter Straßenhund / Verkohlter Plünderer
assets. Both branches added the same two monsters at the same time;
resolved by keeping master's asset set as canonical (images/combat/icons/,
images/combat/sprites/) rather than maintaining a parallel copy under
images/monsters/icons/ — dropped that directory and pointed the seed's
MonsterDefinition.iconPath, the local-view test fixtures and the frontend
icon lookup at the existing combat/icons paths instead. Kept this
branch's COMBAT_MONSTER_SCALE entries for the two monsters, since master
never added them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Bastian Wagner
2026-08-20 16:03:59 +02:00
45 changed files with 889 additions and 88 deletions

View File

@@ -31,10 +31,10 @@ describe('monsterCutoutPath', () => {
describe('monsterIconPath', () => {
it('returns the medallion icon for a known monster key', () => {
expect(monsterIconPath('ash-rat')).toBe('/images/monsters/icons/ash-rat-128.png');
expect(monsterIconPath('road-bandit')).toBe('/images/monsters/icons/road-bandit-128.png');
expect(monsterIconPath('ash-rat')).toBe('/images/combat/icons/ash-rat-128.png');
expect(monsterIconPath('road-bandit')).toBe('/images/combat/icons/road-bandit-128.png');
expect(monsterIconPath('charred-looter')).toBe(
'/images/monsters/icons/charred-looter-128.png',
'/images/combat/icons/charred-looter-128.png',
);
});

View File

@@ -1,8 +1,8 @@
const RUNTIME_MONSTER_ARTWORK: Readonly<Record<string, string>> = {
'/images/monsters/ash-rat.png': '/images/monsters/runtime/ash-rat-560.jpg',
'/images/monsters/road-bandit.png': '/images/monsters/runtime/road-bandit-560.jpg',
'/images/monsters/wild-road-dog.png': '/images/monsters/runtime/wild-road-dog-560.jpg',
'/images/monsters/charred-looter.png': '/images/monsters/runtime/charred-looter-560.jpg',
'/images/monsters/wild-road-dog.png': '/images/monsters/runtime/wild-road-dog-560.png',
'/images/monsters/charred-looter.png': '/images/monsters/runtime/charred-looter-560.png',
};
export function runtimeMonsterArtworkPath(artworkPath: string): string | undefined {
@@ -18,14 +18,11 @@ const MONSTER_CUTOUT: Readonly<Record<string, string>> = {
'charred-looter': '/images/combat/sprites/charred-looter-620.png',
};
// Medallions live under `monsters/`, not `combat/`: the local location view
// shows the same icons in its encounter preview, where they are served
// straight from `MonsterDefinition.iconPath`.
const MONSTER_ICON: Readonly<Record<string, string>> = {
'ash-rat': '/images/monsters/icons/ash-rat-128.png',
'road-bandit': '/images/monsters/icons/road-bandit-128.png',
'wild-road-dog': '/images/monsters/icons/wild-road-dog-128.png',
'charred-looter': '/images/monsters/icons/charred-looter-128.png',
'ash-rat': '/images/combat/icons/ash-rat-128.png',
'road-bandit': '/images/combat/icons/road-bandit-128.png',
'wild-road-dog': '/images/combat/icons/wild-road-dog-128.png',
'charred-looter': '/images/combat/icons/charred-looter-128.png',
};
// Share of the battlefield height each monster sprite occupies, so a hulking