- Guild data model: world/guilds/*.toml defines guilds with stat growth,
resource type (mana/endurance), spell lists, level caps, and race
restrictions. Spells are separate files in world/spells/*.toml.
- Player resources: mana and endurance pools added to PlayerStats with
DB migration. Passive regen for mana/endurance when out of combat.
- Guild commands: guild list/info/join/leave with multi-guild support.
spells/skills command shows available spells per guild level.
- Spell casting: cast command works in and out of combat. Offensive
spells queue as CombatAction::Cast and resolve on tick. Heal/utility
spells resolve immediately out of combat. Mana/endurance costs,
cooldowns, and damage types all enforced.
- Chargen integration: classes reference a guild via TOML field. On
character creation, player auto-joins the seeded guild at level 1.
Class selection shows "→ joins <Guild>" hint.
- Look command: now accepts optional target argument to inspect NPCs
(stats/attitude), objects, exits, players, or inventory items.
- 4 guilds (warriors/rogues/mages/clerics) and 16 spells created for
the existing class archetypes.
Made-with: Cursor
- Expand race TOML schema: 7 stats, body shape (size/weight/custom slots),
natural armor and attacks with damage types, resistances, traits/disadvantages,
regen multipliers, vision types, XP rate, guild compatibility
- Replace equipped_weapon/equipped_armor with slot-based HashMap<String, Object>
- Each race defines available equipment slots; default humanoid slots as fallback
- Combat uses natural weapons/armor from race when no gear equipped
- DB migration from old weapon/armor columns to equipped_json
- Add Dragon race: huge body, custom slots (forelegs/wings/tail), fire breath,
natural armor 8, fire immune, slow XP rate for balance
- Update all existing races with expanded fields (traits, resistances, vision, regen)
- Objects gain optional slot field; kind=weapon/armor still works as fallback
- Update chargen to display race traits, size, natural attacks, vision
- Update stats display to show equipment and natural bonuses separately
- Update TESTING.md and AGENTS.md with race/slot system documentation
Made-with: Cursor
Replace immediate combat with a 3-second tick engine that resolves
actions, NPC AI, status effects, respawns, and passive regeneration.
Players queue combat actions (attack/defend/flee/use) that resolve on
the next tick. Any NPC can now be attacked — non-hostile targets incur
attitude penalties instead of being blocked. Status effects persist in
the database and continue ticking while players are offline.
Made-with: Cursor
Add test cases for: tick engine lifecycle, tick-based combat resolution,
NPC AI auto-engage, defend command, queued flee/use, status effects
(poison, regen, expiration), passive HP regen, combat RNG variance,
and movement lockout during combat. Update smoke test with tick-timing test.
Made-with: Cursor
- Add is_admin flag to player DB schema with migration for existing databases
- Add server_settings table for key-value config (registration_open, etc.)
- Add 10 in-game admin commands: promote, demote, kick, teleport, registration,
announce, heal, info, setattitude, list — all gated behind admin flag
- Registration gate: new players rejected when registration_open=false,
existing players can still reconnect
- Add mudtool binary with CLI mode (players/settings/attitudes CRUD) and
interactive ratatui TUI with tabbed interface for database management
- Restructure to lib.rs + main.rs so mudtool shares DB code with server
- Add TESTING.md with comprehensive pre-commit checklist and smoke test script
- Stats and who commands show [ADMIN] badge; help shows admin section for admins
Made-with: Cursor