From 5ff0395cb832486b671f5dc2fac00c4ca3cd3d09 Mon Sep 17 00:00:00 2001 From: HikeMap User Date: Sun, 4 Jan 2026 09:35:14 -0600 Subject: [PATCH] Reorganize art directory with subdirectories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restructured mapgameimgs/ into organized subdirectories: - monsters/ - Monster sprites (default, moop variants) - player/ - Player sprites (playerattack) - bases/ - Home base icons (homebase00, homebase01) - effects/ - Status effect icons (defense, poison, buffs) Updated all image references in: - index.html: Monster icons, home base markers, status effects - server.js: Homebase icons API, monster creation image copy 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- index.html | 34 +++++++++--------- mapgameimgs/bases/homebase00-100.png | Bin 0 -> 7482 bytes mapgameimgs/bases/homebase01-100.png | Bin 0 -> 7591 bytes mapgameimgs/{ => effects}/default_buff100.png | Bin .../{ => effects}/default_status100.png | Bin mapgameimgs/{ => effects}/defense100.png | Bin mapgameimgs/{ => effects}/defense_up100.png | Bin mapgameimgs/{ => effects}/poison100.png | Bin mapgameimgs/{ => monsters}/default100.png | Bin mapgameimgs/{ => monsters}/default50.png | Bin .../{ => monsters}/moop_fanciest100.png | Bin .../{ => monsters}/moop_fanciest50.png | Bin mapgameimgs/{ => monsters}/moop_fancy100.png | Bin mapgameimgs/{ => monsters}/moop_fancy50.png | Bin .../{ => monsters}/moop_sub_par100.png | Bin mapgameimgs/{ => monsters}/moop_sub_par50.png | Bin mapgameimgs/{ => player}/playerattack50.png | Bin server.js | 16 ++++----- 18 files changed, 25 insertions(+), 25 deletions(-) create mode 100755 mapgameimgs/bases/homebase00-100.png create mode 100755 mapgameimgs/bases/homebase01-100.png rename mapgameimgs/{ => effects}/default_buff100.png (100%) rename mapgameimgs/{ => effects}/default_status100.png (100%) rename mapgameimgs/{ => effects}/defense100.png (100%) rename mapgameimgs/{ => effects}/defense_up100.png (100%) rename mapgameimgs/{ => effects}/poison100.png (100%) rename mapgameimgs/{ => monsters}/default100.png (100%) rename mapgameimgs/{ => monsters}/default50.png (100%) rename mapgameimgs/{ => monsters}/moop_fanciest100.png (100%) rename mapgameimgs/{ => monsters}/moop_fanciest50.png (100%) rename mapgameimgs/{ => monsters}/moop_fancy100.png (100%) rename mapgameimgs/{ => monsters}/moop_fancy50.png (100%) rename mapgameimgs/{ => monsters}/moop_sub_par100.png (100%) rename mapgameimgs/{ => monsters}/moop_sub_par50.png (100%) rename mapgameimgs/{ => player}/playerattack50.png (100%) diff --git a/index.html b/index.html index d9ffa49..010e301 100644 --- a/index.html +++ b/index.html @@ -9769,7 +9769,7 @@ const type = MONSTER_TYPES[m.type] || { name: 'Unknown', icon: '👹' }; monstersHtml += `
- ${type.name} + ${type.name} Lv${m.level} ${type.name} ${m.hp}/${m.maxHp} HP
@@ -10165,12 +10165,12 @@ // Use selected icon or default to '00' (use 100px, CSS scales to 50) const iconId = playerStats.homeBaseIcon || '00'; - const iconSrc = `/mapgameimgs/homebase${iconId}-100.png`; + const iconSrc = `/mapgameimgs/bases/homebase${iconId}-100.png`; const iconHtml = `
Home Base + onerror="this.src='/mapgameimgs/monsters/default50.png'">
`; @@ -10288,7 +10288,7 @@ onclick="selectHomebaseIcon('${icon.id}')" data-icon-id="${icon.id}"> Homebase ${icon.id} + onerror="this.src='/mapgameimgs/monsters/default50.png'"> `).join(''); } catch (err) { @@ -10800,8 +10800,8 @@ const iconHtml = `
- ${monsterType.name} + ${monsterType.name}
`; @@ -11033,11 +11033,11 @@ // Check for buffs (defense, generic, etc.) if (monster.buffs.defense && monster.buffs.defense.turnsLeft > 0) { - html += `Defense Up`; } else if (monster.buffs.generic && monster.buffs.generic.turnsLeft > 0) { - html += `Buff`; } @@ -11045,8 +11045,8 @@ if (monster.statusEffects) { monster.statusEffects.forEach(effect => { const effectType = effect.type || 'status'; - html += `${effectType}`; }); } @@ -11061,8 +11061,8 @@ // Check for player defense buff if (combatState.defenseBuffTurns > 0) { - html += `Defense Up`; } @@ -11070,8 +11070,8 @@ if (combatState.playerStatusEffects && combatState.playerStatusEffects.length > 0) { combatState.playerStatusEffects.forEach(effect => { const effectType = effect.type || 'status'; - html += `${effectType}`; }); } @@ -11113,8 +11113,8 @@
${index === combatState.selectedTargetIndex ? 'â–¶' : ''}
- ${monster.data.name} + ${monster.data.name}
${monsterOverlayHtml}
${monster.data.name} Lv.${monster.level} diff --git a/mapgameimgs/bases/homebase00-100.png b/mapgameimgs/bases/homebase00-100.png new file mode 100755 index 0000000000000000000000000000000000000000..3fc0481fccb86c06f42f01aeddb73ca4ec91f289 GIT binary patch literal 7482 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 NqhX+4u4*6le*ooTGVTBX literal 0 HcmV?d00001 diff --git a/mapgameimgs/bases/homebase01-100.png b/mapgameimgs/bases/homebase01-100.png new file mode 100755 index 0000000000000000000000000000000000000000..a0c2b3c836ae07eb35032ff18087027e543e6e94 GIT binary patch literal 7591 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 { } }); -// Get available homebase icons (auto-detected from mapgameimgs directory) +// Get available homebase icons (auto-detected from mapgameimgs/bases directory) app.get('/api/homebase-icons', (req, res) => { try { const fs = require('fs'); - const imagesDir = path.join(__dirname, 'mapgameimgs'); + const basesDir = path.join(__dirname, 'mapgameimgs', 'bases'); // Read directory and find homebaseXX-100.png files - const files = fs.readdirSync(imagesDir); + const files = fs.readdirSync(basesDir); const iconPattern = /^homebase(\d+)-100\.png$/; const icons = files @@ -904,8 +904,8 @@ app.get('/api/homebase-icons', (req, res) => { return { id: match[1], filename: file, - preview: `/mapgameimgs/${file}`, // Use 100px, CSS scales down - full: `/mapgameimgs/${file}` + preview: `/mapgameimgs/bases/${file}`, // Use 100px, CSS scales down + full: `/mapgameimgs/bases/${file}` }; } return null; @@ -1216,11 +1216,11 @@ app.post('/api/admin/monster-types', adminOnly, async (req, res) => { db.createMonsterType(data); // Copy default images for the new monster - const imgDir = path.join(__dirname, 'mapgameimgs'); + const monstersDir = path.join(__dirname, 'mapgameimgs', 'monsters'); const sizes = ['50', '100']; for (const size of sizes) { - const defaultImg = path.join(imgDir, `default${size}.png`); - const newImg = path.join(imgDir, `${monsterId}${size}.png`); + const defaultImg = path.join(monstersDir, `default${size}.png`); + const newImg = path.join(monstersDir, `${monsterId}${size}.png`); try { // Only copy if the new image doesn't already exist await fs.access(newImg);