From 5b7e1bcc56d2b5557d6d0a1dfc2d997116a2de11 Mon Sep 17 00:00:00 2001 From: HikeMap User Date: Sat, 3 Jan 2026 19:39:30 -0600 Subject: [PATCH] Add status effect overlays and monster skill customization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add visual status/buff overlays on combat sprites (100x100px full overlay) - Monster skills can now have custom names per monster - Skills admin page for full skill CRUD - Fix monster buff skills (defend) to properly buff instead of damage - Fix custom skill names appearing in combat log - Auto-copy default images when creating new monsters - Add monster toggle endpoint fix 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- admin.html | 661 +++++++++++++++++++++++++++++- database.js | 51 ++- docker-compose.yml | 1 + index.html | 199 ++++++++- mapgameimgs/default_buff100.png | Bin 0 -> 2312 bytes mapgameimgs/default_status100.png | Bin 0 -> 2456 bytes mapgameimgs/defense100.png | Bin 0 -> 2312 bytes mapgameimgs/defense_up100.png | Bin 0 -> 2312 bytes mapgameimgs/moop_fanciest100.png | Bin 0 -> 15403 bytes mapgameimgs/moop_fanciest50.png | Bin 0 -> 5808 bytes mapgameimgs/moop_fancy100.png | Bin 0 -> 15928 bytes mapgameimgs/moop_fancy50.png | Bin 0 -> 6190 bytes mapgameimgs/moop_sub_par100.png | Bin 0 -> 15403 bytes mapgameimgs/moop_sub_par50.png | Bin 0 -> 5808 bytes mapgameimgs/playerattack50.png | Bin 0 -> 6900 bytes mapgameimgs/poison100.png | Bin 0 -> 2456 bytes server.js | 44 +- 17 files changed, 921 insertions(+), 35 deletions(-) create mode 100755 mapgameimgs/default_buff100.png create mode 100755 mapgameimgs/default_status100.png create mode 100755 mapgameimgs/defense100.png create mode 100755 mapgameimgs/defense_up100.png create mode 100755 mapgameimgs/moop_fanciest100.png create mode 100755 mapgameimgs/moop_fanciest50.png create mode 100755 mapgameimgs/moop_fancy100.png create mode 100755 mapgameimgs/moop_fancy50.png create mode 100755 mapgameimgs/moop_sub_par100.png create mode 100755 mapgameimgs/moop_sub_par50.png create mode 100755 mapgameimgs/playerattack50.png create mode 100755 mapgameimgs/poison100.png diff --git a/admin.html b/admin.html index ff2d09b..4237185 100644 --- a/admin.html +++ b/admin.html @@ -344,6 +344,65 @@ gap: 15px; } + .form-row-4 { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 15px; + } + + .modal-wide { + max-width: 700px; + } + + .status-effect-section { + margin-top: 20px; + padding: 15px; + background: rgba(255,255,255,0.02); + border-radius: 8px; + border: 1px solid rgba(255,255,255,0.1); + } + + .status-effect-section h4 { + margin-bottom: 5px; + color: #aaa; + font-size: 0.9rem; + } + + /* Skill Type Badges */ + .skill-type-badge { + display: inline-block; + padding: 2px 8px; + border-radius: 4px; + font-size: 0.75rem; + font-weight: 600; + text-transform: uppercase; + } + + .skill-type-damage { + background: rgba(244, 67, 54, 0.2); + color: #f44336; + } + + .skill-type-heal { + background: rgba(76, 175, 80, 0.2); + color: #4CAF50; + } + + .skill-type-buff { + background: rgba(33, 150, 243, 0.2); + color: #2196F3; + } + + .skill-type-debuff { + background: rgba(156, 39, 176, 0.2); + color: #9C27B0; + } + + .skill-type-status { + background: rgba(255, 152, 0, 0.2); + color: #FF9800; + } + .form-actions { display: flex; gap: 10px; @@ -444,6 +503,89 @@ padding: 8px 12px; } + /* Skills Editor */ + .skills-section { + margin-top: 20px; + padding: 15px; + background: rgba(255,255,255,0.02); + border-radius: 8px; + } + + .skills-section h4 { + margin-bottom: 15px; + color: #aaa; + font-size: 0.9rem; + } + + .add-skill-row { + display: flex; + gap: 10px; + align-items: center; + margin-top: 10px; + } + + .add-skill-row select { + flex: 1; + } + + .monster-skill-item { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 12px; + background: rgba(255,255,255,0.05); + border-radius: 6px; + margin-bottom: 8px; + } + + .monster-skill-item .skill-name { + flex: 1; + font-weight: 500; + } + + .monster-skill-item .skill-weight, + .monster-skill-item .skill-min-level { + width: 60px; + text-align: center; + } + + .monster-skill-item label { + font-size: 11px; + color: #888; + } + + .skill-name-section { + flex: 1; + display: flex; + flex-direction: column; + gap: 2px; + } + + .skill-custom-name { + width: 100%; + padding: 4px 8px; + font-size: 13px; + background: rgba(255,255,255,0.1); + border: 1px solid rgba(255,255,255,0.2); + border-radius: 4px; + color: #fff; + } + + .skill-custom-name:focus { + outline: none; + border-color: #4CAF50; + } + + .skill-custom-name::placeholder { + color: #888; + font-style: italic; + } + + .skill-base-name { + font-size: 10px; + color: #666; + } + /* Stats Display */ .stats-grid { display: grid; @@ -517,6 +659,9 @@ 👾 Monsters + + Skills + 👤 Users @@ -557,6 +702,34 @@ + +
+
+

Skills Database

+ +
+ + + + + + + + + + + + + + + + + + + +
NameIDTypePowerAccuracyMPTargetPlayerMonsterEnabledActions
Loading...
+
+
@@ -678,6 +851,21 @@
+
+

Monster Skills

+
+
+ + + + + +
+

Custom name overrides skill name for this monster. Weight = selection probability.

+
+

Dialogues (one per line)

@@ -771,12 +959,128 @@
+ + +