tw2002
2026-02-11
TW2002
528 files · 7,241+ · 49,372-
Feature: TrueColor ANSI Conversion
- Batch-converted all ANSI screen art files to use TrueColor escape sequences for richer gradients streamline internal
- Created
convert_ansi_truecolor.pybatch converter script streamline internal - Deleted all
.txtduplicate screen files (keeping only.ansversions) decouple internal - Removed
.256.ansintermediate files (twhello.256.ans,twhello2.256.ans,twhello3.256.ans) decouple internal - Fixed foreground-only conversion (background colors 40-47 pass through as standard 16-color to prevent patchy dark bands) remediate internal
- 66+ ANSI screen files updated across ships, ports, planets, citadels, aliens, events, locations, welcome screens decouple internal
Feature: Bounty System and Persistent Mail
- Implemented bounty/contract system in Underground (place, view, collect bounties) interface internal
- Rewrote
underground.pywith letter-based menu matchingundergnd.txtscreen decouple internal - Added
core/rules/bounty.pywith validation rules instantiate internal - Integrated bounty collection with PvP combat (auto-award on kill) decouple internal
- Added persistent mail: messages saved to DO SQLite individually instantiate internal
- Enhanced DB schema: bounties table (poster_name, target_name, timestamps), messages table (recipient, read_at) interface internal
- Added DB migrations for new columns on existing databases instantiate internal
- Wired
mainwarn.txtto show every 10 turns when below 50 turns remaining decouple behavioral
Feature: Telnet Server Improvements and Sector Visit Bitmap
- Fixed graceful shutdown with SIGINT handler before
asyncio.run()remediate internal - Added DO SGA + DONT LINEMODE to telnet handshake for char-at-a-time mode instantiate internal
- Consume ANSI escape sequences (arrow keys, function keys) in session input decouple internal
- Fixed backspace in sector number shortcut remediate internal
- Track visited sectors in sector shortcut movement path decouple internal
- Wired sector visit bitmap at player record offset 0xC8 (250 bytes, LSB-first) decouple internal
- Parse/encode visited_sectors as comma-separated string with round-trip verification decouple internal
- Wired 25+ ANSI screens to game commands (underground, death, transwarp, shipyard, police, cineplex, citadel upgrades, planet actions) decouple internal
Feature: Gold Ship Format and GAMESTAT.LST Parser
parse_ships()auto-detects Gold/v3.34b format (EXTERN header + 153-byte records) decouple errata- Returns empty list instead of 350 garbage records when Gold format detected decouple errata
- New parser for INI-style
GAMESTAT.LSTconfiguration file instantiate errata - GameState validates parsed data counts against GAMESTAT.LST on load decouple internal
- Fixed planet off-by-one (record 0 is EXTERN header, excluded from count) remediate internal
- All counts now match GAMESTAT.LST for GameB: Sectors=1000, Users=200, Ships=800, Ports=400, Planets=200 decouple internal
Bugfix: Session Disconnect Guards and Bounds Fixes
- Added
session.activeguards afterread_line()calls across 28 command files to prevent crashes on mid-prompt disconnects instantiate behavioral - Fixed off-by-one sector bounds:
>= len(sectors)changed to> len(sectors)in 7 locations remediate internal - Capped combat
max_roundsat 1000 to prevent server hangs decouple internal - Guarded dispatch error messages with
session.activecheck decouple internal
Bugfix: Critical Game Mechanics Fixes
Bugfix: Port Class Export
Test: Screen Display Tests
- Added 111 screen display tests (wiring, load, fallback, bounty rules) qualify behavioral
- All 332 existing tests pass qualify internal