diff --git a/data/json/furniture_and_terrain/special_use/bullet_trailer.json b/data/json/furniture_and_terrain/special_use/bullet_trailer.json new file mode 100644 index 0000000000000..3b00c431a2077 --- /dev/null +++ b/data/json/furniture_and_terrain/special_use/bullet_trailer.json @@ -0,0 +1,291 @@ +[ + { + "//": "These terrains are for generating a bullet trailer. While they can be remixed in some ways, in general they will only fit with each other and will only produce a trailer in an east-west orientation with a south-facing door. Furniture has to be made non-blocking and placed in the central path to work correctly.", + "type": "terrain", + "id": "t_bullettrailer_brownfloor", + "name": "brown laminate floor", + "roof": "t_metal_flat_roof", + "description": "A section of flooring made out of a tough, smooth material, colored in an atrocious mottled brown.", + "symbol": ".", + "color": "brown", + "copy-from": "t_linoleum_gray" + }, + { + "type": "terrain", + "id": "t_bullettrailer_nwall_westcorner", + "name": "bullet trailer exterior wall", + "copy-from": "t_scrap_wall", + "description": "A smooth wall of gleaming chrome, slightly dusty from the road.", + "flags": [ "SUPPORTS_ROOF", "WALL", "REDUCE_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], + "symbol": "LINE_OXOX", + "color": "light_gray" + }, + { + "type": "terrain", + "id": "t_bullettrailer_nwall", + "symbol": "LINE_OXOX", + "color": "light_gray", + "copy-from": "t_bullettrailer_nwall_westcorner" + }, + { + "type": "terrain", + "id": "t_bullettrailer_nwall_window", + "symbol": "LINE_OXOX", + "color": "light_gray", + "looks_like": "t_window", + "flags": [ "SUPPORTS_ROOF", "WALL", "REDUCE_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND", "TRANSPARENT" ], + "copy-from": "t_bullettrailer_nwall_westcorner" + }, + { + "type": "terrain", + "id": "t_bullettrailer_nwall_eastcorner", + "symbol": "LINE_OXOX", + "color": "light_gray", + "copy-from": "t_bullettrailer_nwall_westcorner" + }, + { + "type": "terrain", + "id": "t_bullettrailer_wwall", + "symbol": "LINE_OXOX", + "color": "light_gray", + "copy-from": "t_bullettrailer_nwall_westcorner" + }, + { + "type": "terrain", + "id": "t_bullettrailer_ewall", + "symbol": "LINE_OXOX", + "color": "light_gray", + "copy-from": "t_bullettrailer_nwall_westcorner" + }, + { + "type": "terrain", + "id": "t_bullettrailer_inner_westcorner", + "symbol": "LINE_OXOX", + "color": "light_gray", + "copy-from": "t_bullettrailer_nwall_westcorner" + }, + { + "type": "terrain", + "id": "t_bullettrailer_inner_T", + "copy-from": "t_bullettrailer_nwall_westcorner", + "symbol": "LINE_OXOX", + "color": "light_gray", + "name": "bullet trailer interior wall", + "description": "A simple wall panelled in a coarsely textured grey laminate of some sort." + }, + { + "type": "terrain", + "id": "t_bullettrailer_inner_eastcorner", + "copy-from": "t_bullettrailer_inner_T", + "symbol": "LINE_OXOX", + "color": "light_gray" + }, + { + "type": "terrain", + "id": "t_bullettrailer_swall_westcorner", + "name": "bullet trailer exterior wall", + "description": "A smooth wall of gleaming chrome, slightly dusty from the road.", + "symbol": "LINE_OXOX", + "color": "light_gray", + "copy-from": "t_bullettrailer_nwall_westcorner" + }, + { + "type": "terrain", + "id": "t_bullettrailer_swall_windows", + "symbol": "+", + "color": "light_blue", + "copy-from": "t_bullettrailer_nwall_window" + }, + { + "type": "terrain", + "id": "t_bullettrailer_swall_door", + "symbol": "-", + "color": "light_gray", + "looks_like": "t_door_metal_c", + "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "MINEABLE", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "open": "t_bullettrailer_swall_door_o", + "copy-from": "t_bullettrailer_swall_westcorner" + }, + { + "type": "terrain", + "id": "t_bullettrailer_swall_door_o", + "symbol": "/", + "color": "dark_gray", + "move_cost": 2, + "looks_like": "t_door_metal_o", + "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "MINEABLE", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "copy-from": "t_bullettrailer_swall_westcorner", + "close": "t_bullettrailer_swall_door" + }, + { + "type": "terrain", + "id": "t_bullettrailer_swall_wheels", + "symbol": "o", + "color": "light_gray", + "copy-from": "t_bullettrailer_nwall_window" + }, + { + "type": "terrain", + "id": "t_bullettrailer_swall", + "symbol": "LINE_OXOX", + "color": "light_gray", + "copy-from": "t_bullettrailer_swall_westcorner" + }, + { + "type": "terrain", + "id": "t_bullettrailer_swall_eastcorner", + "symbol": "LINE_OXOX", + "color": "light_gray", + "copy-from": "t_bullettrailer_swall_westcorner" + }, + { + "type": "furniture", + "id": "f_bullettrailer_table_top", + "move_cost_mod": -1, + "description": "A small trailer table, designed to convert into a bed when not in use.", + "symbol": "T", + "color": "yellow", + "copy-from": "f_table" + }, + { + "type": "furniture", + "id": "f_bullettrailer_table_middle", + "symbol": "T", + "color": "yellow", + "copy-from": "f_bullettrailer_table_top" + }, + { + "type": "furniture", + "id": "f_bullettrailer_table_bottom", + "symbol": "T", + "color": "yellow", + "copy-from": "f_bullettrailer_table_top" + }, + { + "type": "furniture", + "id": "f_bullettrailer_cabinet", + "copy-from": "f_cupboard", + "name": "trailer cabinets", + "symbol": "n", + "color": "yellow", + "description": "Cramped trailer cabinets, with some inbuilt appliances taking up even more of the limited space.", + "move_cost_mod": 0 + }, + { + "type": "furniture", + "id": "f_bullettrailer_sink", + "name": "trailer sink", + "move_cost_mod": 0, + "symbol": "u", + "color": "brown", + "description": "A tiny metal sink and connected cabinet.", + "copy-from": "f_sink" + }, + { + "type": "furniture", + "id": "f_bullettrailer_desk", + "name": "mini desk", + "move_cost_mod": 20, + "symbol": "t", + "color": "brown", + "description": "A small wooden desk with a little attached bookshelf.", + "copy-from": "f_desk" + }, + { + "type": "terrain", + "id": "t_bullettrailer_inner_door", + "name": "trailer bathroom door", + "description": "A gray textured door, rimmed in chrome, like a very tacky version of a ship's hatch.", + "move_cost": -1, + "symbol": "|", + "color": "light_gray", + "coverage": 100, + "flags": [ "NOITEM", "FLAMMABLE_ASH", "BLOCK_WIND", "REDUCE_SCENT", "DOOR" ], + "looks_like": "t_door_metal_c", + "open": "t_bullettrailer_inner_door_o", + "bash": { + "str_min": 10, + "str_max": 70, + "sound": "crunch!", + "sound_fail": "whump!", + "ter_set": "t_null", + "items": [ + { "item": "2x4", "count": [ 0, 5 ] }, + { "item": "wood_panel", "count": [ 0, 1 ] }, + { "item": "nail", "charges": [ 0, 5 ] }, + { "item": "splinter", "count": [ 5, 10 ] } + ] + } + }, + { + "type": "terrain", + "id": "t_bullettrailer_inner_door_o", + "name": "trailer bathroom door", + "move_cost": 0, + "symbol": "/", + "color": "light_gray", + "coverage": 30, + "looks_like": "t_door_metal_o", + "description": "A gray textured door, rimmed in chrome, like a very tacky version of a ship's hatch.", + "flags": [ "NOITEM", "FLAMMABLE_ASH", "BLOCK_WIND", "DOOR", "MOUNTABLE", "TRANSPARENT" ], + "close": "t_bullettrailer_inner_door", + "bash": { + "str_min": 10, + "str_max": 70, + "sound": "crunch!", + "sound_fail": "whump!", + "ter_set": "t_null", + "items": [ + { "item": "2x4", "count": [ 0, 5 ] }, + { "item": "wood_panel", "count": [ 0, 1 ] }, + { "item": "nail", "charges": [ 0, 5 ] }, + { "item": "splinter", "count": [ 5, 10 ] } + ] + } + }, + { + "type": "furniture", + "id": "f_bullettrailer_toilet", + "name": "travel toilet", + "description": "A tiny plastic toilet for use in a travel trailer. Unlike a normal toilet, it doesn't store water locally for you to siphon out.", + "symbol": "b", + "color": "white", + "copy-from": "f_toilet" + }, + { + "type": "furniture", + "id": "f_bullettrailer_minisofa", + "name": "trailer sofa", + "symbol": "h", + "color": "red", + "description": "A folding trailer sofa with a durable, somewhat comfortable weave of coarse red fabric.", + "copy-from": "f_sofa" + }, + { + "type": "furniture", + "id": "f_bullettrailer_bed_foot", + "name": "trailer bed", + "symbol": "H", + "color": "green", + "description": "A small but comfy-looking double bed.", + "copy-from": "f_bed" + }, + { + "type": "furniture", + "id": "f_bullettrailer_bed_head", + "name": "trailer bed", + "symbol": "H", + "color": "green", + "description": "A small but comfy-looking double bed.", + "copy-from": "f_bed" + }, + { + "type": "furniture", + "id": "f_bullettrailer_sign_danabakery", + "name": "plywood sign for 'Dana's Bakery'", + "symbol": "#", + "color": "red", + "description": "A spraypainted plywood sign reads 'Dana's Bakery' in red letters.", + "copy-from": "f_sign" + } +] diff --git a/data/json/npcs/refugee_center/surface_refugees/NPC_Boris_Borichenko.json b/data/json/npcs/refugee_center/surface_refugees/NPC_Boris_Borichenko.json index 875828a37ab77..717f68046e205 100644 --- a/data/json/npcs/refugee_center/surface_refugees/NPC_Boris_Borichenko.json +++ b/data/json/npcs/refugee_center/surface_refugees/NPC_Boris_Borichenko.json @@ -598,10 +598,7 @@ "random": true, "search_range": 120 }, - "update_mapgen": { - "om_terrain": "shelter_2_vandal", - "place_item": [ { "item": "laptop_boris", "x": 15, "y": 12 }, { "item": "mbag", "x": 15, "y": 12 } ] - } + "update_mapgen": { "place_item": [ { "item": "laptop_boris", "x": 15, "y": 12 }, { "item": "mbag", "x": 15, "y": 12 } ] } }, "dialogue": { "describe": "Find Boris' son's laptop.", diff --git a/data/json/npcs/refugee_center/surface_refugees/NPC_Dana_Nunez.json b/data/json/npcs/refugee_center/surface_refugees/NPC_Dana_Nunez.json index 15b7ecc2e7ee6..acde2798a1cdb 100644 --- a/data/json/npcs/refugee_center/surface_refugees/NPC_Dana_Nunez.json +++ b/data/json/npcs/refugee_center/surface_refugees/NPC_Dana_Nunez.json @@ -10,7 +10,14 @@ "mission": 7, "chat": "TALK_REFUGEE_Dana_1_firstmeet", "faction": "free_merchants", - "mission_offered": "MISSION_REFUGEE_Dana_Sourdough" + "mission_offered": "MISSION_REFUGEE_Dana_Sourdough", + "age": 26, + "height": 164, + "str": 8, + "dex": 9, + "int": 9, + "per": 11, + "personality": { "aggression": -10, "bravery": -5, "collector": 1, "altruism": 4 } }, { "type": "npc_class", @@ -19,10 +26,6 @@ "job_description": "I'm just trying to survive.", "common": false, "//": "Dana is a young woman who survived with her husband, but she was pregnant and lost the baby.", - "bonus_str": { "rng": [ -2, 2 ] }, - "bonus_dex": { "rng": [ 0, 4 ] }, - "bonus_int": { "rng": [ -2, 2 ] }, - "bonus_per": { "rng": [ -2, 2 ] }, "worn_override": "REFUGEE_Dana_worn", "carry_override": "REFUGEE_Dana_carried", "weapon_override": "REFUGEE_Dana_wield", @@ -31,13 +34,17 @@ { "trait": "MYOPIC" }, { "trait": "NO_BASH" }, { "trait": "RETURN_TO_START_POS" }, - { "group": "Appearance_Irish" } + { "trait": "hair_ponytail", "variant": "red" }, + { "trait": "SKIN_LIGHT" }, + { "trait": "eye_color", "variant": "blue" } ], "skills": [ - { "skill": "ALL", "level": { "mul": [ { "one_in": 3 }, { "sum": [ { "dice": [ 2, 2 ] }, { "rng": [ 0, -4 ] } ] } ] } }, - { "skill": "cooking", "bonus": { "rng": [ 4, 6 ] } }, - { "skill": "unarmed", "bonus": { "rng": [ 1, 2 ] } }, - { "skill": "melee", "bonus": { "rng": [ 0, 1 ] } } + { "skill": "cooking", "bonus": 6 }, + { "skill": "cutting", "bonus": 1 }, + { "skill": "driving", "bonus": 2 }, + { "skill": "melee", "bonus": 1 }, + { "skill": "speech", "bonus": 1 }, + { "skill": "unarmed", "bonus": 1 } ] }, { @@ -108,12 +115,23 @@ }, "topic": "TALK_REFUGEE_Refuse_Boris_Mission_1" }, + { + "text": "I spoke to the foreman over at Tacoma Ranch. If you're willing to put in the work, they'll find some work for you over there.", + "topic": "TALK_REFUGEE_Dana_Tacoma2", + "condition": { + "and": [ + { "u_has_mission": "MISSION_TACOMA_Nunez" }, + { "u_has_var": "Nunez_Tacoma", "type": "recruit", "context": "general", "value": "phase_2" } + ] + }, + "effect": { "u_add_var": "Nunez_Tacoma", "type": "recruit", "context": "general", "value": "phase_3" } + }, { "text": "What's your story?", "topic": "TALK_REFUGEE_Dana_Background" }, { "text": "How are things here?", "topic": "TALK_REFUGEE_Dana_Situation" }, { "text": "I spoke to your husband about getting you a job at the Tacoma Ranch. What would you think about that?", "topic": "TALK_REFUGEE_Dana_Tacoma", - "condition": { "u_has_var": "Pablo_ask_tacoma", "type": "recruit", "context": "general", "value": "yes" } + "condition": { "u_has_mission": "MISSION_TACOMA_Nunez" } }, { "text": "Your husband said to ask you what you'd think about getting out of this place and coming to work for me at my own camp.", @@ -121,9 +139,19 @@ "condition": { "u_has_var": "Pablo_ask_recruit", "type": "recruit", "context": "general", "value": "yes" } }, { - "text": "About that sourdough starter you had me looking for…", - "topic": "TALK_MISSION_INQUIRE", - "condition": { "u_has_var": "Dana_Sourdough", "type": "mission", "context": "flag", "value": "in_progress" } + "text": "You seem pretty unhappy about the quality of your bread. Is there something I can do to help?", + "topic": "TALK_DANA_Sourdough", + "condition": { + "and": [ + { "not": { "u_has_var": "Dana_Sourdough", "type": "mission", "context": "flag", "value": "yes" } }, + { "u_has_var": "Dana_Sourdough", "type": "knowledge", "value": "yes" } + ] + } + }, + { + "text": "I've got your sourdough.", + "topic": "TALK_DANA_Sourdough3", + "condition": { "u_has_item": "landough_calrisean" } }, { "text": "Got any more bread I can trade flour for?", @@ -174,6 +202,7 @@ "type": "talk_topic", "id": "TALK_REFUGEE_Dana_Background", "dynamic_line": "I was working in a nice restaurant as a baker, until . I was pregnant, and it was getting close to time to go on mat leave; lots of time on my feet, getting up stupid-early to make pastries, you know. Because of the pregnancy we were evacuated early and shipped out this way, but our bus was attacked in the chaos. We managed to escape, but had to hike the rest of the way, with the Singhs and a few other refugees that didn't make it. I lost the baby. It wasn't a good time.", + "speaker_effect": { "effect": { "u_add_var": "dana_pregnancy", "context": "knowledge", "value": "knows" } }, "responses": [ { "text": "Have you done any baking lately?", "topic": "TALK_REFUGEE_Dana_Background_baking" }, { "text": "I'm sorry for your loss.", "topic": "TALK_REFUGEE_Dana_Background_sorry" }, @@ -186,6 +215,7 @@ "//": "Common 'buy bread' dialogue options put here to avoid reprinting.", "id": [ "TALK_REFUGEE_Dana_Background_baking", + "TALK_TACOMA_Dana_Baking", "TALK_REFUGEE_Dana_Background_baking_nobarter", "TALK_REFUGEE_Dana_Background_baking2_yesbarter" ], @@ -303,7 +333,7 @@ }, { "type": "talk_topic", - "id": "TALK_REFUGEE_Dana_Background_baking", + "id": [ "TALK_REFUGEE_Dana_Background_baking", "TALK_TACOMA_Dana_Baking" ], "dynamic_line": { "npc_has_effect": "dana_baking_sold", "no": { @@ -345,7 +375,13 @@ "trial": { "type": "PERSUADE", "difficulty": 5 }, "failure": { "topic": "TALK_REFUGEE_Dana_Background_baking2_nobarter" }, "success": { "topic": "TALK_REFUGEE_Dana_Background_baking2_yesbarter" } - }, + } + ] + }, + { + "type": "talk_topic", + "id": "TALK_REFUGEE_Dana_Background_baking", + "responses": [ { "text": "Thanks, can we talk about something else?", "topic": "TALK_REFUGEE_Dana_1" }, { "text": "I'll look into that. I'd better get going though.", "topic": "TALK_DONE" } ] @@ -356,10 +392,7 @@ "dynamic_line": "Sorry, it's not something I can bend on. I don't make a big profit off this, I use what I get to make more bread. If I cut you a deal, I'll run out of supplies.", "//": "see above for responses to buy bread at original price.", "speaker_effect": { "effect": { "npc_add_effect": "dana_barter_fail", "duration": "24 h" } }, - "responses": [ - { "text": "Well, I tried. Can we talk about something else?", "topic": "TALK_REFUGEE_Dana_1" }, - { "text": "Thanks, but I think I'll pass. I gotta run.", "topic": "TALK_DONE" } - ] + "responses": [ { "text": "Thanks, but I think I'll pass. I gotta run.", "topic": "TALK_DONE" } ] }, { "type": "talk_topic", @@ -396,17 +429,61 @@ ], "no": "Great, here's a loaf of my locally-famous, not-very-mature sourdough. It's not too bad honestly. Everyone here seems to like it." }, - "speaker_effect": { "effect": [ { "npc_add_effect": "dana_baking_sold", "duration": "18 h" } ] }, + "speaker_effect": { + "effect": [ + { "npc_add_effect": "dana_baking_sold", "duration": "18 h" }, + { "u_add_var": "Dana_Sourdough", "type": "knowledge", "value": "yes" } + ] + }, "responses": [ { "text": "You seem pretty unhappy about the quality of your bread. Is there something I can do to help?", - "topic": "TALK_MISSION_LIST", + "topic": "TALK_DANA_Sourdough", "condition": { "not": { "u_has_var": "Dana_Sourdough", "type": "mission", "context": "flag", "value": "yes" } } }, - { "text": "Thanks, can we talk about something else?", "topic": "TALK_REFUGEE_Dana_1" }, { "text": "It smells awesome. I'm going to head out now, thanks!", "topic": "TALK_DONE" } ] }, + { + "type": "talk_topic", + "id": "TALK_DANA_Sourdough", + "dynamic_line": "Sure. If you really like this second-rate bread, you could risk your life for something actually worth it. I left my actual sourdough starter back in the bakery where I worked. That baby is a hundred years old, and has been in my family for generations… if you can bring him to me, I'll bake you the finest bread you've ever had.", + "responses": [ + { + "text": "Why not? I'll see what I can do.", + "effect": [ + { "assign_mission": "MISSION_REFUGEE_Dana_Sourdough" }, + { "u_add_var": "Dana_Sourdough", "type": "mission", "context": "flag", "value": "yes" } + ], + "topic": "TALK_DANA_Sourdough2" + }, + { "text": "Maybe not right now, I think I'd better go.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_DANA_Sourdough2", + "dynamic_line": "Take care of yourself out there.\" She jots down directions to her bakery and hands them to you. \"His name is Landough, Landough Calrisean. He'll be in the right-hand fridge, in a jar with a picture of the Millennium Falcon on it. And listen, when you bring my sourdough back, I don't want to see a scratch on him, you understand?", + "responses": [ + { "text": "Right. Sure.", "topic": "TALK_DONE" }, + { + "text": "All right, old buddy. You know, I know what he means to you. I'll take good care of him, so that he won't get a scratch.", + "topic": "TALK_DONE" + } + ] + }, + { + "type": "talk_topic", + "id": "TALK_DANA_Sourdough3", + "dynamic_line": "*takes the jar from you eagerly, studying it with care. \"He's been through a lot, hasn't he. Poor guy. Aw man.\" She turns back to you, beaming. \"Oh, you will not regret this. He may not look like much, but he's got it where it counts, kid. It's gonna take me a few days to revive him after being abandoned so long, but he'll be operational soon and then you can come back for some real bread.\" She frowns. \"I don't really have much to give you in return, but I'll cut you a deal on bread if that helps.\"", + "speaker_effect": { + "effect": [ { "u_sell_item": "landough_calrisean" }, { "finish_mission": "MISSION_REFUGEE_Dana_Sourdough", "success": true } ] + }, + "responses": [ + { "text": "I'll hold you to that.", "topic": "TALK_DONE" }, + { "text": "I'm just glad to help.", "topic": "TALK_DONE" } + ] + }, { "type": "talk_topic", "id": "TALK_REFUGEE_Dana_Background_baking_revival", @@ -438,12 +515,6 @@ }, "speaker_effect": { "effect": { "u_add_var": "Nunez_Tacoma", "type": "recruit", "context": "general", "value": "phase_1" } }, "responses": [ - { - "text": "I spoke to the foreman over at Tacoma Ranch. If you're willing to put in the work, they'll find some work for you over there.", - "topic": "TALK_REFUGEE_Dana_Tacoma2", - "condition": { "u_has_var": "Nunez_Tacoma", "type": "recruit", "context": "general", "value": "phase_2" }, - "effect": { "u_add_var": "Nunez_Tacoma", "type": "recruit", "context": "general", "value": "phase_3" } - }, { "text": "I'll look into that. What were you saying before?", "topic": "TALK_NONE" }, { "text": "I'll look into that. I'd better get going though.", "topic": "TALK_DONE" } ] @@ -452,15 +523,13 @@ "type": "talk_topic", "id": "TALK_REFUGEE_Dana_Tacoma2", "dynamic_line": "All right. I've taken some time to think about it, and I'm willing to go. I'm sure they'll have use for a baker over there, after all, and if I don't get out of this place there's a very real chance I'm going to snap. You can go let Pablo know first hand, if you want; he's been pretty excited about the idea.", - "responses": [ - { "text": "Sure, I'll go tell him. What were you saying before?", "topic": "TALK_NONE" }, - { "text": "Sure, I'll go tell him. I'd better get going though.", "topic": "TALK_DONE" } - ] + "responses": [ { "text": "Sure, I'll go tell him. Cool!", "topic": "TALK_DONE" } ] }, { "type": "talk_topic", "id": "TALK_REFUGEE_Dana_Recruit", "dynamic_line": "Pablo's a little quicker on the trigger than I am. We're trying to have a baby, did you know that? It's a bit crazy in this world, but I won't change those plans. Tell you what: if your camp has access to a doctor and some medical facilities, in case I actually can get pregnant again, I would consider getting out of here and signing up.", + "speaker_effect": { "effect": { "u_add_var": "dana_pregnancy", "context": "knowledge", "value": "knows" } }, "responses": [ { "text": "I'll look into that. What were you saying before?", "topic": "TALK_NONE" }, { "text": "I'll look into that. I'd better get going though.", "topic": "TALK_DONE" } @@ -476,13 +545,13 @@ "item": "landough_calrisean", "start": { "assign_mission_target": { "om_terrain": "bakery", "reveal_radius": 1, "random": true, "search_range": 120 }, - "update_mapgen": { "om_terrain": "bakery", "place_item": [ { "item": "landough_calrisean", "x": 5, "y": 16 } ] }, + "update_mapgen": { "place_item": [ { "item": "landough_calrisean", "x": 5, "y": 16 } ] }, "effect": { "u_add_var": "Dana_Sourdough", "type": "mission", "context": "flag", "value": "in_progress" } }, "end": { "effect": [ { "u_add_var": "Dana_Sourdough", "type": "mission", "context": "flag", "value": "yes" }, - { "npc_add_effect": "dana_sourdough_revival", "duration": "14 d" }, + { "npc_add_effect": "dana_sourdough_revival", "duration": "7 d" }, { "u_adjust_var": "refugee_happiness", "type": "counter", "context": "refugee_center", "adjustment": 2 } ] }, @@ -519,6 +588,6 @@ "copy-from": "sourdough_bread", "looks_like": "sourdough_bread", "description": "This round loaf of bread has a thick, dark crust, and smells very enticing.", - "proportional": { "fun": 2.0, "price": 2.0 } + "proportional": { "fun": 2, "price": 2 } } ] diff --git a/data/json/npcs/refugee_center/surface_refugees/NPC_Pablo_Nunez.json b/data/json/npcs/refugee_center/surface_refugees/NPC_Pablo_Nunez.json index bab324f288b48..477200448d025 100644 --- a/data/json/npcs/refugee_center/surface_refugees/NPC_Pablo_Nunez.json +++ b/data/json/npcs/refugee_center/surface_refugees/NPC_Pablo_Nunez.json @@ -9,6 +9,13 @@ "attitude": 0, "mission": 7, "chat": "TALK_REFUGEE_Pablo_1", + "age": 28, + "height": 184, + "str": 10, + "dex": 8, + "int": 10, + "per": 10, + "personality": { "aggression": -10, "bravery": -5, "collector": 2, "altruism": 3 }, "faction": "free_merchants" }, { @@ -18,25 +25,28 @@ "job_description": "I'm just trying to survive.", "common": false, "//": "Pablo is a young professional who survived with his wife, but she was pregnant and lost the baby.", - "bonus_str": { "rng": [ -1, 3 ] }, - "bonus_dex": { "rng": [ -2, 2 ] }, - "bonus_int": { "rng": [ -2, 2 ] }, - "bonus_per": { "rng": [ -2, 2 ] }, "worn_override": "REFUGEE_Pablo_worn", "carry_override": "REFUGEE_Pablo_carried", "weapon_override": "REFUGEE_Pablo_wield", "traits": [ { "trait": "QUICK" }, { "trait": "Exp_Bookkeeping1" }, - { "group": "Appearance_Latin" }, + { "trait": "SKIN_MEDIUM" }, + { "trait": "eye_color", "variant": "brown" }, + { "trait": "hair_short", "variant": "black" }, { "trait": "NO_BASH" }, { "trait": "RETURN_TO_START_POS" } ], "skills": [ - { "skill": "ALL", "level": { "mul": [ { "one_in": 3 }, { "sum": [ { "dice": [ 2, 2 ] }, { "rng": [ 0, -5 ] } ] } ] } }, - { "skill": "computer", "bonus": { "rng": [ 1, 2 ] } }, - { "skill": "speech", "bonus": { "rng": [ 1, 2 ] } }, - { "skill": "cooking", "bonus": { "rng": [ 0, 2 ] } } + { "skill": "bashing", "bonus": 1 }, + { "skill": "computer", "bonus": 4 }, + { "skill": "cooking", "bonus": 1 }, + { "skill": "driving", "bonus": 2 }, + { "skill": "fabrication", "bonus": 1 }, + { "skill": "mechanics", "bonus": 1 }, + { "skill": "melee", "bonus": 2 }, + { "skill": "speech", "bonus": 2 }, + { "skill": "swimming", "bonus": 1 } ] }, { @@ -100,7 +110,12 @@ { "text": "Dana wanted me to be the one to let you know: they've got work for you over at the ranch. You could get out of here if you want.", "topic": "TALK_REFUGEE_Pablo_Tacoma2", - "condition": { "u_has_var": "Nunez_Tacoma", "type": "recruit", "context": "general", "value": "phase_3" } + "condition": { + "and": [ + { "u_has_mission": "MISSION_TACOMA_Nunez" }, + { "u_has_var": "Nunez_Tacoma", "type": "recruit", "context": "general", "value": "phase_3" } + ] + } }, { "text": "What were you saying before?", "topic": "TALK_NONE" }, { "text": "I'd better get going. Bye, Pablo.", "topic": "TALK_DONE" } @@ -207,8 +222,13 @@ { "text": "Why not move to the Tacoma Commune?", "topic": "TALK_REFUGEE_Pablo_Tacoma", - "effect": { "u_add_var": "Pablo_ask_tacoma", "type": "recruit", "context": "general", "value": "yes" }, - "condition": { "u_has_var": "tacoma_started", "type": "knowledge", "context": "flag", "value": "yes" } + "effect": { "assign_mission": "MISSION_TACOMA_Nunez" }, + "condition": { + "and": [ + { "u_has_var": "tacoma_started", "type": "knowledge", "context": "flag", "value": "yes" }, + { "not": { "u_has_mission": "MISSION_TACOMA_Nunez" } } + ] + } }, { "text": "I've got a secure base. You and your wife could come with me.", @@ -226,11 +246,38 @@ { "type": "talk_topic", "id": "TALK_REFUGEE_Pablo_Tacoma2", - "dynamic_line": "This is amazing news! Thank you so much! I've talked to some of the traders who have been there and I really think I can help, mostly with the manual labor but also with the bookkeeping end. It sounds so much better than this place. Thanks, my friend! We'll get packing, and see if we can get a place on the next caravan out. It'll be a little while I'm sure, but at least our child won't be born in captivity." + "dynamic_line": "This is amazing news! Thank you so much! I've talked to some of the traders who have been there and I really think I can help, mostly with the manual labor but also with the bookkeeping end. It sounds so much better than this place. Thanks, my friend! We'll get packing, and see if we can get a place on the next caravan out. It'll be a little while I'm sure, but at least our child won't be born in captivity.", + "speaker_effect": { + "effect": [ + { "finish_mission": "MISSION_TACOMA_Nunez", "success": true }, + { "math": [ "nunez_travel_timer", "=", "u_val('time_since_cataclysm: days') + 2" ] }, + { "math": [ "nunez_travel_stage", "=", "1" ] } + ] + } }, { "type": "talk_topic", "id": "TALK_REFUGEE_Pablo_Recruit", "dynamic_line": "Really? I might consider it. Talk to my wife, Dana. She's put down a lot more roots here, it would be up to her I think. I'd go anywhere right now." + }, + { + "id": "MISSION_TACOMA_Nunez", + "type": "mission_definition", + "name": { "str": "Find out if the Nunez family can find work at Tacoma Ranch." }, + "goal": "MGOAL_NULL", + "difficulty": 2, + "value": 1000, + "origins": [ "ORIGIN_SECONDARY" ], + "dialogue": { + "describe": "Find out if the Nunez family can find work at Tacoma Ranch.", + "offer": "n/a", + "accepted": "n/a", + "rejected": "n/a", + "advice": "n/a", + "inquire": "n/a", + "success": "n/a", + "success_lie": "n/a", + "failure": "n/a" + } } ] diff --git a/data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json b/data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json index dc5af57e4e734..2f0bdf899d364 100644 --- a/data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json +++ b/data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json @@ -41,7 +41,17 @@ { "text": "Hey, are you looking for workers here? I know a couple people back at the refugee center that might be willing to come.", "topic": "TALK_RANCH_FOREMAN_Nunez", - "condition": { "u_has_var": "Nunez_Tacoma", "type": "recruit", "context": "general", "value": "phase_1" } + "condition": { + "and": [ + { "u_has_mission": "MISSION_TACOMA_Nunez" }, + { "u_has_var": "Nunez_Tacoma", "type": "recruit", "context": "general", "value": "phase_1" } + ] + } + }, + { + "text": "Hey, are you looking for workers here?", + "topic": "TALK_RANCH_FOREMAN_Nunez_Clue", + "condition": { "not": { "u_has_var": "Nunez_Tacoma", "type": "recruit", "context": "general", "value": "phase_1" } } }, { "text": "I've got to go…", "topic": "TALK_DONE" } ] @@ -137,10 +147,16 @@ { "type": "talk_topic", "id": "TALK_RANCH_FOREMAN_Nunez", - "dynamic_line": "we're still in early stages of getting set up, but we're not overly flush for hands, that's for sure. If they're willing to put in a hard day's work, we can get them busy.", + "dynamic_line": "We're still in early stages of getting set up, but we're not overly flush for hands, that's for sure. If they're willing to put in a hard day's work, we can get them busy.", "speaker_effect": { "effect": { "u_add_var": "Nunez_Tacoma", "type": "recruit", "context": "general", "value": "phase_2" } }, "responses": [ { "text": "I'll tell them that, but they seemed good for a bit of hard labor.", "topic": "TALK_RANCH_FOREMAN" } ] }, + { + "type": "talk_topic", + "id": "TALK_RANCH_FOREMAN_Nunez_Clue", + "dynamic_line": "we're still in early stages of getting set up, but we're not overly flush for hands, that's for sure. I don't think we'd turn many people away, of course, but besides strong hands and willing labor, we could really use someone who could cook. I can't tell you what it'd do for morale. You could try asking some of the people staying on the surface in the refugee center maybe, I don't think they were part of most of the original discussions about the ranch.", + "responses": [ { "text": "I'll keep an eye out.", "topic": "TALK_RANCH_FOREMAN" } ] + }, { "id": "MISSION_RANCH_FOREMAN_1", "type": "mission_definition", diff --git a/data/json/npcs/tacoma_ranch/Nunez/Arrival_code.json b/data/json/npcs/tacoma_ranch/Nunez/Arrival_code.json new file mode 100644 index 0000000000000..73d9abdab68f7 --- /dev/null +++ b/data/json/npcs/tacoma_ranch/Nunez/Arrival_code.json @@ -0,0 +1,106 @@ +[ + { + "id": "EOC_Nunez_Travel", + "type": "effect_on_condition", + "recurrence": 1000, + "condition": { + "and": [ + { "math": [ "nunez_travel_stage", "==", "1" ] }, + { "math": [ "nunez_travel_timer", "<", "u_val('time_since_cataclysm: days')" ] } + ] + }, + "deactivate_condition": { "math": [ "nunez_travel_stage", "==", "2" ] }, + "effect": [ + { "u_adjust_var": "refugee_happiness", "type": "counter", "context": "refugee_center", "adjustment": 1 }, + { "mapgen_update": "tacoma_nunez_trailer_arrive", "om_terrain": "ranch_camp_55" }, + { "mapgen_update": "refcenter_nunez_departure", "om_terrain": "evac_center_7" }, + { "math": [ "nunez_travel_stage", "++" ] } + ] + }, + { + "type": "mapgen", + "method": "json", + "update_mapgen_id": "refcenter_nunez_departure", + "//": "removes pablo and dana nunez from the refugee center", + "object": { + "remove_npcs": [ { "class": "refugee_DanaNunez", "x": 11, "y": 13 }, { "class": "refugee_PabloNunez", "x": 11, "y": 12 } ] + } + }, + { + "type": "mapgen", + "update_mapgen_id": "tacoma_nunez_trailer_arrive", + "method": "json", + "//": "In addition to basic mapgen, adds some point variables in the hopes that I can add some passive movement animations for pablo and dana.", + "object": { + "place_nested": [ { "chunks": [ "nunez_trailer" ], "x": 0, "y": 17 } ], + "place_npcs": [ { "class": "tacoma_DanaNunez", "x": 4, "y": 19 }, { "class": "tacoma_PabloNunez", "x": 4, "y": 20 } ], + "set": [ + { "point": "variable", "id": "Pablo_relax", "x": 4, "y": 20 }, + { "point": "variable", "id": "Dana_baking", "x": 4, "y": 19 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "nunez_trailer", + "//": "Nunez bakery inside a silver bullet trailer.", + "object": { + "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN", "NO_UNDERLYING_ROTATE" ], + "mapgensize": [ 6, 6 ], + "rows": [ + "ABCDE ", + "123456", + "7.;:89", + "0a_bcd", + "efghij", + " " + ], + "//": "The stuff in 'ABCDE' should potentially also be made into some new furniture such as piles of stored wood or a propane tank, but this works for the moment. The purpose is just to stop players from easily getting up to the back wall and interacting through it.", + "terrain": { + "1": "t_bullettrailer_nwall_westcorner", + "2": "t_bullettrailer_nwall", + "3": "t_bullettrailer_nwall_window", + "4": "t_bullettrailer_nwall", + "5": "t_bullettrailer_nwall", + "6": "t_bullettrailer_nwall_eastcorner", + "7": "t_bullettrailer_wwall", + ".": "t_bullettrailer_brownfloor", + ":": "t_bullettrailer_brownfloor", + ";": "t_bullettrailer_brownfloor", + "8": "t_bullettrailer_inner_door", + "9": "t_bullettrailer_ewall", + "0": "t_bullettrailer_wwall", + "a": "t_bullettrailer_brownfloor", + "_": "t_bullettrailer_brownfloor", + "b": "t_bullettrailer_brownfloor", + "c": "t_bullettrailer_inner_T", + "d": "t_bullettrailer_inner_eastcorner", + "e": "t_bullettrailer_swall_westcorner", + "f": "t_bullettrailer_swall_windows", + "g": "t_bullettrailer_swall_door", + "h": "t_bullettrailer_swall_wheels", + "i": "t_bullettrailer_swall", + "j": "t_bullettrailer_swall_eastcorner" + }, + "furniture": { + "A": "f_crate_c", + "B": "f_standing_tank", + "C": "f_standing_tank", + "D": "f_crate_c", + "E": "f_crate_c", + "1": "f_bullettrailer_table_top", + "7": "f_bullettrailer_table_middle", + ".": "f_bullettrailer_cabinet", + ";": "f_bullettrailer_sink", + ":": "f_bullettrailer_desk", + "0": "f_bullettrailer_table_bottom", + "a": "f_bullettrailer_minisofa", + "b": "f_bullettrailer_bed_foot", + "c": "f_bullettrailer_bed_head", + "d": "f_bullettrailer_toilet", + "i": "f_bullettrailer_sign_danabakery" + } + } + } +] diff --git a/data/json/npcs/tacoma_ranch/Nunez/NPC_Dana_Tacoma.json b/data/json/npcs/tacoma_ranch/Nunez/NPC_Dana_Tacoma.json new file mode 100644 index 0000000000000..c05aad28f992e --- /dev/null +++ b/data/json/npcs/tacoma_ranch/Nunez/NPC_Dana_Tacoma.json @@ -0,0 +1,187 @@ +[ + { + "type": "npc", + "id": "tacoma_DanaNunez", + "name_unique": "Dana Nunez", + "gender": "female", + "name_suffix": "baker", + "class": "NC_TACOMA_Dana", + "attitude": 0, + "mission": 7, + "chat": "TALK_TACOMA_Dana_1", + "faction": "free_merchants", + "age": 26, + "height": 164, + "str": 8, + "dex": 9, + "int": 9, + "per": 11, + "personality": { "aggression": -2, "bravery": -1, "collector": 1, "altruism": 4 } + }, + { + "type": "npc_class", + "id": "NC_TACOMA_Dana", + "name": { "str": "baker" }, + "job_description": "I'm just trying to survive.", + "common": false, + "//": "Dana is a young woman who survived with her husband, but she was pregnant and lost the baby. This class def is for after she moves to Tacoma.", + "worn_override": "TACOMA_Dana_worn", + "carry_override": "TACOMA_Dana_carried", + "weapon_override": "EMPTY_GROUP", + "traits": [ + { "trait": "PAINRESIST" }, + { "trait": "MYOPIC" }, + { "trait": "NO_BASH" }, + { "trait": "RETURN_TO_START_POS" }, + { "trait": "hair_ponytail", "variant": "red" }, + { "trait": "SKIN_LIGHT" }, + { "trait": "eye_color", "variant": "blue" } + ], + "skills": [ + { "skill": "cooking", "bonus": 6 }, + { "skill": "cutting", "bonus": 3 }, + { "skill": "driving", "bonus": 2 }, + { "skill": "fabrication", "bonus": 1 }, + { "skill": "melee", "bonus": 3 }, + { "skill": "speech", "bonus": 1 }, + { "skill": "survival", "bonus": 1 }, + { "skill": "unarmed", "bonus": 1 } + ] + }, + { + "type": "item_group", + "id": "TACOMA_Dana_worn", + "subtype": "collection", + "entries": [ + { "item": "bra" }, + { "item": "panties" }, + { "item": "socks" }, + { "item": "longshirt" }, + { "item": "jeans" }, + { "item": "leather_belt" }, + { "item": "jacket_leather" }, + { "item": "apron_leather" }, + { "item": "boots" }, + { "item": "purse" }, + { "item": "glock_17", "ammo-item": "9mm", "container-item": "holster", "charges": 17 }, + { "item": "machete", "container-item": "scabbard" } + ] + }, + { + "type": "item_group", + "id": "TACOMA_Dana_carried", + "subtype": "collection", + "entries": [ { "item": "bandages", "count": 3 } ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Dana_1", + "dynamic_line": "*stands in the middle of a cramped kitchen, covered in flour. The scene looks reminiscent of easier times, but the illusion is broken as he apron shifts to reveal a heavy machete and holstered pistol on her belt. She looks up as you approach, then beams in recognition. \"Welcome to Dana's Bakery, stranger!\" She laughs brightly. \"Glad you made out this way. What can I do for you?\"", + "responses": [ + { "text": "Hi Dana, how are things here?", "topic": "TALK_TACOMA_Dana_2" }, + { "text": "Got any bread for sale?", "topic": "TALK_TACOMA_Dana_Baking" }, + { "text": "Hello, Dana! What's with the trailer?", "topic": "TALK_TACOMA_Dana_Trailer1" }, + { + "text": "Hey, Pablo! Dana said you had some plans to build a bakery?", + "topic": "TALK_TACOMA_Dana_Bakery1", + "condition": { "u_has_var": "tacoma_bakery", "context": "knowledge", "value": "knows" } + }, + { "text": "Nice to see you Dana, I'm just checking in.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Dana_2", + "dynamic_line": "Not bad. Much better than before. Pablo and I have privacy, and the folks here actually appreciate my bread instead of paying me a pittance for it and then taking it to the basement without so much as a 'thanks'.", + "responses": [ + { "text": "What's with the trailer?", "topic": "TALK_TACOMA_Dana_Trailer1" }, + { + "text": "Any luck with the pregnancy?", + "topic": "TALK_TACOMA_Dana_Pregnancy", + "condition": { "u_has_var": "dana_pregnancy", "context": "knowledge", "value": "knows" } + }, + { "text": "I'd better go. See you later.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Dana_Baking", + "//": "Remainder of this topic is stored in npcs/surface_refugees/NPC_Dana_Nunez.json with her other refugee talk_topics.", + "responses": [ + { "text": "I'll look into that. What were you saying before?.", "topic": "TALK_NONE" }, + { "text": "I'll look into that. I'd better get going though.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Dana_Trailer1", + "dynamic_line": "Ha, this thing!\" She dusts the flour off her hands and tucks a loose lock of hair back behind her ear. \"You remember, we signed on as caravan hands to get us out here. Well, we had a bunch of stops along the way first. We were headed to a little group of survivors that snagged themselves a huge stock of dry food somehow, and passed this trailer sales yard smack dab in the middle of nowhere, nobody to be seen for miles. Pablo managed to sweet talk the group into taking a rest stop there. We searched the yard, and a lot of the stuff wasn't suitable, but this baby was ready to go. Long story short, we got the keys to that vintage truck outside, hitched this thing up, and upgraded our caravan.\"", + "responses": [ + { "text": "How did you get the keys to the truck?", "topic": "TALK_TACOMA_Dana_TrailerKeys" }, + { "text": "What made this trailer so good?", "topic": "TALK_TACOMA_Dana_Trailer2" }, + { + "text": "Any luck with the pregnancy?", + "topic": "TALK_TACOMA_Dana_Pregnancy", + "condition": { "u_has_var": "dana_pregnancy", "context": "knowledge", "value": "knows" } + }, + { "text": "I'd better go. See you later.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Dana_TrailerKeys", + "dynamic_line": "*turns serious. \"We went inside the dealership to see if they were there. Owner was still in there. I… I think he took his own life, maybe figured destroying the brain would keep him from reviving. It… it didn't. The shotgun took out enough though, he couldn't, uh, he couldn't really see. Just this miserable, half-faced… we put him down. I think we did him a favor, if there was any of him left in there. Didn't feel wrong going through his pockets. Gross, but not wrong.\" She blows out a stream of air, sending a small cloud of flour rising in the air, then shrugs.", + "responses": [ + { "text": "What made this trailer so good?", "topic": "TALK_TACOMA_Dana_Trailer2" }, + { "text": "I'd better go. See you later.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Dana_Trailer2", + "dynamic_line": "It's all propane!\" She grins. \"The oven, especially. We don't need electric, which means we don't need to run the gennie and attract attention.\"", + "responses": [ + { "text": "Seems like a tiny kitchen for a bakery.", "topic": "TALK_TACOMA_Dana_Trailer3" }, + { + "text": "Won't you run out of propane?", + "topic": "TALK_TACOMA_Dana_TrailerPropane", + "condition": { "not": { "u_has_var": "propane_scavenging", "context": "knowledge", "value": "knows" } } + }, + { "text": "I'd better go. See you later.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Dana_Trailer3", + "dynamic_line": "*sighs and nods. \"Making do with what I've got, but yeah. I can only crank out a couple loaves a day, and can't do anything fun. Pablo has been talking about setting me up a separate kitchen to really get going, but we've got so much critical work to do, and fresh bread is a luxury, even if it's great for morale.\"", + "speaker_effect": { "effect": { "u_add_var": "tacoma_bakery", "context": "knowledge", "value": "knows" } }, + "responses": [ + { "text": "Seems like a tiny kitchen for a bakery.", "topic": "TALK_TACOMA_Dana_Trailer3" }, + { + "text": "Any luck with the pregnancy?", + "topic": "TALK_TACOMA_Dana_Pregnancy", + "condition": { "u_has_var": "dana_pregnancy", "context": "knowledge", "value": "knows" } + }, + { "text": "I'd better go. See you later.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Dana_TrailerPropane", + "dynamic_line": "You bet we will. We've been collecting tanks and have enough for a while, but I'm burning through it faster than the scavengers can bring in more. Pablo is working out some plans with the others to get me a real wood fired kitchen soon, and that'll also boost my capacity. Maybe he could give you some scavenging work if you ask.", + "speaker_effect": { "effect": { "u_add_var": "propane_scavenging", "context": "knowledge", "value": "knows" } }, + "responses": [ + { "text": "Seems like a tiny kitchen for a bakery.", "topic": "TALK_TACOMA_Dana_Trailer3" }, + { "text": "I'd better go. See you later.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Dana_Pregnancy", + "dynamic_line": "*shrugs. \"We got our hands on a few boxes of test strips so that's good. Being stressed isn't good for conception and I've been pretty fuckin' stressed for a while. I like our chances a lot better now, that's for sure. And, well, we've got our own private space at least.\" She smirks and then blushes slightly, hiding it by fiddling with her baking project.", + "responses": [ + { "text": "What's with the trailer?", "topic": "TALK_TACOMA_Dana_Trailer1" }, + { "text": "I'd better go. See you later.", "topic": "TALK_DONE" } + ] + } +] diff --git a/data/json/npcs/tacoma_ranch/Nunez/NPC_Pablo_Tacoma.json b/data/json/npcs/tacoma_ranch/Nunez/NPC_Pablo_Tacoma.json new file mode 100644 index 0000000000000..dbbaca488fde4 --- /dev/null +++ b/data/json/npcs/tacoma_ranch/Nunez/NPC_Pablo_Tacoma.json @@ -0,0 +1,315 @@ +[ + { + "type": "npc", + "id": "tacoma_PabloNunez", + "name_unique": "Pablo Nunez", + "gender": "male", + "name_suffix": "bookkeeper", + "class": "NC_TACOMA_Pablo", + "attitude": 0, + "mission": 7, + "chat": "TALK_TACOMA_Pablo_1", + "age": 28, + "height": 184, + "str": 10, + "dex": 8, + "int": 10, + "per": 10, + "personality": { "aggression": 1, "bravery": 3, "collector": 1, "altruism": 3 }, + "faction": "free_merchants" + }, + { + "type": "npc_class", + "id": "NC_TACOMA_Pablo", + "name": { "str": "Bookkeeper" }, + "job_description": "I'm just trying to survive.", + "common": false, + "//": "Pablo is a young professional who survived with his wife, but she was pregnant and lost the baby.", + "worn_override": "TACOMA_Pablo_worn", + "carry_override": "TACOMA_Pablo_carried", + "weapon_override": "TACOMA_Pablo_wield", + "traits": [ + { "trait": "QUICK" }, + { "trait": "Exp_Bookkeeping1" }, + { "trait": "SKIN_MEDIUM" }, + { "trait": "eye_color", "variant": "brown" }, + { "trait": "hair_short", "variant": "black" }, + { "trait": "NO_BASH" }, + { "trait": "RETURN_TO_START_POS" } + ], + "skills": [ + { "skill": "bashing", "bonus": 3 }, + { "skill": "computer", "bonus": 4 }, + { "skill": "cooking", "bonus": 1 }, + { "skill": "driving", "bonus": 2 }, + { "skill": "fabrication", "bonus": 2 }, + { "skill": "mechanics", "bonus": 2 }, + { "skill": "melee", "bonus": 3 }, + { "skill": "speech", "bonus": 2 }, + { "skill": "swimming", "bonus": 1 } + ] + }, + { + "type": "item_group", + "id": "TACOMA_Pablo_worn", + "subtype": "collection", + "entries": [ + { "item": "boxer_briefs" }, + { "item": "socks" }, + { "item": "tank_top" }, + { "item": "striped_shirt" }, + { "item": "pants" }, + { "item": "armor_scrapsuit" }, + { "item": "helmet_scrap" }, + { "item": "motorbike_boots" } + ] + }, + { + "type": "item_group", + "id": "TACOMA_Pablo_carried", + "subtype": "collection", + "entries": [ { "item": "knife_swissarmy" } ] + }, + { + "type": "item_group", + "id": "TACOMA_Pablo_wield", + "subtype": "collection", + "entries": [ { "item": "bat_metal" } ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Pablo_1", + "dynamic_line": "*looks up at you from a ledger, takes a moment to place you, then smiles broadly. \"Great to see you, my friend. To what do I owe the pleasure?\"", + "responses": [ + { "text": "Hi, Pablo! How are things going here?", "topic": "TALK_TACOMA_Pablo_2" }, + { "text": "Hello, Pablo! What's with the trailer?", "topic": "TALK_TACOMA_Pablo_Trailer1" }, + { + "text": "Hey, Pablo! I heard you might be willing to trade for propane?", + "topic": "TALK_TACOMA_Pablo_Propane1", + "condition": { "u_has_var": "propane_scavenging", "context": "knowledge", "value": "knows" } + }, + { + "text": "Hey, Pablo! Dana said you had some plans to build a bakery?", + "topic": "TALK_TACOMA_Pablo_Bakery1", + "condition": { "u_has_var": "tacoma_bakery", "context": "knowledge", "value": "knows" } + }, + { "text": "Just popping in to say hi. Talk to you later!", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Pablo_2", + "dynamic_line": "Can't complain,\" he stretches his neck and pops his shoulder. \"No, really, I can't. The work is hard, but people here really want to *do* something, not just hide inside and hope someone saves us. I've been helping doing general labor a bit, but also working out an inventory system for our supplies. It's already helped us get a few important bits in earlier than we'd have noticed otherwise. Post-apocalyptic accounting, ha! Who'd have thought?\"", + "responses": [ + { "text": "Keeping inventory is similar to accounting? Really?", "topic": "TALK_TACOMA_Pablo_Accounting1" }, + { "text": "What were you saying before?", "topic": "TALK_NONE" }, + { "text": "Well, I'd better go.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Pablo_Accounting1", + "dynamic_line": "If you want the honest truth, only a bit. It's not much like filing income tax. Still, I know my way around a spreadsheet and I don't mind staring at numbers all day. I think people were dubious at first, but now that it's starting to show real value they're coming around.\"", + "responses": [ + { "text": "What were you saying before?", "topic": "TALK_NONE" }, + { "text": "Well, I'd better go.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Pablo_Trailer1", + "dynamic_line": "Oh, Dana tells that story better than me. Basically we found it at an old trailer park and she liked the bakery, so we figured out a way to get it back here. We definitely earned some cred for coming with our own shelter.", + "responses": [ + { "text": "What were you saying before?", "topic": "TALK_NONE" }, + { "text": "Well, I'd better go.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Pablo_Bakery1", + "dynamic_line": "Yeah, she would say that.\" He makes intense eye contact. \"Not just a bakery, my friend. A real, post apocalyptic, honest-to-god culinary experience! We're planning to grow food and crops here. Central's plan is to import our crops directly, and pay us for our work. I don't think they've even thought much about transport, outside just shipping them back home. If we do local site processing we can prevent storage losses, and make higher value material to sell out! And Central still benefits from having a dedicated bread basket!", + "responses": [ + { "text": "Do you know anything about building a 'culinary experience'?", "topic": "TALK_TACOMA_Pablo_Bakery2" }, + { "text": "What were you saying before?", "topic": "TALK_NONE" }, + { "text": "Well, I'd better go.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Pablo_Bakery2", + "dynamic_line": "I'm being a bit tongue-in-cheek there. Really I want some big wood fired ovens, tools for milling grain, tinning and canning equipment, stuff like that. We'll make flour, jam, pickles, bread, maybe some sauerkraut and things. All the old school ways of preserving food, from before fridges were commonplace.", + "responses": [ + { "text": "Okay, but do you know anything about that?", "topic": "TALK_TACOMA_Pablo_Bakery3" }, + { "text": "What were you saying before?", "topic": "TALK_NONE" }, + { "text": "Well, I'd better go.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Pablo_Bakery3", + "dynamic_line": "Well…\" he tugs jokingly at his collar as though letting off steam. \"I know a bit. I used to make pickles and jams as a hobby. With my mom. When I was a teenager. But I know the principles! And Dana knows more than you'd think about grain and flour because she's a huge nerd for her craft. We do have some knowledge gaps between design and implementation though.", + "responses": [ + { "text": "What kind of gaps?", "topic": "TALK_TACOMA_Pablo_Bakery4" }, + { "text": "What were you saying before?", "topic": "TALK_NONE" }, + { "text": "Well, I'd better go.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Pablo_Bakery4", + "dynamic_line": "Not where you might think.\" He sets aside his ledger and pulls out a page of bullet-point notes written in neat block letters. \"Everyone is on board with the idea and the amount of actual building to get it online is small enough that the carpenters are willing to help out, so I don't need any assistance with design. For the really short term I basically just need materials. I've been collecting spare wood, but to get a good wood-fired oven I need to secure a source of firebrick. In the longer run, Dana knows the principles of milling, but I need a resource book if I want to set up a functioning mill, first a muscle-powered one and then a windmill for long term. I wish I'd thought of asking Jenny. She's a mechanical engineer, but she would probably know how to get me started at least. I'm also still looking into how to make a good vermin-proof cellar. Longer term, I will need to work my way around our reliance on sugar, salt, and vinegar from before the cataclysm, but our stocks of those will hold out for months while I sort things out.", + "speaker_effect": { + "effect": [ + { "u_add_var": "tacoma_mill", "context": "message_jenny", "value": "known" }, + { "u_add_var": "tacoma_bakery", "context": "firebricks", "value": "known" }, + { "u_add_var": "tacoma_bakery", "context": "rootcellar", "value": "known" } + ] + }, + "responses": [ + { "text": "What were you saying before?", "topic": "TALK_NONE" }, + { "text": "Well, I'd better go.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Pablo_Bakery-Firebricks1", + "dynamic_line": "Seriously? You've already done so much. I won't say no, though.", + "speaker_effect": { + "effect": [ + { "assign_mission": "MISSION_TACOMA_Pablo_Firebricks" }, + { "u_add_var": "tacoma_bakery", "context": "firebricks", "value": "helped" } + ] + }, + "responses": [ + { "text": "No problem. What were you saying before?", "topic": "TALK_NONE" }, + { "text": "Well, I'd better go look into that.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Pablo_Bakery-Engineer1", + "dynamic_line": "I… I honestly don't know why I didn't think of that. I could even have asked the supply caravans to do it. If it comes down to it though, I trust you more than them. Would you mind?", + "speaker_effect": { + "effect": [ + { "assign_mission": "MISSION_TACOMA_Pablo_Message" }, + { "u_add_var": "tacoma_mill", "context": "message_jenny", "value": "helped" } + ] + }, + "responses": [ + { "text": "Sure. What were you saying before?", "topic": "TALK_NONE" }, + { "text": "Sure, I'll see what I can do.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_TACOMA_Pablo_Bakery-RootCellar1", + "dynamic_line": "Oh… oh, ok! It's a good thing you showed me this, my basic guesses missed some important points. Thanks, this will be helpful for a lot more than just the bakery.", + "speaker_effect": { "effect": { "npc_add_var": "tacoma_bakery", "context": "rootcellar", "value": "helped" } }, + "responses": [ + { "text": "No problem. What were you saying before?", "topic": "TALK_NONE" }, + { "text": "Any time! But I'd better go.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": [ + "TALK_TACOMA_Pablo_2", + "TALK_TACOMA_Pablo_Trailer1", + "TALK_TACOMA_Pablo_Accounting1", + "TALK_TACOMA_Pablo_Bakery1", + "TALK_TACOMA_Pablo_Bakery-Firebricks1", + "TALK_TACOMA_Pablo_Bakery-Engineer1", + "TALK_TACOMA_Pablo_Bakery-RootCellar1" + ], + "//": "table of contents", + "insert_before_standard_exits": true, + "responses": [ + { + "text": "I heard you might be willing to trade for propane?", + "topic": "TALK_TACOMA_Pablo_Propane1", + "condition": { "u_has_var": "propane_scavenging", "context": "knowledge", "value": "knows" } + }, + { + "text": "Dana said you had some plans to build a bakery?", + "topic": "TALK_TACOMA_Pablo_Bakery1", + "condition": { "u_has_var": "tacoma_bakery", "context": "knowledge", "value": "knows" } + }, + { + "text": "I don't mind keeping my eye out for some firebricks for you.", + "topic": "TALK_TACOMA_Pablo_Bakery-Firebricks1", + "//": "temporarily disabled by making the condition impossible to achieve.", + "condition": { + "and": [ + { "u_has_var": "tacoma_bakery", "context": "firebricks", "value": "known_deleted" }, + { "not": { "u_has_var": "tacoma_bakery", "context": "firebricks", "value": "helped" } } + ] + } + }, + { + "text": "I can pass a note to Jenny about helping with the mill designs, if you want.", + "topic": "TALK_TACOMA_Pablo_Bakery-Engineer1", + "//": "temporarily disabled by making the condition impossible to achieve.", + "condition": { + "and": [ + { "u_has_var": "tacoma_mill", "context": "message_jenny", "value": "known_deleted" }, + { "not": { "u_has_var": "tacoma_mill", "context": "message_jenny", "value": "helped" } } + ] + } + }, + { + "text": "[Survival 4, Fabrication 4] I know how to build a good root cellar. Here, let me show you.", + "topic": "TALK_TACOMA_Pablo_Bakery-RootCellar1", + "condition": { + "and": [ + { "math": [ "u_skill('survival')", ">=", "4" ] }, + { "math": [ "u_skill('fabrication')", ">=", "4" ] }, + { "u_has_var": "tacoma_bakery", "context": "rootcellar", "value": "known" }, + { "not": { "npc_has_var": "tacoma_bakery", "context": "rootcellar", "value": "helped" } } + ] + } + } + ] + }, + { + "id": "MISSION_TACOMA_Pablo_Firebrick", + "type": "mission_definition", + "name": { "str": "Get Pablo some fire bricks." }, + "goal": "MGOAL_FIND_ITEM", + "difficulty": 2, + "value": 1000, + "origins": [ "ORIGIN_SECONDARY" ], + "item": "fire_brick", + "count": 20, + "dialogue": { + "describe": "Find some fire bricks to help Pablo build an oven.", + "offer": "n/a", + "accepted": "n/a", + "rejected": "n/a", + "advice": "n/a", + "inquire": "n/a", + "success": "n/a", + "success_lie": "n/a", + "failure": "n/a" + } + }, + { + "id": "MISSION_TACOMA_Pablo_Message", + "type": "mission_definition", + "name": { "str": "Pass a message to Jenny Forcette." }, + "goal": "MGOAL_NULL", + "difficulty": 2, + "value": 1000, + "origins": [ "ORIGIN_SECONDARY" ], + "dialogue": { + "describe": "Ask Jenny Forcette if she can help Pablo Nunez with his mill designs.", + "offer": "n/a", + "accepted": "n/a", + "rejected": "n/a", + "advice": "n/a", + "inquire": "n/a", + "success": "n/a", + "success_lie": "n/a", + "failure": "n/a" + } + } +]