aboutsummaryrefslogtreecommitdiff
path: root/data/mobs
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-06-19 18:20:26 -0400
committerhistoria <[not public]>2026-06-19 18:20:26 -0400
commit0ea4eec5dd2122c6704216971eb1249276297867 (patch)
tree430fbbef04e837820f1d031c190f52ecd6112e25 /data/mobs
parent3a58125d14bb307f861b38c6c5b0a63babde7e08 (diff)
downloadthehouseoficarus-0ea4eec5dd2122c6704216971eb1249276297867.tar.gz
shop fixes, 'toggle' completely removed, movement speed increased
Diffstat (limited to 'data/mobs')
-rw-r--r--data/mobs/client.yaml231
-rw-r--r--data/mobs/estate_broker.yaml55
-rw-r--r--data/mobs/general_store_clerk.yaml85
-rw-r--r--data/mobs/guard.yaml92
-rw-r--r--data/mobs/sawmill_operator.yaml50
-rw-r--r--data/mobs/tanner.yaml82
-rw-r--r--data/mobs/weapons_smith.yaml79
7 files changed, 572 insertions, 102 deletions
diff --git a/data/mobs/client.yaml b/data/mobs/client.yaml
index 9bcae4e..5e03cde 100644
--- a/data/mobs/client.yaml
+++ b/data/mobs/client.yaml
@@ -1,20 +1,219 @@
-id: client
-name: The Client
-description: "A shadowy figure in a dark coat. They speak in clipped, measured tones and seem to know everything about every creature in the sector."
-unique: true
-protected: true
-behavior: client_talk
+aggressive: false
attack: 1
-strength: 1
defense: 1
+description: A shadowy figure in a dark coat. They speak in clipped, measured tones and seem to know everything about every creature in the sector.
hp: 100
-speed: 5
-aggressive: false
-respawn_ticks: 30
+id: client
idle_descriptions:
- - "reviews a holographic dossier"
- - "marks a location on a worn star chart"
- - "flips a credit chit between their fingers"
- - "mutters coordinates under their breath"
- - "glances at you appraisingly"
- - "taps a data pad with a stylus"
+ - reviews a holographic dossier
+ - marks a location on a worn star chart
+ - flips a credit chit between their fingers
+ - mutters coordinates under their breath
+ - glances at you appraisingly
+ - taps a data pad with a stylus
+name: The Client
+protected: true
+respawn_ticks: 30
+speed: 5
+strength: 1
+talk:
+ nodes:
+ assign_task:
+ action:
+ assign_task: true
+ message: '"Let me check what''s available..." The Client scrolls through their data pad.'
+ options:
+ - end: true
+ text: '"Understood."'
+ - goto: start
+ text: '"What else do you have?"'
+ buy_acid:
+ action:
+ cost: 10
+ give_item: acid_vial
+ message: '"Handle with care." The Client passes you a vial of corrosive acid.'
+ options:
+ - condition:
+ min_credits: 10
+ goto: buy_acid
+ text: '"Buy more."'
+ - goto: supplies
+ text: '"Thanks."'
+ buy_auto_acid:
+ action:
+ reputation_cost: 200
+ set_player_flags:
+ assassin_unlocked_auto_acid_vial: true
+ message: '"Auto-acid purchased. Acid vials will no longer be consumed."'
+ options:
+ - goto: rep_shop
+ text: '"Thanks."'
+ buy_auto_salt:
+ action:
+ reputation_cost: 200
+ set_player_flags:
+ assassin_unlocked_auto_salt: true
+ message: '"Auto-salt purchased. You''ll no longer consume salt on finishing blows."'
+ options:
+ - goto: rep_shop
+ text: '"Thanks."'
+ buy_extend_unlock:
+ action:
+ reputation_cost: 100
+ set_player_flags:
+ assassin_unlocked_extend: true
+ message: '"You can now extend tasks via our conversation."'
+ options:
+ - goto: rep_shop
+ text: '"Thanks."'
+ buy_gloves:
+ action:
+ cost: 50
+ give_item: insulated_gloves
+ message: '"These''ll keep the current from frying your hands." The Client tosses you a pair of thick rubber gloves.'
+ options:
+ - goto: supplies
+ text: '"Thanks."'
+ buy_salt:
+ action:
+ cost: 5
+ give_item: salt
+ message: '"Here you go." The Client slides a packet of salt across the table.'
+ options:
+ - condition:
+ min_credits: 5
+ goto: buy_salt
+ text: '"Buy more."'
+ - goto: supplies
+ text: '"Thanks."'
+ buy_superiors:
+ action:
+ reputation_cost: 300
+ set_player_flags:
+ assassin_unlocked_superiors: true
+ message: '"Superior encounters unlocked. Watch yourself out there."'
+ options:
+ - goto: rep_shop
+ text: '"Thanks."'
+ buy_visor:
+ action:
+ cost: 75
+ give_item: spectral_visor
+ message: '"Spectral frequency filter. Makes the invisible visible — and keeps their attacks from scrambling your brain."'
+ options:
+ - goto: supplies
+ text: '"Thanks."'
+ current_task:
+ message: '"Let me check your file." The Client pulls up your record.'
+ options:
+ - end: true
+ text: '"Okay."'
+ extend_confirm:
+ message: '"Extending your task costs 30 Reputation and adds more kills. Want to proceed?"'
+ options:
+ - goto: extend_done
+ text: '"Yes, extend it."'
+ - goto: start
+ text: '"Never mind."'
+ extend_done:
+ action:
+ extend_task: true
+ message: '"Done. I''ve added more targets to your contract."'
+ options:
+ - end: true
+ text: '"Thanks."'
+ rep_shop:
+ message: '"Here''s what I''ve got. All purchases are permanent."'
+ options:
+ - condition:
+ not: true
+ player_flag: assassin_unlocked_auto_salt
+ goto: buy_auto_salt
+ text: '"Auto-finish: Salt (200 Rep) - Never consume salt on finishing blows."'
+ - condition:
+ not: true
+ player_flag: assassin_unlocked_auto_acid_vial
+ goto: buy_auto_acid
+ text: '"Auto-finish: Acid Vial (200 Rep) - Never consume acid vials on finishing blows."'
+ - condition:
+ not: true
+ player_flag: assassin_unlocked_superiors
+ goto: buy_superiors
+ text: '"Unlock Superior Mobs (300 Rep) - Rare superior variants may spawn."'
+ - condition:
+ not: true
+ player_flag: assassin_unlocked_extend
+ goto: buy_extend_unlock
+ text: '"Unlock Extended Tasks (100 Rep) - Allows extending tasks."'
+ - goto: start
+ text: '"Back."'
+ skip_confirm:
+ message: '"Skipping a task costs 30 Reputation and resets your streak. Are you sure?"'
+ options:
+ - goto: skip_done
+ text: '"Yes, skip it."'
+ - goto: start
+ text: '"Never mind."'
+ skip_done:
+ action:
+ skip_task: true
+ message: '"Task cancelled. Your streak has been reset."'
+ options:
+ - goto: assign_task
+ text: '"Give me a new one."'
+ - end: true
+ text: '"Goodbye."'
+ start:
+ message: The Client looks up from their data pad. "What do you need?"
+ options:
+ - condition:
+ not: true
+ player_flag: assassin_task_mob
+ goto: assign_task
+ text: '"I need a job."'
+ - condition:
+ not: false
+ player_flag: assassin_task_mob
+ goto: current_task
+ text: '"What''s my current task?"'
+ - condition:
+ not: false
+ player_flag: assassin_task_mob
+ goto: skip_confirm
+ text: '"I want to skip my task."'
+ - condition:
+ all_of:
+ - not: false
+ player_flag: assassin_task_mob
+ - player_flag: assassin_unlocked_extend
+ value: true
+ goto: extend_confirm
+ text: '"I want to extend my task."'
+ - goto: rep_shop
+ text: '"I''d like to browse the Reputation Shop."'
+ - goto: supplies
+ text: '"I need supplies."'
+ - end: true
+ text: '"Goodbye."'
+ supplies:
+ message: '"I stock everything you need for the job. Cheap, too."'
+ options:
+ - condition:
+ min_credits: 5
+ goto: buy_salt
+ text: '"Buy salt (5 credits each)."'
+ - condition:
+ min_credits: 10
+ goto: buy_acid
+ text: '"Buy acid vial (10 credits each)."'
+ - condition:
+ min_credits: 50
+ goto: buy_gloves
+ text: '"Buy insulated gloves (50 credits)."'
+ - condition:
+ min_credits: 75
+ goto: buy_visor
+ text: '"Buy spectral visor (75 credits)."'
+ - goto: start
+ text: '"Back."'
+unique: true
diff --git a/data/mobs/estate_broker.yaml b/data/mobs/estate_broker.yaml
index 0b56c4c..6698730 100644
--- a/data/mobs/estate_broker.yaml
+++ b/data/mobs/estate_broker.yaml
@@ -1,7 +1,54 @@
+color: "227"
+description: A sharply-dressed real estate agent with a datapad and a practiced smile.
id: estate_broker
+idle: The estate broker flashes a professional smile.
name: estate broker
-behavior: estate_broker_talk
+talk:
+ nodes:
+ already_own:
+ message: Yes, you're already a proud homeowner here! Your house is waiting for you. Use the Estate Directory to enter it, or expand your workshop.
+ options:
+ - next: start
+ text: Good to know.
+ goodbye:
+ message: Come back when you're ready to invest in your future!
+ info:
+ message: Each house comes with an entrance hall and a workshop equipped with a workbench. You can use the workbench with a saw to turn logs into planks, or assemble planks into furniture. Furniture can be sold for a profit or displayed in your home. Future developments will allow adding more rooms to your house.
+ options:
+ - action:
+ cost: 10
+ set_player_flags:
+ owns_house_local_neighborhood: local_neighborhood
+ condition:
+ not:
+ player_flag: owns_house_local_neighborhood
+ next: purchased
+ text: Sounds great! I'll buy one.
+ - next: goodbye
+ text: Maybe later.
+ purchased:
+ message: Excellent! The plot is yours. You'll find your new home in the Local Neighborhood just north of here. Use the Estate Directory terminal to enter your house. The home comes with a workshop — perfect for construction projects.
+ options:
+ - next: start
+ text: Thanks!
+ start:
+ message: Welcome to the Local Neighborhood development! I'm selling premium housing plots for only 10 credits. Interested in buying a house?
+ options:
+ - action:
+ cost: 10
+ set_player_flags:
+ owns_house_local_neighborhood: local_neighborhood
+ condition:
+ not:
+ player_flag: owns_house_local_neighborhood
+ next: purchased
+ text: Yes, I'd like to buy a house.
+ - condition:
+ player_flag: owns_house_local_neighborhood
+ next: already_own
+ text: I already own a house here.
+ - next: goodbye
+ text: No thanks.
+ - next: info
+ text: What do I get with a house?
unique: true
-color: "227"
-description: "A sharply-dressed real estate agent with a datapad and a practiced smile."
-idle: "The estate broker flashes a professional smile."
diff --git a/data/mobs/general_store_clerk.yaml b/data/mobs/general_store_clerk.yaml
index 842a98b..cc6d014 100644
--- a/data/mobs/general_store_clerk.yaml
+++ b/data/mobs/general_store_clerk.yaml
@@ -1,24 +1,71 @@
+aggressive: false
+attack: 1
+attack_type: crush
+crush_defense: 0
+defense: 1
+description: A friendly merchant with a tidy apron, standing behind a well-stocked counter.
+hp: 50
id: general_store_clerk
+idle_descriptions:
+ - arranges items on the shelves
+ - polishes the counter
+ - counts credits in the register
+ - greets a passerby with a nod
name: Shopkeeper
-description: "A friendly merchant with a tidy apron, standing behind a well-stocked counter."
-behavior: general_store
-unique: true
protected: true
-hp: 50
-attack: 1
-strength: 1
-defense: 1
-speed: 5
-aggressive: false
+ranged_defense: 0
respawn_ticks: 30
-attack_type: crush
-stab_defense: 0
-slash_defense: 0
-crush_defense: 0
science_defense: 0
-ranged_defense: 0
-idle_descriptions:
- - "arranges items on the shelves"
- - "polishes the counter"
- - "counts credits in the register"
- - "greets a passerby with a nod" \ No newline at end of file
+slash_defense: 0
+speed: 5
+stab_defense: 0
+strength: 1
+talk:
+ nodes:
+ shop:
+ action:
+ shop:
+ items:
+ - buy_price: 10
+ item_id: fishing_rod
+ sell_price: 2
+ - buy_price: 2
+ item_id: fishing_bait
+ sell_price: 0
+ - buy_price: 10
+ item_id: matches
+ sell_price: 2
+ - buy_price: 40
+ item_id: firesteel
+ sell_price: 10
+ - buy_price: 30
+ item_id: lighter
+ sell_price: 7
+ - buy_price: 20
+ item_id: hammer
+ sell_price: 5
+ - buy_price: 10
+ item_id: knife
+ sell_price: 2
+ - buy_price: 10
+ item_id: chisel
+ sell_price: 2
+ - buy_price: 10
+ item_id: bread
+ sell_price: 2
+ - buy_price: 20
+ item_id: bowstring
+ sell_price: 5
+ message: What would you like to buy or sell?
+ message: '"Take your time. What can I get you?"'
+ options:
+ - goto: start
+ text: '"I''m done."'
+ start:
+ message: '"Welcome to the General Store! Need any supplies?"'
+ options:
+ - goto: shop
+ text: '"I''d like to browse."'
+ - end: true
+ text: '"Goodbye."'
+unique: true
diff --git a/data/mobs/guard.yaml b/data/mobs/guard.yaml
index 32617ce..04aacf5 100644
--- a/data/mobs/guard.yaml
+++ b/data/mobs/guard.yaml
@@ -1,26 +1,76 @@
-id: guard
-name: Guard
-description: "A stern-looking guard in weathered armor."
-behavior: guard_talk
-unique: true
-protected: true
+aggressive: false
attack: 5
-strength: 5
+attack_bonus: 8
+attack_type: slash
+crush_defense: 10
defense: 5
+description: A stern-looking guard in weathered armor.
hp: 30
-speed: 5
-aggressive: false
+id: guard
+idle_descriptions:
+ - scans the area with a watchful eye
+ - adjusts the grip on his weapon
+ - nods curtly at passersby
+ - leans against the gate, arms folded
+name: Guard
+protected: true
+ranged_defense: 12
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"
- - "nods curtly at passersby"
- - "leans against the gate, arms folded"
+slash_defense: 15
+speed: 5
+stab_defense: 12
+strength: 5
+strength_bonus: 6
+talk:
+ nodes:
+ about_gate:
+ action:
+ set_player_flags:
+ talked_to_guard: true
+ message: '"Supplies. Weapons. Things you don''t need to worry about." He shifts his weight. "Tell you what — bring me some copper ore and I''ll stamp you a pass."'
+ options:
+ - end: true
+ text: '"I''ll be back."'
+ - condition:
+ has_item: copper_ore
+ goto: trade_ore
+ text: '"I have some right here."'
+ - end: true
+ text: '"Goodbye."'
+ has_pass:
+ action:
+ set_flags:
+ gate_open: true
+ message: '"Let me see that..." He examines your pass and nods. "Alright, I''ll open the gate for you."'
+ options:
+ - end: true
+ text: '"Thanks."'
+ start:
+ message: '"Halt! This area is restricted." The guard eyes you suspiciously.'
+ options:
+ - goto: about_gate
+ text: '"What''s behind that gate?"'
+ - condition:
+ has_item: copper_ore
+ goto: trade_ore
+ text: '"I have copper ore."'
+ - condition:
+ player_flag: got_pass
+ value: true
+ goto: has_pass
+ text: '"I have a pass."'
+ - end: true
+ text: '"Goodbye."'
+ trade_ore:
+ action:
+ give_item: pass_stub
+ set_player_flags:
+ got_pass: true
+ talked_to_guard: true
+ take_item: copper_ore
+ message: '"Good quality ore. This''ll do." He stamps a slip of paper and hands it to you. "That''s your pass. Don''t lose it."'
+ options:
+ - end: true
+ text: '"Thanks."'
+unique: true
diff --git a/data/mobs/sawmill_operator.yaml b/data/mobs/sawmill_operator.yaml
index 64f6e45..99da8cf 100644
--- a/data/mobs/sawmill_operator.yaml
+++ b/data/mobs/sawmill_operator.yaml
@@ -1,7 +1,49 @@
+color: "186"
+description: A burly worker in a thick apron, covered in sawdust. He operates the industrial sawmill.
id: sawmill_operator
+idle: The sawmill operator wipes sawdust from his goggles.
name: sawmill operator
-behavior: sawmill_operator_talk
+talk:
+ nodes:
+ goodbye:
+ message: Come back anytime you need more planks!
+ prices:
+ message: |-
+ Here's what I charge per log:
+ Regular logs: 5 credits
+ Oak logs: 10 credits
+ Teak logs: 20 credits
+ Mahogany logs: 40 credits
+
+ Want me to process your logs?
+ options:
+ - condition:
+ any_of:
+ - has_item: logs
+ - has_item: oak_logs
+ - has_item: teak_logs
+ - has_item: mahogany_logs
+ next: process
+ text: Yes, process all my logs.
+ - next: goodbye
+ text: No thanks.
+ process:
+ action:
+ sawmill: true
+ message: ""
+ start:
+ message: Welcome to the lumberyard! I can turn your logs into planks — for a small fee, of course. What can I do for ya?
+ options:
+ - condition:
+ any_of:
+ - has_item: logs
+ - has_item: oak_logs
+ - has_item: teak_logs
+ - has_item: mahogany_logs
+ next: prices
+ text: Turn all my logs into planks.
+ - next: prices
+ text: What are your prices?
+ - next: goodbye
+ text: Nothing for now.
unique: true
-color: "186"
-description: "A burly worker in a thick apron, covered in sawdust. He operates the industrial sawmill."
-idle: "The sawmill operator wipes sawdust from his goggles."
diff --git a/data/mobs/tanner.yaml b/data/mobs/tanner.yaml
index 0a90998..a00f497 100644
--- a/data/mobs/tanner.yaml
+++ b/data/mobs/tanner.yaml
@@ -1,24 +1,68 @@
+aggressive: false
+attack: 1
+attack_type: crush
+crush_defense: 0
+defense: 1
+description: A weathered craftsman with stained hands and a leather apron.
+hp: 50
id: tanner
+idle_descriptions:
+ - scrapes at a piece of hide
+ - examines a stack of leathers
+ - sharpens a tanning knife
+ - wipes sweat from his brow
name: Tanner
-description: "A weathered craftsman with stained hands and a leather apron."
-behavior: tanner_talk
-unique: true
protected: true
-hp: 50
-attack: 1
-strength: 1
-defense: 1
-speed: 5
-aggressive: false
+ranged_defense: 0
respawn_ticks: 30
-attack_type: crush
-stab_defense: 0
-slash_defense: 0
-crush_defense: 0
science_defense: 0
-ranged_defense: 0
-idle_descriptions:
- - "scrapes at a piece of hide"
- - "examines a stack of leathers"
- - "sharpens a tanning knife"
- - "wipes sweat from his brow"
+slash_defense: 0
+speed: 5
+stab_defense: 0
+strength: 1
+talk:
+ nodes:
+ start:
+ message: '"Bring me some cowhides and I''ll tan them for you. Leather is 10 credits, hard leather is 50."'
+ options:
+ - condition:
+ all_of:
+ - has_item: cowhide
+ - min_credits: 10
+ goto: tan_leather
+ text: '"Tan a cowhide into leather (10 credits)."'
+ - condition:
+ all_of:
+ - has_item: cowhide
+ - min_credits: 50
+ goto: tan_hard_leather
+ text: '"Tan a cowhide into hard leather (50 credits)."'
+ - end: true
+ text: '"Never mind."'
+ tan_hard_leather:
+ action:
+ cost: 50
+ give_item: hard_leather
+ take_item: cowhide
+ message: The tanner takes your cowhide and subjects it to an intense curing process. "Here's your hard leather."
+ options:
+ - condition:
+ has_item: cowhide
+ goto: start
+ text: '"Tan another."'
+ - end: true
+ text: '"Thanks."'
+ tan_leather:
+ action:
+ cost: 10
+ give_item: leather
+ take_item: cowhide
+ message: The tanner takes your cowhide and works it skillfully. "Here's your leather."
+ options:
+ - condition:
+ has_item: cowhide
+ goto: start
+ text: '"Tan another."'
+ - end: true
+ text: '"Thanks."'
+unique: true
diff --git a/data/mobs/weapons_smith.yaml b/data/mobs/weapons_smith.yaml
index da6ef3b..4138a1b 100644
--- a/data/mobs/weapons_smith.yaml
+++ b/data/mobs/weapons_smith.yaml
@@ -1,24 +1,65 @@
+aggressive: false
+attack: 1
+attack_type: crush
+crush_defense: 0
+defense: 1
+description: A burly smith with soot-stained hands and a heavy leather apron, standing proudly by the forge.
+hp: 80
id: weapons_smith
+idle_descriptions:
+ - hammers at a glowing blade on the anvil
+ - wipes soot from his brow
+ - inspects a finished sword
+ - tends to the furnace fire
name: Weaponsmith
-description: "A burly smith with soot-stained hands and a heavy leather apron, standing proudly by the forge."
-behavior: weapons_shop
-unique: true
protected: true
-hp: 80
-attack: 1
-strength: 1
-defense: 1
-speed: 5
-aggressive: false
+ranged_defense: 0
respawn_ticks: 30
-attack_type: crush
-stab_defense: 0
-slash_defense: 0
-crush_defense: 0
science_defense: 0
-ranged_defense: 0
-idle_descriptions:
- - "hammers at a glowing blade on the anvil"
- - "wipes soot from his brow"
- - "inspects a finished sword"
- - "tends to the furnace fire" \ No newline at end of file
+slash_defense: 0
+speed: 5
+stab_defense: 0
+strength: 1
+talk:
+ nodes:
+ shop:
+ action:
+ shop:
+ items:
+ - buy_price: 25
+ item_id: bronze_sword
+ sell_price: 6
+ - buy_price: 60
+ item_id: iron_sword
+ sell_price: 15
+ - buy_price: 20
+ item_id: bronze_axe
+ sell_price: 5
+ - buy_price: 50
+ item_id: iron_axe
+ sell_price: 12
+ - buy_price: 20
+ item_id: bronze_pickaxe
+ sell_price: 5
+ - buy_price: 50
+ item_id: iron_pickaxe
+ sell_price: 12
+ - buy_price: 16
+ item_id: bronze_med_helm
+ sell_price: 4
+ - buy_price: 40
+ item_id: iron_med_helm
+ sell_price: 10
+ message: The Smithy — buy or sell weapons and armor.
+ message: '"Here''s the current inventory. All quality guaranteed."'
+ options:
+ - goto: start
+ text: '"That''s all for now."'
+ start:
+ message: '"Welcome to the Smithy! Finest weapons and armor on the asteroid."'
+ options:
+ - goto: shop
+ text: '"Show me what you''ve got."'
+ - end: true
+ text: '"Nothing right now."'
+unique: true