Update roadmap to split furniture and crafting into phase 18

This commit is contained in:
Jared Miller 2026-02-14 16:48:42 -05:00
parent 6229c87945
commit 32c570b777
Signed by: shmup
GPG key ID: 22B5C6D66A38B06C
2 changed files with 15 additions and 5 deletions

View file

@ -299,9 +299,15 @@ The engine roadmap's later phases, renumbered:
- **Phase 15: NPC evolution** -- dialogue trees, behavior, schedules. - **Phase 15: NPC evolution** -- dialogue trees, behavior, schedules.
Grimm's Library librarians may pull some dialogue work into phase 14. Grimm's Library librarians may pull some dialogue work into phase 14.
- **Phase 16: World systems** -- time of day, weather, seasons - **Phase 16: World systems** -- time of day, weather, seasons
- **Phase 17: Player creation + housing** -- player-owned zones, crafting - **Phase 17: Player creation + housing** -- character creation flow
- **Phase 18: The DSL** -- in-world scripting language (description prompt for new players), personal home zones with
- **Phase 19: Horizons** -- web client, compression, inter-MUD, AI NPCs persistence (TOML in ``data/player_zones/``), home command for
teleportation to/from personal zone
- **Phase 18: Housing expansion + crafting** -- furniture placement,
home zone customization (terrain editing, descriptions), crafting
system, decorative objects
- **Phase 19: The DSL** -- in-world scripting language
- **Phase 20: Horizons** -- web client, compression, inter-MUD, AI NPCs
Key references Key references

View file

@ -20,6 +20,7 @@ import mudlib.commands.edit
import mudlib.commands.examine import mudlib.commands.examine
import mudlib.commands.fly import mudlib.commands.fly
import mudlib.commands.help import mudlib.commands.help
import mudlib.commands.home
import mudlib.commands.look import mudlib.commands.look
import mudlib.commands.movement import mudlib.commands.movement
import mudlib.commands.play import mudlib.commands.play
@ -37,9 +38,11 @@ from mudlib.combat.commands import register_combat_commands
from mudlib.combat.engine import process_combat from mudlib.combat.engine import process_combat
from mudlib.content import load_commands from mudlib.content import load_commands
from mudlib.corpse import process_decomposing from mudlib.corpse import process_decomposing
from mudlib.creation import character_creation
from mudlib.dialogue import load_all_dialogues from mudlib.dialogue import load_all_dialogues
from mudlib.effects import clear_expired from mudlib.effects import clear_expired
from mudlib.gametime import get_game_hour, init_game_time from mudlib.gametime import get_game_hour, init_game_time
from mudlib.housing import init_housing, load_home_zone
from mudlib.gmcp import ( from mudlib.gmcp import (
send_char_status, send_char_status,
send_char_vitals, send_char_vitals,
@ -64,6 +67,7 @@ from mudlib.store import (
load_player_data, load_player_data,
load_player_stats, load_player_stats,
save_player, save_player,
save_player_description,
update_last_login, update_last_login,
) )
from mudlib.thing import Thing from mudlib.thing import Thing
@ -198,7 +202,7 @@ async def handle_login(
if authenticate(name, password.strip()): if authenticate(name, password.strip()):
# Success - load player data # Success - load player data
player_data = load_player_data(name) player_data = load_player_data(name)
return {"success": True, "player_data": player_data} return {"success": True, "player_data": player_data, "is_new": False}
remaining = max_attempts - attempt - 1 remaining = max_attempts - attempt - 1
if remaining > 0: if remaining > 0:
@ -236,7 +240,7 @@ async def handle_login(
await write_func("Account created successfully!\r\n") await write_func("Account created successfully!\r\n")
# Return default data for new account # Return default data for new account
player_data = load_player_data(name) player_data = load_player_data(name)
return {"success": True, "player_data": player_data} return {"success": True, "player_data": player_data, "is_new": True}
await write_func("Failed to create account.\r\n") await write_func("Failed to create account.\r\n")
return {"success": False, "player_data": None} return {"success": False, "player_data": None}