diff --git a/data/json/mapgen/cabin.json b/data/json/mapgen/cabin.json index a61a9698d927d..bc970129081cf 100644 --- a/data/json/mapgen/cabin.json +++ b/data/json/mapgen/cabin.json @@ -839,5 +839,92 @@ "palettes": [ "roof_palette" ], "terrain": { ".": "t_tar_flat_roof" } } + }, + { + "method": "json", + "om_terrain": "cabin_lapin", + "type": "mapgen", + "weight": 150, + "object": { + "fill_ter": "t_floor", + "rows": [ + "........................", + "........................", + ".........._____.........", + "........_________.......", + "........_#w#+#w#_.......", + "........_wb cw_.......", + ".....____#b ct#____....", + "....._##w###=###w##_....", + "...___#15SFR &# BB#_....", + "...___w2 R# BBw_....", + "..____w3 CC + D#_....", + "..____#y ll #####%....", + "..____+ + D#_....", + "...___#cttc#+## BBw_....", + "...___#cttc# T# BB#_....", + "....._##ww######w##_....", + "....._______________....", + ".............._.........", + "..#####IIIIIIIHIIII.....", + "..#___#___________I.....", + "..#___________....I.....", + "..#___#...........I.....", + "..#####IIIIIIIIIIII.....", + "........................" + ], + "palettes": [ "cabin_palette" ], + "terrain": { + ".": [ + [ "t_grass", 6 ], + "t_dirt", + "t_tree_dead", + "t_tree_maple", + "t_tree_young", + "t_tree", + [ "t_tree_pine", 2 ], + [ "t_underbrush", 3 ] + ], + "_": [ "t_dirt", [ "t_grass", 6 ] ] + }, + "place_monster": [ { "monster": "mon_rabbit", "x": 8, "y": 21, "repeat": [ 3, 6 ] } ], + "place_npcs": [ { "class": "warrener", "x": 9, "y": 17 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "cabin_roof_lapin", + "object": { + "fill_ter": "t_tar_flat_roof", + "rows": [ + " ", + " ", + " ", + " ", + " |222223 ", + " |.....3 ", + " |.....3 ", + " |22|.....3223 ", + " |..~........3 ", + " |...........3 ", + " |...........3 ", + " |...........5 ", + " |...........3 ", + " |...........3 ", + " |...........3 ", + " |-----------3 ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_tar_flat_roof" } + } } ] diff --git a/data/json/mapgen_palettes/cabin.json b/data/json/mapgen_palettes/cabin.json index e4e5a7e44d32a..e01af4d35cac8 100644 --- a/data/json/mapgen_palettes/cabin.json +++ b/data/json/mapgen_palettes/cabin.json @@ -20,7 +20,9 @@ "W": [ [ "t_window_boarded", 2 ], "t_window" ], "%": "t_gutter_downspout", "q": "t_swater_sh", - "Q": "t_water_dp" + "Q": "t_water_dp", + "H": "t_chickenwire_gate_c", + "I": "t_chickenwire_fence" }, "furniture": { "a": "f_armchair", diff --git a/data/json/npcs/holdouts/Mr_Lapin.json b/data/json/npcs/holdouts/Mr_Lapin.json new file mode 100644 index 0000000000000..253d690abf44c --- /dev/null +++ b/data/json/npcs/holdouts/Mr_Lapin.json @@ -0,0 +1,157 @@ +[ + { + "type": "npc", + "id": "warrener", + "//": "A survivor raising rabbits, all by themsleves. Give special quests to give rabbits to player", + "name_unique": "Mr Lapin", + "name_suffix": "Warrener", + "gender": "male", + "class": "NC_Rabbit_Raiser", + "attitude": 0, + "mission": 7, + "mission_offered": "MISSION_Warrener_LOG_1", + "chat": "TALK_WARRENER", + "faction": "no_faction" + }, + { + "type": "npc_class", + "id": "NC_Rabbit_Raiser", + "name": "Mr Lapin", + "job_description": "I raise rabbits.", + "//": "This is a unique NPC who doesn't get randomly selected background traits", + "common": false, + "skills": [ + { + "skill": "ALL", + "level": { "mul": [ { "one_in": 3 }, { "sum": [ { "dice": [ 2, 2 ] }, { "constant": -2 }, { "one_in": 4 } ] } ] } + }, + { "skill": "survival", "bonus": { "rng": [ 1, 5 ] } }, + { "skill": "melee", "bonus": { "rng": [ 2, 4 ] } } + ], + "traits": [ + [ "FLEET2", 100 ], + [ "GOODHEARING", 100 ], + [ "DEFT", 100 ], + [ "ANIMALEMPATH2", 100 ], + [ "LIGHTFUR", 100 ], + [ "HOOVES", 100 ] + ] + }, + { + "type": "talk_topic", + "id": "TALK_WARRENER", + "dynamic_line": { "u_is_wearing": "badge_marshal", "yes": "Are you here to protect us?", "no": "Pleased to meet you." }, + "responses": [ + { "text": "I'm just trying to get by.", "topic": "TALK_WARRENER_TRYING" }, + { "text": "What are you doing here?", "topic": "TALK_WARRENER_DOING" }, + { "text": "Heard anything about the outside world?", "topic": "TALK_WARRENER_WORLD" }, + { "text": "You look different?", "topic": "TALK_WARRENER_MUTATION" }, + { "text": "Anything I can help with?", "topic": "TALK_MISSION_LIST" }, + { "text": "Well, bye.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_WARRENER_TRYING", + "dynamic_line": "Getting by will do for now.", + "responses": [ { "text": "I guess it has to.", "topic": "TALK_WARRENER" } ] + }, + { + "type": "talk_topic", + "id": "TALK_WARRENER_DOING", + "dynamic_line": "I raise my rabbits, I seem to have more in common with them every day.", + "responses": [ { "text": "Well, then…", "topic": "TALK_WARRENER" } ] + }, + { + "type": "talk_topic", + "id": "TALK_WARRENER_WORLD", + "dynamic_line": "People come to me to learn how to keep rabbits. They learn and they go. I like to think I'm making the world better.", + "responses": [ + { "text": "…", "topic": "TALK_WARRENER" }, + { "text": "That sounds optimistic?", "topic": "TALK_WARRENER_WORLD_OPTIMISTIC" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_WARRENER_WORLD_OPTIMISTIC", + "dynamic_line": "If I teach one hundred people how to raise rabbits, that's potentially a hundred communities given food and fur before those people teach anyone else.", + "responses": [ { "text": "That's the most hopeful thing I've heard so far.", "topic": "TALK_WARRENER" } ] + }, + { + "type": "talk_topic", + "id": "TALK_WARRENER_MUTATION", + "dynamic_line": { + "u_has_any_trait": [ "CANINE_EARS", "LUPINE_EARS", "FELINE_EARS", "URSINE_EARS", "ELFA_EARS", "LIGHTFUR" ], + "yes": "Same way you got yours, I bet.", + "no": "CRISPR? Radiation? Something in the water? Maybe it was bunnies." + }, + "responses": [ + { "text": "So it goes", "topic": "TALK_WARRENER" }, + { "text": "You're disgusting.", "topic": "TALK_WARRENER_MUTATION_INSULT" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_WARRENER_MUTATION_INSULT", + "dynamic_line": { + "u_has_any_trait": [ "CANINE_EARS", "LUPINE_EARS", "FELINE_EARS", "URSINE_EARS", "ELFA_EARS", "LIGHTFUR" ], + "yes": "I'm very sorry to tell you this, but you should look in a mirror.", + "no": "Insulting people who could help you is unlikely to aid survival." + }, + "responses": [ + { + "text": "…", + "success": { "effect": "end_conversation", "opinion": { "trust": -1, "fear": -2, "value": -1, "anger": 1 }, "topic": "TALK_DONE" } + } + ] + }, + { + "id": "MISSION_Warrener_LOG_1", + "type": "mission_definition", + "name": "Timber!", + "description": "Bring five logs.", + "goal": "MGOAL_FIND_ITEM", + "difficulty": 1, + "value": 0, + "item": "log", + "count": 5, + "origins": [ "ORIGIN_SECONDARY" ], + "followup": "MISSION_Warrener_FOOD_2", + "dialogue": { + "describe": "I need 5 logs for fences.", + "offer": "I need to build fences and ditches around my rabbits. Could you find about… five logs for me?", + "accepted": "Don't forget to tell me when you have them.", + "rejected": "It's okay, I can do without them. Just let me know if you reconsider.", + "advice": "There's a lot of places to look. Trees are pretty common.", + "inquire": "How is the search going? Have you found'em?", + "success": "I really apreciate your help. Don't worry, you won't leave empty-handed.", + "success_lie": "Thanks for trying… I guess.", + "failure": "Don't worry about it, it's not that important." + }, + "end": { "effect": [ { "u_buy_item": "cattlefodder", "count": 2 } ] } + }, + { + "id": "MISSION_Warrener_FOOD_2", + "type": "mission_definition", + "name": "Sweets", + "description": "Find 25 blackberries.", + "goal": "MGOAL_FIND_ITEM", + "difficulty": 2, + "value": 0, + "item": "blackberries", + "count": 25, + "origins": [ "ORIGIN_SECONDARY" ], + "dialogue": { + "describe": "I need 25 blackberries.", + "offer": "Fruits would let me break the monotony of grains and meats.", + "accepted": "Thanks for accepting this task. Otherwise I might kill a stranger for some oranges. Just kidding.", + "rejected": "Just let me know if you change your mind.", + "advice": "Find someone growing berries or an orchard.", + "inquire": "Have you found the fruit?", + "success": "Thank you for your help. Here's your reward.", + "success_lie": "Thanks for trying… I guess.", + "failure": "It's not a big deal, it isn't that urgent." + }, + "end": { "effect": [ { "u_buy_item": "petpack", "count": 1 } ] } + } +] diff --git a/data/json/overmap/overmap_special/specials.json b/data/json/overmap/overmap_special/specials.json index 72f9c6e06043e..646e756fe0b12 100644 --- a/data/json/overmap/overmap_special/specials.json +++ b/data/json/overmap/overmap_special/specials.json @@ -314,6 +314,19 @@ "occurrences": [ 0, 2 ], "flags": [ "CLASSIC" ] }, + { + "type": "overmap_special", + "id": "Cabin_Lapin", + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "cabin_lapin_north" }, + { "point": [ 0, 0, 1 ], "overmap": "cabin_roof_lapin_north" } + ], + "locations": [ "wilderness" ], + "city_distance": [ 20, -1 ], + "city_sizes": [ 0, 20 ], + "occurrences": [ 0, 1 ], + "flags": [ "CLASSIC" ] + }, { "type": "overmap_special", "id": "Strange Cabin", diff --git a/data/json/overmap/overmap_terrain/overmap_terrain.json b/data/json/overmap/overmap_terrain/overmap_terrain.json index 36987631da696..9ac1966fc9fa3 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain.json @@ -445,6 +445,26 @@ "see_cost": 5, "extras": "build" }, + { + "type": "overmap_terrain", + "id": "cabin_lapin", + "name": "cabin", + "sym": "C", + "color": "i_green", + "see_cost": 5, + "extras": "build", + "mondensity": 2, + "flags": [ "RISK_LOW", "SOURCE_SAFETY", "SOURCE_FOOD" ] + }, + { + "type": "overmap_terrain", + "id": "cabin_roof_lapin", + "name": "cabin roof", + "sym": "C", + "color": "i_green", + "see_cost": 5, + "extras": "build" + }, { "type": "overmap_terrain", "id": "dirtroad1_aban1",