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.py batch converter script streamline internal
  • Deleted all .txt duplicate screen files (keeping only .ans versions) decouple internal
  • Removed .256.ans intermediate 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.py with letter-based menu matching undergnd.txt screen decouple internal
  • Added core/rules/bounty.py with 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.txt to 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.LST configuration 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.active guards after read_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_rounds at 1000 to prevent server hangs decouple internal
  • Guarded dispatch error messages with session.active check decouple internal

Bugfix: Critical Game Mechanics Fixes

  • Fed Space protection now only blocks PvP on protected players (was blocking all combat types) decouple internal
  • Offline limpet damage fixed: uses correct field player.limpets instead of player.limpets_attached remediate internal

Bugfix: Port Class Export

  • Use computed port_class with fallback logic instead of unreliable raw values (raw values in GameB were 76-298 instead of 1-9) harden internal
  • Moved export script to scripts/universe/export_universe_json.py decouple internal

Test: Screen Display Tests