## Mobs Basic combat mob with per-type defense bonuses: ```yaml id: "man" name: "man" description: "A shabby-looking man." attack: 1 strength: 1 defense: 1 hp: 7 speed: 5 aggressive: false respawn_ticks: 30 attack_type: crush # stab/slash/crush/ranged/science (default: crush) stab_defense: 0 # per-type defense bonuses slash_defense: 0 crush_defense: 0 science_defense: 0 ranged_defense: 0 drops: remains: "bones" # always dropped on death loot: - item_id: "credits" weight: 98 quantity: 10 - item_id: "credits" weight: 2 quantity: 150 idle_descriptions: - "scribbles something in a small notebook" - "gazes skyward at the clouds" combat_descriptions: - "is engaged in a fight to the death with %s" ``` ### Aggressive Mobs Mobs with `aggressive: true` auto-attack players entering their room (1-tick delay). Only aggros if the player's combat level is at most double the mob's combat level. Checked on room enter and login. ```yaml id: goblin name: goblin aggressive: true # attacks players on sight attack: 1 strength: 3 defense: 3 hp: 12 attack_type: slash attack_bonus: 3 # equipment-equivalent attack bonus for mob's attack roll strength_bonus: 2 # equipment-equivalent strength bonus for mob's max hit stab_defense: 4 slash_defense: 3 crush_defense: -2 # weak to crush — negative defense is valid science_defense: 0 ranged_defense: 3 ``` ### Mob Attack/Defense Fields | Field | Description | |---|---| | `attack` | Attack level (base accuracy) | | `strength` | Strength level (base max hit) | | `defense` | Defense level (base defense) | | `hp` | Hit points | | `ranged` | Ranged level (for ranged/science mobs) | | `science` | Science level | | `attack_bonus` | Equipment-equivalent attack bonus (added to attack roll) | | `strength_bonus` | Equipment-equivalent strength bonus (added to max hit) | | `attack_type` | Determines which player defense is used against this mob | | `stab_defense` through `ranged_defense` | Per-type defense bonuses | | `weakness` | Elemental weakness (solar/hydro/eco/bio) — for future Science combat | | `size` | Mob size for safespot blocking: small/medium/large/massive (default: medium) | ### Protected/Unique Mobs Mob with talk behavior — can be talked to via `talk:` inline config: ```yaml id: "guard" name: "Guard" talk: # inline talk config (no separate behavior file) nodes: start: message: "\"Halt! Who goes there?\"" options: - text: "\"Just passing through.\"" end: true unique: true # displays as "Guard" not "a guard" protected: true # cannot be attacked attack: 5 strength: 5 defense: 5 hp: 30 speed: 5 aggressive: false respawn_ticks: 60 attack_type: slash attack_bonus: 8 strength_bonus: 6 stab_defense: 12 slash_defense: 15 crush_defense: 10 science_defense: -5 ranged_defense: 12 idle_descriptions: - "scans the area with a watchful eye" - "adjusts the grip on his weapon" ``` Note: `wander_rooms` and `wander_interval` are NOT set on the mob definition. Wander config is per-instance in the room YAML (see Rooms > Mobs section above). ### Stealable Mobs Mobs can be stealable via the `steal` command. On failure, the mob turns hostile and attacks. ```yaml id: farmer name: Farmer steal_table: farmer_steal # Drop table for steal loot steal_level: 10 # Required thieving level steal_xp: 15 # XP per successful steal steal_speed: 4 # Ticks per steal attempt ``` | Field | Description | |---|---| | `steal_table` | Drop table ID for loot when stealing | | `steal_level` | Required thieving level | | `steal_xp` | XP awarded per successful steal | | `steal_speed` | Ticks per steal attempt (base wait) | ### Assassin Mobs Assassin (Slayer) mobs restrict combat by assassin level and introduce finishing blows and protective equipment: ```yaml id: slug name: slug assassin_level: 1 # required assassin level to attack finishing_blow: salt # item required to kill (mob stays at 1 HP otherwise) attack: 3 strength: 3 defense: 1 hp: 15 speed: 6 drops: remains: slug_mucus loot: - item_id: credits weight: 100 quantity: 15 ``` Damage-without mobs deal 1.5x damage unless the player has the specified item equipped: ```yaml id: drone name: drone assassin_level: 15 damage_without: insulated_gloves # 1.5x damage without this item equipped attack: 15 strength: 14 defense: 12 hp: 45 speed: 4 aggressive: true ``` | Field | Description | |---|---| | `assassin_level` | Required assassin skill level to attack this mob | | `finishing_blow` | Item ID required to kill this mob (mob stays at 1 HP until used via `use on `) | | `damage_without` | Item ID for protection — mob deals 1.5x damage if player doesn't have it equipped | Mobs without these fields work normally (assassin_level defaults to 0, finishing_blow and damage_without default to empty). ### Task Mobs (Worksites) A task mob is a non-violent "worksite" — build a solar panel, survey flora, prospect a rock — that reuses the entire combat engine. Set `kind: task`. Mechanically its `hp` is a hidden work pool that drains to 0 to **complete** the work; the player sees a progress bar filling toward 100%. A task mob **never attacks back** — the danger (if any) comes from a room `hazard:` (see `hazards.md`). Use the `work` command (or `attack`) on it. ```yaml id: solar_panel_frame name: solar panel frame kind: task # "" / "combat" (default) or "task" verb: assemble # flavor verb shown in messages (default: "work on") progress_noun: assembly # flavor noun in the progress line (default: "work") complete_message: "You bolt the final panel into place and the array hums to life!" hp: 40 # units of work to complete (NOT a health bar) defense: 10 # base difficulty speed: 5 aggressive: false # task mobs do not fight; this is ignored respawn_ticks: 40 # the worksite replenishes after this many ticks attack_type: crush # Per-type defenses become METHOD EFFICIENCY: low = that approach works well. crush_defense: 0 # hammering panels in: efficient stab_defense: 40 # stabbing a frame: useless slash_defense: 40 ranged_defense: 10 # a rivet gun / scanner (ranged weapon): works science_defense: 10 # an analysis deck (science weapon): works drops: # the "payment" for the labour — same drop system as combat loot: - item_id: credits weight: 95 quantity: 40 - item_id: coal weight: 5 quantity: 1 ``` Key points: - **All combat styles work.** Melee, ranged (consumes ammo as "supplies") and science decks (consume junk) all apply progress. The per-type `*_defense` values steer which method is *efficient* without forbidding any — a rock might have low `crush_defense` but high `stab_defense`. - **XP and buffs are identical to combat** — driven by your attack style (accurate/aggressive/defensive/balanced) and split into the combat skills. This is a non-violent way to train Attack/Strength/Defense/Ranged/Science/Hitpoints. - **No special equipment.** Task mobs are designed around the weapons and bonuses you already have. There is no separate "tool" equipment set. - **Progress decays exactly like inverted mob regen.** A task you stop working on slowly loses progress over time (the same regen that heals combat mobs, displayed inverted). - **One worker at a time**, the same 1-v-1 lock as combat. ---