Commit graph

346 commits

Author SHA1 Message Date
3fe51f2552
Add login and registration flow with server integration
Adds login/registration prompts on connection, database initialization on
startup, and periodic auto-save every 5 minutes in the game loop. Player
state is now tied to authenticated accounts.
2026-02-07 21:42:12 -05:00
485302fab3
Add store module with SQLite account persistence
Implements account management with password hashing (pbkdf2_hmac with SHA256)
and constant-time comparison. Includes player state serialization for position
and inventory persistence across sessions.
2026-02-07 21:42:07 -05:00
f6686fe52c
Add tintin combat aliases
Adds single-key aliases for combat moves: pr/pl for punches, o for
sweep, r for roundhouse, f/v for parries, dr/dl for dodges.
2026-02-07 21:16:28 -05:00
dbb976be24
Add data-driven combat system with TOML move definitions
Combat moves defined as TOML content files in content/combat/,
not engine code. State machine (IDLE > TELEGRAPH > WINDOW > RESOLVE)
processes timing-based exchanges. Counter relationships, stamina
costs, damage formulas all tunable from data files.

Moves: punch right/left, roundhouse, sweep, dodge right/left,
parry high/low, duck, jump. Combat ends on knockout (PL <= 0)
or exhaustion (stamina <= 0).
2026-02-07 21:16:12 -05:00
6173a165c2
Add combat system design documentation
Captures the combat-as-content architecture: moves are TOML files,
engine is a state machine (IDLE→TELEGRAPH→WINDOW→RESOLVE). Documents
move set, counter relationships, damage formulas, and how combat
initiation works without a dedicated fight command.
2026-02-07 20:47:41 -05:00
910597e92d
Broaden type hints to Entity where applicable 2026-02-07 20:32:15 -05:00
028dcb51b8
Add Mob class extending Entity 2026-02-07 20:31:26 -05:00
3cba2cdb7a
Use entity.send() for nearby message broadcasting 2026-02-07 20:31:16 -05:00
fea563f158
Extract Entity base class from Player 2026-02-07 20:30:59 -05:00
d159a88ca4
Add TOML content loader for declarative command definitions
Scan content/commands/ for .toml files at startup and register them
as commands alongside Python-defined ones. Two flavors: handler-based
(points to a Python callable via module:function) and message-based
(auto-generates a handler from inline text). Includes example MOTD
command, type validation, error logging, and full test coverage.
2026-02-07 20:27:29 -05:00
8f5956df3d
Add research on various mu* dsls 2026-02-07 19:31:38 -05:00
8240265c71
Exclude worktrees in pyproject 2026-02-07 16:33:03 -05:00
600be4ed95
Add note on combat tick health 2026-02-07 16:31:16 -05:00
8fbee01c11
Use contextlib.suppress for cleaner exception handling 2026-02-07 16:17:41 -05:00
075a6ce303
Add game loop skeleton for periodic tick processing 2026-02-07 16:17:20 -05:00
d220835f7d
Add mode stack to Player and mode check in dispatch 2026-02-07 16:17:01 -05:00
dcc8b961bb
Add CommandDefinition and migrate command registry 2026-02-07 16:15:21 -05:00
bea2a73c98
Read world config from TOML instead of hardcoding 2026-02-07 16:14:03 -05:00
0f05302b6e
Add an architectural plan 2026-02-07 15:54:12 -05:00
2c75d26d68
Add a simple README 2026-02-07 15:42:07 -05:00
e059bac633
Add research on graphicmud 2026-02-07 15:39:36 -05:00
1223eebeb1
Add mudlib documents 2026-02-07 15:36:52 -05:00
9948a36f5f
Add world cache to speedup startup 2026-02-07 15:00:07 -05:00
a10f3d4e70
Stagger cloud trail dissolution so tiles fade one at a time
Each cloud in the trail gets a slightly longer TTL than the one
before it (0.15s stagger). The origin cloud dissolves first, then
each subsequent tile follows. Two consecutive flights produce a
trail where the oldest clouds are already gone.
2026-02-07 14:48:42 -05:00
93ad4523e2
Make flying a toggle state
fly with no args toggles flying on/off. Movement commands (fly east,
etc) only work while airborne. "You aren't flying." if you try to
move without toggling on first. Player.flying field tracks the state.
2026-02-07 14:48:42 -05:00
9844749edd
Add fly command with cloud trail effects
fly <direction> moves the player 5 tiles, ignoring terrain. Leaves
a trail of bright white ~ clouds that fade after 2 seconds. Effects
system supports arbitrary timed visual overlays on the viewport.
TinTin aliases: fn/fs/fe/fw/fne/fnw/fse/fsw.
2026-02-07 14:48:42 -05:00
29983776f9
Update agent config with new notes 2026-02-07 14:48:24 -05:00
8934397b1e
Make world wrap seamlessly in both axes
Tileable Perlin noise: each octave wraps its integer grid coordinates
with modulo at the octave's frequency, so gradients at opposite edges
match and the noise field is continuous across the boundary.

Coarse elevation grid interpolation wraps instead of padding boundary
cells. Rivers can flow across world edges. All coordinate access
(get_tile, is_passable, get_viewport) wraps via modulo. Movement,
spawn search, nearby-player detection, and viewport relative positions
all handle the toroidal topology.
2026-02-07 13:50:06 -05:00
9cd9c6f790
Add worktrees to gitignore 2026-02-07 13:46:22 -05:00
9cdc1c48e4
Add a map renderer 2026-02-07 13:38:32 -05:00
25bb565091
Move notes to docs/how, docs/why, docs/lessons
how/  - how things work (terrain generation, command system)
why/  - design philosophy (telnet-first, text worlds)
lessons/ - things we learned the hard way (charset vs mtts)

Removes notes/ — DAYDREAMING.txt became DREAMBOOK.md, charset-vs-mtts
expanded into docs/lessons/ with the connect_maxwait fix documented.
2026-02-07 13:31:02 -05:00
0d0c142993
Add seed-based terrain world with movement and viewport
1000x1000 tile world generated deterministically from a seed using
layered Perlin noise. Terrain derived from elevation: mountains,
forests, grasslands, sand, water, with rivers traced downhill from
peaks. ANSI-colored viewport centered on player.

Command system with registry/dispatch, 8-direction movement (n/s/e/w
+ diagonals), look/l, quit/q. Players see arrival/departure messages.

Set connect_maxwait=0.5 on telnetlib3 to avoid the 4s CHARSET
negotiation timeout — MUD clients reject CHARSET immediately via MTTS.
2026-02-07 13:27:44 -05:00
a1d139ea87 Update telnetlib3 2026-02-07 12:21:59 -05:00
a6b628bb14 Add debug command 2026-02-07 12:21:39 -05:00
7f47124b02 Update agent config 2026-02-07 12:21:33 -05:00
3ebff56017 Use telnetlib3 readline correctly 2026-02-07 12:20:00 -05:00
a81888d0b8 Add a dreambook 2026-02-07 12:19:49 -05:00
2d210dfaf5 Add notes on charset vs mtts 2026-02-07 10:46:38 -05:00
6b97d6c545 Add debug logs to view negotiations 2026-02-07 10:32:11 -05:00
04230eb152 Use async readline with local telnetlib3 2026-02-07 10:23:56 -05:00
a83248b387 Add bare echoing telnet server 2026-02-07 10:05:34 -05:00
27ec0a8a22 Ignore pycache 2026-02-07 09:53:18 -05:00
482d0e5fa6 Add an agent config 2026-02-07 09:48:36 -05:00
c9ffee997e Ignore repos 2026-02-07 09:45:48 -05:00
541415e011 Add first generation 2026-02-07 09:45:48 -05:00
03330d0ecd Update daydream 2026-02-07 09:45:48 -05:00