aboutsummaryrefslogtreecommitdiff
path: root/TODO.md
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-06-19 13:28:06 -0400
committerhistoria <[not public]>2026-06-19 13:28:06 -0400
commit3a58125d14bb307f861b38c6c5b0a63babde7e08 (patch)
treebd89e866447d55e6dffd447d8ef5fabf9b8fbe9d /TODO.md
parent575a71dcfed3b9fa44af244836f638a23df05a9a (diff)
downloadthehouseoficarus-3a58125d14bb307f861b38c6c5b0a63babde7e08.tar.gz
feat: all skills kind of implemented, random prototype content added
Diffstat (limited to 'TODO.md')
-rw-r--r--TODO.md84
1 files changed, 8 insertions, 76 deletions
diff --git a/TODO.md b/TODO.md
index 98f19fc..ed3da83 100644
--- a/TODO.md
+++ b/TODO.md
@@ -18,83 +18,15 @@ Detailed implementation plans for each skill/system are in `skill_plans/`.
- [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.
- [x] Step 6: Science — 40 mods (20 combat, 2 processing, 3 utility, 7 transport, 4 enchant, 4 chip), ModDef/AllMods in science.go. `trigger`/`cast` command (Active) routes to combat/transport/processing/utility/enchant handlers. `autocast`/`auto` command (Instant) sets science combat autocast. `mods`/`modlist` command (Instant) shows available mods with effective junk costs. Integrated autocast into `startCombat()` in cmd_attack.go with 5-tick science speed and melee fallback on junk depletion. `scienceAttack()` with Science level + science_attack roll, elemental weakness +30% accuracy, mod MaxHit damage. Junk cost system: deck-equipped removes scrap_metal, elemental deck provides unlimited junk type. Added `ProvidesJunk` to ItemDef, `AutocastMod` to Player, `FindByInput` to RecipeStore, `science_mod` color target. 9 deck items, 24 jewelry items, 8 bolt items, nutrient_bar item. Help files created.
- [x] Step 7: Shop System — Added `shop` talk node action that opens a buy/sell interface. `ShopConfig` with items + buy/sell prices defined in behavior YAML. `StateShop` session state with `buy`, `sell`, `browse`/`list`, `leave` commands. Items bought with credits, sold back at reduced prices. Created General Store clerk (Town Square) and Weapons Smith (Forge) NPCs. Created help files and worldbuilding guide docs.
-
----
-
- [x] Step 8: Thieving — `steal`/`thieve` command (Active) with continuous steal action. `sneak` command (Instant toggle) with guard-watching notifications. Success formula: 0.5 base + 0.03 per level, halved when guard watches. Mob stealing with aggro on failure. Object stealing with guard mechanic (SneakTick, watch/away cycles). Guard confrontation dialog (bribe 500cr, jail, fight). Created Market Stall object, Farmer + Bioengineer mobs, credit_stick item (searchable), 11 seed items, 5 new drop tables, 3 new rooms (160-162), 3 help files. Updated Man mob for stealability.
-
----
-
-## 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.
-
- [x] **Assassin System** — Added `task` command (Instant) to check current assignment. Created Client NPC with talk behavior: assigns random mob kill tasks, skip/extend via reputation, reputation shop. Task state stored in player flags (task_mob, task_count, task_remaining, tasks_completed, streak, reputation). In `endCombat()`, on-task kills award Assassin XP (mob.MaxHP * 2) + reputation. Streak bonuses at 10th/50th/100th/250th/1000th task. Created 4 slayer-only mobs (slug/drone/crawler/phantom) with assassin_level requirements, finishing blow items (slug+salt, crawler+acid_vial), and damage-without equipment (drone needs insulated_gloves, phantom needs spectral_visor). Added assassin equipment items (salt, acid_vial, insulated_gloves, spectral_visor) sold by Client. Added 5 new rooms (50-54: Assassin Den + Sewer Tunnels chain). Created help files (task, assassin).
-
----
-
-## 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.
-
- [x] **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, flower_patch). Create tool_shed object with talk behavior for store/retrieve interaction. Harvesting gives 3-15 herbs or 3-10 crops based on farming level. Create farming area rooms (150-152) 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)
+- [x] **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.
+- [x] **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 who have purchased a player house in this specific area (scan character files), `use` teleports to a house. Player houses are real YAML rooms in `data/rooms/player_housing/`. 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"]`. Add sawmill operator NPC in lumberyard room (east of room 16): turns logs into planks for credits via talk node `sawmill` action. Add Plank Make science mod (Lv86 Utility): converts logs to planks at 70% sawmill cost.
+- [x] **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.
+- [x] **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.
+
+- [x] More mobs — 18 new mobs filling Lv15-93 gaps (bandit, mutant_rat, scrap_bot, security_turret, ghoul, corrupted_scientist, war_drone, enforcer_bot, plasma_wraith, feral_cyborg, heavy_mech, elite_synth, veteran_merc, molten_elemental, titan_sentinel, psionic_entity, ancient_construct, void_reaper), 14 new dungeon rooms (55-68), iron_sentinel placed in room 64
+- [x] Player action broadcasts — gathering, combat, burning, stoking, searching, stealing, agility, production, use, resting, fletching, cleaning all broadcast to room. Follows existing toggle/arrive/say pattern.
+- [x] Potion buff system — `drink` command (ClassFree), 3-tick cooldown. 16 potion YAMLs updated with `potion_effect`, `potion_bonus`, `potion_duration`. PotionBuff struct on Player. BuffTick decrements durations. buffLevelBonus() applied in combat (attack/strength/defense/ranged/science roll formulas). Buffs displayed in `score`. Supports stat-boost, heal, battery-restore, and all_combat potion types.