From a0851a3a80b8d68aa58b4eec02a72ea5cd4c8463 Mon Sep 17 00:00:00 2001 From: Rod995 Date: Fri, 12 Oct 2018 13:02:18 -0500 Subject: [PATCH 01/59] Tasty Portals! Artifacts can absorb portals for charges now. --- src/artifact.cpp | 1 + src/artifact.h | 1 + src/game.cpp | 12 ++++++++++++ 3 files changed, 14 insertions(+) diff --git a/src/artifact.cpp b/src/artifact.cpp index 7cddb17e9d23e..e4a86439c898d 100644 --- a/src/artifact.cpp +++ b/src/artifact.cpp @@ -1488,6 +1488,7 @@ static const std::unordered_map art_charge_values = { { PAIR( ARTC_PAIN ), PAIR( ARTC_HP ), PAIR( ARTC_FATIGUE ), + PAIR( ARTC_PORTAL ), } }; static const std::unordered_map art_charge_req_values = { { diff --git a/src/artifact.h b/src/artifact.h index 3ddedabb9988e..ba650ac482347 100644 --- a/src/artifact.h +++ b/src/artifact.h @@ -59,6 +59,7 @@ enum art_charge : int { ARTC_PAIN, // Creates pain to recharge ARTC_HP, // Drains HP to recharge ARTC_FATIGUE, // Creates fatigue to recharge + ARTC_PORTAL, // Consumes portals NUM_ARTCS }; diff --git a/src/game.cpp b/src/game.cpp index 634f621472ed0..f965fdfe0ab25 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -12615,6 +12615,18 @@ void game::process_artifact( item &it, player &p ) it.charges++; } break; + // Portals are energetic enough to charge the item. + // Tears in reality are consumed too, but can't charge it. + case ARTC_PORTAL: + for( const tripoint &dest : m.points_in_radius( p.pos(), 1 ) ) { + if( g->m.tr_at( dest ).loadid == tr_portal ) { + add_msg( m_good, _( "The portal collapses!" ) ); + m.remove_trap( dest ); + it.charges++; + } + m.remove_field( dest, fd_fatigue ); + } + break; } } } From 2efc7a26e00b29649fc50f8c8daf9f7248bc6c47 Mon Sep 17 00:00:00 2001 From: Rod995 Date: Sat, 13 Oct 2018 13:31:52 -0500 Subject: [PATCH 02/59] Update doc/JSON_INFO.md I added a few missing thingies. --- doc/JSON_INFO.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 18badb3c0157f..08b1cc081b772 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -1097,6 +1097,8 @@ For this to work, the item needs to be a tool that consumes charges upon invocat - `ARTC_SOLAR` Recharges in sunlight - `ARTC_PAIN` Creates pain to recharge - `ARTC_HP` Drains HP to recharge +- `ARTC_FATIGUE` Creates fatigue to recharge +- `ARTC_PORTAL` Consumes portals to recharge #### `Effects_carried` @@ -1182,6 +1184,8 @@ Possible values (see src/artifact.h for an up-to-date list): - `AEA_LIGHT` Temporary light source - `AEA_GROWTH` Grow plants, a la triffid queen - `AEA_HURTALL` Hurts all monsters! +- `AEA_FUN` Temporary morale bonus +- `AEA_SPLIT` Split between good and bad - `AEA_RADIATION` Spew radioactive gas - `AEA_PAIN` Increases player pain - `AEA_MUTATE` Chance of mutation @@ -1195,6 +1199,7 @@ Possible values (see src/artifact.h for an up-to-date list): - `AEA_FLASH` Flashbang - `AEA_VOMIT` User vomits - `AEA_SHADOWS` Summon shadow creatures +- `AEA_STAMINA_EMPTY` Empties most of the player's stamina gauge ### Software Data From d1b93bc83a98a145b6861458813f485107100f82 Mon Sep 17 00:00:00 2001 From: Yoosuk Sim Date: Sun, 14 Oct 2018 00:14:30 -0400 Subject: [PATCH 03/59] fixes #25236 by adding zinc to more groups including hardware --- data/json/item_groups.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/json/item_groups.json b/data/json/item_groups.json index aa9f9b8ea6753..45f61bc99965e 100644 --- a/data/json/item_groups.json +++ b/data/json/item_groups.json @@ -1936,6 +1936,7 @@ ["magnifying_glass", 5], ["chem_chromium_oxide", 5], ["chem_thermite", 10], + ["chem_zinc_powder", 10], ["denat_alcohol", 25], ["tourist_table", 1] ] @@ -5171,6 +5172,7 @@ ["charcoal", 15], ["chem_hydrogen_peroxide", 15], ["chem_carbide", 10], + ["chem_zinc_powder", 10], ["denat_alcohol", 10] ] },{ @@ -5224,6 +5226,7 @@ ["chem_saltpetre", 15], ["chem_nitric_acid", 15], ["chem_chromium_oxide", 10], + ["chem_zinc_powder", 10], ["denat_alcohol", 10] ] },{ From 6c376c0fc02e5d1979ce320e63deccbd41161369 Mon Sep 17 00:00:00 2001 From: Rod995 Date: Sun, 14 Oct 2018 00:10:17 -0500 Subject: [PATCH 04/59] Update src/game.cpp --- src/game.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game.cpp b/src/game.cpp index f965fdfe0ab25..ff525ba59d376 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -12619,7 +12619,7 @@ void game::process_artifact( item &it, player &p ) // Tears in reality are consumed too, but can't charge it. case ARTC_PORTAL: for( const tripoint &dest : m.points_in_radius( p.pos(), 1 ) ) { - if( g->m.tr_at( dest ).loadid == tr_portal ) { + if( m.tr_at( dest ).loadid == tr_portal ) { add_msg( m_good, _( "The portal collapses!" ) ); m.remove_trap( dest ); it.charges++; From 50d74bc20c7c75975272be163dab6b6ceddeb21b Mon Sep 17 00:00:00 2001 From: Regilith <42500422+Regilith@users.noreply.github.com> Date: Tue, 16 Oct 2018 16:58:50 -0600 Subject: [PATCH 05/59] add and update canning and pickling recipes --- data/json/items/comestibles.json | 2 +- data/json/recipes/recipe_food.json | 753 ++++++++++++++++++++++++++++- 2 files changed, 732 insertions(+), 23 deletions(-) diff --git a/data/json/items/comestibles.json b/data/json/items/comestibles.json index e074a276537b9..050dd3e131c18 100644 --- a/data/json/items/comestibles.json +++ b/data/json/items/comestibles.json @@ -1585,7 +1585,7 @@ "symbol": "~", "quench": 50, "healthy": 1, - "calories": 43, + "calories": 200, "description": "Clear juice obtained by cooking fruit in a large volume of water.", "price": 62, "material": "fruit", diff --git a/data/json/recipes/recipe_food.json b/data/json/recipes/recipe_food.json index 4f085014e71c3..445bf6fef753d 100644 --- a/data/json/recipes/recipe_food.json +++ b/data/json/recipes/recipe_food.json @@ -116,6 +116,7 @@ "result": "offal_canned", "type": "recipe", "id_suffix": "jarred", + "byproducts": [ [ "water", 10 ] ], "category": "CC_FOOD", "subcategory": "CSC_FOOD_MEAT", "skill_used": "cooking", @@ -126,8 +127,8 @@ "container": "jar_glass_sealed", "result_mult": 2, "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], - "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], - "components": [ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "jar_glass", 1 ] ], [ [ "offal", 2 ] ] ] + "tools": [ [ [ "surface_heat", 100, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ [ [ "water", 11 ], [ "water_clean", 11 ] ], [ [ "jar_glass", 1 ] ], [ [ "offal", 2 ] ] ] }, { "result": "offal_canned", @@ -1207,13 +1208,13 @@ "subcategory": "CSC_FOOD_DRINKS", "skill_used": "cooking", "difficulty": 3, - "result_mult": 12, - "time": 30000, + "result_mult": 2, + "time": 20000, "autolearn": true, "batch_time_factors": [ 80, 4 ], "qualities": [ { "id": "COOK", "level": 3 } ], - "tools": [ [ [ "surface_heat", 2, "LIST" ] ] ], - "components": [ [ [ "sweet_fruit_like", 4, "LIST" ] ], [ [ "sugar", 10 ] ], [ [ "water", 12 ], [ "water_clean", 12 ] ] ] + "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], + "components": [ [ [ "sweet_fruit_like", 1, "LIST" ] ], [ [ "sugar", 5 ] ], [ [ "water", 2 ], [ "water_clean", 2 ] ] ] }, { "type": "recipe", @@ -4072,6 +4073,7 @@ "type": "recipe", "result": "meat_canned", "id_suffix": "jarred", + "byproducts": [ [ "water", 10 ] ], "container": "jar_glass_sealed", "category": "CC_FOOD", "subcategory": "CSC_FOOD_MEAT", @@ -4082,13 +4084,14 @@ "autolearn": true, "batch_time_factors": [ 83, 5 ], "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], - "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], - "components": [ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "jar_glass", 1 ] ], [ [ "meat", 2 ] ] ] + "tools": [ [ [ "surface_heat", 100, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ [ [ "water", 11 ], [ "water_clean", 11 ] ], [ [ "jar_glass", 1 ] ], [ [ "meat", 2 ] ] ] }, { "type": "recipe", "result": "fish_canned", "id_suffix": "jarred", + "byproducts": [ [ "water", 10 ] ], "container": "jar_glass_sealed", "category": "CC_FOOD", "subcategory": "CSC_FOOD_MEAT", @@ -4099,13 +4102,14 @@ "autolearn": true, "batch_time_factors": [ 83, 5 ], "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], - "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], - "components": [ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "jar_glass", 1 ] ], [ [ "fish", 2 ] ] ] + "tools": [ [ [ "surface_heat", 100, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ [ [ "water", 11 ], [ "water_clean", 11 ] ], [ [ "jar_glass", 1 ] ], [ [ "fish", 2 ] ] ] }, { "type": "recipe", "result": "human_canned", "id_suffix": "jarred", + "byproducts": [ [ "water", 10 ] ], "container": "jar_glass_sealed", "category": "CC_FOOD", "subcategory": "CSC_FOOD_MEAT", @@ -4116,13 +4120,14 @@ "book_learn": [ [ "cookbook_human", 4 ] ], "batch_time_factors": [ 83, 5 ], "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], - "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], - "components": [ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "jar_glass", 1 ] ], [ [ "human_flesh", 2 ] ] ] + "tools": [ [ [ "surface_heat", 100, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ [ [ "water", 11 ], [ "water_clean", 11 ] ], [ [ "jar_glass", 1 ] ], [ [ "human_flesh", 2 ] ] ] }, { "type": "recipe", "result": "veggy_canned", "id_suffix": "jarred", + "byproducts": [ [ "water", 10 ] ], "container": "jar_glass_sealed", "category": "CC_FOOD", "subcategory": "CSC_FOOD_VEGGI", @@ -4133,9 +4138,9 @@ "autolearn": true, "batch_time_factors": [ 83, 5 ], "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], - "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], + "tools": [ [ [ "surface_heat", 100, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], "components": [ - [ [ "water", 1 ], [ "water_clean", 1 ] ], + [ [ "water", 11 ], [ "water_clean", 11 ] ], [ [ "jar_glass", 1 ] ], [ [ "mushroom", 2 ], [ "veggy", 2 ], [ "veggy_wild", 2 ] ] ] @@ -4144,6 +4149,7 @@ "type": "recipe", "result": "apple_canned", "id_suffix": "jarred", + "byproducts": [ [ "water", 10 ] ], "container": "jar_glass_sealed", "category": "CC_FOOD", "subcategory": "CSC_FOOD_VEGGI", @@ -4154,8 +4160,8 @@ "autolearn": true, "batch_time_factors": [ 83, 5 ], "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], - "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], - "components": [ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "jar_glass", 1 ] ], [ [ "sweet_fruit", 2, "LIST" ] ] ] + "tools": [ [ [ "surface_heat", 100, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ [ [ "water", 11 ], [ "water_clean", 11 ] ], [ [ "jar_glass", 1 ] ], [ [ "sweet_fruit", 2, "LIST" ] ] ] }, { "type": "recipe", @@ -4267,6 +4273,7 @@ "type": "recipe", "result": "soup_veggy", "id_suffix": "jarred", + "byproducts": [ [ "water", 10 ] ], "container": "jar_glass_sealed", "category": "CC_FOOD", "subcategory": "CSC_FOOD_VEGGI", @@ -4278,9 +4285,10 @@ "autolearn": true, "batch_time_factors": [ 80, 4 ], "qualities": [ { "id": "COOK", "level": 3 } ], - "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], + "tools": [ [ [ "surface_heat", 100, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], "components": [ [ [ "jar_glass", 1 ] ], + [ [ "water", 10 ], [ "water_clean", 10 ] ], [ [ "broth", 2 ] ], [ [ "potato_irradiated", 2 ], @@ -4653,15 +4661,15 @@ "skill_used": "cooking", "skills_required": [ "mechanics", 1 ], "difficulty": 3, - "time": 30000, + "time": 40000, "autolearn": true, "batch_time_factors": [ 80, 4 ], "qualities": [ { "id": "COOK", "level": 3 } ], "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], "components": [ [ [ "jar_3l_glass", 1 ] ], - [ [ "sweet_fruit_like", 4, "LIST" ] ], - [ [ "sugar", 5 ] ], + [ [ "sweet_fruit_like", 6, "LIST" ] ], + [ [ "sugar", 30 ] ], [ [ "water", 22 ], [ "water_clean", 22 ] ] ] }, @@ -5982,6 +5990,7 @@ "type": "recipe", "result": "can_tomato", "id_suffix": "jarred", + "byproducts": [ [ "water", 10 ] ], "container": "jar_glass_sealed", "category": "CC_FOOD", "subcategory": "CSC_FOOD_VEGGI", @@ -5992,8 +6001,8 @@ "autolearn": true, "batch_time_factors": [ 83, 5 ], "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], - "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], - "components": [ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "jar_glass", 1 ] ], [ [ "tomato", 2 ], [ "irradiated_tomato", 2 ] ] ] + "tools": [ [ [ "surface_heat", 100, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ [ [ "water", 11 ], [ "water_clean", 11 ] ], [ [ "jar_glass", 1 ] ], [ [ "tomato", 2 ], [ "irradiated_tomato", 2 ] ] ] }, { "type": "recipe", @@ -7481,5 +7490,705 @@ ], [ [ "sugar", 10 ], [ "honeycomb", 1 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "syrup", 1 ] ] ] + }, + { + "type": "recipe", + "result": "meat_canned", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_MEAT", + "skill_used": "cooking", + "difficulty": 4, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 83, 5 ], + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ [ [ "water", 16 ], [ "water_clean", 16 ] ], [ [ "jar_3l_glass", 1 ] ], [ [ "meat", 12 ] ] ] + }, + { + "type": "recipe", + "result": "veggy_canned", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_VEGGI", + "skill_used": "cooking", + "difficulty": 4, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 83, 5 ], + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ + [ [ "water", 16 ], [ "water_clean", 16 ] ], + [ [ "jar_3l_glass", 1 ] ], + [ [ "mushroom", 12 ], [ "veggy", 12 ], [ "veggy_wild", 12 ] ] + ] + }, + { + "type": "recipe", + "result": "apple_canned", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_VEGGI", + "skill_used": "cooking", + "difficulty": 4, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 83, 5 ], + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ [ [ "water", 16 ], [ "water_clean", 16 ] ], [ [ "jar_3l_glass", 1 ] ], [ [ "sweet_fruit", 12, "LIST" ] ] ] + }, + { + "type": "recipe", + "result": "fish_canned", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_MEAT", + "skill_used": "cooking", + "difficulty": 4, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 83, 5 ], + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ [ [ "water", 16 ], [ "water_clean", 16 ] ], [ [ "jar_3l_glass", 1 ] ], [ [ "fish", 12 ] ] ] + }, + { + "result": "offal_canned", + "type": "recipe", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_MEAT", + "skill_used": "cooking", + "difficulty": 4, + "time": 40000, + "batch_time_factors": [ 83, 5 ], + "autolearn": true, + "container": "jar_3l_glass_sealed", + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ [ [ "water", 16 ], [ "water_clean", 16 ] ], [ [ "jar_3l_glass", 1 ] ], [ [ "offal", 12 ] ] ] + }, + { + "type": "recipe", + "result": "can_tomato", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_VEGGI", + "skill_used": "cooking", + "difficulty": 4, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 83, 5 ], + "result_mult": 6, + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ + [ [ "water", 16 ], [ "water_clean", 16 ] ], + [ [ "jar_3l_glass", 1 ] ], + [ [ "tomato", 12 ], [ "irradiated_tomato", 12 ] ] + ] + }, + { + "type": "recipe", + "result": "fish_pickled", + "id_suffix": "jarred_3l", + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_MEAT", + "skill_used": "cooking", + "difficulty": 6, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 83, 5 ], + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 100, "LIST" ] ] ], + "components": [ + [ [ "water", 6 ], [ "water_clean", 6 ], [ "salt_water", 6 ], [ "saline", 30 ] ], + [ [ "jar_3l_glass", 1 ] ], + [ [ "fish", 12 ] ], + [ [ "vinegar", 6 ] ] + ] + }, + { + "type": "recipe", + "result": "human_pickled", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_MEAT", + "skill_used": "cooking", + "difficulty": 6, + "time": 40000, + "book_learn": [ [ "cookbook_human", 6 ] ], + "batch_time_factors": [ 83, 5 ], + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 100, "LIST" ] ] ], + "components": [ + [ [ "water", 6 ], [ "water_clean", 6 ], [ "salt_water", 6 ], [ "saline", 30 ] ], + [ [ "jar_3l_glass", 1 ] ], + [ [ "human_flesh", 12 ] ], + [ [ "vinegar", 6 ] ] + ] + }, + { + "type": "recipe", + "result": "meat_pickled", + "id_suffix": "jarred_3l", + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_MEAT", + "skill_used": "cooking", + "difficulty": 6, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 83, 5 ], + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 100, "LIST" ] ] ], + "components": [ + [ [ "water", 6 ], [ "water_clean", 6 ], [ "salt_water", 6 ], [ "saline", 30 ] ], + [ [ "jar_3l_glass", 1 ] ], + [ [ "meat", 12 ] ], + [ [ "vinegar", 6 ] ] + ] + }, + { + "type": "recipe", + "result": "veggy_pickled", + "id_suffix": "jarred_3l", + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_VEGGI", + "skill_used": "cooking", + "difficulty": 5, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 83, 5 ], + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 100, "LIST" ] ] ], + "//": "Canned tomatoes aren't an option as they've already been preserved.", + "components": [ + [ [ "water", 6 ], [ "water_clean", 6 ], [ "salt_water", 6 ], [ "saline", 30 ] ], + [ [ "jar_3l_glass", 1 ] ], + [ + [ "veggy", 12 ], + [ "veggy_wild", 12 ], + [ "mushroom", 12 ], + [ "tomato", 12 ], + [ "irradiated_tomato", 12 ], + [ "broccoli", 12 ], + [ "irradiated_broccoli", 12 ], + [ "zucchini", 12 ], + [ "irradiated_zucchini", 12 ], + [ "cucumber", 12 ], + [ "irradiated_cucumber", 12 ], + [ "potato_raw", 12 ], + [ "potato_irradiated", 12 ], + [ "corn", 12 ], + [ "irradiated_corn", 12 ], + [ "onion", 12 ], + [ "irradiated_onion", 12 ], + [ "garlic_clove", 72 ], + [ "irradiated_carrot", 72 ], + [ "carrot", 72 ] + ], + [ [ "vinegar", 1 ] ] + ] + }, + { + "type": "recipe", + "result": "soup_woods", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_MEAT", + "skill_used": "cooking", + "skills_required": [ "mechanics", 1 ], + "difficulty": 4, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 80, 4 ], + "qualities": [ { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ + [ [ "jar_3l_glass", 1 ] ], + [ [ "water", 10 ], [ "water_clean", 10 ] ], + [ [ "broth", 12 ], [ "broth_bone", 12 ], [ "pine_tea", 12 ] ], + [ + [ "meat", 12 ], + [ "meat_smoked", 12 ], + [ "dry_meat", 12 ], + [ "rehydrated_meat", 12 ], + [ "meat_canned", 12 ], + [ "can_chicken", 12 ], + [ "fish", 12 ], + [ "fish_smoked", 12 ], + [ "dry_fish", 12 ], + [ "rehydrated_fish", 12 ], + [ "fish_canned", 12 ], + [ "can_salmon", 12 ], + [ "can_tuna", 12 ], + [ "sausage", 24 ], + [ "bacon", 24 ], + [ "powder_eggs", 120 ], + [ "eggs_bird", 24, "LIST" ], + [ "egg_reptile", 24 ] + ], + [ + [ "veggy_wild", 12 ], + [ "veggy", 12 ], + [ "rehydrated_veggy", 12 ], + [ "dry_veggy", 12 ], + [ "dry_beans", 12 ], + [ "can_beans", 12 ], + [ "raw_beans", 12 ], + [ "beans_cooked", 12 ], + [ "dry_rice", 12 ], + [ "dandelion_cooked", 12 ], + [ "mushroom", 12 ], + [ "dry_mushroom", 12 ], + [ "mushroom_cooked", 12 ], + [ "morel_cooked", 12 ], + [ "acorns_cooked", 12 ] + ] + ] + }, + { + "type": "recipe", + "result": "soup_meat", + "id_suffix": "jarred", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_MEAT", + "skill_used": "cooking", + "skills_required": [ "mechanics", 1 ], + "difficulty": 4, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 80, 4 ], + "qualities": [ { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ + [ [ "jar_3l_glass", 1 ] ], + [ [ "water", 10 ], [ "water_clean", 10 ] ], + [ [ "broth", 12 ], [ "broth_bone", 12 ] ], + [ + [ "potato_irradiated", 12 ], + [ "potato_raw", 12 ], + [ "celery", 12 ], + [ "irradiated_celery", 12 ], + [ "cabbage", 12 ], + [ "irradiated_cabbage", 12 ], + [ "sauerkraut", 24 ], + [ "powder_eggs", 60 ], + [ "eggs_bird", 12, "LIST" ], + [ "egg_reptile", 12 ], + [ "can_beans", 12 ], + [ "beans_cooked", 12 ], + [ "spaghetti_raw", 12 ], + [ "macaroni_raw", 12 ], + [ "noodles_fast", 12 ], + [ "dry_beans", 12 ], + [ "raw_beans", 12 ], + [ "dry_rice", 12 ], + [ "dandelion_cooked", 12 ], + [ "acorns_cooked", 12 ] + ], + [ [ "meat", 24 ], [ "rehydrated_meat", 24 ], [ "dry_meat", 24 ], [ "meat_canned", 24 ], [ "can_chicken", 24 ] ] + ] + }, + { + "type": "recipe", + "result": "soup_veggy", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_VEGGI", + "skill_used": "cooking", + "skills_required": [ "mechanics", 1 ], + "difficulty": 4, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 80, 4 ], + "qualities": [ { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ + [ [ "jar_3l_glass", 1 ] ], + [ [ "water", 10 ], [ "water_clean", 10 ] ], + [ [ "broth", 12 ] ], + [ + [ "potato_irradiated", 12 ], + [ "potato_raw", 12 ], + [ "celery", 12 ], + [ "irradiated_celery", 12 ], + [ "cabbage", 12 ], + [ "irradiated_cabbage", 12 ], + [ "sauerkraut", 24 ], + [ "powder_eggs", 60 ], + [ "eggs_bird", 12, "LIST" ], + [ "egg_reptile", 12 ], + [ "can_beans", 12 ], + [ "beans_cooked", 12 ], + [ "spaghetti_raw", 12 ], + [ "macaroni_raw", 12 ], + [ "noodles_fast", 12 ], + [ "dry_beans", 12 ], + [ "raw_beans", 12 ], + [ "dry_rice", 12 ], + [ "dandelion_cooked", 12 ], + [ "acorns_cooked", 12 ] + ], + [ + [ "irradiated_tomato", 24 ], + [ "can_tomato", 24 ], + [ "tomato", 24 ], + [ "pumpkin", 24 ], + [ "irradiated_pumpkin", 24 ], + [ "irradiated_broccoli", 24 ], + [ "broccoli", 24 ], + [ "irradiated_zucchini", 24 ], + [ "zucchini", 24 ], + [ "potato_raw", 24 ], + [ "potato_irradiated", 24 ], + [ "onion", 24 ], + [ "irradiated_onion", 24 ], + [ "carrot", 144 ], + [ "irradiated_carrot", 144 ], + [ "veggy", 24 ], + [ "dry_veggy", 24 ], + [ "mushroom", 24 ], + [ "dry_mushroom", 24 ], + [ "mushroom_cooked", 24 ], + [ "morel_cooked", 24 ], + [ "rehydrated_veggy", 24 ], + [ "veggy_wild", 24 ] + ] + ] + }, + { + "type": "recipe", + "result": "soup_fish", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_MEAT", + "skill_used": "cooking", + "skills_required": [ "mechanics", 1 ], + "difficulty": 4, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 80, 4 ], + "qualities": [ { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ + [ [ "jar_3l_glass", 1 ] ], + [ [ "water", 10 ], [ "water_clean", 10 ] ], + [ [ "broth", 12 ], [ "broth_bone", 12 ] ], + [ + [ "potato_irradiated", 12 ], + [ "potato_raw", 12 ], + [ "celery", 12 ], + [ "irradiated_celery", 12 ], + [ "cabbage", 12 ], + [ "irradiated_cabbage", 12 ], + [ "sauerkraut", 74 ], + [ "can_corn", 12 ], + [ "corn", 12 ], + [ "irradiated_corn", 12 ], + [ "irradiated_onion", 12 ], + [ "onion", 12 ], + [ "irradiated_carrot", 72 ], + [ "carrot", 72 ], + [ "pumpkin", 12 ], + [ "irradiated_pumpkin", 12 ], + [ "veggy_wild", 12 ], + [ "veggy", 12 ], + [ "dry_veggy", 12 ], + [ "powder_eggs", 60 ], + [ "eggs_bird", 12, "LIST" ], + [ "egg_reptile", 12 ], + [ "can_beans", 12 ], + [ "spaghetti_raw", 12 ], + [ "macaroni_raw", 12 ], + [ "noodles_fast", 12 ], + [ "con_milk", 12 ], + [ "flatbread", 12 ], + [ "tortilla_corn", 12 ], + [ "bread", 12 ], + [ "cornbread", 12 ], + [ "biscuit", 12 ], + [ "hardtack", 12 ], + [ "wastebread", 12 ], + [ "flour", 12 ], + [ "cornmeal", 12 ], + [ "milk_powder", 12 ], + [ "crackers", 24 ], + [ "dry_beans", 12 ], + [ "raw_beans", 12 ], + [ "dry_rice", 12 ], + [ "beans_cooked", 12 ], + [ "dandelion_cooked", 12 ], + [ "mushroom", 12 ], + [ "dry_mushroom", 12 ], + [ "morel_cooked", 12 ], + [ "mushroom_cooked", 12 ], + [ "acorns_cooked", 12 ] + ], + [ + [ "fish", 24 ], + [ "dry_fish", 24 ], + [ "salted_fish", 18 ], + [ "fish_smoked", 24 ], + [ "fish_pickled", 12 ], + [ "fish_vac", 24 ], + [ "fish_canned", 12 ], + [ "can_salmon", 12 ], + [ "can_tuna", 12 ] + ] + ] + }, + { + "type": "recipe", + "result": "soup_human", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_MEAT", + "skill_used": "cooking", + "skills_required": [ "mechanics", 1 ], + "difficulty": 4, + "time": 40000, + "book_learn": [ [ "cookbook_human", 4 ] ], + "batch_time_factors": [ 80, 4 ], + "qualities": [ { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ + [ [ "jar_3l_glass", 1 ] ], + [ [ "water", 10 ], [ "water_clean", 10 ] ], + [ [ "broth", 12 ], [ "broth_human", 12 ], [ "broth_bone", 6 ] ], + [ + [ "potato_irradiated", 12 ], + [ "potato_raw", 12 ], + [ "celery", 12 ], + [ "irradiated_celery", 12 ], + [ "cabbage", 12 ], + [ "irradiated_cabbage", 12 ], + [ "sauerkraut", 24 ], + [ "powder_eggs", 60 ], + [ "eggs_bird", 12, "LIST" ], + [ "egg_reptile", 12 ], + [ "can_beans", 12 ], + [ "spaghetti_raw", 12 ], + [ "macaroni_raw", 12 ], + [ "noodles_fast", 12 ], + [ "dry_beans", 12 ], + [ "raw_beans", 12 ], + [ "dry_rice", 12 ], + [ "beans_cooked", 12 ], + [ "acorns_cooked", 12 ] + ], + [ [ "dry_hflesh", 24 ], [ "rehydrated_hflesh", 24 ], [ "human_flesh", 24 ] ] + ] + }, + { + "type": "recipe", + "result": "broth", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_VEGGI", + "skill_used": "cooking", + "skills_required": [ "mechanics", 1 ], + "difficulty": 4, + "time": 40000, + "autolearn": true, + "batch_time_factors": [ 80, 4 ], + "qualities": [ { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ + [ [ "jar_3l_glass", 1 ] ], + [ [ "water", 22 ], [ "water_clean", 22 ] ], + [ + [ "irradiated_broccoli", 12 ], + [ "broccoli", 12 ], + [ "irradiated_tomato", 12 ], + [ "can_tomato", 12 ], + [ "tomato", 12 ], + [ "pumpkin", 12 ], + [ "irradiated_pumpkin", 12 ], + [ "irradiated_zucchini", 12 ], + [ "zucchini", 12 ], + [ "veggy", 12 ], + [ "veggy_wild", 12 ], + [ "powder_eggs", 60 ], + [ "eggs_bird", 12, "LIST" ], + [ "egg_reptile", 12 ], + [ "dry_veggy", 24 ], + [ "dandelion_cooked", 24 ], + [ "mushroom_cooked", 24 ], + [ "morel_cooked", 24 ], + [ "mushroom", 24 ], + [ "dry_mushroom", 24 ] + ], + [ + [ "seasoning_italian", 60 ], + [ "wild_herbs", 60 ], + [ "seasoning_salt", 60 ], + [ "soysauce", 8 ], + [ "pepper", 80 ], + [ "seed_garlic", 24 ], + [ "garlic", 4 ], + [ "salt_water", 4 ], + [ "salt", 60 ] + ] + ] + }, + { + "type": "recipe", + "result": "broth_bone", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_OTHER", + "skill_used": "cooking", + "skills_required": [ "mechanics", 1 ], + "difficulty": 4, + "time": 70000, + "autolearn": true, + "batch_time_factors": [ 80, 4 ], + "qualities": [ { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ [ [ "jar_3l_glass", 1 ] ], [ [ "water", 24 ], [ "water_clean", 24 ] ], [ [ "bone", 120 ] ] ] + }, + { + "type": "recipe", + "result": "broth_human", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_OTHER", + "skill_used": "cooking", + "skills_required": [ "mechanics", 1 ], + "difficulty": 4, + "time": 70000, + "book_learn": [ [ "cookbook_human", 4 ] ], + "batch_time_factors": [ 80, 4 ], + "qualities": [ { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ [ [ "jar_3l_glass", 1 ] ], [ [ "water", 24 ], [ "water_clean", 24 ] ], [ [ "bone_human", 120 ] ] ] + }, + { + "type": "recipe", + "result": "sauce_red", + "id_suffix": "jarred_3l", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_3l_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_VEGGI", + "skill_used": "cooking", + "difficulty": 4, + "time": 120000, + "autolearn": true, + "batch_time_factors": [ 80, 4 ], + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ + [ [ "jar_3l_glass", 1 ] ], + [ [ "water", 22 ], [ "water_clean", 22 ] ], + [ [ "can_tomato", 12 ], [ "tomato", 12 ], [ "irradiated_tomato", 12 ] ] + ] + }, + { + "type": "recipe", + "result": "sauce_red", + "id_suffix": "jarred", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_VEGGI", + "skill_used": "cooking", + "difficulty": 4, + "time": 40000, + "result_mult": 2, + "autolearn": true, + "batch_time_factors": [ 80, 4 ], + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 200, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ + [ [ "jar_glass", 1 ] ], + [ [ "can_tomato", 2 ], [ "tomato", 2 ], [ "irradiated_tomato", 2 ] ], + [ [ "water", 12 ], [ "water_clean", 12 ] ] + ] + }, + { + "type": "recipe", + "result": "sauce_red", + "id_suffix": "canned", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_VEGGI", + "skill_used": "cooking", + "difficulty": 4, + "time": 40000, + "autolearn": true, + "contained": true, + "batch_time_factors": [ 83, 5 ], + "qualities": [ + { "id": "SAW_M", "level": 1 }, + { "id": "HAMMER", "level": 1 }, + { "id": "CUT", "level": 1 }, + { "id": "COOK", "level": 3 } + ], + "tools": [ [ [ "surface_heat", 10, "LIST" ] ], [ [ "can_sealer", -1 ] ] ], + "components": [ + [ [ "canister_empty", 1 ], [ "can_food_unsealed", 1 ] ], + [ [ "scrap", 1 ] ], + [ [ "can_tomato", 1 ], [ "tomato", 1 ], [ "irradiated_tomato", 1 ] ], + [ [ "water", 1 ], [ "water_clean", 1 ] ] + ] + }, + { + "type": "recipe", + "result": "kompot", + "id_suffix": "jarred", + "byproducts": [ [ "water", 10 ] ], + "container": "jar_glass_sealed", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_DRINKS", + "skill_used": "cooking", + "skills_required": [ "mechanics", 1 ], + "difficulty": 3, + "time": 30000, + "autolearn": true, + "batch_time_factors": [ 80, 4 ], + "qualities": [ { "id": "COOK", "level": 3 } ], + "tools": [ [ [ "surface_heat", 100, "LIST" ] ], [ [ "pot_canning", -1 ] ] ], + "components": [ + [ [ "jar_glass", 1 ] ], + [ [ "water", 12 ], [ "water_clean", 12 ] ], + [ [ "sweet_fruit_like", 1, "LIST" ] ], + [ [ "sugar", 5 ] ] + ] } ] From 83f5ec12212e7ae636049d5812b93ac6977f6106 Mon Sep 17 00:00:00 2001 From: Regilith <42500422+Regilith@users.noreply.github.com> Date: Tue, 16 Oct 2018 17:06:46 -0600 Subject: [PATCH 06/59] Fix kompot calories Messed up portions --- data/json/items/comestibles.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/comestibles.json b/data/json/items/comestibles.json index 050dd3e131c18..5b7e55162ef23 100644 --- a/data/json/items/comestibles.json +++ b/data/json/items/comestibles.json @@ -1585,7 +1585,7 @@ "symbol": "~", "quench": 50, "healthy": 1, - "calories": 200, + "calories": 100, "description": "Clear juice obtained by cooking fruit in a large volume of water.", "price": 62, "material": "fruit", From 0a39be517c94224ee7e017929776b81a514a1185 Mon Sep 17 00:00:00 2001 From: Regilith <42500422+Regilith@users.noreply.github.com> Date: Tue, 16 Oct 2018 17:13:28 -0600 Subject: [PATCH 07/59] Add correct id_suffix to 3L kompot --- data/json/recipes/recipe_food.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/recipes/recipe_food.json b/data/json/recipes/recipe_food.json index 445bf6fef753d..16b6a980c4ea2 100644 --- a/data/json/recipes/recipe_food.json +++ b/data/json/recipes/recipe_food.json @@ -4653,7 +4653,7 @@ { "type": "recipe", "result": "kompot", - "id_suffix": "jarred", + "id_suffix": "jarred_3l", "byproducts": [ [ "water", 10 ] ], "container": "jar_3l_glass_sealed", "category": "CC_FOOD", From 1c10728828ed13e16d152f16cf922e41912a7468 Mon Sep 17 00:00:00 2001 From: Noctifer-de-Mortem Date: Wed, 17 Oct 2018 19:31:16 -0500 Subject: [PATCH 08/59] changes, additions and linting to mod --- .../more_classes_scenarios/cs_classes.json | 982 ++++++++---------- .../more_classes_scenarios/cs_scenarios.json | 149 ++- .../cs_start_locations.json | 52 +- 3 files changed, 565 insertions(+), 618 deletions(-) diff --git a/data/mods/more_classes_scenarios/cs_classes.json b/data/mods/more_classes_scenarios/cs_classes.json index ad5a9b0164e48..6c4af7041682e 100644 --- a/data/mods/more_classes_scenarios/cs_classes.json +++ b/data/mods/more_classes_scenarios/cs_classes.json @@ -1,565 +1,429 @@ [ - { - "type": "profession", - "ident": "bio_specops", - "name": "Bionic Spec-Op", - "description": "Once bionic augmentation proved safe, you were choosen for a top secret soldier augmentation program. As if being a top-tier special forces operator before the procedure wasn't enough, your new enhancememts allow you to handle any combat scenario be it human or not.", - "points": 12, - "CBMs":[ - "bio_targeting", - "bio_purifier", - "bio_carbon", - "bio_shock", - "bio_adrenaline", - "bio_night_vision", - "bio_ups", - "bio_nanobots", - "bio_painkiller", - "bio_metabolics", - "bio_power_storage_mkII" + { + "type": "profession", + "ident": "bio_specops", + "name": "Bionic Spec-Op", + "description": "Once bionic augmentation proved safe, you were choosen for a top secret soldier augmentation program. As if being a top-tier special forces operator before the procedure wasn't enough, your new enhancememts allow you to handle any combat scenario be it human or not.", + "points": 12, + "CBMs": [ + "bio_targeting", + "bio_purifier", + "bio_carbon", + "bio_shock", + "bio_adrenaline", + "bio_night_vision", + "bio_ups", + "bio_nanobots", + "bio_painkiller", + "bio_torsionratchet", + "bio_power_storage_mkII" + ], + "skills": [ + { "level": 3, "name": "gun" }, + { "level": 3, "name": "rifle" }, + { "level": 2, "name": "pistol" }, + { "level": 2, "name": "melee" }, + { "level": 2, "name": "stabbing" }, + { "level": 2, "name": "dodge" } + ], + "items": { + "both": { + "items": [ + "balclava", + "army_top", + "arm_warmers", + "gloves_liner", + "leg_warmers", + "socks", + "beret", + "gloves_tactical", + "pants_army", + "boots_combat", + "jacket_army" ], - "skills": [ - { - "level": 3, - "name": "gun" - }, - { - "level": 3, - "name": "rifle" - }, - { - "level": 2, - "name": "pistol" - }, - { - "level": 2, - "name": "melee" - }, - { - "level": 2, - "name": "stabbing" - }, - { - "level": 2, - "name": "dodge" - } - ], - "items": { - "both": { - "items": [ - "balclava", - "army_top", - "arm_warmers", - "gloves_liner", - "leg_warmers", - "socks", - "beret", - "gloves_tactical", - "pants_army", - "boots_combat", - "jacket_army" - ], - "entries": [ - { "item": "knife_combat", "container-item": "sheath" }, - { "item": "v29", "container-item": "sholster" }, - { "item": "rm51_assault_rifle", "ammo-item": "8mm_fmj", "charges": 50, "contents-item": "shoulder_strap" }, - { "item": "8mm_fmj", "charges": 50 } - ] - }, - "male": [ - "boxer_shorts" - ], - "female": [ - "sports_bra", - "boxer_shorts" - ] - }, - "flags" : ["SCEN_ONLY"] - }, - { - "type" : "profession", - "ident": "wasteland_cyborg", - "name": "Wasteland Cyborg", - "description": "After months of reading, experimentation, severe injuries, and countless supply raids you emerge a self-made cyborg with the some of the best crafted weapons and armor in the wasteland.", - "points": 8, - "CBMs":[ - "bio_flashlight", - "bio_tools", - "bio_ups", - "bio_sunglasses", - "bio_ears", - "bio_carbon", - "bio_targeting", - "bio_metabolics", - "bio_power_storage_mkII", - "bio_power_storage_mkII" - ], - "skills": [ - { - "level": 6, - "name": "fabrication" - }, - { - "level": 5, - "name": "mechanics" - }, - { - "level": 5, - "name": "electronics" - }, - { - "level": 4, - "name": "firstaid" - }, - { - "level": 5, - "name": "tailor" - }, - { - "level" : 2, - "name" : "gun" - }, - { - "level": 2, - "name": "rifle" - }, - { - "level" : 2, - "name" : "melee" - }, - { - "level": 2, - "name": "bashing" - } - ], - "items": { - "both": [ - "socks", - "hood_lsurvivor", - "mask_lsurvivor", - "lsurvivor_suit", - "chestpouch", - "survivor_vest", - "gloves_lsurvivor", - "legpouch_large", - "legpouch_large", - "boots_lsurvivor", - "shoulder_strap", - "coilgun", - "nailmag", - "nailmag", - "nailmag", - "nailmag", - "combatnail", - "combatnail", - "shocktonfa_off", - "battery_ups" - ], - "male": [ - "boxer_shorts" - ], - "female": [ - "bra", - "panties" - ] - }, - "flags" : ["SCEN_ONLY"] - }, - { - "type": "profession", - "ident": "seasoned_tourist", - "name": "Seasoned Tourist", - "description": "Due to your thirst for adventure, hunger for good food, and disposable income, you have been able to travel extensively. You've traveled here to get a taste of New England; now you hope New England won't get a taste of you!", - "points": 5, - "skills": [ - { - "level": 3, - "name": "speech" - }, - { - "level": 2, - "name": "barter" - }, - { - "level": 2, - "name": "cooking" - }, - { - "level": 1, - "name": "firstaid" - } - ], - "items": { - "both": [ - "knit_scarf", - "undershirt", - "dress_shirt", - "jacket_light", - "gloves_light", - "pants", - "fanny", - "socks", - "sneakers", - "roadmap", - "restaurantmap", - "shavingkit", - "mess_kit", - "aluminum_foil", - "cell_phone", - "can_chowder", - "apple_cider", - "fruit_leather", - "suitcase_m" - ], - "male": [ - "boxer_shorts" - ], - "female": [ - "bra", - "panties" - ] - } - }, - { - "type" : "profession", - "ident": "trans_human", - "name": "Post-Human Cyborg", - "description": "As a wealthy trans-humanist you decided to put yourself on the frontline of augmentative technology to bring forth the future. You are now a walking example of what humanity could have become.", - "points": 8, - "CBMs":[ - "bio_str_enhancer", - "bio_dex_enhancer", - "bio_int_enhancer", - "bio_eye_enhancer", - "bio_speed", - "bio_eye_optic", - "bio_sunglasses", - "bio_ears", - "bio_digestion", - "bio_recycler", - "bio_purifier" - ], - "items": { - "both": [ - "hat_knit", - "tshirt", - "jacket_light", - "knit_scarf", - "gloves_light", - "boots" - ], - "male": [ - "briefs", - "socks", - "pants" - ], - "female": [ - "bra", - "panties", - "stockings", - "skirt" - ] - } - }, - { - "type": "profession", - "ident": "janitor", - "name": "Janitor", - "description": "You earned a living from sweeping up chocolate wrappers and picking chewing gum from under tables. Now the only thing you'll be sweeping are the brains of the dead.", - "points": -1, - "items": { - "both": [ - "jumpsuit", - "socks", - "boots", - "mop" - ], - "male": [ - "boxer_shorts" - ], - "female": [ - "bra", - "boxer_shorts" - ] - } - }, - { - "type": "profession", - "ident": "poor_student", - "name": "Poor Student", - "description": "You come from a low-income family, and got mocked for your old hand-me-down clothes and for getting free school lunches in the cafeteria. Even worse, your ratty old backpack finally fell apart at the worst time. At least no one's mocking you now.", - "points": -1, - "items": { - "both": [ - "tshirt", - "socks", - "lowtops", - "shorts" - ], - "male": [ - "briefs" - ], - "female": [ - "panties" - ] - } - }, - { - "type": "profession", - "ident": "elementary_student", - "name": "Elementary Student", - "description": "You're just a kid, and now the world has turned into something out of one of your bad dreams. The grown-ups you relied on are all dead--or undead--now. What are you going to do?", - "points": 0, - "items": { - "both": [ - "tshirt", - "socks", - "slingpack", - "sneakers", - "jeans", - "jacket_light", - "knit_scarf", - "juice", - "sandwich_pbj", - "fairy_tales" - ], - "male": [ - "briefs" - ], - "female": [ - "panties" - ] - } - }, - { - "type": "profession", - "ident": "goalie", - "name": "Hockey Player", - "description": "You were a minor-league hockey goalie before the rest of your team became zombies. It's just you and your hockey equipment versus the undead, but at least you can cross-check them now.", - "points": 0, - "traits": [ - "PROF_SKATER" - ], - "items": { - "both": [ - "mask_hockey", - "hockey_stick", - "jersey", - "pants", - "socks", - "sneakers", - "mouthpiece", - "puck" - ], - "male": [ - "briefs" - ], - "female": [ - "sports_bra", - "panties" - ] - } - }, - { - "type": "profession", - "ident": "batter", - "name": "Baseball Player", - "description": "You were a batter on a local minor league team before the cataclysm. You escaped with your equipment, but how long can you survive until your innings are up?", - "points": 0, - "skills": [ - { - "level": 1, - "name": "bashing" - } - ], - "items": { - "both": [ - "bat", - "helmet_ball", - "dress_shirt", - "pants", - "socks", - "cleats", - "mouthpiece", - "baseball" - ], - "male": [ - "briefs" - ], - "female": [ - "sports_bra", - "panties" - ] - } - }, - { - "type": "profession", - "ident": "linebacker", - "name": "Football Player", - "description": "You were the star player for the local football team, adored by teammates and fans alike. Now they just adore your brain. You've still got your bulky football gear on.", - "points": 0, - "skills": [ - { - "level": 2, - "name": "dodge" - } - ], - "items": { - "both": [ - "football_armor", - "tank_top", - "helmet_football", - "pants", - "socks", - "cleats", - "mouthpiece", - "football", - "sports_drink" - ], - "male": [ - "briefs" - ], - "female": [ - "sports_bra", - "panties" - ] - } - }, - { - "type": "profession", - "ident": "golfer", - "name": "Golfer", - "description": "A birdie is one under par, but how much is a zombie? Your clubhouse was overrun by the undead, and you fled with your trusty driving wedge.", - "points": 0, - "items": { - "both": [ - "hat_ball", - "dress_shirt", - "pants", - "socks", - "sneakers", - "golf_club" - ], - "male": [ - "briefs" - ], - "female": [ - "sports_bra", - "panties" - ] - } - }, - { - "type": "profession", - "ident": "prep_student", - "name": "Preppy Student", - "description": "Your parents were busy, important people, who wanted you to have every advantage and pushed you to be \"successful,\" whatever that meant. If only they'd ever let you experience childhood, or ever shown you their love. You're certainly not getting either one now.", - "points": 1, - "skills": [ - { - "level": 1, - "name": "speech" - } + "entries": [ + { "item": "knife_combat", "container-item": "sheath" }, + { "item": "v29", "container-item": "sholster" }, + { "item": "rm51_assault_rifle", "ammo-item": "8mm_fmj", "charges": 50, "contents-item": "shoulder_strap" }, + { "item": "8mm_fmj", "charges": 50 } + ] + }, + "male": [ "boxer_shorts" ], + "female": [ "sports_bra", "boxer_shorts" ] + } + }, + { + "type": "profession", + "ident": "wasteland_cyborg", + "name": "Wasteland Cyborg", + "description": "After months of reading, experimentation, severe injuries, and countless supply raids you emerge a self-made cyborg with the some of the best crafted weapons and armor in the wasteland.", + "points": 8, + "CBMs": [ + "bio_flashlight", + "bio_tools", + "bio_ups", + "bio_sunglasses", + "bio_ears", + "bio_carbon", + "bio_targeting", + "bio_metabolics", + "bio_power_storage_mkII", + "bio_power_storage_mkII" + ], + "skills": [ + { "level": 3, "name": "fabrication" }, + { "level": 3, "name": "mechanics" }, + { "level": 3, "name": "electronics" }, + { "level": 3, "name": "firstaid" }, + { "level": 3, "name": "tailor" }, + { "level": 3, "name": "gun" }, + { "level": 3, "name": "rifle" }, + { "level": 3, "name": "melee" }, + { "level": 3, "name": "bashing" } + ], + "items": { + "both": { + "items": [ + "socks", + "hood_lsurvivor", + "mask_lsurvivor", + "lsurvivor_suit", + "chestpouch", + "survivor_vest", + "gloves_lsurvivor", + "legpouch_large", + "legpouch_large", + "boots_lsurvivor" ], - "items": { - "both": [ - "dress_shirt", - "jacket_light", - "pants", - "socks", - "dress_shoes", - "skinny_tie", - "tieclip", - "fancy_sunglasses", - "knit_scarf", - "wristwatch", - "mbag", - "water_mineral", - "cell_phone", - "money_bundle", - "adderall", - "manual_business" - ], - "male": [ - "briefs" - ], - "female": [ - "panties" - ] - } + "entries": [ + { "item": "shocktonfa_off", "contents-item": "battery_ups" }, + { "item": "coilgun", "ammo-item": "combatnail", "charges": 50, "contents-item": "shoulder_strap" }, + { "item": "nailmag", "ammo-item": "combatnail", "charges": 50 } + ] + }, + "male": [ "boxer_shorts" ], + "female": [ "bra", "panties" ] }, - { - "type": "profession", - "ident": "bio_gangster", - "name": "Bionic Gangster", - "description": "You were the boss' favorite, their protege; they always counted on you to get the toughtest jobs done. Seeing your potential, they invested in \"basic\" augments and the best gear on the market to better aid you in your job. After enjoying some period of freedom to do as you wanted, now you find yourself needing those skills to survive. ", - "points": 8, - "CBMs":[ - "bio_targeting", - "bio_sunglasses", - "bio_ears", - "bio_carbon", - "bio_blade", - "bio_shock", - "bio_night_vision", - "bio_torsionratchet", - "bio_power_storage_mkII" - ], - "skills": [ - { - "level": 3, - "name": "melee" - }, - { - "level": 3, - "name": "gun" - }, - { - "level": 2, - "name": "unarmed" - }, - { - "level": 2, - "name": "stabbing" - }, - { - "level": 2, - "name": "cutting" - }, - { - "level": 2, - "name": "pistol" - }, - { - "level": 1, - "name": "driving" - } - ], - "items": { - "both": { - "items": [ - "socks", - "bowhat", - "suit", - "dress_shoes", - "knit_scarf", - "cigar", - "mag_porn" - ], - "entries": [ - { "item": "rm103a_pistol", "ammo-item": "8mm_caseless", "container-item": "sholster", "charges": 25 }, - { "item": "8x40_10_mag", "ammo-item": "8mm_caseless", "charges": 10 }, - { "item": "8x40_10_mag", "ammo-item": "8mm_caseless", "charges": 10 }, - { "item": "ref_lighter", "charges": 100 } - ] - }, - "male": [ - "boxer_shorts" - ], - "female": [ - "bra", - "panties" - ] - } + "flags": [ "SCEN_ONLY" ] + }, + { + "type": "profession", + "ident": "seasoned_tourist", + "name": "Seasoned Tourist", + "description": "Due to your thirst for adventure, hunger for good food, and disposable income, you have been able to travel extensively. You've traveled here to get a taste of New England; now you hope New England won't get a taste of you!", + "points": 5, + "skills": [ + { "level": 3, "name": "speech" }, + { "level": 2, "name": "barter" }, + { "level": 2, "name": "cooking" }, + { "level": 1, "name": "firstaid" } + ], + "items": { + "both": [ + "knit_scarf", + "undershirt", + "dress_shirt", + "jacket_light", + "gloves_light", + "pants", + "fanny", + "socks", + "sneakers", + "roadmap", + "restaurantmap", + "shavingkit", + "mess_kit", + "aluminum_foil", + "cell_phone", + "can_chowder", + "apple_cider", + "fruit_leather", + "suitcase_m" + ], + "male": [ "boxer_shorts" ], + "female": [ "bra", "panties" ] + } + }, + { + "type": "profession", + "ident": "trans_human", + "name": "Post-Human Cyborg", + "description": "As a wealthy trans-humanist you decided to put yourself on the frontline of augmentative technology to bring forth the future. You are now a walking example of what humanity could have become.", + "points": 8, + "CBMs": [ + "bio_str_enhancer", + "bio_dex_enhancer", + "bio_int_enhancer", + "bio_eye_enhancer", + "bio_speed", + "bio_eye_optic", + "bio_sunglasses", + "bio_ears", + "bio_digestion", + "bio_recycler", + "bio_purifier" + ], + "items": { + "both": [ "hat_knit", "tshirt", "jacket_light", "knit_scarf", "gloves_light", "boots" ], + "male": [ "briefs", "socks", "pants" ], + "female": [ "bra", "panties", "stockings", "skirt" ] + } + }, + { + "type": "profession", + "ident": "janitor", + "name": "Janitor", + "description": "You earned a living from sweeping up chocolate wrappers and picking chewing gum from under tables. Now the only thing you'll be sweeping are the brains of the dead.", + "points": -1, + "items": { "both": [ "jumpsuit", "socks", "boots", "mop" ], "male": [ "boxer_shorts" ], "female": [ "bra", "boxer_shorts" ] } + }, + { + "type": "profession", + "ident": "poor_student", + "name": "Poor Student", + "description": "You come from a low-income family, and got mocked for your old hand-me-down clothes and for getting free school lunches in the cafeteria. Even worse, your ratty old backpack finally fell apart at the worst time. At least no one's mocking you now.", + "points": -1, + "items": { "both": [ "tshirt", "socks", "lowtops", "shorts" ], "male": [ "briefs" ], "female": [ "panties" ] } + }, + { + "type": "profession", + "ident": "elementary_student", + "name": "Elementary Student", + "description": "You're just a kid, and now the world has turned into something out of one of your bad dreams. The grown-ups you relied on are all dead--or undead--now. What are you going to do?", + "points": 0, + "items": { + "both": [ + "tshirt", + "socks", + "slingpack", + "sneakers", + "jeans", + "jacket_light", + "knit_scarf", + "juice", + "sandwich_pbj", + "fairy_tales" + ], + "male": [ "briefs" ], + "female": [ "panties" ] + } + }, + { + "type": "profession", + "ident": "goalie", + "name": "Hockey Player", + "description": "You were a minor-league hockey goalie before the rest of your team became zombies. It's just you and your hockey equipment versus the undead, but at least you can cross-check them now.", + "points": 0, + "traits": [ "PROF_SKATER" ], + "items": { + "both": [ "mask_hockey", "hockey_stick", "jersey", "pants", "socks", "sneakers", "mouthpiece", "puck" ], + "male": [ "briefs" ], + "female": [ "sports_bra", "panties" ] + } + }, + { + "type": "profession", + "ident": "batter", + "name": "Baseball Player", + "description": "You were a batter on a local minor league team before the cataclysm. You escaped with your equipment, but how long can you survive until your innings are up?", + "points": 0, + "skills": [ { "level": 1, "name": "bashing" } ], + "items": { + "both": [ "bat", "helmet_ball", "dress_shirt", "pants", "socks", "cleats", "mouthpiece", "baseball" ], + "male": [ "briefs" ], + "female": [ "sports_bra", "panties" ] + } + }, + { + "type": "profession", + "ident": "linebacker", + "name": "Football Player", + "description": "You were the star player for the local football team, adored by teammates and fans alike. Now they just adore your brain. You've still got your bulky football gear on.", + "points": 0, + "skills": [ { "level": 2, "name": "dodge" } ], + "items": { + "both": [ + "football_armor", + "tank_top", + "helmet_football", + "pants", + "socks", + "cleats", + "mouthpiece", + "football", + "sports_drink" + ], + "male": [ "briefs" ], + "female": [ "sports_bra", "panties" ] + } + }, + { + "type": "profession", + "ident": "golfer", + "name": "Golfer", + "description": "A birdie is one under par, but how much is a zombie? Your clubhouse was overrun by the undead, and you fled with your trusty driving wedge.", + "points": 0, + "items": { + "both": [ "hat_ball", "dress_shirt", "pants", "socks", "sneakers", "golf_club" ], + "male": [ "briefs" ], + "female": [ "sports_bra", "panties" ] + } + }, + { + "type": "profession", + "ident": "prep_student", + "name": "Preppy Student", + "description": "Your parents were busy, important people, who wanted you to have every advantage and pushed you to be \"successful,\" whatever that meant. If only they'd ever let you experience childhood, or ever shown you their love. You're certainly not getting either one now.", + "points": 1, + "skills": [ { "level": 1, "name": "speech" } ], + "items": { + "both": [ + "dress_shirt", + "jacket_light", + "pants", + "socks", + "dress_shoes", + "skinny_tie", + "tieclip", + "fancy_sunglasses", + "knit_scarf", + "wristwatch", + "mbag", + "water_mineral", + "cell_phone", + "money_bundle", + "adderall", + "manual_business" + ], + "male": [ "briefs" ], + "female": [ "panties" ] + } + }, + { + "type": "profession", + "ident": "bio_gangster", + "name": "Bionic Gangster", + "description": "You were the boss' favorite, their protege; they always counted on you to get the toughtest jobs done. Seeing your potential, they invested in \"basic\" augments and the best gear on the market to better aid you in your job. After enjoying some period of freedom to do as you wanted, now you find yourself needing those skills to survive. ", + "points": 10, + "CBMs": [ + "bio_targeting", + "bio_sunglasses", + "bio_ears", + "bio_carbon", + "bio_blade", + "bio_shock", + "bio_night_vision", + "bio_torsionratchet", + "bio_power_storage_mkII" + ], + "skills": [ + { "level": 3, "name": "melee" }, + { "level": 3, "name": "unarmed" }, + { "level": 3, "name": "gun" }, + { "level": 3, "name": "smg" }, + { "level": 2, "name": "pistol" }, + { "level": 2, "name": "stabbing" }, + { "level": 2, "name": "cutting" }, + { "level": 1, "name": "driving" } + ], + "items": { + "both": { + "items": [ "socks", "bowhat", "suit", "dress_shoes", "knit_scarf", "cigar", "mag_porn" ], + "entries": [ + { "item": "glock_19", "ammo-item": "9mm", "container-item": "sholster", "charges": 15 }, + { "item": "glockmag", "ammo-item": "9mm", "charges": 15 }, + { "item": "tommygun", "ammo-item": "45_acp", "container-item": "shoulder_strap", "charges": 30 }, + { "item": "thompson_bigmag", "ammo-item": "45_acp", "charges": 30 }, + { "item": "ref_lighter", "charges": 100 } + ] + }, + "male": [ "boxer_shorts" ], + "female": [ "bra", "panties" ] + } + }, + { + "type": "profession", + "ident": "waken", + "name": "Awakened", + "description": "You were awoken in the middle of the night by a noise. Armed only with a flashlight you went to investigate, now you face the cataclysm.", + "points": 0, + "items": { + "both": [ "slippers", "flashlight" ], + "male": [ "boxer_shorts", "socks", "house_coat" ], + "female": [ "bra", "panties", "stockings", "gown" ] + } + }, + { + "type": "profession", + "ident": "bio_cyclist", + "name": "Bionic Cyclist", + "description": "Your training and augmentation for the Cyber-Olympics cycling competition gave you an edge on escaping the start of the cataclysm. Can you keep on running from it forever?", + "points": 6, + "CBMs": [ "bio_str_enhancer", "bio_adrenaline", "bio_hydraulics", "bio_metabolics", "bio_power_storage_mkII" ], + "skills": [ { "level": 3, "name": "driving" }, { "level": 2, "name": "dodge" } ], + "items": { + "both": [ + "helmet_bike", + "folding_bicycle", + "under_armor_shorts", + "under_armor", + "socks", + "sneakers", + "protein_drink", + "fanny", + "fancy_sunglasses" + ], + "male": [ "briefs" ], + "female": [ "panties", "sports_bra" ] + } + }, + { + "type": "profession", + "ident": "welder", + "name": "Welder", + "description": "You worked as a welder for an off shore company before the cataclysm. You were on your way back home when it struck. At least you got the tools of your craft.", + "points": 4, + "skills": [ { "level": 1, "name": "mechanics" } ], + "items": { + "both": [ + "socks", + "wearable_light", + "goggles_welding", + "jumpsuit", + "gloves_work", + "boots_steel", + "tool_belt", + "apron_leather", + "oxy_torch", + "tinyweldtank" + ], + "male": [ "boxer_shorts" ], + "female": [ "bra", "boxer_shorts" ] + } + }, + { + "type": "profession", + "ident": "pri-sur", + "name": "Primitive Survivalist", + "description": "You knew the day would come, the day it all went to shit. You prepared yourself, not by gear but sheer skill; all those days in the woods paid off. If your ancestors survived with no tech, you'll be damned if you dont't", + "points": 6, + "skills": [ + { "level": 5, "name": "survival" }, + { "level": 3, "name": "archery" }, + { "level": 3, "name": "gun" }, + { "level": 3, "name": "fabrication" }, + { "level": 3, "name": "cooking" }, + { "level": 2, "name": "unarmed" }, + { "level": 2, "name": "melee" }, + { "level": 2, "name": "tailor" }, + { "level": 2, "name": "firstaid" }, + { "level": 1, "name": "mechanics" }, + { "level": 1, "name": "swimming" } + ], + "items": { + "both": [ "jeans", "longshirt", "socks", "coat_winter", "boots_winter", "knit_scarf", "pockknife", "water_clean", "matches" ], + "male": [ "boxer_shorts" ], + "female": [ "bra", "panties" ] } + } ] diff --git a/data/mods/more_classes_scenarios/cs_scenarios.json b/data/mods/more_classes_scenarios/cs_scenarios.json index 65ae8a9256703..1ce5466d69eb5 100644 --- a/data/mods/more_classes_scenarios/cs_scenarios.json +++ b/data/mods/more_classes_scenarios/cs_scenarios.json @@ -1,25 +1,60 @@ [ + { + "type": "scenario", + "name": "Bunker Evacuee", + "description": "You had connections, or intel somehow..., and because of it, you found this LMOE Shelter. It's summer now and you somehow survived, now things get a little bit easier.", + "flags": [ "SUR_START", "SUM_START" ], + "ident": "bunker", + "points": 2, + "start_name": "LMOE Shelter", + "allowed_locs": [ "lmoe" ], + "professions": [ + "senior", + "hacker", + "lawyer", + "labtech", + "bionic_spy", + "soldier", + "national_guard", + "specops", + "bio_soldier", + "bio_sniper", + "bio_specops" + ] + }, { "type": "scenario", "ident": "fema_help", "name": "Challenge-FEMA Death Camp", - "points" : -6, + "points": -6, "description": "You were one of the many law enforcement and military personnel alike called in to keep order on one of the FEMA camps, it all went to shit fast...wounded, infected, surrounded by fire you lay...and they just keep coming...", - "allowed_locs": ["fema_entrance_s","fema_s"], - "professions" : ["cop","sniper_police","riot_police","bionic_cop","swat","swat_heavy","soldier","bio_soldier","bio_sniper","bio_specops","specops"], + "allowed_locs": [ "fema_entrance_s", "fema_s" ], + "professions": [ + "cop", + "sniper_police", + "riot_police", + "bionic_cop", + "swat", + "swat_heavy", + "soldier", + "bio_soldier", + "bio_sniper", + "bio_specops", + "specops" + ], "start_name": "Fema Camp", - "flags": ["HELI_CRASH","SUR_START","FIRE_START","INFECTED","CHALLENGE"] + "flags": [ "HELI_CRASH", "SUR_START", "FIRE_START", "INFECTED", "CHALLENGE" ] }, { - "type" : "scenario", - "ident" : "mansion_scen", - "name" : "Mansion Holdout", - "points" : -1, - "description" : "While the world ended, you felt relatively safe inside the mansion you have serviced for years. Now the dead have come knocking at your doorstep, it might be time to leave", - "allowed_locs" : ["mansion_e2_s", "mansion_+2_s"], - "professions" : ["maid"], - "start_name" : "Mansion", - "flags" : ["SUR_START"] + "type": "scenario", + "ident": "mansion_scen", + "name": "Mansion Holdout", + "points": -1, + "description": "While the world ended, you felt relatively safe inside the mansion you have serviced for years. Now the dead have come knocking at your doorstep, it might be time to leave", + "allowed_locs": [ "mansion_e2_s", "mansion_+2_s" ], + "professions": [ "maid" ], + "start_name": "Mansion", + "flags": [ "SUR_START" ] }, { "type": "scenario", @@ -27,51 +62,87 @@ "name": "The Last Gig", "points": -6, "description": "You were on your way to another routine job, it might of been a target to kill, an item to steal or intel to gather. Whatever it was doesn't matter anymore; you did your best to avoid the horde and when you arrive, the place is surrounded, not by cops as you might expected, but by the dead. Worse, you got a cut somewhere along the way and it's looking infected.", - "allowed_locs": ["house","bank","pawn","s_gun","s_gas_s"], - "professions": ["convict", "scoundrel", "gangster", "burglar", "bionic_thief", "razorgirl", "bionic_hitman", "bio_gangster"], + "allowed_locs": [ "house", "bank", "pawn", "s_gun", "s_gas_s" ], + "professions": [ "convict", "scoundrel", "gangster", "burglar", "bionic_thief", "razorgirl", "bionic_hitman", "bio_gangster" ], "start_name": "Intended Crime Scene", - "flags": ["SUR_START","INFECTED"] + "flags": [ "SUR_START", "INFECTED" ] }, { - "type" : "scenario", - "ident" : "summer_advanced_start", - "copy-from" : "summer_advanced_start", - "extend": { "professions" : [ "wasteland_cyborg" ] } + "type": "scenario", + "ident": "summer_advanced_start", + "copy-from": "summer_advanced_start", + "extend": { "professions": [ "wasteland_cyborg" ] } }, { - "type" : "scenario", - "ident" : "ambushed", - "copy-from" : "ambushed", - "extend": { "professions" : [ "wasteland_cyborg" ] } + "type": "scenario", + "ident": "ambushed", + "copy-from": "ambushed", + "extend": { "professions": [ "wasteland_cyborg" ] } }, { - "type" : "scenario", - "ident" : "heli_crash", - "copy-from" : "heli_crash", - "extend": { "professions" : [ "bio_specops" ] } + "type": "scenario", + "ident": "heli_crash", + "copy-from": "heli_crash", + "extend": { "professions": [ "bio_specops" ] } }, { - "type" : "scenario", + "type": "scenario", "ident": "lab_chal", - "copy-from" : "lab_chal", - "extend": { "professions" : [ "cykotic" ] } + "copy-from": "lab_chal", + "extend": { "professions": [ "cykotic" ] } }, { - "type" : "scenario", - "ident" : "mutant", - "copy-from" : "mutant", - "extend": { "professions" : [ "cykotic" ] } + "type": "scenario", + "ident": "mutant", + "copy-from": "mutant", + "extend": { "professions": [ "cykotic" ] } }, { "type": "scenario", "ident": "schools_out", - "copy-from" : "schools_out", - "extend": { "professions" : ["elementary_student", "prep_student", "janitor", "poor_student"] } + "copy-from": "schools_out", + "extend": { "professions": [ "elementary_student", "prep_student", "janitor", "poor_student" ] } }, { "type": "scenario", "ident": "cyberpunk", - "copy-from" : "cyberpunk", - "extend": { "professions" : ["bionic_thief", "bionic_hitman", "bio_gangster"] } + "copy-from": "cyberpunk", + "extend": { "professions": [ "bionic_thief", "bionic_hitman", "bio_gangster" ] } + }, + { + "type": "scenario", + "ident": "wilderness", + "copy-from": "wilderness", + "extend": { "professions": [ "pri-sur" ] } + }, + { + "type": "scenario", + "ident": "infected", + "copy-from": "infected", + "extend": { "allowed_locs": [ "s_electronics_s", "s_clothes_s" ] } + }, + { + "type": "scenario", + "ident": "fire", + "copy-from": "fire", + "extend": { "allowed_locs": [ "s_electronics_s", "s_clothes_s" ] } + }, + { + "type": "scenario", + "ident": "missed", + "copy-from": "missed", + "extend": { "allowed_locs": [ "s_electronics_s", "s_clothes_s" ] } + }, + { + "type": "scenario", + "ident": "mutant", + "copy-from": "mutant", + "extend": { "professions": [ "faulty_bionic" ] } + }, + { + "type": "scenario", + "ident": "bad_day", + "copy-from": "bad_day", + "extend": { "professions": [ "faulty_bionic", "cykotic" ] } } ] diff --git a/data/mods/more_classes_scenarios/cs_start_locations.json b/data/mods/more_classes_scenarios/cs_start_locations.json index e551c29fb5c84..18690d445dd56 100644 --- a/data/mods/more_classes_scenarios/cs_start_locations.json +++ b/data/mods/more_classes_scenarios/cs_start_locations.json @@ -1,32 +1,44 @@ [ { - "type" : "start_location", - "ident" : "fema_entrance_s", - "name" : "Fema Entrance", - "target" : "fema_entrance" + "type": "start_location", + "ident": "fema_entrance_s", + "name": "Fema Entrance", + "target": "fema_entrance" }, { - "type" : "start_location", - "ident" : "fema_s", - "name" : "Fema Camp", - "target" : "fema" + "type": "start_location", + "ident": "fema_s", + "name": "Fema Camp", + "target": "fema" }, { - "type" : "start_location", - "ident" : "mansion_e2_s", - "name" : "Mansion Entrance", - "target" : "mansion_e2" + "type": "start_location", + "ident": "mansion_e2_s", + "name": "Mansion Entrance", + "target": "mansion_e2" }, { - "type" : "start_location", - "ident" : "mansion_+2_s", - "name" : "Mansion", - "target" : "mansion_+2" + "type": "start_location", + "ident": "mansion_+2_s", + "name": "Mansion", + "target": "mansion_+2" }, { - "type" : "start_location", - "ident" : "s_gas_s", - "name" : "Gas Station", - "target" : "s_gas" + "type": "start_location", + "ident": "s_gas_s", + "name": "Gas Station", + "target": "s_gas" + }, + { + "type": "start_location", + "ident": "s_electronics_s", + "name": "Electronics Store", + "target": "s_electronics" + }, + { + "type": "start_location", + "ident": "s_clothes_s", + "name": "Clothing Store", + "target": "s_clothes" } ] From c152a01085dcd2fd50a19f371c23e632edd70d09 Mon Sep 17 00:00:00 2001 From: Regilith <42500422+Regilith@users.noreply.github.com> Date: Fri, 19 Oct 2018 17:26:34 -0600 Subject: [PATCH 09/59] add 3L foods to drop list --- data/json/item_groups.json | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/data/json/item_groups.json b/data/json/item_groups.json index aa9f9b8ea6753..5ee64973931b0 100644 --- a/data/json/item_groups.json +++ b/data/json/item_groups.json @@ -575,7 +575,18 @@ ["scots_cookbook", 6], ["food_processor", 30 ], ["eclipse_glasses", 1], - ["thermos", 15] + ["thermos", 15], + {"item": "meat_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "veggy_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "apple_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "can_tomato", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "human_pickled", "prob": 1, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "meat_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "veggy_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "sauce_red", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "kompot", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"} ] },{ "type" : "item_group", @@ -1772,7 +1783,18 @@ ["lutefisk", 1], ["dry_beans", 40], ["dry_rice", 40], - {"item": "meat_pickled", "prob": 6, "charges": 2, "container-item": "jar_glass_sealed"} + {"item": "meat_pickled", "prob": 6, "charges": 2, "container-item": "jar_glass_sealed"}, + {"item": "meat_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "veggy_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "apple_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "offal_canned", "prob": 1, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "can_tomato", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "meat_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "veggy_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "sauce_red", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "kompot", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"} ] },{ "type" : "item_group", From bd572c364f6a5823b6d8b4db315856365012fd0d Mon Sep 17 00:00:00 2001 From: Regilith <42500422+Regilith@users.noreply.github.com> Date: Fri, 19 Oct 2018 17:30:13 -0600 Subject: [PATCH 10/59] fix notepad being stupid --- data/json/item_groups.json | 44 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/data/json/item_groups.json b/data/json/item_groups.json index 5ee64973931b0..245b421d305c6 100644 --- a/data/json/item_groups.json +++ b/data/json/item_groups.json @@ -576,17 +576,17 @@ ["food_processor", 30 ], ["eclipse_glasses", 1], ["thermos", 15], - {"item": "meat_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "veggy_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "apple_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "can_tomato", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "human_pickled", "prob": 1, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "meat_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "veggy_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "sauce_red", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "kompot", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"} + {"item": "meat_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "veggy_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "apple_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "can_tomato", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "human_pickled", "prob": 1, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "meat_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "veggy_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "sauce_red", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "kompot", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"} ] },{ "type" : "item_group", @@ -1784,17 +1784,17 @@ ["dry_beans", 40], ["dry_rice", 40], {"item": "meat_pickled", "prob": 6, "charges": 2, "container-item": "jar_glass_sealed"}, - {"item": "meat_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "veggy_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "apple_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "offal_canned", "prob": 1, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "can_tomato", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "meat_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "veggy_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "sauce_red", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, - {"item": "kompot", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"} + {"item": "meat_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "veggy_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "apple_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "offal_canned", "prob": 1, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "can_tomato", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "meat_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "veggy_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "sauce_red", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"}, + {"item": "kompot", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed"} ] },{ "type" : "item_group", From f73c5b1a841744aaeb9bd2c58f5ccd15f1f8ea19 Mon Sep 17 00:00:00 2001 From: Xhuis Date: Sun, 21 Oct 2018 18:46:14 -0400 Subject: [PATCH 11/59] Adds new faux fur clothing, and a tailoring book --- data/json/item_groups.json | 21 ++++++- data/json/items/armor.json | 68 ++++++++++++++++++++- data/json/items/book/tailor.json | 19 ++++++ data/json/recipes/armor/head.json | 12 ++++ data/json/recipes/armor/legs.json | 15 +++++ data/json/recipes/armor/torso.json | 98 ++++++++++++++++++++++++++++-- 6 files changed, 226 insertions(+), 7 deletions(-) diff --git a/data/json/item_groups.json b/data/json/item_groups.json index aa9f9b8ea6753..7db7544550841 100644 --- a/data/json/item_groups.json +++ b/data/json/item_groups.json @@ -289,6 +289,7 @@ ["hat_cotton", 45], ["hat_knit", 25], ["hat_fur", 15], + ["hat_faux_fur", 30], ["hat_newsboy", 20], ["hat_sombrero", 3], ["helmet_bike", 35], @@ -2803,6 +2804,7 @@ ["hat_newsboy", 20], ["hat_knit", 25], ["hat_fur", 15], + ["hat_faux_fur", 20], ["pants_ski", 60], ["long_underpants", 40], ["long_undertop", 40], @@ -2816,14 +2818,19 @@ "type" : "item_group", "id" : "fancyfurs", "items":[ - ["hat_fur", 400], + ["hat_fur", 300], + ["hat_faux_fur", 300], ["sleeveless_trenchcoat_fur", 10], ["sleeveless_duster_fur", 10], + ["sleeveless_trenchcoat_faux_fur", 10], ["coat_fur_sf", 100], ["coat_faux_fur", 300], ["coat_fur", 300], ["gloves_fur", 300], - ["boots_fur", 200] + ["boots_fur", 200], + ["trenchcoat_faux_fur", 50], + ["duster_faux_fur", 50], + ["pants_faux_fur", 50] ] },{ "type" : "item_group", @@ -2831,6 +2838,7 @@ "items":[ ["hat_cotton", 30], ["hat_knit", 40], + ["hat_faux_fur", 30], ["hat_fur", 20], ["hat_newsboy", 20], ["hat_sombrero", 30], @@ -3023,6 +3031,7 @@ ["hat_newsboy", 20], ["hat_sombrero", 3], ["hat_fur", 15], + ["hat_faux_fur", 20], ["UPS_off", 5], ["adv_UPS_off", 3], ["under_armor", 20], @@ -3038,12 +3047,17 @@ ["arm_warmers", 20], ["leg_warmers", 20], ["trenchcoat_leather", 12], + ["trenchcoat_faux_fur", 6], ["sleeveless_trenchcoat", 2], ["sleeveless_trenchcoat_leather", 2], + ["sleeveless_trenchcoat_faux_fur", 2], + ["trenchcoat_leather", 12], ["sleeveless_trenchcoat_fur", 1], ["duster_leather", 12], + ["duster_faux_fur", 6], ["sleeveless_duster", 2], ["sleeveless_duster_leather", 2], + ["sleeveless_duster_faux_fur", 2], ["sleeveless_duster_fur", 1], ["cloak", 5], ["cloak_wool", 5], @@ -3287,6 +3301,7 @@ [ "textbook_biodiesel", 4 ], [ "textbook_fabrication", 4 ], [ "textbook_tailor", 4 ], + [ "recipe_fauxfur", 6 ], [ "carpentry_book", 4 ], [ "brewing_cookbook", 4 ], [ "computer_science", 8 ], @@ -3395,6 +3410,7 @@ ["textbook_gaswarfare", 5], ["recipe_bullets", 8], ["textbook_tailor", 12], + ["recipe_fauxfur", 4], ["recipe_bows", 4], ["recipe_arrows", 4], ["textbook_firstaid", 8], @@ -4556,6 +4572,7 @@ ["helmet_army", 40], ["helmet_liner", 10], ["hat_fur", 15], + ["hat_faux_fur", 15], ["hat_newsboy", 20], ["hat_sombrero", 5], ["holster", 8], diff --git a/data/json/items/armor.json b/data/json/items/armor.json index 7aea1f8747372..f95ef91f830b4 100644 --- a/data/json/items/armor.json +++ b/data/json/items/armor.json @@ -1860,10 +1860,11 @@ "type": "ARMOR", "copy-from": "coat_fur", "name": "faux fur coat", - "description": "A garishly colored faux fur coat with a couple small pockets. Although not as warm as the natural fur, it gives you some of that unique flair.", + "description": "A garishly-colored faux fur coat with a couple small pockets. Although not as warm as the natural fur, it gives you some of that unique flair.", "material": [ "faux_fur", "cotton" ], "color": "pink", "covers": [ "TORSO", "ARMS" ], + "flags": [ "VARSIZE", "POCKETS", "OUTER", "SUPER_FANCY" ], "warmth": 70 }, { @@ -2413,6 +2414,17 @@ "environmental_protection": 1, "flags": [ "VARSIZE", "POCKETS", "OUTER", "WATERPROOF", "RAINPROOF" ] }, + { + "id": "duster_faux_fur", + "type": "ARMOR", + "copy-from": "duster_fur", + "name": "faux fur duster", + "description": "A thick faux fur duster, falling below your knees. Has many pockets for storing things.", + "material": [ "faux_fur", "cotton" ], + "covers": [ "TORSO", "ARMS", "LEGS" ], + "flags": [ "VARSIZE", "POCKETS", "OUTER", "FANCY" ], + "warmth": 40 + }, { "id": "duster_leather", "type": "ARMOR", @@ -4049,6 +4061,17 @@ "warmth": 70, "material_thickness": 3 }, + { + "id": "hat_faux_fur", + "type": "ARMOR", + "copy-from": "hat_fur", + "name": "faux fur hat", + "description": "A stylish hat made of faux fur. Like real fur, but without the suffering, if the tag is to be believed. Very warm.", + "material": [ "fur" ], + "covers": [ "HEAD" ], + "flags": [ "FANCY" ], + "warmth": 60 + }, { "id": "hat_hard", "type": "ARMOR", @@ -6814,6 +6837,16 @@ "environmental_protection": 3, "flags": [ "VARSIZE", "POCKETS" ] }, + { + "id": "pants_faux_fur", + "type": "ARMOR", + "copy-from": "pants_fur", + "name": "faux fur pants", + "description": "A pair of long cotton pants lined with warm imitation fur.", + "material": [ "faux_fur", "cotton" ], + "covers": [ "LEGS" ], + "warmth": 70 + }, { "id": "pants_leather", "type": "ARMOR", @@ -7824,6 +7857,17 @@ "environmental_protection": 1, "flags": [ "VARSIZE", "POCKETS", "OUTER", "WATERPROOF", "RAINPROOF" ] }, + { + "id": "sleeveless_duster_faux_fur", + "type": "ARMOR", + "copy-from": "sleeveless_duster_fur", + "name": "sleeveless faux fur duster", + "description": "A thick, sleeveless faux fur duster, falling below your knees. Has many pockets for storing things.", + "material": [ "faux_fur", "cotton" ], + "covers": [ "TORSO", "LEGS" ], + "flags": [ "VARSIZE", "POCKETS", "OUTER", "FANCY" ], + "warmth": 40 + }, { "id": "sleeveless_duster_leather", "type": "ARMOR", @@ -7913,6 +7957,17 @@ "environmental_protection": 1, "flags": [ "VARSIZE", "POCKETS", "OUTER" ] }, + { + "id": "sleeveless_trenchcoat_faux_fur", + "type": "ARMOR", + "copy-from": "sleeveless_trenchcoat_fur", + "name": "sleeveless faux fur trenchcoat", + "description": "A thick faux fur trenchcoat without sleeves. Has plenty of storage space, and looks pretty good.", + "material": [ "faux_fur", "cotton" ], + "covers": [ "TORSO" ], + "flags": [ "VARSIZE", "POCKETS", "OUTER", "FANCY" ], + "warmth": 40 + }, { "id": "sleeveless_trenchcoat_leather", "type": "ARMOR", @@ -8957,6 +9012,17 @@ "environmental_protection": 1, "flags": [ "VARSIZE", "POCKETS", "OUTER" ] }, + { + "id": "trenchcoat_faux_fur", + "type": "ARMOR", + "copy-from": "trenchcoat_fur", + "name": "faux fur trenchcoat", + "description": "A thick faux fur trenchcoat, lined with pockets. Great for storage, and makes you the talk of the town.", + "material": [ "faux_fur", "cotton" ], + "covers": [ "TORSO", "ARMS" ], + "flags": [ "VARSIZE", "POCKETS", "OUTER", "FANCY" ], + "warmth": 40 + }, { "id": "trenchcoat_leather", "type": "ARMOR", diff --git a/data/json/items/book/tailor.json b/data/json/items/book/tailor.json index d684574e2d2a7..3344d2797543f 100644 --- a/data/json/items/book/tailor.json +++ b/data/json/items/book/tailor.json @@ -78,6 +78,25 @@ "time": 55, "fun": -1 }, + { + "id": "recipe_fauxfur", + "type": "BOOK", + "name": "Friendly, Humane Fashion", + "description": "An educational book detailing the uses of fake fur, as well as its benefits and disadvantages. The prose is rather passionate, and a disclaimer on the cover proudly states that the book is printed and distributed by the Gryphon Animal Rights Organization.", + "weight": 2267, + "volume": 4, + "price": 5000, + "bashing": 5, + "material": [ "paper" ], + "symbol": "?", + "color": "green", + "skill": "tailor", + "required_level": 2, + "max_level": 5, + "intelligence": 7, + "time": 20, + "fun": 1 + }, { "id": "textbook_tailor", "type": "BOOK", diff --git a/data/json/recipes/armor/head.json b/data/json/recipes/armor/head.json index 935049cbbd2ec..ce1a76805dc25 100644 --- a/data/json/recipes/armor/head.json +++ b/data/json/recipes/armor/head.json @@ -264,6 +264,18 @@ "using": [ [ "sewing_standard", 8 ] ], "components": [ [ [ "fur", 3 ] ] ] }, + { + "result": "hat_faux_fur", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_HEAD", + "skill_used": "tailor", + "difficulty": 2, + "time": 40000, + "book_learn": [ [ "textbook_tailor", 2 ], [ "recipe_fauxfur", 1 ] ], + "using": [ [ "sewing_standard", 8 ] ], + "components": [ [ [ "faux_fur", 3 ] ] ] + }, { "result": "hat_hard", "type": "recipe", diff --git a/data/json/recipes/armor/legs.json b/data/json/recipes/armor/legs.json index 8993db2e88c65..2ab72da3d6957 100644 --- a/data/json/recipes/armor/legs.json +++ b/data/json/recipes/armor/legs.json @@ -413,6 +413,21 @@ [ [ "fur", 6 ], [ "tanned_pelt", 1 ] ] ] }, + { + "result": "pants_faux_fur", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_LEGS", + "skill_used": "tailor", + "difficulty": 3, + "time": 40000, + "book_learn": [ [ "textbook_tailor", 3 ], [ "tailor_portfolio", 3 ], [ "recipe_fauxfur", 2 ] ], + "using": [ [ "sewing_standard", 18 ] ], + "components": [ + [ [ "rag", 10 ] ], + [ [ "faux_fur", 6 ] ] + ] + }, { "result": "pants_leather", "type": "recipe", diff --git a/data/json/recipes/armor/torso.json b/data/json/recipes/armor/torso.json index 8920a5d23bafe..9b723e01d8f29 100644 --- a/data/json/recipes/armor/torso.json +++ b/data/json/recipes/armor/torso.json @@ -161,11 +161,9 @@ "category": "CC_ARMOR", "subcategory": "CSC_ARMOR_TORSO", "skill_used": "tailor", - "difficulty": 4, - "skills_required": [ "tailor", 1 ], + "difficulty": 3, "time": 100000, - "autolearn": true, - "book_learn": [ [ "textbook_tailor", 4 ], [ "tailor_portfolio", 4 ] ], + "book_learn": [ [ "textbook_tailor", 4 ], [ "tailor_portfolio", 3 ], [ "recipe_fauxfur", 3 ] ], "using": [ [ "sewing_standard", 20 ] ], "components": [ [ [ "rag", 11 ] ], @@ -237,6 +235,21 @@ "using": [ [ "sewing_standard", 60 ] ], "components": [ [ [ "fur", 40 ], [ "tanned_pelt", 7 ] ] ] }, + { + "result": "duster_faux_fur", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_TORSO", + "skill_used": "tailor", + "difficulty": 3, + "time": 200000, + "book_learn": [ [ "textbook_tailor", 3 ], [ "tailor_portfolio", 3 ], [ "recipe_fauxfur", 2 ] ], + "using": [ [ "sewing_standard", 60 ] ], + "components": [ + [ [ "rag", 25 ] ], + [ [ "faux_fur", 20 ] ] + ] + }, { "result": "duster_leather", "type": "recipe", @@ -571,6 +584,22 @@ "using": [ [ "sewing_standard", 50 ] ], "components": [ [ [ "fur", 34 ], [ "tanned_pelt", 6 ] ] ] }, + { + "result": "sleeveless_duster_faux_fur", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_TORSO", + "//": "The general guideline for sleeveless dusters is the components, volume, weight, time to craft, and value are 15% lower (rounded down) than the original. Making it from an original takes 50% the time.", + "skill_used": "tailor", + "difficulty": 3, + "time": 200000, + "book_learn": [ [ "textbook_tailor", 3 ], [ "tailor_portfolio", 3 ], [ "recipe_fauxfur", 2 ] ], + "using": [ [ "sewing_standard", 50 ] ], + "components": [ + [ [ "rag", 20 ] ], + [ [ "faux_fur", 12 ] ] + ] + }, { "result": "sleeveless_duster_fur", "type": "recipe", @@ -586,6 +615,21 @@ "qualities": [ { "id": "CUT", "level": 1 } ], "components": [ [ [ "duster_fur", 1 ] ] ] }, + { + "result": "sleeveless_duster_faux_fur", + "type": "recipe", + "id_suffix": "from_duster_faux_fur", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_TORSO", + "//": "The general guideline for sleeveless dusters is the components, volume, weight, time to craft, and value are 15% lower (rounded down) than the original. Making it from an original takes 50% the time.", + "skill_used": "tailor", + "difficulty": 2, + "time": 100000, + "autolearn": true, + "byproducts": [ [ "faux_fur", 6 ] ], + "qualities": [ { "id": "CUT", "level": 1 } ], + "components": [ [ [ "duster_faux_fur", 1 ] ] ] + }, { "result": "sleeveless_duster_leather", "type": "recipe", @@ -694,6 +738,21 @@ "qualities": [ { "id": "CUT", "level": 1 } ], "components": [ [ [ "trenchcoat_fur", 1 ] ] ] }, + { + "result": "sleeveless_trenchcoat_faux_fur", + "type": "recipe", + "id_suffix": "from_trenchcoat_faux_fur", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_TORSO", + "//": "The general guideline for sleeveless trenchcoats is the components, volume, weight, time to craft, and value are 15% lower (rounded down) than the original. Making it from an original takes 50% the time.", + "skill_used": "tailor", + "difficulty": 2, + "time": 100000, + "autolearn": true, + "byproducts": [ [ "faux_fur", 2 ] ], + "qualities": [ { "id": "CUT", "level": 1 } ], + "components": [ [ [ "trenchcoat_faux_fur", 1 ] ] ] + }, { "result": "sleeveless_trenchcoat_fur", "type": "recipe", @@ -708,6 +767,22 @@ "using": [ [ "sewing_standard", 38 ] ], "components": [ [ [ "fur", 28 ], [ "tanned_pelt", 5 ] ] ] }, + { + "result": "sleeveless_trenchcoat_faux_fur", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_TORSO", + "//": "The general guideline for sleeveless trenchcoats is the components, volume, weight, time to craft, and value are 15% lower (rounded down) than the original. Making it from an original takes 50% the time.", + "skill_used": "tailor", + "difficulty": 3, + "time": 200000, + "book_learn": [ [ "textbook_tailor", 3 ], [ "tailor_portfolio", 3 ], [ "recipe_fauxfur", 2 ] ], + "using": [ [ "sewing_standard", 38 ] ], + "components": [ + [ [ "rag", 10 ] ], + [ [ "faux_fur", 10 ] ] + ] + }, { "result": "sleeveless_trenchcoat_leather", "type": "recipe", @@ -861,6 +936,21 @@ "using": [ [ "sewing_standard", 45 ] ], "components": [ [ [ "fur", 30 ], [ "tanned_pelt", 5 ] ] ] }, + { + "result": "trenchcoat_faux_fur", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_TORSO", + "skill_used": "tailor", + "difficulty": 3, + "time": 200000, + "book_learn": [ [ "textbook_tailor", 3 ], [ "tailor_portfolio", 3 ], [ "recipe_fauxfur", 2 ] ], + "using": [ [ "sewing_standard", 45 ] ], + "components": [ + [ [ "rag", 14 ] ], + [ [ "faux_fur", 12 ] ] + ] + }, { "result": "trenchcoat_leather", "type": "recipe", From bc6a8ea9f963f4d3af4e268ba95ba41dc8677be4 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Tue, 16 Oct 2018 14:29:27 +0200 Subject: [PATCH 12/59] Use the same advanced martial arts display for character creation. --- src/martialarts.cpp | 40 ++++++++++++++++++++++++++++++++++ src/martialarts.h | 17 +++++++++++++++ src/newcharacter.cpp | 13 ++++++++++- src/player.cpp | 51 -------------------------------------------- 4 files changed, 69 insertions(+), 52 deletions(-) diff --git a/src/martialarts.cpp b/src/martialarts.cpp index 22175e409430f..78309a11dd0ba 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -6,6 +6,8 @@ #include "translations.h" #include "itype.h" #include "damage.h" +#include "output.h" +#include "input.h" #include #include @@ -840,3 +842,41 @@ float ma_technique::armor_penetration( const player &u, damage_type type ) const { return bonuses.get_flat( u, AFFECTED_ARMOR_PENETRATION, type ); } + +bool ma_style_callback::key(const input_context &ctxt, const input_event &event, int entnum, uimenu *menu) +{ + const std::string action = ctxt.input_to_action( event ); + if( action != "SHOW_DESCRIPTION" ) { + return false; + } + matype_id style_selected; + const size_t index = entnum; + if( index >= offset && index - offset < styles.size() ) { + style_selected = styles[index - offset]; + } + if( !style_selected.str().empty() ) { + const martialart &ma = style_selected.obj(); + std::ostringstream buffer; + buffer << ma.name << "\n\n \n\n"; + if( !ma.techniques.empty() ) { + buffer << ngettext( "Technique:", "Techniques:", ma.techniques.size() ) << " "; + buffer << enumerate_as_string( ma.techniques.begin(), ma.techniques.end(), []( const matec_id &mid ) { + return string_format( "%s: %s", _( mid.obj().name.c_str() ), _( mid.obj().description.c_str() ) ); + } ); + } + if( ma.force_unarmed ) { + buffer << "\n\n \n\n"; + buffer << _( "This style forces you to use unarmed strikes, even if wielding a weapon." ); + } + if( !ma.weapons.empty() ) { + buffer << "\n\n \n\n"; + buffer << ngettext( "Weapon:", "Weapons:", ma.weapons.size() ) << " "; + buffer << enumerate_as_string( ma.weapons.begin(), ma.weapons.end(), []( const std::string &wid ) { + return item::nname( wid ); + } ); + } + popup(buffer.str(), PF_NONE); + menu->redraw(); + } + return true; +} diff --git a/src/martialarts.h b/src/martialarts.h index 624eb9d54c6c0..85216b8cdc618 100644 --- a/src/martialarts.h +++ b/src/martialarts.h @@ -5,6 +5,7 @@ #include "string_id.h" #include "bonuses.h" #include "calendar.h" +#include "ui.h" #include #include @@ -233,6 +234,22 @@ class martialart std::vector ongethit_buffs; }; +class ma_style_callback : public uimenu_callback +{ +private: + size_t offset; + const std::vector &styles; + +public: + ma_style_callback( int style_offset, const std::vector &selectable_styles ) + : offset( style_offset ) + , styles( selectable_styles ) + {} + + bool key(const input_context &ctxt, const input_event &event, int entnum, uimenu *menu) override; + ~ma_style_callback() override = default; +}; + void load_technique( JsonObject &jo, const std::string &src ); void load_martial_art( JsonObject &jo, const std::string &src ); void check_martialarts(); diff --git a/src/newcharacter.cpp b/src/newcharacter.cpp index c18e1487d8398..fd6f026db95d4 100644 --- a/src/newcharacter.cpp +++ b/src/newcharacter.cpp @@ -28,6 +28,7 @@ #include "string_input_popup.h" #include "worldfactory.h" #include "json.h" +#include "martialarts.h" #ifndef _MSC_VER #include @@ -203,9 +204,19 @@ matype_id choose_ma_style( const character_type type, const std::vector bio_cqb_styles {{ matype_id{ "style_karate" }, matype_id{ "style_judo" }, matype_id{ "style_muay_thai" }, matype_id{ "style_biojutsu" } }}; -class ma_style_callback : public uimenu_callback -{ -private: - size_t offset; - const std::vector &styles; - -public: - ma_style_callback( int style_offset, const std::vector &selectable_styles ) - : offset( style_offset ) - , styles( selectable_styles ) - {} - - bool key(const input_context &ctxt, const input_event &event, int entnum, uimenu *menu) override { - const std::string action = ctxt.input_to_action( event ); - if( action != "SHOW_DESCRIPTION" ) { - return false; - } - matype_id style_selected; - const size_t index = entnum; - if( index >= offset && index - offset < styles.size() ) { - style_selected = styles[index - offset]; - } - if( !style_selected.str().empty() ) { - const martialart &ma = style_selected.obj(); - std::ostringstream buffer; - buffer << ma.name << "\n\n \n\n"; - if( !ma.techniques.empty() ) { - buffer << ngettext( "Technique:", "Techniques:", ma.techniques.size() ) << " "; - buffer << enumerate_as_string( ma.techniques.begin(), ma.techniques.end(), []( const matec_id &mid ) { - return string_format( "%s: %s", _( mid.obj().name.c_str() ), _( mid.obj().description.c_str() ) ); - } ); - } - if( ma.force_unarmed ) { - buffer << "\n\n \n\n"; - buffer << _( "This style forces you to use unarmed strikes, even if wielding a weapon." ); - } - if( !ma.weapons.empty() ) { - buffer << "\n\n \n\n"; - buffer << ngettext( "Weapon:", "Weapons:", ma.weapons.size() ) << " "; - buffer << enumerate_as_string( ma.weapons.begin(), ma.weapons.end(), []( const std::string &wid ) { - return item::nname( wid ); - } ); - } - popup(buffer.str(), PF_NONE); - menu->redraw(); - } - return true; - } - ~ma_style_callback() override = default; -}; - bool player::pick_style() // Style selection menu { enum style_selection { From 4fe76b9eef6c8617c38b75b5fe2dd8b93837deb6 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Tue, 16 Oct 2018 14:47:07 +0200 Subject: [PATCH 13/59] astyle --- src/martialarts.cpp | 10 ++++++---- src/martialarts.h | 24 ++++++++++++------------ src/newcharacter.cpp | 3 ++- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/martialarts.cpp b/src/martialarts.cpp index 78309a11dd0ba..403eef000fd2b 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -843,7 +843,8 @@ float ma_technique::armor_penetration( const player &u, damage_type type ) const return bonuses.get_flat( u, AFFECTED_ARMOR_PENETRATION, type ); } -bool ma_style_callback::key(const input_context &ctxt, const input_event &event, int entnum, uimenu *menu) +bool ma_style_callback::key( const input_context &ctxt, const input_event &event, int entnum, + uimenu *menu ) { const std::string action = ctxt.input_to_action( event ); if( action != "SHOW_DESCRIPTION" ) { @@ -860,7 +861,8 @@ bool ma_style_callback::key(const input_context &ctxt, const input_event &event, buffer << ma.name << "\n\n \n\n"; if( !ma.techniques.empty() ) { buffer << ngettext( "Technique:", "Techniques:", ma.techniques.size() ) << " "; - buffer << enumerate_as_string( ma.techniques.begin(), ma.techniques.end(), []( const matec_id &mid ) { + buffer << enumerate_as_string( ma.techniques.begin(), + ma.techniques.end(), []( const matec_id & mid ) { return string_format( "%s: %s", _( mid.obj().name.c_str() ), _( mid.obj().description.c_str() ) ); } ); } @@ -871,11 +873,11 @@ bool ma_style_callback::key(const input_context &ctxt, const input_event &event, if( !ma.weapons.empty() ) { buffer << "\n\n \n\n"; buffer << ngettext( "Weapon:", "Weapons:", ma.weapons.size() ) << " "; - buffer << enumerate_as_string( ma.weapons.begin(), ma.weapons.end(), []( const std::string &wid ) { + buffer << enumerate_as_string( ma.weapons.begin(), ma.weapons.end(), []( const std::string & wid ) { return item::nname( wid ); } ); } - popup(buffer.str(), PF_NONE); + popup( buffer.str(), PF_NONE ); menu->redraw(); } return true; diff --git a/src/martialarts.h b/src/martialarts.h index 85216b8cdc618..27ef1a0043a2c 100644 --- a/src/martialarts.h +++ b/src/martialarts.h @@ -236,18 +236,18 @@ class martialart class ma_style_callback : public uimenu_callback { -private: - size_t offset; - const std::vector &styles; - -public: - ma_style_callback( int style_offset, const std::vector &selectable_styles ) - : offset( style_offset ) - , styles( selectable_styles ) - {} - - bool key(const input_context &ctxt, const input_event &event, int entnum, uimenu *menu) override; - ~ma_style_callback() override = default; + private: + size_t offset; + const std::vector &styles; + + public: + ma_style_callback( int style_offset, const std::vector &selectable_styles ) + : offset( style_offset ) + , styles( selectable_styles ) + {} + + bool key( const input_context &ctxt, const input_event &event, int entnum, uimenu *menu ) override; + ~ma_style_callback() override = default; }; void load_technique( JsonObject &jo, const std::string &src ); diff --git a/src/newcharacter.cpp b/src/newcharacter.cpp index fd6f026db95d4..e0e32cd5a341b 100644 --- a/src/newcharacter.cpp +++ b/src/newcharacter.cpp @@ -209,7 +209,8 @@ matype_id choose_ma_style( const character_type type, const std::vector Date: Wed, 17 Oct 2018 15:55:50 +0200 Subject: [PATCH 14/59] Generate technique descriptions --- src/bonuses.cpp | 49 ++++++++++++++- src/bonuses.h | 2 + src/martialarts.cpp | 147 +++++++++++++++++++++++++++++++++++++++++--- src/martialarts.h | 1 + 4 files changed, 189 insertions(+), 10 deletions(-) diff --git a/src/bonuses.cpp b/src/bonuses.cpp index d1651e0c36418..710028107c19f 100644 --- a/src/bonuses.cpp +++ b/src/bonuses.cpp @@ -34,7 +34,7 @@ static const std::map scaling_stat_map = {{ std::make_pair( "str", STAT_STR ), std::make_pair( "dex", STAT_DEX ), std::make_pair( "int", STAT_INT ), - std::make_pair( "per", STAT_PER ), + std::make_pair( "per", STAT_PER ) } }; @@ -58,6 +58,25 @@ affected_stat affected_stat_from_string( const std::string &s ) return AFFECTED_NULL; } +static const std::map affected_stat_map_translation = {{ + std::make_pair( AFFECTED_HIT, "To hit" ), + std::make_pair( AFFECTED_DODGE, "Dodge" ), + std::make_pair( AFFECTED_BLOCK, "Block" ), + std::make_pair( AFFECTED_SPEED, "Speed" ), + std::make_pair( AFFECTED_MOVE_COST, "Move cost" ), + std::make_pair( AFFECTED_DAMAGE, "damage" ), + std::make_pair( AFFECTED_ARMOR, "Armor" ), + std::make_pair( AFFECTED_ARMOR_PENETRATION, "Armor pen" ), + std::make_pair( AFFECTED_TARGET_ARMOR_MULTIPLIER, "Target armor multiplier" ) + } +}; + +std::string string_from_affected_stat( const affected_stat &s ) +{ + const auto &iter = affected_stat_map_translation.find( s ); + return iter != affected_stat_map_translation.end() ? iter->second : ""; +} + bonus_container::bonus_container() { } @@ -183,6 +202,34 @@ float bonus_container::get_mult( const Character &u, affected_stat stat ) const return get_mult( u, stat, DT_NULL ); } +std::string bonus_container::get_description() const +{ + std::stringstream dump; + for( const auto &boni : bonuses_mult ) { + std::string type = string_from_affected_stat( boni.first.get_stat() ); + + if( boni.first.get_stat() == AFFECTED_DAMAGE ) { + type = name_by_dt( boni.first.get_damage_type() ) + " " + type; + } + + dump << type << ": " + << static_cast( boni.second[0].scale * 100 ) << "% "; + } + + for( const auto &boni : bonuses_flat ) { + std::string type = string_from_affected_stat( boni.first.get_stat() ); + + if( boni.first.get_stat() == AFFECTED_DAMAGE ) { + type = name_by_dt( boni.first.get_damage_type() ) + " " + type; + } + + dump << type << ": +" + << static_cast( boni.second[0].scale ) << " "; + } + + return dump.str(); +} + float effect_scaling::get( const Character &u ) const { float bonus = 0.0f; diff --git a/src/bonuses.h b/src/bonuses.h index 561f3909b8a25..e323abbe8e980 100644 --- a/src/bonuses.h +++ b/src/bonuses.h @@ -78,6 +78,8 @@ class bonus_container float get_mult( const Character &u, affected_stat stat, damage_type type ) const; float get_mult( const Character &u, affected_stat stat ) const; + std::string get_description() const; + private: using bonus_map = std::map>; /** All kinds of bonuses by types to damage, hit etc. */ diff --git a/src/martialarts.cpp b/src/martialarts.cpp index 403eef000fd2b..d4416d822c86e 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -8,6 +8,7 @@ #include "damage.h" #include "output.h" #include "input.h" +#include "skill.h" #include #include @@ -843,6 +844,93 @@ float ma_technique::armor_penetration( const player &u, damage_type type ) const return bonuses.get_flat( u, AFFECTED_ARMOR_PENETRATION, type ); } +std::string ma_technique::get_description() const +{ + std::stringstream dump; + + dump << string_format( _( " Type: %s" ), + defensive ? "defensive" : "offensive" ) << std::endl; + + if( std::any_of( reqs.min_skill.begin(), + reqs.min_skill.end(), []( const std::pair &pr ) { + return pr.second > 0; +} ) ) { + dump << string_format( _( "%s required:" ), + ngettext( "Skill", "Skills", reqs.min_skill.size() ) ); + + for( const auto &pr : reqs.min_skill ) { + dump << string_format( " %s: %d ", pr.first->name(), pr.second ); + } + + dump << std::endl; + } + + std::string temp = bonuses.get_description(); + if( !temp.empty() ) { + dump << _( "Boni: " ) << temp << std::endl; + } + + if( reqs.unarmed_allowed && reqs.melee_allowed ) { + dump << _( "* Can eighter be used while armed or unarmed" ) << std::endl; + } else if( reqs.unarmed_allowed ) { + dump << _( "* Can only be used while unarmed" ) << std::endl; + } else if( reqs.melee_allowed ) { + dump << _( "* Can only be used while armed" ) << std::endl; + } + + if( crit_tec ) { + dump << _( "* Will only activate on a crit" ) << std::endl; + } + + if( dodge_counter ) { + dump << _( "* Will counterattack when you dodge" ) << std::endl; + } + + if( block_counter ) { + dump << _( "* Will counterattack when you block" ) << std::endl; + } + + if( miss_recovery ) { + dump << _( "* Will grant a free recovery from a miss" ) << std::endl; + } + + if( grab_break ) { + dump << _( "* Will break a grab" ) << std::endl; + } + + if( aoe == "wide" ) { + dump << _( "* Will attack in a wide arc in fron of you" ) << std::endl; + + } else if( aoe == "spin" ) { + dump << _( "* Will attack adjacent enemies around you" ) << std::endl; + + } else if( aoe == "impale" ) { + dump << _( "* Will attack your target and another one behind it" ) << + std::endl; + } + + if( knockback_dist ) { + dump << string_format( _( "* Will knock back enemies %d %s" ), + knockback_dist, ngettext( "tile", "tiles", knockback_dist ) ) << std::endl; + } + + if( down_dur ) { + dump << string_format( _( "* Will down enemies for %d %s" ), + down_dur, ngettext( "turn", "turns", down_dur ) ) << std::endl; + } + + if( stun_dur ) { + dump << string_format( _( "* Will stun target for %d %s" ), + stun_dur, ngettext( "turn", "turns", stun_dur ) ) << std::endl; + } + + if( disarms ) { + dump << _( "* Will disarm the target" ) << std::endl; + } + + return dump.str().empty() ? description : dump.str(); +} + bool ma_style_callback::key( const input_context &ctxt, const input_event &event, int entnum, uimenu *menu ) { @@ -858,26 +946,67 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event if( !style_selected.str().empty() ) { const martialart &ma = style_selected.obj(); std::ostringstream buffer; - buffer << ma.name << "\n\n \n\n"; if( !ma.techniques.empty() ) { - buffer << ngettext( "Technique:", "Techniques:", ma.techniques.size() ) << " "; - buffer << enumerate_as_string( ma.techniques.begin(), - ma.techniques.end(), []( const matec_id & mid ) { - return string_format( "%s: %s", _( mid.obj().name.c_str() ), _( mid.obj().description.c_str() ) ); - } ); + for( const auto &tech : ma.techniques ) { + buffer << string_format( _( "Technique:
%s
" ), tech.obj().name ); + buffer << tech.obj().get_description() << std::endl << "--" << std::endl; + } } if( ma.force_unarmed ) { - buffer << "\n\n \n\n"; + buffer << std::endl << std::endl; buffer << _( "This style forces you to use unarmed strikes, even if wielding a weapon." ); } if( !ma.weapons.empty() ) { - buffer << "\n\n \n\n"; + buffer << std::endl << std::endl; buffer << ngettext( "Weapon:", "Weapons:", ma.weapons.size() ) << " "; buffer << enumerate_as_string( ma.weapons.begin(), ma.weapons.end(), []( const std::string & wid ) { return item::nname( wid ); } ); } - popup( buffer.str(), PF_NONE ); + + catacurses::window w = catacurses::newwin( FULL_SCREEN_HEIGHT, FULL_SCREEN_WIDTH, + ( TERMY > FULL_SCREEN_HEIGHT ) ? ( TERMY - FULL_SCREEN_HEIGHT ) / 2 : 0, + ( TERMX > FULL_SCREEN_WIDTH ) ? ( TERMX - FULL_SCREEN_WIDTH ) / 2 : 0 ); + + std::string text = replace_colors( buffer.str() ); + int width = FULL_SCREEN_WIDTH - 2; + int height = FULL_SCREEN_HEIGHT - 2; + const auto vFolded = foldstring( text, width ); + int iLines = vFolded.size(); + int selected = 0; + + input_context ict; + ict.register_action( "UP" ); + ict.register_action( "DOWN" ); + ict.register_action( "QUIT" ); + + do { + if( selected < 0 ) { + selected = 0; + } else if( iLines < height ) { + selected = 0; + } else if( selected >= iLines - height ) { + selected = iLines - height; + } + + werase( w ); + fold_and_print_from( w, 1, 1, width, selected, c_light_gray, text ); + draw_border( w, BORDER_COLOR, string_format( _( " Style: %s " ), ma.name ) ); + draw_scrollbar( w, selected, height, iLines, 1, 0, BORDER_COLOR, true ); + wrefresh( w ); + catacurses::refresh(); + + std::string action = ict.handle_input(); + + if( action == "QUIT" ) { + break; + } else if( action == "DOWN" ) { + selected++; + } else if( action == "UP" ) { + selected--; + } + } while( true ); + menu->redraw(); } return true; diff --git a/src/martialarts.h b/src/martialarts.h index 27ef1a0043a2c..be82de8e92c17 100644 --- a/src/martialarts.h +++ b/src/martialarts.h @@ -73,6 +73,7 @@ class ma_technique std::string name; std::string description; + std::string get_description() const; std::string goal; // the melee goal this achieves From e8e61b4583f4bb4901d04842424bbb5f5ede6354 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Wed, 17 Oct 2018 18:12:07 +0200 Subject: [PATCH 15/59] Fix old "_mult" entries --- data/json/techniques.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/data/json/techniques.json b/data/json/techniques.json index 1f352ab07218c..3c7d13aed9230 100644 --- a/data/json/techniques.json +++ b/data/json/techniques.json @@ -248,7 +248,7 @@ "You throw a heavy cross at %s", " throws a cross at %s" ], - "bash_mult" : 1.2, + "mult_bonuses" : [["damage", "bash", 1.2]], "description" : "x1.2 bash damage, min 2 unarmed" },{ "type" : "technique", @@ -278,7 +278,7 @@ "You uppercut %s", " uppercuts %s" ], - "bash_mult" : 1.4, + "mult_bonuses" : [["damage", "bash", 1.4]], "stun_dur" : 2, "description" : "Stun 2 turns, x1.4 bash damage, min 4 unarmed" },{ @@ -460,7 +460,7 @@ "You elbow %s", " elbows %s" ], - "movecost_mult" : 0.5, + "mult_bonuses" : [["movecost", 0.5]], "description" : "50% moves, crit only, min 2 unarmed" },{ "type" : "technique", @@ -578,8 +578,10 @@ " surprise attacks %s" ], "stun_dur" : 2, - "bash_mult" : 1.4, - "cut_mult" : 2, + "mult_bonuses" : [ + ["damage", "bash", 1.4], + ["damage", "cut", 2] + ], "description" : "Stun 2 turns, x1.4 bash damage, x2 cut damage, crit only, min 3 unarmed, min 3 melee" },{ "type" : "technique", @@ -671,8 +673,10 @@ "name" : "biojutsu impale", "min_melee" : 3, "crit_tec" : true, - "cut_mult" : 1.5, - "bash_mult" : 1.5, + "mult_bonuses" : [ + ["damage", "bash", 1.5], + ["damage", "cut", 1.5] + ], "messages" : [ "You brutally impale %s", " brutally impales %s" @@ -1002,9 +1006,7 @@ "crit_tec" : true, "stun_dur" : 3, "knockback_dist" : 3, - "mult_bonuses" : [ - ["damage", "bash", 2] - ], + "mult_bonuses" : [["damage", "bash", 2]], "messages" : [ "Your Stinger Kick sends %s flying", "'s Stinger Kick sends %s flying" @@ -1016,9 +1018,7 @@ "name" : "Pincer Strike", "min_unarmed" : 4, "unarmed_allowed" : true, - "mult_bonuses" : [ - ["damage", "bash", 1.25] - ], + "mult_bonuses" : [["damage", "bash", 1.25]], "messages" : [ "You punch %s with your Pincer Fist", " jabs %s with a Pincer Fist" @@ -1176,7 +1176,7 @@ "min_unarmed" : 4, "unarmed_allowed" : true, "stun_dur" : 2, - "bash_mult" : 1.2, + "mult_bonuses" : [["damage", "bash", 1.2]], "messages" : [ "You grab and knee %s", " grabs and knees %s" From ce102991417f6467520d14a8386f60b46e27c1c3 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Wed, 17 Oct 2018 23:12:23 +0200 Subject: [PATCH 16/59] Bonus and buff descriptions --- src/bonuses.cpp | 72 +++++++++++++++++++----- src/martialarts.cpp | 134 ++++++++++++++++++++++++++++++++++---------- src/martialarts.h | 3 + 3 files changed, 165 insertions(+), 44 deletions(-) diff --git a/src/bonuses.cpp b/src/bonuses.cpp index 710028107c19f..c4af7b665ef0a 100644 --- a/src/bonuses.cpp +++ b/src/bonuses.cpp @@ -3,6 +3,9 @@ #include "json.h" #include "character.h" #include "debug.h" +#include "translations.h" +#include "output.h" + #include #include #include @@ -34,7 +37,7 @@ static const std::map scaling_stat_map = {{ std::make_pair( "str", STAT_STR ), std::make_pair( "dex", STAT_DEX ), std::make_pair( "int", STAT_INT ), - std::make_pair( "per", STAT_PER ) + std::make_pair( "per", STAT_PER ), } }; @@ -59,15 +62,15 @@ affected_stat affected_stat_from_string( const std::string &s ) } static const std::map affected_stat_map_translation = {{ - std::make_pair( AFFECTED_HIT, "To hit" ), - std::make_pair( AFFECTED_DODGE, "Dodge" ), - std::make_pair( AFFECTED_BLOCK, "Block" ), - std::make_pair( AFFECTED_SPEED, "Speed" ), - std::make_pair( AFFECTED_MOVE_COST, "Move cost" ), - std::make_pair( AFFECTED_DAMAGE, "damage" ), - std::make_pair( AFFECTED_ARMOR, "Armor" ), - std::make_pair( AFFECTED_ARMOR_PENETRATION, "Armor pen" ), - std::make_pair( AFFECTED_TARGET_ARMOR_MULTIPLIER, "Target armor multiplier" ) + std::make_pair( AFFECTED_HIT, translate_marker( "Accuracy" ) ), + std::make_pair( AFFECTED_DODGE, translate_marker( "Dodge" ) ), + std::make_pair( AFFECTED_BLOCK, translate_marker( "Block" ) ), + std::make_pair( AFFECTED_SPEED, translate_marker( "Speed" ) ), + std::make_pair( AFFECTED_MOVE_COST, translate_marker( "Move cost" ) ), + std::make_pair( AFFECTED_DAMAGE, translate_marker( "damage" ) ), + std::make_pair( AFFECTED_ARMOR, translate_marker( "Armor" ) ), + std::make_pair( AFFECTED_ARMOR_PENETRATION, translate_marker( "Armor pen" ) ), + std::make_pair( AFFECTED_TARGET_ARMOR_MULTIPLIER, translate_marker( "Target armor multiplier" ) ), } }; @@ -77,6 +80,20 @@ std::string string_from_affected_stat( const affected_stat &s ) return iter != affected_stat_map_translation.end() ? iter->second : ""; } +static const std::map scaling_stat_map_translation = {{ + std::make_pair( STAT_STR, translate_marker( "strength" ) ), + std::make_pair( STAT_DEX, translate_marker( "dexterity" ) ), + std::make_pair( STAT_INT, translate_marker( "intelligence" ) ), + std::make_pair( STAT_PER, translate_marker( "perception" ) ), + } +}; + +std::string string_from_scaling_stat( const scaling_stat &s ) +{ + const auto &iter = scaling_stat_map_translation.find( s ); + return iter != scaling_stat_map_translation.end() ? iter->second : ""; +} + bonus_container::bonus_container() { } @@ -212,8 +229,20 @@ std::string bonus_container::get_description() const type = name_by_dt( boni.first.get_damage_type() ) + " " + type; } - dump << type << ": " - << static_cast( boni.second[0].scale * 100 ) << "% "; + dump << enumerate_as_string( boni.second.begin(), + boni.second.end(), [&type]( const effect_scaling & sf ) { + std::stringstream temp; + + temp << string_format( "%s: %d%%", type, static_cast( sf.scale * 100 ) ); + + if( sf.stat ) { + temp << _( " of " ) << string_from_scaling_stat( sf.stat ); + } + + return temp.str(); + } ); + + dump << std::endl; } for( const auto &boni : bonuses_flat ) { @@ -223,8 +252,23 @@ std::string bonus_container::get_description() const type = name_by_dt( boni.first.get_damage_type() ) + " " + type; } - dump << type << ": +" - << static_cast( boni.second[0].scale ) << " "; + dump << enumerate_as_string( boni.second.begin(), + boni.second.end(), [&type]( const effect_scaling & sf ) { + std::stringstream temp; + + if( sf.stat ) { + temp << string_format( "%s: %s%d%%", type, ( sf.scale < 0 ) ? "" : "+", + static_cast( sf.scale * 100 ) ); + temp << _( " of " ) << string_from_scaling_stat( sf.stat ); + } else { + temp << string_format( "%s: %s%d", type, ( sf.scale < 0 ) ? "" : "+", + static_cast( sf.scale ) ); + } + + return temp.str(); + } ); + + dump << std::endl; } return dump.str(); diff --git a/src/martialarts.cpp b/src/martialarts.cpp index d4416d822c86e..279cdff61d287 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -367,6 +367,41 @@ bool ma_requirements::is_valid_weapon( const item &i ) const return true; } +std::string ma_requirements::get_description() const +{ + std::stringstream dump; + + if( std::any_of( min_skill.begin(), min_skill.end(), []( const std::pair &pr ) { + return pr.second > 0; +} ) ) { + dump << string_format( _( "%s required: " ), + ngettext( "Skill", "Skills", min_skill.size() ) ); + + dump << enumerate_as_string( min_skill.begin(), + min_skill.end(), []( const std::pair &pr ) { + return string_format( "%s: %d", pr.first->name(), pr.second ); + } ) << std::endl; + } + + if( req_buffs.size() ) { + dump << string_format( _( "Requires: " ) ); + + dump << enumerate_as_string( req_buffs.begin(), req_buffs.end(), []( const mabuff_id & bid ) { + return bid->name; + } ) << std::endl; + } + + if( unarmed_allowed && melee_allowed ) { + dump << _( "* Can eighter be used while armed or unarmed" ) << std::endl; + } else if( unarmed_allowed ) { + dump << _( "* Can only be used while unarmed" ) << std::endl; + } else if( melee_allowed ) { + dump << _( "* Can only be used while armed" ) << std::endl; + } + + return dump.str(); +} + ma_technique::ma_technique() { crit_tec = false; @@ -477,6 +512,47 @@ bool ma_buff::can_melee() const return melee_allowed; } +std::string ma_buff::get_description() const +{ + std::stringstream dump; + dump << string_format( _( "Buff technique: %s" ), name ) << std::endl; + + dump << reqs.get_description(); + + std::string temp = bonuses.get_description(); + if( !temp.empty() ) { + dump << string_format( _( "%s: " ), + ngettext( "Bonus", "Bonus/stack", max_stacks ) ) << temp << std::endl; + } + + if( max_stacks > 1 ) { + dump << string_format( _( "* Will stack up to +%d times" ), + max_stacks ) << std::endl; + } + + const int turns = to_turns( buff_duration ); + if( turns ) { + dump << string_format( _( "* Will last for %d %s" ), + turns, ngettext( "turn", "turns", turns ) ) << std::endl; + } + + if( dodges_bonus ) { + dump << string_format( _( "* Grants a +%s bonus to dodge%s" ), + dodges_bonus, ngettext( "", " per stack", max_stacks ) ) << std::endl; + } + + if( blocks_bonus ) { + dump << string_format( _( "* Grants a +%s bonus to block%s" ), + blocks_bonus, ngettext( "", " per stack", max_stacks ) ) << std::endl; + } + + if( quiet ) { + dump << _( "* Attacks will be completely silent" ) << std::endl; + } + + return dump.str(); +} + martialart::martialart() { leg_block = -1; @@ -848,34 +924,14 @@ std::string ma_technique::get_description() const { std::stringstream dump; - dump << string_format( _( " Type: %s" ), - defensive ? "defensive" : "offensive" ) << std::endl; - - if( std::any_of( reqs.min_skill.begin(), - reqs.min_skill.end(), []( const std::pair &pr ) { - return pr.second > 0; -} ) ) { - dump << string_format( _( "%s required:" ), - ngettext( "Skill", "Skills", reqs.min_skill.size() ) ); + dump << string_format( _( "Type: %s" ), + defensive ? _( "defensive" ) : _( "offensive" ) ) << std::endl; - for( const auto &pr : reqs.min_skill ) { - dump << string_format( " %s: %d ", pr.first->name(), pr.second ); - } - - dump << std::endl; - } + dump << reqs.get_description(); std::string temp = bonuses.get_description(); if( !temp.empty() ) { - dump << _( "Boni: " ) << temp << std::endl; - } - - if( reqs.unarmed_allowed && reqs.melee_allowed ) { - dump << _( "* Can eighter be used while armed or unarmed" ) << std::endl; - } else if( reqs.unarmed_allowed ) { - dump << _( "* Can only be used while unarmed" ) << std::endl; - } else if( reqs.melee_allowed ) { - dump << _( "* Can only be used while armed" ) << std::endl; + dump << _( "Bonus: " ) << temp << std::endl; } if( crit_tec ) { @@ -891,11 +947,11 @@ std::string ma_technique::get_description() const } if( miss_recovery ) { - dump << _( "* Will grant a free recovery from a miss" ) << std::endl; + dump << _( "* Will grant free recovery from a miss" ) << std::endl; } if( grab_break ) { - dump << _( "* Will break a grab" ) << std::endl; + dump << _( "* Will break a grab" ) << std::endl; } if( aoe == "wide" ) { @@ -946,12 +1002,30 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event if( !style_selected.str().empty() ) { const martialart &ma = style_selected.obj(); std::ostringstream buffer; - if( !ma.techniques.empty() ) { - for( const auto &tech : ma.techniques ) { - buffer << string_format( _( "Technique:
%s
" ), tech.obj().name ); - buffer << tech.obj().get_description() << std::endl << "--" << std::endl; + + auto buff_desc = [&]( const std::string & title, const std::vector &buffs ) { + if( !buffs.empty() ) { + buffer << string_format( _( "
%s buffs:
" ), title ) << std::endl; + for( const auto &buff : buffs ) { + buffer << buff->get_description(); + } + buffer << std::endl << "--" << std::endl; } + }; + + buff_desc( _( "Static" ), ma.static_buffs ); + buff_desc( _( "Move" ), ma.onmove_buffs ); + buff_desc( _( "Hit" ), ma.onhit_buffs ); + buff_desc( _( "Attack" ), ma.onattack_buffs ); + buff_desc( _( "Dodge" ), ma.ondodge_buffs ); + buff_desc( _( "Block" ), ma.onblock_buffs ); + buff_desc( _( "Get hit" ), ma.ongethit_buffs ); + + for( const auto &tech : ma.techniques ) { + buffer << string_format( _( "
Technique:
%s " ), tech.obj().name ); + buffer << tech.obj().get_description() << std::endl << "--" << std::endl; } + if( ma.force_unarmed ) { buffer << std::endl << std::endl; buffer << _( "This style forces you to use unarmed strikes, even if wielding a weapon." ); diff --git a/src/martialarts.h b/src/martialarts.h index be82de8e92c17..0ea82465ecd9b 100644 --- a/src/martialarts.h +++ b/src/martialarts.h @@ -55,6 +55,8 @@ struct ma_requirements { strictly_unarmed = false; } + std::string get_description() const; + bool is_valid_player( const player &u ) const; bool is_valid_weapon( const item &i ) const; @@ -163,6 +165,7 @@ class ma_buff bool was_loaded = false; std::string name; std::string description; + std::string get_description() const; ma_requirements reqs; From a4606930b15c6e771d480a7efcbb34172fde2fa7 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Wed, 17 Oct 2018 23:55:35 +0200 Subject: [PATCH 17/59] Fixes --- src/bonuses.cpp | 8 ++++---- src/martialarts.cpp | 33 ++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/bonuses.cpp b/src/bonuses.cpp index c4af7b665ef0a..37d6fd59bb174 100644 --- a/src/bonuses.cpp +++ b/src/bonuses.cpp @@ -239,10 +239,10 @@ std::string bonus_container::get_description() const temp << _( " of " ) << string_from_scaling_stat( sf.stat ); } + temp << " "; + return temp.str(); } ); - - dump << std::endl; } for( const auto &boni : bonuses_flat ) { @@ -265,10 +265,10 @@ std::string bonus_container::get_description() const static_cast( sf.scale ) ); } + temp << " "; + return temp.str(); } ); - - dump << std::endl; } return dump.str(); diff --git a/src/martialarts.cpp b/src/martialarts.cpp index 279cdff61d287..a4c27c27b56b3 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -536,13 +536,19 @@ std::string ma_buff::get_description() const turns, ngettext( "turn", "turns", turns ) ) << std::endl; } - if( dodges_bonus ) { - dump << string_format( _( "* Grants a +%s bonus to dodge%s" ), + if( dodges_bonus > 0 ) { + dump << string_format( _( "* Will give a +%s bonus to dodge%s" ), + dodges_bonus, ngettext( "", " per stack", max_stacks ) ) << std::endl; + } else if( dodges_bonus < 0 ) { + dump << string_format( _( "* Will give a %s penalty to dodge%s" ), dodges_bonus, ngettext( "", " per stack", max_stacks ) ) << std::endl; } - if( blocks_bonus ) { - dump << string_format( _( "* Grants a +%s bonus to block%s" ), + if( blocks_bonus > 0 ) { + dump << string_format( _( "* Will give a +%s bonus to block%s" ), + blocks_bonus, ngettext( "", " per stack", max_stacks ) ) << std::endl; + } else if( blocks_bonus < 0 ) { + dump << string_format( _( "* Will give a %s penalty to block%s" ), blocks_bonus, ngettext( "", " per stack", max_stacks ) ) << std::endl; } @@ -1001,19 +1007,25 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event } if( !style_selected.str().empty() ) { const martialart &ma = style_selected.obj(); + std::ostringstream buffer; + if( ma.force_unarmed ) { + buffer << _( "This style forces you to use unarmed strikes, even if wielding a weapon." ); + buffer << std::endl << "--" << std::endl; + } + auto buff_desc = [&]( const std::string & title, const std::vector &buffs ) { if( !buffs.empty() ) { - buffer << string_format( _( "
%s buffs:
" ), title ) << std::endl; + buffer << string_format( _( "
%s buffs:
" ), title ); for( const auto &buff : buffs ) { - buffer << buff->get_description(); + buffer << std::endl << buff->get_description() ; } buffer << std::endl << "--" << std::endl; } }; - buff_desc( _( "Static" ), ma.static_buffs ); + buff_desc( _( "Passive" ), ma.static_buffs ); buff_desc( _( "Move" ), ma.onmove_buffs ); buff_desc( _( "Hit" ), ma.onhit_buffs ); buff_desc( _( "Attack" ), ma.onattack_buffs ); @@ -1025,14 +1037,9 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event buffer << string_format( _( "
Technique:
%s " ), tech.obj().name ); buffer << tech.obj().get_description() << std::endl << "--" << std::endl; } - - if( ma.force_unarmed ) { - buffer << std::endl << std::endl; - buffer << _( "This style forces you to use unarmed strikes, even if wielding a weapon." ); - } if( !ma.weapons.empty() ) { buffer << std::endl << std::endl; - buffer << ngettext( "Weapon:", "Weapons:", ma.weapons.size() ) << " "; + buffer << ngettext( "Weapon:", "Weapons:", ma.weapons.size() ) << " "; buffer << enumerate_as_string( ma.weapons.begin(), ma.weapons.end(), []( const std::string & wid ) { return item::nname( wid ); } ); From 93df6e20d0db32a02eafe4ac9271ef099e80cc36 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Thu, 18 Oct 2018 09:25:40 +0200 Subject: [PATCH 18/59] Translation and display fixes --- src/bonuses.cpp | 40 +++++++++++++++------------------------- src/martialarts.cpp | 16 +++++++++------- 2 files changed, 24 insertions(+), 32 deletions(-) diff --git a/src/bonuses.cpp b/src/bonuses.cpp index 37d6fd59bb174..9227cdcabc1c4 100644 --- a/src/bonuses.cpp +++ b/src/bonuses.cpp @@ -77,7 +77,7 @@ static const std::map affected_stat_map_translation std::string string_from_affected_stat( const affected_stat &s ) { const auto &iter = affected_stat_map_translation.find( s ); - return iter != affected_stat_map_translation.end() ? iter->second : ""; + return iter != affected_stat_map_translation.end() ? _( iter->second.c_str() ) : ""; } static const std::map scaling_stat_map_translation = {{ @@ -91,7 +91,7 @@ static const std::map scaling_stat_map_translation = std::string string_from_scaling_stat( const scaling_stat &s ) { const auto &iter = scaling_stat_map_translation.find( s ); - return iter != scaling_stat_map_translation.end() ? iter->second : ""; + return iter != scaling_stat_map_translation.end() ? _( iter->second.c_str() ) : ""; } bonus_container::bonus_container() @@ -225,50 +225,40 @@ std::string bonus_container::get_description() const for( const auto &boni : bonuses_mult ) { std::string type = string_from_affected_stat( boni.first.get_stat() ); - if( boni.first.get_stat() == AFFECTED_DAMAGE ) { + if( needs_damage_type( boni.first.get_stat() ) ) { type = name_by_dt( boni.first.get_damage_type() ) + " " + type; } - dump << enumerate_as_string( boni.second.begin(), - boni.second.end(), [&type]( const effect_scaling & sf ) { - std::stringstream temp; - - temp << string_format( "%s: %d%%", type, static_cast( sf.scale * 100 ) ); + for( const auto &sf : boni.second ) { + dump << string_format( "%s: %d%%", type, static_cast( sf.scale * 100 ) ); if( sf.stat ) { - temp << _( " of " ) << string_from_scaling_stat( sf.stat ); + dump << _( " of " ) << string_from_scaling_stat( sf.stat ); } - temp << " "; - - return temp.str(); - } ); + dump << " "; + }; } for( const auto &boni : bonuses_flat ) { std::string type = string_from_affected_stat( boni.first.get_stat() ); - if( boni.first.get_stat() == AFFECTED_DAMAGE ) { + if( needs_damage_type( boni.first.get_stat() ) ) { type = name_by_dt( boni.first.get_damage_type() ) + " " + type; } - dump << enumerate_as_string( boni.second.begin(), - boni.second.end(), [&type]( const effect_scaling & sf ) { - std::stringstream temp; - + for( const auto &sf : boni.second ) { if( sf.stat ) { - temp << string_format( "%s: %s%d%%", type, ( sf.scale < 0 ) ? "" : "+", + dump << string_format( "%s: %s%d%%", type, ( sf.scale < 0 ) ? "" : "+", static_cast( sf.scale * 100 ) ); - temp << _( " of " ) << string_from_scaling_stat( sf.stat ); + dump << _( " of " ) << string_from_scaling_stat( sf.stat ); } else { - temp << string_format( "%s: %s%d", type, ( sf.scale < 0 ) ? "" : "+", + dump << string_format( "%s: %s%d", type, ( sf.scale < 0 ) ? "" : "+", static_cast( sf.scale ) ); } - temp << " "; - - return temp.str(); - } ); + dump << " "; + } } return dump.str(); diff --git a/src/martialarts.cpp b/src/martialarts.cpp index a4c27c27b56b3..0d8a7eed8a9cc 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -380,7 +380,7 @@ std::string ma_requirements::get_description() const dump << enumerate_as_string( min_skill.begin(), min_skill.end(), []( const std::pair &pr ) { return string_format( "%s: %d", pr.first->name(), pr.second ); - } ) << std::endl; + }, false ) << std::endl; } if( req_buffs.size() ) { @@ -388,7 +388,7 @@ std::string ma_requirements::get_description() const dump << enumerate_as_string( req_buffs.begin(), req_buffs.end(), []( const mabuff_id & bid ) { return bid->name; - } ) << std::endl; + }, false ) << std::endl; } if( unarmed_allowed && melee_allowed ) { @@ -516,7 +516,6 @@ std::string ma_buff::get_description() const { std::stringstream dump; dump << string_format( _( "Buff technique: %s" ), name ) << std::endl; - dump << reqs.get_description(); std::string temp = bonuses.get_description(); @@ -526,7 +525,7 @@ std::string ma_buff::get_description() const } if( max_stacks > 1 ) { - dump << string_format( _( "* Will stack up to +%d times" ), + dump << string_format( _( "* Will stack up to %d times" ), max_stacks ) << std::endl; } @@ -990,7 +989,7 @@ std::string ma_technique::get_description() const dump << _( "* Will disarm the target" ) << std::endl; } - return dump.str().empty() ? description : dump.str(); + return dump.str(); } bool ma_style_callback::key( const input_context &ctxt, const input_event &event, int entnum, @@ -1037,6 +1036,7 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event buffer << string_format( _( "
Technique:
%s " ), tech.obj().name ); buffer << tech.obj().get_description() << std::endl << "--" << std::endl; } + if( !ma.weapons.empty() ) { buffer << std::endl << std::endl; buffer << ngettext( "Weapon:", "Weapons:", ma.weapons.size() ) << " "; @@ -1059,6 +1059,8 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event input_context ict; ict.register_action( "UP" ); ict.register_action( "DOWN" ); + ict.register_action( "PAGE_UP" ); + ict.register_action( "PAGE_DOWN" ); ict.register_action( "QUIT" ); do { @@ -1081,9 +1083,9 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event if( action == "QUIT" ) { break; - } else if( action == "DOWN" ) { + } else if( action == "DOWN" || action == "PAGE_DOWN" ) { selected++; - } else if( action == "UP" ) { + } else if( action == "UP" || action == "PAGE_UP" ) { selected--; } } while( true ); From 6c1b795057bae7ff25882a6e5e56a8858c444748 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Thu, 18 Oct 2018 10:45:18 +0200 Subject: [PATCH 19/59] make pretty --- src/martialarts.cpp | 35 +++++++++++++++++++++-------------- src/martialarts.h | 4 ++-- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/martialarts.cpp b/src/martialarts.cpp index 0d8a7eed8a9cc..00f98a57cf4ec 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -367,7 +367,7 @@ bool ma_requirements::is_valid_weapon( const item &i ) const return true; } -std::string ma_requirements::get_description() const +std::string ma_requirements::get_description( bool buff ) const { std::stringstream dump; @@ -391,12 +391,17 @@ std::string ma_requirements::get_description() const }, false ) << std::endl; } + const std::string type = buff ? _( "activate" ) : _( "be used" ); + if( unarmed_allowed && melee_allowed ) { - dump << _( "* Can eighter be used while armed or unarmed" ) << std::endl; + dump << string_format( _( "* Can %s while armed or unarmed" ), + type ) << std::endl; } else if( unarmed_allowed ) { - dump << _( "* Can only be used while unarmed" ) << std::endl; + dump << string_format( _( "* Can only %s while unarmed" ), + type ) << std::endl; } else if( melee_allowed ) { - dump << _( "* Can only be used while armed" ) << std::endl; + dump << string_format( _( "* Can only %s while armed" ), + type ) << std::endl; } return dump.str(); @@ -512,11 +517,10 @@ bool ma_buff::can_melee() const return melee_allowed; } -std::string ma_buff::get_description() const +std::string ma_buff::get_description( bool passive ) const { std::stringstream dump; dump << string_format( _( "Buff technique: %s" ), name ) << std::endl; - dump << reqs.get_description(); std::string temp = bonuses.get_description(); if( !temp.empty() ) { @@ -524,13 +528,15 @@ std::string ma_buff::get_description() const ngettext( "Bonus", "Bonus/stack", max_stacks ) ) << temp << std::endl; } + dump << reqs.get_description( true ); + if( max_stacks > 1 ) { dump << string_format( _( "* Will stack up to %d times" ), max_stacks ) << std::endl; } const int turns = to_turns( buff_duration ); - if( turns ) { + if( !passive && turns ) { dump << string_format( _( "* Will last for %d %s" ), turns, ngettext( "turn", "turns", turns ) ) << std::endl; } @@ -932,13 +938,13 @@ std::string ma_technique::get_description() const dump << string_format( _( "Type: %s" ), defensive ? _( "defensive" ) : _( "offensive" ) ) << std::endl; - dump << reqs.get_description(); - std::string temp = bonuses.get_description(); if( !temp.empty() ) { dump << _( "Bonus: " ) << temp << std::endl; } + dump << reqs.get_description(); + if( crit_tec ) { dump << _( "* Will only activate on a crit" ) << std::endl; } @@ -1014,17 +1020,18 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event buffer << std::endl << "--" << std::endl; } - auto buff_desc = [&]( const std::string & title, const std::vector &buffs ) { + auto buff_desc = [&]( const std::string & title, const std::vector &buffs, + bool passive = false ) { if( !buffs.empty() ) { buffer << string_format( _( "
%s buffs:
" ), title ); for( const auto &buff : buffs ) { - buffer << std::endl << buff->get_description() ; + buffer << std::endl << buff->get_description( passive ) ; } buffer << std::endl << "--" << std::endl; } }; - buff_desc( _( "Passive" ), ma.static_buffs ); + buff_desc( _( "Passive" ), ma.static_buffs, true ); buff_desc( _( "Move" ), ma.onmove_buffs ); buff_desc( _( "Hit" ), ma.onhit_buffs ); buff_desc( _( "Attack" ), ma.onattack_buffs ); @@ -1050,7 +1057,7 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event ( TERMX > FULL_SCREEN_WIDTH ) ? ( TERMX - FULL_SCREEN_WIDTH ) / 2 : 0 ); std::string text = replace_colors( buffer.str() ); - int width = FULL_SCREEN_WIDTH - 2; + int width = FULL_SCREEN_WIDTH - 4; int height = FULL_SCREEN_HEIGHT - 2; const auto vFolded = foldstring( text, width ); int iLines = vFolded.size(); @@ -1073,7 +1080,7 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event } werase( w ); - fold_and_print_from( w, 1, 1, width, selected, c_light_gray, text ); + fold_and_print_from( w, 1, 2, width, selected, c_light_gray, text ); draw_border( w, BORDER_COLOR, string_format( _( " Style: %s " ), ma.name ) ); draw_scrollbar( w, selected, height, iLines, 1, 0, BORDER_COLOR, true ); wrefresh( w ); diff --git a/src/martialarts.h b/src/martialarts.h index 0ea82465ecd9b..81e7fb7500b1f 100644 --- a/src/martialarts.h +++ b/src/martialarts.h @@ -55,7 +55,7 @@ struct ma_requirements { strictly_unarmed = false; } - std::string get_description() const; + std::string get_description( bool buff = false ) const; bool is_valid_player( const player &u ) const; bool is_valid_weapon( const item &i ) const; @@ -165,7 +165,7 @@ class ma_buff bool was_loaded = false; std::string name; std::string description; - std::string get_description() const; + std::string get_description( bool passive = false ) const; ma_requirements reqs; From d726af6383c2f735dc655e602f9d090fa05424d3 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Thu, 18 Oct 2018 17:46:32 +0200 Subject: [PATCH 20/59] Fixes --- src/bonuses.cpp | 2 ++ src/martialarts.cpp | 8 +++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/bonuses.cpp b/src/bonuses.cpp index 9227cdcabc1c4..cbc367f616111 100644 --- a/src/bonuses.cpp +++ b/src/bonuses.cpp @@ -233,6 +233,7 @@ std::string bonus_container::get_description() const dump << string_format( "%s: %d%%", type, static_cast( sf.scale * 100 ) ); if( sf.stat ) { + //~ bash damage +80% of strength dump << _( " of " ) << string_from_scaling_stat( sf.stat ); } @@ -251,6 +252,7 @@ std::string bonus_container::get_description() const if( sf.stat ) { dump << string_format( "%s: %s%d%%", type, ( sf.scale < 0 ) ? "" : "+", static_cast( sf.scale * 100 ) ); + //~ bash damage +80% of strength dump << _( " of " ) << string_from_scaling_stat( sf.stat ); } else { dump << string_format( "%s: %s%d", type, ( sf.scale < 0 ) ? "" : "+", diff --git a/src/martialarts.cpp b/src/martialarts.cpp index 00f98a57cf4ec..ff2c3bb00a4b9 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -966,7 +966,7 @@ std::string ma_technique::get_description() const } if( aoe == "wide" ) { - dump << _( "* Will attack in a wide arc in fron of you" ) << std::endl; + dump << _( "* Will attack in a wide arc in front of you" ) << std::endl; } else if( aoe == "spin" ) { dump << _( "* Will attack adjacent enemies around you" ) << std::endl; @@ -1066,8 +1066,6 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event input_context ict; ict.register_action( "UP" ); ict.register_action( "DOWN" ); - ict.register_action( "PAGE_UP" ); - ict.register_action( "PAGE_DOWN" ); ict.register_action( "QUIT" ); do { @@ -1090,9 +1088,9 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event if( action == "QUIT" ) { break; - } else if( action == "DOWN" || action == "PAGE_DOWN" ) { + } else if( action == "DOWN" ) { selected++; - } else if( action == "UP" || action == "PAGE_UP" ) { + } else if( action == "UP" ) { selected--; } } while( true ); From 0d775797bb3ac6cbd5e750c92c0b991cb3780431 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Thu, 25 Oct 2018 08:58:44 +0200 Subject: [PATCH 21/59] Revert "Added description to all martial art style techniques (except for debug ones)" This reverts commit a4e45d5be7acaf42814ae9b9c244c7b06cb34e9e. # Conflicts: # data/json/techniques.json --- data/json/techniques.json | 261 +++++++++++++------------------------- 1 file changed, 87 insertions(+), 174 deletions(-) diff --git a/data/json/techniques.json b/data/json/techniques.json index 3c7d13aed9230..077197984d784 100644 --- a/data/json/techniques.json +++ b/data/json/techniques.json @@ -204,8 +204,7 @@ "messages" : [ "You counter-attack %s", " counter-attacks %s" - ], - "description" : "Counterattack on block, counterattack on dodge" + ] },{ "type" : "technique", "id" : "tec_feint", @@ -213,8 +212,7 @@ "unarmed_allowed" : true, "melee_allowed" : true, "defensive" : true, - "miss_recovery" : true, - "description" : "Free recovery from a miss" + "miss_recovery" : true },{ "type" : "technique", "id" : "tec_break", @@ -222,8 +220,7 @@ "unarmed_allowed" : true, "melee_allowed" : true, "defensive" : true, - "grab_break" : true, - "description" : "Break a grab" + "grab_break" : true },{ "type" : "technique", "id" : "tec_precise", @@ -236,8 +233,7 @@ "You jab deftly at %s", " jabs deftly at %s" ], - "stun_dur" : 2, - "description" : "Stun 2 turns, crit only" + "stun_dur" : 2 },{ "type" : "technique", "id" : "tec_boxing_cross", @@ -248,8 +244,7 @@ "You throw a heavy cross at %s", " throws a cross at %s" ], - "mult_bonuses" : [["damage", "bash", 1.2]], - "description" : "x1.2 bash damage, min 2 unarmed" + "mult_bonuses" : [["damage", "bash", 1.2]] },{ "type" : "technique", "id" : "tec_boxing_rapid", @@ -265,8 +260,7 @@ ["damage", "bash", 0.66], ["damage", "cut", 0.66], ["damage", "stab", 0.66] - ], - "description" : "50% moves, 66% damage, min 3 unarmed" + ] },{ "type" : "technique", "id" : "tec_boxing_upper", @@ -279,8 +273,7 @@ " uppercuts %s" ], "mult_bonuses" : [["damage", "bash", 1.4]], - "stun_dur" : 2, - "description" : "Stun 2 turns, x1.4 bash damage, min 4 unarmed" + "stun_dur" : 2 },{ "type" : "technique", "id" : "tec_boxing_counter", @@ -298,8 +291,7 @@ " throws a perfect counter at %s" ], "mult_bonuses" : [["movecost", 0.0]], - "stun_dur" : 2, - "description" : "Stun 2 turns, knockback 1 tile, crit only, min 5 unarmed" + "stun_dur" : 2 },{ "type" : "technique", "id" : "tec_karate_rapid", @@ -315,8 +307,7 @@ ["damage", "bash", 0.66], ["damage", "cut", 0.66], ["damage", "stab", 0.66] - ], - "description" : "50% moves, 66% damage" + ] },{ "type" : "technique", "id" : "tec_karate_precise", @@ -328,8 +319,7 @@ "You karate chop %s", " karate chops %s" ], - "stun_dur" : 2, - "description" : "Stun 2 turns, crit only, min 4 unarmed" + "stun_dur" : 2 },{ "type" : "technique", "id" : "tec_aikido_throw", @@ -342,8 +332,7 @@ "messages" : [ "You throw %s", " throws %s" - ], - "description" : "Down 1 turn, knockback 1 tile, min 2 unarmed" + ] },{ "type" : "technique", "id" : "tec_aikido_dodgethrow", @@ -358,8 +347,7 @@ "messages" : [ "You smoothly throw %s", " smoothly throws %s" - ], - "description" : "Down 1 turn, knockback 1 tile, counterattack on dodge, min 6 unarmed" + ] },{ "type" : "technique", "id" : "tec_aikido_feint", @@ -371,8 +359,7 @@ "messages" : [ "You feint at %s", " feints at %s" - ], - "description" : "Free recovery from a miss, min 2 unarmed" + ] },{ "type" : "technique", "id" : "tec_aikido_disarm", @@ -383,8 +370,7 @@ "messages" : [ "You disarm %s", " disarms %s" - ], - "description" : "Unwield target's weapon, min 3 unarmed" + ] },{ "type" : "technique", "id" : "tec_judo_throw", @@ -397,8 +383,7 @@ "messages" : [ "You throw %s", " throws %s" - ], - "description" : "Down 1 turn, knockback 1 tile, min 3 unarmed" + ] },{ "type" : "technique", "id" : "tec_judo_grab", @@ -409,8 +394,7 @@ "messages" : [ "You grab %s", " grabs %s" - ], - "description" : "Down 2 turns, min 2 unarmed" + ] },{ "type" : "technique", "id" : "tec_taichi_disarm", @@ -421,8 +405,7 @@ "messages" : [ "You disarm %s", " disarms %s" - ], - "description" : "Unwield target's weapon, min 3 unarmed" + ] },{ "type" : "technique", "id" : "tec_taichi_precise", @@ -434,8 +417,7 @@ "messages" : [ "You strike %s", " strikes %s" - ], - "description" : "Stun 2 turns, crit only, min 4 unarmed" + ] },{ "type" : "technique", "id" : "tec_capoeira_feint", @@ -447,8 +429,7 @@ "messages" : [ "You feint at %s", " feints at %s" - ], - "description" : "Free recovery from a miss, min 1 unarmed" + ] },{ "type" : "technique", "id" : "tec_muay_thai_elbow", @@ -460,8 +441,7 @@ "You elbow %s", " elbows %s" ], - "mult_bonuses" : [["movecost", 0.5]], - "description" : "50% moves, crit only, min 2 unarmed" + "mult_bonuses" : [["movecost", 0.5]] },{ "type" : "technique", "id" : "tec_muay_thai_kick", @@ -472,8 +452,7 @@ "You power-kick %s", " power-kicks %s" ], - "stun_dur" : 1, - "description" : "Stun 1 turn, min 3 unarmed" + "stun_dur" : 1 },{ "type" : "technique", "id" : "tec_muay_thai_knee", @@ -485,8 +464,7 @@ "You flying knee %s", " flying knees %s" ], - "stun_dur" : 2, - "description" : "Stun 2 turns, crit only, min 4 unarmed" + "stun_dur" : 2 },{ "type" : "technique", "id" : "tec_krav_maga_rapid", @@ -502,8 +480,7 @@ ["damage", "bash", 0.66], ["damage", "cut", 0.66], ["damage", "stab", 0.66] - ], - "description" : "50% moves, 66% damage, min 2 unarmed" + ] },{ "type" : "technique", "id" : "tec_krav_maga_feint", @@ -515,8 +492,7 @@ "messages" : [ "You feint at %s", " feints at %s" - ], - "description" : "Free recovery from a miss, min 2 unarmed" + ] },{ "type" : "technique", "id" : "tec_krav_maga_precise", @@ -528,8 +504,7 @@ "You jab %s", " jabs %s" ], - "stun_dur" : 2, - "description" : "Stun 2 turns, crit only, min 3 unarmed" + "stun_dur" : 2 },{ "type" : "technique", "id" : "tec_krav_maga_disarm", @@ -540,8 +515,7 @@ "messages" : [ "You disarm %s", " disarms %s" - ], - "description" : "Unwield target's weapon, min 3 unarmed" + ] },{ "type" : "technique", "id" : "tec_krav_maga_grab", @@ -552,8 +526,7 @@ "messages" : [ "You grab %s", " grabs %s" - ], - "description" : "Down 1 turn, min 4 unarmed" + ] },{ "type" : "technique", "id" : "tec_krav_maga_break", @@ -562,8 +535,7 @@ "unarmed_allowed" : true, "melee_allowed" : true, "defensive" : true, - "grab_break" : true, - "description" : "Break a grab, min 4 unarmed" + "grab_break" : true },{ "type" : "technique", "id" : "tec_ninjutsu_precise", @@ -581,8 +553,7 @@ "mult_bonuses" : [ ["damage", "bash", 1.4], ["damage", "cut", 2] - ], - "description" : "Stun 2 turns, x1.4 bash damage, x2 cut damage, crit only, min 3 unarmed, min 3 melee" + ] },{ "type" : "technique", "id" : "tec_taekwondo_precise", @@ -594,8 +565,7 @@ "messages" : [ "You axe-kick %s", " axe-kicks %s" - ], - "description" : "Stun 2 turns, crit only, min 2 unarmed" + ] },{ "type" : "technique", "id" : "tec_taekwondo_push", @@ -607,8 +577,7 @@ " side-kicks %s" ], "stun_dur" : 1, - "knockback_dist" : 1, - "description" : "Stun 1 turn, knockback 1 tile, min 3 unarmed" + "knockback_dist" : 1 },{ "type" : "technique", "id" : "tec_taekwondo_sweep", @@ -619,8 +588,7 @@ "You sweep-kick %s", " sweep-kicks %s" ], - "down_dur" : 2, - "description" : "Down 2 turns, min 4 unarmed" + "down_dur" : 2 },{ "type" : "technique", "id" : "tec_biojutsu_counter", @@ -632,8 +600,7 @@ "messages" : [ "You block and counter-attack %s", " blocks and counter-attacks %s" - ], - "description" : "Counterattack on block, min 4 melee" + ] },{ "type" : "technique", "id" : "tec_biojutsu_rapid_unarmed", @@ -649,8 +616,7 @@ ["damage", "bash", 0.66], ["damage", "cut", 0.66], ["damage", "stab", 0.66] - ], - "description" : "50% moves, 66% damage" + ] },{ "type" : "technique", "id" : "tec_biojutsu_rapid_armed", @@ -665,8 +631,7 @@ ["damage", "bash", 0.66], ["damage", "cut", 0.66], ["damage", "stab", 0.66] - ], - "description" : "50% moves, 66% damage" + ] },{ "type" : "technique", "id" : "tec_biojutsu_impale", @@ -681,8 +646,7 @@ "You brutally impale %s", " brutally impales %s" ], - "stun_dur" : 1, - "description" : "Stun 1 turn, x1.5 cut damage, x1.5 bash damage, crit only, min 3 melee" + "stun_dur" : 1 },{ "type" : "technique", "id" : "tec_biojutsu_sweep", @@ -693,8 +657,7 @@ "You sweep-kick %s", " sweep-kicks %s" ], - "down_dur" : 2, - "description" : "Down 2 turns, min 2 melee" + "down_dur" : 2 },{ "type" : "technique", "id" : "tec_biojutsu_wide", @@ -705,8 +668,7 @@ "You cleave through %s", " cleave through %s" ], - "aoe" : "wide", - "description" : "Attack in a wide arc, crit only, min 5 melee" + "aoe" : "wide" },{ "type" : "technique", "id" : "tec_zuiquan_feint", @@ -718,8 +680,7 @@ "messages" : [ "You stumble and leer at %s", " stumbles and leers at %s" - ], - "description" : "Free recovery from a miss, min 3 unarmed" + ] },{ "type" : "technique", "id" : "tec_zuiquan_counter", @@ -734,8 +695,7 @@ "messages" : [ "You lurch, and your wild swing hits %s", " lurches, and hits %s" - ], - "description" : "x1.25 bash damage, counterattack on dodge, min 4 unarmed" + ] },{ "type" : "technique", "id" : "tec_fencing_lunge", @@ -746,8 +706,7 @@ "messages" : [ "You lunge at %s", " lunges at %s" - ], - "description" : "75% moves, min 2 melee" + ] },{ "type" : "technique", "id" : "tec_fencing_thrust", @@ -761,8 +720,7 @@ "messages" : [ "You thrust at %s", " thrust at %s" - ], - "description" : "90% moves, x1.25 stab damage, min 1 melee" + ] },{ "type" : "technique", "id" : "tec_fencing_stop_thrust", @@ -777,8 +735,7 @@ "messages" : [ "You deliver a perfect stop thrust to %s", " delivers a perfect stop thrust to %s" - ], - "description" : "x1.5 stab damage, stun 1 turn, counterattack on block, min 3 melee" + ] },{ "type" : "technique", "id" : "tec_eskrima_round", @@ -788,8 +745,7 @@ "messages" : [ "You round strike %s", " round strikes %s" - ], - "description" : "60% moves, min 4 melee" + ] },{ "type" : "technique", "id" : "tec_eskrima_fan", @@ -799,8 +755,7 @@ "messages" : [ "You fan strike %s", " fan strikes %s" - ], - "description" : "75% moves, min 2 melee" + ] },{ "type" : "technique", "id" : "tec_eskrima_snap", @@ -810,8 +765,7 @@ "messages" : [ "You snap out at %s", " snaps quickly at %s" - ], - "description" : "80% moves" + ] },{ "type" : "technique", "id" : "tec_eskrima_combination", @@ -829,8 +783,7 @@ "messages" : [ "You combination strike %s", " combination strikes %s" - ], - "description" : "80% moves, 150% damage, min 2 melee" + ] },{ "type" : "technique", "id" : "tec_eskrima_free", @@ -843,8 +796,7 @@ "messages" : [ "You whip a free strike onto %s", " free strikes %s" - ], - "description" : "Free strike, min 4 melee" + ] },{ "type" : "technique", "id" : "tec_eskrima_puno", @@ -861,8 +813,7 @@ "messages" : [ "You deliver a puño to %s", " haftstrikes %s" - ], - "description" : "Converts all damage into x4 bashing damage, stun 1 turn, min 3 melee, min 2 points of bashing damage delivered" + ] },{ "type" : "technique", "id" : "tec_eskrima_kick", @@ -873,8 +824,7 @@ "messages" : [ "You deliver a knee strike to %s", " knees %s" - ], - "description" : "Down 2 turns, crit only, min 3 unarmed" + ] },{ "type" : "technique", "id" : "tec_silat_hamstring", @@ -885,8 +835,7 @@ "messages" : [ "You ground %s with a low blow", " grounds %s with a low blow" - ], - "description" : "Down 3 turns, crit only, min 2 melee" + ] },{ "type" : "technique", "id" : "tec_silat_precise", @@ -901,8 +850,7 @@ "messages" : [ "You viciously wound %s", " viciously wounds %s" - ], - "description" : "150% damage, crit only, min 4 melee" + ] },{ "type" : "technique", "id" : "tec_silat_brutal", @@ -914,8 +862,7 @@ "messages" : [ "You send %s reeling backwards", " sends %s reeling" - ], - "description" : "Stun 1 turn, knockback 1 tile, crit only, min 3 melee" + ] },{ "type" : "technique", "id" : "tec_silat_dirty", @@ -929,8 +876,7 @@ "messages" : [ "You hit %s with a dirty blow", " delivers a dirty blow to %s" - ], - "description" : "Stun 2 turns, crit only, min 1 melee" + ] },{ "type" : "technique", "id" : "tec_venom_snake_feint", @@ -942,8 +888,7 @@ "messages" : [ "You hiss threateningly at %s", " hisses threateningly at %s" - ], - "description" : "Free recovery from a miss" + ] },{ "type" : "technique", "id" : "tec_venom_snake_rapid", @@ -959,8 +904,7 @@ "messages" : [ "You quickly chop %s", " quickly chops %s" - ], - "description" : "50% moves, 66% damage, min 3 unarmed" + ] },{ "type" : "technique", "id" : "tec_venom_snake_bite", @@ -973,8 +917,7 @@ "messages" : [ "You Snakebite %s", " Snakebites %s" - ], - "description" : "Stun 2 turns, x1.5 bash damage, 2 turns duration" + ] },{ "type" : "technique", "id" : "tec_venom_snake_strike", @@ -987,8 +930,7 @@ "messages" : [ "You Viper Strike %s", " Viper Strikes %s" - ], - "description" : "x3 bash damage, 2 turns duration" + ] },{ "type" : "technique", "id" : "tec_venom_snake_break", @@ -996,8 +938,7 @@ "unarmed_allowed" : true, "melee_allowed" : true, "defensive" : true, - "grab_break" : true, - "description" : "Break a grab" + "grab_break" : true },{ "type" : "technique", "id" : "tec_scorpion_brutal", @@ -1010,8 +951,7 @@ "messages" : [ "Your Stinger Kick sends %s flying", "'s Stinger Kick sends %s flying" - ], - "description" : "Stun 3 turns, knockback 3 tiles, x2 bash damage, crit only" + ] },{ "type" : "technique", "id" : "tec_scorpion_precise", @@ -1023,8 +963,7 @@ "You punch %s with your Pincer Fist", " jabs %s with a Pincer Fist" ], - "stun_dur" : 2, - "description" : "x1.25 bash damage, stun 2 turns, min 4 unarmed" + "stun_dur" : 2 },{ "type" : "technique", "id" : "tec_toad_grab", @@ -1036,8 +975,7 @@ "messages" : [ "You snatch and slug %s", " snatches and slug %s" - ], - "description" : "50% moves, down 1 turn, min 4 unarmed" + ] },{ "type" : "technique", "id" : "tec_centipede_rapid", @@ -1053,8 +991,7 @@ "messages" : [ "You swiftly hit %s", " swiftly hits %s" - ], - "description" : "50% moves, 66% damage, min 2 unarmed" + ] },{ "type" : "technique", "id" : "tec_snake_rapid", @@ -1070,8 +1007,7 @@ "messages" : [ "You swiftly jab %s", " swiftly jabs %s" - ], - "description" : "50% moves, 66% damage, min 2 unarmed" + ] },{ "type" : "technique", "id" : "tec_snake_feint", @@ -1083,8 +1019,7 @@ "messages" : [ "You make serpentine hand motions at %s", " makes serpentine hand motions at %s" - ], - "description" : "Free recovery from a miss, min 3 unarmed" + ] },{ "type" : "technique", "id" : "tec_snake_break", @@ -1096,8 +1031,7 @@ "messages" : [ "You slither free", " slithers free" - ], - "description" : "Break a grab, min 4 unarmed" + ] },{ "type" : "technique", "id" : "tec_snake_precise", @@ -1109,8 +1043,7 @@ "You strike out at %s", " strikes out at %s" ], - "stun_dur" : 2, - "description" : "Stun 2 turns, crit only, min 4 unarmed" + "stun_dur" : 2 },{ "type" : "technique", "id" : "tec_tiger_grab", @@ -1121,8 +1054,7 @@ "messages" : [ "You grab and ground %s", " grabs and grounds %s" - ], - "description" : "Down 1 turns, min 4 unarmed" + ] },{ "type" : "technique", "id" : "tec_leopard_precise", @@ -1134,8 +1066,7 @@ "You strike out at %s with your Leopard Fist", " strikes out at %s with a Leopard Fist" ], - "stun_dur" : 2, - "description" : "Stun 2 turns, crit only, min 5 unarmed" + "stun_dur" : 2 },{ "type" : "technique", "id" : "tec_leopard_rapid", @@ -1151,8 +1082,7 @@ "messages" : [ "You quickly swipe at %s", " quickly swipes at %s" - ], - "description" : "50% moves, 66% damage, min 2 unarmed" + ] },{ "type" : "technique", "id" : "tec_leopard_counter", @@ -1167,8 +1097,7 @@ "messages" : [ "You dodge the attack and swipe at %s's exposed flank", " dodges and catches %s exposed" - ], - "description" : "x1.5 bash damage, counterattack on dodge, min 4 unarmed" + ] },{ "type" : "technique", "id" : "tec_dragon_grab", @@ -1180,8 +1109,7 @@ "messages" : [ "You grab and knee %s", " grabs and knees %s" - ], - "description" : "Stun 2 turns, x1.2 bash damage, min 4 unarmed" + ] },{ "type" : "technique", "id" : "tec_dragon_counter", @@ -1195,8 +1123,7 @@ "messages" : [ "You catch the attack and send %s spinning", " catches and spins %s" - ], - "description" : "Stun 2 turns, counterattack on dodge, counterattack on block, min 4 unarmed" + ] },{ "type" : "technique", "id" : "tec_dragon_sweep", @@ -1207,8 +1134,7 @@ "messages" : [ "You low-roundhouse %s 's legs", " low-roundhouses %s 's legs" - ], - "description" : "Down 2 turns, min 5 unarmed" + ] },{ "type" : "technique", "id" : "tec_dragon_brutal", @@ -1221,8 +1147,7 @@ "messages" : [ "You send %s reeling with a Dragon Strike", " sends %s reeling with a Dragon Strike" - ], - "description" : "Stun 1 turn, knockback 1 tile, crit only, min 6 unarmed" + ] },{ "type" : "technique", "id" : "tec_crane_feint", @@ -1234,8 +1159,7 @@ "messages" : [ "You raise your arms intimidatingly", " performs the Crane Wing" - ], - "description" : "Free recovery from a miss, min 2 unarmed" + ] },{ "type" : "technique", "id" : "tec_crane_break", @@ -1247,8 +1171,7 @@ "messages" : [ "You swing your arms and break free", " flaps free" - ], - "description" : "Break a grab, min 3 unarmed" + ] },{ "type" : "technique", "id" : "tec_crane_precise", @@ -1260,8 +1183,7 @@ "You hand-peck %s", " hand-pecks %s" ], - "stun_dur" : 3, - "description" : "Stun 3 turns, crit only, min 4 unarmed" + "stun_dur" : 3 },{ "type" : "technique", "id" : "tec_brawl_feint", @@ -1274,8 +1196,7 @@ "messages" : [ "You fake a strike at %s", " feints at %s" - ], - "description" : "Free recovery from a miss, min 3 unarmed" + ] },{ "type" : "technique", "id" : "tec_brawl_power", @@ -1289,8 +1210,7 @@ "messages" : [ "You send %s reeling", " sends %s reeling" - ], - "description" : "Stun 1 turn, knockback 1 tile, crit only, min 4 unarmed" + ] },{ "type" : "technique", "id" : "tec_brawl_counter", @@ -1302,8 +1222,7 @@ "messages" : [ "You catch %s's attack, and hit back", " catches %s, and counters" - ], - "description" : "Counterattack on block, min 5 unarmed" + ] },{ "type" : "technique", "id" : "tec_brawl_trip", @@ -1314,8 +1233,7 @@ "messages" : [ "You trip %s", " trips %s" - ], - "description" : "Down 2 turns, min 5 unarmed" + ] },{ "type" : "technique", "id" : "niten_water_cut", @@ -1329,8 +1247,7 @@ "messages" : [ "You strike %s with the slow power of flowing water", " strikes %s with the slow power of flowing water" - ], - "description" : "175% moves, x2 bash damage, x2 cut damage, min 4 melee" + ] },{ "type" : "technique", "id" : "niten_red_leaf", @@ -1340,8 +1257,7 @@ "messages" : [ "Your strike knocks %s off balance", "'s strike knocks %s off balance" - ], - "description" : "Down 2 turns, min 5 melee" + ] },{ "type" : "technique", "id" : "niten_stone_cut", @@ -1356,8 +1272,7 @@ "You stun %s with the force of the blow", " stuns %s with the force of the blow" ], - "stun_dur" : 2, - "description" : "Stun 2 turns, x1.5 bash damage, x1.5 cut damage, crit only, min 6 melee" + "stun_dur" : 2 },{ "type" : "technique", "id" : "niten_timing_attack", @@ -1377,8 +1292,7 @@ ["damage", "cut", 1.5] ], "//" : "Minimum effective time for a status in combat is two turns, as you have one deducted on the same turn its applied.", - "stun_dur" : 2, - "description" : "50% moves, x1.5 bash damage, x1.5 cut damage, stun 2 turns, min 5 melee" + "stun_dur" : 2 },{ "type" : "technique", "id" : "niten_feint", @@ -1391,8 +1305,7 @@ "messages" : [ "You feint at %s", " feints at %s" - ], - "description" : "80% moves, free recovery from a miss, min 2 melee" + ] },{ "type" : "technique", "id" : "tec_debug_slow", From 5db550652aa0efe68431cd5cbf7dfe6985ef459a Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Fri, 26 Oct 2018 11:03:58 +0200 Subject: [PATCH 22/59] compile fix --- src/martialarts.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/martialarts.cpp b/src/martialarts.cpp index ff2c3bb00a4b9..1c5a91c6cb60c 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -380,7 +380,7 @@ std::string ma_requirements::get_description( bool buff ) const dump << enumerate_as_string( min_skill.begin(), min_skill.end(), []( const std::pair &pr ) { return string_format( "%s: %d", pr.first->name(), pr.second ); - }, false ) << std::endl; + }, enumeration_conjunction::none ) << std::endl; } if( req_buffs.size() ) { @@ -388,7 +388,7 @@ std::string ma_requirements::get_description( bool buff ) const dump << enumerate_as_string( req_buffs.begin(), req_buffs.end(), []( const mabuff_id & bid ) { return bid->name; - }, false ) << std::endl; + }, enumeration_conjunction::none ) << std::endl; } const std::string type = buff ? _( "activate" ) : _( "be used" ); From 167f01dfc03192c893a61e8b78e334b1942065c7 Mon Sep 17 00:00:00 2001 From: Theundyingcode Date: Fri, 26 Oct 2018 16:59:17 -0500 Subject: [PATCH 23/59] Cat fixes round 2 --- data/json/items/biosignatures.json | 1 + data/json/items/comestibles.json | 2 ++ data/json/items/containers.json | 14 +++++++------- data/json/items/generic.json | 18 +++++++++++------- data/json/items/melee.json | 6 ++++++ data/json/items/tools.json | 1 + data/mods/Medieval_Stuff/armor.json | 1 + data/mods/Medieval_Stuff/shields.json | 8 ++++++++ data/mods/More_Survival_Tools/ammo.json | 2 +- data/mods/More_Survival_Tools/items.json | 2 +- 10 files changed, 39 insertions(+), 16 deletions(-) diff --git a/data/json/items/biosignatures.json b/data/json/items/biosignatures.json index f465a87474322..c321703046633 100644 --- a/data/json/items/biosignatures.json +++ b/data/json/items/biosignatures.json @@ -3,6 +3,7 @@ "type": "COMESTIBLE", "id": "feces_bird", "name": "bird litter", + "category": "chems", "weight": 40, "color": "brown", "spoils_in": 112, diff --git a/data/json/items/comestibles.json b/data/json/items/comestibles.json index 0d6f4fddb3d7f..1b8e610a456f3 100644 --- a/data/json/items/comestibles.json +++ b/data/json/items/comestibles.json @@ -8107,6 +8107,7 @@ "type": "COMESTIBLE", "id": "cola_meth", "name": "methacola", + "category": "drugs", "weight": 61, "color": "brown", "addiction_type": "amphetamine", @@ -8132,6 +8133,7 @@ "type": "COMESTIBLE", "id": "taint_tornado", "name": "tainted tornado", + "category": "mutagen", "weight": 100, "color": "red", "addiction_type": "alcohol", diff --git a/data/json/items/containers.json b/data/json/items/containers.json index f0dabfa8e2a36..1476ef2f5b27f 100644 --- a/data/json/items/containers.json +++ b/data/json/items/containers.json @@ -2,7 +2,7 @@ { "id": "2lcanteen", "type": "CONTAINER", - "category": "other", + "category": "clothing", "name": "2.5L canteen", "description": "A large plastic water canteen, with a 2.5 liter capacity and carrying strap.", "weight": 155, @@ -390,7 +390,7 @@ { "id": "canteen", "type": "CONTAINER", - "category": "other", + "category": "clothing", "name": "plastic canteen", "description": "A military-style water canteen with a 1.5 liter capacity. Commonly worn at the hip.", "weight": 155, @@ -565,7 +565,7 @@ { "id": "flask_hip", "type": "CONTAINER", - "category": "other", + "category": "clothing", "name": "hip flask", "description": "A 250 ml metal flask with a hinged screw-on lid, commonly used to discreetly transport alcohol.", "weight": 120, @@ -834,7 +834,7 @@ { "id": "metal_tank_little", "type": "CONTAINER", - "category": "other", + "category": "spare_parts", "name": "metal tank (2L)", "name_plural": "metal tanks (2L)", "description": "A small metal tank for gas or liquids. Useful for crafting.", @@ -873,7 +873,7 @@ { "id": "waterskin", "type": "CONTAINER", - "category": "other", + "category": "clothing", "name": "small waterskin", "description": "A small watertight leather bag with a carrying strap, can hold 1.5 liters of water.", "weight": 453, @@ -898,7 +898,7 @@ { "id": "waterskin2", "type": "CONTAINER", - "category": "other", + "category": "clothing", "name": "waterskin", "description": "A watertight leather bag with a carrying strap, can hold 3 liters of water.", "weight": 783, @@ -923,7 +923,7 @@ { "id": "waterskin3", "type": "CONTAINER", - "category": "other", + "category": "clothing", "name": "large waterskin", "description": "A large watertight leather bag with a carrying strap, can hold 5 liters of water.", "weight": 990, diff --git a/data/json/items/generic.json b/data/json/items/generic.json index cf8f89d9791ac..e03a3ff709c0a 100644 --- a/data/json/items/generic.json +++ b/data/json/items/generic.json @@ -69,6 +69,7 @@ "type": "GENERIC", "id": "file", "name": "file", + "category": "books", "description": "Several documents with all kinds of information, customer data and charts kept together, pretty useless now though.", "weight": 15, "to_hit": -3, @@ -165,6 +166,7 @@ { "type": "GENERIC", "id": "superglue", + "category": "spare_parts", "symbol": ",", "color": "white", "name": "superglue", @@ -180,6 +182,7 @@ "type": "GENERIC", "id": "bone_glue", "symbol": ",", + "category": "spare_parts", "color": "brown", "name": "bone glue", "description": "Glue made from boiling animal bones. The adhesive isn't strong enough for heavy duty usages, but it can be used as a varnish or holding together small items.", @@ -332,6 +335,7 @@ "symbol": "*", "color": "light_gray", "name": "spiral stone", + "category": "artifacts", "description": "A rock the size of your fist. It is covered with intricate spirals; it is impossible to tell whether they are carved, naturally formed, or some kind of fossil.", "price": 20000, "price_postapoc": 1000, @@ -1478,7 +1482,7 @@ "color": "light_gray", "name": "Mosin-Nagant EBR conversion kit", "name_plural": "Mosin-Nagant EBR conversion kits", - "category": "other", + "category": "spare_parts", "description": "A synthetic stock and hardware designed to accommodate common Mosin-Nagant actions. With gunsmithing tools, some skill, and a few hours, you could give the classic Russian design modern furniture and customization capacity.", "price": 12000, "weight": 2000, @@ -1493,7 +1497,7 @@ "color": "light_gray", "name": "L523-CAR conversion", "name_plural": "L523-CAR conversions", - "category": "other", + "category": "spare_parts", "description": "All the parts necessary to convert an L523 to the Carbine configuration, Leadworks LLC's choice for close-quarters work. In order to reconfigure an already-configured L523, you'll need to disassemble it to the base platform, then assemble with the parts you prefer.", "price": 170000, "weight": 400, @@ -1508,7 +1512,7 @@ "color": "light_gray", "name": "L523-MBR conversion", "name_plural": "L523-MBR conversions", - "category": "other", + "category": "spare_parts", "description": "All the parts necessary to convert an L523 to a Main Battle Rifle, a balanced weapon for all situations. In order to reconfigure an already-configured L523, you'll need to disassemble it to the base platform, then assemble with the parts you prefer.", "price": 170000, "weight": 700, @@ -1523,7 +1527,7 @@ "color": "light_gray", "name": "L523-DSR conversion", "name_plural": "L523-DSR conversions", - "category": "other", + "category": "spare_parts", "description": "All the parts necessary to convert an L523 to a Designated Shootist Rifle, suitable for long-ranged work. In order to reconfigure an already-configured L523, you'll need to disassemble it to the base platform, then assemble with the parts you prefer.", "price": 200000, "weight": 1900, @@ -1538,7 +1542,7 @@ "color": "light_gray", "name": "L523-LMG conversion", "name_plural": "L523-LMG conversions", - "category": "other", + "category": "spare_parts", "description": "All the parts necessary to convert an L523 to a light machine gun. In order to reconfigure an already-configured L523, you'll need to disassemble it to the base platform, then assemble with the parts you prefer.", "price": 270000, "weight": 2300, @@ -2730,7 +2734,7 @@ { "id": "clay_pot_flower", "type": "GENERIC", - "category": "tools", + "category": "other", "name": "clay flower pot", "description": "A nice looking clay pot used for planting.", "weight": 480, @@ -2744,7 +2748,7 @@ { "id": "plastic_pot_flower", "type": "GENERIC", - "category": "tools", + "category": "other", "name": "plastic flower pot", "description": "A cheap plastic pot used for planting.", "weight": 190, diff --git a/data/json/items/melee.json b/data/json/items/melee.json index ad036309b0a10..5d514f8ccb9e3 100644 --- a/data/json/items/melee.json +++ b/data/json/items/melee.json @@ -277,6 +277,7 @@ "symbol": "*", "color": "white", "name": "baseball", + "category": "other", "description": "A baseball, good for throwing at enemies. Getting hit with one of these hurts a lot more than you might think.", "price": 1000, "material": "leather", @@ -291,6 +292,7 @@ "symbol": "*", "color": "dark_gray", "name": "hockey puck", + "category": "other", "description": "A heavy circular block of solid rubber, normally used for playing hockey. You can throw it to cause some serious harm.", "price": 1000, "material": "plastic", @@ -305,6 +307,7 @@ "symbol": "*", "color": "brown", "name": "football", + "category": "other", "description": "An oval made of leather and string, it's easily thrown but does little damage. You could take it apart into leather if you wanted.", "price": 1000, "material": "leather", @@ -319,6 +322,7 @@ "symbol": "*", "color": "brown", "name": "basketball", + "category": "other", "description": "A high-quality indoor basketball. You may throw it at zombies.", "price": 1200, "material": "leather", @@ -1377,6 +1381,7 @@ "symbol": ",", "color": "dark_gray", "name": "grenade launcher buttstock", + "category": "spare_parts", "description": "A collapsible buttstock designed for the M320 grenade launcher. When combined with this stock, the M320 can be used as a stand alone weapon", "price": 10000, "material": [ "plastic", "steel" ], @@ -1770,6 +1775,7 @@ "type": "GENERIC", "id": "pitchfork", "name": "pitchfork", + "category": "tools", "description": "An agricultural tool with long wooden shaft and four spikes. Is used to lift hay.", "weight": 1000, "to_hit": 1, diff --git a/data/json/items/tools.json b/data/json/items/tools.json index 6aee185ce6db0..73c10b633e083 100644 --- a/data/json/items/tools.json +++ b/data/json/items/tools.json @@ -2154,6 +2154,7 @@ "id": "digging_stick", "type": "GENERIC", "name": "digging stick", + "category": "tools", "description": "This is a large stick, with the end carved into a broad blade for digging. It could be used to dig shallow pits, but not deep ones.", "weight": 1133, "volume": 6, diff --git a/data/mods/Medieval_Stuff/armor.json b/data/mods/Medieval_Stuff/armor.json index ee1fa3f2d2534..7ce0a544aaf3d 100644 --- a/data/mods/Medieval_Stuff/armor.json +++ b/data/mods/Medieval_Stuff/armor.json @@ -88,6 +88,7 @@ "id": "armor_cuirass", "type": "ARMOR", "name": "bell cuirass", + "category": "armor", "name_plural": "bell cuirasses", "description": "An ancient Greek breastplate, made of bronze.", "weight": 5896, diff --git a/data/mods/Medieval_Stuff/shields.json b/data/mods/Medieval_Stuff/shields.json index 600ccaccae7a1..6c2352c36a024 100644 --- a/data/mods/Medieval_Stuff/shields.json +++ b/data/mods/Medieval_Stuff/shields.json @@ -3,6 +3,7 @@ "id": "shield_wooden", "type": "ARMOR", "name": "wooden shield", + "category": "armor", "description": "A crude wooden shield, lacking any metal or leather reinforcement. Lightweight but not very tough.", "weight": 2267, "volume": 15, @@ -23,6 +24,7 @@ "id": "shield_wooden_large", "type": "ARMOR", "name": "large wooden shield", + "category": "armor", "description": "An ancient style of wooden shield, lacking any metal or leather reinforcement. Bulky, but offers a decent amount of protection.", "weight": 3828, "volume": 20, @@ -43,6 +45,7 @@ "id": "shield_heater", "type": "ARMOR", "name": "heater shield", + "category": "armor", "//": "Doesn't use leather in material because it's not meant to be sewn up", "description": "A medieval style of shield made of wood overlaid with leather, developed from the longer kite shield. Mainly used in tournaments, but still viable in battle.", "weight": 3175, @@ -63,6 +66,7 @@ "id": "shield_kite", "type": "ARMOR", "name": "kite shield", + "category": "armor", "//": "Doesn't use leather in material because it's not meant to be sewn up", "description": "A classic medieval style of shield, made of wood overlaid with leather, in an elongated teardrop shape. Affords decent protection, but was better suited for cavalry.", "weight": 3628, @@ -84,6 +88,7 @@ "id": "shield_round", "type": "ARMOR", "name": "round shield", + "category": "armor", "description": "A simple round shield made of wood, with a rim and boss of iron. Made infamous by the Vikings.", "weight": 3400, "volume": 16, @@ -103,6 +108,7 @@ "id": "shield_hoplon", "type": "ARMOR", "name": "hoplon", + "category": "armor", "description": "A convex round shield from ancient Greece, made of wood reinforced with bronze. Heavy but effective.", "weight": 4082, "volume": 18, @@ -124,6 +130,7 @@ "type": "ARMOR", "name": "scutum", "name_plural": "scuta", + "category": "armor", "description": "A rectangular shield from ancient Rome, made of wood and iron. Perfect for fighting in formation, but not ideal for facing zombies alone.", "weight": 4535, "volume": 22, @@ -144,6 +151,7 @@ "id": "shield_buckler", "type": "ARMOR", "name": "buckler", + "category": "armor", "description": "A small metal shield from the late medieval and renaissance periods. Extremely light and tough, but its small size is as much a hindrance as it is an advantage.", "weight": 1814, "volume": 10, diff --git a/data/mods/More_Survival_Tools/ammo.json b/data/mods/More_Survival_Tools/ammo.json index 4859d6e84a8f6..6f1252a361f43 100644 --- a/data/mods/More_Survival_Tools/ammo.json +++ b/data/mods/More_Survival_Tools/ammo.json @@ -2,7 +2,7 @@ { "id": "tinder", "type": "AMMO", - "category": "other", + "category": "spare_parts", "name": "tinder", "name_plural": "tinder", "description": "Flammable material, finely divided for easy combustion.", diff --git a/data/mods/More_Survival_Tools/items.json b/data/mods/More_Survival_Tools/items.json index d82822329f5fa..a9b5d9447c2d9 100644 --- a/data/mods/More_Survival_Tools/items.json +++ b/data/mods/More_Survival_Tools/items.json @@ -519,7 +519,7 @@ { "id": "canteen_wood", "type": "CONTAINER", - "category": "other", + "category": "clothing", "name": "wooden canteen", "description": "A water canteen made from wood, secured by metal bands and sealed with wax or pitch. Holds 1.5 liters and has a simple carry strap.", "weight": 232, From 68556c48d82a31b65357911a17e7bca226aaf52c Mon Sep 17 00:00:00 2001 From: Theundyingcode Date: Fri, 26 Oct 2018 17:16:44 -0500 Subject: [PATCH 24/59] sheet metal and solar cell -> spare_parts and generic.json --- data/json/items/generic.json | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/data/json/items/generic.json b/data/json/items/generic.json index e03a3ff709c0a..babb1194b860e 100644 --- a/data/json/items/generic.json +++ b/data/json/items/generic.json @@ -2758,5 +2758,36 @@ "material": "plastic", "symbol": ")", "color": "green" + }, + { + "type":"GENERIC", + "id" : "sheet_metal", + "name" : "sheet metal", + "description" : "A thin sheet of metal.", + "//" : "Roughly in the 70cm×70cm×1.5mm to 1m×1m×0.75mm range. Has to be folded / rolled up when in inventory, so 75% density compared to solid block.", + "weight" : 6000, + "to_hit" : -2, + "color" : "light_cyan", + "symbol" : "]", + "material" : ["steel"], + "volume" : 4, + "bashing" : 5, + "category" : "spare_parts", + "price" : 6000 + }, + { + "type":"GENERIC", + "id" : "solar_cell", + "name" : "solar cell", + "description" : "A small electronic device that can convert solar radiation into electric power. Useful for crafting.", + "weight" : 500, + "to_hit" : -4, + "color" : "yellow", + "symbol" : ";", + "material" : ["glass"], + "volume" : 1, + "bashing" : 1, + "category" : "spare_parts", + "price" : 5000 } ] From e888a1019b4b1a8f73f78b1f4d5a9d6dcb1550d9 Mon Sep 17 00:00:00 2001 From: Theundyingcode Date: Fri, 26 Oct 2018 22:21:48 -0500 Subject: [PATCH 25/59] Revert "sheet metal and solar cell -> spare_parts and generic.json" This reverts commit 68556c48d82a31b65357911a17e7bca226aaf52c. --- data/json/items/generic.json | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/data/json/items/generic.json b/data/json/items/generic.json index babb1194b860e..e03a3ff709c0a 100644 --- a/data/json/items/generic.json +++ b/data/json/items/generic.json @@ -2758,36 +2758,5 @@ "material": "plastic", "symbol": ")", "color": "green" - }, - { - "type":"GENERIC", - "id" : "sheet_metal", - "name" : "sheet metal", - "description" : "A thin sheet of metal.", - "//" : "Roughly in the 70cm×70cm×1.5mm to 1m×1m×0.75mm range. Has to be folded / rolled up when in inventory, so 75% density compared to solid block.", - "weight" : 6000, - "to_hit" : -2, - "color" : "light_cyan", - "symbol" : "]", - "material" : ["steel"], - "volume" : 4, - "bashing" : 5, - "category" : "spare_parts", - "price" : 6000 - }, - { - "type":"GENERIC", - "id" : "solar_cell", - "name" : "solar cell", - "description" : "A small electronic device that can convert solar radiation into electric power. Useful for crafting.", - "weight" : 500, - "to_hit" : -4, - "color" : "yellow", - "symbol" : ";", - "material" : ["glass"], - "volume" : 1, - "bashing" : 1, - "category" : "spare_parts", - "price" : 5000 } ] From a60596c1282da8b2503389691f30b1d73024bffa Mon Sep 17 00:00:00 2001 From: Theundyingcode Date: Fri, 26 Oct 2018 22:37:22 -0500 Subject: [PATCH 26/59] solar cells and sheet metal -> spare parts --- data/json/items/vehicle_parts.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/items/vehicle_parts.json b/data/json/items/vehicle_parts.json index f9d21425f19aa..27e7aa73a3c6f 100644 --- a/data/json/items/vehicle_parts.json +++ b/data/json/items/vehicle_parts.json @@ -567,7 +567,7 @@ "material" : ["glass"], "volume" : 1, "bashing" : 1, - "category" : "veh_parts", + "category" : "spare_parts", "price" : 5000 }, { @@ -583,7 +583,7 @@ "material" : ["steel"], "volume" : 4, "bashing" : 5, - "category" : "veh_parts", + "category" : "spare_parts", "price" : 6000 }, { From 5f110fb40b83e70577a2a507c5a65c71a6efd30c Mon Sep 17 00:00:00 2001 From: Muffindrake Date: Sat, 27 Oct 2018 10:51:32 +0200 Subject: [PATCH 27/59] Add Magic 8-Ball and coin --- data/json/item_actions.json | 8 +++++++ data/json/item_groups.json | 12 +++++++--- src/item_factory.cpp | 2 ++ src/iuse.cpp | 44 +++++++++++++++++++++++++++++++++++++ src/iuse.h | 2 ++ 5 files changed, 65 insertions(+), 3 deletions(-) diff --git a/data/json/item_actions.json b/data/json/item_actions.json index 31befd0822722..3200643b4c726 100644 --- a/data/json/item_actions.json +++ b/data/json/item_actions.json @@ -263,6 +263,10 @@ "type" : "item_action", "id" : "CLEAR_RUBBLE", "name" : "Clear rubble" + },{ + "type" : "item_action", + "id" : "COIN_FLIP", + "name" : "Flip" },{ "type" : "item_action", "id" : "COKE", @@ -443,6 +447,10 @@ "type" : "item_action", "id" : "LADDER", "name" : "Place" + },{ + "type" : "item_action", + "id" : "MAGIC_8_BALL", + "name" : "Ask" },{ "type" : "item_action", "id" : "MARLOSS", diff --git a/data/json/item_groups.json b/data/json/item_groups.json index e1b3d4f7f96d8..03f8bab3836f2 100644 --- a/data/json/item_groups.json +++ b/data/json/item_groups.json @@ -4346,7 +4346,9 @@ ["katana", 2], ["rapier", 3], ["cavalry_sabre", 2], - ["sf_watch", 5] + ["sf_watch", 5], + ["magic_8_ball", 1], + ["coin_quarter", 1] ] },{ "type" : "item_group", @@ -4796,7 +4798,9 @@ ["l-stick", 1], ["solarpack", 5], ["tourist_table", 10], - ["thermos", 25] + ["thermos", 25], + ["magic_8_ball", 2], + ["coin_quarter", 2] ] },{ "type" : "item_group", @@ -8522,7 +8526,9 @@ ["straw_doll", 1], ["pitchfork", 1], ["straw_sandals", 1], - ["holy_symbol", 10] + ["holy_symbol", 10], + ["magic_8_ball", 1], + ["coin_quarter", 1] ] },{ "type" : "item_group", diff --git a/src/item_factory.cpp b/src/item_factory.cpp index 26c5d3f38ec52..fdb6a7d7c7d9a 100644 --- a/src/item_factory.cpp +++ b/src/item_factory.cpp @@ -539,6 +539,7 @@ void Item_factory::init() add_iuse( "CAFF", &iuse::caff ); add_iuse( "CAMERA", &iuse::camera ); add_iuse( "CAN_GOO", &iuse::can_goo ); + add_iuse( "COIN_FLIP", &iuse::coin_flip ); add_iuse( "DIRECTIONAL_HOLOGRAM", &iuse::directional_hologram ); add_iuse( "CAPTURE_MONSTER_ACT", &iuse::capture_monster_act ); add_iuse( "CAPTURE_MONSTER_VEH", &iuse::capture_monster_veh ); @@ -609,6 +610,7 @@ void Item_factory::init() add_iuse( "JET_INJECTOR", &iuse::jet_injector ); add_iuse( "LADDER", &iuse::ladder ); add_iuse( "LUMBER", &iuse::lumber ); + add_iuse( "MAGIC_8_BALL", &iuse::magic_8_ball ); add_iuse( "MAKEMOUND", &iuse::makemound ); add_iuse( "MARLOSS", &iuse::marloss ); add_iuse( "MARLOSS_GEL", &iuse::marloss_gel ); diff --git a/src/iuse.cpp b/src/iuse.cpp index 72dce52a1ad97..b6827a840acf4 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -7781,3 +7781,47 @@ int iuse::magnesium_tablet( player *p, item *it, bool, const tripoint & ) p->add_effect( effect_magnesium_supplements, 16_hours ); return it->type->charges_to_use(); } + +int iuse::coin_flip( player *p, item *it, bool, const tripoint & ) +{ + p->add_msg_if_player( m_info, _( "You flip a %s." ), it->tname().c_str() ); + p->add_msg_if_player( m_info, one_in( 2 ) ? _( "Heads!" ) : _( "Tails!" ) ); + return 0; +} + +int iuse::magic_8_ball( player *p, item *it, bool, const tripoint & ) +{ + enum { + BALL8_GOOD, + BALL8_UNK = 10, + BALL8_BAD = 15 + }; + const static std::array tab = { + _( "It is certain." ), + _( "It is decidedly so." ), + _( "Without a doubt." ), + _( "Yes - definitely." ), + _( "You may rely on it." ), + _( "As I see it, yes." ), + _( "Most likely." ), + _( "Outlook good." ), + _( "Yes." ), + _( "Signs point to yes." ), + _( "Reply hazy, try again." ), + _( "Ask again later." ), + _( "Better not tell you now." ), + _( "Cannot predict now." ), + _( "Concentrate and ask again." ), + _( "Don't count on it." ), + _( "My reply is no." ), + _( "My sources say no." ), + _( "Outlook not so good." ), + _( "Very doubtful." ) + }; + + p->add_msg_if_player( m_info, _( "You ask the %s, then flip it." ), it->tname().c_str() ); + int rn = rng( 0, tab.size() - 1 ); + auto color = ( rn >= BALL8_BAD ? m_bad : rn >= BALL8_UNK ? m_info : m_good ); + p->add_msg_if_player( color, _( "The %s says: %s" ), it->tname().c_str(), tab[rn]); + return 0; +} diff --git a/src/iuse.h b/src/iuse.h index 3d0105434f62f..623870b80fd25 100644 --- a/src/iuse.h +++ b/src/iuse.h @@ -209,6 +209,8 @@ class iuse int instant_antibiotic( player *, item *, bool, const tripoint & ); int panacea( player *, item *, bool, const tripoint & ); int magnesium_tablet( player *, item *, bool, const tripoint & ); + int coin_flip( player *, item *, bool, const tripoint & ); + int magic_8_ball( player *, item *, bool, const tripoint & ); // MACGUFFINS From bd0c1fe54b75bb5120b7faee10f092444f834dd1 Mon Sep 17 00:00:00 2001 From: Muffindrake Date: Sat, 27 Oct 2018 21:32:00 +0200 Subject: [PATCH 28/59] Actually add the actual items --- data/json/items/fluff.json | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 data/json/items/fluff.json diff --git a/data/json/items/fluff.json b/data/json/items/fluff.json new file mode 100644 index 0000000000000..044da5f0244f9 --- /dev/null +++ b/data/json/items/fluff.json @@ -0,0 +1,32 @@ +[ + { + "id": "magic_8_ball", + "type": "GENERIC", + "category": "other", + "name": "Magic 8-Ball", + "name_plural": "Magic 8-Balls", + "description": "A fortune-telling device from the 1950s. The kind of moral support you didn't know you needed.", + "weight": 40, + "volume": 1, + "price": 1000, + "material": [ "plastic" ], + "symbol": "o", + "color": "white", + "use_action": "MAGIC_8_BALL" + }, + { + "id": "coin_quarter", + "type": "GENERIC", + "category": "other", + "name": "coin", + "name_plural": "coins", + "description": "A now-ancient form of currency. Stripped of its original purpose, it now serves, faithfully, flippant Flippists for free.", + "weight": 6, + "volume": 0, + "price": 25, + "material": [ "silver" ], + "symbol": "o", + "color": "light_gray", + "use_action": "COIN_FLIP" + } +] From 2dffbc61a02f007ce6b35ae6d8f78ac65e952146 Mon Sep 17 00:00:00 2001 From: Muffindrake Date: Sat, 27 Oct 2018 21:35:14 +0200 Subject: [PATCH 29/59] Astyle fluff.json --- data/json/items/fluff.json | 60 +++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/data/json/items/fluff.json b/data/json/items/fluff.json index 044da5f0244f9..bd64346c8fb22 100644 --- a/data/json/items/fluff.json +++ b/data/json/items/fluff.json @@ -1,32 +1,32 @@ [ - { - "id": "magic_8_ball", - "type": "GENERIC", - "category": "other", - "name": "Magic 8-Ball", - "name_plural": "Magic 8-Balls", - "description": "A fortune-telling device from the 1950s. The kind of moral support you didn't know you needed.", - "weight": 40, - "volume": 1, - "price": 1000, - "material": [ "plastic" ], - "symbol": "o", - "color": "white", - "use_action": "MAGIC_8_BALL" - }, - { - "id": "coin_quarter", - "type": "GENERIC", - "category": "other", - "name": "coin", - "name_plural": "coins", - "description": "A now-ancient form of currency. Stripped of its original purpose, it now serves, faithfully, flippant Flippists for free.", - "weight": 6, - "volume": 0, - "price": 25, - "material": [ "silver" ], - "symbol": "o", - "color": "light_gray", - "use_action": "COIN_FLIP" - } + { + "id": "magic_8_ball", + "type": "GENERIC", + "category": "other", + "name": "Magic 8-Ball", + "name_plural": "Magic 8-Balls", + "description": "A fortune-telling device from the 1950s. The kind of moral support you didn't know you needed.", + "weight": 40, + "volume": 1, + "price": 1000, + "material": [ "plastic" ], + "symbol": "o", + "color": "white", + "use_action": "MAGIC_8_BALL" + }, + { + "id": "coin_quarter", + "type": "GENERIC", + "category": "other", + "name": "coin", + "name_plural": "coins", + "description": "A now-ancient form of currency. Stripped of its original purpose, it now serves, faithfully, flippant Flippists for free.", + "weight": 6, + "volume": 0, + "price": 25, +"material": [ "silver" ], +"symbol": "o", +"color": "light_gray", +"use_action": "COIN_FLIP" +} ] From fd95911e18b2882dea8063bacde458aa92b9af5c Mon Sep 17 00:00:00 2001 From: Muffindrake Date: Sat, 27 Oct 2018 21:49:50 +0200 Subject: [PATCH 30/59] Astyle changes in iuse.cpp --- src/iuse.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iuse.cpp b/src/iuse.cpp index b6827a840acf4..34eebc75a687b 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -7822,6 +7822,6 @@ int iuse::magic_8_ball( player *p, item *it, bool, const tripoint & ) p->add_msg_if_player( m_info, _( "You ask the %s, then flip it." ), it->tname().c_str() ); int rn = rng( 0, tab.size() - 1 ); auto color = ( rn >= BALL8_BAD ? m_bad : rn >= BALL8_UNK ? m_info : m_good ); - p->add_msg_if_player( color, _( "The %s says: %s" ), it->tname().c_str(), tab[rn]); + p->add_msg_if_player( color, _( "The %s says: %s" ), it->tname().c_str(), tab[rn] ); return 0; } From edbeb1cee2ec22fdf533f826e0156a6e639ad816 Mon Sep 17 00:00:00 2001 From: Muffindrake Date: Sat, 27 Oct 2018 22:57:24 +0200 Subject: [PATCH 31/59] Correctly style fluff.json --- data/json/items/fluff.json | 60 +++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/data/json/items/fluff.json b/data/json/items/fluff.json index bd64346c8fb22..044da5f0244f9 100644 --- a/data/json/items/fluff.json +++ b/data/json/items/fluff.json @@ -1,32 +1,32 @@ [ - { - "id": "magic_8_ball", - "type": "GENERIC", - "category": "other", - "name": "Magic 8-Ball", - "name_plural": "Magic 8-Balls", - "description": "A fortune-telling device from the 1950s. The kind of moral support you didn't know you needed.", - "weight": 40, - "volume": 1, - "price": 1000, - "material": [ "plastic" ], - "symbol": "o", - "color": "white", - "use_action": "MAGIC_8_BALL" - }, - { - "id": "coin_quarter", - "type": "GENERIC", - "category": "other", - "name": "coin", - "name_plural": "coins", - "description": "A now-ancient form of currency. Stripped of its original purpose, it now serves, faithfully, flippant Flippists for free.", - "weight": 6, - "volume": 0, - "price": 25, -"material": [ "silver" ], -"symbol": "o", -"color": "light_gray", -"use_action": "COIN_FLIP" -} + { + "id": "magic_8_ball", + "type": "GENERIC", + "category": "other", + "name": "Magic 8-Ball", + "name_plural": "Magic 8-Balls", + "description": "A fortune-telling device from the 1950s. The kind of moral support you didn't know you needed.", + "weight": 40, + "volume": 1, + "price": 1000, + "material": [ "plastic" ], + "symbol": "o", + "color": "white", + "use_action": "MAGIC_8_BALL" + }, + { + "id": "coin_quarter", + "type": "GENERIC", + "category": "other", + "name": "coin", + "name_plural": "coins", + "description": "A now-ancient form of currency. Stripped of its original purpose, it now serves, faithfully, flippant Flippists for free.", + "weight": 6, + "volume": 0, + "price": 25, + "material": [ "silver" ], + "symbol": "o", + "color": "light_gray", + "use_action": "COIN_FLIP" + } ] From 88d8416cc3da01292dd25d0b637bf0e1b891a5c6 Mon Sep 17 00:00:00 2001 From: Muffindrake Date: Sat, 27 Oct 2018 23:21:15 +0200 Subject: [PATCH 32/59] Begrudgingly comply with broken compilers --- src/iuse.cpp | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/iuse.cpp b/src/iuse.cpp index 34eebc75a687b..31ea8804e9a04 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -7796,27 +7796,28 @@ int iuse::magic_8_ball( player *p, item *it, bool, const tripoint & ) BALL8_UNK = 10, BALL8_BAD = 15 }; - const static std::array tab = { - _( "It is certain." ), - _( "It is decidedly so." ), - _( "Without a doubt." ), - _( "Yes - definitely." ), - _( "You may rely on it." ), - _( "As I see it, yes." ), - _( "Most likely." ), - _( "Outlook good." ), - _( "Yes." ), - _( "Signs point to yes." ), - _( "Reply hazy, try again." ), - _( "Ask again later." ), - _( "Better not tell you now." ), - _( "Cannot predict now." ), - _( "Concentrate and ask again." ), - _( "Don't count on it." ), - _( "My reply is no." ), - _( "My sources say no." ), - _( "Outlook not so good." ), - _( "Very doubtful." ) + const static std::array tab = {{ + _( "It is certain." ), + _( "It is decidedly so." ), + _( "Without a doubt." ), + _( "Yes - definitely." ), + _( "You may rely on it." ), + _( "As I see it, yes." ), + _( "Most likely." ), + _( "Outlook good." ), + _( "Yes." ), + _( "Signs point to yes." ), + _( "Reply hazy, try again." ), + _( "Ask again later." ), + _( "Better not tell you now." ), + _( "Cannot predict now." ), + _( "Concentrate and ask again." ), + _( "Don't count on it." ), + _( "My reply is no." ), + _( "My sources say no." ), + _( "Outlook not so good." ), + _( "Very doubtful." ) + } }; p->add_msg_if_player( m_info, _( "You ask the %s, then flip it." ), it->tname().c_str() ); From d424e6b2ca7c9e519a342355574515f19f8ab401 Mon Sep 17 00:00:00 2001 From: Muffindrake Date: Sun, 28 Oct 2018 07:57:15 +0100 Subject: [PATCH 33/59] Comply with ancient and broken typesetting system --- data/json/items/fluff.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/items/fluff.json b/data/json/items/fluff.json index 044da5f0244f9..264d50acb3c8b 100644 --- a/data/json/items/fluff.json +++ b/data/json/items/fluff.json @@ -5,7 +5,7 @@ "category": "other", "name": "Magic 8-Ball", "name_plural": "Magic 8-Balls", - "description": "A fortune-telling device from the 1950s. The kind of moral support you didn't know you needed.", + "description": "A fortune-telling device from the 1950s. The kind of moral support you didn't know you needed.", "weight": 40, "volume": 1, "price": 1000, @@ -20,7 +20,7 @@ "category": "other", "name": "coin", "name_plural": "coins", - "description": "A now-ancient form of currency. Stripped of its original purpose, it now serves, faithfully, flippant Flippists for free.", + "description": "A now-ancient form of currency. Stripped of its original purpose, it now serves, faithfully, flippant Flippists for free.", "weight": 6, "volume": 0, "price": 25, From 9a4f572adedef2b015fe01d0e29c2124f02aad34 Mon Sep 17 00:00:00 2001 From: Muffindrake Date: Sun, 28 Oct 2018 09:37:35 +0100 Subject: [PATCH 34/59] Correct i18n of 8-ball strings --- src/iuse.cpp | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/iuse.cpp b/src/iuse.cpp index 31ea8804e9a04..8d594d8791db3 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -7797,32 +7797,32 @@ int iuse::magic_8_ball( player *p, item *it, bool, const tripoint & ) BALL8_BAD = 15 }; const static std::array tab = {{ - _( "It is certain." ), - _( "It is decidedly so." ), - _( "Without a doubt." ), - _( "Yes - definitely." ), - _( "You may rely on it." ), - _( "As I see it, yes." ), - _( "Most likely." ), - _( "Outlook good." ), - _( "Yes." ), - _( "Signs point to yes." ), - _( "Reply hazy, try again." ), - _( "Ask again later." ), - _( "Better not tell you now." ), - _( "Cannot predict now." ), - _( "Concentrate and ask again." ), - _( "Don't count on it." ), - _( "My reply is no." ), - _( "My sources say no." ), - _( "Outlook not so good." ), - _( "Very doubtful." ) + translate_marker( "It is certain." ), + translate_marker( "It is decidedly so." ), + translate_marker( "Without a doubt." ), + translate_marker( "Yes - definitely." ), + translate_marker( "You may rely on it." ), + translate_marker( "As I see it, yes." ), + translate_marker( "Most likely." ), + translate_marker( "Outlook good." ), + translate_marker( "Yes." ), + translate_marker( "Signs point to yes." ), + translate_marker( "Reply hazy, try again." ), + translate_marker( "Ask again later." ), + translate_marker( "Better not tell you now." ), + translate_marker( "Cannot predict now." ), + translate_marker( "Concentrate and ask again." ), + translate_marker( "Don't count on it." ), + translate_marker( "My reply is no." ), + translate_marker( "My sources say no." ), + translate_marker( "Outlook not so good." ), + translate_marker( "Very doubtful." ) } }; p->add_msg_if_player( m_info, _( "You ask the %s, then flip it." ), it->tname().c_str() ); int rn = rng( 0, tab.size() - 1 ); auto color = ( rn >= BALL8_BAD ? m_bad : rn >= BALL8_UNK ? m_info : m_good ); - p->add_msg_if_player( color, _( "The %s says: %s" ), it->tname().c_str(), tab[rn] ); + p->add_msg_if_player( color, _( "The %s says: %s" ), it->tname().c_str(), _( tab[rn] ) ); return 0; } From 5ebb01eac670f580ed5792d08a8323bee5334158 Mon Sep 17 00:00:00 2001 From: Yoosuk Sim Date: Mon, 29 Oct 2018 09:27:52 -0400 Subject: [PATCH 35/59] added zinc_powder to factory_be_gate_01.json --- data/mods/More_Locations/factory/factory_be_gate_01.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/data/mods/More_Locations/factory/factory_be_gate_01.json b/data/mods/More_Locations/factory/factory_be_gate_01.json index 32007695eee59..41b5eec428bb3 100644 --- a/data/mods/More_Locations/factory/factory_be_gate_01.json +++ b/data/mods/More_Locations/factory/factory_be_gate_01.json @@ -18,7 +18,7 @@ "....... .......", "....... .......", "....... .......", - "....... .......", + "H...... ......H", "==..... .....==", "------1 1------", "-----|| ||-----", @@ -40,6 +40,11 @@ "t": { "monster": "mon_turret" }, "Z": { "monster": "mon_secubot" }, "z": { "monster": "mon_skitterbot" } + }, + "mapping": { + "H": { + "item": { "item": "zinc_powder", "count": 50 }, + } } } } From 4f7dfbe82bb1f19f233858348c93c4d731a37bb0 Mon Sep 17 00:00:00 2001 From: rdittrich97 Date: Tue, 30 Oct 2018 17:04:23 -0400 Subject: [PATCH 36/59] added dairy tag to several foods --- data/json/items/comestibles.json | 100 +++++++++++++++---------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/data/json/items/comestibles.json b/data/json/items/comestibles.json index 61ac799ee1615..c650cc0350b19 100644 --- a/data/json/items/comestibles.json +++ b/data/json/items/comestibles.json @@ -384,7 +384,7 @@ "description": "Baby cow food, appropriated for adult humans. Spoils rapidly.", "price": 38, "//": "A 12-charge gallon currently goes for around US$4.", - "material": "milk", + "material": [ "milk", "dairy" ], "volume": 1, "phase": "liquid", "flags": [ "EATEN_COLD" ], @@ -405,7 +405,7 @@ "calories": 95, "description": "Baby cow food, appropriated for adult humans. Having been canned, this milk should last for a very long time.", "price": 700, - "material": [ "milk", "junk" ], + "material": [ "milk", "junk", "dairy" ], "volume": 1, "phase": "liquid", "fun": 3 @@ -1130,7 +1130,7 @@ "calories": 130, "description": "Sweetened coffee and whiskey topped with milk. Start your day the closeted alcoholic way!", "price": 500, - "material": [ "alcohol", "water", "milk" ], + "material": [ "alcohol", "water", "milk", "dairy" ], "volume": 1, "phase": "liquid", "fun": 20, @@ -1657,7 +1657,7 @@ "calories": 35, "description": "A chocolate flavored beverage made of artificial flavoring and milk byproducts. Shelf stable and vaguely appetizing even when lukewarm.", "price": 100, - "material": [ "junk", "milk" ], + "material": [ "junk", "milk", "dairy" ], "volume": 1, "phase": "liquid", "flags": [ "EATEN_COLD" ], @@ -3121,7 +3121,7 @@ "calories": 104, "description": "Salted chips made from corn tortillas, now with cheese. Could stand to have some meat.", "price": 250, - "material": [ "junk", "milk" ], + "material": [ "junk", "milk", "dairy" ], "volume": 1, "charges": 3, "flags": [ "EATEN_HOT" ], @@ -3174,7 +3174,7 @@ "calories": 208, "description": "Salted chips made from corn tortillas with ground meat and smothered in cheese. Delicious.", "price": 300, - "material": [ "flesh", "milk", "junk" ], + "material": [ "flesh", "milk", "junk", "dairy" ], "volume": 1, "charges": 3, "flags": [ "EATEN_HOT" ], @@ -3188,7 +3188,7 @@ "name": "niño nachos with cheese", "name_plural": "niño nachos with cheese", "description": "Salted chips made from corn tortillas with human flesh and smothered in cheese. Delicious.", - "material": [ "hflesh", "milk", "junk" ] + "material": [ "hflesh", "milk", "junk", "dairy" ] }, { "type": "COMESTIBLE", @@ -4708,7 +4708,7 @@ "calories": 130, "description": "Delicious hickory nut ambrosia. A drink worthy of the gods.", "price": 100, - "material": [ "nut", "milk" ], + "material": [ "nut", "milk", "dairy" ], "volume": 1, "phase": "liquid", "charges": 4, @@ -5150,7 +5150,7 @@ "calories": 130, "description": "A small, microwaveable steak & cheese burrito, like those found at gas stations. Not as appetizing or nutritious as it would be if heated up.", "price": 200, - "material": [ "flesh", "junk", "milk" ], + "material": [ "flesh", "junk", "milk", "dairy" ], "volume": 1, "fun": -3, "rot_spawn": "GROUP_CARRION" @@ -5169,7 +5169,7 @@ "calories": 434, "description": "A small, microwaveable steak & cheese burrito, like those found at gas stations. It's tastier and more filling, but will also spoil quickly.", "price": 90, - "material": [ "flesh", "junk", "milk" ], + "material": [ "flesh", "junk", "milk", "dairy" ], "volume": 1, "flags": [ "EATEN_HOT" ], "fun": 5, @@ -5267,7 +5267,7 @@ "calories": 434, "description": "When the cheese starts flowing, Kraft gets your noodle going.", "price": 380, - "material": [ "wheat", "milk" ], + "material": [ "wheat", "milk", "dairy" ], "volume": 4, "charges": 2, "flags": [ "EATEN_HOT", "TRADER_AVOID", "FREEZERBURN" ], @@ -5289,7 +5289,7 @@ "calories": 260, "description": "Some mac and cheese with ground meat added, enhancing the flavor and the nutritional value.", "price": 490, - "material": [ "wheat", "flesh", "milk" ], + "material": [ "wheat", "flesh", "milk", "dairy" ], "volume": 4, "charges": 4, "flags": [ "EATEN_HOT", "FREEZERBURN" ], @@ -5302,7 +5302,7 @@ "copy-from": "macaroni_helper", "name": "hobo helper", "description": "Some mac and cheese with ground human flesh added. So good it's like murder.", - "material": [ "wheat", "hflesh", "milk" ] + "material": [ "wheat", "hflesh", "milk", "dairy" ] }, { "type": "COMESTIBLE", @@ -5335,7 +5335,7 @@ "calories": 130, "description": "Delicious fermented dairy. It tastes of vanilla.", "price": 190, - "material": "milk", + "material": [ "milk", "dairy"], "volume": 1, "phase": "liquid", "flags": [ "FREEZERBURN" ], @@ -5355,7 +5355,7 @@ "calories": 87, "description": "Sugary, fermented dairy. A wonderful treat.", "price": 210, - "material": [ "milk", "junk" ], + "material": [ "milk", "junk", "dairy" ], "volume": 1, "phase": "liquid", "fun": 20, @@ -5682,7 +5682,7 @@ "calories": 365, "description": "Delicious, lumpy, white soup made of clams and potatoes. A taste of the lost glory of New England.", "price": 400, - "material": [ "flesh", "milk" ], + "material": [ "flesh", "milk", "dairy" ], "volume": 1, "charges": 2, "flags": [ "EATEN_HOT" ], @@ -6756,7 +6756,7 @@ "calories": 286, "description": "A tortilla filled with cheese and lightly grilled.", "price": 500, - "material": [ "milk" ], + "material": [ "milk", "dairy" ], "volume": 1, "charges": 2, "flags": [ "EATEN_HOT" ], @@ -6797,7 +6797,7 @@ "calories": 191, "description": "Fluffy and delicious pancakes with real maple syrup.", "price": 550, - "material": "wheat", + "material": [ "wheat", "dairy" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -6818,7 +6818,7 @@ "calories": 217, "description": "Fluffy and delicious pancakes with real maple syrup, made sweeter and healthier with the addition of wholesome fruit.", "price": 650, - "material": [ "wheat", "fruit" ], + "material": [ "wheat", "fruit", "dairy" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -6838,7 +6838,7 @@ "calories": 217, "description": "Fluffy and delicious pancakes with real maple syrup, with delicious chocolate baked right in.", "price": 700, - "material": [ "wheat", "junk" ], + "material": [ "wheat", "junk", "dairy" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -6859,7 +6859,7 @@ "calories": 391, "description": "Slices of bread dipped in a milk and egg mixture then fried.", "price": 600, - "material": [ "wheat", "milk", "egg" ], + "material": [ "wheat", "milk", "egg", "dairy" ], "volume": 1, "charges": 2, "flags": [ "EATEN_HOT" ], @@ -6878,7 +6878,7 @@ "calories": 321, "description": "Hey it's waffle time, it's waffle time. Won't you have some waffles of mine?", "price": 550, - "material": "wheat", + "material": [ "wheat", "dairy" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -6898,7 +6898,7 @@ "calories": 391, "description": "Crunchy and delicious waffles with real maple syrup, made sweeter and healthier with the addition of wholesome fruit.", "price": 600, - "material": [ "wheat", "fruit" ], + "material": [ "wheat", "fruit", "dairy" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -6917,7 +6917,7 @@ "calories": 347, "description": "Crunchy and delicious waffles with real maple syrup, with delicious chocolate baked right in.", "price": 650, - "material": [ "wheat", "junk" ], + "material": [ "wheat", "junk", "dairy" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -7179,7 +7179,7 @@ "calories": 139, "description": "A sweet and delicious baked pie with pure maple syrup.", "price": 1850, - "material": [ "wheat", "milk" ], + "material": [ "wheat", "milk", "dairy" ], "volume": 4, "charges": 6, "flags": [ "EATEN_HOT" ], @@ -7220,7 +7220,7 @@ "calories": 347, "description": "A delicious pizza with molten cheese on top.", "price": 990, - "material": [ "wheat", "milk" ], + "material": [ "wheat", "milk", "dairy" ], "volume": 8, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -7486,7 +7486,7 @@ "calories": 9, "description": "Dehydrated milk powder. Mix with water to make drinkable milk.", "price": 1100, - "material": [ "powder", "milk" ], + "material": [ "powder", "milk", "dairy" ], "volume": 1, "flags": [ "EDIBLE_FROZEN" ], "charges": 10, @@ -7759,7 +7759,7 @@ "calories": 330, "description": "A very old type of pasta made with several layers of lasagne sheets alternated with cheese, sauces and meats.", "price": 1000, - "material": [ "flesh", "wheat", "milk" ], + "material": [ "flesh", "wheat", "milk", "dairy" ], "volume": 12, "charges": 8, "flags": [ "EATEN_HOT", "FREEZERBURN" ], @@ -7772,7 +7772,7 @@ "copy-from": "lasagne", "name": "Luigi lasagne", "description": "A very old type of pasta made with several layers of lasagne sheets alternated with cheese, sauces and meats. Made better with human flesh.", - "material": [ "hflesh", "wheat", "milk" ] + "material": [ "hflesh", "wheat", "milk", "dairy" ] }, { "id": "mayonnaise", @@ -8189,7 +8189,7 @@ "calories": 304, "description": "A sandwich of minced meat and cheese with condiments. The apex of pre-cataclysm culinary achievement.", "price": 1000, - "material": [ "flesh", "wheat", "milk" ], + "material": [ "flesh", "wheat", "milk", "dairy" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT", "ALLERGEN_MILK" ], @@ -8202,7 +8202,7 @@ "copy-from": "cheeseburger", "name": "chump cheeseburger", "description": "A sandwich of minced human flesh and cheese with condiments. The apex of post-cataclysm cannibalistic culinary achievement.", - "material": [ "hflesh", "wheat", "milk" ] + "material": [ "hflesh", "wheat", "milk", "dairy" ] }, { "type": "COMESTIBLE", @@ -8328,7 +8328,7 @@ "calories": 260, "description": "A block of yellow processed cheese.", "price": 900, - "material": "milk", + "material": [ "milk", "dairy" ], "volume": 1, "charges": 4, "fun": 7, @@ -8348,7 +8348,7 @@ "calories": 174, "description": "Processed cheese spread.", "price": 650, - "material": [ "milk", "junk" ], + "material": [ "milk", "junk", "dairy" ], "volume": 1, "charges": 3, "flags": [ "EATEN_HOT" ], @@ -8369,7 +8369,7 @@ "calories": 35, "description": "Milk that has been curdled with vinegar and rennet. It still needs to be salted and drained of whey.", "price": 10, - "material": "milk", + "material": ["milk", "dairy"], "volume": 1, "phase": "liquid", "fun": -12 @@ -8390,7 +8390,7 @@ "calories": 260, "description": "Hard, dry cheese made to last, unlike modern processed cheese. Will make you thirsty though.", "price": 900, - "material": "milk", + "material": [ "milk", "dairy" ], "volume": 1, "charges": 3, "fun": 5 @@ -8880,7 +8880,7 @@ "calories": 104, "description": "Fried potatoes with delicious cheese smothered on top.", "price": 190, - "material": [ "junk", "milk" ], + "material": [ "junk", "milk", "dairy" ], "volume": 1, "charges": 3, "flags": [ "EATEN_HOT" ], @@ -9010,7 +9010,7 @@ "calories": 9, "description": "Crunchy sugar in chocolate capsules. Legal and stimmy.", "price": 100, - "material": "junk", + "material": [ "junk", "dairy" ], "volume": 0, "flags": [ "EDIBLE_FROZEN" ], "charges": 4, @@ -9445,7 +9445,7 @@ "calories": 347, "description": "A rich and tasty fish chowder from Scotland, made with preserved fish and creamy milk.", "price": 500, - "material": [ "flesh", "milk" ], + "material": [ "flesh", "milk", "dairy" ], "volume": 1, "phase": "liquid", "charges": 4, @@ -9624,7 +9624,7 @@ "calories": 260, "description": "Filling bread buns, taste good with tea on a Sunday morning breakfast.", "price": 550, - "material": "wheat", + "material": [ "wheat", "dairy" ], "volume": 3, "charges": 6, "flags": [ "EATEN_HOT" ], @@ -10328,7 +10328,7 @@ "calories": 69, "description": "Coffee milk is pretty much the official morning drink among many countries.", "price": 480, - "material": [ "milk", "water" ], + "material": [ "milk", "water", "dairy" ], "volume": 2, "phase": "liquid", "charges": 2, @@ -10351,7 +10351,7 @@ "calories": 69, "description": "Usually consumed in the mornings, milk tea is common among many countries.", "price": 450, - "material": [ "milk", "water" ], + "material": [ "milk", "water", "dairy" ], "volume": 2, "phase": "liquid", "charges": 2, @@ -10375,7 +10375,7 @@ "calories": 69, "description": "A traditional south Asian mixed-spice tea with milk.", "price": 475, - "material": [ "milk", "water" ], + "material": [ "milk", "water", "dairy" ], "volume": 1, "phase": "liquid", "flags": [ "EATEN_HOT" ], @@ -10416,7 +10416,7 @@ "calories": 608, "description": "A delicious grilled cheese sandwich, because everything is better with melted cheese.", "price": 550, - "material": [ "milk", "wheat" ], + "material": [ "milk", "wheat", "dairy" ], "volume": 1, "flags": [ "EATEN_HOT" ], "fun": 10, @@ -10429,7 +10429,7 @@ "name": "dudeluxe sandwich", "name_plural": "dudeluxe sandwiches", "description": "A sandwich of human flesh, vegetables, and cheese with condiments. Feast upon the souls of your enemies and tasty garden greens!", - "material": [ "hflesh", "veggy", "wheat", "milk" ] + "material": [ "hflesh", "veggy", "wheat", "milk", "dairy" ] }, { "type": "COMESTIBLE", @@ -10448,7 +10448,7 @@ "calories": 330, "description": "A sandwich of meat, vegetables, and cheese with condiments. Tasty and nutritious!", "price": 1200, - "material": [ "flesh", "veggy", "wheat", "milk" ], + "material": [ "flesh", "veggy", "wheat", "milk", "dairy" ], "volume": 1, "charges": 4, "fun": 12, @@ -10492,7 +10492,7 @@ "calories": 564, "description": "A simple cheese sandwich.", "price": 500, - "material": [ "milk", "wheat" ], + "material": [ "milk", "wheat", "dairy" ], "volume": 1, "fun": 8, "rot_spawn": "GROUP_CARRION" @@ -10767,7 +10767,7 @@ "calories": 391, "description": "Smooth and rich, this spoon-coating mix of milk, cream, and eggs is a popular traditional holiday drink. While often spiked, it is still delicious on its own. Meant to be stored cold, it will spoil rapidly.", "price": 40, - "material": [ "milk", "egg" ], + "material": [ "milk", "egg", "dairy" ], "volume": 1, "phase": "liquid", "charges": 2, @@ -10793,7 +10793,7 @@ "description": "Smooth and rich, this spoon-coating mixture of milk, cream, eggs, and booze is a popular traditional holiday drink. Having been fortified with alcohol, it will keep for a long time.", "price": 45, "//": "A 12-charge gallon currently goes for around US$4, and eggnog is a bit more expensive than that.", - "material": [ "milk", "alcohol", "egg" ], + "material": [ "milk", "alcohol", "egg", "dairy" ], "volume": 1, "phase": "liquid", "charges": 2, @@ -10813,7 +10813,7 @@ "price": 285, "phase": "liquid", "container": "bottle_plastic", - "material": [ "milk", "junk" ], + "material": [ "milk", "junk", "dairy" ], "symbol": "~", "color": "brown", "comestible_type": "DRINK", @@ -10835,7 +10835,7 @@ "price": 335, "phase": "liquid", "container": "bottle_plastic", - "material": [ "milk", "junk" ], + "material": [ "milk", "junk", "dairy" ], "symbol": "~", "color": "brown", "comestible_type": "DRINK", From 2a0c67110d949a9d64511c45f9923dc302988be7 Mon Sep 17 00:00:00 2001 From: Karthas077 Date: Thu, 1 Nov 2018 21:40:50 -0700 Subject: [PATCH 37/59] Temporary fix for Advanced Ecig Makes using an advanced ecig mirror the comestible affects or a regular ecig after consuming a charge of nicotine liquid. --- src/iuse.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/iuse.cpp b/src/iuse.cpp index 67ab183499346..78d78001ca80c 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -470,6 +470,8 @@ int iuse::ecig(player *p, item *it, bool, const tripoint& ) if (p->has_charges( "nicotine_liquid", 1 ) ) { p->add_msg_if_player(m_neutral, _("You inhale some vapor from your advanced electronic cigarette.")); p->use_charges( "nicotine_liquid", 1 ); + item dummy_ecig = item("ecig", int(calendar::turn)); + p->consume_effects(dummy_ecig); } else { p->add_msg_if_player(m_info, _("You don't have any nicotine liquid!")); return 0; From 5b88a213fce5d36ef6a8dbf58b0f28a46c295264 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Fri, 2 Nov 2018 07:35:14 -0700 Subject: [PATCH 38/59] astyle Co-Authored-By: Karthas077 --- src/iuse.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iuse.cpp b/src/iuse.cpp index 0afc12386a375..be8be3d00e77e 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -434,7 +434,7 @@ int iuse::ecig( player *p, item *it, bool, const tripoint & ) _( "You inhale some vapor from your advanced electronic cigarette." ) ); p->use_charges( "nicotine_liquid", 1 ); item dummy_ecig = item("ecig", int(calendar::turn)); - p->consume_effects(dummy_ecig); + p->consume_effects( dummy_ecig ); } else { p->add_msg_if_player( m_info, _( "You don't have any nicotine liquid!" ) ); return 0; From 8c2361da8c113292981bd0abc5fa4816d0eebfd4 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Fri, 2 Nov 2018 07:35:33 -0700 Subject: [PATCH 39/59] astyle and unneeded cast Co-Authored-By: Karthas077 --- src/iuse.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iuse.cpp b/src/iuse.cpp index be8be3d00e77e..d824e7de30339 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -433,7 +433,7 @@ int iuse::ecig( player *p, item *it, bool, const tripoint & ) p->add_msg_if_player( m_neutral, _( "You inhale some vapor from your advanced electronic cigarette." ) ); p->use_charges( "nicotine_liquid", 1 ); - item dummy_ecig = item("ecig", int(calendar::turn)); + item dummy_ecig = item( "ecig", calendar::turn ); p->consume_effects( dummy_ecig ); } else { p->add_msg_if_player( m_info, _( "You don't have any nicotine liquid!" ) ); From aac68970a96c1c074cfffdc8bd0a75ebf087a32e Mon Sep 17 00:00:00 2001 From: Rod995 Date: Sat, 3 Nov 2018 18:28:09 -0500 Subject: [PATCH 40/59] spooky double break --- src/game.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/game.cpp b/src/game.cpp index ff525ba59d376..05bf68b3fba8d 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -12619,12 +12619,13 @@ void game::process_artifact( item &it, player &p ) // Tears in reality are consumed too, but can't charge it. case ARTC_PORTAL: for( const tripoint &dest : m.points_in_radius( p.pos(), 1 ) ) { + m.remove_field( dest, fd_fatigue ); if( m.tr_at( dest ).loadid == tr_portal ) { add_msg( m_good, _( "The portal collapses!" ) ); m.remove_trap( dest ); it.charges++; + break; } - m.remove_field( dest, fd_fatigue ); } break; } From 1eea9c6e587c74e23b5d78805b8e7b489ed286e2 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Sun, 4 Nov 2018 02:14:46 +0000 Subject: [PATCH 41/59] Add summary 34 and a tiny fix. --- summary30.txt | 4 +-- summary34.txt | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 summary34.txt diff --git a/summary30.txt b/summary30.txt index 8e4f19f4e86d3..5671219c86c72 100644 --- a/summary30.txt +++ b/summary30.txt @@ -82,7 +82,7 @@ Infrastructure JSONized mapgen_basement_junk.cpp gunsafe Balance Remove kinetic bullet puller from paper cartridge uncraft recipe Balance Allow placement of reinforced machines through place_vending and fix the low amount of spawned items Infrastructure Astyling continues... -Balnace Raised 2x4 ingredient req from 1 to 2 for some arrows +Balanace Raised 2x4 ingredient req from 1 to 2 for some arrows Features Always save the latest created character as a template "Last Character". Interface Color NPC/Player background cyan when grabbed. Balance Added gunsmith kit to tools_gunsmith itemgroup @@ -97,4 +97,4 @@ Bugfixes Fix spiritual applying morale too soon Infrastructure Show that palettes can include toilets Bugfixes Remove ammo recipe uncraft duplicates Bugfixes Razorclaws avoid metal wreckage -I18N Translated sentence in veh_interact.cpp \ No newline at end of file +I18N Translated sentence in veh_interact.cpp diff --git a/summary34.txt b/summary34.txt new file mode 100644 index 0000000000000..75b69206ca670 --- /dev/null +++ b/summary34.txt @@ -0,0 +1,75 @@ +Infrastructure Removed dk and lt prefixes from enums in code +Infrastructure Removed dk and lt prefixes from strings in code +Content Second variant of s_bikeshop +Infrastructure Add tests that validate crafting container handling. +Balance Added CARGO flag and size to vehicle aisles +Interface Improved bionics UX +Infrastructure Add explicit namespace to calls to newin: +Infrastructure Remove unused function show_mutations_titlebar +Balance Forbid understanding the messages on the signs for illiterate characters +Infrastructure Obsoleted crude brick +Bugfixes Rad-immune player is now protected from zombie scientist's radiation beam +I18N Show localized monster attitude and size names +Mods Moved light and heavy snare kits to More Survival Tools mod +Content Canned meat can be heated up +Content Add MShockXotto+ tileset +Bugfixes Fix uimenu redraw +Infrastructure Add error checking and reporting to cata_tiles.cpp +Infrastructure Implement time_point and time_duration classes +Infrastructure Convert line endings of Xotto+ tileset to LF +Performance Speed up cache generation in z-level mode +Interface Rope, wire and barbed wire fences are now built and removed through the construction menu +Bugfixes Allow [r]eloading of watertight containers +Content Added restroom to s_arcade +Bugfixes Restricts minimum texture size to fix crash during division by zero +Content Added Tokarev pistol spawns +Content Added rack of obscure ammo to gunsmith store +Features Sawing metal long action +Balance Reduced monster spawn in school +Balance Switched safety glasses to OUTER layer +Balance Replaced 7.62x39mm M43 with 57-N-231, buffing it +Balance Buffed kevlar vest and SWAT armor +Balance Buffed .22 CB recoil to 39 +Balance Nerfed .38 Super to "damage": 27 +Content adds descriptions to (not all) furniture objects +Infrastructure Move hardcoded hospital mapgen to json +Content Small town buildings +Content Subway +Mods Added .50 BMG overrides to Extended Realistic Guns mod +Mods Craftable guns overhaul +Mods Removed and replaced antique_guns itemgroups from Extended Realistic Guns mod +Mods Restored the original recipes for modified CW-24/CW-24M, and updated them +Content Glock-17 And Glock Drum Magazines +Bugfixes hostile NPC unweild handcuffs exploit +Bugfixes Remove plastic material type from zombie pheromones. +Content Hallucination monsters are now described in extended description +Bugfixes Reach melee attacks with conductive weapons now will trigger the zapback +Bugfixes Vehicles shouldn't collide with hallucinations - take two +Features Add stimulant/painkiller overdose symptoms. +Interface horizontal emoticon style interface option +Balance Make all woods soup recipes the same +Bugfixes Make the special brownie a food +Content Added glazed tenderloin to house_patio +Balance Raised time required to craft radio activation mod from 1 minute to 15 minutes +Balance Buffd 700nx damage +Bugfixes Containers with food will be opened when player is feeding the npc with it +Bugfixes Don't consume cards if doors are already open +Bugfixes Don't turn nonflammable terrain with flammable furniture on it (such as chair on the rock floor) into dirt after burning +Balance Drawing own blood increases hunger and thirst and causes pain +Bugfixes Reduced zed move speed while underwater +Infrastructure Removed lots of unused static consts from mutation.cpp +Bugfixes Fix generation of subway stations and tunnels on Z-level -2 +Infrastructure Change most function signatures to use catacurses::window +Infrastructure Change various variables to be of type time_point / time_duration. +Bugfixes Prevented trading simplified active bombs and grenades to NPC +Bugfixes Make advanced electronic cigarette a drug +Content Added PERMEABLE and "connects_to": "WALL", to rebar cage and set move_cost to 0 +Bugfixes Make sandwiches non-reversible +Balance Autofire rebalance +Mods Added vehicle parts, items and recipes to Blaze Mod +Balance Made shopping carts' baskets unpassable +Mods Add "Mutant NPCs" mod. +Features Add trait groups. +Interface Use scrollbar at morale screen +Infrastructure Change catacurses::window to store a shared pointer +Infrastructure Extract events system to separate class From 6432e09e3c8ed919a559a31f7b45c33c8ae6d801 Mon Sep 17 00:00:00 2001 From: Lance Finfrock Date: Sat, 3 Nov 2018 20:27:33 -0600 Subject: [PATCH 42/59] Updating the fireman belt to allow axes and maces Allowing fire axes, war hammers, and maces to attach to a fireman belt. This change increases the volume that the fireman belt can hold to allow for the fire axe. --- data/json/items/armor.json | 2 +- data/json/items/melee.json | 4 ++-- data/json/items/tools.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/json/items/armor.json b/data/json/items/armor.json index eaaf24c9b92f6..af7f26d757a08 100644 --- a/data/json/items/armor.json +++ b/data/json/items/armor.json @@ -2687,7 +2687,7 @@ "type": "holster", "holster_prompt": "Attach what to belt loop?", "holster_msg": "You clip your %s to your %s", - "max_volume": 5, + "max_volume": 8, "max_weight": 3600, "draw_cost": 50, "flags": [ "BELT_CLIP" ] diff --git a/data/json/items/melee.json b/data/json/items/melee.json index bfc4efdf4d902..af47cdef1eda7 100644 --- a/data/json/items/melee.json +++ b/data/json/items/melee.json @@ -438,7 +438,7 @@ "//": "Craftable from steel, shouldn't be silver. A warhammer is essentially one end of a pickaxe with balancing weight on the other and crushes/pierces the armor.", "material": [ "iron", "wood" ], "techniques": [ "WBLOCK_1", "BRUTAL", "SWEEP" ], - "flags": [ "DURABLE_MELEE", "SPEAR", "NONCONDUCTIVE" ], + "flags": [ "DURABLE_MELEE", "SPEAR", "NONCONDUCTIVE", "BELT_CLIP" ], "volume": 5, "bashing": 20, "cutting": 20, @@ -963,7 +963,7 @@ "symbol": "/", "material": [ "iron", "wood" ], "techniques": [ "SWEEP" ], - "flags": [ "DURABLE_MELEE", "NONCONDUCTIVE" ], + "flags": [ "DURABLE_MELEE", "NONCONDUCTIVE", "BELT_CLIP" ], "volume": 5, "//": "Same total damage and slightly higher weight than a morningstar - exchanged.", "bashing": 37, diff --git a/data/json/items/tools.json b/data/json/items/tools.json index 9c1a9a2dd86aa..2f427883270c1 100644 --- a/data/json/items/tools.json +++ b/data/json/items/tools.json @@ -2755,7 +2755,7 @@ "color": "light_gray", "techniques": [ "WBLOCK_1", "BRUTAL", "SWEEP" ], "qualities": [ [ "AXE", 2 ], [ "BUTCHER", -30 ] ], - "flags": [ "DURABLE_MELEE", "NONCONDUCTIVE" ] + "flags": [ "DURABLE_MELEE", "NONCONDUCTIVE", "BELT_CLIP" ] }, { "id": "fire_drill", From 753b764301f421679a345893d0606f6a6ece7281 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Sun, 4 Nov 2018 02:29:25 +0000 Subject: [PATCH 43/59] Update summary30.txt --- summary30.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/summary30.txt b/summary30.txt index 5671219c86c72..8bf3dd47b392d 100644 --- a/summary30.txt +++ b/summary30.txt @@ -82,7 +82,7 @@ Infrastructure JSONized mapgen_basement_junk.cpp gunsafe Balance Remove kinetic bullet puller from paper cartridge uncraft recipe Balance Allow placement of reinforced machines through place_vending and fix the low amount of spawned items Infrastructure Astyling continues... -Balanace Raised 2x4 ingredient req from 1 to 2 for some arrows +Balance Raised 2x4 ingredient req from 1 to 2 for some arrows Features Always save the latest created character as a template "Last Character". Interface Color NPC/Player background cyan when grabbed. Balance Added gunsmith kit to tools_gunsmith itemgroup From 093614136ff499a6002b1cab56a6aeabac0c8598 Mon Sep 17 00:00:00 2001 From: Qrox Date: Sun, 4 Nov 2018 12:33:21 +0800 Subject: [PATCH 44/59] Fix assigned letter disappearing when taking weapon out of holster --- src/player.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/player.cpp b/src/player.cpp index a497b22ccbda7..98a8c6de0f3c8 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -11173,7 +11173,8 @@ bool player::wield_contents( item &container, int pos, bool penalties, int base_ container.contents.erase( target ); container.on_contents_changed(); - inv.assign_empty_invlet( weapon, *this, true ); + inv.update_invlet( weapon ); + inv.update_cache_with_item( weapon ); last_item = weapon.typeId(); /** From 27e6c560f40e574efb64e4dc0a8735a208904aae Mon Sep 17 00:00:00 2001 From: Mark Langsdorf Date: Sun, 30 Sep 2018 19:22:09 -0500 Subject: [PATCH 45/59] npctalk to JSON: Most other NPC dialogue into JSON Move a lot of other NPC talk into JSON, leaving only a few functions that can't easily be handled and the NPC combat and miscellaneous command interface in npctalk.cpp. --- data/json/npcs/TALK_COMMON_OTHER.json | 229 ++++++++++++++++++++++++++ src/npctalk.cpp | 215 ------------------------ 2 files changed, 229 insertions(+), 215 deletions(-) create mode 100644 data/json/npcs/TALK_COMMON_OTHER.json diff --git a/data/json/npcs/TALK_COMMON_OTHER.json b/data/json/npcs/TALK_COMMON_OTHER.json new file mode 100644 index 0000000000000..69ae51616a4ed --- /dev/null +++ b/data/json/npcs/TALK_COMMON_OTHER.json @@ -0,0 +1,229 @@ +[ + { + "id": "TALK_SHELTER", + "type": "talk_topic", + "dynamic_line": [ "Well, I guess it's just us.", "At least we've got shelter." ], + "responses": [ + { "text": "What should we do now?", "topic": "TALK_SHELTER_PLANS" }, + { "text": "Any tips?", "topic": "TALK_SHELTER_ADVICE" }, + { "text": "Can I do anything for you?", "topic": "TALK_MISSION_LIST" }, + { "text": "Want to travel with me?", "topic": "TALK_SUGGEST_FOLLOW", "condition": { "not": "npc_following" } }, + { "text": "Let's trade items.", "topic": "TALK_NONE", "effect": "start_trade" }, + { "text": "I can't leave the shelter without equipment.", "topic": "TALK_SHARE_EQUIPMENT" }, + { "text": "Well, bye.", "topic": "TALK_DONE" } + ] + }, + { + "id": "TALK_SHELTER_PLANS", + "type": "talk_topic", + "dynamic_line": [ + "I don't know, look for supplies and other survivors I guess.", + "Maybe we should start boarding up this place.", + "I suppose getting a car up and running should really be useful if we have to disappear quickly from here.", + "We could look for one of those farms out here. They can provide plenty of food and aren't close to the cities.", + "We should probably stay away from those cities, even if there's plenty of useful stuff there." + ], + "responses": [ { "text": "Hmm, okay.", "topic": "TALK_NONE" } ] + }, + { + "id": "TALK_SHELTER_ADVICE", + "type": "talk_topic", + "dynamic_line": { "give_hint": true }, + "responses": [ { "text": "Thanks!", "topic": "TALK_NONE" } ] + }, + { + "id": "TALK_SUGGEST_FOLLOW", + "type": "talk_topic", + "category": "CATEGORY_FOLLOW", + "dynamic_line": { + "npc_has_effect": "infected", + "yes": "Not until I get some antibiotics...", + "no": { + "npc_has_effect": "asked_to_follow", + "yes": "You asked me recently; ask again later.", + "no": "Why should I travel with you?" + } + }, + "responses": [ + { + "text": "Understood. I'll get those antibiotics.", + "topic": "TALK_NONE", + "condition": { "npc_has_effect": "infected" } + }, + { + "text": "Right, right, I'll ask later.", + "topic": "TALK_NONE", + "condition": { "npc_has_effect": "asked_to_follow" } + }, + { + "text": "I can keep you safe.", + "condition": { "not": { "or": [ { "npc_has_effect": "infected" }, { "npc_has_effect": "asked_to_follow" } ] } }, + "trial": { "type": "PERSUADE", "difficulty": 20, "mod": [ [ "FEAR", 8 ], [ "VALUE", 2 ], [ "TRUST", 2 ], [ "BRAVERY", -2 ] ] }, + "success": { "topic": "TALK_AGREE_FOLLOW", "effect": "follow", "opinion": { "trust": 1, "value": 1 } }, + "failure": { "topic": "TALK_DENY_FOLLOW", "effect": "deny_follow", "opinion": { "value": -1, "anger": 1 } } + }, + { + "text": "You can keep me safe.", + "condition": { "not": { "or": [ { "npc_has_effect": "infected" }, { "npc_has_effect": "asked_to_follow" } ] } }, + "trial": { + "type": "PERSUADE", + "difficulty": 0, + "mod": [ [ "ALTRUISM", 6 ], [ "POS_FEAR", -6 ], [ "BRAVERY", 2 ], [ "ANGER", -6 ], [ "VALUE", 2 ] ] + }, + "success": { "topic": "TALK_AGREE_FOLLOW", "effect": "follow", "opinion": { "value": -1 } }, + "failure": { "topic": "TALK_DENY_FOLLOW", "effect": "deny_follow", "opinion": { "fear": -1, "value": -1, "anger": 1 } } + }, + { + "text": "We're friends, aren't we?", + "condition": { "not": { "or": [ { "npc_has_effect": "infected" }, { "npc_has_effect": "asked_to_follow" } ] } }, + "trial": { "type": "PERSUADE", "difficulty": 0, "mod": [ [ "TRUST", 3 ], [ "VALUE", 3 ], [ "ANGER", -3 ] ] }, + "success": { "topic": "TALK_AGREE_FOLLOW", "effect": "follow", "opinion": { "trust": 2, "anger": -1 } }, + "failure": { "topic": "TALK_DENY_FOLLOW", "effect": "deny_follow", "opinion": { "trust": 1, "fear": -2, "value": -1, "anger": 1 } } + }, + { + "text": "I'll kill you if you don't.", + "condition": { "not": { "or": [ { "npc_has_effect": "infected" }, { "npc_has_effect": "asked_to_follow" } ] } }, + "trial": { "type": "INTIMIDATE", "difficulty": 20, "mod": [ [ "FEAR", 8 ], [ "VALUE", 2 ], [ "TRUST", 2 ], [ "BRAVERY", -2 ] ] }, + "success": { "topic": "TALK_AGREE_FOLLOW", "effect": "follow", "opinion": { "trust": -4, "fear": 3, "value": -1, "anger": 4 } }, + "failure": { "topic": "TALK_DENY_FOLLOW", "effect": "deny_follow", "opinion": { "trust": 4, "value": -5, "anger": 10 } } + } + ] + }, + { + "id": "TALK_AGREE_FOLLOW", + "type": "talk_topic", + "category": "CATEGORY_FOLLOW", + "dynamic_line": "You got it, I'm with you!", + "responses": [ { "text": "Awesome!", "topic": "TALK_FRIEND" }, { "text": "Okay, let's go!", "topic": "TALK_DONE" } ] + }, + { + "id": "TALK_DENY_FOLLOW", + "type": "talk_topic", + "category": "CATEGORY_FOLLOW", + "dynamic_line": "Yeah... I don't think so.", + "responses": [ { "text": "Oh, okay.", "topic": "TALK_DONE" } ] + }, + { + "id": "TALK_LEAVE", + "type": "talk_topic", + "dynamic_line": "You're really leaving?", + "responses": [ + { "text": "Yeah, I'm sure. Bye.", "topic": "TALK_DONE", "effect": "leave" }, + { "text": "Nah, I'm just kidding.", "topic": "TALK_NONE" } + ] + }, + { + "id": "TALK_LEADER", + "type": "talk_topic", + "dynamic_line": "What is it?", + "responses": [ + { "text": "How much further?", "topic": "TALK_HOW_MUCH_FURTHER", "condition": "npc_has_destination" }, + { + "text": "I'd like to lead for a while.", + "trial": { + "type": "PERSUADE", + "difficulty": 0, + "mod": [ [ "FEAR", 1 ], [ "VALUE", 1 ], [ "TRUST", 1 ], [ "BRAVERY", -1 ], [ "AGGRESSION", -1 ] ] + }, + "success": { "topic": "TALK_PLAYER_LEADS", "effect": "follow" }, + "failure": { "topic": "TALK_LEADER_STAYS", "opinion": { "value": -1, "anger": -1 } } + }, + { + "text": "Step aside. I'm leader now.", + "trial": { "type": "INTIMIDATE", "difficulty": 40 }, + "success": { "topic": "TALK_PLAYER_LEADS", "effect": "follow", "opinion": { "trust": -1, "fear": 1, "value": -1, "anger": 1 } }, + "failure": { "topic": "TALK_LEADER_STAYS", "opinion": { "trust": -1, "value": -1, "anger": 1 } } + }, + { "text": "Can I do anything for you?", "topic": "TALK_MISSION_LIST" }, + { "text": "Let's trade items.", "topic": "TALK_NONE", "effect": "start_trade" }, + { "text": "Let's go.", "topic": "TALK_DONE" } + ] + }, + { + "id": "TALK_PLAYER_LEADS", + "type": "talk_topic", + "dynamic_line": "Alright. You can lead now.", + "responses": [ + { "text": "Good. Something else...", "topic": "TALK_FRIEND" }, + { "text": "Alright, let's go.", "topic": "TALK_NONE" } + ] + }, + { + "id": "TALK_LEADER_STAYS", + "type": "talk_topic", + "responses": [ { "text": "Okay, okay.", "topic": "TALK_NONE" } ] + }, + { + "id": "TALK_DENY_GUARD", + "type": "talk_topic", + "dynamic_line": "Not a bloody chance, I'm going to get left behind!", + "responses": [ { "text": "Fine.", "topic": "TALK_NONE" } ] + }, + { + "id": "TALK_FRIEND_GUARD", + "type": "talk_topic", + "dynamic_line": "I'm on watch.", + "responses": [ + { "text": "I need you to come with me.", "topic": "TALK_FRIEND", "effect": "stop_guard" }, + { "text": "See you around.", "topic": "TALK_NONE" } + ] + }, + { + "id": "TALK_FRIEND_UNCOMFORTABLE", + "type": "talk_topic", + "dynamic_line": "I really don't feel comfortable doing so...", + "responses": [ { "text": "I'll give you some space.", "topic": "TALK_FRIEND" } ] + }, + { + "id": "TALK_DENY_PERSONAL", + "type": "talk_topic", + "dynamic_line": "I'd prefer to keep that to myself.", + "responses": [ { "text": "I understand...", "topic": "TALK_FRIEND" } ] + }, + { + "id": "TALK_GIVE_EQUIPMENT", + "type": "talk_topic", + "category": "CATEGORY_EQUIP", + "dynamic_line": "Okay, here you go.", + "responses": [ + { "text": "Thank you!", "topic": "TALK_NONE" }, + { "text": "Thanks! But can I have some more?", "topic": "TALK_SHARE_EQUIPMENT" }, + { "text": "Thanks, see you later!", "topic": "TALK_DONE" } + ] + }, + { + "id": "TALK_DENY_EQUIPMENT", + "type": "talk_topic", + "category": "CATEGORY_EQUIP", + "responses": [ + { "text": "Okay, okay, sorry.", "topic": "TALK_NONE" }, + { "text": "Seriously, give me more stuff!", "topic": "TALK_SHARE_EQUIPMENT" }, + { "text": "Okay, fine, bye.", "topic": "TALK_DONE" } + ] + }, + { + "id": "TALK_TRAIN_START", + "type": "talk_topic", + "dynamic_line": "Alright, let's begin.", + "responses": [ + { "text": "Sounds good.", "topic": "TALK_DONE", "condition": "at_safe_space", "effect": "start_training" }, + { + "text": "Okay. Lead the way.", + "topic": "TALK_DONE", + "condition": { "not": "at_safe_space" }, + "effect": "lead_to_safety" + }, + { "text": "No, we'll be okay here.", "topic": "TALK_TRAIN_FORCE", "condition": { "not": "at_safe_space" } }, + { "text": "On second thought, never mind.", "topic": "TALK_NONE" } + ] + }, + { + "id": "TALK_TRAIN_FORCE", + "type": "talk_topic", + "dynamic_line": "Alright, let's begin.", + "responses": [ + { "text": "Sounds good.", "topic": "TALK_DONE", "effect": "start_training" }, + { "text": "On second thought, never mind.", "topic": "TALK_NONE" } + ] + } +] diff --git a/src/npctalk.cpp b/src/npctalk.cpp index dd8d3dff3201d..573cc75ce931b 100644 --- a/src/npctalk.cpp +++ b/src/npctalk.cpp @@ -368,44 +368,14 @@ std::string dialogue::dynamic_line( const talk_topic &the_topic ) const if( topic == "TALK_NONE" || topic == "TALK_DONE" ) { return _( "Bye." ); - } else if( topic == "TALK_DELIVER_ASK" ) { return bulk_trade_inquire( *p, the_topic.item_type ); - - } else if( topic == "TALK_DELIVER_CONFIRM" ) { - return _( "Pleasure doing business!" ); - - } else if( topic == "TALK_SHELTER" ) { - switch( rng( 1, 2 ) ) { - case 1: - return _( "Well, I guess it's just us." ); - case 2: - return _( "At least we've got shelter." ); - } - } else if( topic == "TALK_SHELTER_ADVICE" ) { - return get_hint(); - } else if( topic == "TALK_SHELTER_PLANS" ) { - switch( rng( 1, 5 ) ) { - case 1: - return _( "I don't know, look for supplies and other survivors I guess." ); - case 2: - return _( "Maybe we should start boarding up this place." ); - case 3: - return _( "I suppose getting a car up and running should really be useful if we have to disappear quickly from here." ); - case 4: - return _( "We could look for one of those farms out here. They can provide plenty of food and aren't close to the cities." ); - case 5: - return _( "We should probably stay away from those cities, even if there's plenty of useful stuff there." ); - } - } else if( topic == "TALK_SHARE_EQUIPMENT" ) { if( p->has_effect( effect_asked_for_item ) ) { return _( "You just asked me for stuff; ask later." ); } return _( "Why should I share my equipment with you?" ); - } else if( topic == "TALK_GIVE_EQUIPMENT" ) { - return _( "Okay, here you go." ); } else if( topic == "TALK_DENY_EQUIPMENT" ) { if( p->op_of_u.anger >= p->hostile_anger_level() - 4 ) { @@ -426,40 +396,9 @@ std::string dialogue::dynamic_line( const talk_topic &the_topic ) const } else { return _( "Here's what I can teach you..." ); } - - } else if( topic == "TALK_TRAIN_START" ) { - return _( "Alright, let's begin." ); - - } else if( topic == "TALK_TRAIN_FORCE" ) { - return _( "Alright, let's begin." ); - - } else if( topic == "TALK_SUGGEST_FOLLOW" ) { - if( p->has_effect( effect_infection ) ) { - return _( "Not until I get some antibiotics..." ); - } - if( p->has_effect( effect_asked_to_follow ) ) { - return _( "You asked me recently; ask again later." ); - } - return _( "Why should I travel with you?" ); - - } else if( topic == "TALK_AGREE_FOLLOW" ) { - return _( "You got it, I'm with you!" ); - - } else if( topic == "TALK_DENY_FOLLOW" ) { - return _( "Yeah... I don't think so." ); - } else if( topic == "TALK_LEADER" ) { return _( "What is it?" ); - } else if( topic == "TALK_LEAVE" ) { - return _( "You're really leaving?" ); - - } else if( topic == "TALK_PLAYER_LEADS" ) { - return _( "Alright. You can lead now." ); - - } else if( topic == "TALK_LEADER_STAYS" ) { - return _( "No. I'm the leader here." ); - } else if( topic == "TALK_HOW_MUCH_FURTHER" ) { // TODO: this ignores the z-component const tripoint player_pos = p->global_omt_location(); @@ -482,21 +421,9 @@ std::string dialogue::dynamic_line( const talk_topic &the_topic ) const } else if( topic == "TALK_FRIEND" ) { return _( "What is it?" ); - } else if( topic == "TALK_FRIEND_GUARD" ) { - return _( "I'm on watch." ); - - } else if( topic == "TALK_DENY_GUARD" ) { - return _( "Not a bloody chance, I'm going to get left behind!" ); - } else if( topic == "TALK_DENY_TRAIN" ) { return the_topic.reason; - } else if( topic == "TALK_DENY_PERSONAL" ) { - return _( "I'd prefer to keep that to myself." ); - - } else if( topic == "TALK_FRIEND_UNCOMFORTABLE" ) { - return _( "I really don't feel comfortable doing so..." ); - } else if( topic == "TALK_COMBAT_COMMANDS" ) { std::stringstream status; // Prepending * makes this an action, not a phrase @@ -929,7 +856,6 @@ void dialogue::gen_responses( const talk_topic &the_topic ) } add_response( _( "Works for me." ), "TALK_DELIVER_CONFIRM", the_topic.item_type ); add_response( _( "Maybe later." ), "TALK_DONE" ); - } else if( topic == "TALK_DELIVER_CONFIRM" ) { bulk_trade_accept( *p, the_topic.item_type ); add_response_done( _( "You might be seeing more of me..." ) ); @@ -937,22 +863,6 @@ void dialogue::gen_responses( const talk_topic &the_topic ) if( g->u.charges_of( "bandages" ) > 0 ) { add_response( _( "Delivering bandages." ), "TALK_DELIVER_ASK", itype_id( "bandages" ) ); } - } else if( topic == "TALK_SHELTER" ) { - add_response( _( "What should we do now?" ), "TALK_SHELTER_PLANS" ); - add_response( _( "Any tips?" ), "TALK_SHELTER_ADVICE" ); - add_response( _( "Can I do anything for you?" ), "TALK_MISSION_LIST" ); - if( !p->is_following() ) { - add_response( _( "Want to travel with me?" ), "TALK_SUGGEST_FOLLOW" ); - } - add_response( _( "Let's trade items." ), "TALK_NONE", &talk_function::start_trade ); - add_response( _( "I can't leave the shelter without equipment..." ), "TALK_SHARE_EQUIPMENT" ); - add_response_done( _( "Well, bye." ) ); - } else if( topic == "TALK_SHELTER_ADVICE" ) { - add_response_none( _( "Thanks!" ) ); - } else if( topic == "TALK_SHELTER_PLANS" ) { - // TODO: Add _("follow me") - add_response_none( _( "Hmm, okay." ) ); - } else if( topic == "TALK_SHARE_EQUIPMENT" ) { if( p->has_effect( effect_asked_for_item ) ) { add_response_none( _( "Okay, fine." ) ); @@ -1003,16 +913,6 @@ void dialogue::gen_responses( const talk_topic &the_topic ) add_response_done( _( "Never mind, I'll do without. Bye." ) ); } - } else if( topic == "TALK_GIVE_EQUIPMENT" ) { - add_response_none( _( "Thank you!" ) ); - add_response( _( "Thanks! But can I have some more?" ), "TALK_SHARE_EQUIPMENT" ); - add_response_done( _( "Thanks, see you later!" ) ); - - } else if( topic == "TALK_DENY_EQUIPMENT" ) { - add_response_none( _( "Okay, okay, sorry." ) ); - add_response( _( "Seriously, give me more stuff!" ), "TALK_SHARE_EQUIPMENT" ); - add_response_done( _( "Okay, fine, bye." ) ); - } else if( topic == "TALK_TRAIN" ) { if( !g->u.backlog.empty() && g->u.backlog.front().id() == activity_id( "ACT_TRAIN" ) ) { player_activity &backlog = g->u.backlog.front(); @@ -1053,116 +953,10 @@ void dialogue::gen_responses( const talk_topic &the_topic ) } add_response_none( _( "Eh, never mind." ) ); - } else if( topic == "TALK_TRAIN_START" ) { - if( overmap_buffer.is_safe( p->global_omt_location() ) ) { - add_response( _( "Sounds good." ), "TALK_DONE", &talk_function::start_training ); - add_response_none( _( "On second thought, never mind." ) ); - } else { - add_response( _( "Okay. Lead the way." ), "TALK_DONE", &talk_function::lead_to_safety ); - add_response( _( "No, we'll be okay here." ), "TALK_TRAIN_FORCE" ); - add_response_none( _( "On second thought, never mind." ) ); - } - - } else if( topic == "TALK_TRAIN_FORCE" ) { - add_response( _( "Sounds good." ), "TALK_DONE", &talk_function::start_training ); - add_response_none( _( "On second thought, never mind." ) ); - - } else if( topic == "TALK_SUGGEST_FOLLOW" ) { - if( p->has_effect( effect_infection ) ) { - add_response_none( _( "Understood. I'll get those antibiotics." ) ); - } else if( p->has_effect( effect_asked_to_follow ) ) { - add_response_none( _( "Right, right, I'll ask later." ) ); - } else { - int strength = 4 * p->op_of_u.fear + p->op_of_u.value + p->op_of_u.trust + - ( 10 - p->personality.bravery ); - int weakness = 3 * ( p->personality.altruism - std::max( 0, p->op_of_u.fear ) ) + - p->personality.bravery - 3 * p->op_of_u.anger + 2 * p->op_of_u.value; - int friends = 2 * p->op_of_u.trust + 2 * p->op_of_u.value - 2 * p->op_of_u.anger; - RESPONSE( _( "I can keep you safe." ) ); - TRIAL( TALK_TRIAL_PERSUADE, strength * 2 ); - SUCCESS( "TALK_AGREE_FOLLOW" ); - SUCCESS_ACTION( &talk_function::follow ); - SUCCESS_OPINION( 1, 0, 1, 0, 0 ); - FAILURE( "TALK_DENY_FOLLOW" ); - FAILURE_ACTION( &talk_function::deny_follow ); - FAILURE_OPINION( 0, 0, -1, 1, 0 ); - RESPONSE( _( "You can keep me safe." ) ); - TRIAL( TALK_TRIAL_PERSUADE, weakness * 2 ); - SUCCESS( "TALK_AGREE_FOLLOW" ); - SUCCESS_ACTION( &talk_function::follow ); - SUCCESS_OPINION( 0, 0, -1, 0, 0 ); - FAILURE( "TALK_DENY_FOLLOW" ); - FAILURE_ACTION( &talk_function::deny_follow ); - FAILURE_OPINION( 0, -1, -1, 1, 0 ); - RESPONSE( _( "We're friends, aren't we?" ) ); - TRIAL( TALK_TRIAL_PERSUADE, friends * 1.5 ); - SUCCESS( "TALK_AGREE_FOLLOW" ); - SUCCESS_ACTION( &talk_function::follow ); - SUCCESS_OPINION( 2, 0, 0, -1, 0 ); - FAILURE( "TALK_DENY_FOLLOW" ); - FAILURE_ACTION( &talk_function::deny_follow ); - FAILURE_OPINION( -1, -2, -1, 1, 0 ); - RESPONSE( _( "I'll kill you if you don't." ) ); - TRIAL( TALK_TRIAL_INTIMIDATE, strength * 2 ); - SUCCESS( "TALK_AGREE_FOLLOW" ); - SUCCESS_ACTION( &talk_function::follow ); - SUCCESS_OPINION( -4, 3, -1, 4, 0 ); - FAILURE( "TALK_DENY_FOLLOW" ); - FAILURE_OPINION( -4, 0, -5, 10, 0 ); - } - - } else if( topic == "TALK_AGREE_FOLLOW" ) { - add_response( _( "Awesome!" ), "TALK_FRIEND" ); - add_response_done( _( "Okay, let's go!" ) ); - - } else if( topic == "TALK_DENY_FOLLOW" ) { - add_response_none( _( "Oh, okay." ) ); - - } else if( topic == "TALK_LEADER" ) { - int persuade = p->op_of_u.fear + p->op_of_u.value + p->op_of_u.trust - - p->personality.bravery - p->personality.aggression; - if( p->has_destination() ) { - add_response( _( "How much further?" ), "TALK_HOW_MUCH_FURTHER" ); - } - add_response( _( "I'm going to go my own way for a while." ), "TALK_LEAVE" ); - if( !p->has_effect( effect_asked_to_lead ) ) { - RESPONSE( _( "I'd like to lead for a while." ) ); - TRIAL( TALK_TRIAL_PERSUADE, persuade ); - SUCCESS( "TALK_PLAYER_LEADS" ); - SUCCESS_ACTION( &talk_function::follow ); - FAILURE( "TALK_LEADER_STAYS" ); - FAILURE_OPINION( 0, 0, -1, -1, 0 ); - RESPONSE( _( "Step aside. I'm leader now." ) ); - TRIAL( TALK_TRIAL_INTIMIDATE, 40 ); - SUCCESS( "TALK_PLAYER_LEADS" ); - SUCCESS_ACTION( &talk_function::follow ); - SUCCESS_OPINION( -1, 1, -1, 1, 0 ); - FAILURE( "TALK_LEADER_STAYS" ); - FAILURE_OPINION( -1, 0, -1, 1, 0 ); - } - add_response( _( "Can I do anything for you?" ), "TALK_MISSION_LIST" ); - add_response( _( "Let's trade items." ), "TALK_NONE", &talk_function::start_trade ); - add_response_done( _( "Let's go." ) ); - - } else if( topic == "TALK_LEAVE" ) { - add_response_none( _( "Nah, I'm just kidding." ) ); - add_response( _( "Yeah, I'm sure. Bye." ), "TALK_DONE", &talk_function::leave ); - - } else if( topic == "TALK_PLAYER_LEADS" ) { - add_response( _( "Good. Something else..." ), "TALK_FRIEND" ); - add_response_done( _( "Alright, let's go." ) ); - - } else if( topic == "TALK_LEADER_STAYS" ) { - add_response_none( _( "Okay, okay." ) ); - } else if( topic == "TALK_HOW_MUCH_FURTHER" ) { add_response_none( _( "Okay, thanks." ) ); add_response_done( _( "Let's keep moving." ) ); - } else if( topic == "TALK_FRIEND_GUARD" ) { - add_response( _( "I need you to come with me." ), "TALK_FRIEND", &talk_function::stop_guard ); - add_response_done( _( "See you around." ) ); - } else if( topic == "TALK_FRIEND" || topic == "TALK_GIVE_ITEM" || topic == "TALK_USE_ITEM" ) { if( p->is_following() ) { add_response( _( "Combat commands..." ), "TALK_COMBAT_COMMANDS" ); @@ -1238,15 +1032,6 @@ void dialogue::gen_responses( const talk_topic &the_topic ) add_response_done( _( "Bye." ) ); } - } else if( topic == "TALK_FRIEND_UNCOMFORTABLE" ) { - add_response( _( "I'll give you some space." ), "TALK_FRIEND" ); - - } else if( topic == "TALK_DENY_TRAIN" ) { - add_response( _( "Very well..." ), "TALK_FRIEND" ); - - } else if( topic == "TALK_DENY_PERSONAL" ) { - add_response( _( "I understand..." ), "TALK_FRIEND" ); - } else if( topic == "TALK_COMBAT_COMMANDS" ) { add_response( _( "Change your engagement rules..." ), "TALK_COMBAT_ENGAGEMENT" ); add_response( _( "Change your aiming rules..." ), "TALK_AIM_RULES" ); From aa8180b59f2df0439dd3bc7489862e31e564fcc8 Mon Sep 17 00:00:00 2001 From: Mark Langsdorf Date: Sun, 30 Sep 2018 19:22:51 -0500 Subject: [PATCH 46/59] npctalk to JSON: remove some obsolete functions Now that a lot of dialogue has moved to JSON, these two #defines are obsolete and can be removed. --- src/npctalk.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/npctalk.cpp b/src/npctalk.cpp index 573cc75ce931b..75531edd8c13d 100644 --- a/src/npctalk.cpp +++ b/src/npctalk.cpp @@ -92,9 +92,6 @@ static std::map json_talk_topics; #define SUCCESS_ACTION(func) ret.back().success.set_effect( func ) #define FAILURE_ACTION(func) ret.back().failure.set_effect( func ) -#define SUCCESS_ACTION_CONSEQUENCE(func, con) ret.back().success.set_effect_consequence( func, con ) -#define FAILURE_ACTION_CONSEQUENCE(func, con) ret.back().failure.set_effect_consequence( func, con ) - #define dbg(x) DebugLog((DebugLevel)(x),D_GAME) << __FILE__ << ":" << __LINE__ << ": " int topic_category( const talk_topic &topic ); @@ -808,7 +805,6 @@ void dialogue::gen_responses( const talk_topic &the_topic ) break; } } - } else if( topic == "TALK_MISSION_SUCCESS" ) { int mission_value = 0; if( miss == nullptr ) { From 1823606ccfeb52f725a1aff196a6060811f97dba Mon Sep 17 00:00:00 2001 From: Mark Langsdorf Date: Sun, 14 Oct 2018 07:56:50 -0500 Subject: [PATCH 47/59] npctalk to JSON: Remove hardcoded prices Remove the hardcoded prices from buy_ and replace them with "u_spend_cash" effects. Incidentally, clean up the Refugee Ranch service prices to match the dialogue. --- data/json/npcs/TALK_REFUGE_RANCH.json | 27 ++++++++++++++++----------- doc/NPCs.md | 12 ++++++------ src/npctalk_funcs.cpp | 6 ------ 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/data/json/npcs/TALK_REFUGE_RANCH.json b/data/json/npcs/TALK_REFUGE_RANCH.json index 14df128d6ca59..f3e17911f1f2c 100644 --- a/data/json/npcs/TALK_REFUGE_RANCH.json +++ b/data/json/npcs/TALK_REFUGE_RANCH.json @@ -100,12 +100,17 @@ "no": "The rate is a bit steep but I still have my quotas that I need to fulfill. The logs will be dropped off in the garage at the entrance to the camp. I'll need a bit of time before I can deliver another load." }, "responses": [ - { "text": "[$2000, 1d] 10 logs", "topic": "TALK_DONE", "effect": "buy_10_logs", "condition": { "npc_service": 2000 } }, + { + "text": "[$2000, 1d] 10 logs", + "topic": "TALK_DONE", + "effect": [ "buy_10_logs", { "u_spend_cash": 200000 } ], + "condition": { "npc_service": 200000 } + }, { "text": "[$12000, 7d] 100 logs", "topic": "TALK_DONE", - "effect": "buy_100_logs", - "condition": { "npc_service": 12000 } + "effect": [ "buy_100_logs", { "u_spend_cash": 1200000 } ], + "condition": { "npc_service": 1200000 } }, { "text": "Maybe later.", "topic": "TALK_RANCH_WOODCUTTER", "condition": "npc_available" }, { "text": "I'll be back later.", "topic": "TALK_RANCH_WOODCUTTER" } @@ -265,14 +270,14 @@ { "text": "[$200, 30m] I need you to patch me up.", "topic": "TALK_DONE", - "effect": "give_aid", - "condition": { "npc_service": 200 } + "effect": [ "give_aid", { "u_spend_cash": 20000 } ], + "condition": { "npc_service": 20000 } }, { "text": "[$500, 1h] I need you to patch me up.", "topic": "TALK_DONE", - "effect": "give_all_aid", - "condition": { "npc_service": 200 } + "effect": [ "give_all_aid", { "u_spend_cash": 50000 } ], + "condition": { "npc_service": 50000 } }, { "text": "I should be fine.", "topic": "TALK_RANCH_NURSE" } ] @@ -429,14 +434,14 @@ { "text": "[$5] I'll have a shave", "topic": "TALK_RANCH_BARBER_CUT", - "effect": "buy_shave", - "condition": { "npc_service": 5 } + "effect": [ "buy_shave", { "u_spend_cash": 500 } ], + "condition": { "npc_service": 500 } }, { "text": "[$10] I'll get a haircut", "topic": "TALK_RANCH_BARBER_CUT", - "effect": "buy_haircut", - "condition": { "npc_service": 10 } + "effect": [ "buy_haircut", { "u_spend_cash": 1000 } ], + "condition": { "npc_service": 1000 } }, { "text": "Maybe another time...", "topic": "TALK_DONE" } ] diff --git a/doc/NPCs.md b/doc/NPCs.md index e625f8ef99c9b..9ff3d1217ee8e 100644 --- a/doc/NPCs.md +++ b/doc/NPCs.md @@ -332,22 +332,22 @@ Ends the conversation and makes the NPC hostile, adds a message that character s Allows your character to select items from the NPC's inventory and transfer them to your inventory. ### give_aid -Removes $200 from your character's cash and removes all bites, infection, and bleeding from your character's body and heals 10-25 HP of injury on each of your character's body parts. +Removes all bites, infection, and bleeding from your character's body and heals 10-25 HP of injury on each of your character's body parts. ### give_aid_all -Removes $300 from your character's cash and performs give_aid on each of your character's NPC allies in range. +Performs give_aid on each of your character's NPC allies in range. ### buy_haircut -Removes $10 from your character's cash and gives your character a haircut morale boost for 12 hours. +Gives your character a haircut morale boost for 12 hours. ### buy_shave -Removes $5 from your character's cash and gives your character a shave morale boost for 6 hours. +Gives your character a shave morale boost for 6 hours. ### buy_10_logs -Removes $2000 from your character's cash, places 10 logs in the ranch garage, and makes the NPC unavailable for 1 day. +Places 10 logs in the ranch garage, and makes the NPC unavailable for 1 day. ### buy_100_logs -Removes $12000 from your character's cash, places 100 logs in the ranch garage, and makes the NPC unavailable for 7 days. +Places 100 logs in the ranch garage, and makes the NPC unavailable for 7 days. ### bionic_install The NPC installs a bionic from your character's inventory onto your character, using very high skill, and charging you according to the operation's difficulty. diff --git a/src/npctalk_funcs.cpp b/src/npctalk_funcs.cpp index 23eee4f7160d6..d096863f2abdf 100644 --- a/src/npctalk_funcs.cpp +++ b/src/npctalk_funcs.cpp @@ -350,7 +350,6 @@ void talk_function::give_equipment( npc &p ) void talk_function::give_aid( npc &p ) { - g->u.cash -= 20000; p.add_effect( effect_currently_busy, 30_minutes ); body_part bp_healed; for( int i = 0; i < num_hp_parts; i++ ) { @@ -372,7 +371,6 @@ void talk_function::give_aid( npc &p ) void talk_function::give_all_aid( npc &p ) { - g->u.cash -= 30000; p.add_effect( effect_currently_busy, 30_minutes ); give_aid( p ); body_part bp_healed; @@ -398,7 +396,6 @@ void talk_function::give_all_aid( npc &p ) void talk_function::buy_haircut( npc &p ) { g->u.add_morale( MORALE_HAIRCUT, 5, 5, 720_minutes, 3_minutes ); - g->u.cash -= 1000; g->u.assign_activity( activity_id( "ACT_WAIT_NPC" ), 300 ); g->u.activity.str_values.push_back( p.name ); add_msg( m_good, _( "%s gives you a decent haircut..." ), p.name ); @@ -407,7 +404,6 @@ void talk_function::buy_haircut( npc &p ) void talk_function::buy_shave( npc &p ) { g->u.add_morale( MORALE_SHAVE, 10, 10, 360_minutes, 3_minutes ); - g->u.cash -= 500; g->u.assign_activity( activity_id( "ACT_WAIT_NPC" ), 100 ); g->u.activity.str_values.push_back( p.name ); add_msg( m_good, _( "%s gives you a decent shave..." ), p.name ); @@ -436,7 +432,6 @@ void talk_function::buy_10_logs( npc &p ) bay.save(); p.add_effect( effect_currently_busy, 1_days ); - g->u.cash -= 200000; add_msg( m_good, _( "%s drops the logs off in the garage..." ), p.name ); } @@ -463,7 +458,6 @@ void talk_function::buy_100_logs( npc &p ) bay.save(); p.add_effect( effect_currently_busy, 7_days ); - g->u.cash -= 1200000; add_msg( m_good, _( "%s drops the logs off in the garage..." ), p.name ); } From 56fd6f364dbbf1a06d3c6f3e9513515edd3d9456 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Sun, 4 Nov 2018 11:22:27 -0500 Subject: [PATCH 48/59] Update data/mods/More_Locations/factory/factory_be_gate_01.json Co-Authored-By: y2s82 --- data/mods/More_Locations/factory/factory_be_gate_01.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/mods/More_Locations/factory/factory_be_gate_01.json b/data/mods/More_Locations/factory/factory_be_gate_01.json index 41b5eec428bb3..e2c182af5afa6 100644 --- a/data/mods/More_Locations/factory/factory_be_gate_01.json +++ b/data/mods/More_Locations/factory/factory_be_gate_01.json @@ -43,7 +43,7 @@ }, "mapping": { "H": { - "item": { "item": "zinc_powder", "count": 50 }, + "item": { "item": "chem_zinc_powder", "count": 50 } } } } From 3b9064edb763f7c31105ba6c94268fd060d75b02 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Sun, 4 Nov 2018 22:46:52 +0300 Subject: [PATCH 49/59] Update newcharacter.cpp --- src/newcharacter.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/newcharacter.cpp b/src/newcharacter.cpp index 3aeeb16020166..de014b54c0d21 100644 --- a/src/newcharacter.cpp +++ b/src/newcharacter.cpp @@ -204,12 +204,9 @@ matype_id choose_ma_style( const character_type type, const std::vector Date: Sun, 4 Nov 2018 18:54:30 -0500 Subject: [PATCH 50/59] Update armor.json --- data/json/items/armor.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/armor.json b/data/json/items/armor.json index f95ef91f830b4..d045a7f4bf3db 100644 --- a/data/json/items/armor.json +++ b/data/json/items/armor.json @@ -4067,7 +4067,7 @@ "copy-from": "hat_fur", "name": "faux fur hat", "description": "A stylish hat made of faux fur. Like real fur, but without the suffering, if the tag is to be believed. Very warm.", - "material": [ "fur" ], + "material": [ "faux_fur", "cotton" ], "covers": [ "HEAD" ], "flags": [ "FANCY" ], "warmth": 60 From ba30b50a1b450042872043109e9106cba064e82c Mon Sep 17 00:00:00 2001 From: Positronic-Girl <43492737+Positronic-Girl@users.noreply.github.com> Date: Sun, 4 Nov 2018 18:40:52 -0600 Subject: [PATCH 51/59] Update construction.json --- data/json/construction.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/data/json/construction.json b/data/json/construction.json index 9cf01525db204..2158f0d48e0ea 100644 --- a/data/json/construction.json +++ b/data/json/construction.json @@ -55,7 +55,7 @@ "time" : 60, "qualities": [ [ { "id": "AXE", "level": 2 }, { "id": "SAW_W", "level": 1 } - ] ], + ] ],F "pre_terrain" : "t_trunk", "post_terrain" : "t_dirt", "post_special" : "done_trunk_plank" @@ -2004,7 +2004,7 @@ "category" : "DIG", "required_skills" : [ [ "fabrication", 5 ], [ "survival", 3 ] ], "time" : 420, - "qualities": [ [ { "id": "AXE", "level": 2 } ], + "qualities": [ [ { "id": "AXE", "level": 2 }, { "id": "SAW_W", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ], [ { "id": "DIG", "level": 2 } ] ], @@ -2023,7 +2023,7 @@ "category" : "DIG", "required_skills" : [ [ "fabrication", 6 ], [ "survival", 4 ] ], "time" : 480, - "qualities": [ [ { "id": "AXE", "level": 2 } ], + "qualities": [ [ { "id": "AXE", "level": 2 }, { "id": "SAW_W", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ], [ { "id": "DIG", "level": 2 } ] ], @@ -2043,7 +2043,7 @@ "category" : "DIG", "required_skills" : [ [ "fabrication", 6 ], [ "survival", 4 ] ], "time" : 480, - "qualities": [ [ { "id": "AXE", "level": 2 } ], + "qualities": [ [ { "id": "AXE", "level": 2 }, { "id": "SAW_W", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ], [ { "id": "DIG", "level": 2 } ] ], From 6891a0416b300664b76118289229c6c7d9b812ad Mon Sep 17 00:00:00 2001 From: Positronic-Girl <43492737+Positronic-Girl@users.noreply.github.com> Date: Sun, 4 Nov 2018 19:09:25 -0600 Subject: [PATCH 52/59] Update construction.json --- data/json/construction.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/construction.json b/data/json/construction.json index 2158f0d48e0ea..27726f9e155a2 100644 --- a/data/json/construction.json +++ b/data/json/construction.json @@ -55,7 +55,7 @@ "time" : 60, "qualities": [ [ { "id": "AXE", "level": 2 }, { "id": "SAW_W", "level": 1 } - ] ],F + ] ], "pre_terrain" : "t_trunk", "post_terrain" : "t_dirt", "post_special" : "done_trunk_plank" From 996d0c4c2334a4adac6c308909bb511c3376ee4a Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Mon, 5 Nov 2018 11:33:31 +0300 Subject: [PATCH 53/59] Update newcharacter.cpp --- src/newcharacter.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/newcharacter.cpp b/src/newcharacter.cpp index de014b54c0d21..5d02af8356235 100644 --- a/src/newcharacter.cpp +++ b/src/newcharacter.cpp @@ -204,15 +204,18 @@ matype_id choose_ma_style( const character_type type, const std::vector Date: Mon, 5 Nov 2018 11:40:35 +0300 Subject: [PATCH 54/59] Update newcharacter.cpp --- src/newcharacter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/newcharacter.cpp b/src/newcharacter.cpp index 5d02af8356235..296fd92daab73 100644 --- a/src/newcharacter.cpp +++ b/src/newcharacter.cpp @@ -210,7 +210,7 @@ matype_id choose_ma_style( const character_type type, const std::vector Date: Mon, 5 Nov 2018 12:09:09 +0300 Subject: [PATCH 55/59] Update newcharacter.cpp --- src/newcharacter.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/newcharacter.cpp b/src/newcharacter.cpp index 296fd92daab73..59df02ed6c8c8 100644 --- a/src/newcharacter.cpp +++ b/src/newcharacter.cpp @@ -210,7 +210,8 @@ matype_id choose_ma_style( const character_type type, const std::vector Date: Mon, 5 Nov 2018 13:16:03 +0400 Subject: [PATCH 56/59] translate_markers for color names --- src/color.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/color.cpp b/src/color.cpp index 4861c7cb829b5..a1afb81311a0b 100644 --- a/src/color.cpp +++ b/src/color.cpp @@ -486,13 +486,13 @@ void init_colors() // The short color codes (e.g. "br") are intentionally untranslatable. color_by_string_map = { - {"br", {c_brown, _( "brown" )}}, {"lg", {c_light_gray, _( "light gray" )}}, - {"dg", {c_dark_gray, _( "dark gray" )}}, {"r", {c_light_red, _( "light red" )}}, - {"R", {c_red, _( "red" )}}, {"g", {c_light_green, _( "light green" )}}, - {"G", {c_green, _( "green" )}}, {"b", {c_light_blue, _( "light blue" )}}, - {"B", {c_blue, _( "blue" )}}, {"W", {c_white, _( "white" )}}, - {"C", {c_cyan, _( "cyan" )}}, {"c", {c_light_cyan, _( "light cyan" )}}, - {"P", {c_pink, _( "pink" )}}, {"m", {c_magenta, _( "magenta" )}} + {"br", {c_brown, translate_marker( "brown" )}}, {"lg", {c_light_gray, translate_marker( "light gray" )}}, + {"dg", {c_dark_gray, translate_marker( "dark gray" )}}, {"r", {c_light_red, translate_marker( "light red" )}}, + {"R", {c_red, translate_marker( "red" )}}, {"g", {c_light_green, translate_marker( "light green" )}}, + {"G", {c_green, translate_marker( "green" )}}, {"b", {c_light_blue, translate_marker( "light blue" )}}, + {"B", {c_blue, translate_marker( "blue" )}}, {"W", {c_white, translate_marker( "white" )}}, + {"C", {c_cyan, translate_marker( "cyan" )}}, {"c", {c_light_cyan, translate_marker( "light cyan" )}}, + {"P", {c_pink, translate_marker( "pink" )}}, {"m", {c_magenta, translate_marker( "magenta" )}} }; } From dc834fecf636027f3f18f811e455dbe9288c48ea Mon Sep 17 00:00:00 2001 From: AMurkin Date: Mon, 5 Nov 2018 14:48:26 +0400 Subject: [PATCH 57/59] Add *.code-workspace to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 63906ca162fec..2fbca40bf5209 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,7 @@ Debug*/ *.user *.vcxproj.filters .vscode/ +*.code-workspace # Temporary and backup files *~ From 097b59b4952bfccb948d4fe9e2416ee12c1b3b9c Mon Sep 17 00:00:00 2001 From: AMurkin Date: Mon, 5 Nov 2018 14:55:54 +0400 Subject: [PATCH 58/59] Fix comestibles.json format --- data/json/items/comestibles.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/items/comestibles.json b/data/json/items/comestibles.json index 8d5d5e82cbb8c..d544602638bba 100644 --- a/data/json/items/comestibles.json +++ b/data/json/items/comestibles.json @@ -5335,7 +5335,7 @@ "calories": 130, "description": "Delicious fermented dairy. It tastes of vanilla.", "price": 190, - "material": [ "milk", "dairy"], + "material": [ "milk", "dairy" ], "volume": 1, "phase": "liquid", "flags": [ "FREEZERBURN" ], @@ -8371,7 +8371,7 @@ "calories": 35, "description": "Milk that has been curdled with vinegar and rennet. It still needs to be salted and drained of whey.", "price": 10, - "material": ["milk", "dairy"], + "material": [ "milk", "dairy" ], "volume": 1, "phase": "liquid", "fun": -12 From a21c20e8ab90c143754d43abf46a4a5743962612 Mon Sep 17 00:00:00 2001 From: AMurkin Date: Mon, 5 Nov 2018 17:04:10 +0400 Subject: [PATCH 59/59] Dairy -> milk --- data/json/items/comestibles.json | 100 +++++++++++++++---------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/data/json/items/comestibles.json b/data/json/items/comestibles.json index d544602638bba..7b8606e63c273 100644 --- a/data/json/items/comestibles.json +++ b/data/json/items/comestibles.json @@ -384,7 +384,7 @@ "description": "Baby cow food, appropriated for adult humans. Spoils rapidly.", "price": 38, "//": "A 12-charge gallon currently goes for around US$4.", - "material": [ "milk", "dairy" ], + "material": [ "milk" ], "volume": 1, "phase": "liquid", "flags": [ "EATEN_COLD" ], @@ -405,7 +405,7 @@ "calories": 95, "description": "Baby cow food, appropriated for adult humans. Having been canned, this milk should last for a very long time.", "price": 700, - "material": [ "milk", "junk", "dairy" ], + "material": [ "milk", "junk" ], "volume": 1, "phase": "liquid", "fun": 3 @@ -1130,7 +1130,7 @@ "calories": 130, "description": "Sweetened coffee and whiskey topped with milk. Start your day the closeted alcoholic way!", "price": 500, - "material": [ "alcohol", "water", "milk", "dairy" ], + "material": [ "alcohol", "water", "milk" ], "volume": 1, "phase": "liquid", "fun": 20, @@ -1657,7 +1657,7 @@ "calories": 35, "description": "A chocolate flavored beverage made of artificial flavoring and milk byproducts. Shelf stable and vaguely appetizing even when lukewarm.", "price": 100, - "material": [ "junk", "milk", "dairy" ], + "material": [ "junk", "milk" ], "volume": 1, "phase": "liquid", "flags": [ "EATEN_COLD" ], @@ -3121,7 +3121,7 @@ "calories": 104, "description": "Salted chips made from corn tortillas, now with cheese. Could stand to have some meat.", "price": 250, - "material": [ "junk", "milk", "dairy" ], + "material": [ "junk", "milk" ], "volume": 1, "charges": 3, "flags": [ "EATEN_HOT" ], @@ -3174,7 +3174,7 @@ "calories": 208, "description": "Salted chips made from corn tortillas with ground meat and smothered in cheese. Delicious.", "price": 300, - "material": [ "flesh", "milk", "junk", "dairy" ], + "material": [ "flesh", "milk", "junk" ], "volume": 1, "charges": 3, "flags": [ "EATEN_HOT" ], @@ -3188,7 +3188,7 @@ "name": "niño nachos with cheese", "name_plural": "niño nachos with cheese", "description": "Salted chips made from corn tortillas with human flesh and smothered in cheese. Delicious.", - "material": [ "hflesh", "milk", "junk", "dairy" ] + "material": [ "hflesh", "milk", "junk" ] }, { "type": "COMESTIBLE", @@ -4708,7 +4708,7 @@ "calories": 130, "description": "Delicious hickory nut ambrosia. A drink worthy of the gods.", "price": 100, - "material": [ "nut", "milk", "dairy" ], + "material": [ "nut", "milk" ], "volume": 1, "phase": "liquid", "charges": 4, @@ -5150,7 +5150,7 @@ "calories": 130, "description": "A small, microwaveable steak & cheese burrito, like those found at gas stations. Not as appetizing or nutritious as it would be if heated up.", "price": 200, - "material": [ "flesh", "junk", "milk", "dairy" ], + "material": [ "flesh", "junk", "milk" ], "volume": 1, "fun": -3, "rot_spawn": "GROUP_CARRION" @@ -5169,7 +5169,7 @@ "calories": 434, "description": "A small, microwaveable steak & cheese burrito, like those found at gas stations. It's tastier and more filling, but will also spoil quickly.", "price": 90, - "material": [ "flesh", "junk", "milk", "dairy" ], + "material": [ "flesh", "junk", "milk" ], "volume": 1, "flags": [ "EATEN_HOT" ], "fun": 5, @@ -5267,7 +5267,7 @@ "calories": 434, "description": "When the cheese starts flowing, Kraft gets your noodle going.", "price": 380, - "material": [ "wheat", "milk", "dairy" ], + "material": [ "wheat", "milk" ], "volume": 4, "charges": 2, "flags": [ "EATEN_HOT", "TRADER_AVOID", "FREEZERBURN" ], @@ -5289,7 +5289,7 @@ "calories": 260, "description": "Some mac and cheese with ground meat added, enhancing the flavor and the nutritional value.", "price": 490, - "material": [ "wheat", "flesh", "milk", "dairy" ], + "material": [ "wheat", "flesh", "milk" ], "volume": 4, "charges": 4, "flags": [ "EATEN_HOT", "FREEZERBURN" ], @@ -5302,7 +5302,7 @@ "copy-from": "macaroni_helper", "name": "hobo helper", "description": "Some mac and cheese with ground human flesh added. So good it's like murder.", - "material": [ "wheat", "hflesh", "milk", "dairy" ] + "material": [ "wheat", "hflesh", "milk" ] }, { "type": "COMESTIBLE", @@ -5335,7 +5335,7 @@ "calories": 130, "description": "Delicious fermented dairy. It tastes of vanilla.", "price": 190, - "material": [ "milk", "dairy" ], + "material": [ "milk" ], "volume": 1, "phase": "liquid", "flags": [ "FREEZERBURN" ], @@ -5355,7 +5355,7 @@ "calories": 87, "description": "Sugary, fermented dairy. A wonderful treat.", "price": 210, - "material": [ "milk", "junk", "dairy" ], + "material": [ "milk", "junk" ], "volume": 1, "phase": "liquid", "fun": 20, @@ -5682,7 +5682,7 @@ "calories": 365, "description": "Delicious, lumpy, white soup made of clams and potatoes. A taste of the lost glory of New England.", "price": 400, - "material": [ "flesh", "milk", "dairy" ], + "material": [ "flesh", "milk" ], "volume": 1, "charges": 2, "flags": [ "EATEN_HOT" ], @@ -6756,7 +6756,7 @@ "calories": 286, "description": "A tortilla filled with cheese and lightly grilled.", "price": 500, - "material": [ "milk", "dairy" ], + "material": [ "milk" ], "volume": 1, "charges": 2, "flags": [ "EATEN_HOT" ], @@ -6797,7 +6797,7 @@ "calories": 191, "description": "Fluffy and delicious pancakes with real maple syrup.", "price": 550, - "material": [ "wheat", "dairy" ], + "material": [ "wheat", "milk" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -6818,7 +6818,7 @@ "calories": 217, "description": "Fluffy and delicious pancakes with real maple syrup, made sweeter and healthier with the addition of wholesome fruit.", "price": 650, - "material": [ "wheat", "fruit", "dairy" ], + "material": [ "wheat", "fruit", "milk" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -6838,7 +6838,7 @@ "calories": 217, "description": "Fluffy and delicious pancakes with real maple syrup, with delicious chocolate baked right in.", "price": 700, - "material": [ "wheat", "junk", "dairy" ], + "material": [ "wheat", "junk", "milk" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -6859,7 +6859,7 @@ "calories": 391, "description": "Slices of bread dipped in a milk and egg mixture then fried.", "price": 600, - "material": [ "wheat", "milk", "egg", "dairy" ], + "material": [ "wheat", "milk", "egg" ], "volume": 1, "charges": 2, "flags": [ "EATEN_HOT" ], @@ -6878,7 +6878,7 @@ "calories": 321, "description": "Hey it's waffle time, it's waffle time. Won't you have some waffles of mine?", "price": 550, - "material": [ "wheat", "dairy" ], + "material": [ "wheat", "milk" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -6898,7 +6898,7 @@ "calories": 391, "description": "Crunchy and delicious waffles with real maple syrup, made sweeter and healthier with the addition of wholesome fruit.", "price": 600, - "material": [ "wheat", "fruit", "dairy" ], + "material": [ "wheat", "fruit", "milk" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -6917,7 +6917,7 @@ "calories": 347, "description": "Crunchy and delicious waffles with real maple syrup, with delicious chocolate baked right in.", "price": 650, - "material": [ "wheat", "junk", "dairy" ], + "material": [ "wheat", "junk", "milk" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -7179,7 +7179,7 @@ "calories": 139, "description": "A sweet and delicious baked pie with pure maple syrup.", "price": 1850, - "material": [ "wheat", "milk", "dairy" ], + "material": [ "wheat", "milk" ], "volume": 4, "charges": 6, "flags": [ "EATEN_HOT" ], @@ -7220,7 +7220,7 @@ "calories": 347, "description": "A delicious pizza with molten cheese on top.", "price": 990, - "material": [ "wheat", "milk", "dairy" ], + "material": [ "wheat", "milk" ], "volume": 8, "charges": 4, "flags": [ "EATEN_HOT" ], @@ -7486,7 +7486,7 @@ "calories": 9, "description": "Dehydrated milk powder. Mix with water to make drinkable milk.", "price": 1100, - "material": [ "powder", "milk", "dairy" ], + "material": [ "powder", "milk" ], "volume": 1, "flags": [ "EDIBLE_FROZEN" ], "charges": 10, @@ -7759,7 +7759,7 @@ "calories": 330, "description": "A very old type of pasta made with several layers of lasagne sheets alternated with cheese, sauces and meats.", "price": 1000, - "material": [ "flesh", "wheat", "milk", "dairy" ], + "material": [ "flesh", "wheat", "milk" ], "volume": 12, "charges": 8, "flags": [ "EATEN_HOT", "FREEZERBURN" ], @@ -7772,7 +7772,7 @@ "copy-from": "lasagne", "name": "Luigi lasagne", "description": "A very old type of pasta made with several layers of lasagne sheets alternated with cheese, sauces and meats. Made better with human flesh.", - "material": [ "hflesh", "wheat", "milk", "dairy" ] + "material": [ "hflesh", "wheat", "milk" ] }, { "id": "mayonnaise", @@ -8191,7 +8191,7 @@ "calories": 304, "description": "A sandwich of minced meat and cheese with condiments. The apex of pre-cataclysm culinary achievement.", "price": 1000, - "material": [ "flesh", "wheat", "milk", "dairy" ], + "material": [ "flesh", "wheat", "milk" ], "volume": 1, "charges": 4, "flags": [ "EATEN_HOT", "ALLERGEN_MILK" ], @@ -8204,7 +8204,7 @@ "copy-from": "cheeseburger", "name": "chump cheeseburger", "description": "A sandwich of minced human flesh and cheese with condiments. The apex of post-cataclysm cannibalistic culinary achievement.", - "material": [ "hflesh", "wheat", "milk", "dairy" ] + "material": [ "hflesh", "wheat", "milk" ] }, { "type": "COMESTIBLE", @@ -8330,7 +8330,7 @@ "calories": 260, "description": "A block of yellow processed cheese.", "price": 900, - "material": [ "milk", "dairy" ], + "material": [ "milk" ], "volume": 1, "charges": 4, "fun": 7, @@ -8350,7 +8350,7 @@ "calories": 174, "description": "Processed cheese spread.", "price": 650, - "material": [ "milk", "junk", "dairy" ], + "material": [ "milk", "junk" ], "volume": 1, "charges": 3, "flags": [ "EATEN_HOT" ], @@ -8371,7 +8371,7 @@ "calories": 35, "description": "Milk that has been curdled with vinegar and rennet. It still needs to be salted and drained of whey.", "price": 10, - "material": [ "milk", "dairy" ], + "material": [ "milk" ], "volume": 1, "phase": "liquid", "fun": -12 @@ -8392,7 +8392,7 @@ "calories": 260, "description": "Hard, dry cheese made to last, unlike modern processed cheese. Will make you thirsty though.", "price": 900, - "material": [ "milk", "dairy" ], + "material": [ "milk" ], "volume": 1, "charges": 3, "fun": 5 @@ -8882,7 +8882,7 @@ "calories": 104, "description": "Fried potatoes with delicious cheese smothered on top.", "price": 190, - "material": [ "junk", "milk", "dairy" ], + "material": [ "junk", "milk" ], "volume": 1, "charges": 3, "flags": [ "EATEN_HOT" ], @@ -9012,7 +9012,7 @@ "calories": 9, "description": "Crunchy sugar in chocolate capsules. Legal and stimmy.", "price": 100, - "material": [ "junk", "dairy" ], + "material": [ "junk", "milk" ], "volume": 0, "flags": [ "EDIBLE_FROZEN" ], "charges": 4, @@ -9447,7 +9447,7 @@ "calories": 347, "description": "A rich and tasty fish chowder from Scotland, made with preserved fish and creamy milk.", "price": 500, - "material": [ "flesh", "milk", "dairy" ], + "material": [ "flesh", "milk" ], "volume": 1, "phase": "liquid", "charges": 4, @@ -9626,7 +9626,7 @@ "calories": 260, "description": "Filling bread buns, taste good with tea on a Sunday morning breakfast.", "price": 550, - "material": [ "wheat", "dairy" ], + "material": [ "wheat", "milk" ], "volume": 3, "charges": 6, "flags": [ "EATEN_HOT" ], @@ -10329,7 +10329,7 @@ "calories": 69, "description": "Coffee milk is pretty much the official morning drink among many countries.", "price": 480, - "material": [ "milk", "water", "dairy" ], + "material": [ "milk", "water" ], "volume": 2, "phase": "liquid", "charges": 2, @@ -10352,7 +10352,7 @@ "calories": 69, "description": "Usually consumed in the mornings, milk tea is common among many countries.", "price": 450, - "material": [ "milk", "water", "dairy" ], + "material": [ "milk", "water" ], "volume": 2, "phase": "liquid", "charges": 2, @@ -10376,7 +10376,7 @@ "calories": 69, "description": "A traditional south Asian mixed-spice tea with milk.", "price": 475, - "material": [ "milk", "water", "dairy" ], + "material": [ "milk", "water" ], "volume": 1, "phase": "liquid", "flags": [ "EATEN_HOT" ], @@ -10417,7 +10417,7 @@ "calories": 608, "description": "A delicious grilled cheese sandwich, because everything is better with melted cheese.", "price": 550, - "material": [ "milk", "wheat", "dairy" ], + "material": [ "milk", "wheat" ], "volume": 1, "flags": [ "EATEN_HOT" ], "fun": 10, @@ -10430,7 +10430,7 @@ "name": "dudeluxe sandwich", "name_plural": "dudeluxe sandwiches", "description": "A sandwich of human flesh, vegetables, and cheese with condiments. Feast upon the souls of your enemies and tasty garden greens!", - "material": [ "hflesh", "veggy", "wheat", "milk", "dairy" ] + "material": [ "hflesh", "veggy", "wheat", "milk" ] }, { "type": "COMESTIBLE", @@ -10449,7 +10449,7 @@ "calories": 330, "description": "A sandwich of meat, vegetables, and cheese with condiments. Tasty and nutritious!", "price": 1200, - "material": [ "flesh", "veggy", "wheat", "milk", "dairy" ], + "material": [ "flesh", "veggy", "wheat", "milk" ], "volume": 1, "charges": 4, "fun": 12, @@ -10493,7 +10493,7 @@ "calories": 564, "description": "A simple cheese sandwich.", "price": 500, - "material": [ "milk", "wheat", "dairy" ], + "material": [ "milk", "wheat" ], "volume": 1, "fun": 8, "rot_spawn": "GROUP_CARRION" @@ -10768,7 +10768,7 @@ "calories": 391, "description": "Smooth and rich, this spoon-coating mix of milk, cream, and eggs is a popular traditional holiday drink. While often spiked, it is still delicious on its own. Meant to be stored cold, it will spoil rapidly.", "price": 40, - "material": [ "milk", "egg", "dairy" ], + "material": [ "milk", "egg" ], "volume": 1, "phase": "liquid", "charges": 2, @@ -10794,7 +10794,7 @@ "description": "Smooth and rich, this spoon-coating mixture of milk, cream, eggs, and booze is a popular traditional holiday drink. Having been fortified with alcohol, it will keep for a long time.", "price": 45, "//": "A 12-charge gallon currently goes for around US$4, and eggnog is a bit more expensive than that.", - "material": [ "milk", "alcohol", "egg", "dairy" ], + "material": [ "milk", "alcohol", "egg" ], "volume": 1, "phase": "liquid", "charges": 2, @@ -10814,7 +10814,7 @@ "price": 285, "phase": "liquid", "container": "bottle_plastic", - "material": [ "milk", "junk", "dairy" ], + "material": [ "milk", "junk" ], "symbol": "~", "color": "brown", "comestible_type": "DRINK", @@ -10836,7 +10836,7 @@ "price": 335, "phase": "liquid", "container": "bottle_plastic", - "material": [ "milk", "junk", "dairy" ], + "material": [ "milk", "junk" ], "symbol": "~", "color": "brown", "comestible_type": "DRINK",