diff --git a/data/json/effect_on_condition.json b/data/json/effect_on_condition.json index 5851c9e0162fa..8a70e2716e9f8 100644 --- a/data/json/effect_on_condition.json +++ b/data/json/effect_on_condition.json @@ -563,5 +563,94 @@ ] } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_BANDIT_ASSASSIN", + "recurrence": [ "7 days", "14 days" ], + "condition": { + "and": [ + { "compare_int": [ { "faction_like": "hells_raiders" }, "<", { "const": -40 } ] }, + { "compare_int": [ { "faction_like": "hells_raiders" }, ">", { "const": -60 } ] }, + { "days_since_cataclysm": 9 }, + { "not": { "is_weather": "portal_storm" } }, + { "not": { "u_near_om_location": "godco_enter", "range": 4 } }, + { "not": { "u_near_om_location": "evac_center_18", "range": 4 } }, + { "not": { "u_near_om_location": "pagan_cult_enter", "range": 4 } }, + { "not": { "u_near_om_location": "lumbermill_0_0_ocu", "range": 4 } }, + { "not": { "u_near_om_location": "smallscrapyard_ocu", "range": 4 } } + ] + }, + "effect": [ { "mapgen_update": "bandit_killer_add" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_BANDIT_ASSASSIN_2", + "recurrence": [ "7 days", "14 days" ], + "condition": { + "and": [ + { "compare_int": [ { "faction_like": "hells_raiders" }, "<", { "const": -60 } ] }, + { "compare_int": [ { "faction_like": "hells_raiders" }, ">", { "const": -90 } ] }, + { "days_since_cataclysm": 15 }, + { "not": { "is_weather": "portal_storm" } }, + { "not": { "u_near_om_location": "godco_enter", "range": 4 } }, + { "not": { "u_near_om_location": "evac_center_18", "range": 4 } }, + { "not": { "u_near_om_location": "pagan_cult_enter", "range": 4 } }, + { "not": { "u_near_om_location": "lumbermill_0_0_ocu", "range": 4 } }, + { "not": { "u_near_om_location": "smallscrapyard_ocu", "range": 4 } } + ] + }, + "effect": [ { "mapgen_update": "bandit_killer_add" }, { "mapgen_update": "bandit_killer_add" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_BANDIT_ASSASSIN_3", + "recurrence": [ "7 days", "14 days" ], + "condition": { + "and": [ + { "compare_int": [ { "faction_like": "hells_raiders" }, "<", { "const": -90 } ] }, + { "days_since_cataclysm": 21 }, + { "not": { "is_weather": "portal_storm" } }, + { "not": { "u_near_om_location": "godco_enter", "range": 4 } }, + { "not": { "u_near_om_location": "evac_center_18", "range": 4 } }, + { "not": { "u_near_om_location": "pagan_cult_enter", "range": 4 } }, + { "not": { "u_near_om_location": "lumbermill_0_0_ocu", "range": 4 } }, + { "not": { "u_near_om_location": "smallscrapyard_ocu", "range": 4 } } + ] + }, + "effect": [ + { "mapgen_update": "bandit_killer_add" }, + { "mapgen_update": "bandit_killer_add" }, + { "mapgen_update": "bandit_killer_add" } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_OLD_GUARD_ASSASSIN", + "recurrence": [ "7 days", "14 days" ], + "condition": { + "and": [ + { "compare_int": [ { "faction_like": "old_guard" }, "<", { "const": -45 } ] }, + { "days_since_cataclysm": 9 }, + { "not": { "is_weather": "portal_storm" } } + ] + }, + "effect": [ { "mapgen_update": "government_killteam_add" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_EXODII_ASSASSIN", + "recurrence": [ "7 days", "14 days" ], + "condition": { "and": [ { "compare_int": [ { "faction_like": "exodii" }, "<", { "const": -35 } ] }, { "days_since_cataclysm": 5 } ] }, + "effect": [ { "mapgen_update": "exodii_bomb_add" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_ROBOFAC_ASSASSIN", + "recurrence": [ "7 days", "14 days" ], + "condition": { + "and": [ { "compare_int": [ { "faction_like": "robofac" }, "<", { "const": -230 } ] }, { "days_since_cataclysm": 5 } ] + }, + "effect": [ { "mapgen_update": "exodii_bomb_add" } ] } ] diff --git a/data/json/furniture_and_terrain/appliances.json b/data/json/furniture_and_terrain/appliances.json index aad9b005f5c69..97a55c2512833 100644 --- a/data/json/furniture_and_terrain/appliances.json +++ b/data/json/furniture_and_terrain/appliances.json @@ -57,6 +57,7 @@ "epower": "-35 W", "item": "freezer", "requirements": { + "removal": { "time": "2 m" }, "repair": { "skills": [ [ "mechanics", 4 ] ], "time": "60 m", diff --git a/data/json/itemgroups/faction_camps.json b/data/json/itemgroups/faction_camps.json index 59e12fc77cd3f..13ccf3c70ac4d 100644 --- a/data/json/itemgroups/faction_camps.json +++ b/data/json/itemgroups/faction_camps.json @@ -1,219 +1,9 @@ [ { "type": "item_group", - "id": "gathering_faction_base_camp_firewood", + "id": "gathering_faction_camp_firewood", "items": [ [ "stick", 200 ], [ "withered", 10 ], [ "straw_pile", 10 ], [ "splinter", 400 ] ] }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_1", - "items": [ [ "2x4", 100 ], [ "stick", 200 ], [ "rock", 100 ], [ "straw_pile", 100 ], [ "nail", 10 ] ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_2", - "items": [ [ "2x4", 100 ], [ "stick", 200 ], [ "rock", 100 ], [ "nail", 10 ] ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_3", - "items": [ - [ "2x4", 100 ], - [ "stick", 300 ], - [ "rock", 100 ], - [ "straw_pile", 100 ], - [ "nail", 10 ], - [ "sheet_metal", 20 ], - [ "pipe", 30 ] - ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_4", - "items": [ - [ "2x4", 100 ], - [ "stick", 300 ], - [ "rock", 100 ], - [ "straw_pile", 100 ], - [ "nail", 10 ], - [ "sheet_metal", 20 ], - [ "pipe", 30 ], - [ "broketent", 10 ] - ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_5", - "items": [ [ "2x4", 50 ], [ "log", 100 ], [ "stick", 300 ], [ "nail", 10 ], [ "broketent", 10 ] ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_6", - "items": [ - [ "2x4", 100 ], - [ "stick", 300 ], - [ "rock", 100 ], - [ "straw_pile", 100 ], - [ "nail", 10 ], - [ "sheet_metal", 20 ], - [ "pipe", 30 ], - [ "broketent", 10 ], - [ "scrap", 20 ] - ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_7", - "items": [ - [ "2x4", 50 ], - [ "log", 100 ], - [ "stick", 300 ], - [ "nail", 10 ], - [ "broketent", 10 ], - [ "metal_tank", 10 ], - [ "scrap", 20 ] - ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_8", - "items": [ - [ "2x4", 100 ], - [ "stick", 300 ], - [ "rock", 100 ], - [ "straw_pile", 100 ], - [ "nail", 10 ], - [ "sheet_metal", 20 ], - [ "pipe", 30 ], - [ "broketent", 10 ], - [ "scrap", 20 ] - ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_9", - "items": [ - [ "2x4", 10 ], - [ "log", 100 ], - [ "stick", 300 ], - [ "nail", 10 ], - [ "broketent", 10 ], - [ "sheet_metal", 20 ], - [ "scrap", 20 ] - ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_10", - "items": [ [ "2x4", 30 ], [ "log", 100 ], [ "stick", 300 ], [ "nail", 10 ] ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_11", - "items": [ - [ "rock", 100 ], - [ "stick", 100 ], - [ "pipe", 30 ], - [ "2x4", 40 ], - [ "nail", 10 ], - [ "scrap", 40 ], - [ "steel_chunk", 20 ], - [ "broketent", 10 ], - [ "well_pump", 5 ] - ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_12", - "items": [ - [ "withered", 300 ], - [ "straw_pile", 100 ], - [ "vine_30", 50 ], - [ "log", 100 ], - [ "nail", 10 ], - [ "scrap", 20 ], - [ "steel_chunk", 10 ], - [ "broketent", 10 ] - ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_13", - "items": [ - [ "withered", 500 ], - [ "straw_pile", 100 ], - [ "vine_30", 50 ], - [ "log", 100 ], - [ "nail", 10 ], - [ "scrap", 20 ], - [ "steel_chunk", 10 ], - [ "broketent", 10 ] - ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_14", - "items": [ - [ "withered", 100 ], - [ "straw_pile", 50 ], - [ "vine_30", 25 ], - [ "2x4", 50 ], - [ "log", 100 ], - [ "stick", 300 ], - [ "nail", 10 ], - [ "broketent", 30 ], - [ "metal_tank", 10 ], - [ "scrap", 20 ] - ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_15", - "items": [ - [ "2x4", 50 ], - [ "pipe", 50 ], - [ "stick", 300 ], - [ "nail", 10 ], - [ "broketent", 30 ], - [ "metal_tank", 20 ], - [ "scrap", 30 ] - ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_16", - "items": [ [ "2x4", 100 ], [ "stick", 300 ], [ "nail", 20 ], [ "scrap", 30 ] ] - }, - { - "type": "item_group", - "id": "gathering_faction_base_camp_17", - "items": [ - [ "2x4", 10 ], - [ "log", 100 ], - [ "stick", 300 ], - [ "nail", 10 ], - [ "broketent", 10 ], - [ "sheet_metal", 20 ], - [ "scrap", 30 ] - ] - }, - { - "type": "item_group", - "//": "There are no more upgrades for the camp but you shouldn't be punished for that.", - "id": "gathering_faction_base_camp_20", - "items": [ - [ "2x4", 10 ], - [ "log", 100 ], - [ "stick", 300 ], - [ "nail", 10 ], - [ "cotton_patchwork", 100 ], - [ "sheet_metal", 20 ], - [ "scrap", 30 ], - [ "withered", 50 ], - [ "straw_pile", 50 ], - [ "vine_30", 5 ] - ] - }, { "type": "item_group", "id": "foraging_faction_camp_spring", diff --git a/data/json/items/tool/explosives.json b/data/json/items/tool/explosives.json index 62050f5756a7b..c5dc411fe9125 100644 --- a/data/json/items/tool/explosives.json +++ b/data/json/items/tool/explosives.json @@ -1618,5 +1618,31 @@ "explosion": { "power": 69200, "shrapnel": { "casing_mass": 12000, "fragment_mass": 600 } } }, "flags": [ "BOMB", "TRADER_AVOID", "DANGEROUS" ] + }, + { + "id": "exodii_bomb", + "type": "TOOL", + "category": "weapons", + "name": { "str": "strange alien bomb" }, + "description": "A strange device that you do not recognize, shaped like a football and filled with wires, fluids, and other such things. It's making a beeping noise that you don't feel right about.", + "weight": "4400 g", + "volume": "10 L", + "price": 0, + "to_hit": -5, + "bashing": 20, + "material": [ "steel" ], + "symbol": "(", + "color": "light_red", + "initial_charges": 2, + "max_charges": 2, + "turns_per_charge": 1, + "explode_in_fire": true, + "explosion": { "power": 25000, "max_noise": 1200 }, + "use_action": { + "type": "explosion", + "no_deactivate_msg": "The device seems to be a bomb - clear the area immediately!", + "explosion": { "power": 25000, "max_noise": 1200 } + }, + "flags": [ "BOMB", "TRADER_AVOID" ] } ] diff --git a/data/json/mapgen/basecamps/base/modular_hub/version_1/primitive_field.json b/data/json/mapgen/basecamps/base/modular_hub/version_1/primitive_field.json index 64722dc503890..d8b5ac60b3f42 100644 --- a/data/json/mapgen/basecamps/base/modular_hub/version_1/primitive_field.json +++ b/data/json/mapgen/basecamps/base/modular_hub/version_1/primitive_field.json @@ -1,1022 +1,4 @@ [ - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "basecamp_large_tent_west_start", - "object": { - "mapgensize": [ 5, 5 ], - "rows": [ - "WWWWW", - "W;;;W", - "D;;;W", - "W;;;W", - "WWWWW" - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "basecamp_large_tent_west", - "object": { - "mapgensize": [ 5, 5 ], - "rows": [ - "WWWWW", - "W$bbW", - "D;;rW", - "W$bbW", - "WWWWW" - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "basecamp_large_tent_east", - "object": { - "mapgensize": [ 5, 5 ], - "rows": [ - "WWWWW", - "Wbb$W", - "Wr;;D", - "Wbb$W", - "WWWWW" - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_field_hardshell_north_0", - "object": { - "mapgensize": [ 7, 7 ], - "rows": [ - "**''** ", - "'''''* ", - "*3'''' ", - "*3'''' ", - "*''''' ", - "*''''* ", - "*''''* " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_field_hardshell_north_1", - "object": { - "mapgensize": [ 7, 7 ], - "rows": [ - " ** ", - " ", - " (( ", - " tt ", - " (( ", - " o ", - " " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_field_hardshell_north_2", - "object": { - "mapgensize": [ 7, 7 ], - "rows": [ - " ", - "4 ", - " * ", - " * ", - " * ", - " ", - " " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_field_hardshell_south_0", - "object": { - "mapgensize": [ 7, 7 ], - "rows": [ - " ", - "'''''* ", - "'U'''' ", - "*''''' ", - "****** ", - " ", - " " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_field_hardshell_south_1", - "object": { - "mapgensize": [ 7, 7 ], - "rows": [ - " ", - "* ", - "*Q * ", - " 4 ", - " ", - " ", - " " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_field_hardshell_south_2", - "object": { - "mapgensize": [ 7, 7 ], - "rows": [ - " c (( ", - " c tt ", - " (( ", - " ", - " ", - " ", - " " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_field_wall_0", - "object": { - "mapgensize": [ 24, 24 ], - "rows": [ - " ", - " UUUU####", - " #", - "U #", - "U #", - "U #", - "U #", - "U U", - "U U", - "U U", - "U U", - "U U", - "U U", - "U U", - "U U", - "U #", - "U #", - "U #", - "U #", - "# #", - "# #", - "# #", - "# #", - "######UUUUU UUUUUUU####" - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_field_wall_1", - "object": { - "mapgensize": [ 24, 24 ], - "rows": [ - " ", - "########### ####### ", - "# ", - "# ", - "# ", - "# ", - "# ", - "# #", - "# #", - "# #", - "# #", - "# #", - "# #", - "# #", - "# #", - "# ", - "# ", - "# ", - "# ", - " ", - " ", - " ", - " ", - " ###### ####### " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_kitchen_0", - "object": { - "mapgensize": [ 18, 18 ], - "rows": [ - " ", - " ", - " ", - " __ ", - " __ ", - "_______ ", - "_______ ", - "__________UU_____ ", - "___________U_____ ", - "_________________ ", - "_________________ ", - "_________________ ", - "_________________ ", - "____U__ __U_____ ", - "_______ ", - "_______ ", - " _ _ ", - " _ " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_kitchen_1", - "object": { - "mapgensize": [ 18, 18 ], - "rows": [ - " ", - " ", - " ", - " ", - " U ", - " ", - " ", - " ## ## ", - " #c''''F# ", - " #c'''''# ", - " '''''' ", - " '''''' ", - " '''''' ", - "____# # ", - "_______ ", - "_______ ", - " _ _ ", - " _ " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_kitchen_2", - "object": { - "mapgensize": [ 18, 18 ], - "rows": [ - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ******** ", - " * * ", - " * * ", - " * * ", - " *c * ", - " *cc * ", - " ***w*+** ", - "_______ ", - "_______ ", - " _ _ ", - " _ " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_kitchen_3", - "object": { - "mapgensize": [ 18, 18 ], - "rows": [ - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " *** ", - " ''c* ", - " ''y* ", - " ''c* ", - " ''c* ", - " 'cc* ", - " w*** ", - "_______ ", - "_______ ", - " _ _ ", - " _ " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_kitchen_4", - "object": { - "mapgensize": [ 18, 18 ], - "rows": [ - " ", - " ", - " ", - " ", - " U ", - "******* ", - "*'''''* ", - "w''''' ", - "*3'''' ", - "*3'''' ", - "*3''''' ", - "****** ", - " ", - " ", - " ", - " ", - " ", - " _ " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_kitchen_5", - "object": { - "mapgensize": [ 18, 18 ], - "rows": [ - " ", - " ", - " ", - " UU ", - " ", - " ", - " rr ", - " ", - " F ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " y y ", - " " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_kitchen_6", - "object": { - "mapgensize": [ 18, 18 ], - "rows": [ - " ", - " ", - " ", - " ", - " ", - " ", - " rrr ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " 8 " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_kitchen_7", - "object": { - "mapgensize": [ 18, 18 ], - "rows": [ - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " (t oo ", - " (t ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_kitchen_8", - "object": { - "mapgensize": [ 18, 18 ], - "rows": [ - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " 3'''' ", - "*3'''3 ", - "w''''3 ", - "*''''3* ", - "******* ", - " ", - " " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_blacksmith_0", - "object": { - "mapgensize": [ 17, 17 ], - "rows": [ - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "UU____U ", - "U______ ___", - "_______ _U_", - "_______ ___", - "_______ ", - "_______ ", - "U______ ", - "U_____U " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_blacksmith_1", - "object": { - "mapgensize": [ 17, 17 ], - "rows": [ - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ____ ", - " _____U ___", - "_______ _K_", - "_______ ___", - "__f____ ", - "_______ ", - " ______ ", - " U____ " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_blacksmith_2", - "object": { - "mapgensize": [ 8, 8 ], - "rows": [ - "**''*** ", - "*'''''* ", - "''''''' ", - "''''''' ", - "'' '''' ", - "''''''' ", - "*'''''* ", - "**''''* " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_blacksmith_4", - "object": { - "mapgensize": [ 13, 13 ], - "rows": [ - " ''''**", - " t'''''*", - " ''''''", - " ''''''", - " ''''''", - " ''''''", - " ''''''*", - " ''''**", - " ", - " ", - " ", - " ", - " " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_blacksmith_8", - "object": { - "mapgensize": [ 9, 9 ], - "rows": [ - " ", - " ", - "*****w***", - "*'''tt''*", - "w'''((''w", - "*'''''''*", - "**+**w***", - " ", - " " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_blacksmith_9", - "object": { - "mapgensize": [ 9, 9 ], - "rows": [ - " ", - " ", - "$ ", - "$ r t tr", - " ", - " 3 r", - " ", - " ", - " " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_blacksmith_10", - "object": { - "mapgensize": [ 8, 8 ], - "rows": [ - " ", - "**'''** ", - "*'''''* ", - "''''''' ", - "''''''' ", - "''''''' ", - "*'''''* ", - "* " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_blacksmith_11", - "object": { - "mapgensize": [ 6, 6 ], - "rows": [ - " ", - " ", - " ", - " 8 ", - " t ", - " t " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "method": "json", - "nested_mapgen_id": "bc_prim_blacksmith_12", - "object": { - "mapgensize": [ 7, 7 ], - "rows": [ - " ", - " ", - " ", - " ) ", - " T ", - " A ", - " ( " - ], - "palettes": [ "acidia_camp_palette" ] - } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_0", - "method": "json", - "object": { - "set": [ - { "point": "terrain", "id": "t_dirt", "x": 12, "y": 5 }, - { "point": "furniture", "id": "f_bulletin", "x": 12, "y": 5 } - ] - } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_1", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "basecamp_large_tent_west_start" ], "x": 17, "y": 3 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_2", - "method": "json", - "object": { - "set": [ - { "point": "terrain", "id": "t_pit", "x": 13, "y": 5 }, - { "point": "furniture", "id": "f_straw_bed", "x": 19, "y": 4 }, - { "point": "furniture", "id": "f_straw_bed", "x": 20, "y": 4 } - ] - } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_3", - "method": "json", - "object": { - "set": [ - { "point": "furniture", "id": "f_bookcase", "x": 16, "y": 3 }, - { "point": "furniture", "id": "f_bookcase", "x": 16, "y": 4 }, - { "point": "furniture", "id": "f_bookcase", "x": 16, "y": 6 }, - { "point": "furniture", "id": "f_bookcase", "x": 16, "y": 7 } - ] - } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_4", - "method": "json", - "object": { - "set": [ - { "point": "terrain", "id": "t_dirt", "x": 13, "y": 5 }, - { "point": "furniture", "id": "f_brazier", "x": 13, "y": 5 }, - { "point": "furniture", "id": "f_crate_o", "x": 18, "y": 6 }, - { "point": "furniture", "id": "f_crate_o", "x": 18, "y": 4 }, - { "point": "furniture", "id": "f_straw_bed", "x": 19, "y": 6 }, - { "point": "furniture", "id": "f_straw_bed", "x": 20, "y": 6 } - ] - } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_5", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "basecamp_large_tent_east" ], "x": 2, "y": 3 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_6", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_field_hardshell_north_0" ], "x": 9, "y": 9 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_7", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "basecamp_large_tent_east" ], "x": 2, "y": 10 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_8", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_field_hardshell_north_1" ], "x": 9, "y": 9 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_9", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "basecamp_large_tent_west" ], "x": 17, "y": 17 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_10", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_field_hardshell_south_0" ], "x": 9, "y": 15 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_11", - "method": "json", - "object": { - "place_nested": [ - { "chunks": [ "bc_prim_field_hardshell_north_2" ], "x": 9, "y": 9 }, - { "chunks": [ "bc_prim_field_hardshell_south_1" ], "x": 9, "y": 15 } - ] - } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_12", - "method": "json", - "object": { "set": [ { "point": "terrain", "id": "t_water_pump", "x": 10, "y": 5 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_13", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_field_wall_0" ], "x": 0, "y": 0 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_14", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_field_wall_1" ], "x": 0, "y": 0 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_15", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "basecamp_large_tent_west" ], "x": 17, "y": 10 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_16", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_field_hardshell_south_2" ], "x": 9, "y": 15 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_17", - "method": "json", - "object": { - "set": [ - { "point": "terrain", "id": "t_door_c", "x": 11, "y": 23 }, - { "point": "terrain", "id": "t_door_c", "x": 12, "y": 23 }, - { "point": "terrain", "id": "t_door_c", "x": 23, "y": 12 }, - { "point": "terrain", "id": "t_door_c", "x": 11, "y": 1 }, - { "point": "terrain", "id": "t_door_c", "x": 12, "y": 1 } - ] - } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_18", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "basecamp_large_tent_east" ], "x": 2, "y": 17 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_19", - "method": "json", - "object": { "set": [ { "point": "terrain", "id": "t_radio_tower", "x": 12, "y": 21 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_20", - "method": "json", - "object": { "set": [ { "point": "terrain", "id": "t_radio_controls", "x": 13, "y": 21 } ] } - }, - { - "type": "mapgen", - "//": "legacy name for now", - "update_mapgen_id": "faction_base_kitchen_0", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_kitchen_0" ], "x": 3, "y": 0 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_kitchen_1", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_kitchen_1" ], "x": 3, "y": 0 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_kitchen_2", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_kitchen_2" ], "x": 3, "y": 0 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_kitchen_3", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_kitchen_3" ], "x": 3, "y": 0 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_kitchen_4", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_kitchen_4" ], "x": 3, "y": 0 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_kitchen_5", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_kitchen_5" ], "x": 3, "y": 0 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_kitchen_6", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_kitchen_6" ], "x": 3, "y": 0 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_kitchen_7", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_kitchen_7" ], "x": 3, "y": 0 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_kitchen_8", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_kitchen_8" ], "x": 3, "y": 0 } ] } - }, - { - "type": "mapgen", - "//": "legacy name for now", - "update_mapgen_id": "faction_base_blacksmith_0", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_blacksmith_0" ], "x": 4, "y": 0 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_blacksmith_1", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_blacksmith_1" ], "x": 4, "y": 0 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_blacksmith_2", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_blacksmith_2" ], "x": 4, "y": 10 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_blacksmith_3", - "method": "json", - "object": { - "set": [ - { "point": "furniture", "id": "f_table", "x": 9, "y": 11 }, - { "point": "furniture", "id": "f_forge_rock", "x": 6, "y": 13 }, - { "point": "furniture", "id": "f_anvil", "x": 9, "y": 15 } - ] - } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_blacksmith_4", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_blacksmith_4" ], "x": 3, "y": 10 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_blacksmith_5", - "method": "json", - "object": { - "set": [ - { "point": "furniture", "id": "f_brazier", "x": 7, "y": 13 }, - { "point": "furniture", "id": "f_brazier", "x": 14, "y": 13 }, - { "point": "furniture", "id": "f_table", "x": 12, "y": 15 }, - { "point": "furniture", "id": "f_table", "x": 13, "y": 15 }, - { "point": "furniture", "id": "f_table", "x": 14, "y": 15 } - ] - } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_blacksmith_6", - "method": "json", - "object": { - "set": [ - { "point": "furniture", "id": "f_forge_rock", "x": 10, "y": 13 }, - { "point": "furniture", "id": "f_forge_rock", "x": 10, "y": 14 }, - { "point": "terrain", "id": "t_dirt", "x": 18, "y": 14 }, - { "point": "furniture", "id": "f_kiln_empty", "x": 19, "y": 14 }, - { "point": "terrain", "id": "t_dirt", "x": 20, "y": 14 }, - { "point": "terrain", "id": "t_dirt", "x": 18, "y": 15 }, - { "point": "terrain", "id": "t_dirt", "x": 19, "y": 15 }, - { "point": "terrain", "id": "t_dirt", "x": 20, "y": 15 }, - { "point": "furniture", "id": "f_crate_o", "x": 4, "y": 18 }, - { "point": "furniture", "id": "f_crate_o", "x": 5, "y": 18 } - ] - } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_blacksmith_7", - "method": "json", - "object": { - "set": [ - { "point": "furniture", "id": "f_machinery_old", "x": 5, "y": 12 }, - { "point": "furniture", "id": "f_wood_keg", "x": 14, "y": 12 }, - { "point": "terrain", "id": "t_dirt", "x": 18, "y": 16 }, - { "point": "furniture", "id": "f_kiln_empty", "x": 19, "y": 16 }, - { "point": "terrain", "id": "t_dirt", "x": 20, "y": 16 }, - { "point": "terrain", "id": "t_dirt", "x": 18, "y": 17 }, - { "point": "terrain", "id": "t_dirt", "x": 19, "y": 17 }, - { "point": "terrain", "id": "t_dirt", "x": 20, "y": 17 } - ] - } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_blacksmith_8", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_blacksmith_8" ], "x": 12, "y": 2 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_blacksmith_9", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_blacksmith_9" ], "x": 11, "y": 2 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_blacksmith_10", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_blacksmith_10" ], "x": 3, "y": 3 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_blacksmith_11", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_blacksmith_11" ], "x": 3, "y": 2 } ] } - }, - { - "type": "mapgen", - "update_mapgen_id": "faction_base_field_camp_blacksmith_12", - "method": "json", - "object": { "place_nested": [ { "chunks": [ "bc_prim_blacksmith_12" ], "x": 3, "y": 2 } ] } - }, { "type": "mapgen", "update_mapgen_id": "faction_hide_site_0", diff --git a/data/json/mapgen/nested/aux_nested.json b/data/json/mapgen/nested/aux_nested.json index c92574b5f9c63..86a4d5733a736 100644 --- a/data/json/mapgen/nested/aux_nested.json +++ b/data/json/mapgen/nested/aux_nested.json @@ -252,5 +252,30 @@ "method": "json", "update_mapgen_id": "amigara_death", "object": { "place_items": [ { "item": "amigara_drops", "x": 11, "y": 12, "chance": 100 } ] } + }, + { + "type": "mapgen", + "update_mapgen_id": "bandit_killer_add", + "method": "json", + "object": { "place_npcs": [ { "class": "hells_raiders_assassin", "x": [ 5, 18 ], "y": [ 5, 18 ] } ] } + }, + { + "type": "mapgen", + "update_mapgen_id": "exodii_bomb_add", + "method": "json", + "object": { + "place_item": [ { "item": "exodii_bomb", "x": [ 4, 19 ], "y": [ 4, 19 ], "amount": 1, "custom-flags": [ "ACTIVATE_ON_PLACE" ] } ] + } + }, + { + "type": "mapgen", + "update_mapgen_id": "government_killteam_add", + "method": "json", + "object": { + "place_npcs": [ + { "class": "old_guard_assassin", "x": [ 5, 18 ], "y": [ 5, 18 ] }, + { "class": "old_guard_assassin", "x": [ 5, 18 ], "y": [ 5, 18 ] } + ] + } } ] diff --git a/data/json/npcs/TALK_FACTION_CAMP.json b/data/json/npcs/TALK_FACTION_CAMP.json index bcc7e2bfec1d6..5212b198c08c9 100644 --- a/data/json/npcs/TALK_FACTION_CAMP.json +++ b/data/json/npcs/TALK_FACTION_CAMP.json @@ -121,7 +121,7 @@ { "id": "TALK_CAMP_TUTORIAL_BUILDING", "type": "talk_topic", - "dynamic_line": "Currently, there are three main types of camps that you can start building: bare bones camps, modular field camps, and established building camps which is a wide range of camps adapted to using specific buildings. The established building list includes fire lookout towers, helipads, lighthouses, light industry, mansions, military outposts, pottery cottages, radio towers, small sealabs, and fire stations. I may have forgotten something here, as my memory may not be completely up to date. There used to be an additional one called the primitive field camp, but you can't start those anymore, only upgrade them.\n The bare bones camp is the most flexible kind of camp as it can be built anywhere and doesn't mandate any construction. Modular field camps is the next most flexible kind of camp since you can build them on any field and can locate them to have plenty of space for expansions, but you start with nothing in a field and have to build every building, so they can require a lot of resources. Building upgrade camps are faster to build since you start in an existing building, but you have to establish them in a supported type of existing building and there may not be limited or no space for expansions.\n Each camp location will have a variety of upgrade missions for it, except for the bare bones one where everything is up to you. The various missions have descriptions. In general, though, you'll need to establish housing if you want to expand, and some missions such as hunting or recruiting will require that you have some kind of kitchen or office that you can use to help schedule activities.\n Regardless of what kind of camp you make, you have to start it by asking a companion to build the camp. If there are more alternatives than just the bare bones camp you'll get a list of the available alternatives.", + "dynamic_line": "Currently, there are three main types of camps that you can start building: bare bones camps, modular field camps, and established building camps which is a wide range of camps adapted to using specific buildings. The established building list includes fire lookout towers, helipads, lighthouses, light industry, mansions, military outposts, pottery cottages, radio towers, small sealabs, and fire stations. I may have forgotten something here, as my memory may not be completely up to date.\n The bare bones camp is the most flexible kind of camp as it can be built anywhere and doesn't mandate any construction. Modular field camps is the next most flexible kind of camp since you can build them on any field and can locate them to have plenty of space for expansions, but you start with nothing in a field and have to build every building, so they can require a lot of resources. Established building camps are faster to set up since you start in an existing building, but you have to establish them in a supported type of existing building and there may be limited or no space for expansions.\n Each camp location will have a variety of upgrade missions for it, except for the bare bones one where everything is up to you. The various missions have descriptions. In general, though, you'll need to establish housing if you want to expand, and some missions such as hunting or recruiting will require that you have some kind of kitchen or office that you can use to help schedule activities.\n Regardless of what kind of camp you make, you have to start it by asking a companion to build the camp. If there are more alternatives than just the bare bones camp you'll get a list of the available alternatives.", "responses": [ { "text": "Tell me about bare bones camps.", "topic": "TALK_CAMP_TUTORIAL_BARE_BONES" }, { "text": "Tell me about modular field camps.", "topic": "TALK_CAMP_TUTORIAL_MFC" }, @@ -385,7 +385,7 @@ { "id": "TALK_CAMP_TUTORIAL_CHANGES", "type": "talk_topic", - "dynamic_line": "\n1. Faction camps used to require a second companion to act as overseer and camp manager, but that's been replaced by the bulletin board and two-way radio.\n2. It used to be impossible to upgrade faction camps if there was a vehicle, even a cart, on the same map. You can now upgrade camps even if there is a vehicle on the map, as long as the upgrade doesn't change the area under the vehicle.\n3. Faction camps used to upgrade by completely redrawing the map. Damage to the camp would be replaced when the camp was upgraded. Now upgrades only change the actual area being upgraded, and you will have to repair damage to the camp yourself.\n4. There used to be a single path for upgrading the main camp. Now, after you have completed the first tent, you will have many options for your next upgrade, and you can have different companions working on different upgrades of the main camp at the same time.\n5. Companions who are near a camp will feed themselves from the camp's food stores, and if the camp has a well, they'll use it to quench their thirst.\n6. You can now set up faction camps in select buildings. The list of available buildings is constantly growing, so you'll have to experiment.", + "dynamic_line": "\n1. Faction camps used to require a second companion to act as overseer and camp manager, but that's been replaced by the bulletin board and two-way radio.\n2. It used to be impossible to upgrade faction camps if there was a vehicle, even a cart, on the same map. You can now upgrade camps even if there is a vehicle on the map, as long as the upgrade doesn't change the area under the vehicle.\n3. Faction camps used to upgrade by completely redrawing the map. Damage to the camp would be replaced when the camp was upgraded. Now upgrades only change the actual area being upgraded, and you will have to repair damage to the camp yourself.\n4. There used to be a single path for upgrading the main camp. Now, after you have completed the first tent, you will have many options for your next upgrade, and you can have different companions working on different upgrades of the main camp at the same time.\n5. Companions who are near a camp will feed themselves from the camp's food stores, and if the camp has a well, they'll use it to quench their thirst.\n6. You can now set up faction camps in select buildings. The list of available buildings is constantly growing, so you'll have to experiment.\n7. The oldest type of camp, known as the primitive field camp or \"Old Camp\", is no longer supported and will be removed entirely in the future.", "responses": [ { "text": "Wait, let's go back over from the start.", "topic": "TALK_CAMP_TUTORIAL_INTRO" }, { "text": "Give me an overview of how camps work.", "topic": "TALK_CAMP_TUTORIAL_OVERVIEW" }, @@ -399,20 +399,6 @@ { "text": "Forget it. Let's go.", "topic": "TALK_DONE" } ] }, - { - "id": "TALK_CAMP_OVERSEER", - "type": "talk_topic", - "dynamic_line": "Hey boss. I was thinking, you don't really need me sitting in this tent and not really contributing to the camp. It's a cushy job, but I could do more. We could put up a bulletin board and you could write up what you want done there. What do you say?", - "responses": [ - { "text": "What needs to be done?", "topic": "TALK_CAMP_OVERSEER", "effect": "basecamp_mission" }, - { - "text": "Yes, set up the bulletin board and then go back to normal duties.", - "topic": "TALK_DONE", - "effect": "remove_overseer" - }, - { "text": "See you around.", "topic": "TALK_DONE" } - ] - }, { "id": "TALK_HALLU_CAMP", "type": "talk_topic", diff --git a/data/json/npcs/npc.json b/data/json/npcs/npc.json index 8eeff1337a635..97e10d00974a4 100644 --- a/data/json/npcs/npc.json +++ b/data/json/npcs/npc.json @@ -21,6 +21,17 @@ "chat": "TALK_DONE", "faction": "hells_raiders" }, + { + "type": "npc", + "id": "hells_raiders_assassin", + "//": "EOC-specific, should not spawn outside of trigger events.", + "name_suffix": "assassin", + "class": "NC_BOUNTY_HUNTER", + "attitude": 10, + "mission": 0, + "chat": "TALK_DONE", + "faction": "hells_raiders" + }, { "type": "npc", "id": "marloss_voice", diff --git a/data/json/npcs/old_guard/NPC_Old_Guard_FOB_Soldier_1.json b/data/json/npcs/old_guard/NPC_Old_Guard_FOB_Soldier_1.json index bae2cd524c61e..fead322410a14 100644 --- a/data/json/npcs/old_guard/NPC_Old_Guard_FOB_Soldier_1.json +++ b/data/json/npcs/old_guard/NPC_Old_Guard_FOB_Soldier_1.json @@ -10,6 +10,17 @@ "chat": "TALK_OLD_GUARD_FOB_SOLDIER", "faction": "old_guard" }, + { + "type": "npc", + "id": "old_guard_assassin", + "//": "EOC-specific, should not spawn outside of trigger events.", + "name_suffix": "Soldier", + "class": "NC_SOLDIER", + "attitude": 10, + "mission": 0, + "chat": "TALK_DONE", + "faction": "old_guard" + }, { "type": "talk_topic", "id": "TALK_OLD_GUARD_FOB_SOLDIER", diff --git a/data/json/recipes/basecamps/base/recipe_modular_hub/version_1/recipe_primitive_field.json b/data/json/recipes/basecamps/base/recipe_modular_hub/version_1/recipe_primitive_field.json index 9ea12b7d559a2..233bd94956834 100644 --- a/data/json/recipes/basecamps/base/recipe_modular_hub/version_1/recipe_primitive_field.json +++ b/data/json/recipes/basecamps/base/recipe_modular_hub/version_1/recipe_primitive_field.json @@ -1,725 +1,4 @@ [ - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_0", - "description": "We need to survey the base site first.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "autolearn": false, - "never_learn": true, - "time": "60 m", - "construction_blueprint": "faction_base_field_camp_0", - "blueprint_name": "basic survey", - "blueprint_requires": [ { "id": "not_an_upgrade" } ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_1", - "description": "The first thing we are going to need is a command tent to manage and task workers from.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "autolearn": false, - "never_learn": true, - "time": "180 m", - "construction_blueprint": "faction_base_field_camp_1", - "blueprint_name": "basic northeast tent", - "blueprint_provides": [ { "id": "gathering" }, { "id": "primitive_camp_recipes_1" } ], - "blueprint_requires": [ { "id": "faction_base_camp_0" } ], - "components": [ [ [ "large_tent_equivalent", 1, "LIST" ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_2", - "description": "We're going to need a fire pit and a bed if we want to stay here permanently.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 1, - "autolearn": false, - "never_learn": true, - "time": "180 m", - "construction_blueprint": "faction_base_field_camp_2", - "blueprint_name": "basic firepit", - "blueprint_provides": [ { "id": "bed" }, { "id": "firewood" }, { "id": "foraging" } ], - "blueprint_requires": [ { "id": "faction_base_camp_1" } ], - "qualities": [ [ { "id": "DIG", "level": 1 } ], [ { "id": "HAMMER", "level": 1 } ] ], - "components": [ [ [ "2x4", 8 ] ], [ [ "straw_pile", 16 ], [ "pine_bough", 20 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_3", - "description": "To make this outpost functional we are going to need storage containers to organize our supplies.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 2, - "autolearn": false, - "never_learn": true, - "time": "180 m", - "construction_blueprint": "faction_base_field_camp_3", - "blueprint_name": "basic storage", - "blueprint_provides": [ { "id": "sorting" } ], - "blueprint_requires": [ { "id": "faction_base_camp_2" } ], - "qualities": [ [ { "id": "HAMMER", "level": 1 } ] ], - "components": [ [ [ "2x4", 32 ] ], [ [ "nail", 96 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_4", - "description": "Next we should expand the camp to comfortably support two people indefinitely.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 2, - "autolearn": false, - "never_learn": true, - "time": "240 m", - "construction_blueprint": "faction_base_field_camp_4", - "blueprint_name": "basic northeast bed", - "blueprint_provides": [ { "id": "bed" }, { "id": "logging" } ], - "blueprint_requires": [ { "id": "faction_base_camp_3" } ], - "qualities": [ [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "2x4", 24 ] ], - [ [ "nail", 48 ] ], - [ [ "sheet_metal", 4 ] ], - [ [ "pipe", 12 ] ], - [ [ "straw_pile", 16 ], [ "pine_bough", 20 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_5", - "description": "Additional housing and storage will allow our camp to expand into specialized industries.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 2, - "autolearn": false, - "never_learn": true, - "time": "720 m", - "construction_blueprint": "faction_base_field_camp_5", - "blueprint_name": "basic northwest tent", - "blueprint_provides": [ { "id": "bed", "amount": 2 } ], - "blueprint_requires": [ { "id": "faction_base_camp_4" } ], - "qualities": [ [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "large_tent_equivalent", 1, "LIST" ] ], - [ [ "2x4", 24 ] ], - [ [ "straw_pile", 32 ], [ "pine_bough", 40 ] ], - [ [ "nail", 48 ] ], - [ [ "sheet_metal", 2 ] ], - [ [ "pipe", 12 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_6", - "description": "Constructing a hard command post will transform our little camp into a true base.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "//": "2hrs*14wall + 1 hr crates + 2*28roof + 4hrs pits = 89 hrs", - "time": "89 h", - "construction_blueprint": "faction_base_field_camp_6", - "blueprint_name": "basic central building", - "blueprint_provides": [ { "id": "relaying" } ], - "blueprint_requires": [ { "id": "faction_base_camp_4" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ [ [ "2x4", 16 ] ], [ [ "log", 112 ] ], [ [ "nail", 48 ] ], [ [ "stick", 196 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_7", - "description": "Building additional housing will allow us to send companions out to find recruits.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 2, - "autolearn": false, - "never_learn": true, - "time": "720 m", - "construction_blueprint": "faction_base_field_camp_7", - "blueprint_name": "basic west tent", - "blueprint_provides": [ { "id": "bed", "amount": 2 } ], - "blueprint_requires": [ { "id": "faction_base_camp_4" } ], - "qualities": [ [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "large_tent_equivalent", 1, "LIST" ] ], - [ [ "2x4", 24 ] ], - [ [ "straw_pile", 32 ], [ "pine_bough", 40 ] ], - [ [ "nail", 48 ] ], - [ [ "sheet_metal", 2 ] ], - [ [ "pipe", 12 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_8", - "description": "We need to expand our base to include basic dining facilities.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 5, - "autolearn": false, - "never_learn": true, - "//": "2hrs*4wall + .5 hr*2tables + .5hr*4benches+ 1hrs pits = 12 hrs", - "time": "12 h", - "construction_blueprint": "faction_base_field_camp_8", - "blueprint_name": "basic central kitchen", - "blueprint_resources": [ "fake_woodstove" ], - "blueprint_provides": [ { "id": "trapping" }, { "id": "hunting" }, { "id": "walls" }, { "id": "recruiting" } ], - "blueprint_requires": [ { "id": "faction_base_camp_6" } ], - "qualities": [ [ { "id": "DIG", "level": 1 } ], [ { "id": "SAW_M", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "2x4", 28 ] ], - [ [ "log", 16 ] ], - [ [ "nail", 56 ] ], - [ [ "stick", 24 ] ], - [ [ "metal_tank", 1 ] ], - [ [ "pipe", 1 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_9", - "description": "More housing means that we can support additional specialists.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 2, - "autolearn": false, - "never_learn": true, - "time": "12 h", - "construction_blueprint": "faction_base_field_camp_9", - "blueprint_name": "basic southeast tent", - "blueprint_provides": [ { "id": "bed", "amount": 2 } ], - "blueprint_requires": [ { "id": "faction_base_camp_4" } ], - "qualities": [ [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "large_tent_equivalent", 1, "LIST" ] ], - [ [ "2x4", 24 ] ], - [ [ "straw_pile", 32 ], [ "pine_bough", 40 ] ], - [ [ "nail", 48 ] ], - [ [ "sheet_metal", 2 ] ], - [ [ "pipe", 12 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_10", - "description": "An expanded kitchen is needed to support our growing settlement.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "//": "2hrs*6wall + 1 hr trash + 2*20roof + 4hrs pits = 53 hrs", - "time": "53 h", - "construction_blueprint": "faction_base_field_camp_10", - "blueprint_requires": [ { "id": "faction_base_camp_8" } ], - "blueprint_name": "basic expanded kitchen", - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ [ [ "log", 64 ] ], [ [ "stick", 116 ] ], [ [ "sheet_metal", 2 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_11", - "description": "Finishing the hard structure will give us a more secure place to retreat to if we come under attack.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "//": "2hrs*5wall + 1.5 hr*2door + 2hrs pits = 15 hrs", - "time": "15 h", - "construction_blueprint": "faction_base_field_camp_11", - "blueprint_name": "basic completed central building", - "blueprint_provides": [ { "id": "scouting" } ], - "blueprint_requires": [ { "id": "faction_base_camp_10" } ], - "qualities": [ [ { "id": "DIG", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ [ [ "log", 10 ] ], [ [ "stick", 15 ] ], [ [ "2x4", 32 ] ], [ [ "nail", 72 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_12", - "description": "I'm surprised we've made it this long without securing a clean water source, we need a well.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "//": "11.5 hrs (12hrs on/off)", - "time": "12 h", - "construction_blueprint": "faction_base_field_camp_12", - "blueprint_name": "basic water well", - "blueprint_requires": [ { "id": "faction_base_camp_4" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "WRENCH", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ [ [ "rock", 40 ] ], [ [ "pipe", 12 ] ], [ [ "2x4", 4 ] ], [ [ "well_pump", 1 ] ], [ [ "nail", 8 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_13", - "description": "Building a strong wall will keep the base secure even if a small horde attacks.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "//": "2hrs*30palisade + .2hrs * 72pits = 75 hrs", - "time": "75 h", - "construction_blueprint": "faction_base_field_camp_13", - "blueprint_name": "basic partial wall", - "blueprint_provides": [ { "id": "patrolling" } ], - "blueprint_requires": [ { "id": "faction_base_camp_4" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ] ], - "components": [ [ [ "log", 90 ] ], [ [ "rope_makeshift_6", 60 ], [ "rope_6", 60 ], [ "vine_30", 30 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_14", - "description": "We need to finish our half built fortifications.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "//": "2hrs*56palisade + .2hrs * 14pits = 115 hrs", - "time": "115 h", - "construction_blueprint": "faction_base_field_camp_14", - "blueprint_name": "basic complete wall", - "blueprint_requires": [ { "id": "faction_base_camp_13" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ] ], - "components": [ [ [ "log", 168 ] ], [ [ "rope_makeshift_6", 112 ], [ "rope_6", 112 ], [ "vine_30", 112 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_15", - "description": "We're running out of room and need another living quarters.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 2, - "autolearn": false, - "never_learn": true, - "time": "720 m", - "construction_blueprint": "faction_base_field_camp_15", - "blueprint_name": "basic east tent", - "blueprint_provides": [ { "id": "bed", "amount": 2 } ], - "blueprint_requires": [ { "id": "faction_base_camp_4" } ], - "qualities": [ [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "large_tent_equivalent", 1, "LIST" ] ], - [ [ "2x4", 24 ] ], - [ [ "straw_pile", 32 ], [ "pine_bough", 40 ] ], - [ [ "nail", 48 ] ], - [ [ "sheet_metal", 2 ] ], - [ [ "pipe", 12 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_16", - "description": "Our kitchen isn't able to keep up with demand, we need to expand it.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 5, - "autolearn": false, - "never_learn": true, - "//": "1hr stove+ .5 hr*2tables + .5hr*4benches+ .5hrs 2counter = 5 hrs ", - "time": "370 m", - "construction_blueprint": "faction_base_field_camp_16", - "blueprint_name": "basic dining hall", - "blueprint_requires": [ { "id": "faction_base_camp_11" } ], - "qualities": [ [ { "id": "DIG", "level": 1 } ], [ { "id": "SAW_M", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ [ [ "2x4", 40 ] ], [ [ "nail", 72 ] ], [ [ "metal_tank", 1 ] ], [ [ "pipe", 1 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_17", - "description": "We should build stronger doors to secure our compound.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 3, - "autolearn": false, - "never_learn": true, - "//": "3*7doors = 21 hrs so 2 days-ish ", - "time": "21 h", - "construction_blueprint": "faction_base_field_camp_17", - "blueprint_name": "basic reinforced gates", - "blueprint_requires": [ { "id": "faction_base_camp_16" }, { "id": "faction_base_camp_14" } ], - "qualities": [ [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ [ [ "2x4", 198 ] ], [ [ "nail", 588 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_18", - "description": "One more tent and our living space will be full.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 2, - "autolearn": false, - "never_learn": true, - "time": "720 m", - "construction_blueprint": "faction_base_field_camp_18", - "blueprint_name": "basic southwest tent", - "blueprint_provides": [ { "id": "bed", "amount": 2 } ], - "blueprint_requires": [ { "id": "faction_base_camp_4" } ], - "qualities": [ [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "large_tent_equivalent", 1, "LIST" ] ], - [ [ "2x4", 24 ] ], - [ [ "straw_pile", 32 ], [ "pine_bough", 40 ] ], - [ [ "nail", 48 ] ], - [ [ "sheet_metal", 2 ] ], - [ [ "pipe", 12 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_19", - "description": "We could construct a radio tower to improve communication range, first step is the tower structure.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "2880 m", - "construction_blueprint": "faction_base_field_camp_19", - "blueprint_name": "basic radio tower", - "blueprint_provides": [ { "id": "recruiting" } ], - "blueprint_requires": [ { "id": "faction_base_camp_4" } ], - "qualities": [ - { "id": "HAMMER", "level": 2 }, - { "id": "SAW_M", "level": 1 }, - { "id": "WRENCH", "level": 1 }, - { "id": "SCREW", "level": 1 } - ], - "components": [ - [ - [ "wind_turbine", 4 ], - [ "xl_wind_turbine", 1 ], - [ "solar_panel", 4 ], - [ "reinforced_solar_panel", 4 ], - [ "solar_panel_v2", 2 ], - [ "reinforced_solar_panel_v2", 2 ] - ], - [ [ "storage_battery", 1 ], [ "medium_storage_battery", 4 ], [ "small_storage_battery", 32 ] ], - [ [ "sheet_metal", 2 ], [ "wire", 8 ] ], - [ [ "pipe", 24 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_camp_20", - "description": "We need to build a console to control the radio tower.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "electronics", - "difficulty": 6, - "autolearn": false, - "never_learn": true, - "time": "2880 m", - "construction_blueprint": "faction_base_field_camp_20", - "blueprint_name": "basic radio console", - "blueprint_requires": [ { "id": "faction_base_camp_19" } ], - "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "WRENCH", "level": 1 }, { "id": "SCREW", "level": 1 } ], - "components": [ - [ [ "processor", 2 ] ], - [ [ "RAM", 2 ] ], - [ [ "large_lcd_screen", 1 ] ], - [ [ "e_scrap", 8 ] ], - [ [ "frame", 1 ] ], - [ [ "circuit", 4 ] ], - [ [ "power_supply", 2 ] ], - [ [ "amplifier", 2 ] ], - [ [ "cable", 80 ] ], - [ [ "motor_small", 1 ], [ "motor_tiny", 2 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_kitchen_0", - "description": "Survey land for a kitchen.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "autolearn": false, - "never_learn": true, - "construction_blueprint": "faction_base_kitchen_0", - "blueprint_name": "Kitchen survey", - "time": "180 m", - "blueprint_requires": [ { "id": "not_an_upgrade" } ], - "blueprint_needs": { - "time": "11 h 35 m", - "skills": [ [ "survival", 0 ] ], - "inline": { "tools": [ ], "qualities": [ [ { "id": "DIG", "level": 2 } ] ], "components": [ ] } - } - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_kitchen_1", - "description": "Building a cook-shack is our first task.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "7200 m", - "construction_blueprint": "faction_base_field_camp_kitchen_1", - "blueprint_name": "Kitchen fireplace shack", - "blueprint_provides": [ { "id": "kitchen" }, { "id": "kitchen_recipes_1" } ], - "blueprint_requires": [ { "id": "faction_base_kitchen_0" } ], - "blueprint_resources": [ "fake_fireplace" ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "pot", 1 ], [ "pot_copper", 1 ], [ "clay_pot", 1 ] ], - [ [ "log", 92 ] ], - [ [ "stick", 48 ] ], - [ [ "2x4", 252 ] ], - [ [ "nail", 16 ] ], - [ [ "rock", 40 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_kitchen_2", - "description": "We need to finish framing the walls for the cook-shack.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "3600 m", - "construction_blueprint": "faction_base_field_camp_kitchen_2", - "blueprint_name": "Kitchen finished shack", - "blueprint_requires": [ { "id": "faction_base_kitchen_1" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "makeshift_knife", 1 ], [ "knife_steak", 1 ], [ "primitive_knife", 1 ], [ "copper_knife", 1 ] ], - [ [ "log", 56 ] ], - [ [ "stick", 84 ] ], - [ [ "2x4", 67 ] ], - [ [ "nail", 114 ] ], - [ [ "glass_sheet", 1 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_kitchen_3", - "description": "Expanding the shack by including a smoker will increase our versatility.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "3600 m", - "construction_blueprint": "faction_base_field_camp_kitchen_3", - "blueprint_name": "Kitchen charcoal smoker", - "blueprint_provides": [ { "id": "kitchen_recipes_2" } ], - "blueprint_requires": [ { "id": "faction_base_kitchen_2" } ], - "blueprint_resources": [ "fake_char_smoker" ], - "qualities": [ - [ { "id": "DIG", "level": 2 } ], - [ { "id": "HAMMER", "level": 2 } ], - [ { "id": "CUT", "level": 2 } ], - [ { "id": "SAW_W", "level": 1 } ] - ], - "components": [ - [ [ "log", 46 ] ], - [ [ "stick", 40 ] ], - [ [ "2x4", 165 ] ], - [ [ "nail", 70 ] ], - [ [ "rock", 8 ] ], - [ [ "glass_sheet", 1 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_kitchen_4", - "description": "A pantry will allow our cooks to store more non-perishables.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "9360 m", - "construction_blueprint": "faction_base_field_camp_kitchen_4", - "blueprint_name": "Kitchen pantry expansion", - "blueprint_provides": [ { "id": "pantry" } ], - "blueprint_requires": [ { "id": "faction_base_kitchen_3" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "pot", 1 ], [ "pot_copper", 1 ], [ "clay_pot", 1 ] ], - [ [ "log", 122 ] ], - [ [ "stick", 108 ] ], - [ [ "2x4", 239 ] ], - [ [ "nail", 102 ] ], - [ [ "glass_sheet", 1 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_kitchen_5", - "description": "Increasing our number of smoking racks will let us craft larger batches.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "360 m", - "construction_blueprint": "faction_base_field_camp_kitchen_5", - "blueprint_name": "Kitchen more smoking racks", - "blueprint_resources": [ "fake_fireplace", "fake_char_smoker", "fake_char_smoker" ], - "blueprint_requires": [ { "id": "faction_base_kitchen_4" } ], - "qualities": [ - [ { "id": "DIG", "level": 2 } ], - [ { "id": "HAMMER", "level": 2 } ], - [ { "id": "CUT", "level": 2 } ], - [ { "id": "WRENCH", "level": 1 } ], - [ { "id": "SAW_W", "level": 1 } ] - ], - "components": [ [ [ "stick", 32 ] ], [ [ "rock", 56 ] ], [ [ "sheet_metal", 4 ] ], [ [ "pipe", 24 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_kitchen_6", - "description": "A well is needed so our cooks don't have to haul in water.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 5, - "autolearn": false, - "never_learn": true, - "time": "1440 m", - "construction_blueprint": "faction_base_field_camp_kitchen_6", - "blueprint_name": "Kitchen water well", - "blueprint_requires": [ { "id": "faction_base_kitchen_5" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "WRENCH", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "pot", 1 ], [ "pot_copper", 1 ], [ "clay_pot", 1 ] ], - [ [ "rock", 40 ] ], - [ [ "pipe", 42 ] ], - [ [ "2x4", 4 ] ], - [ [ "sheet_metal", 6 ] ], - [ [ "well_pump", 1 ] ], - [ [ "nail", 8 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_kitchen_7", - "description": "Wood stoves will give us greater control of temperatures and let us craft more difficult recipes.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 5, - "autolearn": false, - "never_learn": true, - "time": "180 m", - "construction_blueprint": "faction_base_field_camp_kitchen_7", - "blueprint_name": "Kitchen wood stoves", - "blueprint_provides": [ { "id": "kitchen_recipes_3" } ], - "blueprint_resources": [ "fake_woodstove", "fake_woodstove" ], - "blueprint_requires": [ { "id": "faction_base_kitchen_6" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "WRENCH", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ [ [ "pipe", 2 ] ], [ [ "2x4", 20 ] ], [ [ "metal_tank", 2 ] ], [ [ "nail", 18 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_kitchen_8", - "description": "Finally, expanding the pantry further will let us store additional materials.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "3600 m", - "construction_blueprint": "faction_base_field_camp_kitchen_8", - "blueprint_name": "Kitchen expanded pantry", - "blueprint_requires": [ { "id": "faction_base_kitchen_7" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ [ [ "log", 40 ] ], [ [ "stick", 30 ] ], [ [ "2x4", 135 ] ], [ [ "nail", 150 ] ], [ [ "glass_sheet", 1 ] ] ], - "check_blueprint_needs": false - }, { "type": "recipe", "activity_level": "MODERATE_EXERCISE", @@ -751,320 +30,5 @@ "//blueprint_requires": [ { "id": "not_an_upgrade" } ], "qualities": [ [ { "id": "DIG", "level": 2 } ] ], "components": [ [ [ "pointy_stick", 68 ] ] ] - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_0", - "description": "Survey land for a blacksmith shop.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "autolearn": false, - "never_learn": true, - "construction_blueprint": "faction_base_blacksmith_0", - "blueprint_name": "Blacksmithy survey", - "blueprint_requires": [ { "id": "not_an_upgrade" } ], - "time": "180 m", - "blueprint_needs": { - "time": "18 h 32 m", - "skills": [ [ "survival", 0 ] ], - "inline": { "tools": [ ], "qualities": [ [ { "id": "DIG", "level": 2 } ] ], "components": [ ] } - } - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_1", - "description": "Building a forge and kiln is our first task.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 5, - "autolearn": false, - "never_learn": true, - "time": "180 m", - "construction_blueprint": "faction_base_field_camp_blacksmith_1", - "blueprint_name": "Blacksmithy forge and kiln", - "blueprint_provides": [ { "id": "blacksmith" }, { "id": "blacksmith_recipes_1" } ], - "blueprint_requires": [ { "id": "faction_base_blacksmith_0" } ], - "blueprint_resources": [ "fake_forge", "fake_char_kiln", "makeshift_hammer" ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "crucible", 1 ], [ "crucible_clay", 1 ] ], - [ [ "primitive_hammer", 1 ], [ "makeshift_hammer", 1 ] ], - [ [ "rock", 80 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_2", - "description": "Building a proper roof for the shop is the next step.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "10080 m", - "construction_blueprint": "faction_base_field_camp_blacksmith_2", - "blueprint_name": "Blacksmithy roof", - "blueprint_requires": [ { "id": "faction_base_blacksmith_1" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ [ [ "log", 136 ] ], [ [ "stick", 72 ] ], [ [ "2x4", 352 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_3", - "description": "Building a working table and placing an anvil are next.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "180 m", - "construction_blueprint": "faction_base_field_camp_blacksmith_3", - "blueprint_name": "Blacksmithy anvil and workbench", - "blueprint_provides": [ { "id": "blacksmith_recipes_2" } ], - "blueprint_requires": [ { "id": "faction_base_blacksmith_2" } ], - "blueprint_resources": [ "anvil", "crucible" ], - "qualities": [ [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "crucible", 1 ], [ "crucible_clay", 1 ] ], - [ [ "anvil", 1 ] ], - [ [ "2x4", 6 ] ], - [ [ "nail", 8 ] ], - [ [ "rock", 40 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_4", - "description": "If we're going to do more than simple metal casting we need a bigger shop.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "8640 m", - "construction_blueprint": "faction_base_field_camp_blacksmith_4", - "blueprint_name": "Blacksmithy expanded shop", - "blueprint_provides": [ { "id": "blacksmith_recipes_3" } ], - "blueprint_requires": [ { "id": "faction_base_blacksmith_3" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ [ [ "log", 108 ] ], [ [ "stick", 36 ] ], [ [ "2x4", 342 ] ], [ [ "nail", 8 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_5", - "description": "We need some basic tools to make more advanced crafts.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "180 m", - "construction_blueprint": "faction_base_field_camp_blacksmith_5", - "blueprint_name": "Blacksmithy forging tools", - "blueprint_provides": [ { "id": "blacksmith_recipes_4" } ], - "blueprint_requires": [ { "id": "faction_base_blacksmith_4" } ], - "blueprint_resources": [ "tongs", "chisel", "hammer", "swage" ], - "qualities": [ [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "tongs", 2 ] ], - [ [ "chisel", 1 ] ], - [ [ "hammer", 1 ] ], - [ [ "swage", 1 ] ], - [ [ "sheet_metal", 4 ] ], - [ [ "2x4", 18 ] ], - [ [ "nail", 24 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_6", - "description": "An expanded forge will allow us to work on bigger projects.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 5, - "autolearn": false, - "never_learn": true, - "time": "480 m", - "construction_blueprint": "faction_base_field_camp_blacksmith_6", - "blueprint_name": "Blacksmithy expanded forge", - "blueprint_requires": [ { "id": "faction_base_blacksmith_5" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ], [ { "id": "SAW_W", "level": 1 } ] ], - "components": [ [ [ "hammer", 1 ] ], [ [ "2x4", 16 ] ], [ [ "nail", 48 ] ], [ [ "rock", 120 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_7", - "description": "Proper steel work requires a bellows and quenching setup.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "1440 m", - "construction_blueprint": "faction_base_field_camp_blacksmith_7", - "blueprint_name": "Blacksmithy bellows and quenching barrels", - "blueprint_provides": [ { "id": "blacksmith_recipes_5" } ], - "blueprint_requires": [ { "id": "faction_base_blacksmith_6" } ], - "qualities": [ [ { "id": "HAMMER", "level": 2 } ], [ { "id": "SAW_W", "level": 1 } ] ], - "components": [ - [ [ "2x4", 40 ] ], - [ [ "nail", 60 ] ], - [ [ "rock", 40 ] ], - [ [ "sheet_metal", 4 ] ], - [ [ "water_faucet", 1 ] ], - [ [ "scrap", 16 ] ], - [ [ "frame", 1 ] ], - [ [ "leather", 10 ] ], - [ [ "chain", 3 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_8", - "description": "A separate workshop will allow us to do the most basic of machining.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "10080 m", - "construction_blueprint": "faction_base_field_camp_blacksmith_8", - "blueprint_name": "Blacksmithy machine shop", - "blueprint_provides": [ { "id": "blacksmith_recipes_6" } ], - "blueprint_requires": [ { "id": "faction_base_blacksmith_7" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "hammer_sledge", 1 ] ], - [ [ "knife_combat", 1 ], [ "copper_knife", 1 ] ], - [ [ "log", 118 ] ], - [ [ "stick", 114 ] ], - [ [ "2x4", 264 ] ], - [ [ "nail", 192 ] ], - [ [ "glass_sheet", 4 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_9", - "description": "Next we need to add some basic tools and vises to the workshop.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "360 m", - "construction_blueprint": "faction_base_field_camp_blacksmith_9", - "blueprint_name": "Blacksmithy machine shop tools", - "blueprint_requires": [ { "id": "faction_base_blacksmith_8" } ], - "blueprint_resources": [ "wrench", "pliers" ], - "qualities": [ [ { "id": "WRENCH", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "wrench", 2 ] ], - [ [ "pliers", 2 ] ], - [ [ "sheet_metal", 6 ] ], - [ [ "2x4", 36 ] ], - [ [ "nail", 88 ] ], - [ [ "scrap", 8 ] ], - [ [ "leather", 4 ] ], - [ [ "pipe", 36 ] ] - ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_10", - "description": "Advanced forging processes require more room to work.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "8640 m", - "construction_blueprint": "faction_base_field_camp_blacksmith_10", - "blueprint_name": "Blacksmithy machine shop expansion", - "blueprint_requires": [ { "id": "faction_base_blacksmith_9" } ], - "qualities": [ [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ [ [ "hammer_sledge", 1 ] ], [ [ "log", 104 ] ], [ [ "stick", 54 ] ], [ [ "2x4", 272 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_11", - "description": "An on-site well will allow us to fill boilers as needed.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "fabrication", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "1440 m", - "construction_blueprint": "faction_base_field_camp_blacksmith_11", - "blueprint_name": "Blacksmithy well", - "blueprint_requires": [ { "id": "faction_base_blacksmith_10" } ], - "qualities": [ [ { "id": "WRENCH", "level": 1 } ], [ { "id": "DIG", "level": 2 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ [ [ "well_pump", 1 ] ], [ [ "pipe", 6 ] ], [ [ "2x4", 16 ] ], [ [ "nail", 24 ] ], [ [ "rock", 40 ] ] ], - "check_blueprint_needs": false - }, - { - "type": "recipe", - "activity_level": "MODERATE_EXERCISE", - "result": "faction_base_blacksmith_12", - "description": "A steam-powered drop hammer will greatly increase production speed in exchange for charcoal.", - "category": "CC_BUILDING", - "subcategory": "CSC_BUILDING_BASES", - "skill_used": "mechanics", - "difficulty": 4, - "autolearn": false, - "never_learn": true, - "time": "4320 m", - "construction_blueprint": "faction_base_field_camp_blacksmith_12", - "blueprint_name": "Blacksmithy drop hammer", - "blueprint_provides": [ { "id": "blacksmith_recipes_7" } ], - "blueprint_requires": [ { "id": "faction_base_blacksmith_11" } ], - "blueprint_resources": [ "fake_drop_hammer" ], - "qualities": [ [ { "id": "WRENCH", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ] ], - "components": [ - [ [ "log", 2 ] ], - [ [ "2x4", 40 ] ], - [ [ "nail", 60 ] ], - [ [ "metal_tank", 6 ] ], - [ [ "water_faucet", 2 ] ], - [ [ "anvil", 1 ] ], - [ [ "scrap", 30 ] ], - [ [ "chain", 4 ] ], - [ [ "pipe", 12 ] ] - ], - "check_blueprint_needs": false } ] diff --git a/data/json/recipes/recipe_appliance.json b/data/json/recipes/recipe_appliance.json index 9dcac07e8b57c..28da3fd306b68 100644 --- a/data/json/recipes/recipe_appliance.json +++ b/data/json/recipes/recipe_appliance.json @@ -28,6 +28,35 @@ [ [ "plastic_chunk", 16 ] ] ] }, + { + "result": "freezer", + "type": "recipe", + "activity_level": "MODERATE_EXERCISE", + "category": "CC_APPLIANCE", + "subcategory": "CSC_APPLIANCE_UTILITY", + "copy-from": "minifreezer", + "skills_required": [ "fabrication", 4 ], + "proficiencies": [ { "proficiency": "prof_plasticworking", "required": false, "time_multiplier": 1.1, "learning_time_multiplier": 0.1 } ], + "qualities": [ + { "id": "HAMMER", "level": 2 }, + { "id": "SAW_M", "level": 1 }, + { "id": "DRILL", "level": 1 }, + { "id": "SCREW", "level": 1 }, + { "id": "WRENCH", "level": 1 } + ], + "components": [ + [ [ "sheet_metal", 20 ] ], + [ [ "condensor_coil", 1 ] ], + [ [ "evaporator_coil", 1 ] ], + [ [ "cable", 3 ] ], + [ [ "hose", 1 ] ], + [ [ "pipe_fittings", 6 ] ], + [ [ "thermostat", 1 ] ], + [ [ "motor_small", 1 ] ], + [ [ "refrigerant_tank", 1 ] ], + [ [ "plastic_chunk", 20 ] ] + ] + }, { "result": "standing_lamp", "type": "recipe", diff --git a/data/mods/Magiclysm/Spells/animist.json b/data/mods/Magiclysm/Spells/animist.json index bcfd64727fa9b..e22290a023a1e 100644 --- a/data/mods/Magiclysm/Spells/animist.json +++ b/data/mods/Magiclysm/Spells/animist.json @@ -29,7 +29,7 @@ "id": "recover_mana", "type": "SPELL", "name": "Life Conversion", - "description": "You channel your life force itself into your spiritual energy. You spend hp to regain mana.", + "description": "You channel lifeforce itself into your spiritual energy. You spend runes to regain mana.", "valid_targets": [ "self" ], "min_damage": 75, "damage_increment": 15.0, @@ -39,11 +39,9 @@ "effect_str": "MANA", "shape": "blast", "spell_class": "ANIMIST", - "energy_source": "HP", + "energy_source": "MANA", + "components": "spell_components_rune_animist", "base_casting_time": 500, - "base_energy_cost": 5, - "energy_increment": 1.0, - "final_energy_cost": 40, "flags": [ "SOMATIC", "VERBAL", "SILENT", "NO_LEGS" ], "difficulty": 3 }, @@ -69,163 +67,331 @@ "final_energy_cost": 10000 }, { - "id": "summon_zombie", + "id": "summon_undead", "type": "SPELL", - "name": "Summon Zombie", - "description": "An ethereal-looking zombie rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.", - "valid_targets": [ "ground" ], + "name": "Summon Undead", + "description": "An ethereal-looking undead rises from the depths of the earth to fight for you. You may be able to summon the stronger ones with a higher level in this spell.", + "valid_targets": [ "self" ], "min_damage": 1, - "max_damage": 3, - "//": "level 20 will max out your number of summons", - "damage_increment": 0.1, - "max_level": 30, - "difficulty": 2, + "max_damage": 1, + "max_level": 35, + "difficulty": 3, "spell_class": "ANIMIST", - "effect": "summon", - "effect_str": "mon_zombie", + "effect": "effect_on_condition", + "effect_str": "EOC_SUMMON_ZOMBIE", + "components": "spell_components_rune_animist", "shape": "blast", - "energy_source": "HP", - "base_energy_cost": 6, - "//2": "half a minute", + "energy_source": "MANA", + "base_energy_cost": 400, "base_casting_time": 3000, - "min_range": 3, - "max_range": 3, - "min_aoe": 2, - "max_aoe": 2, "flags": [ "SOMATIC", "VERBAL", "CONCENTRATE" ], "min_duration": 36000, "max_duration": 1080000, - "duration_increment": 36000, - "learn_spells": { "summon_tough_zombie": 20 } + "duration_increment": 36000 }, { - "id": "summon_tough_zombie", + "type": "effect_on_condition", + "id": "EOC_SUMMON_ZOMBIE", + "effect": { + "switch": { "u_val": "spell_level", "spell": "summon_undead" }, + "cases": [ + { "case": 0, "effect": { "u_cast_spell": { "id": "summon_zombie" } } }, + { "case": 7, "effect": { "u_cast_spell": { "id": "summon_tough_zombie" } } }, + { "case": 14, "effect": { "u_cast_spell": { "id": "summon_zombie_brute" } } }, + { "case": 21, "effect": { "u_cast_spell": { "id": "summon_skeleton" } } }, + { "case": 28, "effect": { "u_cast_spell": { "id": "summon_skeleton_brute" } } }, + { "case": 35, "effect": { "u_cast_spell": { "id": "summon_skeleton_hulk" } } } + ] + } + }, + { + "abstract": "summon_abstract_zombie", "type": "SPELL", - "name": "Summon Tough Zombie", - "description": "An ethereal-looking tough zombie rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.", + "name": "Abstract Summon Zombie", + "description": "Abstract of Summon Undead spell.", "valid_targets": [ "ground" ], "min_damage": 1, - "max_damage": 3, - "//": "level 20 will max out your number of summons", - "damage_increment": 0.1, - "max_level": 30, - "difficulty": 8, - "spell_class": "ANIMIST", + "max_damage": 1, + "max_level": 35, "effect": "summon", - "effect_str": "mon_zombie_tough", "shape": "blast", - "energy_source": "HP", - "base_energy_cost": 12, - "//2": "half a minute", - "base_casting_time": 3000, "min_range": 3, "max_range": 3, "min_aoe": 2, "max_aoe": 2, - "flags": [ "SOMATIC", "VERBAL", "CONCENTRATE" ], + "flags": [ "SILENT", "NO_EXPLOSION_SFX" ], "min_duration": 36000, "max_duration": 1080000, "duration_increment": 36000 }, + { + "id": "summon_zombie", + "copy-from": "summon_abstract_zombie", + "type": "SPELL", + "name": "Summon Zombie", + "description": "Summon a zombie. Part of Summon Undead spell.", + "valid_targets": [ "ground" ], + "effect": "summon", + "effect_str": "mon_zombie", + "max_level": 35, + "min_duration": 216000, + "max_duration": 216000, + "duration_increment": 36000 + }, + { + "id": "summon_tough_zombie", + "copy-from": "summon_abstract_zombie", + "type": "SPELL", + "name": "Summon Tough Zombie", + "description": "Summon a tough zombie. Part of Summon Undead spell.", + "valid_targets": [ "ground" ], + "effect": "summon", + "effect_str": "mon_zombie_tough", + "max_level": 35, + "min_duration": 468000, + "max_duration": 468000, + "duration_increment": 36000 + }, + { + "id": "summon_zombie_brute", + "copy-from": "summon_abstract_zombie", + "type": "SPELL", + "name": "Summon Zombie Brute", + "description": "Summon a zombie brute. Part of Summon Undead spell.", + "valid_targets": [ "ground" ], + "effect": "summon", + "effect_str": "mon_zombie_brute", + "max_level": 35, + "min_duration": 720000, + "max_duration": 720000, + "duration_increment": 36000 + }, { "id": "summon_skeleton", + "copy-from": "summon_abstract_zombie", "type": "SPELL", - "name": "Summon Skeleton", - "description": "A ghostly skeleton rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.", + "name": "Summon Skeleton Zombie", + "description": "Summon a skeleton zombie. Part of Summon Undead spell.", "valid_targets": [ "ground" ], - "min_damage": 1, - "max_damage": 3, - "//": "level 20 will max out your number of summons", - "damage_increment": 0.1, - "max_level": 30, - "difficulty": 5, - "spell_class": "ANIMIST", "effect": "summon", "effect_str": "mon_skeleton", + "max_level": 35, + "min_duration": 972000, + "max_duration": 972000, + "duration_increment": 36000 + }, + { + "id": "summon_skeleton_brute", + "copy-from": "summon_abstract_zombie", + "type": "SPELL", + "name": "Summon Skeletal Brute", + "description": "Summon a skeletal brute. Part of Summon Undead spell.", + "valid_targets": [ "ground" ], + "effect": "summon", + "effect_str": "mon_skeleton_brute", + "max_level": 35, + "min_duration": 1260000, + "max_duration": 1260000, + "duration_increment": 36000 + }, + { + "id": "summon_skeleton_hulk", + "copy-from": "summon_abstract_zombie", + "type": "SPELL", + "name": "Summon Skeletal Juggernaut", + "description": "Summon a skeletal juggernaut. Part of Summon Undead spell.", + "valid_targets": [ "ground" ], + "effect": "summon", + "effect_str": "mon_skeleton_hulk", + "max_level": 35, + "min_duration": 1260000, + "max_duration": 1260000, + "duration_increment": 36000 + }, + { + "id": "summon_undead_swarm", + "type": "SPELL", + "name": "Summon Undead Swarm", + "description": "A group of undead animals rises from the depths of the earth to fight for you. You may be able to summon the stronger ones with a higher level in this spell.", + "valid_targets": [ "self" ], + "min_damage": 1, + "max_damage": 1, + "max_level": 35, + "difficulty": 3, + "spell_class": "ANIMIST", + "effect": "effect_on_condition", + "effect_str": "EOC_SUMMON_ZOMBIE_SWARM", + "components": "spell_components_rune_animist_3", "shape": "blast", - "energy_source": "HP", - "base_energy_cost": 14, - "//2": "half a minute", + "energy_source": "MANA", + "base_energy_cost": 600, "base_casting_time": 3000, - "min_range": 3, - "max_range": 3, - "min_aoe": 2, - "max_aoe": 2, "flags": [ "SOMATIC", "VERBAL", "CONCENTRATE" ], "min_duration": 36000, "max_duration": 1080000, "duration_increment": 36000 }, { - "id": "summon_decayed_pouncer", + "type": "effect_on_condition", + "id": "EOC_SUMMON_ZOMBIE_SWARM", + "effect": { + "switch": { "u_val": "spell_level", "spell": "summon_undead" }, + "cases": [ + { "case": 0, "effect": { "u_cast_spell": { "id": "summon_zombie_dog" } } }, + { "case": 5, "effect": { "u_cast_spell": { "id": "summon_dog_skeleton" } } }, + { "case": 10, "effect": { "u_cast_spell": { "id": "summon_zougar" } } }, + { "case": 15, "effect": { "u_cast_spell": { "id": "summon_wolf_skeleton" } } }, + { "case": 20, "effect": { "u_cast_spell": { "id": "summon_dog_zombie_brute" } } }, + { "case": 25, "effect": { "u_cast_spell": { "id": "summon_dog_skeleton_brute" } } }, + { "case": 30, "effect": { "u_cast_spell": { "id": "summon_dog_zombie_hulk" } } }, + { "case": 35, "effect": { "u_cast_spell": { "id": "summon_zougar_hunter" } } } + ] + } + }, + { + "abstract": "summon_abstract_swarm", "type": "SPELL", - "name": "Summon Decayed Pouncer", - "description": "A decrepit looking large cat rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.", + "name": "Abstract Summon Swarm", + "description": "Abstract of Summon Undead Swarm spell.", "valid_targets": [ "ground" ], - "min_damage": 1, + "min_damage": 3, "max_damage": 3, - "//": "level 20 will max out your number of summons", - "damage_increment": 0.1, - "max_level": 30, - "difficulty": 10, - "spell_class": "ANIMIST", + "max_level": 35, "effect": "summon", - "effect_str": "mon_zougar", "shape": "blast", - "energy_source": "HP", - "base_energy_cost": 30, - "//2": "half a minute", - "base_casting_time": 3000, "min_range": 3, "max_range": 3, "min_aoe": 2, "max_aoe": 2, - "flags": [ "SOMATIC", "VERBAL", "CONCENTRATE" ], + "flags": [ "SILENT", "NO_EXPLOSION_SFX" ], "min_duration": 36000, "max_duration": 1080000, - "duration_increment": 36000, - "learn_spells": { "summon_zougar_hunter": 20 } + "duration_increment": 36000 + }, + { + "id": "summon_zombie_dog", + "copy-from": "summon_abstract_swarm", + "type": "SPELL", + "name": "Summon Zombie Dog", + "description": "Summon a zombie dog. Part of Summon Undead Swarm spell.", + "valid_targets": [ "ground" ], + "effect": "summon", + "effect_str": "mon_zombie_dog", + "max_level": 35, + "min_duration": 144000, + "max_duration": 144000, + "duration_increment": 36000 + }, + { + "id": "summon_dog_skeleton", + "copy-from": "summon_abstract_swarm", + "type": "SPELL", + "name": "Summon Skeletal Dog", + "description": "Summon a skeletal dog. Part of Summon Undead Swarm spell.", + "valid_targets": [ "ground" ], + "effect": "summon", + "effect_str": "mon_dog_skeleton", + "max_level": 35, + "min_duration": 324000, + "max_duration": 324000, + "duration_increment": 36000 + }, + { + "id": "summon_zougar", + "copy-from": "summon_abstract_swarm", + "type": "SPELL", + "name": "Summon Decayed Pouncer", + "description": "Summon a decayed pouncer. Part of Summon Undead Swarm spell.", + "valid_targets": [ "ground" ], + "effect": "summon", + "effect_str": "mon_zougar", + "max_level": 35, + "min_duration": 504000, + "max_duration": 504000, + "duration_increment": 36000 + }, + { + "id": "summon_wolf_skeleton", + "copy-from": "summon_abstract_swarm", + "type": "SPELL", + "name": "Summon Skeletal Wolf", + "description": "Summon a skeletal wolf. Part of Summon Undead Swarm spell.", + "valid_targets": [ "ground" ], + "effect": "summon", + "effect_str": "mon_wolf_skeleton", + "max_level": 35, + "min_duration": 684000, + "max_duration": 684000, + "duration_increment": 36000 + }, + { + "id": "summon_dog_zombie_brute", + "copy-from": "summon_abstract_swarm", + "type": "SPELL", + "name": "Summon Barghest", + "description": "Summon a barghest. Part of Summon Undead Swarm spell.", + "valid_targets": [ "ground" ], + "effect": "summon", + "effect_str": "mon_dog_zombie_brute", + "max_level": 35, + "min_duration": 864000, + "max_duration": 864000, + "duration_increment": 36000 + }, + { + "id": "summon_dog_skeleton_brute", + "copy-from": "summon_abstract_swarm", + "type": "SPELL", + "name": "Summon Boneplate Wolf", + "description": "Summon a boneplate wolf. Part of Summon Undead Swarm spell.", + "valid_targets": [ "ground" ], + "effect": "summon", + "effect_str": "mon_dog_skeleton_brute", + "max_level": 35, + "min_duration": 1044000, + "max_duration": 1044000, + "duration_increment": 36000 + }, + { + "id": "summon_dog_zombie_hulk", + "copy-from": "summon_abstract_swarm", + "type": "SPELL", + "name": "Summon Hulking Horror", + "description": "Summon a Hulking Horror. Part of Summon Undead Swarm spell.", + "valid_targets": [ "ground" ], + "effect": "summon", + "effect_str": "mon_dog_zombie_hulk", + "max_level": 35, + "min_duration": 1260000, + "max_duration": 1260000, + "duration_increment": 36000 }, { "id": "summon_zougar_hunter", + "copy-from": "summon_abstract_swarm", "type": "SPELL", "name": "Summon Spearcat Hunter", - "description": "A primal looking large cat rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.", + "description": "Summon a spearcat hunter. Part of Summon Undead Swarm spell.", "valid_targets": [ "ground" ], - "min_damage": 1, - "max_damage": 3, - "//": "level 20 will max out your number of summons", - "damage_increment": 0.1, - "max_level": 30, - "difficulty": 14, - "spell_class": "ANIMIST", "effect": "summon", "effect_str": "mon_zougar_hunter", - "shape": "blast", - "energy_source": "HP", - "base_energy_cost": 45, - "//2": "half a minute", - "base_casting_time": 3000, - "min_range": 3, - "max_range": 3, - "min_aoe": 2, - "max_aoe": 2, - "flags": [ "SOMATIC", "VERBAL", "CONCENTRATE" ], - "min_duration": 36000, - "max_duration": 1080000, + "max_level": 35, + "min_duration": 1260000, + "max_duration": 1260000, "duration_increment": 36000 }, { "id": "necrotic_gaze", "type": "SPELL", "name": "Necrotic Gaze", - "description": "You use the power of your own blood to imbue necrotic energy into your gaze, damaging the target you look at.", + "description": "You use the power of your own blood, concentrated in rune, to imbue necrotic energy into your gaze, damaging the target you look at.", "valid_targets": [ "hostile" ], "effect": "attack", - "shape": "blast", + "shape": "line", "spell_class": "ANIMIST", - "energy_source": "HP", + "energy_source": "MANA", "flags": [ "NO_LEGS", "CONCENTRATE", "SOMATIC", "NO_PROJECTILE", "NO_HANDS" ], + "components": "spell_components_rune_animist", "min_damage": 10, "max_damage": 160, "damage_increment": 6.0, @@ -235,14 +401,16 @@ "max_level": 25, "difficulty": 3, "base_casting_time": 100, - "base_energy_cost": 2, + "min_aoe": 1, + "max_aoe": 3, + "aoe_increment": 0.1, "damage_type": "biological" }, { "id": "create_rune_animist", "type": "SPELL", "name": { "str": "Animist Rune" }, - "description": "This ritual creates a small pebble attuned to Animists. You can use the rune as a catalyst for recipes.", + "description": "This ritual creates a small pebble attuned to Animists. You can use the rune to summon creatures, or as a catalyst for recipes.", "valid_targets": [ "self" ], "min_damage": 1, "max_damage": 1, @@ -257,9 +425,114 @@ "difficulty": 0, "max_level": 0, "spell_class": "ANIMIST", - "energy_source": "MANA", + "energy_source": "HP", "flags": [ "PERMANENT", "NO_LEGS", "CONCENTRATE" ] }, + { + "id": "dominate", + "type": "SPELL", + "name": "Domination", + "description": "Force the undead creature you pick to obey your command, making it ally for a short time. It's an expensive spell, so use it wisely.", + "valid_targets": [ "hostile" ], + "flags": [ "CONCENTRATE", "SOMATIC", "SILENT" ], + "effect": "charm_monster", + "targeted_monster_species": [ "ZOMBIE" ], + "components": "spell_components_rune_animist_3", + "shape": "blast", + "message": "", + "min_damage": 80, + "max_damage": 280, + "damage_increment": 10, + "min_range": 4, + "max_range": 26, + "range_increment": 1.1, + "base_energy_cost": 400, + "spell_class": "ANIMIST", + "difficulty": 6, + "max_level": 20, + "min_aoe": 0, + "max_aoe": 1, + "aoe_increment": 0.1, + "min_duration": 36000, + "max_duration": 1080000, + "duration_increment": 36000, + "base_casting_time": 300, + "final_casting_time": 30, + "casting_time_increment": -14, + "energy_source": "MANA" + }, + { + "id": "life_detonation", + "type": "SPELL", + "name": "Life Detonation", + "description": "Explode a living energy inside your undead, to release a tremendous force around.", + "valid_targets": [ "ally" ], + "targeted_monster_species": [ "ZOMBIE" ], + "effect": "attack", + "shape": "blast", + "spell_class": "ANIMIST", + "flags": [ "NO_LEGS", "CONCENTRATE", "SOMATIC", "NO_PROJECTILE", "NO_HANDS", "PERCENTAGE_DAMAGE" ], + "min_damage": 100, + "max_damage": 100, + "min_range": 10, + "max_range": 50, + "range_increment": 1.6, + "max_level": 25, + "difficulty": 5, + "base_casting_time": 150, + "final_casting_time": 30, + "casting_time_increment": -5, + "base_energy_cost": 300, + "energy_source": "MANA", + "damage_type": "biological", + "extra_effects": [ { "id": "life_detonation_explosion" } ] + }, + { + "id": "life_detonation_explosion", + "type": "SPELL", + "name": "Life Detonation Explosion", + "description": "Detonation for life detonation spell.", + "valid_targets": [ "hostile", "ground" ], + "flags": [ "CONCENTRATE", "SOMATIC", "SILENT" ], + "effect": "attack", + "shape": "blast", + "message": "", + "damage_type": "biological", + "//": "would be cool to make it deal damage the same as hp of the monster, but not possible sadly", + "min_damage": 20, + "max_damage": 180, + "damage_increment": 6.4, + "spell_class": "ANIMIST", + "difficulty": 5, + "max_level": 25, + "min_aoe": 2, + "max_aoe": 11, + "aoe_increment": 0.4 + }, + { + "id": "convert", + "type": "SPELL", + "name": "Convert", + "description": "Kill an ally creature, converting its life energy into compact rune, that you can use afterwards.", + "valid_targets": [ "ally" ], + "flags": [ "CONCENTRATE", "SOMATIC", "SILENT", "PERCENTAGE_DAMAGE" ], + "effect": "attack", + "shape": "blast", + "message": "", + "min_damage": 100, + "max_damage": 100, + "min_range": 10, + "max_range": 10, + "base_energy_cost": 250, + "spell_class": "ANIMIST", + "difficulty": 4, + "max_level": 10, + "base_casting_time": 30000, + "final_casting_time": 1000, + "casting_time_increment": -200, + "energy_source": "MANA", + "extra_effects": [ { "id": "create_rune_animist", "hit_self": true } ] + }, { "id": "soulrend", "type": "SPELL", diff --git a/data/mods/Magiclysm/itemgroups/itemgroups.json b/data/mods/Magiclysm/itemgroups/itemgroups.json index a7706855ca22f..e115ff4774603 100644 --- a/data/mods/Magiclysm/itemgroups/itemgroups.json +++ b/data/mods/Magiclysm/itemgroups/itemgroups.json @@ -1023,14 +1023,14 @@ { "distribution": [ { "item": "spell_scroll_smite", "prob": 50 }, - { "item": "spell_scroll_summon_zombie", "prob": 50 }, + { "item": "spell_scroll_summon_undead", "prob": 50 }, { "item": "spell_scroll_necrotic_gaze", "prob": 50 }, { "item": "spell_scroll_summon_wisps", "prob": 50 } ], "prob": 45 }, { - "distribution": [ { "item": "priest_advanced", "prob": 10 }, { "item": "spell_scroll_summon_skeleton", "prob": 50 } ], + "distribution": [ { "item": "priest_advanced", "prob": 10 }, { "item": "spell_scroll_summon_undead", "prob": 50 } ], "prob": 35 }, { @@ -1038,7 +1038,7 @@ { "item": "recovery_spellbook", "prob": 5 }, { "item": "winter_grasp", "prob": 10 }, { "item": "spell_scroll_recover_mana", "prob": 50 }, - { "item": "spell_scroll_summon_decayed_pouncer", "prob": 50 }, + { "item": "spell_scroll_summon_undead_swarm", "prob": 50 }, { "item": "spell_scroll_recover_pain", "prob": 50 } ], "prob": 10 diff --git a/data/mods/Magiclysm/itemgroups/spellbooks.json b/data/mods/Magiclysm/itemgroups/spellbooks.json index 03ba4eaaff6e1..3cb1a680bba6d 100644 --- a/data/mods/Magiclysm/itemgroups/spellbooks.json +++ b/data/mods/Magiclysm/itemgroups/spellbooks.json @@ -6,7 +6,7 @@ [ "summon_scroll_smudged", 10 ], [ "spell_scroll_tornskin", 10 ], [ "spell_scroll_smite", 40 ], - [ "spell_scroll_summon_zombie", 25 ], + [ "spell_scroll_summon_undead", 25 ], [ "spell_scroll_light_healing", 50 ], [ "spell_scroll_bio_acidicspray", 35 ], [ "spell_scroll_create_atomic_light", 50 ], @@ -49,7 +49,6 @@ "type": "item_group", "items": [ [ "spell_scroll_sound_bomb", 35 ], - [ "spell_scroll_summon_skeleton", 35 ], [ "spell_scroll_pain_split", 25 ], [ "spell_scroll_bio_grotesque", 40 ], [ "spell_scroll_bio_fleshpouch", 30 ], @@ -107,7 +106,10 @@ [ "spell_scroll_recover_fatigue", 25 ], [ "spell_scroll_recover_stamina", 25 ], [ "spell_scroll_recover_bionic_power", 25 ], - [ "spell_scroll_summon_decayed_pouncer", 35 ], + [ "spell_scroll_summon_undead_swarm", 35 ], + [ "spell_scroll_convert", 50 ], + [ "spell_scroll_dominate", 50 ], + [ "spell_scroll_life_detonation", 50 ], [ "spell_scroll_summon_floating_disk", 25 ], [ "spell_scroll_vicious_tentacle", 40 ], [ "spell_scroll_bio_bonespear", 20 ], diff --git a/data/mods/Magiclysm/items/cast_spell_items.json b/data/mods/Magiclysm/items/cast_spell_items.json index 66cfc95764dda..51bd3628399ea 100644 --- a/data/mods/Magiclysm/items/cast_spell_items.json +++ b/data/mods/Magiclysm/items/cast_spell_items.json @@ -333,7 +333,7 @@ "id": "animist_doll_zombie", "name": "zombie voodoo doll", "description": "A remarkably accurate effigy of an undead human, including pieces of bone and organs. Necromantic magic delays immediate rot, but it won't last forever. Piercing it with the attached needle could compel it to serve you.", - "use_action": { "type": "cast_spell", "spell_id": "summon_zombie", "no_fail": true, "level": 12 }, + "use_action": { "type": "cast_spell", "spell_id": "summon_zombie_brute", "no_fail": true, "level": 0 }, "type": "COMESTIBLE", "comestible_type": "FOOD", "category": "weapons", @@ -350,7 +350,7 @@ "id": "animist_doll_skeleton", "name": "ossified voodoo doll", "description": "A remarkably accurate effigy of an undead human covered with bone, including pieces of organs. Necromantic magic delays immediate rot, but it won't last forever. Piercing it with the attached needle could compel it to serve you.", - "use_action": { "type": "cast_spell", "spell_id": "summon_skeleton", "no_fail": true, "level": 10 }, + "use_action": { "type": "cast_spell", "spell_id": "summon_skeleton_brute", "no_fail": true, "level": 0 }, "type": "COMESTIBLE", "category": "weapons", "copy-from": "animist_doll_zombie" @@ -359,7 +359,7 @@ "id": "animist_doll_decayed_pouncer", "name": "cougar voodoo doll", "description": "A remarkably accurate effigy of an undead cougar, complete with fur, bones, and organs. Necromantic magic delays immediate rot, but it won't last forever. Piercing it with the attached needle could compel it to serve you.", - "use_action": { "type": "cast_spell", "spell_id": "summon_decayed_pouncer", "no_fail": true, "level": 13 }, + "use_action": { "type": "cast_spell", "spell_id": "summon_zougar", "no_fail": true, "level": 0 }, "type": "COMESTIBLE", "category": "weapons", "material": [ "fur", "flesh", "bone" ], diff --git a/data/mods/Magiclysm/items/spell_scrolls.json b/data/mods/Magiclysm/items/spell_scrolls.json index 05fbb758a4df4..13027dd8f2672 100644 --- a/data/mods/Magiclysm/items/spell_scrolls.json +++ b/data/mods/Magiclysm/items/spell_scrolls.json @@ -113,20 +113,11 @@ { "type": "BOOK", "copy-from": "spell_scroll", - "id": "spell_scroll_summon_zombie", + "id": "spell_scroll_summon_undead", "//": "Animist spell", - "name": { "str": "Scroll of Summon Zombie", "str_pl": "Scrolls of Summon Zombie" }, + "name": { "str": "Scroll of Summon Undead", "str_pl": "Scrolls of Summon Undead" }, "description": "An ethereal-looking zombie rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.", - "use_action": { "type": "learn_spell", "spells": [ "summon_zombie" ] } - }, - { - "type": "BOOK", - "copy-from": "spell_scroll", - "id": "spell_scroll_summon_skeleton", - "//": "Animist spell", - "name": { "str": "Scroll of Summon Skeleton", "str_pl": "Scrolls of Summon Skeleton" }, - "description": "A ghostly skeleton rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.", - "use_action": { "type": "learn_spell", "spells": [ "summon_skeleton" ] } + "use_action": { "type": "learn_spell", "spells": [ "summon_undead" ] } }, { "type": "BOOK", @@ -157,11 +148,38 @@ { "type": "BOOK", "copy-from": "spell_scroll", - "id": "spell_scroll_summon_decayed_pouncer", + "id": "spell_scroll_summon_undead_swarm", + "//": "Animist spell", + "name": { "str": "Scroll of Summon Undead Swarm", "str_pl": "Scrolls of Summon Undead Swarm" }, + "description": "A few decrepit looking animals rises from the depths of the earth to fight for you. You may be able to summon better with a higher level in this spell.", + "use_action": { "type": "learn_spell", "spells": [ "summon_undead_swarm" ] } + }, + { + "type": "BOOK", + "copy-from": "spell_scroll", + "id": "spell_scroll_convert", + "//": "Animist spell", + "name": { "str": "Scroll of Convert", "str_pl": "Scrolls of Convert" }, + "description": "Kill an ally creature, converting its life energy into compact rune, that you can use afterwards.", + "use_action": { "type": "learn_spell", "spells": [ "convert" ] } + }, + { + "type": "BOOK", + "copy-from": "spell_scroll", + "id": "spell_scroll_dominate", + "//": "Animist spell", + "name": { "str": "Scroll of Domination", "str_pl": "Scrolls of Domination" }, + "description": "Force the undead creature you pick to obey your command, making it an ally for a short time.", + "use_action": { "type": "learn_spell", "spells": [ "dominate" ] } + }, + { + "type": "BOOK", + "copy-from": "spell_scroll", + "id": "spell_scroll_life_detonation", "//": "Animist spell", - "name": { "str": "Scroll of Summon Decayed Pouncer", "str_pl": "Scrolls of Summon Decayed Pouncer" }, - "description": "A decrepit looking large cat rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.", - "use_action": { "type": "learn_spell", "spells": [ "summon_decayed_pouncer" ] } + "name": { "str": "Scroll of Life Detonation", "str_pl": "Scrolls of Life Detonation" }, + "description": "Explode a living energy inside your undead, to release a tremendous force around.", + "use_action": { "type": "learn_spell", "spells": [ "life_detonation" ] } }, { "type": "BOOK", diff --git a/data/mods/Magiclysm/items/spellbooks.json b/data/mods/Magiclysm/items/spellbooks.json index 3d0a6c6fab30b..ade00d7fe6ca3 100644 --- a/data/mods/Magiclysm/items/spellbooks.json +++ b/data/mods/Magiclysm/items/spellbooks.json @@ -376,7 +376,15 @@ "color": "light_blue", "use_action": { "type": "learn_spell", - "spells": [ "recover_mana", "recover_bionic_power", "recover_pain", "recover_fatigue", "recover_stamina", "druid_healing" ] + "spells": [ + "recover_mana", + "recover_bionic_power", + "recover_pain", + "recover_fatigue", + "recover_stamina", + "druid_healing", + "convert" + ] } }, { @@ -498,7 +506,10 @@ "looks_like": "cookbook", "symbol": "?", "color": "light_gray", - "use_action": { "type": "learn_spell", "spells": [ "summon_zombie", "summon_skeleton", "summon_decayed_pouncer" ] } + "use_action": { + "type": "learn_spell", + "spells": [ "summon_undead", "summon_undead_swarm", "convert", "dominate", "life_detonation" ] + } }, { "id": "techno_fundamentals", diff --git a/data/mods/Magiclysm/migration_and_obsoletion.json b/data/mods/Magiclysm/migration_and_obsoletion.json new file mode 100644 index 0000000000000..270a290464dd9 --- /dev/null +++ b/data/mods/Magiclysm/migration_and_obsoletion.json @@ -0,0 +1,73 @@ +[ + { + "id": "spell_scroll_summon_zombie", + "type": "MIGRATION", + "replace": "spell_scroll_summon_undead" + }, + { + "id": "spell_scroll_summon_skeleton", + "type": "MIGRATION", + "replace": "spell_scroll_summon_undead" + }, + { + "id": "spell_scroll_summon_decayed_pouncer", + "type": "MIGRATION", + "replace": "spell_scroll_summon_undead_swarm" + }, + { + "type": "BOOK", + "copy-from": "spell_scroll", + "id": "spell_scroll_summon_zombie", + "//": "obsoleted", + "name": { "str": "Scroll of Summon Zombie", "str_pl": "Scrolls of Summon Zombie" }, + "description": "An ethereal-looking zombie rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.", + "use_action": { "type": "learn_spell", "spells": [ "summon_undead" ] } + }, + { + "type": "BOOK", + "copy-from": "spell_scroll", + "id": "spell_scroll_summon_skeleton", + "//": "obsoleted", + "name": { "str": "Scroll of Summon Skeleton", "str_pl": "Scrolls of Summon Skeleton" }, + "description": "A ghostly skeleton rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.", + "use_action": { "type": "learn_spell", "spells": [ "summon_undead" ] } + }, + { + "type": "BOOK", + "copy-from": "spell_scroll", + "id": "spell_scroll_summon_decayed_pouncer", + "//": "obsoleted", + "name": { "str": "Scroll of Summon Decayed Pouncer", "str_pl": "Scrolls of Summon Decayed Pouncer" }, + "description": "A decrepit looking large cat rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.", + "use_action": { "type": "learn_spell", "spells": [ "summon_decayed_pouncer" ] } + }, + { + "id": "summon_decayed_pouncer", + "type": "SPELL", + "name": "Summon Decayed Pouncer", + "description": "A decrepit looking large cat rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.", + "valid_targets": [ "ground" ], + "min_damage": 1, + "max_damage": 3, + "//": "obsoleted", + "damage_increment": 0.1, + "max_level": -1, + "difficulty": 10, + "spell_class": "ANIMIST", + "effect": "summon", + "effect_str": "mon_zougar", + "shape": "blast", + "energy_source": "HP", + "base_energy_cost": 30, + "//2": "half a minute", + "base_casting_time": 3000, + "min_range": 3, + "max_range": 3, + "min_aoe": 2, + "max_aoe": 2, + "flags": [ "SOMATIC", "VERBAL", "CONCENTRATE" ], + "min_duration": 36000, + "max_duration": 1080000, + "duration_increment": 36000 + } +] diff --git a/data/mods/Magiclysm/professions.json b/data/mods/Magiclysm/professions.json index 8a950b5da7548..9cbadf9df6ac7 100644 --- a/data/mods/Magiclysm/professions.json +++ b/data/mods/Magiclysm/professions.json @@ -199,7 +199,7 @@ "id": "novice_necromancer", "name": "Novice Necromancer", "description": "You always had to hide your magic, as it was generally not an acceptable type of magic in the wizarding world, but with the Cataclysm you need to pull every trick out of the book.", - "spells": [ { "id": "summon_zombie", "level": 5 }, { "id": "necrotic_gaze", "level": 1 } ], + "spells": [ { "id": "summon_undead", "level": 5 }, { "id": "necrotic_gaze", "level": 1 } ], "points": 2, "skills": [ { "level": 1, "name": "spellcraft" } ], "items": { @@ -379,7 +379,7 @@ "spells": [ { "id": "recover_mana", "level": 2 }, { "id": "necrotic_gaze", "level": 2 }, - { "id": "summon_zombie", "level": 2 }, + { "id": "summon_undead", "level": 2 }, { "id": "dark_sight", "level": 3 } ], "CBMs": [ "bio_fuel_cell_blood", "bio_power_storage_mkII", "bio_nanobots" ], diff --git a/data/mods/Magiclysm/requirements/spell_components.json b/data/mods/Magiclysm/requirements/spell_components.json index 8e6e31b39eb9a..370a2cd0c1894 100644 --- a/data/mods/Magiclysm/requirements/spell_components.json +++ b/data/mods/Magiclysm/requirements/spell_components.json @@ -83,6 +83,16 @@ "type": "requirement", "components": [ [ [ "aura_stoneskin", 1 ] ] ] }, + { + "id": "spell_components_rune_animist", + "type": "requirement", + "components": [ [ [ "rune_animist", 1 ] ] ] + }, + { + "id": "spell_components_rune_animist_3", + "type": "requirement", + "components": [ [ [ "rune_animist", 3 ] ] ] + }, { "id": "spell_components_potion_starter", "type": "requirement", diff --git a/data/mods/Xedra_Evolved/regional_overlay.json b/data/mods/Xedra_Evolved/regional_overlay.json index 5cc9105b23159..603b5915af689 100644 --- a/data/mods/Xedra_Evolved/regional_overlay.json +++ b/data/mods/Xedra_Evolved/regional_overlay.json @@ -2,11 +2,12 @@ { "type": "region_overlay", "regions": [ "all" ], + "city": { "houses": { "safe_house": 5 }, "parks": { "vampire_cathedral": 50 } }, "map_extras": { "road": { "chance": 75, "extras": { - "mx_golden_monolith": 10, + "mx_golden_monolith": 15, "mx_military": 50, "mx_science": 400, "mx_collegekids": 500, diff --git a/doc/BASECAMP.md b/doc/BASECAMP.md index 95ba1bf27f7e1..eb824f619c6d8 100644 --- a/doc/BASECAMP.md +++ b/doc/BASECAMP.md @@ -54,7 +54,8 @@ provides `"id"` | meaning `"farming"` | after this upgrade mission is complete, the Plow Fields, Plant Fields, Fertilize Fields, and Harvest Fields basecamp missions will be available. `"reseeding"` | after this upgrade mission is complete, recipe groups with `"building_type": "FARM"` will become visible. `"kitchen"` | after this upgrade mission is complete, recipe groups with `"building_type": "COOK"` will become visible. -`"blacksmith"` |after this upgrade mission is complete, recipe groups with `"building_type": "SMITH"` will become visible. +`"blacksmith"` | after this upgrade mission is complete, recipe groups with `"building_type": "SMITH"` will become visible. +`"water_well"` | after this upgrade mission is complete, the camp will have a permanent water source. This enables your followers at or near the camp to automatically drink from its well when they are thirsty. `blueprint_provides` can also be used to name objects from `recipe_group.json`. The recipes will be craftable by NPCs at that expansion, allowing the creation of custom recipes that can be performed exclusively at faction camps. diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index 58b07db5c5963..d2600447f5942 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -62,6 +62,7 @@ - [Flags](#flags-11) - [Camp building recipes](#camp-building-recipes) - [Flags](#flags-12) + - [Blueprint reorientation flags](#blueprint-reorientation-flags) - [Scenarios](#scenarios) - [Flags](#flags-13) - [Profession Flags](#profession-flags) @@ -1271,6 +1272,10 @@ These flags apply to crafting recipes, i.e. those that fall within the following These flags apply only to camp building recipes (hubs and expansions), i.e. those that have category `CC_BUILDING`. #### Flags + +- ```NO_FOOD_REQ``` Food requirements are waived for this camp building recipe. + +#### Blueprint reorientation flags The purpose of these flags is to allow reuse of blueprints to create the "same" facility oriented differently. Mirroring takes place before rotation, and it is an error to try to apply mirroring multiple times with the same orientation, as well as to try to apply multiple rotations. It is permitted to apply different versions of the flags if they apply to different directions (and it is indeed the primary diff --git a/doc/NPCs.md b/doc/NPCs.md index fa2163a92fe66..9f9e212fb321c 100644 --- a/doc/NPCs.md +++ b/doc/NPCs.md @@ -841,8 +841,6 @@ Effect | Description `assign_guard` | Makes the NPC into a guard. If allied and at a camp, they will be assigned to that camp. `stop_guard` | Releases the NPC from their guard duty (also see `assign_guard`). Friendly NPCs will return to following. `start_camp` | The NPC will start a faction camp with the player. -`recover_camp` | Makes the NPC the overseer of an existing camp that doesn't have an overseer. -`remove_overseer` | Makes the NPC stop being an overseer, abandoning the faction camp. `wake_up` | Wakes up sleeping, but not sedated, NPCs. `reveal_stats` | Reveals the NPC's stats, based on the player's skill at assessing them. `end_conversation` | Ends the conversation and makes the NPC ignore you from now on. @@ -917,9 +915,9 @@ Effect | Description #### Sample effects ```json { "topic": "TALK_EVAC_GUARD3_HOSTILE", "effect": [ { "u_faction_rep": -15 }, { "npc_change_faction": "hells_raiders" } ] } -{ "text": "Let's trade then.", "effect": "start_trade", "topic": "TALK_EVAC_MERCHANT" }, -{ "text": "What needs to be done?", "topic": "TALK_CAMP_OVERSEER", "effect": { "companion_mission": "FACTION_CAMP" } } -{ "text": "Do you like it?", "topic": "TALK_CAMP_OVERSEER", "effect": [ { "u_add_effect": "concerned", "duration": 600 }, { "npc_add_effect": "touched", "duration": 3600 }, { "u_add_effect": "empathetic", "duration": "PERMANENT" } ] } +{ "text": "Let's trade then.", "effect": "start_trade", "topic": "TALK_EVAC_MERCHANT" } +{ "text": "Show me what needs to be done at the camp.", "topic": "TALK_DONE", "effect": "basecamp_mission", "condition": { "npc_at_om_location": "FACTION_CAMP_ANY" } } +{ "text": "Do you like it?", "topic": "TALK_EXAMPLE", "effect": [ { "u_add_effect": "concerned", "duration": 600 }, { "npc_add_effect": "touched", "duration": 3600 }, { "u_add_effect": "empathetic", "duration": "PERMANENT" } ] } ``` --- diff --git a/src/basecamp.cpp b/src/basecamp.cpp index dd318d161e5d1..2b4c57e37a035 100644 --- a/src/basecamp.cpp +++ b/src/basecamp.cpp @@ -40,8 +40,6 @@ #include "translations.h" #include "type_id.h" -static const item_group_id Item_spawn_data_forest( "forest" ); - static const zone_type_id zone_type_CAMP_STORAGE( "CAMP_STORAGE" ); const std::map base_camps::all_directions = { @@ -293,9 +291,8 @@ bool basecamp::can_expand() const bool basecamp::has_water() const { - return has_provides( "water_well" ) || has_provides( "fbmh_well_north" ) || - has_provides( "faction_base_camp_12" ) || has_provides( "faction_base_kitchen_6" ) || - has_provides( "faction_base_blacksmith_11" ); + // special case required for fbmh_well_north constructed between b9162 (Jun 16, 2019) and b9644 (Sep 20, 2019) + return has_provides( "water_well" ) || has_provides( "fbmh_well_north" ); } std::vector basecamp::available_upgrades( const point &dir ) @@ -379,19 +376,6 @@ std::map basecamp::recipe_deck( const std::string &bldg return recipe_group::get_recipes_by_bldg( bldg ); } -item_group_id basecamp::get_gatherlist() const -{ - const auto &e = expansions.find( base_camps::base_dir ); - if( e != expansions.end() ) { - item_group_id gatherlist( - "gathering_" + base_camps::faction_encode_abs( e->second, 4 ) ); - if( item_group::group_is_defined( gatherlist ) ) { - return gatherlist; - } - } - return Item_spawn_data_forest; -} - void basecamp::add_resource( const itype_id &camp_resource ) { basecamp_resource bcp_r; diff --git a/src/basecamp.h b/src/basecamp.h index 264319da9a906..733a9131672dd 100644 --- a/src/basecamp.h +++ b/src/basecamp.h @@ -231,7 +231,6 @@ class basecamp void form_crafting_inventory(); void form_crafting_inventory( map &target_map ); std::list use_charges( const itype_id &fake_id, int &quantity ); - item_group_id get_gatherlist() const; /** * spawn items or corpses based on search attempts * @param skill skill level of the search @@ -267,7 +266,7 @@ class basecamp std::string recruit_description( int npc_count ) const; /// Provides a "guess" for some of the things your gatherers will return with /// to upgrade the camp - std::string gathering_description( const std::string &bldg ); + std::string gathering_description(); /// Returns a string for the number of plants that are harvestable, plots ready to plant, /// and ground that needs tilling std::string farm_description( const tripoint_abs_omt &farm_pos, size_t &plots_count, diff --git a/src/condition.cpp b/src/condition.cpp index 2a91e69d7fc80..d0243f0a1aba8 100644 --- a/src/condition.cpp +++ b/src/condition.cpp @@ -672,7 +672,7 @@ void conditional_t::set_at_om_location( const JsonObject &jo, const std::stri if( bcp ) { return true; } - // legacy check + // TODO: legacy check to be removed once primitive field camp OMTs have been purged return omt_str.find( "faction_base_camp" ) != std::string::npos; } else if( location.evaluate( d ) == "FACTION_CAMP_START" ) { return !recipe_group::get_recipes_by_id( "all_faction_base_types", omt_str ).empty(); @@ -700,7 +700,7 @@ void conditional_t::set_near_om_location( const JsonObject &jo, const std::st if( bcp ) { return true; } - // legacy check + // TODO: legacy check to be removed once primitive field camp OMTs have been purged if( omt_str.find( "faction_base_camp" ) != std::string::npos ) { return true; } diff --git a/src/faction_camp.cpp b/src/faction_camp.cpp index 2ca4f09594a9e..f59771af59265 100644 --- a/src/faction_camp.cpp +++ b/src/faction_camp.cpp @@ -98,7 +98,7 @@ static const item_group_id Item_spawn_data_foraging_faction_camp_winter( "foraging_faction_camp_winter" ); static const item_group_id Item_spawn_data_forest( "forest" ); static const item_group_id -Item_spawn_data_gathering_faction_base_camp_firewood( "gathering_faction_base_camp_firewood" ); +Item_spawn_data_gathering_faction_camp_firewood( "gathering_faction_camp_firewood" ); static const itype_id itype_fungal_seeds( "fungal_seeds" ); static const itype_id itype_log( "log" ); @@ -707,29 +707,6 @@ void talk_function::start_camp( npc &p ) } } -void talk_function::recover_camp( npc &p ) -{ - const tripoint_abs_omt omt_pos = p.global_omt_location(); - const std::string &omt_ref = overmap_buffer.ter( omt_pos ).id().c_str(); - if( omt_ref.find( "faction_base_camp" ) == std::string::npos ) { - popup( _( "There is no faction camp here to recover!" ) ); - return; - } - get_basecamp( p ); -} - -void talk_function::remove_overseer( npc &p ) -{ - size_t suffix = p.get_name().find( _( ", Camp Manager" ) ); - if( suffix != std::string::npos ) { - p.get_name() = p.get_name().substr( 0, suffix ); - } - - add_msg( _( "%s has abandoned the camp." ), p.get_name() ); - p.companion_mission_role_id.clear(); - stop_guard( p ); -} - void talk_function::basecamp_mission( npc &p ) { const std::string title = _( "Base Missions" ); @@ -843,7 +820,7 @@ void basecamp::get_available_missions_by_dir( mission_data &mission_key, const p "%s\n" "Risk: Very Low\n" "Time: 3 Hours, Repeated\n" - "Positions: %d/3\n" ), gathering_description( gather_bldg ), + "Positions: %d/3\n" ), gathering_description(), npc_list.size() ); mission_key.add_start( miss_id, name_display_of( miss_id ), entry, npc_list.size() < 3 ); @@ -1841,7 +1818,7 @@ void basecamp::start_upgrade( const mission_id &miss_id ) //Stop upgrade if you don't have materials if( making.deduped_requirements().can_make_with_inventory( _inv, making.get_component_filter() ) ) { - bool must_feed = miss_id.parameters != "faction_base_camp_1"; + bool must_feed = !making.has_flag( "NO_FOOD_REQ" ); basecamp_action_components components( making, 1, *this ); if( !components.choose_components() ) { @@ -3470,9 +3447,9 @@ bool basecamp::gathering_return( const mission_id &miss_id, time_duration min_ti item_group_id itemlist( "forest" ); if( miss_id.id == Camp_Collect_Firewood ) { - itemlist = Item_spawn_data_gathering_faction_base_camp_firewood; + itemlist = Item_spawn_data_gathering_faction_camp_firewood; } else if( miss_id.id == Camp_Gather_Materials ) { - itemlist = get_gatherlist(); + itemlist = Item_spawn_data_forest; } else if( miss_id.id == Camp_Foraging ) { switch( season_of_year( calendar::turn ) ) { case SPRING: @@ -4760,6 +4737,7 @@ std::vector> talk_function::om_building const oter_id &omt_rnear = overmap_buffer.ter( omt_near_pos ); std::string om_rnear_id = omt_rnear.id().c_str(); if( !purge || ( om_rnear_id.find( "faction_base_" ) != std::string::npos && + // TODO: this exclusion check can be removed once primitive field camp OMTs have been purged om_rnear_id.find( "faction_base_camp" ) == std::string::npos ) ) { om_camp_region.emplace_back( om_rnear_id, omt_near_pos ); } @@ -4901,14 +4879,9 @@ std::string basecamp::recruit_description( int npc_count ) const return desc; } -std::string basecamp::gathering_description( const std::string &bldg ) +std::string basecamp::gathering_description() { - item_group_id itemlist; - if( item_group::group_is_defined( item_group_id( "gathering_" + bldg ) ) ) { - itemlist = item_group_id( "gathering_" + bldg ); - } else { - itemlist = Item_spawn_data_forest; - } + item_group_id itemlist = Item_spawn_data_forest; std::string output; // Functions like the debug item group tester but only rolls 6 times so the player diff --git a/src/faction_camp.h b/src/faction_camp.h index bcb1dd411c82c..245e153dd1e53 100644 --- a/src/faction_camp.h +++ b/src/faction_camp.h @@ -37,14 +37,8 @@ namespace talk_function { void basecamp_mission( npc & ); -///Changes an NPC follower to a camp manager -void become_overseer( npc & ); -///Changes an NPC follower to a camp manager, displays camp warnings, and sets the current OM tile to a camp survey +/// Start a faction camp on the current OM tile void start_camp( npc & ); -///Changes an NPC follower to a camp manager of an existing camp. -void recover_camp( npc & ); -///Changes an NPC camp manager to a follower -void remove_overseer( npc & ); void draw_camp_tabs( const catacurses::window &win, base_camps::tab_mode cur_tab, const std::vector> &entries ); diff --git a/src/game.cpp b/src/game.cpp index fcbb5bc3d2ab3..9d174dcd2ebe1 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -4802,8 +4802,18 @@ bool game::spawn_hallucination( const tripoint &p ) } } - return spawn_hallucination( p, MonsterGenerator::generator().get_valid_hallucination(), - cata::nullopt ); + mtype_id hallu = MonsterGenerator::generator().get_valid_hallucination(); + + // If there's 'spawns' exist for player's current location, then + // spawn random hallucination monster from 'spawns'-dependent monster group (90% chance) + // or a completely random hallucination monster (10% chance) + const oter_id &terrain_type = overmap_buffer.ter( get_player_character().global_omt_location() ); + const overmap_static_spawns &spawns = terrain_type->get_static_spawns(); + if( !spawns.group.is_null() && !one_in( 9 ) ) { + hallu = MonsterGroupManager::GetRandomMonsterFromGroup( spawns.group ); + } + + return spawn_hallucination( p, hallu, cata::nullopt ); } /** * Attempts to spawn a hallucination at given location. diff --git a/src/iuse.cpp b/src/iuse.cpp index f4e02c03da4fe..191d1ae009326 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -8466,6 +8466,10 @@ cata::optional iuse::tow_attach( Character *p, item *it, bool, const tripoi p->add_msg_if_player( _( "You can't attach the tow-line to an internal part." ) ); return cata::nullopt; } + if( !source_veh->part( vp->part_index() ).carried_stack.empty() ) { + p->add_msg_if_player( _( "You can't attach the tow-line to a racked part." ) ); + return cata::nullopt; + } } const tripoint abspos = here.getabs( posp ); it->set_var( "source_x", abspos.x ); @@ -8539,6 +8543,10 @@ cata::optional iuse::tow_attach( Character *p, item *it, bool, const tripoi p->add_msg_if_player( _( "You can't attach the tow-line to an internal part." ) ); return cata::nullopt; } + if( !target_veh->part( target_vp->part_index() ).carried_stack.empty() ) { + p->add_msg_if_player( _( "You can't attach the tow-line to a racked part." ) ); + return cata::nullopt; + } const vpart_id vpid( it->typeId().str() ); point vcoords = source_vp->mount(); vehicle_part source_part( vpid, "", vcoords, item( *it ) ); diff --git a/src/npctalk.cpp b/src/npctalk.cpp index 7dc695555e6ef..fb3b80b31567b 100644 --- a/src/npctalk.cpp +++ b/src/npctalk.cpp @@ -4416,8 +4416,6 @@ void talk_effect_t::parse_string_effect( const std::string &effect_id, const WRAP( buy_cow ), WRAP( buy_chicken ), WRAP( buy_horse ), - WRAP( recover_camp ), - WRAP( remove_overseer ), WRAP( basecamp_mission ), WRAP( wake_up ), WRAP( reveal_stats ), diff --git a/src/veh_interact.cpp b/src/veh_interact.cpp index 8d157b7407f13..818cd795695c8 100644 --- a/src/veh_interact.cpp +++ b/src/veh_interact.cpp @@ -178,7 +178,7 @@ player_activity veh_interact::serialize_activity() res.values.push_back( veh->index_of_part( vpt ) ); // values[6] res.str_values.push_back( vp->get_id().str() ); res.str_values.push_back( sel_vpart_variant ); - res.targets.emplace_back( std::move( target ) ); + res.targets.emplace_back( std::move( refill_target ) ); return res; } @@ -1396,8 +1396,8 @@ void veh_interact::do_refill() return false; }; - target = g->inv_map_splice( validate, string_format( _( "Refill %s" ), pt.name() ), 1 ); - if( target ) { + refill_target = g->inv_map_splice( validate, string_format( _( "Refill %s" ), pt.name() ), 1 ); + if( refill_target ) { sel_vehicle_part = &pt; sel_vpart_info = &pt.info(); sel_cmd = 'f'; diff --git a/src/veh_interact.h b/src/veh_interact.h index a86208199cb0d..ec9d1074aab12 100644 --- a/src/veh_interact.h +++ b/src/veh_interact.h @@ -64,8 +64,6 @@ class veh_interact explicit veh_interact( vehicle &veh, const point &p = point_zero ); ~veh_interact(); - item_location target; - point dd = point_zero; /* starting offset for vehicle parts description display and max offset for scrolling */ int start_at = 0; @@ -73,19 +71,23 @@ class veh_interact /* starting offset for the overview and the max offset for scrolling */ int overview_offset = 0; int overview_limit = 0; - // starting offset for installation scrolling + /* starting offset for installation scrolling */ int w_msg_scroll_offset = 0; + /* starting offset for fuels scrolling */ + int fuel_index = 0; + + // target vehicle tank for refill with liquids + item_location refill_target; + const vehicle_part *sel_vehicle_part = nullptr; const vpart_info *sel_vpart_info = nullptr; std::string sel_vpart_variant; - //Command currently being run by the player - char sel_cmd = ' '; - const vehicle_part *sel_vehicle_part = nullptr; + // Command currently being run by the player + char sel_cmd = ' '; int cpart = -1; int page_size = 0; - int fuel_index = 0; /** Starting index of where to start printing fuels from */ // height of the stats window const int stats_h = 8; catacurses::window w_border; @@ -98,12 +100,13 @@ class veh_interact catacurses::window w_details; catacurses::window w_name; - bool ui_hidden = false; weak_ptr_fast ui; cata::optional title; cata::optional msg; + bool ui_hidden = false; + int highlight_part = -1; struct install_info_t; @@ -237,8 +240,8 @@ class veh_interact void count_durability(); - std::string total_durability_text; nc_color total_durability_color; + std::string total_durability_text; /** Returns the most damaged part's index, or -1 if they're all healthy. */ vehicle_part *get_most_damaged_part() const; diff --git a/tools/dialogue_validator.py b/tools/dialogue_validator.py index 846a477ddf008..fdab9d07328d8 100755 --- a/tools/dialogue_validator.py +++ b/tools/dialogue_validator.py @@ -131,7 +131,7 @@ def validate(dialogue): "TALK_MISSION_DESCRIBE_URGENT", "TALK_SEDATED", "TALK_WAKE_UP", "TALK_MUG", "TALK_STRANGER_AGGRESSIVE", "TALK_STRANGER_SCARED", "TALK_STRANGER_WARY", "TALK_STRANGER_FRIENDLY", - "TALK_STRANGER_NEUTRAL", "TALK_SHELTER", "TALK_CAMP_OVERSEER" + "TALK_STRANGER_NEUTRAL", "TALK_SHELTER" ] for talk_topic in dialogue: if not isinstance(talk_topic, dict): diff --git a/tools/spell_checker/dictionary.txt b/tools/spell_checker/dictionary.txt index fd57dcb2638cb..34ad3ea5efe6c 100644 --- a/tools/spell_checker/dictionary.txt +++ b/tools/spell_checker/dictionary.txt @@ -1231,6 +1231,8 @@ heatsink heatsinks heear heelys +helipad +helipads hellmouth helpdesk hematite @@ -2412,6 +2414,8 @@ scruffs scutcher scutellosaurus scuttles +sealab +sealabs sealable seater secretively