aboutsummaryrefslogtreecommitdiff
path: root/TODO.md
blob: b7309dd292ff789e6a12d6f5c5b613509fc7e25f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# TODO

Upcoming work for The House of Icarus. See `AGENTS.md` for architecture and reference.
Detailed implementation plans for each skill/system are in `skill_plans/`.

---

## Completed

- [x] Cooking — fire/range, raw fish → cooked food, bread dough → bread, eat command
- [x] Smithing — furnace + anvil, ore → bars → weapons/armor
- [x] Fletching — logs → arrow shafts/bows, fletching as background action
- [x] Equipment — bronze/iron/steel/mithril/adamantite/rune weapons and armor, bows, arrows
- [x] Step 1: Pharmacy Rename — Alchemy → Pharmacy across codebase, SkillAbbr "pha", migration code in LoadCharacter
- [x] Step 2: Combat Overhaul — OSRS per-type attack/defense bonuses (stab/slash/crush/science/ranged), OSRS accuracy formula, AttackType on weapons, per-type mob defenses, 8 new mobs, ranged combat with ammo, stats command, showItemStats on look
- [x] Step 3: Combat Feel — Aggressive mobs (auto-attack on room enter, OSRS combat level rule), equipment skill requirements on all tiered gear
- [x] Step 4: Technology — 25 techs (attack/str/def/ranged/science boosts, 3 protection techs, utility techs), Battery drain, 1-tick flicking, tech command, TechTick, charging station, score/prompt integration
- [x] Step 5: Scavenging — mine_scrap behavior verified. Created 10 junk items (solar, hydro, cosmic, eco, chaos, bio, nature, law, death, blood — all stackable) with matching identifier tools and altar objects. `id`/`identify` command (Active): scans room for altar, checks for matching identifier in inventory, converts all scrap to junk on next tick with level-based multipliers, awards Scavenging XP. 10 altar rooms (150-159) branching from Scavenging Post (room 9). Help files created.

---

## Step 5: Scavenging

See `skill_plans/scavenging.md`. The simplest new skill — mine scrap (already exists), identify it at altars to produce junk. Must be implemented before Science since Science consumes junk.

- [x] Step 5: Scavenging — mine_scrap behavior verified. Created 10 junk items (solar, hydro, cosmic, eco, chaos, bio, nature, law, death, blood — all stackable) with matching identifier tools and altar objects. `id`/`identify` command (Active): scans room for altar, checks for matching identifier in inventory, converts all scrap to junk on next tick with level-based multipliers, awards Scavenging XP. 10 altar rooms (150-159) branching from Scavenging Post (room 9). Help files created.

---

## Step 6: Science (Magic System)

See `skill_plans/science.md`. Players "trigger mods" (cast spells) powered by junk (runes). Decks (staves) provide unlimited supply of one junk type and remove scrap requirement. Depends on combat overhaul + scavenging.

- [ ] **Science System** — Define ~40 mods in Go: 20 combat mods (5 levels each of solar/hydro/eco/bio strikes), ~20 utility mods (low/high level processing, bones to nutrients, electromagnetic grab, superheat item, transport/teleport mods, jewelry enchants, bolt chipping). Add `ProvidesJunk string` field to ItemDef. Create deck items (basic, solar, hydro, eco, bio — each provides unlimited of one junk type; any deck removes scrap requirement). Add `trigger`/`cast` command (Active for combat, instant for utility), `autocast` command (Instant), `mods` command (Instant — shows known mods and junk costs). Integrate autocast into combat loop in `cmd_attack.go`. Science combat uses Science level + science_attack for accuracy, mod's MaxHit for damage. Elemental weakness gives +30% accuracy. Award Science XP per cast.

---

## Step 7: Shop System

Originally Phase 2, but needed before Assassin and generally useful. Add a buy/sell interface via talk node actions.

- [ ] **Shop System** — Add a `shop` talk node action that opens a buy/sell interface. The shop inventory is defined in the behavior YAML as a list of items with buy/sell prices. Player enters `StateShop`. Commands: `buy <item>`, `sell <item>`, `browse`/`list`, `leave`. Items are bought with credits, sold back at a percentage. Add a General Store NPC and a Weapons Shop NPC. Place in appropriate rooms.

---

## Step 8: Thieving

See `skill_plans/thieving.md`. Steal from mobs and objects. Sneak mode, guard mechanics.

- [ ] **Thieving** — Add `steal`/`thieve` command (Active) and `sneak` command (Instant toggle). Stealing from mobs: roll success based on Thieving level vs mob's thieving level requirement. On fail, mob turns hostile (starts combat). Stealing from objects: market stall gives random low-value food. Guard watching mechanic: mobs can guard objects, `sneak` mode shows guard attention cycle, lower success when watched, guard called on watched failure. Create credit_stick item (non-stackable, searchable for credits). Create Farmer and Bioengineer mobs (steal seeds from them). Add guard confrontation dialog (bribe/jail/fight). Create jail room. Update Man mob to be stealable.

---

## Step 9: Assassin (Slayer)

See `skill_plans/assassin.md`. Task system, reputation, slayer-only mobs. Depends on combat being solid and having enough mobs to assign as tasks.

- [ ] **Assassin System** — Add `task` command (Instant) to check current assignment. Create Client NPC with talk behavior: assigns random mob kill tasks, skip/extend via reputation, reputation shop. Store task state in player flags (task_mob, task_count, task_remaining, tasks_completed, streak, reputation). In `endCombat()`, check if killed mob is on-task and award Assassin XP + reputation. Streak bonuses at 10th/50th/100th/250th/1000th task. Create 4+ slayer-only mobs with assassin_level requirements, finishing blow items (slug+salt, crawler+acid_vial), and damage-without equipment (drone needs insulated_gloves, phantom needs spectral_visor). Add assassin equipment items (cheap, sold by Client). Place slayer mobs in appropriate rooms.

---

## Step 10: Pharmacy

See `skill_plans/pharmacy.md`. Herb cleaning and potion mixing. Can work initially with herbs as mob drops; Farming adds the growing mechanic later.

- [x] **Pharmacy Skill** — Add `clean` command (Free, background action like fletching): auto-cleans grimy herbs in inventory one at a time, each clean awards Pharmacy XP based on herb level. Add `mix` command (Active, production system): no station required, shows recipe table, mixes potions. Create ~14 grimy herb items and ~14 clean herb items (guam through torstol). Create ~16 potion items (stim potion, fortify potion, restore serum, etc. — sci-fi names). Create vial_of_water and ~14 unfinished potion items. Create ~11 reagent items (eye_of_newt, limpwurt_root, etc.). Create ~30 recipes (14 clean-herb, 16 mix-potion). Add grimy herbs to mob drop tables. Potion effects are item-only for now (no buff system — just items in inventory for future use or sale).

---

## Step 11: Farming

See `skill_plans/farming.md`. Grows herbs for Pharmacy and allotment crops. Per-player plot state via player flags.

- [ ] **Farming Skill** — Add `plant`, `harvest`, `rake`, `water`, `cure`, `inspect` commands. Farming state tracked per-player via player flags (each plot stores seed, growth stage, watered, diseased status). Add `FarmTick()` that runs every ~500 ticks for online players: advances growth stages, rolls disease chance (watering prevents), diseased plants die if not cured. Create seed items (14 herb seeds, 7 allotment seeds). Create farming tools (rake, spade, watering_can, plant_cure). Create plot objects (herb_patch, allotment_patch). Create tool_shed object with store/retrieve interaction. Harvesting gives 3-15 herbs or 3-10 crops based on farming level. Create farming area rooms south of room 15.

---

## Step 12: Bank System

Quality of life — by this point players have many items. Simple deposit/withdraw at bank booth objects.

- [ ] **Bank System** — Add bank storage to player (saved in character YAML, no slot limit or large slot limit). Create bank_booth object. `use bank` or `bank` command opens bank interface in a new session state. Commands: `deposit <item>`, `withdraw <item>`, `deposit all`, `list`/`browse`, `leave`. Bank is shared across all characters on the same account. Place bank booths in town and key areas.

---

## Step 13: Construction

See `skill_plans/construction.md`. Player housing and workshop crafting. Very independent — can be done in any order.

- [ ] **Construction Skill** — Create real estate broker NPC (talk behavior, sells house for 10 credits via `cost` + `set_player_flags`). Create Local Neighborhood room north of room 16 with Directory object. Directory: `look` shows all homeowners (scan character files), `use` teleports to a house. Player houses are virtual rooms generated in code (not YAML files). Each house has entrance + workshop. Workshop has workbench station object. Add `make`/`construct` command (Active, production system). Create plank items (regular through mahogany). Create construction recipes: logs → planks (very slow, ~20 ticks), planks → furniture items (shelf, table, chair, etc. — sellable items with credit value). All recipes use `type: "construction"`, `station: ["workbench"]`.

---

## Step 14: Agility

See `skill_plans/agility.md`. Obstacle courses with custom commands. Independent.

- [ ] **Agility Skill** — Create course definition system: `data/courses/<id>.yaml` defines a sequence of obstacle rooms with custom verbs (scramble, jump, swing, balance, climb, etc.), messages per phase, ticks per phase, and XP per obstacle. Add a single `doObstacle()` handler that all obstacle verbs route to. Course loader builds a `roomID → {courseID, obstacleIndex, verb}` map. Each obstacle is a 3-phase multi-tick action (approach → attempt → complete/fail). Fail chance based on agility vs required level; failure deals minor damage and teleports to course start. Track laps per course in player flags. Create 3 courses: Ventilation Shaft (Lv1, 5 obstacles), Rooftop (Lv20, 6 obstacles), Reactor (Lv50, 7 obstacles). Create ~18 obstacle rooms with descriptions. Big XP drop on course completion.

---

## Step 15: Hacking

See `skill_plans/hacking.md`. Jack into terminals, play minigames for Hacking XP. Most independent skill.

- [ ] **Hacking Skill** — Add `StateHacking` session state. Add `jack`/`jackin` command (Active). Create `HackingMinigame` interface with `Init(level) string` and `HandleInput(input) (output, done, won)`. Terminal objects are registered in a Go map (not YAML behaviors). Implement 3 minigames: Hunt the Wumpus (Lv1, 20-node dodecahedron, probes, hazards), Mastermind/Code Breaker (Lv20, 4-digit cipher, 10 guesses, feedback), Liar's Dice/Signal Bluff (Lv40, hidden dice bidding/bluffing vs AI, wilds, exact calls). Create terminal objects and Netrunner NPC with tips dialog. Award XP on completion (more for winning, bonus for efficiency). Place terminals in rooms.

---

## Step 16: World Building

Content additions that flesh out the game world after all systems are in place.

- [ ] More rooms — expand the asteroid world with distinct areas: residential district, industrial sector, reactor level, docking bay, science wing, maintenance tunnels
- [ ] More mobs — fill out the combat level curve with 15-20 more mobs at various levels
- [ ] Quest lines — use existing talk node + flag system to create multi-step quest chains connecting the different areas
- [ ] Ensure player actions broadcast to other players in the same room (e.g., "John starts mining a copper rock!", "Jane jacks into a terminal.")

---

## Step 17: Polish

- [ ] Admin commands — kick, teleport, spawn items, god mode, broadcast
- [ ] PvP combat and multi-combat zones
- [ ] Persist ground items and mob state across restarts (serialize to YAML on shutdown, load on startup)
- [ ] Potion buff system — consuming potions gives temporary stat boosts (builds on Pharmacy items created in Step 10)