# Status pre-1.0 The port on main is complete and faithful (function-by-function from Rogue 5.4.4 C; reference sources on c-master/modern-rogue). Current phase: refactor from a transliterated port into idiomatic Go — one feature branch per step below, descriptive naming, real types, house style per ~/dev/prompts/prompts/CODE_STYLEGUIDE_GO.md. Refactor ground rules: - Behavior must not change unless a step says so. The full test suite (scripted sessions, generation invariants, C-compatible RNG goldens) gates every step; 80x24 seed-compatible gameplay stays intact. - Renames keep the C lineage greppable: doc comments retain their "(file.c func_name)" breadcrumbs, and the docs refresh step adds a C-name → Go-name table to ARCHITECTURE.md. # Next Step Refactor step 1 (branch refactor/descriptive-constants): rename constants to descriptive, less C-like names. Creature/object/room/place flag bits (IsHuh→Confused, IsHalu→Hallucinating, CanHuh→CanConfuse, SeeMonst→SenseMonsters, ObjIsFound→WasFound, IsCanc→Cancelled, ...), trap types (TMyst→TrapMystery), item subtype constants (PLSD→PotionLSD, SIDRorS→ScrollIdentifyRingOrStick, RAddHit→RingDexterity, WsHasteM→WandHasteMonster, TwoSword→WeaponTwoHandedSword, ...), Max* count constants → Num*Types, and the Level.NTraps field → TrapCount. Pure rename; no behavior change; tests unchanged. # Completed Steps - 2026-07-06 Made the rgoue branch Go-only: removed C sources and the autoconf/VS build system (they remain on master and modern-rogue), ported the last wizard command (item-probability listing), rewrote README.md for the Go port (c0b533e) - 2026-07-06 Ported the command loop, save/restore, the tcell terminal layer, and the playable binary at cmd/rogue (41fc104) - 2026-07-06 Ported item effects: potions, scrolls, options, call_it (cdf9bf7) - 2026-07-06 Ported combat, the chase driver, traps, zapping, death and scores (3c5add8) - 2026-07-06 Ported dungeon generation, base items, the pack, and monster creation (a69ef7d) - 2026-07-06 Ported the foundation: types, seed-compatible RNG, item tables, daemon scheduler (7fa2048) - 2026-07-06 Wrote ARCHITECTURE.md Parts 1 and 2: complete map of the C program and the Go port design (91eeee0, 45dba95) - Fork base: Davidslv/rogue C 5.4.4 with modernization fixes (C23 prototypes, ncurses compat), preserved on master/modern-rogue # Future Steps 1. Refactor step 2: typed kind enums — PotionKind, ScrollKind, RingKind, WandKind, WeaponKind, ArmorKind, TrapKind as iota enums with fmt.Stringer; Object.Which and the ObjInfo tables move to the typed kinds; the object category glyph bytes ('!', '?', ...) become an ObjectKind with a Glyph() method so item category and map character stop sharing one byte namespace. 2. Refactor step 3: un-overload Object fields — split Object.Arm into ArmorClass/Charges/GoldValue; parse damage dice ("1x4/1x2") once into a DiceSpec type at table definition instead of per swing; save-format update with round-trip test migration. 3. Adopt the house Go linting standards: copy .golangci.yml from the prompts repo and bring game/, term/, and cmd/ lint-clean (the port is greenfield code, so no exemptions apply). 4. Refactor step 4: method renames, movement/world subsystem (doMove→moveHero, beTrapped→springTrap, rndmove→randomStep, doRooms/doPassages/doMaze→digRooms/digPassages/digMaze, chgStr→changeStrength, ...); remove the goto/label flows in doMove, dispatch, and saveGame in favor of loops and helpers. 5. Refactor step 5: method renames, items/combat/UI subsystems (invName→inventoryName, rollEm→rollAttacks, doPot→applyPotionFuse, getItem→promptPackItem returning (obj, ok), getDir→promptDirection); int status codes (attack returning -1) become named results. Two or three commits, one subsystem each. 6. Refactor step 6: extract types from the god object — MessageLine owns the msg/addmsg/endmsg machinery; pack/inventory operations move onto *Player; monster/object list management and map queries consolidate onto *Level; RogueGame keeps turn orchestration and cross-system effects only. 7. Refactor step 7: effects dispatch — the giant quaff/readScroll/doZap switches become per-kind handler tables of small named methods, keeping effect order and RNG call sequence identical. 8. Refactor step 8: constructor and style pass per the house styleguide — game.New(game.Params{...}) replacing NewGame(Config); replace the gameEnd panic unwind with error-based turn results where feasible; 77-column wrap sweep. 9. Docs refresh: update ARCHITECTURE.md Part 2 and README.md for the post-refactor names; add the C name → Go name rename table. 10. Playtest hardening pass: play several full games with the tcell binary and extend run_test.go to script a deeper multi-level playthrough (descend past level 5, use potions, scrolls, zapping, save/restore). Fix any panics, message mismatches, or divergences from the C behavior that this uncovers, with regression tests. 11. Verify the seed-compatibility claim against the C reference on c-master: same seed, same dungeon, same item tables, for several seeds. 12. Broaden unit test coverage where playtesting finds thin spots (rings, sticks, wizard commands). 13. Tag a release once a full game (Amulet retrieval and score entry) completes without defects. 14. Full-terminal-size support (deferred by explicit decision 2026-07-06): per-game dungeon dimensions instead of the 80x24 constants; open design questions are resize policy, gameplay tuning at larger sizes, and a --classic 80x24 mode. 15. Note: this repo is exempt from the standard policy scaffold. Do not add Makefile, Dockerfile, or REPO_POLICIES.md.