aboutsummaryrefslogtreecommitdiff
path: root/AGENTS.md
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-06-17 02:27:20 -0400
committerhistoria <[not public]>2026-06-17 02:27:20 -0400
commit731adf2e0fbcac9a32179da077299ed6465af41e (patch)
tree29d368917f258350d426f2680bec59feeb464eaf /AGENTS.md
parent389e307f205f9b7edf604fb9f86e1038ead736ef (diff)
downloadthehouseoficarus-731adf2e0fbcac9a32179da077299ed6465af41e.tar.gz
feat: movement overhauled. agility-enhancing items added.
Diffstat (limited to 'AGENTS.md')
-rw-r--r--AGENTS.md28
1 files changed, 17 insertions, 11 deletions
diff --git a/AGENTS.md b/AGENTS.md
index 7dc4c47..d3eec03 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -2,7 +2,7 @@
The House of Icarus — a Runescape-like sci-fi MUD written in Go. Data-driven via YAML files. No database, no ORM.
-Set on a terraformed asteroid where technology has regressed. "Science" replaces Prayer, "Technology" replaces Magic, Scavenging replaces Runecrafting.
+Set on a terraformed asteroid where technology has regressed. "Technology" replaces Prayer, "Science" replaces Magic, Scavenging replaces Runecrafting.
## Build & Run
@@ -34,7 +34,7 @@ internal/
action/ Behavior structs (GatherConfig, TalkConfig, etc.), Action, drop tables, SuccessChance
player/ Player struct, skills, inventory, XP (RSC table), name/password validation, accounts
world/ Room, MobDef, MobInstance, ObjState, ground items, wandering, drop tables
- combat/ Combat state tracking, combat lock, OSRS-style combat formulas
+ combat/ Combat state tracking, OSRS-style combat formulas
object/ ItemDef, ObjectDef, item/object YAML loaders, EquipSlot, WeaponType, ItemStats
engine/ Tick scheduler — configurable ms interval, subscriber pattern, ToTicks()
color/ xterm-256 color system with auto ANSI downgrade, numeric palette (0-255), gradients, inline tags
@@ -55,7 +55,7 @@ internal/
| `action_room.go` | RunEnterSteps (on_enter scripts), BroadcastRespawns |
| `action_state.go` | ActionType consts, ActionState struct, Description() for look display |
| `action_default_target.go` | Smart auto-selection for gather/attack |
-| `tick.go` | DisconnectTick, RegenTick, WanderTick, SharedDepletionTick |
+| `tick.go` | DisconnectTick, RegenTick, WanderTick, SharedDepletionTick, MoveTick, VisualTick |
| `map.go` | BFS graph builder, tiny map, full map, display utilities (strip, trim) |
| `types.go` | EquipSlots, itemMatch, xpGain, deathDrop |
| `utils.go` | Helper functions (plural, parseQty, parseChoiceIndex, formatPickupList, etc.) |
@@ -160,13 +160,13 @@ Item and object YAML `color` fields also support gradient syntax: `color: "g:196
|---------|-------------|
| `wear` / `wield <item>` | Equip item to correct slot. `wear all` auto-equips best per slot |
| `wear all` | Auto-equips highest-value item per slot from inventory |
-| `remove` / `unwear` / `unwield <item>` | Unequip item back to inventory |
+| `remove` / `unwear` / `unwield <item>` | Unequip item back to inventory. `remove all` unequips everything |
| `eat <item>` | Eat food to heal (3-tick cooldown, can eat during combat) |
### Active (replaces previous active, queued per tick)
| Command | Description |
|---------|-------------|
-| `n` / `s` / `e` / `w` / `u` / `d` | Movement (conditional exits, interrupts combat/actions) |
+| `n` / `s` / `e` / `w` / `u` / `d` | Movement (multi-tick, equipment-dependent speed, flee during combat) |
| `get` / `take` / `grab` / `pick <item>` | Pick up item from ground (reservation-aware) |
| `get all` / `get all <name>` | Pick up all (or matching) items |
| `drop <item>` | Drop item to ground |
@@ -234,7 +234,7 @@ The `verbSkill` map maps verb → skill name for default target resolution:
| `searching` | search | Search bird's nests / items with search_table |
| `resting` | quit | 10-tick rest before disconnect |
| `walking` | walk | Multi-step movement (one dir per tick) |
-| `moving` | n/s/e/w/u/d | One-tick movement state |
+| `moving` | n/s/e/w/u/d | Multi-tick movement state |
| `picking_up` | get | One-tick pickup state |
| `dropping` | drop | One-tick drop state |
@@ -341,7 +341,7 @@ See `internal/game/action_burn.go`.
## Combat System
-**Combat lock:** `LockedTicks: 15` — players cannot move for 15 ticks after entering combat. Decremented each tick.
+**Fleeing combat:** Players can move in any direction to attempt to flee. Movement takes the normal tick delay (default 4, reduced by equipment). During the countdown, the mob continues attacking. If the mob lands a hit, the escape fails ("Can't escape!") and combat resumes. If no hit lands, the player escapes. With Cape of Agility, fleeing is instant. The `run_countdown` option shows tick-by-tick countdown messages.
**Death mechanic:** Player drops credits to ground. If player has >3 items (inventory + equipment), the 3 most valuable are kept and rest are dropped. Player teleports to room 1 at full HP.
@@ -353,7 +353,7 @@ See `internal/game/action_burn.go`.
**Mob combat level:** `0.25 * (attack + strength + defense + maxHP)`
-**Player combat level:** Ranged-or-melee dominant calculation. Includes Science (0.25) and Technology (0.125).
+**Player combat level:** Ranged-or-melee dominant calculation. Includes Technology (0.25) and Science (0.125).
**Mob respawn:** Default 30 ticks. Broadcasts spawn messages if `mob_spawn` option is on.
@@ -383,8 +383,12 @@ Account-wide options set via `option <name> <value>`. Options are stored in the
| `queue_silently` | bool | true | Suppress queue messages |
| `room_desc_width` | int | 70 | Room desc line wrap width |
| `unicode` | bool | true | Unicode box-drawing characters |
+| `run_countdown` | bool | false | Show countdown messages when fleeing combat |
+| `visual_ticks` | bool | false | Display a tick marker every game tick |
+| `visual_tick_count` | int | 0 | Cycle length for tick counter (0 = no counter) |
+| `visual_tick_text` | string | "TICK" | Text displayed for visual ticks |
-Prompt is NOT an option — it is a per-character setting via the `prompt` command. Default: `"> "`. Stored in character YAML as `prompt:`.
+Prompt is NOT an option — it is a per-character setting via the `prompt` command. Default: `"> "`. `prompt none` sets it to blank. Stored in character YAML as `prompt:`.
New accounts are asked "Should I disable color? [y/N]" after password creation. Pressing enter defaults to No (xterm256 enabled). Choosing Y sets color to "none".
@@ -401,7 +405,7 @@ From `internal/object/item.go`:
| `value` | Credit value |
| `stackable` | Can stack in inventory |
| `equip_slot` | head/neck/torso/legs/hands/feet/back/ammo/main_hand/off_hand/ring |
-| `weapon_type` | "melee" / "ranged" / "technology" |
+| `weapon_type` | "melee" / "ranged" / "science" |
| `stats` | attack/strength/defense/science/technology bonuses |
| `speed` | Attack speed |
| `tool_type` | Tool type string for gather requirements |
@@ -519,5 +523,7 @@ Implemented: Mining, Fishing, Woodcutting, Firemaking. The rest are stubs (skill
- Mob wander config is per-instance in room YAML via `RoomMob`, not on `MobDef`.
- Walk distance capped by agility level (`len(dirs) > agilityLevel`).
- `wear all` auto-equips the highest-value item per slot from inventory.
-- Combat lock prevents movement for 15 ticks after entering combat.
+- `remove all` unequips everything if inventory has room.
+- Movement takes multiple ticks (default 4, reduced by Graceful set and Cape of Agility). Cape of Agility makes movement instant (1 tick). Graceful pieces each reduce by 0.25 ticks; full set bonus adds 0.5 for 2 ticks total. Cape overrides Graceful.
+- During combat, movement is a flee attempt. Mob hits during the countdown abort the flee ("Can't escape!").
- Level-up messages output `*** You are now level N <skill>! ***` across all skills that gain XP.