go.mod, term/ and cmd/ imports, the ARCHITECTURE.md module references, and the in-game version string. User request; the repo already lives at this remote.
121 lines
6.0 KiB
Markdown
121 lines
6.0 KiB
Markdown
# Workflow
|
|
|
|
* branch (from `main`)
|
|
* do the work in Next Step
|
|
* move Next Step to the top of Completed Steps
|
|
* move the top item of Future Steps into Next Step
|
|
* commit (`TODO.md` changes in the same commit as the work)
|
|
* merge to `main` if the branch is not protected, otherwise open a PR
|
|
* push
|
|
|
|
# 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
|
|
|
|
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).
|
|
|
|
# Completed Steps
|
|
|
|
- 2026-07-06 Module base path updated to git.eeqj.de/sneak/rgoue
|
|
(go.mod, term/ and cmd/ imports, ARCHITECTURE.md, version string).
|
|
- 2026-07-06 Refactor step 3 (refactor/object-fields): Object.Arm split
|
|
into ArmorClass/Charges/GoldValue/Bonus (rings); Stats.Arm →
|
|
ArmorClass; damage strings parsed once into DiceSpec at table
|
|
definition (ParseDice keeps C roll_em parse semantics, incl. "%%%x0"
|
|
and "000x0" edge cases, regression-tested); save format 5.4.4-go3.
|
|
- 2026-07-06 Refactor step 2 (refactor/typed-kinds, b940cfc):
|
|
ObjectKind separates item category from map glyph (Object.Type byte
|
|
→ Kind ObjectKind with Glyph()); PotionKind/ScrollKind/RingKind/
|
|
WandKind/WeaponKind/ArmorKind/TrapKind typed iota enums with
|
|
Stringer; typed accessors on Object; getItem/inventory/whatis
|
|
filters take ObjectKind (KindCallable/KindRingOrStick replace
|
|
CALLABLE/R_OR_S); save format bumped to 5.4.4-go2. Suite green.
|
|
- 2026-07-06 Refactor step 1 (refactor/descriptive-constants): renamed
|
|
all flag bits, trap types, item subtype constants, and Max* counts to
|
|
descriptive names (IsHuh→Confused, SeeMonst→SenseMonsters,
|
|
WsHasteM→WandHasteMonster, MaxSticks→NumWandTypes, ...);
|
|
Level.NTraps→TrapCount; C names kept as comment breadcrumbs. Pure
|
|
rename, suite green.
|
|
- 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 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.
|
|
2. 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.
|
|
3. 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.
|
|
4. 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.
|
|
5. 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.
|
|
6. Docs refresh: update ARCHITECTURE.md Part 2 and README.md for the
|
|
post-refactor names; add the C name → Go name rename table.
|
|
7. 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.
|
|
8. Verify the seed-compatibility claim against the C reference on
|
|
c-master: same seed, same dungeon, same item tables, for several
|
|
seeds.
|
|
9. Broaden unit test coverage where playtesting finds thin spots
|
|
(rings, sticks, wizard commands).
|
|
10. Tag a release once a full game (Amulet retrieval and score entry)
|
|
completes without defects.
|
|
11. 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.
|
|
12. Note: this repo is exempt from the standard policy scaffold. Do not
|
|
add Makefile, Dockerfile, or REPO_POLICIES.md.
|