Narmir Admin
Logged in as
Players
—
Kingdoms
—
Banned
—
Combats
—
Messages
—
Last regen
—
Global announcement
Chat moderation
Promote chat moderator
Current moderators
Loading...
Chat banned users
Loading...
Promote to admin
Kingdoms
🤖 AI Kingdom Synopsis
Click Refresh to load AI status.
| Kingdom | Username | Race | Land | Gold | Turns | Status | Actions |
|---|
📜 Recent event log
KingdomEventSeasonWhen
Loading...
✏️ Event editor
New event
All events
Loading...
✅ Completed Features
🔥 LATEST UPDATES (APRIL 2026)
✅ System Hygiene & Efficiency — Cleaned orphan React files, converted to lean ES Modules, added SQL indexes for DMs/Bounties
✅ Real-time Direct Messages — Sockets added for instant persistent message delivery and badges
✅ Rankings Action Buttons — Direct ✉️ Message and 💰 Bounty buttons added to leaderboards
✅ Bounty System Polish — Search suggestions, automatic claims on win, and land/rank visibility
✅ Race Lore Expansion — Random flavor events during turns referencing regional history
✅ Alliance Region Conquest — Contested regions, capture progress, and global alliance bonuses
✅ Alliance Leaderboards — New rankings view for coalition total land and membership
✅ Kingdom Lore/Bios — Persisted custom descriptions shown on public profiles
✅ NARMIR REBORN — Aesthetic rebrand to "Pure. Damn. Evil."
✅ Racial Unit Bonuses (Lv 5+) — Dwarf Engines, HE Scrolls, Orc Free Training, DE Silent Kills, DW Fast Expeditions, Human Morale Aura
✅ Persistent Personalization — Saved chat nicknames and colors via `/nick` and `/color`
✅ Extended Protection — Newbie shield now lasts until Turn 400
✅ Race Starting Buildings — Custom starting kits for all 6 races
✅ Tax System Fixes — Persisted lock button and synced slider UI
Core Systems
✅ Registration, login, JWT auth with httpOnly cookie
✅ Turn system — +7 every 25 min, max 400, crash-safe boot catch-up
✅ 6 playable races with unique bonuses and penalties
✅ Kingdom status panel with resource tiles, XP bar, protection badge
✅ Three-column desktop status layout (military, research, buildings)
Economy
✅ Race-adjusted gold production — Dwarf 457, Orc 418, High Elf/Human 399, Dark Elf 342, Dire Wolf 266 GC/turn base (404 land, 42% tax)
✅ Tax slider with lock — persists server-side, loads correctly on login
✅ Markets and castles add flat gold bonuses per building
Buildings
✅ 14 building types — continuous build from engineer allocation
✅ Build queue shows turn estimate per building type
✅ Blueprints — crafted by scribes in library, stored in smithy (25/smithy cap), required for 100t+ buildings, consumed on completion, drop from dungeons (20%)
✅ Hammers — produced in smithy (1 turn each, 25/smithy cap), +5% build speed each, degrade over 20 turns of active use with durability display
✅ Scaffolding — produced in smithy (1 turn + 2,500 GC each, 10/smithy cap), required for 100t+ buildings, speed bonus for under 100t buildings (scales inversely), single use consumed on completion
✅ Smithy panel — shows stored hammers (with durability %), scaffolding, blueprints, all caps, production allocation sliders
✅ Build panel notices — 📐 Blueprint needed / 🪜 Scaffolding needed badges beside buildings missing required tools
✅ Building caps scale with kingdom level
✅ Libraries — house scribes and mages
Units & Upkeep
✅ 9 hirable unit types including scribes and engineers
✅ Housing capacity by race — Dire Wolf 700, Dwarf 650, Orc 600, Human 500, Dark Elf 450, High Elf 350 per house. Dire Wolf overcrowding penalty ×0.5, High Elf ×2.0
✅ Support unit housing — researchers in schools (100/school), engineers in smithies (50/smithy), scribes in libraries (20/library) — all with racial capacity multipliers
✅ Housed support units pay no upkeep — overflow units do. Combat troops always pay upkeep.
✅ Upkeep race multipliers — Dwarf ×0.85, Human/High Elf ×1.0, Dark Elf ×1.1, Orc ×1.15, Dire Wolf ×1.2
✅ Barracks discount on military upkeep (up to 50%)
✅ Hire panel shows school/smithy/library capacity with overflow highlighted red
Research
✅ 10 research disciplines with allocation panel
✅ Distribute evenly and Release all buttons
✅ Research bars only — no percentage numbers
✅ Silence debuff suppresses research for 3 turns
Exploration
✅ Scout (10t), Deep (25t), Dungeon (50t) expeditions
✅ Gold = forage rate (rangers × 12 × tacBonus × raceBonus × rangerLevel) × turns × rand(1.05–1.30)
✅ Race exploration bonuses (Dire Wolf ×1.4, Dark Elf ×1.25, Human ×1.1, Orc ×1.05, High Elf ×0.95, Dwarf ×0.9)
✅ Ranger level scales expedition rewards — higher level rangers find more
✅ Ranger attrition — Dire Wolf and Dark Elf lose fewer rangers
✅ Map drops — Scout 5%, Deep 15%, Dungeon 25%
✅ Blueprint drops — Dungeon 20% on success
✅ 6 ultra-rare prizes (0.5% deep, 1% dungeon)
✅ 👑 The Throne of Nazdreg Grishnak — unique, one per server, forever. Broadcasts to all kingdoms and global chat on discovery.
✅ Cancel expedition button on active expeditions
Magic & Library
✅ 16 spells across 4 tiers — scroll-based casting
✅ Mages craft scrolls in library, scribes craft maps and blueprints
✅ Map required to interact with other kingdoms
✅ Mage tower mana production
✅ Shrine morale and healing
✅ Active effects — fog, blight, silence, plague, shield displayed as badges
Combat & Covert
✅ Full 8-step combat sequence: thief sabotage → ninja pre-strike → ranger volley → power comparison → cleric healing → casualties → morale change → XP
✅ Every unit engages — fighters (front line), rangers (always ranged), mages (back line), clerics (heal casualties), engineers (crew war machines), ninjas (optional pre-strike), thieves (optional WM sabotage)
✅ Rangers always attack and defend ranged — opening volley kills 2–5% of front line before power comparison; defend from walls via outposts and guard towers
✅ War machines crewed by engineers — crew required scales by race: Dwarf 2 (→1 at Eng Lv5), Human 3, High Elf 4, Dark Elf 4, Orc 5, Dire Wolf 6
✅ War machines can be destroyed in combat — attacker loses 2–8% on defeat, defender 3–10% on loss
✅ Anti-bully penalty — ×2 size: −20% power · ×4: −40% + morale penalty · ×8+: −60% + public shame broadcast to ALL kingdoms and global chat
✅ Morale affects combat — below 50%: ×0.80 power; above 100%: up to ×1.10. Win: +5–15 morale. Loss: −5–20 morale. Floor of 20 prevents death spiral
✅ Attack panel — army composition sliders for all troop types, live power preview (attack, estimated defence, win %, land on win, bully warnings)
✅ Defence power shown as estimated — exact power only discernible from a 100% effective spy report
✅ Ninja pre-battle strike — defender's ninjas intercept at 50% effectiveness
✅ Cleric healing — reduces own-side losses up to 35% (High Elf clerics strongest)
✅ Covert ops — spy, loot, assassinate (all with thief/ninja level scaling)
✅ Newbie protection — no attacks on kingdoms under Turn 200
✅ War log — all combat written including AI actions (was missing AI war_log inserts — fixed)
✅ War log quiet day message — "It's been a quiet day. BREAK SOME $#@&!"
✅ AI anti-spam — per-target 8-minute cooldown, 35% win threshold before attacking, targets weakest available kingdom
Unit XP & Levelling
✅ All units gain XP from activity — engineers +10/building, researchers +5/advance, mages +2/turn mana +20/scroll, scribes +15/item, rangers +3/turn exploring +8/20/40 expedition type, fighters +30/10 combat, rangers +20/8 combat, thieves +12/20 spy/loot, ninjas +30 assassination
✅ Level cap: 100. Race bonus extends effective level beyond 100 in combat (Dire Wolf fighters act as Lv 180 at cap)
✅ Level scaling — +0.5% effectiveness per level, max +50% (build speed, research, mana, scrolls, expedition rewards, loot, kills, attack/defence power)
✅ Hire dilution — new recruits lower average XP: new_avg = old_pool × old_count / new_count
✅ Training fields award passive XP with equipment bonuses
✅ Racial gift unlock — one-time news event when signature unit hits Lv5, then permanent ✨ badge on training panel row. Never fires again.
✅ 🔨 Dwarf engineers Lv5+ — war machines need only 1 engineer to crew (base: 2)
✅ ✨ High Elf mages Lv5+ — scrolls produce 2 per craft instead of 1
✅ ⚔️ Orc fighters Lv5+ — passively trains 1 free fighter per 10 each turn
✅ 🕵️ Dark Elf ninjas Lv5+ — silent assassination, target receives no news event
✅ 🐺 Dire Wolf rangers Lv5+ — expeditions tick down 2 turns per turn, return early
✅ 💚 Human clerics Lv5+ — +1 morale aura per turn across kingdom
World & Profiles
✅ World map — dark fantasy SVG with 6 named racial regions, kingdom dots, compass rose, click-to-inspect any kingdom
✅ Named regions — The Iron Holds (Dwarf), The Silverwood (High Elf), The Bloodplains (Orc), The Underspire (Dark Elf), The Heartlands (Human), The Ashfang Wilds (Dire Wolf)
✅ Region passive bonuses — +5% to race signature stat stacking on top of race bonuses (construction, magic, military, stealth, economy)
✅ Region assigned on registration, backfilled for existing kingdoms on deploy
✅ Race lore modal — click race badge on status screen. Full lore paragraph, strengths/weaknesses, racial unique bonus, playstyle tip
✅ Kingdom profiles — public, no login required. Rank, level, land, population, morale, alliance, top 3 research, recent combat news
✅ Rankings — 👤 profile button added to every row
✅ World map region legend — colour swatches, bonus text, kingdom count, click to highlight
Bug Fixes
✅ Turn processing crash — applyUpdates now has a 40+ column whitelist; internal keys no longer reach the SQL
✅ _dwarf_wm_noted temp flag leak — was crashing processTurn every turn for Dwarves
✅ AI war_log inserts missing — AI attacks now write to war_log (attack, loot, assassination)
✅ AI spam fixed — per-target cooldown + power ratio check + targets weakest available
✅ Rankings not rendering — panel was gated on visibility; now always renders on data load
✅ Rank display in header showing "—" — now updates from rankings data on load
✅ Duplicate expedition/acknowledge route — merged into single clean DELETE route
✅ World map 500 error — defensive fallback query if region column not yet migrated
✅ Duplicate Chat nav item removed
✅ "Clear stuck" debug button removed from expedition log
✅ /me chat messages render as centred italic emotes (not raw /me text in a bubble)
✅ Tax slider loads saved value on login and stays in sync after each turn
✅ Land search diminishing returns — large kingdoms find less free land per ranger
✅ Food search added to instant search panel
Social
✅ Global chat with Socket.io — real-time, username-based
✅ Online users sidebar with race icons and MOD badges
✅ IRC commands — /me, /msg (whisper), /kick, /ban, /unban, /delete
✅ Alliance system — create, invite, dismiss, pledge, chat board
✅ Bounty board — players place gold bounties on rivals. Claims are automatic on win.
✅ Direct messaging — 1-on-1 private messaging system with kingdom-to-kingdom threads
✅ Rankings panel with win probability, direct action buttons, 👤 profile button, 🛡️ protection badges
✅ News panel with type filters (All / Combat / Spells / Covert / System) and icons
Defence System
✅ New 🛡️ Defence panel — three tabs: 🧱 Walls · 🗼 Guard Towers · ⛺ Outposts
✅ Walls — new building type. War machines mount on walls for +25% defensive power. No walls = buildings can be damaged on successful attack.
✅ Wall racial modifiers — Dwarf ×1.35, High Elf ×1.10, Human ×1.00, Dark Elf ×0.90, Orc ×0.85, Dire Wolf ×0.80
✅ Wall upgrades — Reinforced Walls +25% strength −10% land lost (10,000 GC), Battlements towers +20% (30,000 GC), Fortress Walls WM +50% damage (100,000 GC)
✅ Siege damage — successful attacker destroys walls (Fortress Walls: −3%, Reinforced: −6%, base: −10%). No walls = random building takes 5% damage per successful attack
✅ Guard towers — thieves on watch (10/tower cap). Detection racial modifiers: Dark Elf ×1.40, High Elf ×1.10, Human ×1.00, Orc ×0.80, Dire Wolf ×0.70
✅ Guard tower upgrades — Arrow Slits +20% ranged defence (5,000 GC), Watchtower detects attacks 1 turn early (20,000 GC), Signal Tower warns alliance members (50,000 GC)
✅ Signal Tower — fires attack warning in defender's news AND alliance chat board
✅ Outposts — rangers on patrol (20/outpost cap). Patrol racial modifiers: Dire Wolf ×1.40, Dark Elf ×1.30, Human ×1.00, High Elf ×0.95, Orc ×0.90, Dwarf ×0.80
✅ Outpost upgrades — Ranger Station +25% patrol (5,000 GC), Forward Camp detects incoming expeditions (20,000 GC), Field HQ +10% expedition gold (60,000 GC)
✅ Castle Citadel — unlocked at 50 walls + 20 guard towers + 20 outposts + 1 castle. +15% permanent defence bonus, war machines deal ×2 damage on walls. News event fires once.
✅ Citadel progress tracker — four tiles showing progress toward each threshold with colour coding
✅ Defence rating on status panel — 🔴 Undefended / 🟠 Lightly Defended / 🟡 Defended / 🟢 Fortified / 🏰 Citadel
✅ Wall and outpost power integrated into resolveMilitaryAttack defence calculation
✅ Citadel ×1.15 defence multiplier applied in combat
✅ Walls added to build panel with engineer allocation and Max button
Economy System
✅ New 💰 Economy panel — three tabs: 🌾 Farms · 🏪 Markets · 🍺 Tavern
✅ Farms — population automatically works farms (race-specific workers per farm: Human 10, Dwarf 8, High Elf 12, Orc 15, Dark Elf 10, Dire Wolf 12). Unworked farms produce nothing.
✅ Farm yield race modifiers — High Elf ×1.15, Human ×1.00, Dark Elf ×0.95, Dwarf ×0.90, Orc ×0.85, Dire Wolf ×0.80
✅ Food consumption race modifiers — High Elf ×0.80 (lightest), Dwarf ×0.85, Dark Elf ×0.95, Human ×1.00, Orc ×1.35, Dire Wolf ×1.40 (heaviest)
✅ Farm upgrades (instant gold) — Irrigated Farm +30% yield (500 GC), Granary buffers up to 15 turns surplus (2,000 GC), Plantation +60% yield requires Irrigated (10,000 GC)
✅ Food shortage consequences — 2 turns grace → morale −5/turn → population −500/turn → fighter desertion −2%/turn
✅ Food surplus streak — 5+ turns surplus gives +2 morale/turn bonus
✅ Markets — 5 free population per market to operate. Trade routes: 1 per map held (up to market count), each adds passive gold income
✅ Market income race modifiers — Dwarf ×1.25, High Elf ×1.10, Dark Elf ×1.05, Human ×1.00, Orc ×0.85, Dire Wolf ×0.75
✅ Market upgrades — Trading Post unlocks player trading (5,000 GC), Bazaar +50% income (50,000 GC), Black Market −10% all prices Dark Elf only (15,000 GC)
✅ goldPerTurn now includes market income from new system (trade routes + worked markets × race modifier)
✅ Commodity market — base prices with race discount display (Dwarf −15% weapons/armor, High Elf −20% scrolls, Dark Elf −10% all, Orc +20% food, Dire Wolf −20% maps)
✅ Player-to-player trading — send offers specifying item+qty, receiver accepts/declines from economy panel. Both sides validated before exchange. Requires Trading Post.
✅ Trade offers table — persists in DB, expires after 1 hour, sent/received lists in panel
✅ Taverns — passive entertainment research bonus each turn. Inn and Guild Hall upgrades.
✅ Mercenary board — four tiers: Rabble Lv 5–10 (50 GC/10 turns), Sellsword Lv 15–25 (150 GC/20 turns), Veteran Lv 30–45 (400 GC/30 turns), Elite Lv 50–65 (1,000 GC/40 turns)
✅ Mercenaries — fixed level, never advance, don't use weapon/armor stockpile, count toward anti-bully ratios, leave on contract expiry or non-payment
✅ Mercenary upkeep collected automatically each turn — non-payment causes immediate departure
✅ New DB tables: trade_offers, mercenaries
✅ New DB columns: farm_upgrades, market_upgrades, tavern_upgrades, food_shortage_turns, food_surplus_turns, mercenaries
Seasons & Daily Events
✅ Season system — 13-day real-time cycle: Spring (3d) → Summer (5d) → Fall (2d) → Winter (3d). Stored in server_state, advances automatically on regen tick.
✅ Season badge on status panel — shows icon + name + days remaining (e.g. 🌸 Spring · 2.3d left)
✅ Season farm yield multipliers — Spring ×1.10, Summer ×1.20, Fall ×0.90, Winter ×0.70
✅ Daily random events — one event per kingdom per real day, fired during regen. Season-appropriate events selected, race-specific events mixed in at 10% chance.
✅ 21 default events seeded — spring bloom, heat wave, blizzard, harvest festival, travelling merchants, winter plague, and more. Race-specific: ice trade (dwarf), great hunt (dire wolf), elven bloom (high elf), shadow markets (dark elf), orc rampage.
✅ Active event effects tick down each turn (farm_yield, military, mana, market multipliers persist N turns then expire).
✅ Admin events panel — event log with kingdom/season filter, full event editor (create/edit/delete/toggle active). Effect type dropdown: morale, gold, food, population, farm_yield, military, mana, market.
Location System
✅ Kingdom locations must be discovered before interaction. Rankings shows all kingdoms — unfound show 🔍 badge, all attack/spy/cast buttons disabled until mapped.
✅ Discovery — ranger scout expeditions have 10–15% base chance of finding a kingdom. Race modifier: Dire Wolf ×1.40, Dark Elf ×1.30, Human ×1.00, Dwarf ×0.80. Ranger count adds up to +5%.
✅ Mapping — 10 scribes work for 5 turns to create a permanent location map (consumes 1 blank map). Multiple kingdoms can be mapped simultaneously if scribes available.
✅ Auto-store — attacking a kingdom or being caught on covert ops instantly stores their location as mapped.
✅ Map theft — new covert action: steal a location map from another kingdom. Success ~20–50% based on thieves. Target receives news event. Stolen kingdom becomes un-interactable until re-found.
✅ New DB columns: discovered_kingdoms (JSON per kingdom), location_maps_wip (JSON array of in-progress mappings)
Smithy Overhaul
✅ Hammers and scaffolding now purchased for gold — no more engineer allocation sliders. Hammers: 25 GC each. Scaffolding: 2,500 GC each.
✅ Input box defaults to max affordable quantity. Max button fills to max. Requires at least 1 smithy.
✅ Degradation mechanic preserved — hammers and scaffolding still wear out each turn.
UI & Bug Fixes
✅ Spells — when spellbook below 100: "🔮 Your mages need direction. STUDY!" instead of "undefined". Spell labels/descriptions guarded against undefined entries.
✅ Upgrade purchase — after buying an upgrade the button shows ✅ Purchased and disables. Next upgrade's Buy button only appears after manual Refresh click.
✅ Tavern count — bld_taverns added to bldMap in syncUI. Was always showing 0.
✅ Defence panel — kd-top (kingdom header + resource strip) now hidden on Defence panel, matching the other panels.
✅ Alliance panel — mobile layout fixed. Single column on mobile, two columns on desktop.
✅ Turns — increased to 400/day in 25-minute increments (+7 turns per regen cycle).
Admin
✅ Three-tab layout — ⚙️ Manage · 🏰 Kingdoms · 📋 Changelog
✅ Full kingdom edit modal — live data from server
✅ Promote/demote chat moderators with live moderator list
✅ Chat ban list with unban button and ban reason display
✅ AI kingdoms with race-aware economic and military behaviour
✅ Global announcement broadcast to all players
✅ Promote to admin
✅ Admin notes textarea — saves to localStorage
✅ Changelog and wishlist panel (this panel)
🔮 Wishlist — Future Additions
Ideas and planned features — edit this list to add your own.
Gameplay
⬜ Spell casting target history — remember last target per spell
✅ Bounty board — COMPLETED
⬜ Diplomacy — non-aggression pacts, trade agreements between kingdoms
⬜ Seasons — periodic world events that affect all kingdoms (drought, plague, magic surge)
⬜ Prestige / reset system — kingdoms that reach max level can prestige for a permanent bonus
⬜ Named hero units — single high-level units with unique abilities
Combat
⬜ Alliance war — alliances can declare war on each other
⬜ Siege mechanics — castle walls reduce land capture percentage
⬜ Battle replay — animated step-by-step battle report
Economy
⬜ Variable commodity prices — server-wide supply and demand shifts prices ±30% hourly
⬜ Trade route raiding — Orc kingdoms can raid other kingdoms' trade routes for gold
⬜ Diplomacy — non-aggression pacts, formal trade agreements, tribute
⬜ Prestige economy — prestige kingdoms get permanent market bonuses
Social
✅ Bounty board — COMPLETED
✅ Direct messaging — COMPLETED
World
⬜ More races — Gnome (inventor), Vampire (undead mage), Troll (regenerating fighter)
Polish
⬜ iOS layout testing and fixes
⬜ Sound effects — combat, level up, expedition return
⬜ Dark/light theme toggle
⬜ Email notifications — optional alerts for attacks, expedition return
⬜ Tutorial / new player guide
⬜ Achievements system
💡 Player Wishlist (Live)
Loading suggestions...
📝 Admin Notes
Ban player
Player: