From e6b4cb9f5816c6ee239233bc85f74ee446a161c2 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Wed, 1 Jul 2026 16:37:45 -0400 Subject: feat: shop system overhauled, gui conversation tree editor overhauled --- data/mobs/examples/client.yaml | 62 +++++++++++++++----------- data/mobs/examples/estate_broker.yaml | 19 +++++--- data/mobs/examples/general_store_clerk.yaml | 67 +++++++++++------------------ data/mobs/examples/guard.yaml | 12 ++++-- data/mobs/examples/sawmill_operator.yaml | 24 ++++++----- data/mobs/examples/tanner.yaml | 13 +++--- data/mobs/examples/weapons_smith.yaml | 58 ++++++++++--------------- data/mobs/flight_attendant.yaml | 6 +-- data/mobs/flight_attendant_copy.yaml | 23 ++++++++++ data/mobs/spaceport_attendant.yaml | 14 +++--- 10 files changed, 160 insertions(+), 138 deletions(-) create mode 100644 data/mobs/flight_attendant_copy.yaml (limited to 'data/mobs') diff --git a/data/mobs/examples/client.yaml b/data/mobs/examples/client.yaml index 91b6802..0d5f27d 100644 --- a/data/mobs/examples/client.yaml +++ b/data/mobs/examples/client.yaml @@ -19,17 +19,18 @@ talk: nodes: assign_task: action: - assign_task: true - message: '"Let me check what''s available..." The Client scrolls through their data pad.' + messages: + - '"Let me check what''s available..." The Client scrolls through their data pad.' options: - text: '"Understood."' - goto: start text: '"What else do you have?"' buy_acid: action: - cost: 10 + credits: -10 give_item: acid_vial - message: '"Handle with care." The Client passes you a vial of corrosive acid.' + messages: + - '"Handle with care." The Client passes you a vial of corrosive acid.' options: - condition: min_credits: 10 @@ -42,7 +43,8 @@ talk: reputation_cost: 200 set_player_flags: assassin_unlocked_auto_acid_vial: true - message: '"Auto-acid purchased. Acid vials will no longer be consumed."' + messages: + - '"Auto-acid purchased. Acid vials will no longer be consumed."' options: - goto: rep_shop text: '"Thanks."' @@ -51,7 +53,8 @@ talk: reputation_cost: 200 set_player_flags: assassin_unlocked_auto_salt: true - message: '"Auto-salt purchased. You''ll no longer consume salt on finishing blows."' + messages: + - '"Auto-salt purchased. You''ll no longer consume salt on finishing blows."' options: - goto: rep_shop text: '"Thanks."' @@ -60,23 +63,26 @@ talk: reputation_cost: 100 set_player_flags: assassin_unlocked_extend: true - message: '"You can now extend tasks via our conversation."' + messages: + - '"You can now extend tasks via our conversation."' options: - goto: rep_shop text: '"Thanks."' buy_gloves: action: - cost: 50 + credits: -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.' + messages: + - '"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 + credits: -5 give_item: salt - message: '"Here you go." The Client slides a packet of salt across the table.' + messages: + - '"Here you go." The Client slides a packet of salt across the table.' options: - condition: min_credits: 5 @@ -89,24 +95,28 @@ talk: reputation_cost: 300 set_player_flags: assassin_unlocked_superiors: true - message: '"Superior encounters unlocked. Watch yourself out there."' + messages: + - '"Superior encounters unlocked. Watch yourself out there."' options: - goto: rep_shop text: '"Thanks."' buy_visor: action: - cost: 75 + credits: -75 give_item: spectral_visor - message: '"Spectral frequency filter. Makes the invisible visible — and keeps their attacks from scrambling your brain."' + messages: + - '"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.' + messages: + - '"Let me check your file." The Client pulls up your record.' options: - text: '"Okay."' extend_confirm: - message: '"Extending your task costs 30 Reputation and adds more kills. Want to proceed?"' + messages: + - '"Extending your task costs 30 Reputation and adds more kills. Want to proceed?"' options: - goto: extend_done text: '"Yes, extend it."' @@ -114,12 +124,13 @@ talk: text: '"Never mind."' extend_done: action: - extend_task: true - message: '"Done. I''ve added more targets to your contract."' + messages: + - '"Done. I''ve added more targets to your contract."' options: - text: '"Thanks."' rep_shop: - message: '"Here''s what I''ve got. All purchases are permanent."' + messages: + - '"Here''s what I''ve got. All purchases are permanent."' options: - condition: not: true @@ -144,7 +155,8 @@ talk: - goto: start text: '"Back."' skip_confirm: - message: '"Skipping a task costs 30 Reputation and resets your streak. Are you sure?"' + messages: + - '"Skipping a task costs 30 Reputation and resets your streak. Are you sure?"' options: - goto: skip_done text: '"Yes, skip it."' @@ -152,14 +164,15 @@ talk: text: '"Never mind."' skip_done: action: - skip_task: true - message: '"Task cancelled. Your streak has been reset."' + messages: + - '"Task cancelled. Your streak has been reset."' options: - goto: assign_task text: '"Give me a new one."' - text: '"Goodbye."' start: - message: The Client looks up from their data pad. "What do you need?" + messages: + - The Client looks up from their data pad. "What do you need?" options: - condition: not: true @@ -190,7 +203,8 @@ talk: text: '"I need supplies."' - text: '"Goodbye."' supplies: - message: '"I stock everything you need for the job. Cheap, too."' + messages: + - '"I stock everything you need for the job. Cheap, too."' options: - condition: min_credits: 5 diff --git a/data/mobs/examples/estate_broker.yaml b/data/mobs/examples/estate_broker.yaml index 68c3eb6..b095214 100644 --- a/data/mobs/examples/estate_broker.yaml +++ b/data/mobs/examples/estate_broker.yaml @@ -6,17 +6,20 @@ protected: true 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. + messages: + - 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: - goto: start text: Good to know. goodbye: - message: Come back when you're ready to invest in your future! + messages: + - 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. + messages: + - 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 + credits: -10 set_player_flags: owns_house_local_neighborhood: local_neighborhood condition: @@ -27,15 +30,17 @@ talk: - goto: 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. + messages: + - 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: - goto: 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? + messages: + - 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 + credits: -10 set_player_flags: owns_house_local_neighborhood: local_neighborhood condition: diff --git a/data/mobs/examples/general_store_clerk.yaml b/data/mobs/examples/general_store_clerk.yaml index 8a07191..bee395d 100644 --- a/data/mobs/examples/general_store_clerk.yaml +++ b/data/mobs/examples/general_store_clerk.yaml @@ -19,52 +19,35 @@ slash_defense: 0 speed: 5 stab_defense: 0 strength: 1 +shop: + message: '"Welcome to the General Store! Have a look around."' + items: + - item_id: fishing_rod + stock: 10 + - item_id: fishing_bait + stock: 1000 + - item_id: matches + stock: 20 + - item_id: firesteel + stock: 10 + - item_id: lighter + stock: 10 + - item_id: hammer + stock: 10 + - item_id: knife + stock: 10 + - item_id: chisel + stock: 10 + - item_id: bread + stock: 30 + - item_id: bowstring + stock: 50 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?"' + messages: + - '"Welcome to the General Store! Type ''list'' to see my wares."' options: - - goto: shop - text: '"I''d like to browse."' - text: '"Goodbye."' unique: true size: small diff --git a/data/mobs/examples/guard.yaml b/data/mobs/examples/guard.yaml index 7bd7d19..cba448b 100644 --- a/data/mobs/examples/guard.yaml +++ b/data/mobs/examples/guard.yaml @@ -27,7 +27,8 @@ talk: 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."' + messages: + - '"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: - text: '"I''ll be back."' - condition: @@ -39,11 +40,13 @@ talk: 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."' + messages: + - '"Let me see that..." He examines your pass and nods. "Alright, I''ll open the gate for you."' options: - text: '"Thanks."' start: - message: '"Halt! This area is restricted." The guard eyes you suspiciously.' + messages: + - '"Halt! This area is restricted." The guard eyes you suspiciously.' options: - goto: about_gate text: '"What''s behind that gate?"' @@ -64,7 +67,8 @@ talk: 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."' + messages: + - '"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: - text: '"Thanks."' unique: true diff --git a/data/mobs/examples/sawmill_operator.yaml b/data/mobs/examples/sawmill_operator.yaml index 7abd881..366cfe3 100644 --- a/data/mobs/examples/sawmill_operator.yaml +++ b/data/mobs/examples/sawmill_operator.yaml @@ -6,16 +6,18 @@ protected: true talk: nodes: goodbye: - message: Come back anytime you need more planks! + messages: + - 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 + messages: + - |- + 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? + Want me to process your logs? options: - condition: any_of: @@ -30,9 +32,11 @@ talk: process: action: sawmill: true - message: "" + messages: + - "" 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? + messages: + - 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: diff --git a/data/mobs/examples/tanner.yaml b/data/mobs/examples/tanner.yaml index 2e5d89a..4c1f38b 100644 --- a/data/mobs/examples/tanner.yaml +++ b/data/mobs/examples/tanner.yaml @@ -22,7 +22,8 @@ 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."' + messages: + - '"Bring me some cowhides and I''ll tan them for you. Leather is 10 credits, hard leather is 50."' options: - condition: all_of: @@ -39,10 +40,11 @@ talk: - text: '"Never mind."' tan_hard_leather: action: - cost: 50 + credits: -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." + messages: + - The tanner takes your cowhide and subjects it to an intense curing process. "Here's your hard leather." options: - condition: has_item: cowhide @@ -51,10 +53,11 @@ talk: - text: '"Thanks."' tan_leather: action: - cost: 10 + credits: -10 give_item: leather take_item: cowhide - message: The tanner takes your cowhide and works it skillfully. "Here's your leather." + messages: + - The tanner takes your cowhide and works it skillfully. "Here's your leather." options: - condition: has_item: cowhide diff --git a/data/mobs/examples/weapons_smith.yaml b/data/mobs/examples/weapons_smith.yaml index 0ba8237..b12a543 100644 --- a/data/mobs/examples/weapons_smith.yaml +++ b/data/mobs/examples/weapons_smith.yaml @@ -19,46 +19,32 @@ slash_defense: 0 speed: 5 stab_defense: 0 strength: 1 +shop: + message: The Smithy — buy or sell weapons and armor. + buys_anything: false + items: + - item_id: bronze_sword + stock: 10 + - item_id: iron_sword + stock: 5 + - item_id: bronze_axe + stock: 10 + - item_id: iron_axe + stock: 5 + - item_id: bronze_pickaxe + stock: 10 + - item_id: iron_pickaxe + stock: 5 + - item_id: bronze_med_helm + stock: 10 + - item_id: iron_med_helm + stock: 5 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."' + messages: + - '"Welcome to the Smithy! Type ''list'' to see my wares."' options: - - goto: shop - text: '"Show me what you''ve got."' - text: '"Nothing right now."' unique: true size: small diff --git a/data/mobs/flight_attendant.yaml b/data/mobs/flight_attendant.yaml index 5b18762..e595e67 100644 --- a/data/mobs/flight_attendant.yaml +++ b/data/mobs/flight_attendant.yaml @@ -11,17 +11,17 @@ talk: condition: player_flag: 1001_look_sign not: true - message: '"Hi there, how can I help?"' + messages: ['"Hi there, how can I help?"'] goto: thanks options: - text: '"Oh, nothing... Small crowd on this ship. Just looking for conversation."' goto: sign_reminder - text: '"Goodbye."' thanks: - message: '"Thank for flying with Denali. Watch your step on the way out please."' + messages: ['"Thank for flying with Denali. Watch your step on the way out please."'] options: - text: '"Thank you."' sign_reminder: - sequence: + messages: - '"Yeah, just us two! Not a lot of people heading into the belt these days."' - '"But we''ll be landing shortly! Please be sure {0B bold}look{/} at the information {0B bold}sign{/} so you''ll be all set for your final destination."' diff --git a/data/mobs/flight_attendant_copy.yaml b/data/mobs/flight_attendant_copy.yaml new file mode 100644 index 0000000..fc62564 --- /dev/null +++ b/data/mobs/flight_attendant_copy.yaml @@ -0,0 +1,23 @@ +aggressive: false +description: A smiling flight attendant in a crisp uniform, ready to assist passengers. +id: flight_attendant_copy +idle_descriptions: + - adjusts her name badge + - smiles politely at you +kind: combat +name: Credit Checker! +protected: true +respawn_ticks: 0 +shop: + message: SHOP SHOP + items: + - item_id: bronze_pickaxe + stock: 5 +talk: + nodes: + start: + options: + - goto: "" + text: None! + - text: None +unique: false diff --git a/data/mobs/spaceport_attendant.yaml b/data/mobs/spaceport_attendant.yaml index ca69ccc..58081f6 100644 --- a/data/mobs/spaceport_attendant.yaml +++ b/data/mobs/spaceport_attendant.yaml @@ -14,7 +14,7 @@ talk: player_flag: 1003_attendant_moved not: true goto: show_datapad - message: '"Oh! Change your mind about the flight?"' + messages: ['"Oh! Change your mind about the flight?"'] options: - text: '"No, I''m an arrival... but no one''s at the other desk."' goto: attendant_moved @@ -23,7 +23,7 @@ talk: action: set_player_flags: 1003_attendant_moved: true - sequence: + messages: - '"An... arrival!" he says, failing to contain his nerves. "Oh my, one second."' - 'The lanky man scurries around the counter, across the room, and to the apparently identical counter on the other side.' - '"Can I see your datapad?"' @@ -37,30 +37,30 @@ talk: player_flag: 1003_talked not: true goto: already_talked - message: '"Can I see your datapad?"' + messages: ['"Can I see your datapad?"'] options: - text: '"No"' goto: denied - text: '"Present the datapad"' goto: datapad_done denied: - message: '"Well, I can''t let you onto Vesta until we can confirm your identity."' + messages: ['"Well, I can''t let you onto Vesta until we can confirm your identity."'] datapad_done: action: set_player_flags: 1003_talked: true - sequence: + messages: - 'The man taps through menus on your PDA and writes down some of your personal details onto a clipboard. He flips through a notebook, apparently refreshing himself on arrival procedure, before he seems satisfied and hands back the datapad.' - '"Just needed to make sure you''re not a terrorist!" he says, not a hint of sarcasm in his voice.' - 'He presses a button. "I''ve opened the north door for you. Follow the tunnel all the way through to Numisia."' already_talked: - message: '"Hello again."' + messages: ['"Hello again."'] options: - text: '"Where should I go in town?"' goto: town_info - text: '"Goodbye."' town_info: - sequence: + messages: - '"Well, there''s nearby places to mine, fish, cook, and chop wood if you''re here for work. We haven''t had new labor since we lost contact with Earth, so surely people are looking for help who can get you started."' - '"The attendant tries to hide how he''s measuring your appearance. He still can''t tell if you''re an escaped prisoner, businessman, or terrorist."' - '"Or, err, if you have business in Numisia, you''re probably looking for Director Joanna Lucci. She''s on the west side of town in the Governance and Gaming building."' -- cgit v1.2.3