From 7fedaf0bb2f9620eac7a464bbc1c815cc0a99ad4 Mon Sep 17 00:00:00 2001 From: Brian-Otten Date: Sun, 26 Apr 2020 07:01:42 +0200 Subject: [PATCH 01/48] Rework long pole --- data/json/items/resources/wood.json | 4 ++-- data/json/recipes/recipe_weapon.json | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/data/json/items/resources/wood.json b/data/json/items/resources/wood.json index d0d95e9aef8d1..5eadb508caca1 100644 --- a/data/json/items/resources/wood.json +++ b/data/json/items/resources/wood.json @@ -79,8 +79,8 @@ "techniques": "WBLOCK_1", "weight": "2250 g", "volume": "3750 ml", - "bashing": 25, - "flags": [ "SPEAR", "REACH_ATTACK", "NONCONDUCTIVE" ], + "bashing": 19, + "flags": [ "DURABLE_MELEE", "POLEARM", "SPEAR", "REACH_ATTACK", "REACH3", "NONCONDUCTIVE", "SHEATH_SPEAR", "ALWAYS_TWOHAND" ], "price": 4000, "price_postapoc": 50, "qualities": [ [ "HAMMER", 1 ] ] diff --git a/data/json/recipes/recipe_weapon.json b/data/json/recipes/recipe_weapon.json index c40977d09fb97..45d32d19b9901 100644 --- a/data/json/recipes/recipe_weapon.json +++ b/data/json/recipes/recipe_weapon.json @@ -2705,11 +2705,12 @@ "skill_used": "fabrication", "difficulty": 5, "time": "5 h 40 m", - "book_learn": [ [ "textbook_weapeast", 6 ] ], + "book_learn": [ [ "textbook_weapeast", 4 ] ], + "autolearn": true, "qualities": [ { "id": "SAW_W", "level": 1 }, { "id": "CUT", "level": 1 } ], "//": "a long pole is a single piece of wood, and the heavy stick just isn't large enough.", "components": [ - [ [ "log", 1 ] ], + [ [ "wood_beam", 1 ] ], [ [ "any_tallow", 4, "LIST" ], [ "cooking_oil", 32 ], From 29dc57cba283b6de5c4d28acc52141fa9ad07cbf Mon Sep 17 00:00:00 2001 From: Valiant Date: Sun, 26 Apr 2020 10:37:15 +0400 Subject: [PATCH 02/48] Updated description of locksmithing set to mention the lock picking skill --- data/json/items/tool/entry_tools.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/tool/entry_tools.json b/data/json/items/tool/entry_tools.json index da7562ef0e97e..d69d78e4c6bd5 100644 --- a/data/json/items/tool/entry_tools.json +++ b/data/json/items/tool/entry_tools.json @@ -78,7 +78,7 @@ "id": "picklocks", "type": "TOOL", "name": { "str": "locksmith kit" }, - "description": "This is a locksmith's set of sturdy steel lock picks and torsion wrenches. It is essential for silently and quickly opening locks, provided you have some mechanical skill.", + "description": "This is a locksmith's set of sturdy steel lock picks and torsion wrenches. It is essential for silently and quickly opening locks, provided you have some lock picking and mechanical skills.", "weight": "544 g", "volume": "100 ml", "price": 20000, From 3279b25004465a2186d1b9e63940b1b727696723 Mon Sep 17 00:00:00 2001 From: Valiant Date: Sun, 26 Apr 2020 10:42:26 +0400 Subject: [PATCH 03/48] Removed fine hammering quality from primitive and makeshift hammers --- data/json/items/tool/workshop.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/items/tool/workshop.json b/data/json/items/tool/workshop.json index 231ce3d34cd36..a653385171ff4 100644 --- a/data/json/items/tool/workshop.json +++ b/data/json/items/tool/workshop.json @@ -471,7 +471,7 @@ "material": [ "steel", "wood" ], "symbol": ";", "color": "brown", - "qualities": [ [ "HAMMER", 2 ], [ "HAMMER_FINE", 1 ] ], + "qualities": [ [ "HAMMER", 2 ] ], "use_action": "HAMMER", "flags": [ "NONCONDUCTIVE", "BELT_CLIP" ] }, @@ -706,7 +706,7 @@ "material": [ "stone", "wood" ], "symbol": ";", "color": "brown", - "qualities": [ [ "HAMMER", 2 ], [ "HAMMER_FINE", 1 ] ], + "qualities": [ [ "HAMMER", 2 ] ], "use_action": "HAMMER", "flags": [ "BELT_CLIP" ] }, From f65a5c4a6c9072fa44d8d8b790e351fa1c8780ad Mon Sep 17 00:00:00 2001 From: Valiant Date: Sun, 26 Apr 2020 11:03:35 +0400 Subject: [PATCH 04/48] Changed requirement of hammering quality 1 to fine hammering quality 1. Alternatively you can use tool with bolt turning quality 1 (e.g. pliers). Also now it additionally requires a tool with metal sawing 1 quality (e.g. hacksaw) Also increased time from 1 minute to 10 minutes. --- data/json/recipes/recipe_others.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index e3bb1ff21d76a..1bfc6ba1397e7 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -1455,9 +1455,9 @@ "category": "CC_OTHER", "subcategory": "CSC_OTHER_TOOLS", "skill_used": "fabrication", - "time": "1 m", + "time": "10 m", "autolearn": true, - "qualities": [ { "id": "HAMMER", "level": 1 } ], + "qualities": [ [ { "id": "HAMMER_FINE", "level": 1 }, { "id": "WRENCH", "level": 1 } ], { "id": "SAW_M", "level": 2 } ], "components": [ [ [ "scrap", 1 ] ] ] }, { From dec448dfdcd1be4ea8cc1765b9b0aa865d56aa4e Mon Sep 17 00:00:00 2001 From: crazykid080 <–orillyt080@gmail.com> Date: Sun, 26 Apr 2020 09:30:02 -0700 Subject: [PATCH 05/48] Add survival machete to ninjutsu weapons Watching vormithrax. Saw vormithrax complain. Made sense to me, made change. --- data/json/martialarts.json | 1 + 1 file changed, 1 insertion(+) diff --git a/data/json/martialarts.json b/data/json/martialarts.json index a6091be196991..db60a4ed8b83c 100644 --- a/data/json/martialarts.json +++ b/data/json/martialarts.json @@ -954,6 +954,7 @@ "shillelagh_weighted", "shock_staff", "sickle", + "survivor_machete", "switchblade", "sword_bayonet", "sword_crude", From ea5f002d7c6d5df080eb336860f556cb24f91e45 Mon Sep 17 00:00:00 2001 From: Valiant Date: Sun, 26 Apr 2020 22:48:47 +0400 Subject: [PATCH 06/48] Added an alternative crafting recipe (from wire) --- data/json/recipes/recipe_others.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index 1bfc6ba1397e7..984d7b09bfef5 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -1460,6 +1460,18 @@ "qualities": [ [ { "id": "HAMMER_FINE", "level": 1 }, { "id": "WRENCH", "level": 1 } ], { "id": "SAW_M", "level": 2 } ], "components": [ [ [ "scrap", 1 ] ] ] }, + { + "type": "recipe", + "result": "crude_picklock", + "id_suffix": "from wire", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "time": "5 m", + "autolearn": true, + "qualities": [ [ { "id": "HAMMER_FINE", "level": 1 }, { "id": "WRENCH", "level": 1 } ] ], + "components": [ [ [ "wire", 2 ] ] ] + }, { "type": "recipe", "result": "tripwire", From cab36e4ced8f845bc54b16bc91cda1e72ba5cb13 Mon Sep 17 00:00:00 2001 From: Brian-Otten Date: Mon, 27 Apr 2020 08:49:36 +0200 Subject: [PATCH 07/48] Remove sheath spear from pikes and pole and durable melee from long pole --- data/json/items/melee/spears_and_polearms.json | 6 +++--- data/json/items/resources/wood.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/json/items/melee/spears_and_polearms.json b/data/json/items/melee/spears_and_polearms.json index 8fbf46e9bf240..edb657eeffb72 100644 --- a/data/json/items/melee/spears_and_polearms.json +++ b/data/json/items/melee/spears_and_polearms.json @@ -450,7 +450,7 @@ "looks_like": "pike", "techniques": [ "IMPALE", "WBLOCK_1" ], "qualities": [ [ "COOK", 1 ] ], - "flags": [ "DURABLE_MELEE", "POLEARM", "SPEAR", "REACH_ATTACK", "REACH3", "NONCONDUCTIVE", "SHEATH_SPEAR", "ALWAYS_TWOHAND" ] + "flags": [ "DURABLE_MELEE", "POLEARM", "SPEAR", "REACH_ATTACK", "REACH3", "NONCONDUCTIVE", "ALWAYS_TWOHAND" ] }, { "id": "pike_copper", @@ -470,7 +470,7 @@ "looks_like": "pike", "techniques": [ "IMPALE", "WBLOCK_1" ], "qualities": [ [ "COOK", 1 ] ], - "flags": [ "DURABLE_MELEE", "POLEARM", "SPEAR", "REACH_ATTACK", "REACH3", "NONCONDUCTIVE", "SHEATH_SPEAR", "ALWAYS_TWOHAND" ] + "flags": [ "DURABLE_MELEE", "POLEARM", "SPEAR", "REACH_ATTACK", "REACH3", "NONCONDUCTIVE", "ALWAYS_TWOHAND" ] }, { "id": "pike", @@ -489,7 +489,7 @@ "color": "brown", "techniques": [ "IMPALE", "WBLOCK_1" ], "qualities": [ [ "COOK", 1 ] ], - "flags": [ "DURABLE_MELEE", "POLEARM", "SPEAR", "REACH_ATTACK", "REACH3", "NONCONDUCTIVE", "SHEATH_SPEAR", "ALWAYS_TWOHAND" ] + "flags": [ "DURABLE_MELEE", "POLEARM", "SPEAR", "REACH_ATTACK", "REACH3", "NONCONDUCTIVE", "ALWAYS_TWOHAND" ] }, { "id": "pike_fake", diff --git a/data/json/items/resources/wood.json b/data/json/items/resources/wood.json index 5eadb508caca1..1be4109c8756e 100644 --- a/data/json/items/resources/wood.json +++ b/data/json/items/resources/wood.json @@ -80,7 +80,7 @@ "weight": "2250 g", "volume": "3750 ml", "bashing": 19, - "flags": [ "DURABLE_MELEE", "POLEARM", "SPEAR", "REACH_ATTACK", "REACH3", "NONCONDUCTIVE", "SHEATH_SPEAR", "ALWAYS_TWOHAND" ], + "flags": [ "POLEARM", "SPEAR", "REACH_ATTACK", "REACH3", "NONCONDUCTIVE", "ALWAYS_TWOHAND" ], "price": 4000, "price_postapoc": 50, "qualities": [ [ "HAMMER", 1 ] ] From 1fd1d8651b645223901b9a1797a68e2b77286395 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Fri, 20 Mar 2020 12:09:04 -0700 Subject: [PATCH 08/48] Damage loading code --- src/assign.h | 24 ++++++++++++++++++++++-- src/bionics.cpp | 4 ++++ src/bionics.h | 2 ++ src/clothing_mod.cpp | 1 + src/clothing_mod.h | 4 +++- src/creature.cpp | 1 + src/creature.h | 1 + src/damage.cpp | 3 +++ src/damage.h | 1 + src/item.h | 2 +- src/magic.cpp | 2 ++ src/magic_enchantment.cpp | 3 +++ src/magic_enchantment.h | 3 +++ src/material.cpp | 1 + src/material.h | 1 + src/monstergenerator.cpp | 1 + src/mtype.h | 1 + src/savegame_json.cpp | 2 ++ src/sounds.cpp | 2 +- 19 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/assign.h b/src/assign.h index 62f0725edacdb..8413bf4a86aa3 100644 --- a/src/assign.h +++ b/src/assign.h @@ -763,6 +763,12 @@ inline bool assign( const JsonObject &jo, const std::string &name, damage_instan // What we'll eventually be returning for the damage instance damage_instance out; + std::string id_err = "no id found"; + // Grab the id for good error reporting + if( jo.has_string( "id" ) ) { + id_err = jo.get_string( "id" ); + } + if( jo.has_array( name ) ) { out = load_damage_instance_inherit( jo.get_array( name ), val ); } else if( jo.has_object( name ) ) { @@ -784,6 +790,12 @@ inline bool assign( const JsonObject &jo, const std::string &name, damage_instan arpen = jo.get_float( "pierce" ); } + if( amount != 0.0f || arpen != 0.0f || unc_dmg_mult != 1.0f ) { + // Give a load warning, it's likely anything loading damage this way + // is a gun, and as such is using the wrong damage type + debugmsg( "Warning: %s loads damage using legacy methods - damage type may be wrong", id_err ); + } + out.add_damage( DT_STAB, amount, arpen, 1.0f, 1.0f, 1.0f, unc_dmg_mult ); } @@ -827,6 +839,10 @@ inline bool assign( const JsonObject &jo, const std::string &name, damage_instan unc_dmg_mul = relative.get_float( "prop_damage" ); } + // Give a load warning, it's likely anything loading damage this way + // is a gun, and as such is using the wrong damage type + debugmsg( "Warning: %s loads damage using legacy methods - damage type may be wrong", id_err ); + assign_dmg_relative( out, val, damage_instance( DT_STAB, amt, arpen, 1.0f, 1.0f, 1.0f, unc_dmg_mul ), strict ); } else if( proportional.has_member( name ) || proportional.has_member( "pierce" ) || @@ -848,6 +864,10 @@ inline bool assign( const JsonObject &jo, const std::string &name, damage_instan unc_dmg_mul = proportional.get_float( "prop_damage" ); } + // Give a load warning, it's likely anything loading damage this way + // is a gun, and as such is using the wrong damage type + debugmsg( "Warning: %s loads damage using legacy methods - damage type may be wrong", id_err ); + assign_dmg_proportional( proportional, name, out, val, damage_instance( DT_STAB, amt, arpen, 1.0f, 1.0f, 1.0f, unc_dmg_mul ), strict ); } else if( !jo.has_member( name ) && !jo.has_member( "prop_damage" ) ) { @@ -859,11 +879,11 @@ inline bool assign( const JsonObject &jo, const std::string &name, damage_instan check_assigned_dmg( err, name, out, lo, hi ); if( strict && out == val ) { - report_strict_violation( err, "assignment does not update value", name ); + report_strict_violation( err, "Assigned damage does not update value", name ); } if( out.damage_units.empty() ) { - out = damage_instance( DT_STAB, 0.0f ); + out = damage_instance( DT_BULLET, 0.0f ); } // Now that we've verified everything in out is all good, set val to it diff --git a/src/bionics.cpp b/src/bionics.cpp index fdfff6f6956cc..204e4357d25e2 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -2610,6 +2610,10 @@ void load_bionic( const JsonObject &jsobj ) new_bionic.cut_protec.emplace( bodypart_str_id( ja.get_string( 0 ) ), ja.get_int( 1 ) ); } + for( JsonArray ja : jsobj.get_array( "bullet_protec" ) ) { + new_bionic.bullet_protec.emplace( bodypart_str_id( ja.get_string( 0 ) ), + ja.get_int( 1 ) ); + } new_bionic.activated = new_bionic.toggled || new_bionic.power_activate > 0_kJ || diff --git a/src/bionics.h b/src/bionics.h index 6d2d5a1d8918f..62a00b449e3e3 100644 --- a/src/bionics.h +++ b/src/bionics.h @@ -108,6 +108,8 @@ struct bionic_data { std::map bash_protec; /**Amount of cut protection offered by this bionic*/ std::map cut_protec; + /**Amount of bullet protection offered by this bionic*/ + std::map bullet_protec; /** bionic enchantments */ std::vector enchantments; diff --git a/src/clothing_mod.cpp b/src/clothing_mod.cpp index e324a36584257..44633ab5d5592 100644 --- a/src/clothing_mod.cpp +++ b/src/clothing_mod.cpp @@ -48,6 +48,7 @@ std::string enum_to_string( clothing_mod_type data ) case clothing_mod_type_fire: return "fire"; case clothing_mod_type_bash: return "bash"; case clothing_mod_type_cut: return "cut"; + case clothing_mod_type_bullet: return "bullet"; case clothing_mod_type_encumbrance: return "encumbrance"; case clothing_mod_type_warmth: return "warmth"; case clothing_mod_type_storage: return "storage"; diff --git a/src/clothing_mod.h b/src/clothing_mod.h index 39c1fa1f2592c..abf55e195c30c 100644 --- a/src/clothing_mod.h +++ b/src/clothing_mod.h @@ -19,6 +19,7 @@ enum clothing_mod_type : int { clothing_mod_type_fire, clothing_mod_type_bash, clothing_mod_type_cut, + clothing_mod_type_bullet, clothing_mod_type_encumbrance, clothing_mod_type_warmth, clothing_mod_type_storage, @@ -60,11 +61,12 @@ struct clothing_mod { namespace clothing_mods { -constexpr std::array all_clothing_mod_types = {{ +constexpr std::array all_clothing_mod_types = {{ clothing_mod_type_acid, clothing_mod_type_fire, clothing_mod_type_bash, clothing_mod_type_cut, + clothing_mod_type_bullet, clothing_mod_type_encumbrance, clothing_mod_type_warmth, clothing_mod_type_storage, diff --git a/src/creature.cpp b/src/creature.cpp index 4e1ae88311d5f..c91a1485e2c32 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -126,6 +126,7 @@ void Creature::reset_bonuses() armor_bash_bonus = 0; armor_cut_bonus = 0; + armor_bullet_bonus = 0; speed_bonus = 0; dodge_bonus = 0; diff --git a/src/creature.h b/src/creature.h index 5394393946fd2..838500e8e8deb 100644 --- a/src/creature.h +++ b/src/creature.h @@ -763,6 +763,7 @@ class Creature int armor_bash_bonus; int armor_cut_bonus; + int armor_bullet_bonus; int speed_base; // only speed needs a base, the rest are assumed at 0 and calculated off skills int speed_bonus; diff --git a/src/damage.cpp b/src/damage.cpp index 38ffe715ecd21..760dc59a683f9 100644 --- a/src/damage.cpp +++ b/src/damage.cpp @@ -206,6 +206,7 @@ resistances::resistances( monster &monster ) : resistances() set_resist( DT_BASH, monster.type->armor_bash ); set_resist( DT_CUT, monster.type->armor_cut ); set_resist( DT_STAB, monster.type->armor_stab ); + set_resist( DT_BULLET, monster.type->armor_bullet ); set_resist( DT_ACID, monster.type->armor_acid ); set_resist( DT_HEAT, monster.type->armor_fire ); } @@ -239,6 +240,7 @@ static const std::map dt_map = { { translate_marker_context( "damage type", "cut" ), DT_CUT }, { translate_marker_context( "damage type", "acid" ), DT_ACID }, { translate_marker_context( "damage type", "stab" ), DT_STAB }, + { translate_marker_context( "damage_type", "bullet" ), DT_BULLET }, { translate_marker_context( "damage type", "heat" ), DT_HEAT }, { translate_marker_context( "damage type", "cold" ), DT_COLD }, { translate_marker_context( "damage type", "electric" ), DT_ELECTRIC } @@ -404,6 +406,7 @@ std::array load_damage_array( const JsonObject &jo ) ret[ DT_BASH ] = jo.get_float( "bash", phys ); ret[ DT_CUT ] = jo.get_float( "cut", phys ); ret[ DT_STAB ] = jo.get_float( "stab", phys ); + ret[ DT_BULLET ] = jo.get_float( "bullet", phys ); float non_phys = jo.get_float( "non_physical", init_val ); ret[ DT_BIOLOGICAL ] = jo.get_float( "biological", non_phys ); diff --git a/src/damage.h b/src/damage.h index 6302bd3eed6ca..9db22acfca6aa 100644 --- a/src/damage.h +++ b/src/damage.h @@ -28,6 +28,7 @@ enum damage_type : int { DT_HEAT, // e.g. fire, plasma DT_COLD, // e.g. heatdrain, cryogrenades DT_ELECTRIC, // e.g. electrical discharge + DT_BULLET, // bullets and other fast moving projectiles NUM_DT }; diff --git a/src/item.h b/src/item.h index 2eae4dbe10eb0..4ac742e635177 100644 --- a/src/item.h +++ b/src/item.h @@ -1528,7 +1528,7 @@ class item : public visitable int get_warmth() const; /** * Returns the @ref islot_armor::thickness value, or 0 for non-armor. Thickness is are - * relative value that affects the items resistance against bash / cutting damage. + * relative value that affects the items resistance against bash / cutting / bullet damage. */ int get_thickness() const; /** diff --git a/src/magic.cpp b/src/magic.cpp index b360b7974bbe2..8f4c07b553f6a 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -184,6 +184,8 @@ static damage_type damage_type_from_string( const std::string &str ) return DT_COLD; } else if( str == "cut" ) { return DT_CUT; + } else if( str == "bullet" ) { + return DT_BULLET; } else if( str == "electric" ) { return DT_ELECTRIC; } else if( str == "stab" ) { diff --git a/src/magic_enchantment.cpp b/src/magic_enchantment.cpp index 05a401d88186d..3266ca280b109 100644 --- a/src/magic_enchantment.cpp +++ b/src/magic_enchantment.cpp @@ -108,9 +108,11 @@ namespace io case enchantment::mod::ARMOR_ELEC: return "ARMOR_ELEC"; case enchantment::mod::ARMOR_HEAT: return "ARMOR_HEAT"; case enchantment::mod::ARMOR_STAB: return "ARMOR_STAB"; + case enchantment::mod::ARMOR_BULLET: return "ARMOR_BULLET"; case enchantment::mod::ITEM_DAMAGE_BASH: return "ITEM_DAMAGE_BASH"; case enchantment::mod::ITEM_DAMAGE_CUT: return "ITEM_DAMAGE_CUT"; case enchantment::mod::ITEM_DAMAGE_STAB: return "ITEM_DAMAGE_STAB"; + case enchantment::mod::ITEM_DAMAGE_BULLET: return "ITEM_DAMAGE_BULLET"; case enchantment::mod::ITEM_DAMAGE_HEAT: return "ITEM_DAMAGE_HEAT"; case enchantment::mod::ITEM_DAMAGE_COLD: return "ITEM_DAMAGE_COLD"; case enchantment::mod::ITEM_DAMAGE_ELEC: return "ITEM_DAMAGE_ELEC"; @@ -120,6 +122,7 @@ namespace io case enchantment::mod::ITEM_ARMOR_BASH: return "ITEM_ARMOR_BASH"; case enchantment::mod::ITEM_ARMOR_CUT: return "ITEM_ARMOR_CUT"; case enchantment::mod::ITEM_ARMOR_STAB: return "ITEM_ARMOR_STAB"; + case enchantment::mod::ITEM_ARMOR_BULLET: return "ITEM_ARMOR_BULLET"; case enchantment::mod::ITEM_ARMOR_HEAT: return "ITEM_ARMOR_HEAT"; case enchantment::mod::ITEM_ARMOR_COLD: return "ITEM_ARMOR_COLD"; case enchantment::mod::ITEM_ARMOR_ELEC: return "ITEM_ARMOR_ELEC"; diff --git a/src/magic_enchantment.h b/src/magic_enchantment.h index 24d7a375fe38f..7569a905021d0 100644 --- a/src/magic_enchantment.h +++ b/src/magic_enchantment.h @@ -76,6 +76,7 @@ class enchantment ARMOR_BASH, ARMOR_CUT, ARMOR_STAB, + ARMOR_BULLET, ARMOR_HEAT, ARMOR_COLD, ARMOR_ELEC, @@ -85,6 +86,7 @@ class enchantment ITEM_DAMAGE_BASH, ITEM_DAMAGE_CUT, ITEM_DAMAGE_STAB, + ITEM_DAMAGE_BULLET, ITEM_DAMAGE_HEAT, ITEM_DAMAGE_COLD, ITEM_DAMAGE_ELEC, @@ -94,6 +96,7 @@ class enchantment ITEM_ARMOR_BASH, ITEM_ARMOR_CUT, ITEM_ARMOR_STAB, + ITEM_ARMOR_BULLET, ITEM_ARMOR_HEAT, ITEM_ARMOR_COLD, ITEM_ARMOR_ELEC, diff --git a/src/material.cpp b/src/material.cpp index ef64c3c56ff9b..a146740b00fc0 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -64,6 +64,7 @@ void material_type::load( const JsonObject &jsobj, const std::string & ) mandatory( jsobj, was_loaded, "acid_resist", _acid_resist ); mandatory( jsobj, was_loaded, "elec_resist", _elec_resist ); mandatory( jsobj, was_loaded, "fire_resist", _fire_resist ); + mandatory( jsobj, was_loaded, "bullet_resist", _bullet_resist ); mandatory( jsobj, was_loaded, "chip_resist", _chip_resist ); mandatory( jsobj, was_loaded, "density", _density ); diff --git a/src/material.h b/src/material.h index edf12789efd1a..2740e63afa909 100644 --- a/src/material.h +++ b/src/material.h @@ -40,6 +40,7 @@ class material_type int _acid_resist = 0; int _elec_resist = 0; int _fire_resist = 0; + int _bullet_resist = 0; int _chip_resist = 0; // Resistance to physical damage of the item itself int _density = 1; // relative to "powder", which is 1 float _specific_heat_liquid = 4.186; diff --git a/src/monstergenerator.cpp b/src/monstergenerator.cpp index 3331b85a98edc..4069c9f164244 100644 --- a/src/monstergenerator.cpp +++ b/src/monstergenerator.cpp @@ -719,6 +719,7 @@ void mtype::load( const JsonObject &jo, const std::string &src ) assign( jo, "dodge", sk_dodge, strict, 0 ); assign( jo, "armor_bash", armor_bash, strict, 0 ); assign( jo, "armor_cut", armor_cut, strict, 0 ); + assign( jo, "armor_bullet", armor_bullet, strict, 0 ); assign( jo, "armor_stab", armor_stab, strict, 0 ); assign( jo, "armor_acid", armor_acid, strict, 0 ); assign( jo, "armor_fire", armor_fire, strict, 0 ); diff --git a/src/mtype.h b/src/mtype.h index ff41fad5143f1..c625972ab3845 100644 --- a/src/mtype.h +++ b/src/mtype.h @@ -283,6 +283,7 @@ struct mtype { int armor_bash = -1; /** innate armor vs. bash */ int armor_cut = -1; /** innate armor vs. cut */ int armor_stab = -1; /** innate armor vs. stabbing */ + int armor_bullet = -1; /** innate armor vs. bullet */ int armor_acid = -1; /** innate armor vs. acid */ int armor_fire = -1; /** innate armor vs. fire */ diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index 6b6ec6ca635ac..5e40df42bedd5 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -2990,6 +2990,7 @@ void Creature::store( JsonOut &jsout ) const jsout.member( "armor_bash_bonus", armor_bash_bonus ); jsout.member( "armor_cut_bonus", armor_cut_bonus ); + jsout.member( "armor_bullet_bonus", armor_bullet_bonus ); jsout.member( "speed", speed_base ); @@ -3053,6 +3054,7 @@ void Creature::load( const JsonObject &jsin ) jsin.read( "armor_bash_bonus", armor_bash_bonus ); jsin.read( "armor_cut_bonus", armor_cut_bonus ); + jsin.read( "armor_bullet_bonus", armor_bullet_bonus ); jsin.read( "speed", speed_base ); diff --git a/src/sounds.cpp b/src/sounds.cpp index f3fad4dfbd8dd..f1b2c8ee1ee80 100644 --- a/src/sounds.cpp +++ b/src/sounds.cpp @@ -226,7 +226,7 @@ static std::vector cluster_sounds( std::vector( std::log( input_sounds.size() ) ) ); const size_t stopping_point = input_sounds.size() - num_seed_clusters; const size_t max_map_distance = sound_distance( tripoint( point_zero, OVERMAP_DEPTH ), - tripoint( MAPSIZE_X, MAPSIZE_Y, OVERMAP_HEIGHT ) ); + tripoint( MAPSIZE_X, MAPSIZE_Y, OVERMAP_HEIGHT ) ); // Randomly choose cluster seeds. for( size_t i = input_sounds.size(); i > stopping_point; i-- ) { size_t index = rng( 0, i - 1 ); From 2883a28843cef7bbe2e14bbd4cd75efda0c9792b Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Fri, 20 Mar 2020 12:10:53 -0700 Subject: [PATCH 09/48] Update logic for bullet resistance --- src/character.cpp | 44 +++++++++++++++++++++++++++++++++++++++- src/character.h | 4 ++++ src/creature.cpp | 17 ++++++++++++++++ src/creature.h | 4 ++++ src/item.cpp | 31 ++++++++++++++++++++++++++++ src/item.h | 1 + src/magic.cpp | 2 ++ src/material.cpp | 5 +++++ src/material.h | 1 + src/monster.cpp | 12 +++++++++++ src/monster.h | 1 + src/monstergenerator.cpp | 3 +++ src/trapfunc.cpp | 4 ++-- tests/iteminfo_test.cpp | 2 +- 14 files changed, 127 insertions(+), 4 deletions(-) diff --git a/src/character.cpp b/src/character.cpp index d92143f0591a3..0198675f1e89a 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -6252,6 +6252,8 @@ bool Character::is_immune_damage( const damage_type dt ) const case DT_STAB: return has_effect_with_flag( "EFFECT_STAB_IMMUNE" ) || worn_with_flag( "STAB_IMMUNE" ); + case DT_BULLET: + return has_effect_with_flag( "EFFECT_BULLET_IMMUNE" ) || worn_with_flag( "BULLET_IMMUNE" ); case DT_HEAT: return has_trait( trait_M_SKIN2 ) || has_trait( trait_M_SKIN3 ) || @@ -7090,6 +7092,11 @@ int Character::get_armor_cut( bodypart_id bp ) const return get_armor_cut_base( bp ) + armor_cut_bonus; } +int Character::get_armor_bullet( bodypart_id bp ) const +{ + return get_armor_bullet_base( bp ) + armor_bullet_bonus; +} + int Character::get_armor_type( damage_type dt, bodypart_id bp ) const { switch( dt ) { @@ -7102,6 +7109,8 @@ int Character::get_armor_type( damage_type dt, bodypart_id bp ) const return get_armor_cut( bp ); case DT_STAB: return get_armor_cut( bp ) * 0.8f; + case DT_BULLET: + return get_armor_bullet( bp ); case DT_ACID: case DT_HEAT: case DT_COLD: @@ -7164,6 +7173,26 @@ int Character::get_armor_cut_base( bodypart_id bp ) const return ret; } +int Character::get_armor_bullet_base( bodypart_id bp ) const +{ + int ret = 0; + for( auto &i : worn ) { + if( i.covers( bp->token ) ) { + ret += i.bullet_resist(); + } + } + + for( const bionic_id &bid : get_bionics() ) { + const auto bullet_prot = bid->bullet_protec.find( bp.id() ); + if( bullet_prot != bid->bullet_protec.end() ) { + ret += bullet_prot->second; + } + } + + ret += mutation_armor( bp->token, DT_BULLET ); + return ret; +} + int Character::get_env_resist( bodypart_id bp ) const { int ret = 0; @@ -8096,6 +8125,9 @@ static void item_armor_enchantment_adjust( Character &guy, damage_unit &du, item case DT_STAB: du.amount = armor.calculate_by_enchantment( guy, du.amount, enchantment::mod::ITEM_ARMOR_STAB ); break; + case DT_BULLET: + du.amount = armor.calculate_by_enchantment( guy, du.amount, enchantment::mod::ITEM_ARMOR_BULLET ); + break; default: return; } @@ -8131,6 +8163,9 @@ static void armor_enchantment_adjust( Character &guy, damage_unit &du ) case DT_STAB: du.amount = guy.calculate_by_enchantment( du.amount, enchantment::mod::ARMOR_STAB ); break; + case DT_BULLET: + du.amount = guy.calculate_by_enchantment( du.amount, enchantment::mod::ARMOR_BULLET ); + break; default: return; } @@ -8156,7 +8191,7 @@ void Character::absorb_hit( body_part bp, damage_instance &dam ) elem.amount -= rng( 1, 8 ); } else if( elem.type == DT_CUT ) { elem.amount -= rng( 1, 4 ); - } else if( elem.type == DT_STAB ) { + } else if( elem.type == DT_STAB || elem.type == DT_BULLET ) { elem.amount -= rng( 1, 2 ); } mod_power_level( -25_kJ ); @@ -8322,6 +8357,13 @@ float Character::bionic_armor_bonus( body_part bp, damage_type dt ) const result += bash_prot->second; } } + } else if( dt == DT_BULLET ) { + for( const bionic_id &bid : get_bionics() ) { + const auto bullet_prot = bid->bullet_protec.find( convert_bp( bp ) ); + if( bullet_prot != bid->bullet_protec.end() ) { + result += bullet_prot->second; + } + } } return result; diff --git a/src/character.h b/src/character.h index 6a72dc603cd0e..c2eac0bcb63d0 100644 --- a/src/character.h +++ b/src/character.h @@ -1726,10 +1726,14 @@ class Character : public Creature, public visitable int get_armor_bash( bodypart_id bp ) const override; /** Returns overall cutting resistance for the body_part */ int get_armor_cut( bodypart_id bp ) const override; + /** Returns overall bullet resistance for the body_part */ + int get_armor_bullet( bodypart_id bp ) const override; /** Returns bashing resistance from the creature and armor only */ int get_armor_bash_base( bodypart_id bp ) const override; /** Returns cutting resistance from the creature and armor only */ int get_armor_cut_base( bodypart_id bp ) const override; + /** Returns cutting resistance from the creature and armor only */ + int get_armor_bullet_base( bodypart_id bp ) const override; /** Returns overall env_resist on a body_part */ int get_env_resist( bodypart_id bp ) const override; /** Returns overall acid resistance for the body part */ diff --git a/src/creature.cpp b/src/creature.cpp index c91a1485e2c32..993a202bef5dd 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -1366,6 +1366,10 @@ int Creature::get_armor_cut( bodypart_id ) const { return armor_cut_bonus; } +int Creature::get_armor_bullet( bodypart_id ) const +{ + return armor_bullet_bonus; +} int Creature::get_armor_bash_base( bodypart_id ) const { return armor_bash_bonus; @@ -1374,6 +1378,10 @@ int Creature::get_armor_cut_base( bodypart_id ) const { return armor_cut_bonus; } +int Creature::get_armor_bullet_base( bodypart_id ) const +{ + return armor_bullet_bonus; +} int Creature::get_armor_bash_bonus() const { return armor_bash_bonus; @@ -1382,6 +1390,11 @@ int Creature::get_armor_cut_bonus() const { return armor_cut_bonus; } +int Creature::get_armor_bullet_bonus() const +{ + return armor_bullet_bonus; +} + int Creature::get_speed() const { @@ -1520,6 +1533,10 @@ void Creature::set_armor_cut_bonus( int ncutarm ) { armor_cut_bonus = ncutarm; } +void Creature::set_armor_bullet_bonus( int nbulletarm ) +{ + armor_bullet_bonus = nbulletarm; +} void Creature::set_speed_base( int nspeed ) { diff --git a/src/creature.h b/src/creature.h index 838500e8e8deb..dff50c81c9d5c 100644 --- a/src/creature.h +++ b/src/creature.h @@ -410,10 +410,13 @@ class Creature virtual int get_armor_bash( bodypart_id bp ) const; virtual int get_armor_cut( bodypart_id bp ) const; + virtual int get_armor_bullet( bodypart_id bp ) const; virtual int get_armor_bash_base( bodypart_id bp ) const; virtual int get_armor_cut_base( bodypart_id bp ) const; + virtual int get_armor_bullet_base( bodypart_id bp ) const; virtual int get_armor_bash_bonus() const; virtual int get_armor_cut_bonus() const; + virtual int get_armor_bullet_bonus() const; virtual int get_armor_type( damage_type dt, bodypart_id bp ) const = 0; @@ -485,6 +488,7 @@ class Creature virtual void set_armor_bash_bonus( int nbasharm ); virtual void set_armor_cut_bonus( int ncutarm ); + virtual void set_armor_bullet_bonus( int nbulletarm ); virtual void set_speed_base( int nspeed ); virtual void set_speed_bonus( int nspeed ); diff --git a/src/item.cpp b/src/item.cpp index 4c6805886f40e..a049a0a1f447c 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -5675,6 +5675,35 @@ int item::stab_resist( bool to_self ) const return static_cast( 0.8f * cut_resist( to_self ) ); } +int item::bullet_resist( bool to_self ) const +{ + if( is_null() ) { + return 0; + } + + const int base_thickness = get_thickness(); + float resist = 0; + float mod = get_clothing_mod_val( clothing_mod_type_bullet ); + int eff_thickness = 1; + + // base resistance + // Don't give reinforced items +armor, just more resistance to ripping + const int dmg = damage_level( 4 ); + const int eff_damage = to_self ? std::min( dmg, 0 ) : std::max( dmg, 0 ); + eff_thickness = std::max( 1, base_thickness - eff_damage ); + + const std::vector mat_types = made_of_types(); + if( !mat_types.empty() ) { + for( const material_type *mat : mat_types ) { + resist += mat->bullet_resist(); + } + // Average based on number of materials. + resist /= mat_types.size(); + } + + return std::lround( ( resist * eff_thickness ) + mod ); +} + int item::acid_resist( bool to_self, int base_env_resist ) const { if( to_self ) { @@ -5943,6 +5972,8 @@ int item::damage_resist( damage_type dt, bool to_self ) const return stab_resist( to_self ); case DT_HEAT: return fire_resist( to_self ); + case DT_BULLET: + return bullet_resist( to_self ); default: debugmsg( "Invalid damage type: %d", dt ); } diff --git a/src/item.h b/src/item.h index 4ac742e635177..b198a8606dda4 100644 --- a/src/item.h +++ b/src/item.h @@ -972,6 +972,7 @@ class item : public visitable int bash_resist( bool to_self = false ) const; int cut_resist( bool to_self = false ) const; int stab_resist( bool to_self = false ) const; + int bullet_resist( bool to_self = false ) const; /*@}*/ /** diff --git a/src/magic.cpp b/src/magic.cpp index 8f4c07b553f6a..db1b3e8632b45 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -990,6 +990,8 @@ nc_color spell::damage_type_color() const return c_light_gray; case DT_ELECTRIC: return c_light_blue; + case DT_BULLET: + /* fallthrough */ case DT_STAB: return c_light_red; case DT_TRUE: diff --git a/src/material.cpp b/src/material.cpp index a146740b00fc0..801621f5cd631 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -168,6 +168,11 @@ int material_type::cut_resist() const return _cut_resist; } +int material_type::bullet_resist() const +{ + return _bullet_resist; +} + std::string material_type::bash_dmg_verb() const { return _( _bash_dmg_verb ); diff --git a/src/material.h b/src/material.h index 2740e63afa909..1975443bdb969 100644 --- a/src/material.h +++ b/src/material.h @@ -85,6 +85,7 @@ class material_type itype_id repaired_with() const; int bash_resist() const; int cut_resist() const; + int bullet_resist() const; std::string bash_dmg_verb() const; std::string cut_dmg_verb() const; std::string dmg_adj( int damage ) const; diff --git a/src/monster.cpp b/src/monster.cpp index 68fb6488c8470..ce1d6e16091c0 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -1310,6 +1310,8 @@ bool monster::is_immune_damage( const damage_type dt ) const return type->sp_defense == &mdefense::zapback || has_flag( MF_ELECTRIC ) || has_flag( MF_ELECTRIC_FIELD ); + case DT_BULLET: + return false; default: return true; } @@ -1576,6 +1578,7 @@ void monster::deal_damage_handle_type( const damage_unit &du, bodypart_id bp, in // internal damage, like from smoke or poison case DT_CUT: case DT_STAB: + case DT_BULLET: case DT_HEAT: default: break; @@ -1820,6 +1823,13 @@ int monster::get_armor_bash( bodypart_id bp ) const return static_cast( type->armor_bash ) + armor_bash_bonus + get_worn_armor_val( DT_BASH ); } +int monster::get_armor_bullet( bodypart_id bp ) const +{ + ( void ) bp; + return static_cast( type->armor_bullet ) + armor_bullet_bonus + get_worn_armor_val( + DT_BULLET ); +} + int monster::get_armor_type( damage_type dt, bodypart_id bp ) const { int worn_armor = get_worn_armor_val( dt ); @@ -1832,6 +1842,8 @@ int monster::get_armor_type( damage_type dt, bodypart_id bp ) const return get_armor_bash( bp ); case DT_CUT: return get_armor_cut( bp ); + case DT_BULLET: + return get_armor_bullet( bp ); case DT_ACID: return worn_armor + static_cast( type->armor_acid ); case DT_STAB: diff --git a/src/monster.h b/src/monster.h index 61a258014c1dc..ae26bf7caf205 100644 --- a/src/monster.h +++ b/src/monster.h @@ -352,6 +352,7 @@ class monster : public Creature int get_worn_armor_val( damage_type dt ) const; int get_armor_cut( bodypart_id bp ) const override; // Natural armor, plus any worn armor int get_armor_bash( bodypart_id bp ) const override; // Natural armor, plus any worn armor + int get_armor_bullet( bodypart_id bp ) const override; // Natural armor, plus any worn armor int get_armor_type( damage_type dt, bodypart_id bp ) const override; float get_hit_base() const override; diff --git a/src/monstergenerator.cpp b/src/monstergenerator.cpp index 4069c9f164244..418dbcc7835e0 100644 --- a/src/monstergenerator.cpp +++ b/src/monstergenerator.cpp @@ -366,6 +366,9 @@ void MonsterGenerator::finalize_mtypes() if( mon.armor_stab < 0 ) { mon.armor_stab = mon.armor_cut * 0.8; } + if( mon.armor_bullet < 0 ) { + mon.armor_bullet = 0; + } if( mon.armor_acid < 0 ) { mon.armor_acid = mon.armor_cut * 0.5; } diff --git a/src/trapfunc.cpp b/src/trapfunc.cpp index 4c22589c36775..5c8c889f558e2 100644 --- a/src/trapfunc.cpp +++ b/src/trapfunc.cpp @@ -476,7 +476,7 @@ bool trapfunc::shotgun( const tripoint &p, Creature *c, item * ) } //~ %s is bodypart n->add_msg_if_player( m_bad, _( "Your %s is hit!" ), body_part_name( hit->token ) ); - c->deal_damage( nullptr, hit, damage_instance( DT_CUT, rng( 40 * shots, 60 * shots ) ) ); + c->deal_damage( nullptr, hit, damage_instance( DT_BULLET, rng( 40 * shots, 60 * shots ) ) ); } else { n->add_msg_player_or_npc( m_neutral, _( "You dodge the shot!" ), _( " dodges the shot!" ) ); @@ -508,7 +508,7 @@ bool trapfunc::shotgun( const tripoint &p, Creature *c, item * ) if( seen ) { add_msg( m_bad, _( "A shotgun fires and hits the %s!" ), z->name() ); } - z->deal_damage( nullptr, bodypart_id( "torso" ), damage_instance( DT_CUT, rng( 40 * shots, + z->deal_damage( nullptr, bodypart_id( "torso" ), damage_instance( DT_BULLET, rng( 40 * shots, 60 * shots ) ) ); } c->check_dead_state(); diff --git a/tests/iteminfo_test.cpp b/tests/iteminfo_test.cpp index 428aaff4adabf..5fd305fc790cf 100644 --- a/tests/iteminfo_test.cpp +++ b/tests/iteminfo_test.cpp @@ -239,7 +239,7 @@ TEST_CASE( "armor coverage and protection values", "[item][iteminfo][armor]" ) "Coverage: 90% Warmth: 5\n" "--\n" "Encumbrance: 3 (poor fit)\n" - "Protection: Bash: 1 Cut: 1\n" + "Protection: Bash: 1 Cut: 1 Bullet: 1\n" " Acid: 0 Fire: 0 Environmental: 0\n" ); } From 5b62cfeaa5c1f13ad04e38cf4c9358e857ea7df0 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Fri, 20 Mar 2020 11:58:20 -0700 Subject: [PATCH 10/48] Bullet damage UI bits --- src/armor_layers.cpp | 2 ++ src/dump.cpp | 3 ++- src/game_inventory.cpp | 4 ++++ src/item.cpp | 12 +++++++++++- src/iuse_actor.cpp | 2 ++ tests/iteminfo_test.cpp | 2 +- 6 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/armor_layers.cpp b/src/armor_layers.cpp index 5f932a151a7c4..665becc8d5516 100644 --- a/src/armor_layers.cpp +++ b/src/armor_layers.cpp @@ -319,6 +319,8 @@ std::vector clothing_protection( const item &worn_item, const int w string_format( "%3d", static_cast( worn_item.bash_resist() ) ), width ) ); prot.push_back( name_and_value( space + _( "Cut:" ), string_format( "%3d", static_cast( worn_item.cut_resist() ) ), width ) ); + prot.push_back( name_and_value( space + _( "Ballistic:" ), + string_format( "%3d", static_cast( worn_item.bullet_resist() ) ), width ) ); prot.push_back( name_and_value( space + _( "Acid:" ), string_format( "%3d", static_cast( worn_item.acid_resist() ) ), width ) ); prot.push_back( name_and_value( space + _( "Fire:" ), diff --git a/src/dump.cpp b/src/dump.cpp index 6794fd95669ed..8108a4fa05ea3 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -100,7 +100,7 @@ bool game::dump_stats( const std::string &what, dump_mode mode, } else if( what == "ARMOR" ) { header = { - "Name", "Encumber (fit)", "Warmth", "Weight", "Storage", "Coverage", "Bash", "Cut", "Acid", "Fire" + "Name", "Encumber (fit)", "Warmth", "Weight", "Storage", "Coverage", "Bash", "Cut", "Bullet", "Acid", "Fire" }; auto dump = [&rows]( const item & obj ) { std::vector r; @@ -112,6 +112,7 @@ bool game::dump_stats( const std::string &what, dump_mode mode, r.push_back( to_string( obj.get_coverage() ) ); r.push_back( to_string( obj.bash_resist() ) ); r.push_back( to_string( obj.cut_resist() ) ); + r.push_back( to_string( obj.bullet_resist() ) ); r.push_back( to_string( obj.acid_resist() ) ); r.push_back( to_string( obj.fire_resist() ) ); rows.push_back( r ); diff --git a/src/game_inventory.cpp b/src/game_inventory.cpp index 61c1410be796f..e1a9f297971ae 100644 --- a/src/game_inventory.cpp +++ b/src/game_inventory.cpp @@ -293,6 +293,10 @@ class armor_inventory_preset: public inventory_selector_preset return get_number_string( loc->cut_resist() ); }, _( "CUT" ) ); + append_cell( [ this ]( const item_location & loc ) { + return get_number_string( loc->bullet_resist() ); + }, _( "BULLET" ) ); + append_cell( [ this ]( const item_location & loc ) { return get_number_string( loc->acid_resist() ); }, _( "ACID" ) ); diff --git a/src/item.cpp b/src/item.cpp index a049a0a1f447c..9a6fbcfa09ab3 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -2310,7 +2310,8 @@ void item::armor_protection_info( std::vector &info, const iteminfo_qu if( parts->test( iteminfo_parts::ARMOR_PROTECTION ) ) { info.push_back( iteminfo( "ARMOR", _( "Protection: Bash: " ), "", iteminfo::no_newline, bash_resist() ) ); - info.push_back( iteminfo( "ARMOR", space + _( "Cut: " ), cut_resist() ) ); + info.push_back( iteminfo( "ARMOR", space + _( "Cut: " ), "", iteminfo::no_newline, cut_resist() ) ); + info.push_back( iteminfo( "ARMOR", space + _( "Ballistic: " ), bullet_resist() ) ); info.push_back( iteminfo( "ARMOR", space + _( "Acid: " ), "", iteminfo::no_newline, acid_resist() ) ); info.push_back( iteminfo( "ARMOR", space + _( "Fire: " ), "", @@ -3135,6 +3136,15 @@ void item::bionic_info( std::vector &info, const iteminfo_query *parts } } + if( !bid->bullet_protec.empty() ) { + info.push_back( iteminfo( "DESCRIPTION", _( "Ballistic Protection: " ), + iteminfo::no_newline ) ); + for( const std::pair &element : bid->bullet_protec ) { + info.push_back( iteminfo( "CBM", body_part_name_as_heading( element.first->token, 1 ), + " ", iteminfo::no_newline, element.second ) ); + } + } + if( !bid->stat_bonus.empty() ) { info.push_back( iteminfo( "DESCRIPTION", _( "Stat Bonus: " ), iteminfo::no_newline ) ); diff --git a/src/iuse_actor.cpp b/src/iuse_actor.cpp index 14ea87d28e584..d5266d3005b30 100644 --- a/src/iuse_actor.cpp +++ b/src/iuse_actor.cpp @@ -4740,6 +4740,8 @@ int sew_advanced_actor::use( player &p, item &it, bool, const tripoint & ) const std::string desc; desc += format_desc_string( _( "Bash" ), mod.bash_resist(), temp_item.bash_resist(), true ); desc += format_desc_string( _( "Cut" ), mod.cut_resist(), temp_item.cut_resist(), true ); + desc += format_desc_string( _( "Ballistic" ), mod.bullet_resist(), temp_item.bullet_resist(), + true ); desc += format_desc_string( _( "Acid" ), mod.acid_resist(), temp_item.acid_resist(), true ); desc += format_desc_string( _( "Fire" ), mod.fire_resist(), temp_item.fire_resist(), true ); desc += format_desc_string( _( "Warmth" ), mod.get_warmth(), temp_item.get_warmth(), true ); diff --git a/tests/iteminfo_test.cpp b/tests/iteminfo_test.cpp index 5fd305fc790cf..bd82c59011199 100644 --- a/tests/iteminfo_test.cpp +++ b/tests/iteminfo_test.cpp @@ -239,7 +239,7 @@ TEST_CASE( "armor coverage and protection values", "[item][iteminfo][armor]" ) "Coverage: 90% Warmth: 5\n" "--\n" "Encumbrance: 3 (poor fit)\n" - "Protection: Bash: 1 Cut: 1 Bullet: 1\n" + "Protection: Bash: 1 Cut: 1 Ballistic: 1\n" " Acid: 0 Fire: 0 Environmental: 0\n" ); } From 95322c07965fae3dddcc40eff92e55c55cd85433 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Fri, 20 Mar 2020 11:43:11 -0700 Subject: [PATCH 11/48] Update materials for bullet damage Currently, it's just 80% of cut, arithmetically rounded --- data/json/materials.json | 76 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/data/json/materials.json b/data/json/materials.json index 30f0c7030b822..a122c7a7a9380 100644 --- a/data/json/materials.json +++ b/data/json/materials.json @@ -10,6 +10,7 @@ "edible": true, "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 0, "fire_resist": 0, "elec_resist": 0, @@ -33,6 +34,7 @@ "latent_heat": 50, "bash_resist": 8, "cut_resist": 12, + "bullet_resist": 10, "acid_resist": 20, "fire_resist": 8, "elec_resist": 8, @@ -54,6 +56,7 @@ "latent_heat": 398, "bash_resist": 0, "cut_resist": 4, + "bullet_resist": 3, "acid_resist": 4, "fire_resist": 2, "elec_resist": 0, @@ -74,6 +77,7 @@ "latent_heat": 333, "bash_resist": 3, "cut_resist": 4, + "bullet_resist": 3, "acid_resist": 13, "fire_resist": 2, "elec_resist": 2, @@ -101,6 +105,7 @@ "rotting": true, "bash_resist": 2, "cut_resist": 3, + "bullet_resist": 2, "acid_resist": 7, "fire_resist": 1, "elec_resist": 2, @@ -127,6 +132,7 @@ "latent_heat": 205, "bash_resist": 3, "cut_resist": 4, + "bullet_resist": 3, "acid_resist": 16, "fire_resist": 2, "elec_resist": 0, @@ -142,6 +148,7 @@ "density": 58, "bash_resist": 4, "cut_resist": 5, + "bullet_resist": 4, "acid_resist": 1, "fire_resist": 2, "elec_resist": 0, @@ -163,6 +170,7 @@ "latent_heat": 273, "bash_resist": 6, "cut_resist": 6, + "bullet_resist": 5, "acid_resist": 7, "fire_resist": 3, "elec_resist": 0, @@ -182,6 +190,7 @@ "latent_heat": 333, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 1, "fire_resist": 0, "elec_resist": 2, @@ -204,6 +213,7 @@ "latent_heat": 333, "bash_resist": 2, "cut_resist": 6, + "bullet_resist": 5, "acid_resist": 10, "fire_resist": 10, "elec_resist": 10, @@ -219,6 +229,7 @@ "density": 4, "bash_resist": 4, "cut_resist": 8, + "bullet_resist": 6, "acid_resist": 10, "fire_resist": 10, "elec_resist": 10, @@ -237,6 +248,7 @@ "latent_heat": 333, "bash_resist": 3, "cut_resist": 4, + "bullet_resist": 3, "acid_resist": 6, "fire_resist": 2, "elec_resist": 2, @@ -262,6 +274,7 @@ "latent_heat": 333, "bash_resist": 2, "cut_resist": 3, + "bullet_resist": 2, "acid_resist": 6, "fire_resist": 3, "elec_resist": 2, @@ -281,6 +294,7 @@ "latent_heat": 205, "bash_resist": 2, "cut_resist": 3, + "bullet_resist": 2, "acid_resist": 0, "fire_resist": 3, "elec_resist": 0, @@ -304,6 +318,7 @@ "reinforces": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 3, "fire_resist": 0, "elec_resist": 2, @@ -329,6 +344,7 @@ "latent_heat": 5200, "bash_resist": 14, "cut_resist": 20, + "bullet_resist": 16, "acid_resist": 10, "fire_resist": 3, "elec_resist": 3, @@ -347,6 +363,7 @@ "latent_heat": 5200, "bash_resist": 14, "cut_resist": 20, + "bullet_resist": 16, "acid_resist": 10, "fire_resist": 3, "elec_resist": 3, @@ -366,6 +383,7 @@ "edible": true, "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 1, "fire_resist": 1, "elec_resist": 0, @@ -388,6 +406,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 1, "fire_resist": 1, "elec_resist": 1, @@ -413,6 +432,7 @@ "soft": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 1, "fire_resist": 1, "elec_resist": 1, @@ -437,6 +457,7 @@ "latent_heat": 333, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 4, "fire_resist": 3, "elec_resist": 2, @@ -458,6 +479,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 2, "fire_resist": 1, "elec_resist": 1, @@ -483,6 +505,7 @@ "soft": true, "bash_resist": 2, "cut_resist": 2, + "bullet_resist": 2, "acid_resist": 3, "fire_resist": 1, "elec_resist": 2, @@ -509,6 +532,7 @@ "soft": true, "bash_resist": 2, "cut_resist": 2, + "bullet_resist": 2, "acid_resist": 4, "fire_resist": 1, "elec_resist": 3, @@ -534,6 +558,7 @@ "latent_heat": 100, "bash_resist": 3, "cut_resist": 4, + "bullet_resist": 3, "acid_resist": 10, "fire_resist": 3, "elec_resist": 4, @@ -558,6 +583,7 @@ "latent_heat": 63, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 10, "fire_resist": 3, "elec_resist": 0, @@ -579,6 +605,7 @@ "latent_heat": 273, "bash_resist": 10, "cut_resist": 16, + "bullet_resist": 13, "acid_resist": 6, "fire_resist": 3, "elec_resist": 0, @@ -601,6 +628,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 1, "fire_resist": 1, "elec_resist": 1, @@ -627,6 +655,7 @@ "rotting": true, "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 1, "fire_resist": 1, "elec_resist": 1, @@ -647,6 +676,7 @@ "latent_heat": 518, "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 0, "fire_resist": 0, "elec_resist": 0, @@ -672,6 +702,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 1, "fire_resist": 1, "elec_resist": 1, @@ -696,6 +727,7 @@ "latent_heat": 273, "bash_resist": 4, "cut_resist": 4, + "bullet_resist": 3, "acid_resist": 5, "fire_resist": 3, "elec_resist": 0, @@ -718,6 +750,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 2, "fire_resist": 1, "elec_resist": 1, @@ -744,6 +777,7 @@ "soft": true, "bash_resist": 2, "cut_resist": 4, + "bullet_resist": 3, "acid_resist": 5, "fire_resist": 3, "elec_resist": 2, @@ -764,6 +798,7 @@ "latent_heat": 273, "bash_resist": 2, "cut_resist": 4, + "bullet_resist": 3, "acid_resist": 5, "fire_resist": 3, "elec_resist": 2, @@ -784,6 +819,7 @@ "latent_heat": 2, "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 8, "fire_resist": 3, "elec_resist": 1, @@ -807,6 +843,7 @@ "reinforces": true, "bash_resist": 2, "cut_resist": 2, + "bullet_resist": 2, "acid_resist": 4, "fire_resist": 2, "elec_resist": 2, @@ -835,6 +872,7 @@ "reinforces": true, "bash_resist": 2, "cut_resist": 2, + "bullet_resist": 2, "acid_resist": 9, "fire_resist": 2, "elec_resist": 2, @@ -862,6 +900,7 @@ "rotting": true, "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 0, "fire_resist": 1, "elec_resist": 0, @@ -887,6 +926,7 @@ "soft": true, "bash_resist": 2, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 1, "fire_resist": 2, "elec_resist": 4, @@ -913,6 +953,7 @@ "soft": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 5, "fire_resist": 20, "elec_resist": 4, @@ -935,6 +976,7 @@ "latent_heat": 333, "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 0, "fire_resist": 1, "elec_resist": 0, @@ -954,6 +996,7 @@ "edible": true, "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 0, "fire_resist": 0, "elec_resist": 0, @@ -977,6 +1020,7 @@ "latent_heat": 333, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 1, "fire_resist": 0, "elec_resist": 2, @@ -999,6 +1043,7 @@ "latent_heat": 333, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 1, "fire_resist": 0, "elec_resist": 2, @@ -1019,6 +1064,7 @@ "latent_heat": 50, "bash_resist": 2, "cut_resist": 2, + "bullet_resist": 2, "acid_resist": 9, "fire_resist": 1, "elec_resist": 2, @@ -1044,6 +1090,7 @@ "latent_heat": 10, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 0, "fire_resist": 0, "elec_resist": 2, @@ -1067,6 +1114,7 @@ "latent_heat": 10, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 0, "fire_resist": 20, "elec_resist": 2, @@ -1085,6 +1133,7 @@ "latent_heat": 10, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 0, "fire_resist": 20, "elec_resist": 2, @@ -1103,6 +1152,7 @@ "latent_heat": 111, "bash_resist": 2, "cut_resist": 3, + "bullet_resist": 2, "acid_resist": 10, "fire_resist": 3, "elec_resist": 0, @@ -1124,6 +1174,7 @@ "latent_heat": 100, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 10, "fire_resist": 3, "elec_resist": 0, @@ -1147,6 +1198,7 @@ "latent_heat": 165, "bash_resist": 5, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 5, "fire_resist": 2, "elec_resist": 11, @@ -1173,6 +1225,7 @@ "specific_heat_solid": 0.45, "latent_heat": 273, "cut_resist": 6, + "bullet_resist": 5, "acid_resist": 7, "fire_resist": 3, "elec_resist": 0, @@ -1195,6 +1248,7 @@ "latent_heat": 273, "bash_resist": 6, "cut_resist": 6, + "bullet_resist": 5, "acid_resist": 8, "fire_resist": 3, "elec_resist": 2, @@ -1214,6 +1268,7 @@ "latent_heat": 273, "bash_resist": 6, "cut_resist": 6, + "bullet_resist": 5, "acid_resist": 5, "fire_resist": 3, "elec_resist": 0, @@ -1235,6 +1290,7 @@ "latent_heat": 273, "bash_resist": 6, "cut_resist": 6, + "bullet_resist": 5, "acid_resist": 30, "fire_resist": 30, "elec_resist": 30, @@ -1256,6 +1312,7 @@ "reinforces": true, "bash_resist": 3, "cut_resist": 3, + "bullet_resist": 2, "acid_resist": 9, "fire_resist": 2, "elec_resist": 2, @@ -1286,6 +1343,7 @@ "//": "Tin has a Mohs hardness of about 1.5, about that of lead.", "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 2, "fire_resist": 3, "elec_resist": 0, @@ -1309,6 +1367,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 2, "fire_resist": 1, "elec_resist": 1, @@ -1335,6 +1394,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 2, "fire_resist": 1, "elec_resist": 1, @@ -1361,6 +1421,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 2, "fire_resist": 1, "elec_resist": 1, @@ -1387,6 +1448,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 2, "fire_resist": 1, "elec_resist": 1, @@ -1413,6 +1475,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 2, "fire_resist": 1, "elec_resist": 1, @@ -1439,6 +1502,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 2, "fire_resist": 1, "elec_resist": 1, @@ -1464,6 +1528,7 @@ "edible": true, "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 0, "fire_resist": 1, "elec_resist": 0, @@ -1489,6 +1554,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 1, "fire_resist": 0, "elec_resist": 1, @@ -1509,6 +1575,7 @@ "latent_heat": 273, "bash_resist": 3, "cut_resist": 2, + "bullet_resist": 2, "acid_resist": 4, "fire_resist": 1, "elec_resist": 2, @@ -1537,6 +1604,7 @@ "reinforces": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 4, "fire_resist": 0, "elec_resist": 2, @@ -1562,6 +1630,7 @@ "latent_heat": 273, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 1, "fire_resist": 0, "elec_resist": 1, @@ -1587,6 +1656,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 2, "fire_resist": 1, "elec_resist": 1, @@ -1613,6 +1683,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 1, "fire_resist": 1, "elec_resist": 1, @@ -1639,6 +1710,7 @@ "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 2, "fire_resist": 1, "elec_resist": 1, @@ -1660,6 +1732,7 @@ "rotting": true, "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 0, "fire_resist": 0, "elec_resist": 0, @@ -1686,6 +1759,7 @@ "rotting": true, "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 0, "fire_resist": 0, "elec_resist": 0, @@ -1709,6 +1783,7 @@ "latent_heat": 273, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 0, "fire_resist": 20, "elec_resist": 0, @@ -1728,6 +1803,7 @@ "latent_heat": 260, "bash_resist": 4, "cut_resist": 3, + "bullet_resist": 2, "acid_resist": 4, "fire_resist": 1, "elec_resist": 0, From 3ad6c13f6ff7a267cdfd7eef8469ef756da4803a Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Fri, 20 Mar 2020 11:29:50 -0700 Subject: [PATCH 12/48] Update guns to use bullet damage --- data/json/items/gun/20x66mm.json | 2 +- data/json/items/gun/22.json | 12 +++++------ data/json/items/gun/223.json | 16 +++++++-------- data/json/items/gun/3006.json | 4 ++-- data/json/items/gun/300BLK.json | 2 +- data/json/items/gun/308.json | 20 +++++++++---------- data/json/items/gun/38.json | 6 +++--- data/json/items/gun/40.json | 10 +++++----- data/json/items/gun/40x46mm.json | 4 ++-- data/json/items/gun/40x53mm.json | 2 +- data/json/items/gun/44.json | 8 ++++---- data/json/items/gun/45.json | 10 +++++----- data/json/items/gun/4570.json | 4 ++-- data/json/items/gun/45colt.json | 2 +- data/json/items/gun/50.json | 10 +++++----- data/json/items/gun/500.json | 2 +- data/json/items/gun/57.json | 2 +- data/json/items/gun/5x50.json | 2 +- data/json/items/gun/762.json | 2 +- data/json/items/gun/762R.json | 2 +- data/json/items/gun/762x25.json | 2 +- data/json/items/gun/8x40mm.json | 12 +++++------ data/json/items/gun/9mm.json | 24 +++++++++++----------- data/json/items/gun/flammable.json | 2 +- data/json/items/gun/flintlock.json | 8 ++++---- data/json/items/gun/shot.json | 32 +++++++++++++++--------------- 26 files changed, 101 insertions(+), 101 deletions(-) diff --git a/data/json/items/gun/20x66mm.json b/data/json/items/gun/20x66mm.json index f13bdf942fe30..511d7e442f193 100644 --- a/data/json/items/gun/20x66mm.json +++ b/data/json/items/gun/20x66mm.json @@ -19,7 +19,7 @@ "ammo": "20x66mm", "skill": "shotgun", "range": 6, - "ranged_damage": { "damage_type": "stab", "amount": 4 }, + "ranged_damage": { "damage_type": "bullet", "amount": 4 }, "dispersion": 285, "durability": 9, "clip_size": 5, diff --git a/data/json/items/gun/22.json b/data/json/items/gun/22.json index ad9bda30a33d4..cc1cf3c6320e5 100644 --- a/data/json/items/gun/22.json +++ b/data/json/items/gun/22.json @@ -17,7 +17,7 @@ "color": "light_gray", "ammo": "22", "skill": "smg", - "ranged_damage": { "damage_type": "stab", "amount": 4 }, + "ranged_damage": { "damage_type": "bullet", "amount": 4 }, "dispersion": 280, "durability": 6, "min_cycle_recoil": 39, @@ -58,7 +58,7 @@ "color": "brown", "ammo": "22", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 5 }, + "ranged_damage": { "damage_type": "bullet", "amount": 5 }, "dispersion": 90, "durability": 8, "blackpowder_tolerance": 56, @@ -97,7 +97,7 @@ "material": [ "steel", "wood" ], "color": "dark_gray", "ammo": "22", - "ranged_damage": { "damage_type": "stab", "amount": -2 }, + "ranged_damage": { "damage_type": "bullet", "amount": -2 }, "dispersion": 520, "durability": 6, "blackpowder_tolerance": 96, @@ -133,7 +133,7 @@ "color": "brown", "ammo": "22", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 550, "durability": 6, "blackpowder_tolerance": 60, @@ -172,7 +172,7 @@ "color": "brown", "ammo": "22", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 4 }, + "ranged_damage": { "damage_type": "bullet", "amount": 4 }, "dispersion": 110, "durability": 8, "min_cycle_recoil": 39, @@ -224,7 +224,7 @@ "color": "dark_gray", "ammo": "22", "skill": "pistol", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 480, "durability": 8, "min_cycle_recoil": 39, diff --git a/data/json/items/gun/223.json b/data/json/items/gun/223.json index 2e3a75e08dd6d..72ca143f9acf6 100644 --- a/data/json/items/gun/223.json +++ b/data/json/items/gun/223.json @@ -16,7 +16,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "223", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 150, "durability": 8, "min_cycle_recoil": 1350, @@ -164,7 +164,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "223", - "ranged_damage": { "damage_type": "stab", "amount": -2 }, + "ranged_damage": { "damage_type": "bullet", "amount": -2 }, "dispersion": 180, "durability": 8, "min_cycle_recoil": 1350, @@ -299,7 +299,7 @@ ] ] ], - "relative": { "ranged_damage": { "damage_type": "stab", "amount": 1 }, "durability": 1 } + "relative": { "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "durability": 1 } }, { "id": "m4a1", @@ -318,7 +318,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "223", - "ranged_damage": { "damage_type": "stab", "amount": -2 }, + "ranged_damage": { "damage_type": "bullet", "amount": -2 }, "dispersion": 180, "durability": 6, "min_cycle_recoil": 1350, @@ -428,7 +428,7 @@ "color": "brown", "ammo": "223", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": -2 }, + "ranged_damage": { "damage_type": "bullet", "amount": -2 }, "dispersion": 550, "durability": 6, "blackpowder_tolerance": 60, @@ -466,7 +466,7 @@ "symbol": "(", "color": "brown", "ammo": "223", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 100, "durability": 8, "min_cycle_recoil": 1350, @@ -504,7 +504,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "223", - "ranged_damage": { "damage_type": "stab", "amount": -2 }, + "ranged_damage": { "damage_type": "bullet", "amount": -2 }, "dispersion": 150, "durability": 8, "min_cycle_recoil": 1350, @@ -627,7 +627,7 @@ "symbol": "(", "color": "brown", "ammo": "223", - "ranged_damage": { "damage_type": "stab", "amount": -4 }, + "ranged_damage": { "damage_type": "bullet", "amount": -4 }, "dispersion": 550, "durability": 6, "blackpowder_tolerance": 32, diff --git a/data/json/items/gun/3006.json b/data/json/items/gun/3006.json index ebb617ed03a44..6bc1134fc8a55 100644 --- a/data/json/items/gun/3006.json +++ b/data/json/items/gun/3006.json @@ -17,7 +17,7 @@ "color": "brown", "ammo": "3006", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 90, "durability": 7, "blackpowder_tolerance": 24, @@ -199,7 +199,7 @@ "color": "brown", "ammo": "3006", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": -2 }, + "ranged_damage": { "damage_type": "bullet", "amount": -2 }, "dispersion": 550, "durability": 6, "blackpowder_tolerance": 60, diff --git a/data/json/items/gun/300BLK.json b/data/json/items/gun/300BLK.json index d0c9cf66e5703..09233a3aa16a1 100644 --- a/data/json/items/gun/300BLK.json +++ b/data/json/items/gun/300BLK.json @@ -16,7 +16,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "300blk", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 150, "durability": 8, "min_cycle_recoil": 1700, diff --git a/data/json/items/gun/308.json b/data/json/items/gun/308.json index fc9799bf118b5..b575e2220143c 100644 --- a/data/json/items/gun/308.json +++ b/data/json/items/gun/308.json @@ -16,7 +16,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "308", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 150, "durability": 8, "min_cycle_recoil": 2700, @@ -41,7 +41,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "308", - "ranged_damage": { "damage_type": "stab", "amount": -2 }, + "ranged_damage": { "damage_type": "bullet", "amount": -2 }, "dispersion": 150, "min_cycle_recoil": 2700, "durability": 8, @@ -66,7 +66,7 @@ "color": "dark_gray", "ammo": "308", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 200, "durability": 9, "blackpowder_tolerance": 96, @@ -121,7 +121,7 @@ "symbol": "(", "color": "brown", "ammo": "308", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 110, "durability": 8, "min_cycle_recoil": 2700, @@ -197,7 +197,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "308", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 180, "durability": 7, "min_cycle_recoil": 2700, @@ -237,7 +237,7 @@ "symbol": "(", "color": "brown", "ammo": "308", - "ranged_damage": { "damage_type": "stab", "amount": -5 }, + "ranged_damage": { "damage_type": "bullet", "amount": -5 }, "dispersion": 550, "durability": 6, "blackpowder_tolerance": 60, @@ -292,7 +292,7 @@ "description": "A highly accurate and modular battle rifle specially designed for the United States Special Operations Command. The 'H' in its name stands for heavy, as it uses the powerful .308 round.", "weight": "3640 g", "ammo": "308", - "ranged_damage": { "damage_type": "stab", "amount": -3 }, + "ranged_damage": { "damage_type": "bullet", "amount": -3 }, "min_cycle_recoil": 2700, "magazine_well": 1, "magazines": [ [ "308", [ "scarhmag", "scarhbigmag", "scarhmag_30rd", "scarh_makeshiftmag" ] ] ] @@ -353,7 +353,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "308", - "ranged_damage": { "damage_type": "stab", "amount": -4 }, + "ranged_damage": { "damage_type": "bullet", "amount": -4 }, "dispersion": 180, "durability": 8, "min_cycle_recoil": 2700, @@ -378,7 +378,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "308", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 120, "durability": 8, "min_cycle_recoil": 2700, @@ -402,7 +402,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "308", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 150, "durability": 7, "min_cycle_recoil": 2700, diff --git a/data/json/items/gun/38.json b/data/json/items/gun/38.json index e7d1588ce31c3..ef6992a7c876a 100644 --- a/data/json/items/gun/38.json +++ b/data/json/items/gun/38.json @@ -18,7 +18,7 @@ "color": "brown", "ammo": "38", "skill": "pistol", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 620, "durability": 3, "blackpowder_tolerance": 60, @@ -107,7 +107,7 @@ "color": "brown", "ammo": "38", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 550, "durability": 6, "blackpowder_tolerance": 60, @@ -145,7 +145,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "38", - "ranged_damage": { "damage_type": "stab", "amount": -2 }, + "ranged_damage": { "damage_type": "bullet", "amount": -2 }, "dispersion": 480, "durability": 10, "blackpowder_tolerance": 56, diff --git a/data/json/items/gun/40.json b/data/json/items/gun/40.json index 74fc2c755984c..fb23d38b28d99 100644 --- a/data/json/items/gun/40.json +++ b/data/json/items/gun/40.json @@ -40,7 +40,7 @@ "color": "dark_gray", "ammo": "40", "skill": "pistol", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 480, "durability": 6, "blackpowder_tolerance": 48, @@ -102,7 +102,7 @@ "color": "brown", "ammo": "40", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 550, "durability": 6, "blackpowder_tolerance": 60, @@ -178,7 +178,7 @@ "material": "steel", "color": "dark_gray", "ammo": "40", - "ranged_damage": { "damage_type": "stab", "amount": -4 }, + "ranged_damage": { "damage_type": "bullet", "amount": -4 }, "dispersion": 590, "durability": 4, "blackpowder_tolerance": 24, @@ -219,7 +219,7 @@ "color": "dark_gray", "ammo": "40", "skill": "pistol", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 620, "durability": 6, "blackpowder_tolerance": 60, @@ -256,7 +256,7 @@ "symbol": "(", "color": "dark_gray", "ammo": [ "10mm", "40" ], - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 320, "durability": 8, "blackpowder_tolerance": 56, diff --git a/data/json/items/gun/40x46mm.json b/data/json/items/gun/40x46mm.json index ceaabdec39859..8c2e10d21106f 100644 --- a/data/json/items/gun/40x46mm.json +++ b/data/json/items/gun/40x46mm.json @@ -65,7 +65,7 @@ "bashing": 12, "material": [ "steel", "wood" ], "ammo": "40x46mm", - "ranged_damage": { "damage_type": "stab", "amount": 3 }, + "ranged_damage": { "damage_type": "bullet", "amount": 3 }, "dispersion": 150, "durability": 8, "clip_size": 1, @@ -170,7 +170,7 @@ "material": "steel", "ammo": "40x46mm", "range": 30, - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 300, "durability": 10, "reload": 400, diff --git a/data/json/items/gun/40x53mm.json b/data/json/items/gun/40x53mm.json index c312f5f9657dc..70ff08f63fd2d 100644 --- a/data/json/items/gun/40x53mm.json +++ b/data/json/items/gun/40x53mm.json @@ -15,7 +15,7 @@ "material": "steel", "ammo": "40x53mm", "range": 30, - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 180, "durability": 8, "reload": 400, diff --git a/data/json/items/gun/44.json b/data/json/items/gun/44.json index c8378df2218dd..a0cc73e09032c 100644 --- a/data/json/items/gun/44.json +++ b/data/json/items/gun/44.json @@ -17,7 +17,7 @@ "color": "light_gray", "ammo": "44", "skill": "pistol", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 480, "durability": 7, "min_cycle_recoil": 1413, @@ -54,7 +54,7 @@ "material": [ "steel", "wood" ], "color": "dark_gray", "ammo": "44", - "ranged_damage": { "damage_type": "stab", "amount": 2 }, + "ranged_damage": { "damage_type": "bullet", "amount": 2 }, "dispersion": 180, "durability": 8, "blackpowder_tolerance": 32, @@ -91,7 +91,7 @@ "color": "brown", "ammo": "44", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 550, "durability": 6, "blackpowder_tolerance": 60, @@ -162,7 +162,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "44", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 280, "durability": 8, "blackpowder_tolerance": 56, diff --git a/data/json/items/gun/45.json b/data/json/items/gun/45.json index 574ea2abcaa46..b34c89941277d 100644 --- a/data/json/items/gun/45.json +++ b/data/json/items/gun/45.json @@ -57,7 +57,7 @@ "color": "dark_gray", "ammo": "45", "skill": "smg", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 240, "durability": 8, "min_cycle_recoil": 540, @@ -177,7 +177,7 @@ "color": "brown", "ammo": "45", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 550, "durability": 6, "blackpowder_tolerance": 60, @@ -215,7 +215,7 @@ "material": "steel", "color": "dark_gray", "ammo": "45", - "ranged_damage": { "damage_type": "stab", "amount": -4 }, + "ranged_damage": { "damage_type": "bullet", "amount": -4 }, "dispersion": 590, "durability": 4, "blackpowder_tolerance": 24, @@ -256,7 +256,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "45", - "ranged_damage": { "damage_type": "stab", "amount": 2 }, + "ranged_damage": { "damage_type": "bullet", "amount": 2 }, "dispersion": 620, "durability": 7, "blackpowder_tolerance": 60, @@ -281,7 +281,7 @@ "color": "brown", "ammo": "45", "skill": "smg", - "ranged_damage": { "damage_type": "stab", "amount": 2 }, + "ranged_damage": { "damage_type": "bullet", "amount": 2 }, "dispersion": 360, "durability": 7, "min_cycle_recoil": 540, diff --git a/data/json/items/gun/4570.json b/data/json/items/gun/4570.json index 7bc4e33e8088e..78dc9f7eaa09f 100644 --- a/data/json/items/gun/4570.json +++ b/data/json/items/gun/4570.json @@ -50,7 +50,7 @@ "color": "dark_gray", "symbol": "(", "ammo": [ "4570" ], - "ranged_damage": { "damage_type": "stab", "amount": -15 }, + "ranged_damage": { "damage_type": "bullet", "amount": -15 }, "dispersion": 180, "durability": 8, "clip_size": 5, @@ -83,7 +83,7 @@ "symbol": "(", "ammo": [ "4570" ], "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 4 }, + "ranged_damage": { "damage_type": "bullet", "amount": 4 }, "dispersion": 100, "durability": 8, "clip_size": 1, diff --git a/data/json/items/gun/45colt.json b/data/json/items/gun/45colt.json index a22746d9a1a4b..5238b45f452e4 100644 --- a/data/json/items/gun/45colt.json +++ b/data/json/items/gun/45colt.json @@ -50,7 +50,7 @@ "material": [ "steel", "wood" ], "color": "brown", "ammo": "45colt", - "ranged_damage": { "damage_type": "stab", "amount": 5 }, + "ranged_damage": { "damage_type": "bullet", "amount": 5 }, "dispersion": 180, "durability": 7, "clip_size": 14, diff --git a/data/json/items/gun/50.json b/data/json/items/gun/50.json index 6dd5bc969ac88..21f443a27d855 100644 --- a/data/json/items/gun/50.json +++ b/data/json/items/gun/50.json @@ -16,7 +16,7 @@ "material": "steel", "ammo": "50", "range": 100, - "ranged_damage": { "damage_type": "stab", "amount": -5 }, + "ranged_damage": { "damage_type": "bullet", "amount": -5 }, "dispersion": 130, "durability": 8, "barrel_length": "1250 ml", @@ -90,7 +90,7 @@ "weight": -21500, "volume": -6, "price": -1210000, - "ranged_damage": { "damage_type": "stab", "amount": -4 }, + "ranged_damage": { "damage_type": "bullet", "amount": -4 }, "dispersion": 60, "barrel_length": -1 }, @@ -112,7 +112,7 @@ "material": "steel", "ammo": "50", "range": 115, - "ranged_damage": { "damage_type": "stab", "amount": -5 }, + "ranged_damage": { "damage_type": "bullet", "amount": -5 }, "dispersion": 80, "durability": 7, "reload": 400, @@ -138,7 +138,7 @@ "material": "steel", "ammo": "50", "range": 45, - "ranged_damage": { "damage_type": "stab", "amount": -5 }, + "ranged_damage": { "damage_type": "bullet", "amount": -5 }, "dispersion": 50, "durability": 8, "reload": 450, @@ -164,7 +164,7 @@ "material": "steel", "ammo": "50", "range": 45, - "ranged_damage": { "damage_type": "stab", "amount": -5 }, + "ranged_damage": { "damage_type": "bullet", "amount": -5 }, "dispersion": 110, "durability": 8, "barrel_length": "1250 ml", diff --git a/data/json/items/gun/500.json b/data/json/items/gun/500.json index ab2c87920f83e..4ccb00b0a9c08 100644 --- a/data/json/items/gun/500.json +++ b/data/json/items/gun/500.json @@ -15,7 +15,7 @@ "material": [ "steel", "wood" ], "color": "dark_gray", "ammo": "500", - "ranged_damage": { "damage_type": "stab", "amount": 2 }, + "ranged_damage": { "damage_type": "bullet", "amount": 2 }, "dispersion": 180, "durability": 8, "blackpowder_tolerance": 32, diff --git a/data/json/items/gun/57.json b/data/json/items/gun/57.json index fdc23501fa1f5..8c1a9f7fbf484 100644 --- a/data/json/items/gun/57.json +++ b/data/json/items/gun/57.json @@ -17,7 +17,7 @@ "color": "light_gray", "ammo": "57", "skill": "pistol", - "ranged_damage": { "damage_type": "stab", "amount": -2 }, + "ranged_damage": { "damage_type": "bullet", "amount": -2 }, "dispersion": 440, "durability": 8, "min_cycle_recoil": 81, diff --git a/data/json/items/gun/5x50.json b/data/json/items/gun/5x50.json index 36f16b3096687..cf198c2964778 100644 --- a/data/json/items/gun/5x50.json +++ b/data/json/items/gun/5x50.json @@ -18,7 +18,7 @@ "ammo": "5x50", "skill": "smg", "range": 10, - "ranged_damage": { "damage_type": "stab", "amount": 10 }, + "ranged_damage": { "damage_type": "bullet", "amount": 10 }, "dispersion": 220, "durability": 9, "barrel_length": "250 ml", diff --git a/data/json/items/gun/762.json b/data/json/items/gun/762.json index 70605df755f0d..e11cd467dba6a 100644 --- a/data/json/items/gun/762.json +++ b/data/json/items/gun/762.json @@ -94,7 +94,7 @@ "color": "brown", "ammo": "762", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 90, "durability": 8, "clip_size": 10, diff --git a/data/json/items/gun/762R.json b/data/json/items/gun/762R.json index 9928e2c8a8de3..e3c0084f0c841 100644 --- a/data/json/items/gun/762R.json +++ b/data/json/items/gun/762R.json @@ -11,7 +11,7 @@ "relative": { "volume": -2, "range": -6, - "ranged_damage": { "damage_type": "stab", "amount": -3 }, + "ranged_damage": { "damage_type": "bullet", "amount": -3 }, "dispersion": 60, "barrel_length": -2 } diff --git a/data/json/items/gun/762x25.json b/data/json/items/gun/762x25.json index 348fb74d5ae4d..3dc8d32e6f262 100644 --- a/data/json/items/gun/762x25.json +++ b/data/json/items/gun/762x25.json @@ -18,7 +18,7 @@ "ammo": "762x25", "skill": "smg", "range": 2, - "ranged_damage": { "damage_type": "stab", "amount": 2 }, + "ranged_damage": { "damage_type": "bullet", "amount": 2 }, "dispersion": 120, "durability": 8, "min_cycle_recoil": 270, diff --git a/data/json/items/gun/8x40mm.json b/data/json/items/gun/8x40mm.json index d6f537aea2d81..b1b86b5db7dea 100644 --- a/data/json/items/gun/8x40mm.json +++ b/data/json/items/gun/8x40mm.json @@ -54,7 +54,7 @@ "ammo": "8x40mm", "skill": "rifle", "range": 20, - "ranged_damage": { "damage_type": "stab", "amount": 10 }, + "ranged_damage": { "damage_type": "bullet", "amount": 10 }, "dispersion": 10, "durability": 9, "modes": [ [ "DEFAULT", "semi-auto", 1 ], [ "AUTO", "auto", 2 ] ], @@ -127,7 +127,7 @@ "ammo": "8x40mm", "skill": "rifle", "range": -6, - "ranged_damage": { "damage_type": "stab", "amount": 10 }, + "ranged_damage": { "damage_type": "bullet", "amount": 10 }, "dispersion": 90, "durability": 9, "modes": [ [ "DEFAULT", "semi-auto", 1 ], [ "AUTO", "auto", 6 ] ], @@ -155,7 +155,7 @@ "color": "dark_gray", "ammo": "8x40mm", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 5 }, + "ranged_damage": { "damage_type": "bullet", "amount": 5 }, "dispersion": 50, "durability": 9, "modes": [ [ "DEFAULT", "semi-auto", 1 ], [ "AUTO", "auto", 3 ] ], @@ -191,7 +191,7 @@ "color": "dark_gray", "ammo": "8x40mm", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 5 }, + "ranged_damage": { "damage_type": "bullet", "amount": 5 }, "dispersion": 70, "durability": 9, "reload": 200, @@ -228,7 +228,7 @@ "color": "dark_gray", "ammo": "8x40mm", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 10 }, + "ranged_damage": { "damage_type": "bullet", "amount": 10 }, "dispersion": 30, "durability": 9, "modes": [ [ "DEFAULT", "semi-auto", 1 ], [ "AUTO", "auto", 4 ] ], @@ -265,7 +265,7 @@ "color": "dark_gray", "ammo": "8x40mm", "skill": "pistol", - "ranged_damage": { "damage_type": "stab", "amount": 10 }, + "ranged_damage": { "damage_type": "bullet", "amount": 10 }, "dispersion": 175, "durability": 9, "clip_size": 5, diff --git a/data/json/items/gun/9mm.json b/data/json/items/gun/9mm.json index 868733905da22..8700550026736 100644 --- a/data/json/items/gun/9mm.json +++ b/data/json/items/gun/9mm.json @@ -41,7 +41,7 @@ "color": "dark_gray", "ammo": "9mm", "skill": "smg", - "ranged_damage": { "damage_type": "stab", "amount": 2 }, + "ranged_damage": { "damage_type": "bullet", "amount": 2 }, "dispersion": 280, "durability": 6, "min_cycle_recoil": 450, @@ -83,7 +83,7 @@ "ammo": "9mm", "skill": "rifle", "range": 20, - "ranged_damage": { "damage_type": "stab", "amount": 2 }, + "ranged_damage": { "damage_type": "bullet", "amount": 2 }, "dispersion": 180, "durability": 10, "min_cycle_recoil": 450, @@ -123,7 +123,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "9mm", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 480, "durability": 6, "blackpowder_tolerance": 48, @@ -149,7 +149,7 @@ "color": "dark_gray", "ammo": "9mm", "skill": "smg", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 240, "durability": 8, "min_cycle_recoil": 450, @@ -289,7 +289,7 @@ "ammo": "9mm", "skill": "rifle", "range": 18, - "ranged_damage": { "damage_type": "stab", "amount": 3 }, + "ranged_damage": { "damage_type": "bullet", "amount": 3 }, "dispersion": 180, "durability": 7, "min_cycle_recoil": 450, @@ -377,7 +377,7 @@ "color": "brown", "ammo": "9mm", "skill": "rifle", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 550, "durability": 6, "blackpowder_tolerance": 60, @@ -415,7 +415,7 @@ "material": "steel", "color": "dark_gray", "ammo": "9mm", - "ranged_damage": { "damage_type": "stab", "amount": -3 }, + "ranged_damage": { "damage_type": "bullet", "amount": -3 }, "dispersion": 590, "durability": 4, "blackpowder_tolerance": 24, @@ -455,7 +455,7 @@ "color": "dark_gray", "ammo": "9mm", "skill": "smg", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 360, "durability": 5, "blackpowder_tolerance": 24, @@ -531,7 +531,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "9mm", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 400, "durability": 9, "blackpowder_tolerance": 48, @@ -556,7 +556,7 @@ "material": "steel", "color": "dark_gray", "ammo": "9mm", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 360, "durability": 7, "min_cycle_recoil": 450, @@ -595,7 +595,7 @@ "material": [ "plastic", "steel" ], "color": "dark_gray", "ammo": "9mm", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "dispersion": 480, "durability": 6, "blackpowder_tolerance": 48, @@ -624,7 +624,7 @@ "description": "The Kel-Tec PF-9 remains one of the most popular backup pistols due to its history of reliability, affordability, and concealability. Chambered in 9x19mm, recoil is best described as unpleasant, and follow-up shots are difficult to place quickly.", "weight": "360 g", "volume": "218ml", - "ranged_damage": { "damage_type": "stab", "amount": -1 }, + "ranged_damage": { "damage_type": "bullet", "amount": -1 }, "price": 18000, "price_postapoc": 2000, "bashing": 2, diff --git a/data/json/items/gun/flammable.json b/data/json/items/gun/flammable.json index f7cb7210b4b1e..7368f8b5a7d09 100644 --- a/data/json/items/gun/flammable.json +++ b/data/json/items/gun/flammable.json @@ -43,7 +43,7 @@ "bashing": 10, "material": [ "superalloy", "ceramic" ], "range": 10, - "ranged_damage": { "damage_type": "stab", "amount": 10 }, + "ranged_damage": { "damage_type": "bullet", "amount": 10 }, "dispersion": 240, "durability": 9, "modes": [ [ "DEFAULT", "semi-auto", 1 ], [ "AUTO", "auto", 4 ] ], diff --git a/data/json/items/gun/flintlock.json b/data/json/items/gun/flintlock.json index 92e2031481609..ca83d77ae8aa2 100644 --- a/data/json/items/gun/flintlock.json +++ b/data/json/items/gun/flintlock.json @@ -18,7 +18,7 @@ ], "volume": "2250 ml", "weight": "3600 g", - "relative": { "range": -2, "ranged_damage": { "damage_type": "stab", "amount": -4 } }, + "relative": { "range": -2, "ranged_damage": { "damage_type": "bullet", "amount": -4 } }, "proportional": { "bashing": 0.6, "dispersion": 1.35, "reload": 0.6 } }, { @@ -30,7 +30,7 @@ "clip_size": 2, "price_postapoc": 2750, "proportional": { "dispersion": 1.3, "weight": 1.25, "volume": 1.25 }, - "relative": { "weight": 400, "range": -1, "ranged_damage": { "damage_type": "stab", "amount": -2 } }, + "relative": { "weight": 400, "range": -1, "ranged_damage": { "damage_type": "bullet", "amount": -2 } }, "extend": { "flags": [ "RELOAD_ONE" ] } }, { @@ -52,7 +52,7 @@ "ammo": "flintlock", "skill": "pistol", "range": 2, - "ranged_damage": { "damage_type": "stab", "amount": 2 }, + "ranged_damage": { "damage_type": "bullet", "amount": 2 }, "dispersion": 620, "durability": 6, "blackpowder_tolerance": 96, @@ -87,7 +87,7 @@ "ammo": "flintlock", "skill": "rifle", "range": 6, - "ranged_damage": { "damage_type": "stab", "amount": 10 }, + "ranged_damage": { "damage_type": "bullet", "amount": 10 }, "dispersion": 180, "durability": 6, "blackpowder_tolerance": 96, diff --git a/data/json/items/gun/shot.json b/data/json/items/gun/shot.json index 3157f4c106c41..cf14f66bf4c5f 100644 --- a/data/json/items/gun/shot.json +++ b/data/json/items/gun/shot.json @@ -16,7 +16,7 @@ "symbol": "(", "color": "brown", "ammo": "shot", - "ranged_damage": { "damage_type": "stab", "amount": -11 }, + "ranged_damage": { "damage_type": "bullet", "amount": -11 }, "dispersion": 900, "durability": 6, "clip_size": 1, @@ -70,7 +70,7 @@ "to_hit": -1, "bashing": 12, "material": [ "steel", "wood" ], - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 425, "durability": 6, "clip_size": 5, @@ -90,7 +90,7 @@ "to_hit": -1, "bashing": 9, "material": [ "steel", "plastic" ], - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 425, "sight_dispersion": 500, "durability": 7, @@ -157,7 +157,7 @@ "to_hit": -1, "bashing": 12, "material": [ "steel", "plastic" ], - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 345, "durability": 9, "clip_size": 8, @@ -190,7 +190,7 @@ "barrel_length": "108 ml", "material": [ "steel", "aluminum", "plastic" ], "dispersion": 325, - "ranged_damage": { "damage_type": "stab", "amount": 4 }, + "ranged_damage": { "damage_type": "bullet", "amount": 4 }, "durability": 9, "clip_size": 6 }, @@ -208,7 +208,7 @@ "bashing": 12, "barrel_length": "18 ml", "dispersion": 375, - "ranged_damage": { "damage_type": "stab", "amount": 1 } + "ranged_damage": { "damage_type": "bullet", "amount": 1 } }, { "id": "mossberg_590", @@ -238,7 +238,7 @@ "to_hit": -1, "bashing": 12, "material": [ "steel", "aluminum", "plastic" ], - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 345, "durability": 7, "clip_size": 8, @@ -294,7 +294,7 @@ "to_hit": -1, "bashing": 12, "material": [ "steel", "wood" ], - "ranged_damage": { "damage_type": "stab", "amount": 2 }, + "ranged_damage": { "damage_type": "bullet", "amount": 2 }, "dispersion": 855, "durability": 6, "clip_size": 1, @@ -328,7 +328,7 @@ "bashing": 13, "material": [ "steel", "plastic" ], "dispersion": 305, - "ranged_damage": { "damage_type": "stab", "amount": 6 }, + "ranged_damage": { "damage_type": "bullet", "amount": 6 }, "durability": 8, "clip_size": 5, "barrel_length": "135 ml" @@ -342,7 +342,7 @@ "weight": "2812 g", "volume": "1427 ml", "looks_like": "remington_870", - "ranged_damage": { "damage_type": "stab", "amount": -5 }, + "ranged_damage": { "damage_type": "bullet", "amount": -5 }, "skill": "pistol", "modes": [ [ "DEFAULT", "single", 1 ] ], "//": "dispersion should be 300 moa, but CDDA exaggerates dispersion.", @@ -376,7 +376,7 @@ "weight": "3402 g", "volume": "2696 ml", "looks_like": "remington_870", - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 345, "clip_size": 7, "price": 33800 @@ -396,7 +396,7 @@ "bashing": 13, "material": [ "steel", "plastic" ], "dispersion": 315, - "ranged_damage": { "damage_type": "stab", "amount": 6 }, + "ranged_damage": { "damage_type": "bullet", "amount": 6 }, "durability": 8, "clip_size": 10, "built_in_mods": [ "match_trigger" ], @@ -592,7 +592,7 @@ "dispersion": 380, "durability": 6, "clip_size": 9, - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "built_in_mods": [ "wire_stock" ], "valid_mod_locations": [ [ "accessories", 4 ], @@ -627,7 +627,7 @@ "durability": 6, "clip_size": 5, "sight_dispersion": 500, - "ranged_damage": { "damage_type": "stab", "amount": 1 }, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "built_in_mods": [ "ts12_aux_shotgun", "ts12_aux_shotgun2" ], "valid_mod_locations": [ [ "accessories", 2 ], @@ -689,7 +689,7 @@ "to_hit": -1, "bashing": 8, "material": [ "steel", "wood" ], - "ranged_damage": { "damage_type": "stab", "amount": -9 }, + "ranged_damage": { "damage_type": "bullet", "amount": -9 }, "dispersion": 860, "durability": 6, "clip_size": 6, @@ -722,7 +722,7 @@ "price_postapoc": 2500, "bashing": 11, "material": [ "steel", "wood" ], - "ranged_damage": { "damage_type": "stab", "amount": 2 }, + "ranged_damage": { "damage_type": "bullet", "amount": 2 }, "dispersion": 360, "durability": 8, "clip_size": 6, From 504142d311e8afbd5d89b5bb30f04e6ebf6709a9 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Fri, 20 Mar 2020 11:30:11 -0700 Subject: [PATCH 13/48] Update ammo to bullet damage --- data/json/items/ammo/10mm.json | 6 ++--- data/json/items/ammo/12mm.json | 2 +- data/json/items/ammo/20x66mm.json | 22 ++++++++-------- data/json/items/ammo/22.json | 16 ++++++------ data/json/items/ammo/223.json | 16 ++++++------ data/json/items/ammo/270win.json | 6 ++--- data/json/items/ammo/300.json | 6 ++--- data/json/items/ammo/3006.json | 16 ++++++------ data/json/items/ammo/300blk.json | 8 +++--- data/json/items/ammo/308.json | 16 ++++++------ data/json/items/ammo/32.json | 6 ++--- data/json/items/ammo/357mag.json | 12 ++++----- data/json/items/ammo/357sig.json | 8 +++--- data/json/items/ammo/36paper.json | 2 +- data/json/items/ammo/38.json | 16 ++++++------ data/json/items/ammo/380.json | 16 ++++++------ data/json/items/ammo/38super.json | 4 +-- data/json/items/ammo/40.json | 12 ++++----- data/json/items/ammo/40x46mm.json | 22 ++++++++-------- data/json/items/ammo/40x53mm.json | 12 ++++----- data/json/items/ammo/410shot.json | 4 +-- data/json/items/ammo/44.json | 12 ++++----- data/json/items/ammo/44paper.json | 2 +- data/json/items/ammo/45.json | 16 ++++++------ data/json/items/ammo/454.json | 6 ++--- data/json/items/ammo/4570.json | 14 +++++----- data/json/items/ammo/45colt.json | 4 +-- data/json/items/ammo/46.json | 6 ++--- data/json/items/ammo/460.json | 12 ++++----- data/json/items/ammo/50.json | 14 +++++----- data/json/items/ammo/500.json | 6 ++--- data/json/items/ammo/545x39.json | 8 +++--- data/json/items/ammo/57.json | 6 ++--- data/json/items/ammo/5x50.json | 6 ++--- data/json/items/ammo/66mm.json | 2 +- data/json/items/ammo/700nx.json | 4 +-- data/json/items/ammo/762.json | 8 +++--- data/json/items/ammo/762R.json | 4 +-- data/json/items/ammo/762x25.json | 10 +++---- data/json/items/ammo/84x246mm.json | 4 +-- data/json/items/ammo/8x40mm.json | 12 ++++----- data/json/items/ammo/9mm.json | 20 +++++++------- data/json/items/ammo/9x18.json | 16 ++++++------ data/json/items/ammo/atgm.json | 2 +- data/json/items/ammo/flintlock.json | 4 +-- data/json/items/ammo/shot.json | 36 +++++++++++++------------- data/json/items/ammo/shotpaper.json | 14 +++++++--- data/json/items/ammo/signal_flare.json | 2 +- data/json/items/gun/762.json | 2 +- 49 files changed, 243 insertions(+), 237 deletions(-) diff --git a/data/json/items/ammo/10mm.json b/data/json/items/ammo/10mm.json index 1e122c62db527..0ed5e796e9cfe 100644 --- a/data/json/items/ammo/10mm.json +++ b/data/json/items/ammo/10mm.json @@ -17,7 +17,7 @@ "ammo_type": "10mm", "casing": "10mm_casing", "range": 14, - "damage": { "damage_type": "stab", "amount": 31, "armor_penetration": 4 }, + "damage": { "damage_type": "bullet", "amount": 31, "armor_penetration": 4 }, "dispersion": 50, "recoil": 750, "effects": [ "COOKOFF" ] @@ -29,7 +29,7 @@ "name": { "str": "10mm Auto FMJ, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -41,7 +41,7 @@ "copy-from": "10mm_fmj", "type": "AMMO", "name": { "str": "10mm Auto FMJ, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/12mm.json b/data/json/items/ammo/12mm.json index 4843321434eb6..d0ddbd52cb23e 100644 --- a/data/json/items/ammo/12mm.json +++ b/data/json/items/ammo/12mm.json @@ -15,7 +15,7 @@ "count": 20, "stack_size": 40, "ammo_type": "12mm", - "damage": { "damage_type": "stab", "amount": 50, "armor_penetration": 40 }, + "damage": { "damage_type": "bullet", "amount": 50, "armor_penetration": 40 }, "dispersion": 45, "recoil": 100 } diff --git a/data/json/items/ammo/20x66mm.json b/data/json/items/ammo/20x66mm.json index ea2966d3b5254..3618f33b38f80 100644 --- a/data/json/items/ammo/20x66mm.json +++ b/data/json/items/ammo/20x66mm.json @@ -9,7 +9,7 @@ "price_postapoc": 1000, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 10, - "proportional": { "damage": { "damage_type": "stab", "amount": 0.1 }, "recoil": 0.4, "loudness": 0.6 }, + "proportional": { "damage": { "damage_type": "bullet", "amount": 0.1 }, "recoil": 0.4, "loudness": 0.6 }, "extend": { "effects": [ "LARGE_BEANBAG", "NOGIB" ] } }, { @@ -18,7 +18,7 @@ "type": "AMMO", "name": { "str": "20x66mm flechette, handmade", "str_pl": "20x66mm flechettes, handmade" }, "description": "Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds. Being caseless rounds, these cannot be disassembled or reloaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -28,7 +28,7 @@ "type": "AMMO", "name": { "str": "20x66mm buckshot, handmade" }, "description": "Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds. Being caseless rounds, these cannot be disassembled or reloaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -38,7 +38,7 @@ "type": "AMMO", "name": { "str": "20x66mm slug, handmade", "str_pl": "20x66mm slugs, handmade" }, "description": "Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile rounds. Being caseless rounds, these cannot be disassembled or reloaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -52,7 +52,7 @@ "price_postapoc": 8000, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "range": 20, - "damage": { "damage_type": "stab", "amount": 16, "armor_penetration": 4 }, + "damage": { "damage_type": "bullet", "amount": 16, "armor_penetration": 4 }, "dispersion": 120, "effects": [ "COOKOFF", "EXPLOSIVE_20x66", "NEVER_MISFIRES" ] }, @@ -67,7 +67,7 @@ "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 10, "range": 20, - "damage": { "damage_type": "stab", "amount": 16 }, + "damage": { "damage_type": "bullet", "amount": 16 }, "dispersion": 200, "recoil": 100, "drop": "handflare_lit", @@ -83,7 +83,7 @@ "price_postapoc": 4000, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 10, - "relative": { "damage": { "damage_type": "stab", "amount": -10, "armor_penetration": 20 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -10, "armor_penetration": 20 } } }, { "id": "20x66_frag", @@ -95,8 +95,8 @@ "price_postapoc": 5000, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 5, - "proportional": { "damage": { "damage_type": "stab", "amount": 0.25, "armor_penetration": 0.25 } }, - "extend": { "effects": [ "FRAG_20x66" ] } + "extend": { "effects": [ "FRAG_20x66" ] }, + "proportional": { "damage": { "damage_type": "bullet", "amount": 0.25, "armor_penetration": 0.25 } } }, { "id": "20x66_inc", @@ -128,7 +128,7 @@ "stack_size": 20, "ammo_type": "20x66mm", "range": 12, - "damage": { "damage_type": "stab", "amount": 60 }, + "damage": { "damage_type": "bullet", "amount": 60 }, "recoil": 2500, "effects": [ "COOKOFF", "SHOT", "NEVER_MISFIRES" ] }, @@ -141,7 +141,7 @@ "price": 1500, "price_postapoc": 4000, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], - "damage": { "damage_type": "stab", "amount": 39, "armor_penetration": 8 }, + "damage": { "damage_type": "bullet", "amount": 39, "armor_penetration": 8 }, "relative": { "range": 12 }, "proportional": { "dispersion": 1.3 }, "delete": { "effects": [ "SHOT" ] } diff --git a/data/json/items/ammo/22.json b/data/json/items/ammo/22.json index 147e873396f98..fcbcda4300296 100644 --- a/data/json/items/ammo/22.json +++ b/data/json/items/ammo/22.json @@ -11,7 +11,7 @@ "count": 100, "stack_size": 150, "recoil": 39, - "proportional": { "range": 0.6, "damage": { "damage_type": "stab", "amount": 0.5 }, "dispersion": 1.2 }, + "proportional": { "range": 0.6, "damage": { "damage_type": "bullet", "amount": 0.5 }, "dispersion": 1.2 }, "extend": { "effects": [ "NOGIB" ] } }, { @@ -20,7 +20,7 @@ "type": "AMMO", "name": { "str": ".22 FMJ" }, "description": ".22 Long Rifle ammunition with 30gr FMJ bullets. The .22LR round is extremely weak with very low stopping power, short range, and negligible recoil. It is most useful for rifle training, and hunting small animals.", - "relative": { "damage": { "damage_type": "stab", "amount": -1, "armor_penetration": 2 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -1, "armor_penetration": 2 } } }, { "id": "22_lr", @@ -40,7 +40,7 @@ "ammo_type": "22", "casing": "22_casing", "range": 13, - "damage": { "damage_type": "stab", "amount": 12 }, + "damage": { "damage_type": "bullet", "amount": 12 }, "dispersion": 60, "recoil": 150, "effects": [ "COOKOFF" ] @@ -54,7 +54,7 @@ "count": 100, "price_postapoc": 400, "dispersion": 0, - "proportional": { "range": 0.6, "damage": { "damage_type": "stab", "amount": 0.5 }, "recoil": 0.5 }, + "proportional": { "range": 0.6, "damage": { "damage_type": "bullet", "amount": 0.5 }, "recoil": 0.5 }, "extend": { "effects": [ "SHOT", "NOGIB" ] } }, { @@ -64,7 +64,7 @@ "name": { "str": ".22 LR FMJ, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.57, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.57, "armor_penetration": 0.5 }, "recoil": 0.57, "dispersion": 1.2 }, @@ -78,7 +78,7 @@ "name": { "str": ".22 LR, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.57, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.57, "armor_penetration": 0.5 }, "recoil": 0.57, "dispersion": 1.2 }, @@ -90,7 +90,7 @@ "copy-from": "22_lr", "type": "AMMO", "name": { "str": ".22 LR, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -99,7 +99,7 @@ "copy-from": "22_fmj", "type": "AMMO", "name": { "str": ".22 FMJ, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/223.json b/data/json/items/ammo/223.json index 1f9e8173afea1..0920cde8c0d42 100644 --- a/data/json/items/ammo/223.json +++ b/data/json/items/ammo/223.json @@ -17,7 +17,7 @@ "ammo_type": "223", "casing": "223_casing", "range": 36, - "damage": { "damage_type": "stab", "amount": 44, "armor_penetration": 2 }, + "damage": { "damage_type": "bullet", "amount": 44, "armor_penetration": 2 }, "dispersion": 30, "recoil": 1500, "effects": [ "COOKOFF" ] @@ -31,7 +31,7 @@ "price": 290, "price_postapoc": 900, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], - "relative": { "damage": { "damage_type": "stab", "amount": -2, "armor_penetration": 4 }, "dispersion": -10 }, + "relative": { "damage": { "damage_type": "bullet", "amount": -2, "armor_penetration": 4 }, "dispersion": -10 }, "proportional": { "recoil": 1.1 }, "extend": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -50,7 +50,7 @@ "name": { "str": ".223 Remington, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.57, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.57, "armor_penetration": 0.5 }, "recoil": 0.57, "dispersion": 1.2 }, @@ -64,7 +64,7 @@ "name": { "str": "5.56 NATO, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.57, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.57, "armor_penetration": 0.5 }, "recoil": 0.57, "dispersion": 1.2 }, @@ -78,7 +78,7 @@ "name": { "str": "5.56 NATO tracer, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.57, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.57, "armor_penetration": 0.5 }, "recoil": 0.57, "dispersion": 1.2 }, @@ -90,7 +90,7 @@ "copy-from": "223", "type": "AMMO", "name": { "str": ".223 Remington, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -99,7 +99,7 @@ "copy-from": "556", "type": "AMMO", "name": { "str": "5.56 NATO, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -108,7 +108,7 @@ "copy-from": "556_incendiary", "type": "AMMO", "name": { "str": "5.56 NATO tracer, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/270win.json b/data/json/items/ammo/270win.json index 8568bdf4e78ec..d9812da22a13a 100644 --- a/data/json/items/ammo/270win.json +++ b/data/json/items/ammo/270win.json @@ -17,7 +17,7 @@ "ammo_type": "270win", "casing": "270win_casing", "range": 65, - "damage": { "damage_type": "stab", "amount": 64, "armor_penetration": 4 }, + "damage": { "damage_type": "bullet", "amount": 64, "armor_penetration": 4 }, "dispersion": 10, "recoil": 3800, "effects": [ "COOKOFF", "NEVER_MISFIRES" ] @@ -29,7 +29,7 @@ "name": { "str": ".270 Winchester JSP, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.7, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.7, "armor_penetration": 0.5 }, "recoil": 0.7, "dispersion": 1.2 }, @@ -41,7 +41,7 @@ "copy-from": "270win_jsp", "type": "AMMO", "name": { "str": ".270 Winchester JSP, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/300.json b/data/json/items/ammo/300.json index 0659d8a9efb4a..d0a05c6f90e9f 100644 --- a/data/json/items/ammo/300.json +++ b/data/json/items/ammo/300.json @@ -17,7 +17,7 @@ "ammo_type": "300", "casing": "300_casing", "range": 65, - "damage": { "damage_type": "stab", "amount": 70, "armor_penetration": 8 }, + "damage": { "damage_type": "bullet", "amount": 70, "armor_penetration": 8 }, "dispersion": 15, "recoil": 5300, "effects": [ "COOKOFF" ] @@ -29,7 +29,7 @@ "name": { "str": ".300 Winchester Magnum, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -42,7 +42,7 @@ "type": "AMMO", "name": { "str": ".300 Winchester Magnum, reloaded" }, "description": "The .300 Winchester Magnum is extremely versatile and has been adopted by many shooting disciplines. The cartridge has found use by hunters, military units, and law enforcement departments. This one has been hand-reloaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/3006.json b/data/json/items/ammo/3006.json index 5d13afb22c383..d4fd0091d45a9 100644 --- a/data/json/items/ammo/3006.json +++ b/data/json/items/ammo/3006.json @@ -17,7 +17,7 @@ "ammo_type": "3006", "casing": "3006_casing", "range": 61, - "damage": { "damage_type": "stab", "amount": 62, "armor_penetration": 10 }, + "damage": { "damage_type": "bullet", "amount": 62, "armor_penetration": 10 }, "dispersion": 20, "recoil": 3800, "effects": [ "COOKOFF" ] @@ -36,7 +36,7 @@ "type": "AMMO", "name": { "str": ".30-06 M2 AP" }, "description": "Armor piercing .30-06 M2 ammunition with 168gr FMJ bullets. It is an extremely powerful and accurate cartridge but pays for its armor penetration abilities with lowered damage.", - "relative": { "damage": { "damage_type": "stab", "amount": -4, "armor_penetration": 8 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -4, "armor_penetration": 8 } } }, { "id": "bp_3006", @@ -45,7 +45,7 @@ "name": { "str": ".30-06 Springfield, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -59,7 +59,7 @@ "name": { "str": ".30-06 Springfield tracer, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -73,7 +73,7 @@ "name": { "str": ".30-06 Springfield M2 AP, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -85,7 +85,7 @@ "copy-from": "3006", "type": "AMMO", "name": { "str": ".30-06 Springfield, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -94,7 +94,7 @@ "copy-from": "3006_incendiary", "type": "AMMO", "name": { "str": ".30-06 incendiary, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -103,7 +103,7 @@ "copy-from": "3006fmj", "type": "AMMO", "name": { "str": ".30-06 M2 AP, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/300blk.json b/data/json/items/ammo/300blk.json index 3cad1de3b003e..1d1f2407bdbb1 100644 --- a/data/json/items/ammo/300blk.json +++ b/data/json/items/ammo/300blk.json @@ -17,7 +17,7 @@ "ammo_type": "300blk", "casing": "300blk_casing", "range": 45, - "damage": { "damage_type": "stab", "amount": 43, "armor_penetration": 5 }, + "damage": { "damage_type": "bullet", "amount": 43, "armor_penetration": 5 }, "dispersion": 30, "recoil": 2000, "effects": [ "COOKOFF" ] @@ -30,7 +30,7 @@ "description": "A subsonic .300 AAC Blackout round with a 220gr open tip match bullet. 300 BLK is an intermediate cartridge necked up from 5.56x45mm, designed to achieve similar ballistics to 7.62x39mm. It is compatible with standard AR-15 lower receivers and will feed from STANAG magazines.", "weight": "21 g", "range": 40, - "damage": { "damage_type": "stab", "amount": 26 }, + "damage": { "damage_type": "bullet", "amount": 26 }, "recoil": 1700 }, { @@ -40,7 +40,7 @@ "name": { "str": ".300 AAC Blackout, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -53,7 +53,7 @@ "type": "AMMO", "name": { "str": ".300 AAC Blackout, reloaded" }, "description": ".300 AAC Blackout is an intermediate cartridge that achieves ballistics similar to the 7.62x39 but allows use on the AR-15 platform. The round is necked-up from the 5.56mm NATO, but feeds from a STANAG magazine. It requires a specific barrel, so will not work in a standard M4 or similar carbine. This one has been hand-reloaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/308.json b/data/json/items/ammo/308.json index 475bb67d3c8f7..3691c8269a384 100644 --- a/data/json/items/ammo/308.json +++ b/data/json/items/ammo/308.json @@ -17,7 +17,7 @@ "ammo_type": "308", "casing": "308_casing", "range": 65, - "damage": { "damage_type": "stab", "amount": 60, "armor_penetration": 2 }, + "damage": { "damage_type": "bullet", "amount": 60, "armor_penetration": 2 }, "dispersion": 15, "recoil": 3000, "effects": [ "COOKOFF" ] @@ -29,7 +29,7 @@ "name": { "str": "7.62x51mm M80" }, "casing": "762_51_casing", "description": "A 7.62x51mm NATO round with a 147gr FMJ bullet. It is a powerful rifle cartridge commonly used by hunters and military snipers because of its high accuracy and long range.", - "relative": { "damage": { "damage_type": "stab", "amount": -2, "armor_penetration": 4 }, "dispersion": -10 }, + "relative": { "damage": { "damage_type": "bullet", "amount": -2, "armor_penetration": 4 }, "dispersion": -10 }, "proportional": { "recoil": 1.1 }, "extend": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -48,7 +48,7 @@ "name": { "str": ".308 Winchester, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -62,7 +62,7 @@ "name": { "str": "7.62x51mm, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -76,7 +76,7 @@ "name": { "str": "7.62x51mm tracer, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -88,7 +88,7 @@ "copy-from": "308", "type": "AMMO", "name": { "str": ".308 Winchester, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -97,7 +97,7 @@ "copy-from": "762_51", "type": "AMMO", "name": { "str": "7.62x51mm, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -106,7 +106,7 @@ "copy-from": "762_51_incendiary", "type": "AMMO", "name": { "str": "7.62x51mm incendiary, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/32.json b/data/json/items/ammo/32.json index 0bdabb7816121..df6067a0cadbe 100644 --- a/data/json/items/ammo/32.json +++ b/data/json/items/ammo/32.json @@ -17,7 +17,7 @@ "ammo_type": "32", "casing": "32_casing", "range": 12, - "damage": { "damage_type": "stab", "amount": 16 }, + "damage": { "damage_type": "bullet", "amount": 16 }, "dispersion": 70, "recoil": 150, "effects": [ "COOKOFF" ] @@ -29,7 +29,7 @@ "name": { "str": ".32 ACP, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -41,7 +41,7 @@ "copy-from": "32_acp", "type": "AMMO", "name": { "str": ".32 ACP, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/357mag.json b/data/json/items/ammo/357mag.json index 1583207922f2a..74bfec49915a6 100644 --- a/data/json/items/ammo/357mag.json +++ b/data/json/items/ammo/357mag.json @@ -17,7 +17,7 @@ "ammo_type": "357mag", "casing": "357mag_casing", "range": 16, - "damage": { "damage_type": "stab", "amount": 28, "armor_penetration": 4 }, + "damage": { "damage_type": "bullet", "amount": 28, "armor_penetration": 4 }, "dispersion": 30, "recoil": 700, "effects": [ "COOKOFF" ] @@ -28,7 +28,7 @@ "type": "AMMO", "name": { "str": ".357 magnum JHP" }, "description": "Jacketed hollow point .357 magnum ammunition. The .357 magnum round is derived from the earlier .38 special, with a marginally longer case and generating greater pressure.", - "relative": { "damage": { "damage_type": "stab", "amount": 4, "armor_penetration": -2 } } + "relative": { "damage": { "damage_type": "bullet", "amount": 4, "armor_penetration": -2 } } }, { "id": "bp_357mag_fmj", @@ -37,7 +37,7 @@ "name": { "str": ".357 Magnum FMJ, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -51,7 +51,7 @@ "name": { "str": ".357 Magnum JHP, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -63,13 +63,13 @@ "copy-from": "357mag_fmj", "type": "AMMO", "name": { "str_sp": ".357 Magnum FMJ, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1, "recoil": 0.9 } + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1, "recoil": 0.9 } }, { "id": "reloaded_357mag_jhp", "copy-from": "357mag_jhp", "type": "AMMO", "name": { "str_sp": ".357 Magnum JHP, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1, "recoil": 0.9 } + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1, "recoil": 0.9 } } ] diff --git a/data/json/items/ammo/357sig.json b/data/json/items/ammo/357sig.json index 6784511c56463..095acfc0f7d9d 100644 --- a/data/json/items/ammo/357sig.json +++ b/data/json/items/ammo/357sig.json @@ -17,7 +17,7 @@ "ammo_type": "357sig", "casing": "357sig_casing", "range": 16, - "damage": { "damage_type": "stab", "amount": 28, "armor_penetration": 4 }, + "damage": { "damage_type": "bullet", "amount": 28, "armor_penetration": 4 }, "dispersion": 30, "recoil": 600, "effects": [ "COOKOFF" ] @@ -28,14 +28,14 @@ "type": "AMMO", "name": { "str": ".357 SIG JHP" }, "description": "Jacketed hollow point .357 SIG ammunition. The .357 SIG round is a high velocity pistol cartridge, giving it a flatter trajectory than many handgun rounds.", - "relative": { "damage": { "damage_type": "stab", "amount": 4, "armor_penetration": -2 } } + "relative": { "damage": { "damage_type": "bullet", "amount": 4, "armor_penetration": -2 } } }, { "id": "reloaded_357sig_fmj", "copy-from": "357sig_fmj", "type": "AMMO", "name": { "str": ".357 SIG FMJ, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -44,7 +44,7 @@ "copy-from": "357sig_jhp", "type": "AMMO", "name": { "str": ".357 SIG JHP, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/36paper.json b/data/json/items/ammo/36paper.json index 96c2caddbb668..407aa0d1e7fc3 100644 --- a/data/json/items/ammo/36paper.json +++ b/data/json/items/ammo/36paper.json @@ -14,7 +14,7 @@ "count": 25, "ammo_type": "36paper", "range": 15, - "damage": { "damage_type": "stab", "amount": 19 }, + "damage": { "damage_type": "bullet", "amount": 19 }, "dispersion": 80, "recoil": 210, "effects": [ "COOKOFF", "MUZZLE_SMOKE", "BLACKPOWDER" ] diff --git a/data/json/items/ammo/38.json b/data/json/items/ammo/38.json index c4c9c62023d8a..336f65bbafd6b 100644 --- a/data/json/items/ammo/38.json +++ b/data/json/items/ammo/38.json @@ -5,7 +5,7 @@ "type": "AMMO", "name": { "str": ".38 FMJ" }, "description": ".38 Special ammunition with brass jacketed 130gr bullets. The .38 Special round has been known from its inception for its accuracy and low recoil.", - "relative": { "damage": { "damage_type": "stab", "amount": -2, "armor_penetration": 4 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -2, "armor_penetration": 4 } } }, { "id": "38_special", @@ -25,7 +25,7 @@ "ammo_type": "38", "casing": "38_casing", "range": 14, - "damage": { "damage_type": "stab", "amount": 22 }, + "damage": { "damage_type": "bullet", "amount": 22 }, "dispersion": 30, "recoil": 250, "effects": [ "COOKOFF" ] @@ -40,7 +40,7 @@ "price_postapoc": 600, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 20, - "relative": { "damage": { "damage_type": "stab", "amount": 5, "armor_penetration": 4 }, "dispersion": -10 }, + "relative": { "damage": { "damage_type": "bullet", "amount": 5, "armor_penetration": 4 }, "dispersion": -10 }, "proportional": { "recoil": 1.5 } }, { @@ -48,7 +48,7 @@ "copy-from": "38_fmj", "type": "AMMO", "name": { "str": ".38 FMJ, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -57,7 +57,7 @@ "copy-from": "38_special", "type": "AMMO", "name": { "str": ".38 Special, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -66,7 +66,7 @@ "copy-from": "38_super", "type": "AMMO", "name": { "str": ".38 Super, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -77,7 +77,7 @@ "name": { "str": ".38 FMJ, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -91,7 +91,7 @@ "name": { "str": ".38 Special, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, diff --git a/data/json/items/ammo/380.json b/data/json/items/ammo/380.json index d664312eb9f1f..d7956141ecba3 100644 --- a/data/json/items/ammo/380.json +++ b/data/json/items/ammo/380.json @@ -17,7 +17,7 @@ "ammo_type": "380", "casing": "380_casing", "range": 13, - "damage": { "damage_type": "stab", "amount": 16, "armor_penetration": 2 }, + "damage": { "damage_type": "bullet", "amount": 16, "armor_penetration": 2 }, "dispersion": 60, "recoil": 300, "effects": [ "COOKOFF" ] @@ -28,7 +28,7 @@ "type": "AMMO", "name": { "str": ".380 ACP JHP" }, "description": ".380 ACP ammunition with a 95gr jacketed hollow point bullet. It is a popular round for small concealable backup pistols, and often the weakest recommended defensive caliber. One should be careful not to chamber it in 9x18mm Makarov or 9x19mm firearms.", - "relative": { "damage": { "damage_type": "stab", "amount": 2, "armor_penetration": -2 } } + "relative": { "damage": { "damage_type": "bullet", "amount": 2, "armor_penetration": -2 } } }, { "id": "380_p", @@ -40,7 +40,7 @@ "price_postapoc": 1500, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 25, - "relative": { "damage": { "damage_type": "stab", "amount": 4, "armor_penetration": 2 }, "dispersion": -15 }, + "relative": { "damage": { "damage_type": "bullet", "amount": 4, "armor_penetration": 2 }, "dispersion": -15 }, "proportional": { "recoil": 1.1 } }, { @@ -50,7 +50,7 @@ "name": { "str": ".380 ACP FMJ, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -64,7 +64,7 @@ "name": { "str": ".380 ACP JHP, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -76,7 +76,7 @@ "copy-from": "380_FMJ", "type": "AMMO", "name": { "str": ".380 ACP FMJ, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -85,7 +85,7 @@ "copy-from": "380_JHP", "type": "AMMO", "name": { "str": ".380 ACP JHP, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -94,7 +94,7 @@ "copy-from": "380_p", "type": "AMMO", "name": { "str": ".380 ACP +P, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/38super.json b/data/json/items/ammo/38super.json index 357ac9ce07837..f11b34e732653 100644 --- a/data/json/items/ammo/38super.json +++ b/data/json/items/ammo/38super.json @@ -17,7 +17,7 @@ "ammo_type": "38super", "casing": "38super_casing", "range": 14, - "damage": { "damage_type": "stab", "amount": 26 }, + "damage": { "damage_type": "bullet", "amount": 26 }, "dispersion": 30, "recoil": 250, "effects": [ "COOKOFF" ] @@ -27,7 +27,7 @@ "copy-from": "38super_fmj", "type": "AMMO", "name": { "str": ".38 Super FMJ, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/40.json b/data/json/items/ammo/40.json index bd388ae468976..8b8f0fcc914d1 100644 --- a/data/json/items/ammo/40.json +++ b/data/json/items/ammo/40.json @@ -5,7 +5,7 @@ "type": "AMMO", "name": { "str": ".40 S&W FMJ" }, "description": ".40 S&W ammunition with 180gr FMJ bullets. Designed to retain the 10mm Auto cartridge's power with lower recoil, the .40 S&W round became popular for law enforcement and personal defense.", - "relative": { "damage": { "damage_type": "stab", "amount": -3, "armor_penetration": 6 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -3, "armor_penetration": 6 } } }, { "id": "40sw", @@ -25,7 +25,7 @@ "ammo_type": "40", "casing": "40_casing", "range": 14, - "damage": { "damage_type": "stab", "amount": 26, "armor_penetration": 4 }, + "damage": { "damage_type": "bullet", "amount": 26, "armor_penetration": 4 }, "dispersion": 50, "recoil": 560, "effects": [ "COOKOFF" ] @@ -37,7 +37,7 @@ "name": { "str": ".40 S&W FMJ, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -51,7 +51,7 @@ "name": { "str": ".40 S&W JHP, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -63,7 +63,7 @@ "copy-from": "40fmj", "type": "AMMO", "name": { "str": ".40 S&W FMJ, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -72,7 +72,7 @@ "copy-from": "40sw", "type": "AMMO", "name": { "str": ".40 S&W JHP, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/40x46mm.json b/data/json/items/ammo/40x46mm.json index c502d3953e35b..d5b818d5e95b0 100644 --- a/data/json/items/ammo/40x46mm.json +++ b/data/json/items/ammo/40x46mm.json @@ -13,7 +13,7 @@ "stack_size": 1, "ammo_type": "40x46mm", "range": 60, - "damage": { "damage_type": "stab", "amount": 80 }, + "damage": { "damage_type": "bullet", "amount": 80 }, "dispersion": 30, "recoil": 225, "effects": [ "COOKOFF", "NEVER_MISFIRES" ] @@ -25,7 +25,7 @@ "name": { "str": "40x46mm M1006" }, "description": "A low velocity less-lethal 40x46mm round with a foam and plastic projectile intended to cause pain and disorientation to the target. May still injure or kill.", "weight": "68 g", - "damage": { "damage_type": "stab", "amount": 20 }, + "damage": { "damage_type": "bullet", "amount": 20 }, "casing": "40x46mm_m212_casing", "extend": { "effects": [ "LARGE_BEANBAG" ] } }, @@ -36,7 +36,7 @@ "name": { "str": "40x46mm M433" }, "description": "A low velocity 40x46mm HEDP grenade. It can penetrate 2 inches of steel armor and fragmentation of the projectile body also makes it suitable for use against infantry.", "weight": "230 g", - "damage": { "damage_type": "stab", "amount": 200, "armor_penetration": 30 }, + "damage": { "damage_type": "bullet", "amount": 200, "armor_penetration": 30 }, "casing": "40x46mm_m118_casing", "extend": { "effects": [ "EXPLOSIVE_m433" ] } }, @@ -48,7 +48,7 @@ "description": "A 40x46mm buckshot load, designed for use in thick vegetation or room clearing.", "weight": "120 g", "range": 12, - "damage": { "damage_type": "stab", "amount": 120, "armor_penetration": 4 }, + "damage": { "damage_type": "bullet", "amount": 120, "armor_penetration": 4 }, "recoil": 1000, "casing": "40x46mm_m199_casing", "extend": { "effects": [ "SHOT" ] } @@ -60,7 +60,7 @@ "name": { "str": "40x46mm M651" }, "description": "A low velocity 40mm tear gas canister. It is effective for riot control and driving infantry from entrenched positions", "weight": "290 g", - "damage": { "damage_type": "stab", "amount": 15 }, + "damage": { "damage_type": "bullet", "amount": 15 }, "drop": "gasbomb_act", "casing": "40x46mm_m195_casing", "extend": { "effects": [ "NO_EMBED" ] } @@ -73,7 +73,7 @@ "description": "An improvised 40x46mm buckshot load somewhat resembling M576.", "weight": "120 g", "range": 10, - "damage": { "damage_type": "stab", "amount": 90, "armor_penetration": 4 }, + "damage": { "damage_type": "bullet", "amount": 90, "armor_penetration": 4 }, "recoil": 1000, "casing": "40x46mm_m118_casing", "extend": { "effects": [ "SHOT" ] } @@ -86,7 +86,7 @@ "description": "An improvised 40x46mm buckshot load somewhat resembling M576.", "weight": "120 g", "range": 10, - "damage": { "damage_type": "stab", "amount": 90, "armor_penetration": 4 }, + "damage": { "damage_type": "bullet", "amount": 90, "armor_penetration": 4 }, "recoil": 1000, "casing": "40x46mm_m199_casing", "extend": { "effects": [ "SHOT" ] } @@ -99,7 +99,7 @@ "description": "An improvised 40x46mm load resembling an oversized shotgun slug.", "weight": "120 g", "range": 10, - "damage": { "damage_type": "stab", "amount": 120, "armor_penetration": 6 }, + "damage": { "damage_type": "bullet", "amount": 120, "armor_penetration": 6 }, "recoil": 1000, "casing": "40x46mm_m118_casing" }, @@ -111,7 +111,7 @@ "description": "An improvised 40x46mm load resembling an oversized shotgun slug.", "weight": "120 g", "range": 10, - "damage": { "damage_type": "stab", "amount": 120, "armor_penetration": 6 }, + "damage": { "damage_type": "bullet", "amount": 120, "armor_penetration": 6 }, "recoil": 1000, "casing": "40x46mm_m199_casing" }, @@ -123,7 +123,7 @@ "description": "An improvised 40x46mm flechette load containing 70 steel darts.", "weight": "120 g", "range": 10, - "damage": { "damage_type": "stab", "amount": 75, "armor_penetration": 6 }, + "damage": { "damage_type": "bullet", "amount": 75, "armor_penetration": 6 }, "recoil": 1000, "casing": "40x46mm_m118_casing", "extend": { "effects": [ "SHOT" ] } @@ -136,7 +136,7 @@ "description": "An improvised 40x46mm flechette load containing 70 steel darts.", "weight": "120 g", "range": 10, - "damage": { "damage_type": "stab", "amount": 75, "armor_penetration": 6 }, + "damage": { "damage_type": "bullet", "amount": 75, "armor_penetration": 6 }, "recoil": 1000, "casing": "40x46mm_m199_casing", "extend": { "effects": [ "SHOT" ] } diff --git a/data/json/items/ammo/40x53mm.json b/data/json/items/ammo/40x53mm.json index 61c1ca3596db9..6247e95fa98b8 100644 --- a/data/json/items/ammo/40x53mm.json +++ b/data/json/items/ammo/40x53mm.json @@ -13,7 +13,7 @@ "stack_size": 1, "ammo_type": "40x53mm", "range": 60, - "damage": { "damage_type": "stab", "amount": 80 }, + "damage": { "damage_type": "bullet", "amount": 80 }, "dispersion": 30, "recoil": 225, "effects": [ "COOKOFF", "NEVER_MISFIRES" ] @@ -26,7 +26,7 @@ "description": "40x53mm canister shot loaded with 17 grain flechettes.", "weight": "340 g", "volume": "137 ml", - "damage": { "damage_type": "stab", "amount": 150, "armor_penetration": 10 }, + "damage": { "damage_type": "bullet", "amount": 150, "armor_penetration": 10 }, "recoil": 1000, "casing": "40x53mm_m169_casing", "extend": { "effects": [ "SHOT" ] } @@ -39,7 +39,7 @@ "description": "A high velocity 40x53mm HEDP grenade. It can penetrate 3 inches of steel armor and fragmentation of the projectile body also makes it suitable for use against infantry.", "weight": "340 g", "volume": "132 ml", - "damage": { "damage_type": "stab", "amount": 250, "armor_penetration": 45 }, + "damage": { "damage_type": "bullet", "amount": 250, "armor_penetration": 45 }, "casing": "40x53mm_m169_casing", "extend": { "effects": [ "EXPLOSIVE_m430a1" ] } }, @@ -51,7 +51,7 @@ "description": "An improvised 40x53mm buckshot load somewhat resembling M576.", "weight": "340 g", "range": 10, - "damage": { "damage_type": "stab", "amount": 100, "armor_penetration": 4 }, + "damage": { "damage_type": "bullet", "amount": 100, "armor_penetration": 4 }, "recoil": 1200, "casing": "40x53mm_m169_casing", "extend": { "effects": [ "SHOT" ] } @@ -64,7 +64,7 @@ "description": "An improvised 40x53mm load resembling an oversized shotgun slug.", "weight": "340 g", "range": 10, - "damage": { "damage_type": "stab", "amount": 130, "armor_penetration": 6 }, + "damage": { "damage_type": "bullet", "amount": 130, "armor_penetration": 6 }, "recoil": 1200, "casing": "40x53mm_m169_casing" }, @@ -76,7 +76,7 @@ "description": "An improvised 40x53mm flechette load containing 100 steel darts.", "weight": "340 g", "range": 10, - "damage": { "damage_type": "stab", "amount": 85, "armor_penetration": 6 }, + "damage": { "damage_type": "bullet", "amount": 85, "armor_penetration": 6 }, "recoil": 1200, "casing": "40x53mm_m169_casing", "extend": { "effects": [ "SHOT" ] } diff --git a/data/json/items/ammo/410shot.json b/data/json/items/ammo/410shot.json index 64fdb1f36d5b3..757b9b403a3ef 100644 --- a/data/json/items/ammo/410shot.json +++ b/data/json/items/ammo/410shot.json @@ -17,7 +17,7 @@ "ammo_type": "410shot", "casing": "410shot_hull", "range": 12, - "damage": { "damage_type": "stab", "amount": 30 }, + "damage": { "damage_type": "bullet", "amount": 30 }, "recoil": 1350, "loudness": 90, "effects": [ "COOKOFF", "SHOT" ] @@ -27,7 +27,7 @@ "copy-from": "410shot_000", "type": "AMMO", "name": { "str": ".410 000 shot, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/44.json b/data/json/items/ammo/44.json index 405d8bfe8e5a9..5fb3c5572891c 100644 --- a/data/json/items/ammo/44.json +++ b/data/json/items/ammo/44.json @@ -5,7 +5,7 @@ "type": "AMMO", "name": { "str": ".44 Magnum FMJ" }, "description": "A brass-jacketed variant of the .44 Magnum round. This increases penetration slightly at the cost of reduced damage from expansion.", - "relative": { "damage": { "damage_type": "stab", "amount": -4, "armor_penetration": 8 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -4, "armor_penetration": 8 } } }, { "id": "44magnum", @@ -25,7 +25,7 @@ "ammo_type": "44", "casing": "44_casing", "range": 16, - "damage": { "damage_type": "stab", "amount": 40, "armor_penetration": 4 }, + "damage": { "damage_type": "bullet", "amount": 40, "armor_penetration": 4 }, "dispersion": 30, "recoil": 1570, "effects": [ "COOKOFF" ] @@ -35,7 +35,7 @@ "copy-from": "44fmj", "type": "AMMO", "name": { "str": ".44 Magnum FMJ, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -44,7 +44,7 @@ "copy-from": "44magnum", "type": "AMMO", "name": { "str": ".44 Magnum, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -55,7 +55,7 @@ "name": { "str": ".44 Magnum, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -69,7 +69,7 @@ "name": { "str": ".44 Magnum FMJ, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, diff --git a/data/json/items/ammo/44paper.json b/data/json/items/ammo/44paper.json index d2173a9828432..277fbb1fde8a7 100644 --- a/data/json/items/ammo/44paper.json +++ b/data/json/items/ammo/44paper.json @@ -14,7 +14,7 @@ "count": 25, "ammo_type": "44paper", "range": 18, - "damage": { "damage_type": "stab", "amount": 27 }, + "damage": { "damage_type": "bullet", "amount": 27 }, "dispersion": 70, "recoil": 580, "effects": [ "COOKOFF", "MUZZLE_SMOKE", "BLACKPOWDER" ] diff --git a/data/json/items/ammo/45.json b/data/json/items/ammo/45.json index 1dd9aec18e8f5..2918d1948a50b 100644 --- a/data/json/items/ammo/45.json +++ b/data/json/items/ammo/45.json @@ -5,7 +5,7 @@ "type": "AMMO", "name": { "str": ".45 ACP FMJ" }, "description": ".45 ACP ammunition with 230gr FMJ bullets. Noted for its stopping power, the .45 ACP round has been common for almost 150 years.", - "relative": { "damage": { "damage_type": "stab", "amount": -3, "armor_penetration": 6 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -3, "armor_penetration": 6 } } }, { "id": "45_jhp", @@ -25,7 +25,7 @@ "ammo_type": "45", "casing": "45_casing", "range": 16, - "damage": { "damage_type": "stab", "amount": 30, "armor_penetration": 2 }, + "damage": { "damage_type": "bullet", "amount": 30, "armor_penetration": 2 }, "dispersion": 50, "recoil": 600, "effects": [ "COOKOFF" ] @@ -40,7 +40,7 @@ "price_postapoc": 600, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 10, - "relative": { "damage": { "damage_type": "stab", "amount": 4, "armor_penetration": 4 }, "dispersion": -10, "recoil": 60 } + "relative": { "damage": { "damage_type": "bullet", "amount": 4, "armor_penetration": 4 }, "dispersion": -10, "recoil": 60 } }, { "id": "bp_45_acp", @@ -49,7 +49,7 @@ "name": { "str": ".45 ACP FMJ, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -63,7 +63,7 @@ "name": { "str": ".45 ACP JHP, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -75,7 +75,7 @@ "copy-from": "45_acp", "type": "AMMO", "name": { "str": ".45 FMJ, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -84,7 +84,7 @@ "copy-from": "45_jhp", "type": "AMMO", "name": { "str": ".45 ACP JHP, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -93,7 +93,7 @@ "copy-from": "45_super", "type": "AMMO", "name": { "str": ".45 ACP +P, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/454.json b/data/json/items/ammo/454.json index b3f53e35a6387..d46502dbd2c42 100644 --- a/data/json/items/ammo/454.json +++ b/data/json/items/ammo/454.json @@ -17,7 +17,7 @@ "ammo_type": "454", "casing": "454_casing", "range": 16, - "damage": { "damage_type": "stab", "amount": 48, "armor_penetration": 8 }, + "damage": { "damage_type": "bullet", "amount": 48, "armor_penetration": 8 }, "dispersion": 30, "recoil": 2500, "effects": [ "COOKOFF" ] @@ -27,7 +27,7 @@ "copy-from": "454_Casull", "type": "AMMO", "name": { "str": ".454 Casull, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -38,7 +38,7 @@ "name": { "str": ".454 Casull, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, diff --git a/data/json/items/ammo/4570.json b/data/json/items/ammo/4570.json index 56f42e7a950ca..8ecb9882c0c68 100644 --- a/data/json/items/ammo/4570.json +++ b/data/json/items/ammo/4570.json @@ -17,7 +17,7 @@ "ammo_type": "4570", "casing": "4570_casing", "range": 48, - "damage": { "damage_type": "stab", "amount": 57, "armor_penetration": 3 }, + "damage": { "damage_type": "bullet", "amount": 57, "armor_penetration": 3 }, "dispersion": 20, "recoil": 4300, "effects": [ "COOKOFF" ] @@ -32,7 +32,7 @@ "price_postapoc": 600, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 10, - "relative": { "range": 2, "damage": { "damage_type": "stab", "amount": 4, "armor_penetration": 7 }, "recoil": 300 } + "relative": { "range": 2, "damage": { "damage_type": "bullet", "amount": 4, "armor_penetration": 7 }, "recoil": 300 } }, { "id": "4570_low", @@ -43,7 +43,7 @@ "price": 250, "price_postapoc": 400, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], - "relative": { "range": -8, "damage": { "damage_type": "stab", "amount": -14, "armor_penetration": -2 }, "recoil": -900 } + "relative": { "range": -8, "damage": { "damage_type": "bullet", "amount": -14, "armor_penetration": -2 }, "recoil": -900 } }, { "id": "reloaded_4570_sp", @@ -51,7 +51,7 @@ "type": "AMMO", "name": { "str": ".45-70 SP, reloaded" }, "description": ".45-70 Government ammunition loaded with a 305 grain soft point round. One of the oldest cartridges still in use, it is still a favorite for large game hunting at short ranges. This one has been hand-loaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -61,7 +61,7 @@ "type": "AMMO", "name": { "str": ".45-70 +P penetrator, reloaded" }, "description": ".45-70 Government +P ammunition loaded with a 305 grain solid copper penetrator projectile. Designed for maximum penetration through thick hide and bone while maintaining ideal wounding characteristics. This one has been hand-loaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -71,7 +71,7 @@ "type": "AMMO", "name": { "str": ".45-70 LFN cowboy, reloaded" }, "description": ".45-70 Government ammunition loaded with a 405 grain lead flat nose bullet to original specifications for safe use in antique firearms. Quite a bit less powerful than modern ammo, but still packs a punch. This one has been hand-loaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -82,7 +82,7 @@ "type": "AMMO", "name": { "str": ".45-70, black powder" }, "description": ".45-70 Government ammunition loaded with a 405 grain lead flat nose bullet using black powder to original specifications. Quite a bit less powerful and a lot dirtier than modern ammo, but still packs a punch. This one has been hand-loaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.3 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.3 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/45colt.json b/data/json/items/ammo/45colt.json index 746377c52be81..2932999efae2a 100644 --- a/data/json/items/ammo/45colt.json +++ b/data/json/items/ammo/45colt.json @@ -17,7 +17,7 @@ "ammo_type": "45colt", "casing": "45colt_casing", "range": 16, - "damage": { "damage_type": "stab", "amount": 25, "armor_penetration": 2 }, + "damage": { "damage_type": "bullet", "amount": 25, "armor_penetration": 2 }, "dispersion": 50, "recoil": 600, "effects": [ "COOKOFF" ] @@ -27,7 +27,7 @@ "copy-from": "45colt_jhp", "type": "AMMO", "name": { "str": ".45 Colt JHP, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/46.json b/data/json/items/ammo/46.json index 2e0a793a784b4..37650e0ab4db3 100644 --- a/data/json/items/ammo/46.json +++ b/data/json/items/ammo/46.json @@ -17,7 +17,7 @@ "ammo_type": "46", "casing": "46mm_casing", "range": 14, - "damage": { "damage_type": "stab", "amount": 18, "armor_penetration": 20 }, + "damage": { "damage_type": "bullet", "amount": 18, "armor_penetration": 20 }, "dispersion": 40, "recoil": 90, "effects": [ "COOKOFF" ] @@ -30,7 +30,7 @@ "description": "4.6x30mm ammunition with 31gr copper plated lead bullets. The 4.6x30mm round was developed by H&K to compete with FN Herstal's 5.7x28mm cartridge. It has low recoil, but no usual armor penetration due to using simple lead bullets rather than proper factory-made penetrator projectiles.", "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.46, "armor_penetration": 0.1 }, + "damage": { "damage_type": "bullet", "amount": 0.46, "armor_penetration": 0.1 }, "recoil": 0.46, "dispersion": 1.2 }, @@ -43,7 +43,7 @@ "type": "AMMO", "name": { "str": "4.6x30mm, reloaded" }, "description": "4.6x30mm ammunition with 31gr copper plated lead bullets. The 4.6x30mm round was developed by H&K to compete with FN Herstal's 5.7x28mm cartridge. It has low recoil, but no usual armor penetration due to using simple lead bullets rather than proper factory-made penetrator projectiles.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9, "armor_penetration": 0.2 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9, "armor_penetration": 0.2 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/460.json b/data/json/items/ammo/460.json index c3e99c8c7516c..c21480727c4c9 100644 --- a/data/json/items/ammo/460.json +++ b/data/json/items/ammo/460.json @@ -5,7 +5,7 @@ "type": "AMMO", "name": { "str": ".460 Rowland HCFN" }, "description": "A plated, hard cast flat nosed variant of the .460 Rowland round. This increases penetration slightly at the cost of reduced damage from expansion.", - "relative": { "damage": { "damage_type": "stab", "amount": -4, "armor_penetration": 8 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -4, "armor_penetration": 8 } } }, { "id": "460_rowland", @@ -15,7 +15,7 @@ "description": ".460 Rowland ammunition with 185gr JHP bullets. The .460 Rowland round is designed to emulate hard-hitting .44 magnum in common autoloading pistols. Like the .44, .460 Rowland has exceptional power - and recoil. It is almost dimensionally identical to .45ACP, save for having a longer case and deeper seated bullets to prevent ammunition mix-ups.", "ammo_type": "460", "casing": "460_casing", - "proportional": { "range": 0.95, "damage": { "damage_type": "stab", "amount": 0.95, "armor_penetration": 0.95 }, "recoil": 0.95 } + "proportional": { "range": 0.95, "damage": { "damage_type": "bullet", "amount": 0.95, "armor_penetration": 0.95 }, "recoil": 0.95 } }, { "id": "bp_460_fmj", @@ -24,7 +24,7 @@ "name": { "str": ".460 Rowland FMJ, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -38,7 +38,7 @@ "name": { "str": ".460 Rowland, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -51,7 +51,7 @@ "type": "AMMO", "name": { "str": ".460 Rowland FMJ, reloaded" }, "description": "A brass-jacketed variant of the .460 Rowland round. This increases penetration slightly at the cost of reduced damage from expansion.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -60,7 +60,7 @@ "copy-from": "460_rowland", "type": "AMMO", "name": { "str": ".460 Rowland, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/50.json b/data/json/items/ammo/50.json index 5a9f944d361fb..0a0eff6245bd5 100644 --- a/data/json/items/ammo/50.json +++ b/data/json/items/ammo/50.json @@ -27,7 +27,7 @@ "ammo_type": "50", "casing": "50_casing", "range": 110, - "damage": { "damage_type": "stab", "amount": 131, "armor_penetration": 28 }, + "damage": { "damage_type": "bullet", "amount": 131, "armor_penetration": 28 }, "dispersion": 150, "recoil": 26250, "effects": [ "COOKOFF", "NEVER_MISFIRES" ] @@ -39,7 +39,7 @@ "name": { "str": ".50 BMG Match", "str_pl": ".50 BMG Matches" }, "description": ".50 BMG FMJ lead core ammunition manufactured with tighter tolerances for long-range competition shooting or other precision rifle use.", "count": 10, - "relative": { "damage": { "damage_type": "stab", "amount": 2, "armor_penetration": -4 } }, + "relative": { "damage": { "damage_type": "bullet", "amount": 2, "armor_penetration": -4 } }, "dispersion": 100 }, { @@ -49,7 +49,7 @@ "name": { "str": ".50 BMG M2 AP" }, "description": "Variant of the .50 BMG round that uses a core of very dense, hardened tungsten steel. Penetration is increased, but damage is reduced.", "count": 10, - "relative": { "damage": { "damage_type": "stab", "amount": -10, "armor_penetration": 20 } }, + "relative": { "damage": { "damage_type": "bullet", "amount": -10, "armor_penetration": 20 } }, "dispersion": 600 }, { @@ -63,7 +63,7 @@ "description": "This variant of the .50 BMG round makes the most of the caliber's potential payload delivery: the tip is loaded with an incendiary mix, which ignites on impact, detonating the RDX or PETN charge. This also ignites a secondary zirconium powder incendiary charge that surrounds a tungsten carbide penetrator, both encased by a mild steel cup. Fragments from the cup and burning metallic powder follow the penetrator through armored targets, increasing lethality. These rare, complicated, and expensive rounds are not likely to be manufactured again; use them wisely.", "effects": [ "INCENDIARY", "EXPLOSIVE_RAUFOSS" ], "//": "mk 211 is estimated to be as effective as 20mm, which would have 65kJ energy, or 255 damage. ~181 damage is fair.", - "relative": { "damage": { "damage_type": "stab", "amount": 50, "armor_penetration": 20 } }, + "relative": { "damage": { "damage_type": "bullet", "amount": 50, "armor_penetration": 20 } }, "dispersion": 100 }, { @@ -72,7 +72,7 @@ "type": "AMMO", "name": { "str": ".50 BMG tracer, reloaded" }, "description": "A tracer variant of the powerful .50 BMG round. Tracer rounds help to keep the weapon they are fired from on target at the risk of igniting flammable substances. This one has been hand-reloaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -82,7 +82,7 @@ "type": "AMMO", "name": { "str": ".50 BMG Match, reloaded" }, "description": ".50 BMG ammunition with lead-cored FMJ bullets. The .50 BMG is a very powerful rifle round designed for anti-aircraft use, later adapted to anti-vehicular and anti-personnel roles. Its stupendous energy and armor piercing capabilities make it one of the most deadly rounds available, offset only by its drastic recoil and noise.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -92,7 +92,7 @@ "type": "AMMO", "name": { "str": ".50 BMG AP, reloaded" }, "description": "Variant of the .50 BMG round that uses a core hardened steel. Penetration is increased, but damage is reduced. This one has been hand-reloaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/500.json b/data/json/items/ammo/500.json index 5a562a24fcc5c..1f115ef4770c6 100644 --- a/data/json/items/ammo/500.json +++ b/data/json/items/ammo/500.json @@ -17,7 +17,7 @@ "ammo_type": "500", "casing": "500_casing", "range": 16, - "damage": { "damage_type": "stab", "amount": 55, "armor_penetration": 8 }, + "damage": { "damage_type": "bullet", "amount": 55, "armor_penetration": 8 }, "dispersion": 30, "recoil": 3000, "effects": [ "COOKOFF" ] @@ -29,7 +29,7 @@ "name": { "str": ".500 S&W Magnum, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -41,7 +41,7 @@ "copy-from": "500_Magnum", "type": "AMMO", "name": { "str": ".500 S&W Magnum, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/545x39.json b/data/json/items/ammo/545x39.json index b35c4a108686e..67b9e40515881 100644 --- a/data/json/items/ammo/545x39.json +++ b/data/json/items/ammo/545x39.json @@ -18,7 +18,7 @@ "ammo_type": "545x39", "casing": "545_casing", "range": 37, - "damage": { "damage_type": "stab", "amount": 40, "armor_penetration": 6 }, + "damage": { "damage_type": "bullet", "amount": 40, "armor_penetration": 6 }, "dispersion": 30, "recoil": 1400, "effects": [ "COOKOFF" ] @@ -34,7 +34,7 @@ "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "symbol": "=", "color": "yellow", - "relative": { "damage": { "damage_type": "stab", "amount": -2, "armor_penetration": 8 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -2, "armor_penetration": 8 } } }, { "id": "reloaded_545", @@ -42,7 +42,7 @@ "type": "AMMO", "name": { "str": "5.45x39mm, reloaded" }, "description": "The 5.45x39mm was the standard ammunition for the AK series from 1974. Its designers were inspired by the 5.56x45mm NATO cartridge. This one has been hand-reloaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -52,7 +52,7 @@ "type": "AMMO", "name": { "str": "5.45x39mm AP, reloaded" }, "description": "Armor piercing 5.45x39mm ammunition with hand-reloaded bullets containing a steel penetrator. Developed in 1998 by the Russian military.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/57.json b/data/json/items/ammo/57.json index 86f887aa7d652..8213a2379c543 100644 --- a/data/json/items/ammo/57.json +++ b/data/json/items/ammo/57.json @@ -17,7 +17,7 @@ "ammo_type": "57", "casing": "57mm_casing", "range": 14, - "damage": { "damage_type": "stab", "amount": 20, "armor_penetration": 18 }, + "damage": { "damage_type": "bullet", "amount": 20, "armor_penetration": 18 }, "dispersion": 40, "recoil": 90, "effects": [ "COOKOFF" ] @@ -30,7 +30,7 @@ "description": "5.7x28mm ammunition with 31gr AP FMJ bullets. The 5.7x28mm cartridge was designed by FN Herstal to replace the 9x19mm round in NATO use. Although the project to replace 9x19mm Parabellum was effectively canceled the 5.7x28mm round has seen action in many conflicts and has proven to be reliable. It has very low recoil but no usual armor penetration due to using simple lead bullets rather than proper factory-made penetrator projectiles.", "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.56, "armor_penetration": 0.1 }, + "damage": { "damage_type": "bullet", "amount": 0.56, "armor_penetration": 0.1 }, "recoil": 0.56, "dispersion": 1.2 }, @@ -43,7 +43,7 @@ "type": "AMMO", "name": { "str": "5.7x28mm, reloaded" }, "description": "5.7x28mm ammunition with 31gr AP FMJ bullets. The 5.7x28mm cartridge was designed by FN Herstal to replace the 9x19mm round in NATO use. Although the project to replace 9x19mm Parabellum was effectively canceled the 5.7x28mm round has seen action in many conflicts and has proven to be reliable. It has very low recoil but no usual armor penetration due to using simple lead bullets rather than proper factory-made penetrator projectiles.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9, "armor_penetration": 0.2 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9, "armor_penetration": 0.2 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/5x50.json b/data/json/items/ammo/5x50.json index d5257b7b64496..c1a285cb912a6 100644 --- a/data/json/items/ammo/5x50.json +++ b/data/json/items/ammo/5x50.json @@ -15,7 +15,7 @@ "ammo_type": "5x50", "casing": "5x50_hull", "range": 60, - "damage": { "damage_type": "stab", "amount": 20, "armor_penetration": 30 }, + "damage": { "damage_type": "bullet", "amount": 20, "armor_penetration": 30 }, "dispersion": 60, "recoil": 400, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], @@ -31,7 +31,7 @@ "weight": "9 g", "price": 1688, "price_postapoc": 2400, - "relative": { "range": -10, "damage": { "damage_type": "stab", "amount": 5, "armor_penetration": 20 }, "dispersion": 20 }, + "relative": { "range": -10, "damage": { "damage_type": "bullet", "amount": 5, "armor_penetration": 20 }, "dispersion": 20 }, "proportional": { "recoil": 1.1 } }, { @@ -43,6 +43,6 @@ "description": "Designed to defeat modern body armor, the Rivtech 5x50mm flechette round features a biodegradable sabot and a single, fin-stabilized penetrator. This one has been hand-reloaded.", "effects": [ "COOKOFF", "RECYCLED" ], "relative": { "range": -15, "dispersion": 40 }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9, "armor_penetration": 0.7 }, "recoil": 0.9 } + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9, "armor_penetration": 0.7 }, "recoil": 0.9 } } ] diff --git a/data/json/items/ammo/66mm.json b/data/json/items/ammo/66mm.json index a2f91bdfe47a4..446a9b79c8864 100644 --- a/data/json/items/ammo/66mm.json +++ b/data/json/items/ammo/66mm.json @@ -14,7 +14,7 @@ "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "weight": "1338 g", "ammo_type": "m235", - "damage": { "damage_type": "stab", "amount": 60, "armor_penetration": 10 }, + "damage": { "damage_type": "bullet", "amount": 60, "armor_penetration": 10 }, "range": 70, "dispersion": 150, "recoil": 150, diff --git a/data/json/items/ammo/700nx.json b/data/json/items/ammo/700nx.json index 1285137aa8ae8..7eb5b7e653e6d 100644 --- a/data/json/items/ammo/700nx.json +++ b/data/json/items/ammo/700nx.json @@ -17,7 +17,7 @@ "ammo_type": "700nx", "casing": "700nx_casing", "range": 42, - "damage": { "damage_type": "stab", "amount": 110, "armor_penetration": 30 }, + "damage": { "damage_type": "bullet", "amount": 110, "armor_penetration": 30 }, "dispersion": 15, "recoil": 12100, "effects": [ "COOKOFF" ] @@ -27,7 +27,7 @@ "copy-from": "700nx", "type": "AMMO", "name": { "str": ".700 NX, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/762.json b/data/json/items/ammo/762.json index 11d614e149695..7f770d227c134 100644 --- a/data/json/items/ammo/762.json +++ b/data/json/items/ammo/762.json @@ -17,7 +17,7 @@ "ammo_type": "762", "casing": "762_casing", "range": 30, - "damage": { "damage_type": "stab", "amount": 45, "armor_penetration": 8 }, + "damage": { "damage_type": "bullet", "amount": 45, "armor_penetration": 8 }, "dispersion": 35, "recoil": 2036, "effects": [ "COOKOFF", "NEVER_MISFIRES" ] @@ -31,7 +31,7 @@ "description": "7.62x39mm M67 rounds with 123gr bullets. The inadequate terminal ballistics of the M43 round led to the development of the M67 round in Yugoslavia in the 1960s. It destabilizes much faster than M43 after hitting a target leading to greater damage.", "price": 150, "price_postapoc": 6800, - "relative": { "damage": { "damage_type": "stab", "amount": 4, "armor_penetration": 2 } } + "relative": { "damage": { "damage_type": "bullet", "amount": 4, "armor_penetration": 2 } } }, { "id": "reloaded_762_m43", @@ -39,7 +39,7 @@ "type": "AMMO", "name": { "str": "7.62x39mm M43, reloaded" }, "description": "7.62x39mm ammunition with 121.9gr bullets. Developed in WW2 by the Soviet Union the 7.62x39mm round rapidly became extremely popular all over the world. The bullet has poor wounding potential due to its stability, only beginning to yaw after 26cm.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -48,7 +48,7 @@ "copy-from": "762_m87", "type": "AMMO", "name": { "str": "7.62x39mm M67, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/762R.json b/data/json/items/ammo/762R.json index 6e9998fdf0b5b..805a79dc09d58 100644 --- a/data/json/items/ammo/762R.json +++ b/data/json/items/ammo/762R.json @@ -17,7 +17,7 @@ "ammo_type": "762R", "casing": "762R_casing", "range": 75, - "damage": { "damage_type": "stab", "amount": 54, "armor_penetration": 10 }, + "damage": { "damage_type": "bullet", "amount": 54, "armor_penetration": 10 }, "dispersion": 15, "recoil": 2650, "effects": [ "COOKOFF" ] @@ -27,7 +27,7 @@ "copy-from": "762_54R", "type": "AMMO", "name": { "str": "7.62x54mmR, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/762x25.json b/data/json/items/ammo/762x25.json index 854146a41976f..b383f45be5e81 100644 --- a/data/json/items/ammo/762x25.json +++ b/data/json/items/ammo/762x25.json @@ -17,7 +17,7 @@ "ammo_type": "762x25", "casing": "762_25_casing", "range": 13, - "damage": { "damage_type": "stab", "amount": 24, "armor_penetration": 2 }, + "damage": { "damage_type": "bullet", "amount": 24, "armor_penetration": 2 }, "dispersion": 120, "recoil": 540, "effects": [ "COOKOFF" ] @@ -28,7 +28,7 @@ "type": "AMMO", "name": { "str": "7.62x25mm FMJ hot load" }, "description": "A high-pressure commercial version of the 7.62x25mm cartridge, loaded with an 85 gr. FMJ bullet. It is more powerful than the original.", - "relative": { "price": 500, "range": 2, "damage": { "damage_type": "stab", "amount": 4, "armor_penetration": 3 } }, + "relative": { "price": 500, "range": 2, "damage": { "damage_type": "bullet", "amount": 4, "armor_penetration": 3 } }, "proportional": { "recoil": 1.4 } }, { @@ -43,7 +43,7 @@ "relative": { "price": 2000, "range": -1, - "damage": { "damage_type": "stab", "amount": -9, "armor_penetration": 2 }, + "damage": { "damage_type": "bullet", "amount": -9, "armor_penetration": 2 }, "recoil": -270 } }, @@ -54,7 +54,7 @@ "name": { "str": "7.62x25mm FMJ, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -66,6 +66,6 @@ "copy-from": "762_25hot", "type": "AMMO", "name": { "str": "7.62x25mm, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9, "armor_penetration": 0.9 }, "dispersion": 1.1 } + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9, "armor_penetration": 0.9 }, "dispersion": 1.1 } } ] diff --git a/data/json/items/ammo/84x246mm.json b/data/json/items/ammo/84x246mm.json index 6eeb0618637ac..2590308e5542d 100644 --- a/data/json/items/ammo/84x246mm.json +++ b/data/json/items/ammo/84x246mm.json @@ -14,7 +14,7 @@ "volume": "1250 ml", "weight": "3200 g", "ammo_type": "84x246mm", - "damage": { "damage_type": "stab", "amount": 60, "armor_penetration": 10 }, + "damage": { "damage_type": "bullet", "amount": 60, "armor_penetration": 10 }, "range": 120, "dispersion": 60, "recoil": 45, @@ -32,7 +32,7 @@ "description": "A 84x246mm High Explosive Dual Purpose anti-materiel round for the Carl Gustav M3 recoilless rifle. Designed to be highly effective against vehicles and structures.", "volume": "1500 ml", "weight": "3300 g", - "damage": { "damage_type": "stab", "amount": 1000, "armor_penetration": 225 }, + "damage": { "damage_type": "bullet", "amount": 1000, "armor_penetration": 225 }, "range": 100, "dispersion": 75, "recoil": 60, diff --git a/data/json/items/ammo/8x40mm.json b/data/json/items/ammo/8x40mm.json index 27e885d1e9a83..25d9b16a37b46 100644 --- a/data/json/items/ammo/8x40mm.json +++ b/data/json/items/ammo/8x40mm.json @@ -5,7 +5,7 @@ "type": "AMMO", "name": { "str": "bootleg 8x40mm JHP" }, "description": "Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless rounds, these cannot be disassembled or reloaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -27,7 +27,7 @@ "stack_size": 40, "ammo_type": "8x40mm", "range": 42, - "damage": { "damage_type": "stab", "amount": 42, "armor_penetration": 18 }, + "damage": { "damage_type": "bullet", "amount": 42, "armor_penetration": 18 }, "dispersion": 75, "recoil": 2200, "effects": [ "NEVER_MISFIRES" ] @@ -39,7 +39,7 @@ "name": { "str": "8x40mm sporting" }, "description": "8x40mm caseless rounds, light sporting load sold for civilian use. Proprietary ammunition for Rivtech firearms. Being caseless rounds, these cannot be disassembled or reloaded.", "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] }, - "proportional": { "price": 0.8, "damage": { "damage_type": "stab", "amount": 0.5 }, "dispersion": 1.2, "recoil": 0.5 } + "proportional": { "price": 0.8, "damage": { "damage_type": "bullet", "amount": 0.5 }, "dispersion": 1.2, "recoil": 0.5 } }, { "id": "8mm_fmj", @@ -47,7 +47,7 @@ "type": "AMMO", "name": { "str": "8x40mm FMJ" }, "description": "8x40mm caseless rounds, full metal jacket. Military grade ammunition for Rivtech firearms. Being caseless rounds, these cannot be disassembled or reloaded.", - "relative": { "damage": { "damage_type": "stab", "amount": -5, "armor_penetration": 10 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -5, "armor_penetration": 10 } } }, { "id": "8mm_hvp", @@ -58,7 +58,7 @@ "price": 2500, "price_postapoc": 50000, "count": 20, - "relative": { "damage": { "damage_type": "stab", "amount": 5, "armor_penetration": 20 } } + "relative": { "damage": { "damage_type": "bullet", "amount": 5, "armor_penetration": 20 } } }, { "id": "8mm_inc", @@ -76,6 +76,6 @@ "type": "AMMO", "name": { "str": "8x40mm JHP" }, "description": "8x40mm caseless rounds, jacketed hollowpoint. Military grade ammunition for Rivtech firearms. Being caseless rounds, these cannot be disassembled or reloaded.", - "relative": { "damage": { "damage_type": "stab", "amount": 5, "armor_penetration": -10 } } + "relative": { "damage": { "damage_type": "bullet", "amount": 5, "armor_penetration": -10 } } } ] diff --git a/data/json/items/ammo/9mm.json b/data/json/items/ammo/9mm.json index bfae8a5fbf956..fc34f1144c1ec 100644 --- a/data/json/items/ammo/9mm.json +++ b/data/json/items/ammo/9mm.json @@ -17,7 +17,7 @@ "ammo_type": "9mm", "casing": "9mm_casing", "range": 14, - "damage": { "damage_type": "stab", "amount": 26 }, + "damage": { "damage_type": "bullet", "amount": 26 }, "dispersion": 60, "recoil": 500, "effects": [ "COOKOFF" ] @@ -28,7 +28,7 @@ "type": "AMMO", "name": { "str": "9x19mm FMJ" }, "description": "9x19mm ammunition with a brass jacketed 115gr bullet. It is a popular round for military, law enforcement, and civilian use even after almost 150 years.", - "relative": { "damage": { "damage_type": "stab", "amount": -2, "armor_penetration": 4 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -2, "armor_penetration": 4 } } }, { "id": "9mmP", @@ -40,7 +40,7 @@ "price_postapoc": 800, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 25, - "relative": { "damage": { "damage_type": "stab", "amount": 2, "armor_penetration": 2 }, "dispersion": -15 }, + "relative": { "damage": { "damage_type": "bullet", "amount": 2, "armor_penetration": 2 }, "dispersion": -15 }, "proportional": { "recoil": 1.1 } }, { @@ -53,7 +53,7 @@ "price_postapoc": 400, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 10, - "relative": { "damage": { "damage_type": "stab", "amount": 4, "armor_penetration": 4 }, "dispersion": -30 }, + "relative": { "damage": { "damage_type": "bullet", "amount": 4, "armor_penetration": 4 }, "dispersion": -30 }, "proportional": { "recoil": 1.2 } }, { @@ -63,7 +63,7 @@ "name": { "str": "9x19mm JHP, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -77,7 +77,7 @@ "name": { "str": "9x19mm FMJ, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -89,7 +89,7 @@ "copy-from": "9mm", "type": "AMMO", "name": { "str": "9x19mm JHP, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -98,7 +98,7 @@ "copy-from": "9mmfmj", "type": "AMMO", "name": { "str": "9x19mm FMJ, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -107,7 +107,7 @@ "copy-from": "9mmP", "type": "AMMO", "name": { "str": "9x19mm +P, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -116,7 +116,7 @@ "copy-from": "9mmP2", "type": "AMMO", "name": { "str": "9x19mm +P+, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/9x18.json b/data/json/items/ammo/9x18.json index d25316d07efce..92485acef56ba 100644 --- a/data/json/items/ammo/9x18.json +++ b/data/json/items/ammo/9x18.json @@ -17,7 +17,7 @@ "ammo_type": "9x18", "casing": "9x18mm_casing", "range": 13, - "damage": { "damage_type": "stab", "amount": 16, "armor_penetration": 2 }, + "damage": { "damage_type": "bullet", "amount": 16, "armor_penetration": 2 }, "dispersion": 60, "recoil": 300, "effects": [ "COOKOFF" ] @@ -32,7 +32,7 @@ "price_postapoc": 1000, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 25, - "relative": { "range": 2, "damage": { "damage_type": "stab", "amount": 4 }, "dispersion": -10 }, + "relative": { "range": 2, "damage": { "damage_type": "bullet", "amount": 4 }, "dispersion": -10 }, "proportional": { "recoil": 1.1 } }, { @@ -43,7 +43,7 @@ "description": "9x18mm Makarov RG028 ammunition. The RG028 round uses bullets with a hardened steel core to improve armor penetration.", "price": 200, "price_postapoc": 3100, - "relative": { "damage": { "damage_type": "stab", "amount": -2, "armor_penetration": 8 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -2, "armor_penetration": 8 } } }, { "id": "bp_9x18mm", @@ -52,7 +52,7 @@ "name": { "str": "9x18mm, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -66,7 +66,7 @@ "name": { "str": "9x18mm FMJ, black powder" }, "proportional": { "price": 0.3, - "damage": { "damage_type": "stab", "amount": 0.76, "armor_penetration": 0.5 }, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, "recoil": 0.76, "dispersion": 1.2 }, @@ -79,7 +79,7 @@ "type": "AMMO", "name": { "str": "9x18mm, reloaded" }, "description": "9x18 millimeter Makarov, an old Soviet pistol cartridge used mainly by the Makarov PM. As the designation implies, it is a bit shorter in case length compared to 9mm Parabellum. This one has been hand-reloaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -90,7 +90,7 @@ "name": { "str": "9x18mm +P+, reloaded" }, "//": "Rather than give it a military designation, this is simply handmade overpressure ammo.", "description": "9x18 millimeter Makarov, an old Soviet pistol cartridge used mainly by the Makarov PM. This one has been hand-reloaded to generate higher internal pressure, boosting flight stability and damage.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -100,7 +100,7 @@ "type": "AMMO", "name": { "str": "9x18mm FMJ, reloaded" }, "description": "9x18 millimeter Makarov, an old Soviet pistol cartridge used mainly by the Makarov PM. This brass-jacketed round increases penetration slightly, at the cost of reduced expansion. This one has been hand-reloaded.", - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } } diff --git a/data/json/items/ammo/atgm.json b/data/json/items/ammo/atgm.json index 4142ced2ee53e..d94612964c07d 100644 --- a/data/json/items/ammo/atgm.json +++ b/data/json/items/ammo/atgm.json @@ -15,7 +15,7 @@ "bashing": 1, "ammo_type": "atgm", "casing": "atgm_spent", - "damage": { "damage_type": "stab", "amount": 2400, "armor_penetration": 600 }, + "damage": { "damage_type": "bullet", "amount": 2400, "armor_penetration": 600 }, "range": 100, "recoil": 6000, "effects": [ "EXPLOSIVE_ATGMHEAT", "NEVER_MISFIRES" ] diff --git a/data/json/items/ammo/flintlock.json b/data/json/items/ammo/flintlock.json index 2bf0a72882daa..f7fc54e73daac 100644 --- a/data/json/items/ammo/flintlock.json +++ b/data/json/items/ammo/flintlock.json @@ -15,7 +15,7 @@ "stack_size": 10, "ammo_type": "flintlock", "range": 6, - "damage": { "damage_type": "stab", "amount": 50 }, + "damage": { "damage_type": "bullet", "amount": 50 }, "dispersion": 90, "recoil": 1500, "loudness": 70, @@ -37,7 +37,7 @@ "stack_size": 10, "ammo_type": "flintlock", "range": 4, - "damage": { "damage_type": "stab", "amount": 45 }, + "damage": { "damage_type": "bullet", "amount": 45 }, "dispersion": 20, "recoil": 1500, "loudness": 90, diff --git a/data/json/items/ammo/shot.json b/data/json/items/ammo/shot.json index 20feed0c42fa4..b43fbc167875a 100644 --- a/data/json/items/ammo/shot.json +++ b/data/json/items/ammo/shot.json @@ -4,7 +4,7 @@ "copy-from": "shot_bird", "type": "AMMO", "name": { "str": "birdshot, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -13,7 +13,7 @@ "copy-from": "shot_dragon", "type": "AMMO", "name": { "str": "dragon's breath shell, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -22,7 +22,7 @@ "copy-from": "shot_00", "type": "AMMO", "name": { "str": "00 shot, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -31,7 +31,7 @@ "copy-from": "shot_flechette", "type": "AMMO", "name": { "str": "flechette shell, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -40,7 +40,7 @@ "copy-from": "shot_slug", "type": "AMMO", "name": { "str": "shotgun slug, reloaded" }, - "proportional": { "price": 0.7, "damage": { "damage_type": "stab", "amount": 0.9 }, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -49,7 +49,7 @@ "copy-from": "shot_bird", "type": "AMMO", "name": { "str": "birdshot, black powder" }, - "proportional": { "price": 0.6, "damage": { "damage_type": "stab", "amount": 0.8 }, "dispersion": 1.2 }, + "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8 }, "dispersion": 1.2 }, "extend": { "effects": [ "RECYCLED", "MUZZLE_SMOKE", "BLACKPOWDER" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -58,7 +58,7 @@ "copy-from": "shot_dragon", "type": "AMMO", "name": { "str": "dragon's breath shell, black powder" }, - "proportional": { "price": 0.6, "damage": { "damage_type": "stab", "amount": 0.8 }, "dispersion": 1.2 }, + "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8 }, "dispersion": 1.2 }, "extend": { "effects": [ "RECYCLED", "MUZZLE_SMOKE", "BLACKPOWDER" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -75,7 +75,7 @@ "copy-from": "shot_flechette", "type": "AMMO", "name": { "str": "flechette shell, black powder" }, - "proportional": { "price": 0.6, "damage": { "damage_type": "stab", "amount": 0.8 }, "dispersion": 1.2 }, + "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8 }, "dispersion": 1.2 }, "extend": { "effects": [ "RECYCLED", "MUZZLE_SMOKE", "BLACKPOWDER" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -84,7 +84,7 @@ "copy-from": "shot_slug", "type": "AMMO", "name": { "str": "shotgun slug, black powder" }, - "proportional": { "price": 0.6, "damage": { "damage_type": "stab", "amount": 0.8 }, "dispersion": 1.2 }, + "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8 }, "dispersion": 1.2 }, "extend": { "effects": [ "RECYCLED", "MUZZLE_SMOKE", "BLACKPOWDER" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -106,7 +106,7 @@ "ammo_type": "shot", "casing": "shot_hull", "range": 12, - "damage": { "damage_type": "stab", "amount": 50 }, + "damage": { "damage_type": "bullet", "amount": 50 }, "recoil": 2500, "loudness": 160, "effects": [ "COOKOFF", "SHOT" ] @@ -121,7 +121,7 @@ "price_postapoc": 200, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 10, - "proportional": { "damage": { "damage_type": "stab", "amount": 0.1 }, "recoil": 0.4, "loudness": 0.6 }, + "proportional": { "damage": { "damage_type": "bullet", "amount": 0.1 }, "recoil": 0.4, "loudness": 0.6 }, "extend": { "effects": [ "BEANBAG", "NOGIB" ] } }, { @@ -133,7 +133,7 @@ "price": 100, "price_postapoc": 400, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], - "proportional": { "damage": { "damage_type": "stab", "amount": 0.3 }, "recoil": 0.6, "loudness": 0.8 }, + "proportional": { "damage": { "damage_type": "bullet", "amount": 0.3 }, "recoil": 0.6, "loudness": 0.8 }, "extend": { "effects": [ "NOGIB" ] } }, { @@ -158,7 +158,7 @@ "price_postapoc": 800, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 10, - "relative": { "damage": { "damage_type": "stab", "amount": -6, "armor_penetration": 12 } } + "relative": { "damage": { "damage_type": "bullet", "amount": -6, "armor_penetration": 12 } } }, { "id": "shot_he", @@ -171,8 +171,8 @@ "price_postapoc": 1600, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "count": 5, - "damage": { "damage_type": "stab", "amount": 10, "armor_penetration": 0 }, - "extend": { "effects": [ "EXPLOSIVE_HESHOT" ] } + "extend": { "effects": [ "EXPLOSIVE_HESHOT" ] }, + "damage": { "damage_type": "bullet", "amount": 10, "armor_penetration": 0 } }, { "id": "shot_scrap", @@ -180,7 +180,7 @@ "type": "AMMO", "name": { "str": "00 shot, scrap loaded" }, "description": "A shotgun shell filled with whatever was lying around. They are more damaging than birdshot, but fairly inaccurate.", - "proportional": { "price": 0.4, "damage": { "damage_type": "stab", "amount": 0.6 }, "dispersion": 1.2 }, + "proportional": { "price": 0.4, "damage": { "damage_type": "bullet", "amount": 0.6 }, "dispersion": 1.2 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -189,7 +189,7 @@ "copy-from": "shot_scrap", "type": "AMMO", "name": { "str": "00 shot, black powder, scrap loaded" }, - "proportional": { "price": 0.6, "damage": { "damage_type": "stab", "amount": 0.8 } }, + "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8 } }, "extend": { "effects": [ "RECYCLED", "MUZZLE_SMOKE" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] } }, @@ -203,7 +203,7 @@ "price_postapoc": 400, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "dispersion": 100, - "relative": { "range": 12, "damage": { "damage_type": "stab", "armor_penetration": 6 } }, + "relative": { "range": 12, "damage": { "damage_type": "bullet", "armor_penetration": 6 } }, "proportional": { "recoil": 1.4 }, "delete": { "effects": [ "SHOT" ] } } diff --git a/data/json/items/ammo/shotpaper.json b/data/json/items/ammo/shotpaper.json index 6af86b3c9ee67..f9915b9cf2e57 100644 --- a/data/json/items/ammo/shotpaper.json +++ b/data/json/items/ammo/shotpaper.json @@ -5,7 +5,7 @@ "type": "AMMO", "name": { "str": "birdshot paper cartridge" }, "description": "A paper cartridge containing a premeasured amount of black powder and an equal volume of birdshot. Used mostly for hunting small game or fowl.", - "damage": { "damage_type": "stab", "amount": 10 }, + "damage": { "damage_type": "bullet", "amount": 10 }, "proportional": { "recoil": 0.6, "loudness": 0.8 }, "extend": { "effects": [ "NOGIB" ] } }, @@ -15,7 +15,13 @@ "type": "AMMO", "name": { "str": "pyrotechnic paper cartridge" }, "description": "A paper cartridge containing a premeasured amount of black powder and an equal volume of flammable metals. When fired, burning chunks of metal and sparks will shoot out of the barrel, igniting everything in their path.", - "proportional": { "damage": { "damage_type": "stab", "amount": 0.2 }, "recoil": 0.6, "loudness": 0.8, "dispersion": 1.2, "range": 0.5 }, + "proportional": { + "damage": { "damage_type": "bullet", "amount": 0.2 }, + "recoil": 0.6, + "loudness": 0.8, + "dispersion": 1.2, + "range": 0.5 + }, "extend": { "effects": [ "INCENDIARY", "STREAM", "NOGIB" ] } }, { @@ -29,7 +35,7 @@ "material": [ "paper", "powder", "lead" ], "color": "white", "ammo_type": "shotpaper", - "proportional": { "damage": { "damage_type": "stab", "amount": 0.8 }, "recoil": 0.8, "loudness": 0.8 }, + "proportional": { "damage": { "damage_type": "bullet", "amount": 0.8 }, "recoil": 0.8, "loudness": 0.8 }, "delete": { "effects": [ "RECYCLED" ], "casing": "shot_hull" } }, { @@ -38,7 +44,7 @@ "type": "AMMO", "name": { "str": ".62 paper cartridge" }, "description": "A paper cartridge containing a premeasured amount of black powder and a .605 inch lead ball.", - "relative": { "range": 12, "damage": { "damage_type": "stab", "armor_penetration": 4 } }, + "relative": { "range": 12, "damage": { "damage_type": "bullet", "armor_penetration": 4 } }, "delete": { "effects": [ "SHOT" ] }, "dispersion": 100 } diff --git a/data/json/items/ammo/signal_flare.json b/data/json/items/ammo/signal_flare.json index 2d4487f9db2c8..df4e447f95f66 100644 --- a/data/json/items/ammo/signal_flare.json +++ b/data/json/items/ammo/signal_flare.json @@ -16,7 +16,7 @@ "ammo_type": "signal_flare", "casing": "shot_hull", "range": 30, - "damage": { "damage_type": "stab", "amount": 16 }, + "damage": { "damage_type": "bullet", "amount": 16 }, "dispersion": 200, "recoil": 100, "drop": "handflare_lit", diff --git a/data/json/items/gun/762.json b/data/json/items/gun/762.json index e11cd467dba6a..4035275174de0 100644 --- a/data/json/items/gun/762.json +++ b/data/json/items/gun/762.json @@ -171,7 +171,7 @@ "ammo": "762", "skill": "pistol", "dispersion": 240, - "ranged_damage": -5, + "ranged_damage": { "damage_type": "bullet", "amount": -5 }, "durability": 7, "modes": [ [ "DEFAULT", "semi-auto", 1 ] ], "valid_mod_locations": [ From 6f57458d0bc08b23b37ba5bd413f116a80ae3e71 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Sun, 12 Apr 2020 16:10:18 -0700 Subject: [PATCH 14/48] Miscellaneous damage JSON changes --- data/json/items/ammo/shot.json | 8 ++++++- data/json/items/fuel.json | 6 ++--- data/json/items/gun/223.json | 6 ++--- data/json/items/gun/bio.json | 2 +- data/json/items/gun/shot.json | 2 +- data/json/items/gunmod/barrel.json | 2 +- data/json/items/gunmod/laser_gunmods.json | 8 +++---- data/json/items/gunmod/muzzle.json | 8 +++---- data/json/items/gunmod/underbarrel.json | 2 +- data/json/items/obsolete.json | 27 +++++++++++------------ data/json/items/ranged/archery.json | 2 +- data/json/items/ranged/crossbows.json | 2 +- data/mods/TEST_DATA/items.json | 4 ++-- 13 files changed, 41 insertions(+), 38 deletions(-) diff --git a/data/json/items/ammo/shot.json b/data/json/items/ammo/shot.json index b43fbc167875a..49b5723185fec 100644 --- a/data/json/items/ammo/shot.json +++ b/data/json/items/ammo/shot.json @@ -145,7 +145,13 @@ "price": 1000, "price_postapoc": 1600, "flags": [ "IRREPLACEABLE_CONSUMABLE" ], - "proportional": { "damage": { "damage_type": "stab", "amount": 0.2 }, "recoil": 0.6, "loudness": 0.8, "dispersion": 1.2, "range": 0.5 }, + "proportional": { + "damage": { "damage_type": "bullet", "amount": 0.2 }, + "recoil": 0.6, + "loudness": 0.8, + "dispersion": 1.2, + "range": 0.5 + }, "extend": { "effects": [ "INCENDIARY", "STREAM", "NOGIB" ] } }, { diff --git a/data/json/items/fuel.json b/data/json/items/fuel.json index a914a44edfdc2..5225e3ef28178 100644 --- a/data/json/items/fuel.json +++ b/data/json/items/fuel.json @@ -86,9 +86,8 @@ "symbol": "=", "color": "green", "ammo_type": "jp8", - "damage": 5, + "damage": { "damage_type": "bullet", "amount": 5, "armor_penetration": 5 }, "range": 4, - "pierce": 5, "effects": [ "FLAME", "STREAM", "INCENDIARY", "NEVER_MISFIRES" ], "fuel": { "energy": 34.7, @@ -114,9 +113,8 @@ "symbol": "=", "color": "green", "ammo_type": "avgas", - "damage": 5, + "damage": { "damage_type": "bullet", "amount": 5, "armor_penetration": 5 }, "range": 4, - "pierce": 5, "effects": [ "FLAME", "STREAM", "INCENDIARY", "NEVER_MISFIRES" ], "fuel": { "energy": 45.8, diff --git a/data/json/items/gun/223.json b/data/json/items/gun/223.json index 72ca143f9acf6..e3ae02dca776c 100644 --- a/data/json/items/gun/223.json +++ b/data/json/items/gun/223.json @@ -103,7 +103,7 @@ "color": "dark_gray", "ammo": "223", "range": -6, - "ranged_damage": -9, + "ranged_damage": { "damage_type": "bullet", "amount": -9 }, "dispersion": 380, "durability": 6, "min_cycle_recoil": 1350, @@ -125,7 +125,7 @@ "symbol": "(", "color": "dark_gray", "ammo": "223", - "ranged_damage": -2, + "ranged_damage": { "damage_type": "bullet", "amount": -2 }, "dispersion": 180, "durability": 8, "min_cycle_recoil": 1350, @@ -404,7 +404,7 @@ "color": "dark_gray", "ammo": "223", "range": -6, - "ranged_damage": -11, + "ranged_damage": { "damage_type": "bullet", "amount": -11 }, "dispersion": 380, "durability": 6, "min_cycle_recoil": 1350, diff --git a/data/json/items/gun/bio.json b/data/json/items/gun/bio.json index 5f225f88411b2..f8f9f6f5603c7 100644 --- a/data/json/items/gun/bio.json +++ b/data/json/items/gun/bio.json @@ -15,7 +15,7 @@ "skill": "shotgun", "ammo": "shot", "//": "Damage is using a 6 inch barrel.", - "ranged_damage": -11, + "ranged_damage": { "damage_type": "bullet", "amount": -11 }, "dispersion": 855, "durability": 6, "clip_size": 1, diff --git a/data/json/items/gun/shot.json b/data/json/items/gun/shot.json index cf14f66bf4c5f..c1a6f93fac906 100644 --- a/data/json/items/gun/shot.json +++ b/data/json/items/gun/shot.json @@ -123,7 +123,7 @@ "to_hit": -1, "bashing": 9, "material": [ "steel", "plastic" ], - "ranged_damage": 5, + "ranged_damage": { "damage_type": "bullet", "amount": 5 }, "dispersion": 425, "sight_dispersion": 500, "durability": 7, diff --git a/data/json/items/gunmod/barrel.json b/data/json/items/gunmod/barrel.json index 080d415e57c6c..c8c8300af27c2 100644 --- a/data/json/items/gunmod/barrel.json +++ b/data/json/items/gunmod/barrel.json @@ -31,7 +31,7 @@ "color": "light_gray", "location": "barrel", "mod_targets": [ "smg", "rifle", "shotgun", "pistol" ], - "damage_modifier": 500, + "damage_modifier": { "damage_type": "stab", "amount": 500 }, "dispersion_modifier": 500, "ups_charges_multiplier": 50.0, "min_skills": [ [ "gun", 1 ] ] diff --git a/data/json/items/gunmod/laser_gunmods.json b/data/json/items/gunmod/laser_gunmods.json index 7ce7b3c476218..a54e6c44e575a 100644 --- a/data/json/items/gunmod/laser_gunmods.json +++ b/data/json/items/gunmod/laser_gunmods.json @@ -14,7 +14,7 @@ "location": "lens", "mod_targets": [ "rifle", "pistol" ], "range_modifier": -25, - "damage_modifier": 10, + "damage_modifier": { "damage_type": "bullet", "amount": 10 }, "ammo_effects": [ "SHOT" ], "min_skills": [ [ "weapon", 4 ] ] }, @@ -33,8 +33,8 @@ "location": "lens", "mod_targets": [ "rifle", "pistol" ], "range_modifier": 15, + "damage_modifier": { "damage_type": "bullet", "amount": 5 }, "dispersion_modifier": 15, - "damage_modifier": 5, "min_skills": [ [ "weapon", 4 ] ] }, { @@ -52,7 +52,7 @@ "location": "lens", "mod_targets": [ "pistol" ], "range_modifier": -25, - "damage_modifier": -8, + "damage_modifier": { "damage_type": "bullet", "amount": -8 }, "ups_charges_multiplier": 1.2, "ammo_effects": [ "BEANBAG" ], "min_skills": [ [ "weapon", 4 ], [ "electronics", 5 ] ] @@ -91,7 +91,7 @@ "location": "emitter", "mod_targets": [ "pistol", "rifle" ], "range_modifier": 5, - "damage_modifier": 10, + "damage_modifier": { "damage_type": "bullet", "amount": 10 }, "ups_charges_multiplier": 2.0, "min_skills": [ [ "weapon", 4 ], [ "electronics", 5 ] ] } diff --git a/data/json/items/gunmod/muzzle.json b/data/json/items/gunmod/muzzle.json index 7364de1babd42..58b1766de9f7f 100644 --- a/data/json/items/gunmod/muzzle.json +++ b/data/json/items/gunmod/muzzle.json @@ -64,7 +64,7 @@ "mod_targets": [ "pistol", "smg", "rifle" ], "consume_chance": 20, "consume_divisor": 110, - "damage_modifier": -5, + "damage_modifier": { "damage_type": "bullet", "amount": -5 }, "dispersion_modifier": 40, "handling_modifier": 1, "loudness_modifier": -30, @@ -109,7 +109,7 @@ "mod_targets": [ "pistol", "smg", "rifle" ], "consume_chance": 1, "consume_divisor": 1, - "damage_modifier": -5, + "damage_modifier": { "damage_type": "bullet", "amount": -5 }, "dispersion_modifier": 125, "loudness_modifier": -10, "flags": [ "DISABLE_SIGHTS", "TRADER_AVOID", "CONSUMABLE" ] @@ -147,7 +147,7 @@ "color": "dark_gray", "location": "muzzle", "mod_targets": [ "shotgun" ], - "damage_modifier": -4, + "damage_modifier": { "damage_type": "bullet", "amount": -4 }, "handling_modifier": 2, "consume_chance": 5000, "consume_divisor": 235, @@ -183,7 +183,7 @@ "type": "GUNMOD", "name": { "str": "MP5SD integral suppressor" }, "description": "This is the integrated suppressor for the H&K MP5SD. Its large expansion chamber decelerates ammunition via several ports in the barrel, rendering most ammo subsonic at the cost of terminal performance. It is not as effective as modern designs.", - "damage_modifier": -7, + "damage_modifier": { "damage_type": "bullet", "amount": -7 }, "weight": "250 g", "integral_volume": "0 ml", "//": "weight is accounted for in gun item", diff --git a/data/json/items/gunmod/underbarrel.json b/data/json/items/gunmod/underbarrel.json index 533c9ca19064f..6ce2e21353989 100644 --- a/data/json/items/gunmod/underbarrel.json +++ b/data/json/items/gunmod/underbarrel.json @@ -153,7 +153,7 @@ "gun_data": { "ammo": "shot", "skill": "shotgun", - "ranged_damage": 5, + "ranged_damage": { "damage_type": "bullet", "amount": 5 }, "dispersion": 425, "durability": 7, "clip_size": 12, diff --git a/data/json/items/obsolete.json b/data/json/items/obsolete.json index 13ec6787afeb7..820a8ddff27ed 100644 --- a/data/json/items/obsolete.json +++ b/data/json/items/obsolete.json @@ -75,7 +75,7 @@ "color": "light_gray", "location": "barrel", "mod_targets": [ "smg", "rifle", "shotgun", "pistol" ], - "damage_modifier": 1, + "damage_modifier": { "damage_type": "bullet", "amount": 1 }, "dispersion_modifier": -90, "min_skills": [ [ "weapon", 4 ] ] }, @@ -108,7 +108,7 @@ "color": "light_gray", "location": "barrel", "mod_targets": [ "shotgun" ], - "damage_modifier": -8, + "damage_modifier": { "damage_type": "bullet", "amount": -8 }, "dispersion_modifier": -200, "min_skills": [ [ "weapon", 5 ] ] }, @@ -478,7 +478,7 @@ "color": "magenta", "skill": "pistol", "range": 30, - "ranged_damage": { "damage_type": "stab", "amount": 10, "armor_penetration": 6 }, + "ranged_damage": { "damage_type": "bullet", "amount": 10, "armor_penetration": 6 }, "dispersion": 180, "durability": 4, "loudness": 7, @@ -1007,7 +1007,7 @@ "type": "AMMO", "name": { "str": "40mm slug" }, "description": "A 40mm shell loaded with a massive bullet. Say goodbye to your shoulder, I guess.", - "damage": { "damage_type": "stab", "amount": 130 }, + "damage": { "damage_type": "bullet", "amount": 130 }, "recoil": 875, "extend": { "effects": [ "LARGE_BEANBAG" ] } }, @@ -1751,7 +1751,7 @@ "color": "light_gray", "ammo": "223", "range": -6, - "ranged_damage": -16, + "ranged_damage": { "damage_type": "bullet", "amount": -16 }, "dispersion": 380, "durability": 8, "blackpowder_tolerance": 32, @@ -1814,7 +1814,7 @@ "color": "light_gray", "location": "barrel", "mod_targets": [ "smg", "rifle", "shotgun", "pistol" ], - "damage_modifier": 3, + "damage_modifier": { "damage_type": "bullet", "amount": 3 }, "dispersion_modifier": -45, "range_modifier": 3, "min_skills": [ [ "weapon", 4 ] ], @@ -1998,7 +1998,7 @@ "volume": "2750 ml", "bashing": 8, "to_hit": -1, - "ranged_damage": 15, + "ranged_damage": { "damage_type": "stab", "amount": 15 }, "range": 15, "dispersion": 75, "durability": 7, @@ -2036,7 +2036,7 @@ "volume": "3 L", "bashing": 12, "to_hit": -1, - "ranged_damage": 5, + "ranged_damage": { "damage_type": "stab", "amount": 5 }, "range": 20, "dispersion": 30, "durability": 7, @@ -2073,7 +2073,7 @@ "price_postapoc": 12000, "bashing": 8, "to_hit": -1, - "ranged_damage": 15, + "ranged_damage": { "damage_type": "stab", "amount": 15 }, "range": 3, "dispersion": 350, "durability": 7, @@ -2137,7 +2137,7 @@ "ammo": "metal_rail", "skill": "rifle", "range": 40, - "ranged_damage": 40, + "ranged_damage": { "damage_type": "stab", "amount": 40 }, "dispersion": 100, "durability": 7, "clip_size": 10, @@ -2208,8 +2208,7 @@ "ammo": "nail", "skill": "rifle", "range": 12, - "ranged_damage": 4, - "pierce": 20, + "ranged_damage": { "damage_type": "stab", "amount": 4, "armor_penetration": 20 }, "dispersion": 180, "durability": 5, "ups_charges": 5, @@ -2248,7 +2247,7 @@ [ "underbarrel mount", 1 ] ], "magazines": [ [ "nail", [ "nailmag" ] ] ], - "relative": { "weight": 1000, "volume": 6, "range": 3, "ranged_damage": 4 }, + "relative": { "weight": 1000, "volume": 6, "range": 3, "ranged_damage": { "damage_type": "stab", "amount": 4 } }, "proportional": { "price": 3, "dispersion": 0.5 } }, { @@ -2301,7 +2300,7 @@ "weight": "34500 g", "bashing": 8, "ammo_type": "mininuke_mod", - "damage": 14, + "damage": { "damage_type": "stab", "amount": 14 }, "stack_size": 2, "effects": [ "MININUKE_MOD", "NEVER_MISFIRES" ] }, diff --git a/data/json/items/ranged/archery.json b/data/json/items/ranged/archery.json index 665b2d9034024..542df63294c05 100644 --- a/data/json/items/ranged/archery.json +++ b/data/json/items/ranged/archery.json @@ -167,7 +167,7 @@ "bashing": 6, "cutting": 2, "ammo_type": "arrow", - "prop_damage": 1.25, + "damage": { "damage_type": "stab", "constant_damage_multiplier": 1.25 }, "dispersion": 150, "loudness": 0, "count": 10, diff --git a/data/json/items/ranged/crossbows.json b/data/json/items/ranged/crossbows.json index ed3fe47b6b99c..9767d91d30a43 100644 --- a/data/json/items/ranged/crossbows.json +++ b/data/json/items/ranged/crossbows.json @@ -76,7 +76,7 @@ "bashing": 6, "cutting": 2, "ammo_type": "bolt", - "prop_damage": 1.25, + "damage": { "damage_type": "stab", "constant_damage_multiplier": 1.25 }, "dispersion": 180, "loudness": 0, "count": 10, diff --git a/data/mods/TEST_DATA/items.json b/data/mods/TEST_DATA/items.json index b8c351d106b50..5c50ac2684c5d 100644 --- a/data/mods/TEST_DATA/items.json +++ b/data/mods/TEST_DATA/items.json @@ -13,7 +13,7 @@ "weight": "657 g", "volume": "250 ml", "bashing": 7, - "damage": 7, + "damage": { "damage_type": "stab", "amount": 7 }, "range": 10, "dispersion": 14, "loudness": 0, @@ -332,7 +332,7 @@ "to_hit": 1, "reload_noise_volume": 3, "loudness": 10, - "ranged_damage": 18, + "ranged_damage": { "damage_type": "stab", "amount": 18 }, "range": 18, "dispersion": 850, "durability": 6, From bbe9d0d1e01bbbd9ec8b4ce63439f7aa0185e378 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Fri, 20 Mar 2020 13:04:36 -0700 Subject: [PATCH 15/48] Update monster bullet damage Just set equivalent to stab damage, with arithmetical rounding --- data/json/monsters/cyborgs.json | 2 ++ data/json/monsters/defense_bot.json | 9 ++++++++ data/json/monsters/drones.json | 7 ++++++ data/json/monsters/fish.json | 3 +++ data/json/monsters/fungus.json | 11 ++++++++++ data/json/monsters/insect_spider.json | 26 +++++++++++++++++++++++ data/json/monsters/jabberwock.json | 3 +++ data/json/monsters/mammal.json | 2 ++ data/json/monsters/mechsuits.json | 3 +++ data/json/monsters/mi-go.json | 6 ++++++ data/json/monsters/misc.json | 1 + data/json/monsters/mutant.json | 2 ++ data/json/monsters/nether.json | 8 +++++++ data/json/monsters/obsolete.json | 4 ++++ data/json/monsters/reptile_amphibian.json | 2 ++ data/json/monsters/slimes.json | 1 + data/json/monsters/slugs.json | 1 + data/json/monsters/triffid.json | 4 ++++ data/json/monsters/turrets.json | 7 ++++++ data/json/monsters/utility_bot.json | 7 ++++++ data/json/monsters/zed-animal.json | 5 +++++ data/json/monsters/zed-classic.json | 7 ++++++ data/json/monsters/zed_acid.json | 1 + data/json/monsters/zed_burned.json | 3 +++ data/json/monsters/zed_children.json | 1 + data/json/monsters/zed_electric.json | 1 + data/json/monsters/zed_explosive.json | 3 +++ data/json/monsters/zed_fusion.json | 5 +++++ data/json/monsters/zed_lab.json | 1 + data/json/monsters/zed_misc.json | 13 ++++++++++++ data/json/monsters/zed_radiation.json | 5 +++++ data/json/monsters/zed_skeletal.json | 4 ++++ data/json/monsters/zed_soldiers.json | 8 +++++++ data/json/monsters/zed_survivor.json | 2 ++ 34 files changed, 168 insertions(+) diff --git a/data/json/monsters/cyborgs.json b/data/json/monsters/cyborgs.json index 34f7d91b53de0..37a7a628f462b 100644 --- a/data/json/monsters/cyborgs.json +++ b/data/json/monsters/cyborgs.json @@ -23,6 +23,7 @@ "dodge": 5, "armor_bash": 14, "armor_cut": 10, + "armor_bullet": 8, "vision_day": 50, "revert_to_itype": "bot_broken_cyborg", "special_attacks": [ [ "PARROT", 80 ] ], @@ -66,6 +67,7 @@ "dodge": 2, "armor_bash": 10, "armor_cut": 6, + "armor_bullet": 5, "vision_day": 50, "revert_to_itype": "bot_prototype_cyborg", "special_attacks": [ [ "PARROT", 80 ] ], diff --git a/data/json/monsters/defense_bot.json b/data/json/monsters/defense_bot.json index 5b917ef11efb3..6a0a332010a7a 100644 --- a/data/json/monsters/defense_bot.json +++ b/data/json/monsters/defense_bot.json @@ -23,6 +23,7 @@ "dodge": 8, "armor_bash": 12, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 50, "path_settings": { "max_dist": 5 }, "revert_to_itype": "bot_copbot", @@ -52,6 +53,7 @@ "dodge": 8, "armor_bash": 12, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 50, "path_settings": { "max_dist": 5 }, "revert_to_itype": "bot_riotbot", @@ -80,6 +82,7 @@ "morale": 100, "armor_bash": 14, "armor_cut": 14, + "armor_bullet": 11, "vision_day": 50, "revert_to_itype": "bot_secubot", "starting_ammo": { "556": 30 }, @@ -126,6 +129,7 @@ "morale": 100, "armor_bash": 14, "armor_cut": 14, + "armor_bullet": 11, "vision_day": 50, "revert_to_itype": "bot_talon_m202a1", "starting_ammo": { "m235tpa": 4 }, @@ -173,6 +177,7 @@ "melee_cut": 0, "armor_bash": 12, "armor_cut": 12, + "armor_bullet": 10, "vision_day": 50, "revert_to_itype": "bot_skitterbot", "path_settings": { "max_dist": 5 }, @@ -205,6 +210,7 @@ "dodge": 2, "armor_bash": 12, "armor_cut": 12, + "armor_bullet": 10, "vision_day": 50, "vision_night": 10, "revert_to_itype": "bot_science_bot", @@ -248,6 +254,7 @@ "melee_cut": 10, "armor_bash": 15, "armor_cut": 50, + "armor_bullet": 40, "vision_night": 5, "path_settings": { "max_dist": 5 }, "special_attacks": [ [ "SMASH", 20 ], [ "BIO_OP_TAKEDOWN", 20 ] ], @@ -290,6 +297,7 @@ "dodge": 2, "armor_bash": 8, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 30, "vision_night": 10, "revert_to_itype": "bot_dispatch", @@ -333,6 +341,7 @@ "dodge": 2, "armor_bash": 12, "armor_cut": 12, + "armor_bullet": 10, "vision_day": 30, "vision_night": 10, "revert_to_itype": "bot_dispatch_military", diff --git a/data/json/monsters/drones.json b/data/json/monsters/drones.json index 5e396b98f287e..3f93e922992a4 100644 --- a/data/json/monsters/drones.json +++ b/data/json/monsters/drones.json @@ -27,6 +27,7 @@ "speed": 250, "color": "cyan", "armor_cut": 4, + "armor_bullet": 3, "revert_to_itype": "bot_EMP_hack", "starting_ammo": { "grenade_emp": 1 }, "special_attacks": [ [ "KAMIKAZE", 0 ] ] @@ -41,6 +42,7 @@ "speed": 250, "color": "light_gray", "armor_cut": 4, + "armor_bullet": 3, "revert_to_itype": "bot_c4_hack", "starting_ammo": { "c4": 1 }, "special_attacks": [ [ "KAMIKAZE", 0 ] ] @@ -55,6 +57,7 @@ "speed": 250, "color": "dark_gray", "armor_cut": 4, + "armor_bullet": 3, "revert_to_itype": "bot_flashbang_hack", "starting_ammo": { "flashbang": 1 }, "special_attacks": [ [ "KAMIKAZE", 0 ] ] @@ -69,6 +72,7 @@ "speed": 250, "color": "dark_gray", "armor_cut": 4, + "armor_bullet": 3, "revert_to_itype": "bot_gasbomb_hack", "starting_ammo": { "tear_gas_payload": 1 }, "special_attacks": [ [ "KAMIKAZE", 0 ] ] @@ -83,6 +87,7 @@ "speed": 250, "color": "green", "armor_cut": 4, + "armor_bullet": 3, "revert_to_itype": "bot_grenade_hack", "starting_ammo": { "grenade": 1 }, "special_attacks": [ [ "KAMIKAZE", 0 ] ] @@ -102,6 +107,7 @@ "melee_cut": 12, "armor_bash": 2, "armor_cut": 8, + "armor_bullet": 6, "revert_to_itype": "bot_manhack", "death_drops": { "groups": [ [ "robots", 4 ], [ "manhack", 1 ] ] }, "death_function": [ "BROKEN" ], @@ -119,6 +125,7 @@ "color": "light_green_magenta", "armor_bash": 1, "armor_cut": 6, + "armor_bullet": 5, "revert_to_itype": "bot_mininuke_hack", "starting_ammo": { "mininuke": 1 }, "special_attacks": [ [ "KAMIKAZE", 0 ] ] diff --git a/data/json/monsters/fish.json b/data/json/monsters/fish.json index a30936118a685..f59dafa2d190e 100644 --- a/data/json/monsters/fish.json +++ b/data/json/monsters/fish.json @@ -24,6 +24,7 @@ "dodge": 2, "armor_bash": 20, "armor_cut": 30, + "armor_bullet": 24, "vision_day": 30, "vision_night": 20, "harvest": "mutant_shellfish", @@ -622,6 +623,7 @@ "melee_cut": 5, "dodge": 2, "armor_cut": 8, + "armor_bullet": 6, "harvest": "shellfish", "anger_triggers": [ "PLAYER_CLOSE", "HURT" ], "fear_triggers": [ "FIRE" ], @@ -652,6 +654,7 @@ "dodge": 2, "armor_bash": 10, "armor_cut": 18, + "armor_bullet": 14, "vision_day": 30, "vision_night": 15, "harvest": "mutant_shellfish", diff --git a/data/json/monsters/fungus.json b/data/json/monsters/fungus.json index aee1bf00e181b..16dd0890fca1b 100644 --- a/data/json/monsters/fungus.json +++ b/data/json/monsters/fungus.json @@ -51,6 +51,7 @@ "melee_cut": 0, "armor_bash": 4, "armor_cut": 4, + "armor_bullet": 3, "luminance": 40, "harvest": "exempt", "special_attacks": [ [ "FUNGUS_HAZE", 25 ] ], @@ -80,6 +81,7 @@ "melee_cut": 4, "armor_bash": 10, "armor_cut": 10, + "armor_bullet": 8, "harvest": "exempt", "special_attacks": [ [ "FUNGUS_BRISTLE", 10 ] ], "death_function": [ "DISINTEGRATE" ], @@ -109,6 +111,7 @@ "dodge": 4, "armor_bash": 10, "armor_cut": 4, + "armor_bullet": 3, "harvest": "exempt", "special_attacks": [ [ "FUNGUS_INJECT", 10 ] ], "death_function": [ "FUNGUS" ], @@ -137,6 +140,7 @@ "melee_cut": 0, "armor_bash": 10, "armor_cut": 10, + "armor_bullet": 8, "harvest": "exempt", "special_attacks": [ [ "FUNGUS", 10 ] ], "death_function": [ "DISINTEGRATE" ], @@ -190,6 +194,7 @@ "melee_cut": 0, "armor_bash": 10, "armor_cut": 10, + "armor_bullet": 8, "special_attacks": [ [ "FUNGUS_SPROUT", 10 ] ], "death_function": [ "FUNGUS", "NORMAL" ], "harvest": "fungaloid_mass", @@ -215,6 +220,7 @@ "melee_cut": 0, "armor_bash": 10, "armor_cut": 10, + "armor_bullet": 8, "luminance": 200, "special_attacks": [ [ "FUNGUS_BIG_BLOSSOM", 10 ] ], "death_function": [ "FUNGUS", "NORMAL" ], @@ -245,6 +251,7 @@ "dodge": 3, "armor_bash": 20, "armor_cut": 15, + "armor_bullet": 12, "special_attacks": [ [ "FUNGUS_FORTIFY", 10 ] ], "death_drops": "marloss_yellow_drops", "death_function": [ "FUNGUS", "NORMAL" ], @@ -275,6 +282,7 @@ "dodge": 1, "armor_bash": 4, "armor_cut": 4, + "armor_bullet": 3, "harvest": "fungaloid", "special_attacks": [ [ "FUNGUS_GROWTH", 10000 ] ], "death_function": [ "NORMAL" ], @@ -427,6 +435,7 @@ "melee_cut": 15, "armor_bash": 20, "armor_cut": 45, + "armor_bullet": 36, "vision_day": 5, "vision_night": 5, "harvest": "mr_bones", @@ -511,6 +520,7 @@ "dodge": 1, "armor_bash": 1, "armor_cut": 1, + "armor_bullet": 1, "vision_day": 3, "vision_night": 3, "harvest": "arachnid", @@ -543,6 +553,7 @@ "dodge": 2, "armor_bash": 2, "armor_cut": 6, + "armor_bullet": 5, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", diff --git a/data/json/monsters/insect_spider.json b/data/json/monsters/insect_spider.json index 3331b5e67bcfe..58c08aeec6cae 100644 --- a/data/json/monsters/insect_spider.json +++ b/data/json/monsters/insect_spider.json @@ -49,6 +49,7 @@ "melee_cut": 6, "armor_bash": 12, "armor_cut": 8, + "armor_bullet": 6, "harvest": "meatslug", "death_function": [ "WORM" ], "flags": [ "DIGS", "HEARS", "POISON", "GOODHEARING", "BASHES", "DESTROYS" ] @@ -130,6 +131,7 @@ "dodge": 1, "armor_bash": 5, "armor_cut": 7, + "armor_bullet": 6, "vision_day": 5, "vision_night": 5, "harvest": "arachnid_tainted", @@ -198,6 +200,7 @@ "dodge": 1, "armor_bash": 5, "armor_cut": 10, + "armor_bullet": 8, "vision_day": 5, "vision_night": 5, "harvest": "arachnid_tainted", @@ -233,6 +236,7 @@ "dodge": 1, "armor_bash": 5, "armor_cut": 10, + "armor_bullet": 8, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -299,6 +303,7 @@ "dodge": 1, "armor_bash": 5, "armor_cut": 10, + "armor_bullet": 8, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -334,6 +339,7 @@ "dodge": 4, "armor_bash": 4, "armor_cut": 6, + "armor_bullet": 5, "vision_day": 10, "vision_night": 5, "harvest": "arachnid_bee", @@ -367,6 +373,7 @@ "dodge": 2, "armor_bash": 2, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -396,6 +403,7 @@ "melee_cut": 6, "dodge": 8, "armor_cut": 6, + "armor_bullet": 5, "vision_day": 30, "vision_night": 5, "harvest": "arachnid", @@ -487,6 +495,7 @@ "dodge": 7, "armor_bash": 1, "armor_cut": 2, + "armor_bullet": 2, "armor_acid": 3, "vision_day": 5, "vision_night": 5, @@ -520,6 +529,7 @@ "dodge": 6, "armor_bash": 1, "armor_cut": 2, + "armor_bullet": 2, "armor_acid": 3, "vision_day": 5, "vision_night": 5, @@ -552,6 +562,7 @@ "melee_cut": 4, "dodge": 8, "armor_cut": 3, + "armor_bullet": 2, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -585,6 +596,7 @@ "dodge": 2, "armor_bash": 4, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -616,6 +628,7 @@ "dodge": 2, "armor_bash": 2, "armor_cut": 6, + "armor_bullet": 5, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -646,6 +659,7 @@ "dodge": 1, "armor_bash": 2, "armor_cut": 6, + "armor_bullet": 5, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -677,6 +691,7 @@ "dodge": 2, "armor_bash": 2, "armor_cut": 4, + "armor_bullet": 3, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -709,6 +724,7 @@ "dodge": 1, "armor_bash": 2, "armor_cut": 4, + "armor_bullet": 3, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -741,6 +757,7 @@ "dodge": 4, "armor_bash": 4, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -773,6 +790,7 @@ "dodge": 4, "armor_bash": 4, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 10, "vision_night": 5, "harvest": "arachnid_wasp", @@ -805,6 +823,7 @@ "melee_cut": 3, "dodge": 8, "armor_cut": 6, + "armor_bullet": 5, "harvest": "arachnid", "special_attacks": [ [ "DERMATIK", 25 ] ], "anger_triggers": [ "FRIEND_ATTACKED", "PLAYER_WEAK" ], @@ -862,6 +881,7 @@ "dodge": 1, "armor_bash": 5, "armor_cut": 10, + "armor_bullet": 8, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -895,6 +915,7 @@ "dodge": 1, "armor_bash": 6, "armor_cut": 10, + "armor_bullet": 8, "vision_day": 5, "vision_night": 5, "upgrades": { "age_grow": 14, "into": "mon_ant_acid_soldier" }, @@ -955,6 +976,7 @@ "dodge": 1, "armor_bash": 8, "armor_cut": 16, + "armor_bullet": 13, "special_attacks": [ [ "ANTQUEEN", 1 ] ], "anger_triggers": [ "FRIEND_ATTACKED", "FRIEND_DIED", "HURT", "PLAYER_CLOSE" ], "death_function": [ "NORMAL" ], @@ -986,6 +1008,7 @@ "dodge": 2, "armor_bash": 12, "armor_cut": 14, + "armor_bullet": 11, "vision_day": 5, "vision_night": 5, "special_attacks": [ [ "ACID", 15 ] ], @@ -1043,6 +1066,7 @@ "dodge": 1, "armor_bash": 6, "armor_cut": 14, + "armor_bullet": 11, "harvest": "arachnid", "special_attacks": [ [ "ANTQUEEN", 1 ] ], "anger_triggers": [ "FRIEND_ATTACKED", "FRIEND_DIED", "HURT" ], @@ -1073,6 +1097,7 @@ "dodge": 2, "armor_bash": 10, "armor_cut": 12, + "armor_bullet": 10, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -1104,6 +1129,7 @@ "dodge": 2, "armor_bash": 3, "armor_cut": 4, + "armor_bullet": 3, "vision_day": 10, "harvest": "arachnid", "reproduction": { "baby_egg": "egg_locust", "baby_count": 5, "baby_timer": 10 }, diff --git a/data/json/monsters/jabberwock.json b/data/json/monsters/jabberwock.json index bdd8598ea96e4..43155524e5a9c 100644 --- a/data/json/monsters/jabberwock.json +++ b/data/json/monsters/jabberwock.json @@ -21,6 +21,7 @@ "melee_cut": 0, "armor_bash": 2, "armor_cut": 2, + "armor_bullet": 2, "vision_day": 50, "vision_night": 3, "special_attacks": [ [ "FLESH_GOLEM", 10 ], [ "ABSORB_MEAT", 10 ] ], @@ -51,6 +52,7 @@ "melee_cut": 2, "armor_bash": 6, "armor_cut": 4, + "armor_bullet": 3, "vision_day": 50, "vision_night": 3, "special_attacks": [ [ "FLESH_GOLEM", 8 ], [ "ABSORB_MEAT", 1 ] ], @@ -82,6 +84,7 @@ "dodge": 3, "armor_bash": 12, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 50, "vision_night": 3, "special_attacks": [ [ "FLESH_GOLEM", 5 ] ], diff --git a/data/json/monsters/mammal.json b/data/json/monsters/mammal.json index 3ebc90f5bd28c..1d1d4189a6935 100644 --- a/data/json/monsters/mammal.json +++ b/data/json/monsters/mammal.json @@ -1788,6 +1788,7 @@ "dodge": 1, "armor_bash": 4, "armor_cut": 1, + "armor_bullet": 1, "vision_night": 7, "path_settings": { "max_dist": 10 }, "anger_triggers": [ "HURT", "MATING_SEASON" ], @@ -1853,6 +1854,7 @@ "dodge": 1, "armor_bash": 5, "armor_cut": 2, + "armor_bullet": 2, "vision_day": 0, "vision_night": 0, "harvest": "mutant_mammal_large_leather", diff --git a/data/json/monsters/mechsuits.json b/data/json/monsters/mechsuits.json index 3007b8968743e..89fb00a8ca0b9 100644 --- a/data/json/monsters/mechsuits.json +++ b/data/json/monsters/mechsuits.json @@ -22,6 +22,7 @@ "melee_cut": 5, "armor_bash": 15, "armor_cut": 25, + "armor_bullet": 20, "vision_night": 100, "mech_str_bonus": 5, "mech_battery": "huge_atomic_battery_cell", @@ -67,6 +68,7 @@ "melee_cut": 0, "armor_bash": 25, "armor_cut": 45, + "armor_bullet": 36, "vision_night": 50, "mech_str_bonus": 10, "mech_battery": "huge_atomic_battery_cell", @@ -112,6 +114,7 @@ "melee_cut": 0, "armor_bash": 22, "armor_cut": 30, + "armor_bullet": 24, "vision_night": 50, "mech_str_bonus": 30, "mech_battery": "huge_atomic_battery_cell", diff --git a/data/json/monsters/mi-go.json b/data/json/monsters/mi-go.json index bcd45a915fe74..8471ddeadf9a7 100644 --- a/data/json/monsters/mi-go.json +++ b/data/json/monsters/mi-go.json @@ -23,6 +23,7 @@ "dodge": 4, "armor_bash": 4, "armor_cut": 12, + "armor_bullet": 10, "vision_day": 50, "vision_night": 20, "harvest": "zombie_meatslug", @@ -71,6 +72,7 @@ "dodge": 4, "armor_bash": 4, "armor_cut": 12, + "armor_bullet": 10, "vision_day": 50, "vision_night": 20, "harvest": "zombie_meatslug", @@ -120,6 +122,7 @@ "dodge": 4, "armor_bash": 5, "armor_cut": 13, + "armor_bullet": 10, "vision_day": 50, "vision_night": 20, "harvest": "zombie_meatslug", @@ -168,6 +171,7 @@ "dodge": 5, "armor_bash": 17, "armor_cut": 22, + "armor_bullet": 18, "vision_day": 50, "vision_night": 20, "harvest": "zombie_meatslug", @@ -220,6 +224,7 @@ "dodge": 4, "armor_bash": 19, "armor_cut": 27, + "armor_bullet": 22, "vision_day": 50, "vision_night": 25, "harvest": "zombie_meatslug", @@ -271,6 +276,7 @@ "dodge": 5, "armor_bash": 4, "armor_cut": 5, + "armor_bullet": 4, "vision_day": 50, "vision_night": 25, "harvest": "zombie_meatslug", diff --git a/data/json/monsters/misc.json b/data/json/monsters/misc.json index c10da7bcf9c6c..9c8034cc676ee 100644 --- a/data/json/monsters/misc.json +++ b/data/json/monsters/misc.json @@ -65,6 +65,7 @@ "melee_cut": 0, "armor_bash": 2, "armor_cut": 2, + "armor_bullet": 2, "harvest": "exempt", "special_attacks": [ [ "GENERATOR", 1 ] ], "death_function": [ "GAMEOVER" ], diff --git a/data/json/monsters/mutant.json b/data/json/monsters/mutant.json index 5716dbf272d71..ef2b4324a06c2 100644 --- a/data/json/monsters/mutant.json +++ b/data/json/monsters/mutant.json @@ -54,6 +54,7 @@ "dodge": 4, "armor_bash": 5, "armor_cut": 5, + "armor_bullet": 4, "vision_day": 25, "vision_night": 5, "harvest": "human_fur", @@ -95,6 +96,7 @@ "dodge": 5, "armor_bash": 7, "armor_cut": 7, + "armor_bullet": 6, "vision_night": 15, "harvest": "human_large_fur", "special_attacks": [ diff --git a/data/json/monsters/nether.json b/data/json/monsters/nether.json index 944c23e953c57..b07525541d64c 100644 --- a/data/json/monsters/nether.json +++ b/data/json/monsters/nether.json @@ -23,6 +23,7 @@ "dodge": 2, "armor_bash": 6, "armor_cut": 2, + "armor_bullet": 2, "vision_day": 5, "vision_night": 5, "path_settings": { "max_dist": 5 }, @@ -176,6 +177,7 @@ "dodge": 3, "armor_bash": 12, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 50, "luminance": 6, "harvest": "exempt", @@ -452,6 +454,7 @@ "dodge": 6, "armor_bash": 4, "armor_cut": 2, + "armor_bullet": 2, "harvest": "human", "death_function": [ "NORMAL" ], "flags": [ "SEES", "HEARS", "SMELLS", "WARM", "BASHES", "GROUP_BASH", "BLEED", "HUMAN", "REVIVES", "CLIMBS", "FILTHY" ] @@ -479,6 +482,7 @@ "melee_cut": 5, "dodge": 5, "armor_cut": 50, + "armor_bullet": 40, "vision_day": 50, "vision_night": 50, "harvest": "exempt", @@ -522,6 +526,7 @@ "melee_cut": 5, "dodge": 5, "armor_cut": 50, + "armor_bullet": 40, "vision_day": 50, "vision_night": 50, "harvest": "exempt", @@ -564,6 +569,7 @@ "melee_cut": 0, "armor_bash": 6, "armor_cut": 12, + "armor_bullet": 10, "harvest": "human", "special_attacks": [ [ "ACID", 15 ] ], "anger_triggers": [ "PLAYER_WEAK", "FRIEND_DIED" ], @@ -630,6 +636,7 @@ "melee_cut": 1, "dodge": 8, "armor_cut": 5, + "armor_bullet": 4, "vision_day": 50, "harvest": "exempt", "path_settings": { "max_dist": 10 }, @@ -731,6 +738,7 @@ "melee_cut": 6, "armor_bash": 10, "armor_cut": 30, + "armor_bullet": 24, "harvest": "exempt", "path_settings": { "max_dist": 5 }, "special_attacks": [ [ "PARROT", 40 ] ], diff --git a/data/json/monsters/obsolete.json b/data/json/monsters/obsolete.json index 97b06c143fda0..e448fb549dd77 100644 --- a/data/json/monsters/obsolete.json +++ b/data/json/monsters/obsolete.json @@ -63,6 +63,7 @@ "melee_cut": 0, "dodge": 6, "armor_cut": 6, + "armor_bullet": 5, "harvest": "arachnid", "anger_triggers": [ "PLAYER_WEAK" ], "fear_triggers": [ "PLAYER_CLOSE" ], @@ -283,6 +284,7 @@ "melee_cut": 6, "armor_bash": 12, "armor_cut": 8, + "armor_bullet": 6, "path_settings": { "max_dist": 5 }, "revert_to_itype": "bot_tripod", "special_attacks": [ [ "FLAMETHROWER", 10 ] ], @@ -313,6 +315,7 @@ "melee_cut": 0, "armor_bash": 90, "armor_cut": 90, + "armor_bullet": 72, "vision_day": 50, "revert_to_itype": "bot_tankbot", "starting_ammo": { "40x46mm_m433": 200, "556": 3000 }, @@ -355,6 +358,7 @@ "melee_cut": 0, "armor_bash": 18, "armor_cut": 14, + "armor_bullet": 11, "vision_day": 50, "vision_night": 35, "revert_to_itype": "bot_chickenbot", diff --git a/data/json/monsters/reptile_amphibian.json b/data/json/monsters/reptile_amphibian.json index 381e99845ed34..58a786ae707ca 100644 --- a/data/json/monsters/reptile_amphibian.json +++ b/data/json/monsters/reptile_amphibian.json @@ -54,6 +54,7 @@ "dodge": 2, "armor_bash": 6, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 3, "vision_night": 35, "harvest": "animal_large_noskin", @@ -137,6 +138,7 @@ "dodge": 1, "armor_bash": 2, "armor_cut": 4, + "armor_bullet": 3, "vision_day": 30, "vision_night": 5, "harvest": "mutant_animal_large_noskin", diff --git a/data/json/monsters/slimes.json b/data/json/monsters/slimes.json index 461cd8d64bec5..737c914b7a406 100644 --- a/data/json/monsters/slimes.json +++ b/data/json/monsters/slimes.json @@ -81,6 +81,7 @@ "melee_cut": 0, "armor_bash": 14, "armor_cut": 4, + "armor_bullet": 3, "armor_stab": 20, "armor_acid": 20, "harvest": "exempt", diff --git a/data/json/monsters/slugs.json b/data/json/monsters/slugs.json index b817208694998..98d2cf80eb146 100644 --- a/data/json/monsters/slugs.json +++ b/data/json/monsters/slugs.json @@ -52,6 +52,7 @@ "melee_cut": 1, "armor_bash": 8, "armor_cut": 2, + "armor_bullet": 2, "vision_day": 30, "harvest": "mutant_meatslug", "special_attacks": [ [ "ACID", 10 ] ], diff --git a/data/json/monsters/triffid.json b/data/json/monsters/triffid.json index 6eff462b82bfd..570ce2f3e73e0 100644 --- a/data/json/monsters/triffid.json +++ b/data/json/monsters/triffid.json @@ -167,6 +167,7 @@ "melee_cut": 6, "armor_bash": 10, "armor_cut": 4, + "armor_bullet": 3, "harvest": "triffid_large", "death_function": [ "NORMAL" ], "flags": [ "SEES", "SMELLS", "BASHES", "GROUP_BASH", "NOHEAD", "PARALYZEVENOM" ] @@ -193,6 +194,7 @@ "melee_cut": 8, "armor_bash": 12, "armor_cut": 8, + "armor_bullet": 6, "harvest": "triffid_queen", "special_attacks": [ [ "GROWPLANTS", 20 ] ], "death_function": [ "NORMAL" ], @@ -246,6 +248,7 @@ "melee_cut": 4, "armor_bash": 4, "armor_cut": 6, + "armor_bullet": 5, "harvest": "triffid_large", "attack_effs": [ { "id": "paralyzepoison", "//": "applying this multiple times makes intensity go up by 3 instead of 1", "duration": 33 }, @@ -300,6 +303,7 @@ "melee_cut": 0, "armor_bash": 12, "armor_cut": 16, + "armor_bullet": 13, "harvest": "triffid_small", "special_attacks": [ [ "TRIFFID_HEARTBEAT", 50 ] ], "death_function": [ "TRIFFID_HEART" ], diff --git a/data/json/monsters/turrets.json b/data/json/monsters/turrets.json index 0f985c32c2275..b1bccd5fe2363 100644 --- a/data/json/monsters/turrets.json +++ b/data/json/monsters/turrets.json @@ -18,6 +18,7 @@ "morale": 100, "armor_bash": 14, "armor_cut": 16, + "armor_bullet": 13, "vision_night": 3, "revert_to_itype": "bot_turret", "starting_ammo": { "9mm": 30 }, @@ -66,6 +67,7 @@ "melee_cut": 0, "armor_bash": 14, "armor_cut": 16, + "armor_bullet": 13, "luminance": 4, "revert_to_itype": "bot_turret_searchlight", "special_attacks": [ [ "SEARCHLIGHT", 1 ] ], @@ -92,6 +94,7 @@ "morale": 100, "armor_bash": 14, "armor_cut": 16, + "armor_bullet": 13, "vision_day": 50, "revert_to_itype": "bot_laserturret", "special_attacks": [ @@ -128,6 +131,7 @@ "morale": 100, "armor_bash": 14, "armor_cut": 16, + "armor_bullet": 13, "vision_day": 50, "vision_night": 3, "revert_to_itype": "bot_antimateriel", @@ -186,6 +190,7 @@ "morale": 100, "armor_bash": 14, "armor_cut": 16, + "armor_bullet": 13, "vision_day": 50, "vision_night": 3, "revert_to_itype": "bot_rifleturret", @@ -244,6 +249,7 @@ "morale": 100, "armor_bash": 14, "armor_cut": 16, + "armor_bullet": 13, "vision_day": 50, "vision_night": 3, "revert_to_itype": "bot_crows_m240", @@ -304,6 +310,7 @@ "anger_triggers": [ "PLAYER_CLOSE", "HURT", "FRIEND_ATTACKED", "FRIEND_DIED" ], "armor_bash": 14, "armor_cut": 16, + "armor_bullet": 13, "vision_day": 50, "vision_night": 3, "revert_to_itype": "bot_turret_riot", diff --git a/data/json/monsters/utility_bot.json b/data/json/monsters/utility_bot.json index 3fe5540b6f8c0..aedfada0b44d8 100644 --- a/data/json/monsters/utility_bot.json +++ b/data/json/monsters/utility_bot.json @@ -19,6 +19,7 @@ "dodge": 3, "armor_bash": 8, "armor_cut": 10, + "armor_bullet": 8, "revert_to_itype": "bot_eyebot", "special_attacks": [ [ "PHOTOGRAPH", 30 ] ], "death_drops": { "groups": [ [ "robots", 4 ], [ "eyebot", 1 ] ] }, @@ -44,6 +45,7 @@ "dodge": 3, "armor_bash": 10, "armor_cut": 10, + "armor_bullet": 8, "revert_to_itype": "bot_grocerybot", "special_attacks": [ [ "PAID_BOT", 1 ] ], "death_drops": { "groups": [ [ "robots", 4 ] ] }, @@ -81,6 +83,7 @@ "dodge": 3, "armor_bash": 4, "armor_cut": 5, + "armor_bullet": 4, "revert_to_itype": "bot_grocerybot_busted", "special_attacks": [ [ "PAID_BOT", 1 ] ], "death_drops": { "groups": [ [ "robots", 4 ] ] }, @@ -106,6 +109,7 @@ "melee_cut": 0, "armor_bash": 10, "armor_cut": 12, + "armor_bullet": 10, "vision_day": 50, "revert_to_itype": "bot_hazmatbot", "death_function": [ "EXPLODE" ], @@ -133,6 +137,7 @@ "melee_dice_sides": 10, "melee_cut": 10, "armor_cut": 12, + "armor_bullet": 10, "revert_to_itype": "bot_molebot", "death_drops": { "groups": [ [ "robots", 4 ], [ "molebot", 1 ] ] }, "death_function": [ "BROKEN" ], @@ -158,6 +163,7 @@ "dodge": 3, "armor_bash": 8, "armor_cut": 10, + "armor_bullet": 8, "melee_skill": 4, "melee_dice": 3, "melee_dice_sides": 2, @@ -188,6 +194,7 @@ "dodge": 3, "armor_bash": 8, "armor_cut": 10, + "armor_bullet": 8, "melee_skill": 4, "melee_dice": 3, "melee_dice_sides": 2, diff --git a/data/json/monsters/zed-animal.json b/data/json/monsters/zed-animal.json index 382cbad8a3b78..9fcd53e63b61c 100644 --- a/data/json/monsters/zed-animal.json +++ b/data/json/monsters/zed-animal.json @@ -23,6 +23,7 @@ "dodge": 5, "armor_bash": 6, "armor_cut": 2, + "armor_bullet": 2, "luminance": 0, "harvest": "zombie_leather", "death_function": [ "NORMAL" ], @@ -82,6 +83,7 @@ "melee_cut": 6, "dodge": 3, "armor_cut": 15, + "armor_bullet": 12, "armor_stab": 30, "armor_acid": 3, "vision_night": 3, @@ -115,6 +117,7 @@ "dodge": 1, "armor_bash": 6, "armor_cut": 6, + "armor_bullet": 5, "vision_day": 50, "vision_night": 4, "harvest": "zombie", @@ -209,6 +212,7 @@ "dodge": 2, "armor_bash": 2, "armor_cut": 2, + "armor_bullet": 2, "vision_day": 30, "vision_night": 5, "harvest": "zombie_fur", @@ -318,6 +322,7 @@ "melee_cut": 0, "armor_bash": 6, "armor_cut": 4, + "armor_bullet": 3, "vision_day": 30, "vision_night": 5, "harvest": "zombie_leather", diff --git a/data/json/monsters/zed-classic.json b/data/json/monsters/zed-classic.json index 005c81a53c859..8929931397370 100644 --- a/data/json/monsters/zed-classic.json +++ b/data/json/monsters/zed-classic.json @@ -22,6 +22,7 @@ "melee_cut": 2, "armor_bash": 6, "armor_cut": 8, + "armor_bullet": 6, "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 5 } ], "death_drops": { @@ -114,6 +115,7 @@ "melee_cut": 0, "armor_bash": 6, "armor_cut": 6, + "armor_bullet": 6, "armor_stab": 6, "vision_day": 30, "vision_night": 3, @@ -204,6 +206,7 @@ "melee_cut": 0, "armor_bash": 12, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 50, "vision_night": 3, "harvest": "zombie_leather", @@ -237,6 +240,7 @@ "melee_cut": 0, "armor_bash": 5, "armor_cut": 3, + "armor_bullet": 2, "vision_night": 3, "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 5, "min_mul": 0.75, "//": "Fat zombies have stronger jaws" }, [ "scratch", 20 ] ], @@ -284,6 +288,7 @@ "melee_cut": 0, "armor_bash": 6, "armor_cut": 6, + "armor_bullet": 5, "armor_acid": 3, "armor_fire": 10, "vision_night": 3, @@ -332,6 +337,7 @@ "melee_cut": 0, "armor_bash": 5, "armor_cut": 4, + "armor_bullet": 3, "vision_night": 3, "harvest": "zombie", "special_attacks": [ [ "GRAB", 7 ] ], @@ -473,6 +479,7 @@ "dodge": 1, "armor_bash": 2, "armor_cut": 1, + "armor_bullet": 1, "vision_night": 3, "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 5, "min_mul": 0.7 }, [ "GRAB", 7 ], [ "scratch", 20 ] ], diff --git a/data/json/monsters/zed_acid.json b/data/json/monsters/zed_acid.json index ca7c3f0e95edc..2d455b3c4d529 100644 --- a/data/json/monsters/zed_acid.json +++ b/data/json/monsters/zed_acid.json @@ -70,6 +70,7 @@ "melee_cut": 0, "armor_bash": 10, "armor_cut": 2, + "armor_bullet": 2, "armor_stab": 12, "vision_night": 3, "luminance": 0, diff --git a/data/json/monsters/zed_burned.json b/data/json/monsters/zed_burned.json index 683ddaea263b0..4fc32bd66fa36 100644 --- a/data/json/monsters/zed_burned.json +++ b/data/json/monsters/zed_burned.json @@ -23,6 +23,7 @@ "melee_cut": 5, "armor_bash": 4, "armor_cut": 5, + "armor_bullet": 4, "armor_acid": 3, "armor_fire": 15, "vision_day": 10, @@ -69,6 +70,7 @@ "melee_cut": 14, "armor_bash": 6, "armor_cut": 12, + "armor_bullet": 10, "armor_acid": 5, "armor_fire": 15, "vision_day": 10, @@ -102,6 +104,7 @@ "melee_cut": 0, "armor_bash": 2, "armor_cut": 9, + "armor_bullet": 7, "armor_acid": 3, "armor_fire": 15, "vision_day": 10, diff --git a/data/json/monsters/zed_children.json b/data/json/monsters/zed_children.json index 3b418b4f68ba0..417479d652eca 100644 --- a/data/json/monsters/zed_children.json +++ b/data/json/monsters/zed_children.json @@ -274,6 +274,7 @@ "melee_cut": 1, "dodge": 2, "armor_cut": 5, + "armor_bullet": 4, "vision_day": 30, "vision_night": 5, "harvest": "zombie", diff --git a/data/json/monsters/zed_electric.json b/data/json/monsters/zed_electric.json index 37e9d0345de51..1f42bda245774 100644 --- a/data/json/monsters/zed_electric.json +++ b/data/json/monsters/zed_electric.json @@ -24,6 +24,7 @@ "melee_cut": 2, "armor_bash": 3, "armor_cut": 8, + "armor_bullet": 6, "vision_night": 3, "luminance": 16, "harvest": "CBM_SUBS", diff --git a/data/json/monsters/zed_explosive.json b/data/json/monsters/zed_explosive.json index a9b568948d5a4..4d0373d08a17a 100644 --- a/data/json/monsters/zed_explosive.json +++ b/data/json/monsters/zed_explosive.json @@ -68,6 +68,7 @@ "melee_cut": 0, "armor_bash": 5, "armor_cut": 5, + "armor_bullet": 4, "vision_night": 3, "harvest": "zombie", "special_attacks": [ [ "BOOMER_GLOW", 20 ], [ "scratch", 20 ] ], @@ -188,6 +189,7 @@ "melee_cut": 0, "armor_bash": 6, "armor_cut": 6, + "armor_bullet": 5, "vision_day": 35, "vision_night": 3, "harvest": "exempt", @@ -236,6 +238,7 @@ "dodge": 1, "armor_bash": 8, "armor_cut": 12, + "armor_bullet": 10, "vision_day": 35, "vision_night": 3, "harvest": "exempt", diff --git a/data/json/monsters/zed_fusion.json b/data/json/monsters/zed_fusion.json index 8a7696f8bcf14..57bcf155d19ae 100644 --- a/data/json/monsters/zed_fusion.json +++ b/data/json/monsters/zed_fusion.json @@ -50,6 +50,7 @@ "melee_cut": 0, "armor_bash": 5, "armor_cut": 5, + "armor_bullet": 4, "vision_night": 3, "harvest": "zombie", "special_attacks": [ [ "GRAB", 7 ], [ "scratch", 20 ], [ "ZOMBIE_FUSE", 80 ] ], @@ -101,6 +102,7 @@ "vision_night": 60, "armor_bash": 10, "armor_cut": 20, + "armor_bullet": 16, "harvest": "exempt", "special_attacks": [ [ "FLESH_TENDRIL", 1 ] ], "death_function": [ "GAS" ], @@ -160,6 +162,7 @@ "melee_cut": 2, "armor_bash": 6, "armor_cut": 6, + "armor_bullet": 5, "vision_night": 50, "harvest": "exempt", "special_attacks": [ { "type": "leap", "cooldown": 5, "max_range": 5, "allow_no_target": true }, [ "scratch", 5 ] ], @@ -191,6 +194,7 @@ "vision_night": 30, "armor_bash": 6, "armor_cut": 6, + "armor_bullet": 5, "harvest": "exempt", "starting_ammo": { "barb_paralysis": 100 }, "special_attacks": [ @@ -227,6 +231,7 @@ "vision_night": 60, "armor_bash": 50, "armor_cut": 25, + "armor_bullet": 20, "harvest": "exempt", "death_function": [ "NORMAL" ], "flags": [ "SEES", "HEARS", "SMELLS", "IMMOBILE", "WARM", "POISON", "IMMOBILE", "NO_BREATHE", "FILTHY" ] diff --git a/data/json/monsters/zed_lab.json b/data/json/monsters/zed_lab.json index 057ff5e12ce5a..3f45fac41a42e 100644 --- a/data/json/monsters/zed_lab.json +++ b/data/json/monsters/zed_lab.json @@ -76,6 +76,7 @@ "melee_cut": 0, "armor_bash": 4, "armor_cut": 6, + "armor_bullet": 4, "armor_stab": 4, "vision_day": 30, "vision_night": 3, diff --git a/data/json/monsters/zed_misc.json b/data/json/monsters/zed_misc.json index 950d42530b591..2ecdf0cb54075 100644 --- a/data/json/monsters/zed_misc.json +++ b/data/json/monsters/zed_misc.json @@ -23,6 +23,7 @@ "dodge": 3, "armor_bash": 5, "armor_cut": 2, + "armor_bullet": 2, "vision_day": 15, "vision_night": 3, "harvest": "zombie", @@ -130,6 +131,7 @@ "melee_cut": 2, "armor_bash": 4, "armor_cut": 6, + "armor_bullet": 5, "vision_night": 4, "harvest": "zombie", "special_attacks": [ [ "SMASH", 30 ], [ "GRAB", 7 ] ], @@ -178,6 +180,7 @@ "dodge": 3, "armor_bash": 10, "armor_cut": 14, + "armor_bullet": 8, "armor_stab": 8, "vision_night": 3, "harvest": "zombie", @@ -226,6 +229,7 @@ "dodge": 4, "armor_bash": 8, "armor_cut": 5, + "armor_bullet": 4, "vision_day": 5, "vision_night": 40, "harvest": "zombie", @@ -414,6 +418,7 @@ "dodge": 4, "armor_bash": 8, "armor_cut": 4, + "armor_bullet": 10, "armor_stab": 10, "vision_day": 30, "vision_night": 3, @@ -446,6 +451,7 @@ "melee_cut": 0, "armor_bash": 8, "armor_cut": 12, + "armor_bullet": 10, "vision_day": 50, "vision_night": 4, "harvest": "zombie", @@ -532,6 +538,7 @@ "dodge": 6, "armor_bash": 2, "armor_cut": 2, + "armor_bullet": 2, "vision_day": 50, "vision_night": 3, "harvest": "zombie", @@ -564,6 +571,7 @@ "dodge": 2, "armor_bash": 8, "armor_cut": 10, + "armor_bullet": 8, "vision_day": 25, "vision_night": 5, "harvest": "zombie", @@ -626,6 +634,7 @@ "dodge": 4, "armor_bash": 2, "armor_cut": 2, + "armor_bullet": 2, "vision_day": 50, "vision_night": 5, "harvest": "zombie", @@ -759,6 +768,7 @@ "dodge": 5, "armor_bash": 5, "armor_cut": 5, + "armor_bullet": 4, "vision_day": 45, "vision_night": 15, "harvest": "zombie", @@ -967,6 +977,7 @@ "dodge": 1, "armor_bash": 5, "armor_cut": 3, + "armor_bullet": 2, "vision_day": 25, "vision_night": 5, "harvest": "zombie", @@ -1106,6 +1117,7 @@ "dodge": 1, "armor_bash": 2, "armor_cut": 2, + "armor_bullet": 2, "vision_day": 15, "vision_night": 2, "harvest": "CBM_TECH", @@ -1137,6 +1149,7 @@ "melee_cut": 4, "armor_bash": 2, "armor_cut": 4, + "armor_bullet": 3, "vision_night": 5, "harvest": "zombie_thorny", "attack_effs": [ { "id": "paralyzepoison", "duration": 33 } ], diff --git a/data/json/monsters/zed_radiation.json b/data/json/monsters/zed_radiation.json index f3786f691c14c..1941df0cf89bf 100644 --- a/data/json/monsters/zed_radiation.json +++ b/data/json/monsters/zed_radiation.json @@ -23,6 +23,7 @@ "dodge": 2, "armor_bash": 6, "armor_cut": 6, + "armor_bullet": 5, "vision_day": 50, "vision_night": 3, "harvest": "zombie", @@ -55,6 +56,7 @@ "dodge": 1, "armor_bash": 4, "armor_cut": 4, + "armor_bullet": 3, "vision_day": 50, "vision_night": 3, "harvest": "zombie", @@ -87,6 +89,7 @@ "dodge": 1, "armor_bash": 5, "armor_cut": 5, + "armor_bullet": 4, "vision_day": 50, "vision_night": 3, "luminance": 8, @@ -120,6 +123,7 @@ "dodge": 1, "armor_bash": 6, "armor_cut": 6, + "armor_bullet": 5, "vision_day": 50, "vision_night": 3, "luminance": 16, @@ -153,6 +157,7 @@ "dodge": 2, "armor_bash": 8, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 50, "vision_night": 3, "luminance": 32, diff --git a/data/json/monsters/zed_skeletal.json b/data/json/monsters/zed_skeletal.json index 6b10ee889c31b..1697ea2ef040f 100644 --- a/data/json/monsters/zed_skeletal.json +++ b/data/json/monsters/zed_skeletal.json @@ -22,6 +22,7 @@ "melee_cut": 4, "dodge": 2, "armor_cut": 15, + "armor_bullet": 30, "armor_stab": 30, "armor_acid": 3, "vision_day": 30, @@ -57,6 +58,7 @@ "melee_cut": 10, "dodge": 1, "armor_cut": 30, + "armor_bullet": 24, "armor_bash": 12, "armor_acid": 1, "vision_day": 35, @@ -96,6 +98,7 @@ "dodge": 2, "luminance": 8, "armor_cut": 15, + "armor_bullet": 30, "armor_stab": 30, "armor_acid": 3, "vision_day": 30, @@ -130,6 +133,7 @@ "melee_cut": 15, "armor_bash": 20, "armor_cut": 45, + "armor_bullet": 36, "vision_day": 50, "vision_night": 4, "harvest": "mr_bones", diff --git a/data/json/monsters/zed_soldiers.json b/data/json/monsters/zed_soldiers.json index a7a456f7404a3..7fb87a0d44c9a 100644 --- a/data/json/monsters/zed_soldiers.json +++ b/data/json/monsters/zed_soldiers.json @@ -24,6 +24,7 @@ "dodge": 1, "armor_bash": 12, "armor_cut": 25, + "armor_bullet": 20, "vision_day": 30, "vision_night": 3, "harvest": "zombie", @@ -72,6 +73,7 @@ "dodge": 3, "armor_bash": 12, "armor_cut": 25, + "armor_bullet": 20, "vision_day": 30, "vision_night": 35, "harvest": "zombie", @@ -208,6 +210,7 @@ "dodge": 1, "armor_bash": 20, "armor_cut": 30, + "armor_bullet": 24, "vision_day": 30, "vision_night": 5, "harvest": "zombie_kevlar", @@ -259,6 +262,7 @@ "dodge": 1, "armor_bash": 30, "armor_cut": 50, + "armor_bullet": 40, "vision_day": 35, "vision_night": 10, "harvest": "zombie_kevlar", @@ -310,6 +314,7 @@ "dodge": 1, "armor_bash": 5, "armor_cut": 5, + "armor_bullet": 4, "vision_day": 35, "vision_night": 5, "harvest": "zombie", @@ -357,6 +362,7 @@ "dodge": 1, "armor_bash": 12, "armor_cut": 25, + "armor_bullet": 20, "vision_day": 30, "vision_night": 3, "luminance": 8, @@ -406,6 +412,7 @@ "melee_cut": 0, "armor_bash": 64, "armor_cut": 64, + "armor_bullet": 51, "armor_acid": 20, "armor_fire": 20, "vision_day": 30, @@ -442,6 +449,7 @@ "dodge": 3, "armor_bash": 10, "armor_cut": 18, + "armor_bullet": 14, "vision_day": 50, "vision_night": 3, "luminance": 4, diff --git a/data/json/monsters/zed_survivor.json b/data/json/monsters/zed_survivor.json index 8def61ad453d6..f07140b5ddddc 100644 --- a/data/json/monsters/zed_survivor.json +++ b/data/json/monsters/zed_survivor.json @@ -23,6 +23,7 @@ "dodge": 3, "armor_bash": 7, "armor_cut": 7, + "armor_bullet": 6, "armor_acid": 4, "vision_day": 50, "vision_night": 3, @@ -49,6 +50,7 @@ "color": "light_red_green", "armor_bash": 15, "armor_cut": 25, + "armor_bullet": 20, "death_drops": "mon_zombie_survivor_elite_death_drops" } ] From 53a27beb63d62e61bcb72f22b29df583224ad494 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Fri, 20 Mar 2020 14:55:02 -0700 Subject: [PATCH 16/48] Add documentation --- data/json/flags.json | 5 +++++ doc/JSON_FLAGS.md | 1 + doc/JSON_INFO.md | 6 +++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/data/json/flags.json b/data/json/flags.json index 0801f22b43b95..d7e898a979f63 100644 --- a/data/json/flags.json +++ b/data/json/flags.json @@ -713,6 +713,11 @@ "context": [ ], "type": "json_flag" }, + { + "id": "EFFECT_BULLET_IMMUNE", + "context": [ ], + "type": "json_flag" + }, { "id": "EFFECT_ACID_IMMUNE", "context": [ ], diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index 6c0ed019c42d8..4635e64d87fd3 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -238,6 +238,7 @@ Some armor flags, such as `WATCH` and `ALARMCLOCK` are compatible with other ite - ```BELTED``` Layer for backpacks and things worn over outerwear. - ```BLIND``` Blinds the wearer while worn, and provides nominal protection v. flashbang flashes. - ```BLOCK_WHILE_WORN``` Allows worn armor or shields to be used for blocking attacks. +- ```BULLET_IMMNUE``` Wearing an item with this flag makes you immune to bullet damage - ```CLIMATE_CONTROL``` This piece of clothing has climate control of some sort, keeping you warmer or cooler depending on ambient and bodily temperature. - ```COLLAR``` This piece of clothing has a wide collar that can keep your mouth warm. - ```DEAF``` Makes the player deaf. diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index fa739aefc8e72..977d2a1bbe323 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -482,6 +482,7 @@ This section describes each json file and their contents. Each json has their ow | env_protec | (_optional_) How much environmental protection does this bionic provide on the specified body parts. | bash_protec | (_optional_) How much bash protection does this bionic provide on the specified body parts. | cut_protec | (_optional_) How much cut protection does this bionic provide on the specified body parts. +| bullet_protect | (_optional_) How much bullet protect does this bionic provide on the specified body parts. | occupied_bodyparts | (_optional_) A list of body parts occupied by this bionic, and the number of bionic slots it take on those parts. | capacity | (_optional_) Amount of power storage added by this bionic. Strings can be used "1 kJ"/"1000 J"/"1000000 mJ" (default: `0`) | fuel_options | (_optional_) A list of fuel that this bionic can use to produce bionic power. @@ -522,6 +523,7 @@ This section describes each json file and their contents. Each json has their ow "env_protec": [ [ "mouth", 7 ] ], "bash_protec": [ [ "leg_l", 3 ], [ "leg_r", 3 ] ], "cut_protec": [ [ "leg_l", 3 ], [ "leg_r", 3 ] ], + "bullet_protec": [ [ "leg_l", 3 ], [ "leg_r", 3 ] ], "flags": [ "BIONIC_NPC_USABLE" ] } ``` @@ -632,6 +634,7 @@ When you sort your inventory by category, these are the categories that are disp | `name` | In-game name displayed. | `bash_resist` | How well a material resists bashing damage. | `cut_resist` | How well a material resists cutting damage. +| `bullet_resist` | How well a material resists bullet damage. | `acid_resist` | Ability of a material to resist acid. | `elec_resist` | Ability of a material to resist electricity. | `fire_resist` | Ability of a material to resist fire. @@ -666,6 +669,7 @@ There are six -resist parameters: acid, bash, chip, cut, elec, and fire. These a "rotting": true, "bash_resist": 1, "cut_resist": 1, + "bullet_resist": 1, "acid_resist": 1, "fire_resist": 1, "elec_resist": 1, @@ -2919,7 +2923,7 @@ A flat multiplier on the harvest count of the plant. For numbers greater than on "restricted": true, // (optional) If true, clothing must list this mod's flag in "valid_mods" list to use it. Defaults to false. "mod_value": [ // List of mod effect. { - "type": "bash", // "bash", "cut", "fire", "acid", "warmth", "storage", and "encumbrance" is available. + "type": "bash", // "bash", "cut", "bullet", "fire", "acid", "warmth", "storage", and "encumbrance" is available. "value": 1, // value of effect. "round_up": false // (optional) round up value of effect. defaults to false. "proportion": [ // (optional) value of effect propotions to clothing's parameter. From f8e9091331dd45fa29e1656ade8845a1a3142439 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Fri, 20 Mar 2020 18:20:34 -0700 Subject: [PATCH 17/48] Update mods --- data/mods/Aftershock/items/ammo.json | 2 +- data/mods/Aftershock/items/bioparts.json | 3 +- data/mods/Aftershock/items/gun/laser.json | 6 +-- data/mods/Aftershock/items/materials.json | 2 + data/mods/Aftershock/items/weapons.json | 5 +- data/mods/Aftershock/mobs/PrepPhyle_mobs.json | 1 + data/mods/Aftershock/mobs/robots.json | 5 ++ data/mods/CRT_EXPANSION/items/crt_ammo.json | 8 ++-- data/mods/CRT_EXPANSION/items/crt_gun.json | 16 +++---- .../mods/CRT_EXPANSION/items/crt_gunmods.json | 2 +- .../CRT_EXPANSION/monsters/crt_monster.json | 2 + data/mods/CRT_EXPANSION/monsters/monster.json | 1 + data/mods/CrazyCataclysm/crazy_items.json | 3 +- data/mods/DinoMod/dinosaur.json | 12 +++++ data/mods/Generic_Guns/ammo/grenade.json | 6 +-- data/mods/Generic_Guns/ammo/pistol.json | 20 ++++++-- .../mods/Generic_Guns/ammo/pistol_magnum.json | 20 ++++++-- data/mods/Generic_Guns/ammo/pistol_tiny.json | 22 ++++++--- data/mods/Generic_Guns/ammo/rifle.json | 20 ++++++-- data/mods/Generic_Guns/ammo/rifle_huge.json | 20 ++++++-- data/mods/Generic_Guns/ammo/shot.json | 47 ++++++++++++------- .../Generic_Guns/firearms/pistol_magnum.json | 2 +- data/mods/Magiclysm/items/archery.json | 5 +- .../Magiclysm/items/enchanted_ranged.json | 2 +- .../Magiclysm/items/enchanted_unarmed.json | 2 +- data/mods/Magiclysm/items/ethereal_items.json | 2 +- data/mods/Magiclysm/items/fuel.json | 3 +- data/mods/Magiclysm/materials.json | 4 ++ data/mods/Magiclysm/monsters.json | 1 + .../mods/Magiclysm/monsters/demon_spider.json | 2 + data/mods/Magiclysm/monsters/dragon.json | 3 ++ data/mods/Magiclysm/monsters/golems.json | 4 ++ data/mods/Magiclysm/monsters/lizardfolk.json | 1 + data/mods/Magiclysm/monsters/monsters.json | 3 ++ .../My_Sweet_Cataclysm/sweet_materials.json | 1 + .../My_Sweet_Cataclysm/sweet_monsters.json | 10 ++++ 36 files changed, 187 insertions(+), 81 deletions(-) diff --git a/data/mods/Aftershock/items/ammo.json b/data/mods/Aftershock/items/ammo.json index 05957fd52ba3e..4418e44ec8ab2 100644 --- a/data/mods/Aftershock/items/ammo.json +++ b/data/mods/Aftershock/items/ammo.json @@ -12,7 +12,7 @@ "volume": "250 ml", "weight": "1 g", "ammo_type": "acidic_bore", - "damage": 5, + "damage": { "damage_type": "stab", "amount": 5 }, "dispersion": 100, "count": 80, "stack_size": 80, diff --git a/data/mods/Aftershock/items/bioparts.json b/data/mods/Aftershock/items/bioparts.json index 32ccccd555f37..01f84d6acbfec 100644 --- a/data/mods/Aftershock/items/bioparts.json +++ b/data/mods/Aftershock/items/bioparts.json @@ -97,8 +97,7 @@ "color": "magenta", "skill": "launcher", "range": 30, - "ranged_damage": 19, - "pierce": 12, + "ranged_damage": { "damage_type": "stab", "amount": 19, "armor_penetration": 12 }, "dispersion": 90, "durability": 7, "loudness": 4, diff --git a/data/mods/Aftershock/items/gun/laser.json b/data/mods/Aftershock/items/gun/laser.json index 950770c71333f..c44c67eb0bfc2 100644 --- a/data/mods/Aftershock/items/gun/laser.json +++ b/data/mods/Aftershock/items/gun/laser.json @@ -11,8 +11,7 @@ "material": [ "superalloy", "plastic" ], "color": "cyan", "range": 10, - "ranged_damage": 5, - "pierce": 15, + "ranged_damage": { "damage_type": "stab", "amount": 5, "armor_penetration": 15 }, "dispersion": 500, "ups_charges": 25, "ammo_effects": [ "LASER", "BEANBAG" ], @@ -26,8 +25,7 @@ "description": "A powerful tri-barreled laser weapon, still mounted to the robotic hand of the wraitheon drone it originally belonged too. Can still be fired when connected to an UPS.", "color": "red", "range": 10, - "ranged_damage": 25, - "pierce": 15, + "ranged_damage": { "damage_type": "stab", "amount": 25, "armor_penetration": 15 }, "ups_charges": 50, "modes": [ [ "MULTI", "trilaser", 3 ] ], "ammo_effects": [ "LASER" ], diff --git a/data/mods/Aftershock/items/materials.json b/data/mods/Aftershock/items/materials.json index bc83b65808ea0..acb94c9bbd9f0 100644 --- a/data/mods/Aftershock/items/materials.json +++ b/data/mods/Aftershock/items/materials.json @@ -6,6 +6,7 @@ "density": 10, "bash_resist": 4, "cut_resist": 9, + "bullet_resist": 7, "acid_resist": 14, "fire_resist": 4, "elec_resist": 8, @@ -25,6 +26,7 @@ "latent_heat": 273, "bash_resist": 3, "cut_resist": 3, + "bullet_resist": 2, "acid_resist": 5, "fire_resist": 5, "elec_resist": 0, diff --git a/data/mods/Aftershock/items/weapons.json b/data/mods/Aftershock/items/weapons.json index b3b8dbe7c6b3f..b6fb0f402928a 100644 --- a/data/mods/Aftershock/items/weapons.json +++ b/data/mods/Aftershock/items/weapons.json @@ -87,12 +87,11 @@ "armor_data": { "covers": [ "TORSO" ], "coverage": 5, "material_thickness": 1, "encumbrance": 7 }, "reload_noise_volume": 0, "loudness": 0, - "ranged_damage": 30, + "ranged_damage": { "damage_type": "stab", "amount": 30, "armor_penetration": 15 }, "range": 30, "dispersion": 80, "durability": 6, "reload": 50, - "pierce": 15, "ups_charges": 20, "valid_mod_locations": [ [ "underbarrel", 1 ], [ "sights", 1 ], [ "accessories", 2 ], [ "stabilizer", 1 ] ] }, @@ -176,7 +175,7 @@ "ammo": "battery", "skill": "rifle", "range": 10, - "ranged_damage": 20, + "ranged_damage": { "damage_type": "stab", "amount": 20 }, "dispersion": 150, "durability": 10, "loudness": 8, diff --git a/data/mods/Aftershock/mobs/PrepPhyle_mobs.json b/data/mods/Aftershock/mobs/PrepPhyle_mobs.json index cf04f8589113e..4fbe2be621f28 100644 --- a/data/mods/Aftershock/mobs/PrepPhyle_mobs.json +++ b/data/mods/Aftershock/mobs/PrepPhyle_mobs.json @@ -19,6 +19,7 @@ "dodge": 3, "armor_bash": 8, "armor_cut": 14, + "armor_bullet": 11, "looks_like": "mon_dog_gpyrenees", "vision_day": 30, "vision_night": 8, diff --git a/data/mods/Aftershock/mobs/robots.json b/data/mods/Aftershock/mobs/robots.json index 216ad92f5e25c..fcf84606c794f 100644 --- a/data/mods/Aftershock/mobs/robots.json +++ b/data/mods/Aftershock/mobs/robots.json @@ -57,6 +57,7 @@ "melee_cut": 0, "armor_bash": 18, "armor_cut": 14, + "armor_bullet": 11, "vision_day": 50, "vision_night": 35, "revert_to_itype": "bot_chickenbot", @@ -89,6 +90,7 @@ "melee_cut": 0, "armor_bash": 90, "armor_cut": 90, + "armor_bullet": 72, "vision_day": 50, "revert_to_itype": "bot_tankbot", "starting_ammo": { "40x46mm_m433": 200, "556": 3000 }, @@ -131,6 +133,7 @@ "melee_cut": 6, "armor_bash": 12, "armor_cut": 8, + "armor_bullet": 6, "path_settings": { "max_dist": 5 }, "revert_to_itype": "bot_tripod", "starting_ammo": { "napalm": 10000 }, @@ -181,6 +184,7 @@ "dodge": 8, "armor_bash": 10, "armor_cut": 20, + "armor_bullet": 16, "vision_day": 6, "vision_night": 6, "path_settings": { "max_dist": 6 }, @@ -228,6 +232,7 @@ "melee_cut": 12, "armor_bash": 2, "armor_cut": 8, + "armor_bullet": 6, "revert_to_itype": "bot_bloodhound_drone", "death_drops": { "groups": [ [ "robots", 4 ], [ "manhack", 1 ], [ "turret_searchlight", 1 ] ] }, "death_function": [ "BROKEN" ], diff --git a/data/mods/CRT_EXPANSION/items/crt_ammo.json b/data/mods/CRT_EXPANSION/items/crt_ammo.json index 98683ce367a7f..6cda7f55f7e5a 100644 --- a/data/mods/CRT_EXPANSION/items/crt_ammo.json +++ b/data/mods/CRT_EXPANSION/items/crt_ammo.json @@ -11,7 +11,7 @@ "volume": "200ml", "weight": "2 g", "ammo_type": "pellets", - "damage": 4, + "damage": { "damage_type": "stab", "amount": 4 }, "dispersion": 100, "count": 100, "stack_size": 200, @@ -28,7 +28,7 @@ "material": "steel", "symbol": "=", "color": "dark_gray", - "relative": { "price": 300, "damage": 6, "pierce": 1, "dispersion": -20 } + "relative": { "price": 300, "damage": { "damage_type": "stab", "amount": 6, "armor_penetration": 1 }, "dispersion": -20 } }, { "id": "hp_pellet", @@ -40,7 +40,7 @@ "material": "steel", "symbol": "=", "color": "dark_gray", - "relative": { "price": 200, "damage": 3, "pierce": 3 } + "relative": { "price": 200, "damage": { "damage_type": "stab", "amount": 3, "armor_penetration": 3 } } }, { "id": "alloy_pellet", @@ -51,7 +51,7 @@ "material": "steel", "symbol": "=", "color": "dark_gray", - "relative": { "price": 500, "pierce": 2, "loudness": 25, "dispersion": 20 } + "relative": { "price": 500, "damage": { "damage_type": "stab", "armor_penetration": 2 }, "loudness": 25, "dispersion": 20 } }, { "type": "AMMO", diff --git a/data/mods/CRT_EXPANSION/items/crt_gun.json b/data/mods/CRT_EXPANSION/items/crt_gun.json index 2ec1f43db2220..65f351baf1a8a 100644 --- a/data/mods/CRT_EXPANSION/items/crt_gun.json +++ b/data/mods/CRT_EXPANSION/items/crt_gun.json @@ -14,8 +14,7 @@ "color": "red", "skill": "pistol", "range": 20, - "ranged_damage": 6, - "pierce": 10, + "ranged_damage": { "damage_type": "stab", "amount": 6, "armor_penetration": 10 }, "dispersion": 150, "durability": 9, "loudness": 14, @@ -50,8 +49,7 @@ "color": "cyan", "skill": "launcher", "range": 30, - "ranged_damage": 9, - "pierce": 8, + "ranged_damage": { "damage_type": "stab", "amount": 9, "armor_penetration": 8 }, "dispersion": 45, "durability": 9, "loudness": 28, @@ -77,8 +75,7 @@ "color": "blue", "skill": "smg", "range": 25, - "ranged_damage": 13, - "pierce": 9, + "ranged_damage": { "damage_type": "stab", "amount": 13, "armor_penetration": 9 }, "dispersion": 15, "durability": 8, "modes": [ [ "DEFAULT", "semi-auto", 1 ] ], @@ -149,7 +146,7 @@ "color": "yellow", "skill": "smg", "range": 2, - "ranged_damage": -2, + "ranged_damage": { "damage_type": "bullet", "amount": -2 }, "dispersion": 150, "durability": 10, "loudness": 30, @@ -214,7 +211,7 @@ "bashing": 10, "to_hit": -1, "range": 17, - "ranged_damage": 5, + "ranged_damage": { "damage_type": "stab", "amount": 5 }, "dispersion": 120, "durability": 8, "loudness": 18, @@ -350,8 +347,7 @@ "color": "yellow", "skill": "rifle", "range": 10, - "ranged_damage": 20, - "pierce": 3, + "ranged_damage": { "damage_type": "stab", "amount": 20, "armor_penetration": 3 }, "dispersion": 150, "durability": 10, "loudness": 10, diff --git a/data/mods/CRT_EXPANSION/items/crt_gunmods.json b/data/mods/CRT_EXPANSION/items/crt_gunmods.json index b6ce28ff018ab..3f938c4605831 100644 --- a/data/mods/CRT_EXPANSION/items/crt_gunmods.json +++ b/data/mods/CRT_EXPANSION/items/crt_gunmods.json @@ -60,7 +60,7 @@ "name": { "str": "diffracting lens", "str_pl": "diffracting lenses" }, "description": "A set of optics made to fit on laser weapons, which will diffract the laser beam into several lower powered beams. This slightly increases point-blank damage and makes it difficult to not hit, but reduces range", "range_modifier": -7, - "damage_modifier": 2, + "damage_modifier": { "damage_type": "stab", "amount": 2 }, "ammo_effects": [ "SHOT" ], "min_skills": [ [ "weapon", 1 ] ], "mod_targets": [ "rifle", "pistol", "smg", "shotgun" ] diff --git a/data/mods/CRT_EXPANSION/monsters/crt_monster.json b/data/mods/CRT_EXPANSION/monsters/crt_monster.json index 5632c88b31483..32bf1fb739c10 100644 --- a/data/mods/CRT_EXPANSION/monsters/crt_monster.json +++ b/data/mods/CRT_EXPANSION/monsters/crt_monster.json @@ -108,6 +108,7 @@ "dodge": 1, "armor_cut": 15, "armor_stab": 30, + "armor_bullet": 30, "armor_acid": 4, "vision_day": 25, "vision_night": 3, @@ -178,6 +179,7 @@ "dodge": 5, "armor_bash": 10, "armor_cut": 10, + "armor_bullet": 8, "vision_day": 30, "vision_night": 5, "harvest": "zombie", diff --git a/data/mods/CRT_EXPANSION/monsters/monster.json b/data/mods/CRT_EXPANSION/monsters/monster.json index 61e07bd845c9a..84da8e0aae1cc 100644 --- a/data/mods/CRT_EXPANSION/monsters/monster.json +++ b/data/mods/CRT_EXPANSION/monsters/monster.json @@ -23,6 +23,7 @@ "dodge": 3, "armor_bash": 10, "armor_cut": 16, + "armor_bullet": 13, "harvest": "zombie", "special_attacks": [ [ "TENTACLE", 2 ], [ "scratch", 10 ] ], "death_function": [ "NORMAL" ], diff --git a/data/mods/CrazyCataclysm/crazy_items.json b/data/mods/CrazyCataclysm/crazy_items.json index 4ec363efd73b4..827f501822e4a 100644 --- a/data/mods/CrazyCataclysm/crazy_items.json +++ b/data/mods/CrazyCataclysm/crazy_items.json @@ -69,8 +69,7 @@ "color": "cyan", "skill": "rifle", "range": 45, - "ranged_damage": 250, - "pierce": 20, + "ranged_damage": { "damage_type": "stab", "amount": 250, "armor_penetration": 20 }, "dispersion": 10, "recoil": 100, "durability": 10, diff --git a/data/mods/DinoMod/dinosaur.json b/data/mods/DinoMod/dinosaur.json index 79b7158a0d44e..7edf510c2e53f 100644 --- a/data/mods/DinoMod/dinosaur.json +++ b/data/mods/DinoMod/dinosaur.json @@ -76,6 +76,7 @@ "dodge": 3, "armor_bash": 1, "armor_cut": 1, + "armor_bullet": 1, "hp": 40, "death_function": [ "NORMAL" ], "description": "A feathered bipedal dinosaur, standing as tall as a human. It looks somewhat like a reptilian ostrich.", @@ -162,6 +163,7 @@ "dodge": 0, "armor_bash": 4, "armor_cut": 2, + "armor_bullet": 2, "hp": 400, "death_function": [ "NORMAL" ], "description": "A huge dinosaur about the size of a small house, with a ferocious crocodile-like head and a sail on its back.", @@ -208,6 +210,7 @@ "dodge": 0, "armor_bash": 4, "armor_cut": 2, + "armor_bullet": 2, "hp": 300, "death_function": [ "NORMAL" ], "description": "Look at those teeth! Tiny little claws though.", @@ -244,6 +247,7 @@ "dodge": 0, "armor_bash": 4, "armor_cut": 2, + "armor_bullet": 2, "hp": 150, "death_function": [ "NORMAL" ], "description": "A massive rhino-like dinosaur with a bony crest from which three large horns emerge.", @@ -288,6 +292,7 @@ "dodge": 1, "armor_bash": 3, "armor_cut": 1, + "armor_bullet": 1, "hp": 150, "death_function": [ "NORMAL" ], "description": "A large quadruped dinosaur with plates on its back, and a spiked tail.", @@ -321,6 +326,7 @@ "dodge": 1, "armor_bash": 6, "armor_cut": 4, + "armor_bullet": 3, "hp": 120, "death_function": [ "NORMAL" ], "description": "This dinosaur looks like a giant prehistoric armadillo. Its tail ends in a massive spiked club of bone.", @@ -354,6 +360,7 @@ "dodge": 1, "armor_bash": 3, "armor_cut": 1, + "armor_bullet": 1, "hp": 120, "death_function": [ "NORMAL" ], "description": "A large predatory bipedal dinosaur, with tiger-like stripes on its broad back.", @@ -420,6 +427,7 @@ "dodge": 3, "armor_bash": 1, "armor_cut": 1, + "armor_bullet": 1, "hp": 30, "death_function": [ "NORMAL" ], "special_attacks": [ { "type": "leap", "cooldown": 5, "max_range": 5, "allow_no_target": true } ], @@ -455,6 +463,7 @@ "dodge": 2, "armor_bash": 1, "armor_cut": 1, + "armor_bullet": 1, "hp": 60, "death_function": [ "NORMAL" ], "special_attacks": [ { "type": "leap", "cooldown": 5, "max_range": 5, "allow_no_target": true } ], @@ -490,6 +499,7 @@ "dodge": 1, "armor_bash": 2, "armor_cut": 1, + "armor_bullet": 1, "hp": 100, "death_function": [ "NORMAL" ], "special_attacks": [ { "type": "leap", "cooldown": 5, "max_range": 5, "allow_no_target": true } ], @@ -525,6 +535,7 @@ "dodge": 0, "armor_bash": 4, "armor_cut": 4, + "armor_bullet": 3, "hp": 300, "death_function": [ "NORMAL" ], "description": "A huge mottled dinosaur with a blunt head crest. It contentedly strips leaves from a nearby shrub.", @@ -593,6 +604,7 @@ "dodge": 1, "armor_bash": 3, "armor_cut": 1, + "armor_bullet": 1, "hp": 120, "death_function": [ "NORMAL" ], "special_attacks": [ [ "BOOMER", 20 ] ], diff --git a/data/mods/Generic_Guns/ammo/grenade.json b/data/mods/Generic_Guns/ammo/grenade.json index e72361994c769..91c4b493a548d 100644 --- a/data/mods/Generic_Guns/ammo/grenade.json +++ b/data/mods/Generic_Guns/ammo/grenade.json @@ -21,7 +21,7 @@ "type": "AMMO", "name": { "str": "beanbag grenade cartridge" }, "description": "A less-lethal beanbag grenade cartridge that delivers strong impact on target, causing major pain and disorientation. May still injure or kill.", - "damage": 20, + "damage": { "damage_type": "bullet", "amount": 20 }, "extend": { "effects": [ "LARGE_BEANBAG" ] } }, { @@ -40,7 +40,7 @@ "name": { "str": "buckshot grenade cartridge" }, "description": "A grenade cartridge with a powerful buckshot load, designed to provide some defensive options when carrying a grenade launcher.", "range": 12, - "damage": 85, + "damage": { "damage_type": "bullet", "amount": 85 }, "recoil": 525, "extend": { "effects": [ "SHOT" ] } }, @@ -68,7 +68,7 @@ "type": "AMMO", "name": "slug grenade cartridge", "description": "A grenade cartridge loaded with a massive bullet. Say goodbye to your shoulder, I guess.", - "damage": 130, + "damage": { "damage_type": "bullet", "amount": 130 }, "recoil": 875, "extend": { "effects": [ "LARGE_BEANBAG" ] } } diff --git a/data/mods/Generic_Guns/ammo/pistol.json b/data/mods/Generic_Guns/ammo/pistol.json index f1da7f563e444..a53027829f055 100644 --- a/data/mods/Generic_Guns/ammo/pistol.json +++ b/data/mods/Generic_Guns/ammo/pistol.json @@ -14,14 +14,14 @@ "copy-from": "pistol_ball", "name": { "str_sp": "pistol ammo, JHP" }, "description": "Modern ubiquitous medium pistol ammo, popularized by usage in two wars and almost a century of post-war defensive and duty usage. Jacketed Hollow Points are defensive/duty projectiles that are more destructive to tissue than plain ball ammunition, and slightly reduce overpenetration concerns.", - "relative": { "damage": 3, "pierce": -6 } + "relative": { "damage": { "damage_type": "bullet", "amount": 3, "armor_penetration": -6 } } }, { "id": "reloaded_pistol_ball", "type": "AMMO", "copy-from": "pistol_ball", "name": { "str_sp": "pistol ammo, ball (reloaded)" }, - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] } }, { @@ -29,7 +29,7 @@ "type": "AMMO", "copy-from": "pistol_jhp", "name": { "str_sp": "pistol ammo, JHP (reloaded)" }, - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] } }, { @@ -37,7 +37,12 @@ "copy-from": "pistol_ball", "type": "AMMO", "name": { "str_sp": "pistol ammo, ball (black powder)" }, - "proportional": { "price": 0.3, "damage": 0.76, "recoil": 0.76, "pierce": 0.5, "dispersion": 1.2 }, + "proportional": { + "price": 0.3, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, + "recoil": 0.76, + "dispersion": 1.2 + }, "extend": { "effects": [ "RECYCLED", "BLACKPOWDER", "MUZZLE_SMOKE" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -46,7 +51,12 @@ "copy-from": "pistol_jhp", "type": "AMMO", "name": { "str_sp": "pistol ammo, JHP (black powder)" }, - "proportional": { "price": 0.3, "damage": 0.76, "recoil": 0.76, "pierce": 0.5, "dispersion": 1.2 }, + "proportional": { + "price": 0.3, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, + "recoil": 0.76, + "dispersion": 1.2 + }, "extend": { "effects": [ "RECYCLED", "BLACKPOWDER", "MUZZLE_SMOKE" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } } diff --git a/data/mods/Generic_Guns/ammo/pistol_magnum.json b/data/mods/Generic_Guns/ammo/pistol_magnum.json index e2ec458e4b3b4..e46ae9f15143c 100644 --- a/data/mods/Generic_Guns/ammo/pistol_magnum.json +++ b/data/mods/Generic_Guns/ammo/pistol_magnum.json @@ -14,14 +14,14 @@ "copy-from": "pistol_magnum_ball", "name": { "str_sp": "magnum ammo, JHP" }, "description": "Magnum ammunition, developed from early handgun hunting efforts and popularized by law enforcement usage. It is more powerful than common pistol ammo. Jacketed Hollow Points are defensive/duty projectiles that are more destructive to tissue than plain ball ammunition, and slightly reduce overpenetration concerns.", - "relative": { "damage": 3, "pierce": -6 } + "relative": { "damage": { "damage_type": "bullet", "amount": 3, "armor_penetration": -6 } } }, { "id": "reloaded_pistol_magnum_ball", "type": "AMMO", "copy-from": "pistol_magnum_ball", "name": { "str_sp": "magnum ammo, ball (reloaded)" }, - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] } }, { @@ -29,7 +29,7 @@ "type": "AMMO", "copy-from": "pistol_magnum_jhp", "name": { "str_sp": "magnum ammo, JHP (reloaded)" }, - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] } }, { @@ -37,7 +37,12 @@ "copy-from": "pistol_magnum_ball", "type": "AMMO", "name": { "str_sp": "magnum ammo, ball (black powder)" }, - "proportional": { "price": 0.3, "damage": 0.76, "recoil": 0.76, "pierce": 0.5, "dispersion": 1.2 }, + "proportional": { + "price": 0.3, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, + "recoil": 0.76, + "dispersion": 1.2 + }, "extend": { "effects": [ "RECYCLED", "BLACKPOWDER", "MUZZLE_SMOKE" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -46,7 +51,12 @@ "copy-from": "pistol_magnum_jhp", "type": "AMMO", "name": { "str_sp": "magnum ammo, JHP (black powder)" }, - "proportional": { "price": 0.3, "damage": 0.76, "recoil": 0.76, "pierce": 0.5, "dispersion": 1.2 }, + "proportional": { + "price": 0.3, + "damage": { "damage_type": "bullet", "amount": 0.76, "armor_penetration": 0.5 }, + "recoil": 0.76, + "dispersion": 1.2 + }, "extend": { "effects": [ "RECYCLED", "BLACKPOWDER", "MUZZLE_SMOKE" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } } diff --git a/data/mods/Generic_Guns/ammo/pistol_tiny.json b/data/mods/Generic_Guns/ammo/pistol_tiny.json index ec0ac4433a4c1..1586bce7505b8 100644 --- a/data/mods/Generic_Guns/ammo/pistol_tiny.json +++ b/data/mods/Generic_Guns/ammo/pistol_tiny.json @@ -7,7 +7,7 @@ "ammo_type": "ammo_pistol_tiny", "casing": "pistol_tiny_casing", "description": "Miniscule pistol and rifle ammunition, for target practice or turn of the century sidearms. Sold in great quantities preceding the riots. 'Ball' is an old term for full metal jacketed bullets which offer reduced fouling, better reliability, and slightly improved penetration compared to plain lead.", - "relative": { "damage": -2, "pierce": 3 } + "relative": { "damage": { "damage_type": "bullet", "amount": -2, "armor_penetration": 3 } } }, { "id": "tiny_pistol_jhp", @@ -15,14 +15,14 @@ "copy-from": "tiny_pistol_ball", "name": { "str_sp": "tiny pistol ammo, JHP" }, "description": "Miniscule pistol and rifle ammunition, for target practice or turn of the century sidearms. Sold in great quantities preceding the riots. Jacketed Hollow Points are defensive/duty projectiles that are more destructive to tissue than plain ball ammunition, and slightly reduce overpenetration concerns.", - "relative": { "damage": 2, "pierce": -3 } + "relative": { "damage": { "damage_type": "bullet", "amount": 2, "armor_penetration": -3 } } }, { "id": "reloaded_tiny_pistol_ball", "type": "AMMO", "copy-from": "tiny_pistol_ball", "name": { "str_sp": "tiny pistol ammo, ball (reloaded)" }, - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] } }, { @@ -30,7 +30,7 @@ "type": "AMMO", "copy-from": "tiny_pistol_jhp", "name": { "str_sp": "tiny pistol ammo, JHP (reloaded)" }, - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] } }, { @@ -38,7 +38,12 @@ "type": "AMMO", "copy-from": "tiny_pistol_ball", "name": { "str_sp": "tiny pistol ammo, ball (black powder)" }, - "proportional": { "price": 0.3, "damage": 0.57, "recoil": 0.57, "pierce": 0.5, "dispersion": 1.2 }, + "proportional": { + "price": 0.3, + "damage": { "damage_type": "bullet", "amount": 0.57, "armor_penetration": 0.5 }, + "recoil": 0.57, + "dispersion": 1.2 + }, "extend": { "effects": [ "RECYCLED", "BLACKPOWDER", "MUZZLE_SMOKE" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -47,7 +52,12 @@ "type": "AMMO", "copy-from": "tiny_pistol_jhp", "name": { "str_sp": "tiny pistol ammo, JHP (black powder)" }, - "proportional": { "price": 0.3, "damage": 0.57, "recoil": 0.57, "pierce": 0.5, "dispersion": 1.2 }, + "proportional": { + "price": 0.3, + "damage": { "damage_type": "bullet", "amount": 0.57, "armor_penetration": 0.5 }, + "recoil": 0.57, + "dispersion": 1.2 + }, "extend": { "effects": [ "RECYCLED", "BLACKPOWDER", "MUZZLE_SMOKE" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } } diff --git a/data/mods/Generic_Guns/ammo/rifle.json b/data/mods/Generic_Guns/ammo/rifle.json index 77bb518280065..12ce4851a6e78 100644 --- a/data/mods/Generic_Guns/ammo/rifle.json +++ b/data/mods/Generic_Guns/ammo/rifle.json @@ -14,14 +14,14 @@ "copy-from": "rifle_ball", "name": { "str_sp": "rifle ammo, AP" }, "description": "Modern rifle ammunition, ubiquitous and affordable. It's suitable for international conflicts, hunting small to large game, home defense, and these days, zombies. This 'armor piercing' variant features a mild steel penetrator for environmental friendliness, improved barrier penetration, and enhanced effect on armor.", - "relative": { "damage": -2, "pierce": 4 } + "relative": { "damage": { "damage_type": "bullet", "amount": -2, "armor_penetration": 4 } } }, { "id": "reloaded_rifle_ball", "type": "AMMO", "copy-from": "rifle_ball", "name": { "str_sp": "rifle ammo, ball (reloaded)" }, - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] } }, { @@ -29,7 +29,7 @@ "type": "AMMO", "copy-from": "rifle_AP", "name": { "str_sp": "rifle ammo, AP (reloaded)" }, - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] } }, { @@ -37,7 +37,12 @@ "copy-from": "rifle_ball", "type": "AMMO", "name": { "str_sp": "rifle ammo, ball (black powder)" }, - "proportional": { "price": 0.3, "damage": 0.57, "recoil": 0.57, "pierce": 0.5, "dispersion": 1.2 }, + "proportional": { + "price": 0.3, + "damage": { "damage_type": "bullet", "amount": 0.57, "armor_penetration": 0.5 }, + "recoil": 0.57, + "dispersion": 1.2 + }, "extend": { "effects": [ "RECYCLED", "BLACKPOWDER", "MUZZLE_SMOKE" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -46,7 +51,12 @@ "copy-from": "rifle_AP", "type": "AMMO", "name": { "str_sp": "rifle ammo, AP (black powder)" }, - "proportional": { "price": 0.3, "damage": 0.57, "recoil": 0.57, "pierce": 0.5, "dispersion": 1.2 }, + "proportional": { + "price": 0.3, + "damage": { "damage_type": "bullet", "amount": 0.57, "armor_penetration": 0.5 }, + "recoil": 0.57, + "dispersion": 1.2 + }, "extend": { "effects": [ "RECYCLED", "BLACKPOWDER", "MUZZLE_SMOKE" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } } diff --git a/data/mods/Generic_Guns/ammo/rifle_huge.json b/data/mods/Generic_Guns/ammo/rifle_huge.json index 1c8d304068947..33d3061e93857 100644 --- a/data/mods/Generic_Guns/ammo/rifle_huge.json +++ b/data/mods/Generic_Guns/ammo/rifle_huge.json @@ -14,14 +14,14 @@ "copy-from": "rifle_huge_ball", "name": { "str_sp": "huge rifle ammo, AP" }, "description": "Huge rifle ammunition like this bridges the gap between light cannons and big game rifles. It's suitable for taking on light vehicles and other materiel, or hunting extremely large game. These armor piercing munitions feature tungsten steel penetrators for use against light-skinned vehicles.", - "relative": { "damage": -10, "pierce": 20 } + "relative": { "damage": { "damage_type": "bullet", "amount": -10, "armor_penetration": 20 } } }, { "id": "reloaded_rifle_huge_ball", "type": "AMMO", "copy-from": "rifle_huge_ball", "name": { "str_sp": "huge rifle ammo, ball (reloaded)" }, - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] } }, { @@ -29,7 +29,7 @@ "type": "AMMO", "copy-from": "rifle_huge_AP", "name": { "str_sp": "huge rifle ammo, AP (reloaded)" }, - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] } }, { @@ -37,7 +37,12 @@ "copy-from": "rifle_huge_ball", "type": "AMMO", "name": { "str_sp": "rifle ammo, ball (black powder)" }, - "proportional": { "price": 0.3, "damage": 0.57, "recoil": 0.57, "pierce": 0.5, "dispersion": 1.2 }, + "proportional": { + "price": 0.3, + "damage": { "damage_type": "bullet", "amount": 0.57, "armor_penetration": 0.5 }, + "recoil": 0.57, + "dispersion": 1.2 + }, "extend": { "effects": [ "RECYCLED", "BLACKPOWDER", "MUZZLE_SMOKE" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -46,7 +51,12 @@ "copy-from": "rifle_huge_AP", "type": "AMMO", "name": { "str_sp": "rifle ammo, AP (black powder)" }, - "proportional": { "price": 0.3, "damage": 0.57, "recoil": 0.57, "pierce": 0.5, "dispersion": 1.2 }, + "proportional": { + "price": 0.3, + "damage": { "damage_type": "bullet", "amount": 0.57, "armor_penetration": 0.5 }, + "recoil": 0.57, + "dispersion": 1.2 + }, "extend": { "effects": [ "RECYCLED", "BLACKPOWDER", "MUZZLE_SMOKE" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } } diff --git a/data/mods/Generic_Guns/ammo/shot.json b/data/mods/Generic_Guns/ammo/shot.json index 84023a751e4ef..eb107446ef5e1 100644 --- a/data/mods/Generic_Guns/ammo/shot.json +++ b/data/mods/Generic_Guns/ammo/shot.json @@ -12,7 +12,14 @@ "type": "AMMO", "name": { "str_sp": "shotshell, beanbag" }, "description": "A beanbag round for shotguns, not deadly but designed to disable.", - "proportional": { "price": 0.5, "price_postapoc": 0.5, "count": 0.5, "damage": 0.1, "recoil": 0.4, "loudness": 0.6 }, + "proportional": { + "price": 0.5, + "price_postapoc": 0.5, + "count": 0.5, + "damage": { "damage_type": "bullet", "amount": 0.1 }, + "recoil": 0.4, + "loudness": 0.6 + }, "extend": { "effects": [ "BEANBAG", "NOGIB" ] } }, { @@ -22,7 +29,7 @@ "name": { "str_sp": "shotshell, birdshot" }, "description": "A shotshell filled with numerous small pellets. Designed for hunting birds and other small game, its applications in combat are very limited.", "price_postapoc": 2400, - "proportional": { "price": 0.2, "damage": 0.3, "recoil": 0.6, "loudness": 0.8 }, + "proportional": { "price": 0.2, "damage": { "damage_type": "bullet", "amount": 0.3 }, "recoil": 0.6, "loudness": 0.8 }, "extend": { "effects": [ "NOGIB" ] } }, { @@ -32,7 +39,7 @@ "name": { "str_sp": "shotshell, slug" }, "description": "A shotshell with a single projectile, shaped somewhat like a shuttlecock. Slugs are used with shotguns to give them extra range, allowing them to stand in for a rifle. Extremely damaging but rather inaccurate.", "dispersion": 100, - "relative": { "range": 12, "pierce": 6 }, + "relative": { "range": 12, "damage": { "damage_type": "bullet", "armor_penetratoin": 6 } }, "proportional": { "price": 1.4, "price_postapoc": 1.4, "recoil": 1.4 }, "delete": { "effects": [ "SHOT" ] } }, @@ -42,7 +49,15 @@ "type": "AMMO", "name": { "str_sp": "shotshell, pyrotechnical" }, "description": "A novelty shotgun shell filled with a simple pyrotechnical charge. The payload is light and won't wound very well, but the flash and sparks will certainly be impressive, in addition to being an extreme fire hazard.", - "proportional": { "price": 2, "price_postapoc": 2, "damage": 0.2, "recoil": 0.6, "loudness": 0.8, "dispersion": 1.2, "range": 0.5 }, + "proportional": { + "price": 2, + "price_postapoc": 2, + "damage": { "damage_type": "bullet", "amount": 0.2 }, + "recoil": 0.6, + "loudness": 0.8, + "dispersion": 1.2, + "range": 0.5 + }, "extend": { "effects": [ "INCENDIARY", "STREAM", "NOGIB" ] } }, { @@ -51,7 +66,7 @@ "type": "AMMO", "name": { "str_sp": "shotshell, junk" }, "description": "A shotgun shell filled with whatever was lying around. They are more damaging than birdshot, but fairly inaccurate.", - "proportional": { "price": 0.4, "damage": 0.6, "dispersion": 1.2 }, + "proportional": { "price": 0.4, "damage": { "damage_type": "bullet", "amount": 0.6 }, "dispersion": 1.2 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -60,7 +75,7 @@ "copy-from": "shot_buck", "name": { "str_sp": "shotshell, buckshot (reloaded)" }, "type": "AMMO", - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -69,7 +84,7 @@ "copy-from": "shot_fowl", "name": { "str_sp": "shotshell, birdshot (reloaded)" }, "type": "AMMO", - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -78,7 +93,7 @@ "copy-from": "shot_foster", "name": { "str_sp": "shotshell, slug (reloaded)" }, "type": "AMMO", - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -87,7 +102,7 @@ "copy-from": "shot_pyro", "name": { "str_sp": "shotshell, pyrotechnical (reloaded)" }, "type": "AMMO", - "proportional": { "price": 0.7, "damage": 0.9, "dispersion": 1.1 }, + "proportional": { "price": 0.7, "damage": { "damage_type": "bullet", "amount": 0.9 }, "dispersion": 1.1 }, "extend": { "effects": [ "RECYCLED" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -99,7 +114,7 @@ "type": "AMMO", "description": "A shotgun shell filled with tiny steel darts, definitely not a factory loading. Flechettes won't pattern as well as normal shot, and they'll likely do less damage. However, they may fare better against armor than other shotgun loads.", "relative": { "pierce": 12 }, - "proportional": { "price": 2, "price_postapoc": 2, "count": 0.5, "damage": 0.8 }, + "proportional": { "price": 2, "price_postapoc": 2, "count": 0.5, "damage": { "damage_type": "bullet", "amount": 0.8 } }, "extend": { "effects": [ "RECYCLED" ] } }, { @@ -107,7 +122,7 @@ "copy-from": "shot_buck", "name": { "str_sp": "shotshell, buckshot (black powder)" }, "type": "AMMO", - "proportional": { "price": 0.6, "damage": 0.8, "dispersion": 1.2 }, + "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8 }, "dispersion": 1.2 }, "extend": { "effects": [ "RECYCLED", "MUZZLE_SMOKE", "BLACKPOWDER" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -116,7 +131,7 @@ "copy-from": "shot_fowl", "name": { "str_sp": "shotshell, birdshot (black powder)" }, "type": "AMMO", - "proportional": { "price": 0.6, "damage": 0.8, "dispersion": 1.2 }, + "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8 }, "dispersion": 1.2 }, "extend": { "effects": [ "RECYCLED", "MUZZLE_SMOKE", "BLACKPOWDER" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -125,7 +140,7 @@ "copy-from": "shot_foster", "name": { "str_sp": "shotshell, slug (black powder)" }, "type": "AMMO", - "proportional": { "price": 0.6, "damage": 0.8, "dispersion": 1.2 }, + "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8 }, "dispersion": 1.2 }, "extend": { "effects": [ "RECYCLED", "MUZZLE_SMOKE", "BLACKPOWDER" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -134,7 +149,7 @@ "copy-from": "shot_pyro", "name": { "str_sp": "shotshell, pyrotechnical (black powder)" }, "type": "AMMO", - "proportional": { "price": 0.6, "damage": 0.8, "dispersion": 1.2 }, + "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8 }, "dispersion": 1.2 }, "extend": { "effects": [ "RECYCLED", "MUZZLE_SMOKE", "BLACKPOWDER" ] }, "delete": { "effects": [ "NEVER_MISFIRES" ] } }, @@ -143,7 +158,7 @@ "copy-from": "reloaded_shot_dart", "name": { "str_sp": "shotshell, flechette (black powder)" }, "type": "AMMO", - "proportional": { "price": 0.86, "damage": 0.88, "dispersion": 1.09 }, + "proportional": { "price": 0.86, "damage": { "damage_type": "bullet", "amount": 0.88 }, "dispersion": 1.09 }, "extend": { "effects": [ "MUZZLE_SMOKE", "BLACKPOWDER" ] } }, { @@ -151,7 +166,7 @@ "copy-from": "reloaded_shot_junk", "type": "AMMO", "name": { "str_sp": "shotshell, junk (black powder)" }, - "proportional": { "price": 0.6, "damage": 0.8 }, + "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8 } }, "extend": { "effects": [ "MUZZLE_SMOKE" ] } } ] diff --git a/data/mods/Generic_Guns/firearms/pistol_magnum.json b/data/mods/Generic_Guns/firearms/pistol_magnum.json index 035f42c5b1a3c..36ef07c042240 100644 --- a/data/mods/Generic_Guns/firearms/pistol_magnum.json +++ b/data/mods/Generic_Guns/firearms/pistol_magnum.json @@ -54,7 +54,7 @@ "type": "GUN", "name": { "str": "pipe magnum" }, "ammo": [ "ammo_pistol_magnum", "ammo_pistol" ], - "ranged_damage": -2, + "ranged_damage": { "damage_type": "bullet", "amount": -2 }, "description": "A firearm made from a stout pipe, reinforced at the chamber. It holds a single a round of standard or magnum pistol ammunition, and has a crude assembly to fire it. There's no extractor, so it might be slow to reload, and its construction makes for poor reliability and longevity.", "dispersion": 440, "reload": 110 diff --git a/data/mods/Magiclysm/items/archery.json b/data/mods/Magiclysm/items/archery.json index 93d421aeef96c..cf8fbd19cbf8f 100644 --- a/data/mods/Magiclysm/items/archery.json +++ b/data/mods/Magiclysm/items/archery.json @@ -19,7 +19,7 @@ "armor_data": { "covers": [ "TORSO" ], "coverage": 5, "material_thickness": 1, "encumbrance": 14 }, "reload_noise_volume": 2, "loudness": 5, - "ranged_damage": 25, + "ranged_damage": { "damage_type": "stab", "amount": 25 }, "range": 20, "dispersion": 95, "durability": 6, @@ -40,8 +40,7 @@ "volume": "145 ml", "weight": "30 g", "bashing": 12, - "prop_damage": 1.95, - "pierce": 20, + "damage": { "damage_type": "stab", "constant_damage_multiplier": 1.95, "armor_penetration": 20 }, "dispersion": 35, "loudness": 0, "range": 7, diff --git a/data/mods/Magiclysm/items/enchanted_ranged.json b/data/mods/Magiclysm/items/enchanted_ranged.json index a2b0bf51b0c8e..acc086957cea2 100644 --- a/data/mods/Magiclysm/items/enchanted_ranged.json +++ b/data/mods/Magiclysm/items/enchanted_ranged.json @@ -74,7 +74,7 @@ "techniques": [ "WBLOCK_2" ], "qualities": [ [ "CUT", 1 ], [ "BUTCHER", 20 ] ], "skill": "shotgun", - "ranged_damage": 1, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 600, "durability": 6, "blackpowder_tolerance": 66, diff --git a/data/mods/Magiclysm/items/enchanted_unarmed.json b/data/mods/Magiclysm/items/enchanted_unarmed.json index 19bcce03d43bd..f7acb6f83caaa 100644 --- a/data/mods/Magiclysm/items/enchanted_unarmed.json +++ b/data/mods/Magiclysm/items/enchanted_unarmed.json @@ -80,7 +80,7 @@ "material": [ "steel" ], "techniques": [ "WBLOCK_1", "BRUTAL" ], "min_strength": 7, - "ranged_damage": 1, + "ranged_damage": { "damage_type": "bullet", "amount": 1 }, "dispersion": 855, "durability": 6, "blackpowder_tolerance": 66, diff --git a/data/mods/Magiclysm/items/ethereal_items.json b/data/mods/Magiclysm/items/ethereal_items.json index 2cc244d8ab685..554d9b6f4f5c5 100644 --- a/data/mods/Magiclysm/items/ethereal_items.json +++ b/data/mods/Magiclysm/items/ethereal_items.json @@ -302,7 +302,7 @@ "to_hit": 1, "reload_noise_volume": 3, "loudness": 6, - "ranged_damage": 29, + "ranged_damage": { "damage_type": "stab", "amount": 29 }, "range": 12, "dispersion": 950, "durability": 6, diff --git a/data/mods/Magiclysm/items/fuel.json b/data/mods/Magiclysm/items/fuel.json index c1d63ecec580e..0b50d00482486 100644 --- a/data/mods/Magiclysm/items/fuel.json +++ b/data/mods/Magiclysm/items/fuel.json @@ -14,9 +14,8 @@ "phase": "liquid", "category": "fuel", "ammo_type": "dragon_blood", - "damage": 5, + "damage": { "damage_type": "stab", "amount": 5, "armor_penetration": 5 }, "range": 4, - "pierce": 5, "effects": [ "FLAME", "STREAM", "INCENDIARY", "NEVER_MISFIRES" ], "fuel": { "energy": 50, diff --git a/data/mods/Magiclysm/materials.json b/data/mods/Magiclysm/materials.json index 542ce333f8402..c05a926842f5a 100644 --- a/data/mods/Magiclysm/materials.json +++ b/data/mods/Magiclysm/materials.json @@ -11,6 +11,7 @@ "reinforces": true, "bash_resist": 14, "cut_resist": 18, + "bullet_resist": 14, "acid_resist": 4, "fire_resist": 20, "elec_resist": 2, @@ -29,6 +30,7 @@ "latent_heat": 333, "bash_resist": 5, "cut_resist": 8, + "bullet_resist": 6, "acid_resist": 40, "fire_resist": 1, "elec_resist": 1, @@ -49,6 +51,7 @@ "latent_heat": 333, "bash_resist": 1, "cut_resist": 10, + "bullet_resist": 8, "acid_resist": 3, "fire_resist": 18, "elec_resist": 2, @@ -74,6 +77,7 @@ "specific_heat_solid": 0.45, "latent_heat": 273, "cut_resist": 20, + "bullet_resist": 16, "acid_resist": 7, "fire_resist": 3, "elec_resist": 0, diff --git a/data/mods/Magiclysm/monsters.json b/data/mods/Magiclysm/monsters.json index d1a4187b75e89..07bf47dfa2ebe 100644 --- a/data/mods/Magiclysm/monsters.json +++ b/data/mods/Magiclysm/monsters.json @@ -46,6 +46,7 @@ "luminance": 16, "armor_bash": 2, "armor_cut": 2, + "armor_bullet": 2, "vision_day": 30, "vision_night": 30, "material": [ "steel" ], diff --git a/data/mods/Magiclysm/monsters/demon_spider.json b/data/mods/Magiclysm/monsters/demon_spider.json index d525b3a311e7f..d0e74e158df4d 100644 --- a/data/mods/Magiclysm/monsters/demon_spider.json +++ b/data/mods/Magiclysm/monsters/demon_spider.json @@ -47,6 +47,7 @@ "armor_bash": 1, "armor_cut": 8, "armor_stab": 8, + "armor_bullet": 8, "armor_acid": 3, "armor_fire": 80, "vision_day": 5, @@ -83,6 +84,7 @@ "armor_bash": 5, "armor_cut": 45, "armor_stab": 60, + "armor_bullet": 60, "armor_acid": 10, "armor_fire": 80, "vision_day": 6, diff --git a/data/mods/Magiclysm/monsters/dragon.json b/data/mods/Magiclysm/monsters/dragon.json index 94518d93dfdca..047432a20b584 100644 --- a/data/mods/Magiclysm/monsters/dragon.json +++ b/data/mods/Magiclysm/monsters/dragon.json @@ -90,6 +90,7 @@ "dodge": 5, "armor_bash": 2, "armor_cut": 12, + "armor_bullet": 10, "armor_acid": 600, "vision_day": 30, "vision_night": 20, @@ -131,6 +132,7 @@ "melee_cut": 16, "armor_bash": 8, "armor_cut": 20, + "armor_bullet": 16, "special_attacks": [ { "type": "bite", "cooldown": 10 }, [ "scratch", 3 ], @@ -151,6 +153,7 @@ "melee_cut": 28, "armor_bash": 14, "armor_cut": 30, + "armor_bullet": 24, "dodge": 3, "//": "Large means powerful, but it does not mean fast.", "speed": 100, diff --git a/data/mods/Magiclysm/monsters/golems.json b/data/mods/Magiclysm/monsters/golems.json index 6dcb10f70ca71..dc5f4b68e40d2 100644 --- a/data/mods/Magiclysm/monsters/golems.json +++ b/data/mods/Magiclysm/monsters/golems.json @@ -23,6 +23,7 @@ "melee_cut": 5, "armor_bash": 10, "armor_cut": 10, + "armor_bullet": 8, "dodge": 0, "vision_day": 40, "vision_night": 40, @@ -47,6 +48,7 @@ "morale": 100, "armor_bash": 18, "armor_cut": 6, + "armor_bullet": 5, "melee_skill": 5, "melee_dice": 3, "melee_dice_sides": 6, @@ -82,6 +84,7 @@ "melee_cut": 6, "armor_bash": 20, "armor_cut": 20, + "armor_bullet": 16, "dodge": 0, "vision_day": 40, "vision_night": 40, @@ -114,6 +117,7 @@ "melee_cut": 7, "armor_bash": 32, "armor_cut": 32, + "armor_bullet": 26, "dodge": 0, "vision_day": 40, "vision_night": 40, diff --git a/data/mods/Magiclysm/monsters/lizardfolk.json b/data/mods/Magiclysm/monsters/lizardfolk.json index 010800cc17ca9..8622404c106b8 100644 --- a/data/mods/Magiclysm/monsters/lizardfolk.json +++ b/data/mods/Magiclysm/monsters/lizardfolk.json @@ -24,6 +24,7 @@ "dodge": 5, "armor_bash": 2, "armor_cut": 12, + "armor_bullet": 10, "armor_stab": 6, "harvest": "lizardfolk", "death_function": [ "NORMAL" ], diff --git a/data/mods/Magiclysm/monsters/monsters.json b/data/mods/Magiclysm/monsters/monsters.json index 7c4b78554dded..de043cea2e404 100644 --- a/data/mods/Magiclysm/monsters/monsters.json +++ b/data/mods/Magiclysm/monsters/monsters.json @@ -23,6 +23,7 @@ "dodge": 3, "armor_bash": 5, "armor_cut": 2, + "armor_bullet": 2, "vision_night": 20, "path_settings": { "max_dist": 25 }, "harvest": "owlbear", @@ -156,6 +157,7 @@ "dodge": 2, "armor_bash": 32, "armor_cut": 30, + "armor_bullet": 24, "harvest": "bulette", "anger_triggers": [ "SOUND" ], "death_function": [ "NORMAL" ], @@ -239,6 +241,7 @@ "melee_cut": 12, "dodge": 1, "armor_cut": 16, + "armor_bullet": 13, "vision_day": 40, "vision_night": 3, "harvest": "human_large_leather", diff --git a/data/mods/My_Sweet_Cataclysm/sweet_materials.json b/data/mods/My_Sweet_Cataclysm/sweet_materials.json index 2dca3b289edc8..ac10868c8817d 100644 --- a/data/mods/My_Sweet_Cataclysm/sweet_materials.json +++ b/data/mods/My_Sweet_Cataclysm/sweet_materials.json @@ -10,6 +10,7 @@ "edible": true, "bash_resist": 0, "cut_resist": 0, + "bullet_resist": 0, "acid_resist": 1, "fire_resist": 1, "elec_resist": 1, diff --git a/data/mods/My_Sweet_Cataclysm/sweet_monsters.json b/data/mods/My_Sweet_Cataclysm/sweet_monsters.json index 487e4f0a96f05..5487b5b06e67f 100644 --- a/data/mods/My_Sweet_Cataclysm/sweet_monsters.json +++ b/data/mods/My_Sweet_Cataclysm/sweet_monsters.json @@ -94,6 +94,7 @@ "melee_dice_sides": 8, "armor_bash": 2, "armor_cut": 3, + "armor_bullet": 2, "vision_night": 4, "harvest": "marshmallow_boy", "special_attacks": [ [ "SMASH", 30 ] ], @@ -124,6 +125,7 @@ "melee_dice_sides": 8, "armor_bash": 6, "armor_cut": 9, + "armor_bullet": 7, "vision_day": 50, "vision_night": 4, "harvest": "marshmallow_boy", @@ -153,6 +155,7 @@ "color": "white_red", "armor_bash": 2, "armor_cut": 3, + "armor_bullet": 2, "harvest": "armored_marshmallow_boy", "upgrades": { "half_life": 14, "into": "mon_marshmallow_guy_armored" } }, @@ -166,6 +169,7 @@ "color": "white_magenta", "armor_bash": 3, "armor_cut": 4, + "armor_bullet": 3, "harvest": "armored_marshmallow_boy", "upgrades": { "half_life": 14, "into": "mon_marshmallow_buff_armored" }, "reproduction": { "baby_egg": "smores", "baby_count": 5, "baby_timer": 14 } @@ -180,6 +184,7 @@ "color": "yellow_magenta", "armor_bash": 6, "armor_cut": 7, + "armor_bullet": 6, "harvest": "armored_marshmallow_boy", "upgrades": { "half_life": 14, "into": "mon_marshmallow_goliath_armored" }, "reproduction": { "baby_egg": "smores", "baby_count": 7, "baby_timer": 12 } @@ -195,6 +200,7 @@ "color": "brown_magenta", "armor_bash": 9, "armor_cut": 11, + "armor_bullet": 9, "reproduction": { "baby_egg": "smores", "baby_count": 10, "baby_timer": 10 } }, { @@ -270,6 +276,7 @@ "melee_cut": 2, "dodge": 4, "armor_cut": 10, + "armor_bullet": 8, "armor_stab": 25, "vision_day": 30, "vision_night": 3, @@ -301,6 +308,7 @@ "melee_cut": 4, "dodge": 3, "armor_cut": 20, + "armor_bullet": 27, "armor_stab": 27, "vision_day": 30, "vision_night": 3, @@ -366,6 +374,7 @@ "dodge": 2, "armor_bash": 2, "armor_cut": 4, + "armor_bullet": 3, "vision_day": 5, "vision_night": 5, "harvest": "gum_spider", @@ -398,6 +407,7 @@ "dodge": 4, "armor_bash": 4, "armor_cut": 8, + "armor_bullet": 6, "vision_day": 5, "vision_night": 5, "harvest": "caff_gum_spider", From 0e6bb62b3be709094a0eb0b4ba5c83344a7ec315 Mon Sep 17 00:00:00 2001 From: Qrox Date: Tue, 28 Apr 2020 20:04:13 +0800 Subject: [PATCH 18/48] Remove unused display_table --- src/output.cpp | 50 -------------------------------------------------- src/output.h | 2 -- 2 files changed, 52 deletions(-) diff --git a/src/output.cpp b/src/output.cpp index a79de64c45ffa..8170eca4b4e0a 100644 --- a/src/output.cpp +++ b/src/output.cpp @@ -1829,56 +1829,6 @@ std::string get_labeled_bar( const double val, const int width, const std::strin return get_labeled_bar( val, width, label, ratings.begin(), ratings.end() ); } -/** - * Display data in table, each cell contains one entry from the - * data vector. Allows vertical scrolling if the data does not fit. - * Data is displayed using fold_and_print_from, which allows coloring! - * @param columns Number of columns, can be 1. Make sure each entry - * of the data vector fits into one cell. - * @param title The title text, displayed on top. - * @param w The window to draw this in, the whole widow is used. - * @param data Text data to fill. - */ -void display_table( const catacurses::window &w, const std::string &title, int columns, - const std::vector &data ) -{ - const int width = getmaxx( w ) - 2; // -2 for border - const int rows = getmaxy( w ) - 2 - 1; // -2 for border, -1 for title - const int col_width = width / columns; - int offset = 0; - - // FIXME: temporarily disable redrawing of lower UIs before this UI is migrated to `ui_adaptor` - ui_adaptor ui( ui_adaptor::disable_uis_below {} ); - -#if defined(__ANDROID__) - // no bindings, but give it its own input context so stale buttons don't hang around. - input_context ctxt( "DISPLAY_TABLE" ); -#endif - for( ;; ) { - werase( w ); - draw_border( w, BORDER_COLOR, title, c_white ); - for( int i = 0; i < rows * columns; i++ ) { - if( i + offset * columns >= static_cast( data.size() ) ) { - break; - } - const int x = 2 + ( i % columns ) * col_width; - const int y = ( i / columns ) + 2; - fold_and_print_from( w, point( x, y ), col_width, 0, c_white, data[i + offset * columns] ); - } - draw_scrollbar( w, offset, rows, ( data.size() + columns - 1 ) / columns, point( 0, 2 ) ); - wrefresh( w ); - // TODO: use input context - int ch = inp_mngr.get_input_event().get_first_input(); - if( ch == KEY_DOWN && ( ( offset + 1 ) * columns ) < static_cast( data.size() ) ) { - offset++; - } else if( ch == KEY_UP && offset > 0 ) { - offset--; - } else if( ch == ' ' || ch == '\n' || ch == KEY_ESCAPE ) { - break; - } - } -} - scrollingcombattext::cSCT::cSCT( const point &p_pos, const direction p_oDir, const std::string &p_sText, const game_message_type p_gmt, const std::string &p_sText2, const game_message_type p_gmt2, diff --git a/src/output.h b/src/output.h index 941d3c1ca6b71..7a0aafa5e8ff0 100644 --- a/src/output.h +++ b/src/output.h @@ -325,8 +325,6 @@ void center_print( const catacurses::window &w, int y, const nc_color &FG, const std::string &text ); int right_print( const catacurses::window &w, int line, int right_indent, const nc_color &FG, const std::string &text ); -void display_table( const catacurses::window &w, const std::string &title, int columns, - const std::vector &data ); void scrollable_text( const catacurses::window &w, const std::string &title, const std::string &text ); void scrollable_text( const std::function &init_window, From ca9c4a6d20effc53d483e698634295626364513b Mon Sep 17 00:00:00 2001 From: Qrox Date: Tue, 28 Apr 2020 21:58:57 +0800 Subject: [PATCH 19/48] Migrate overmap to ui_adaptor --- src/game.h | 2 -- src/overmap_ui.cpp | 49 ++++++++++++++++++++-------------------------- src/sdltiles.cpp | 10 ---------- 3 files changed, 21 insertions(+), 40 deletions(-) diff --git a/src/game.h b/src/game.h index bb205197c1811..0835f22b11e5f 100644 --- a/src/game.h +++ b/src/game.h @@ -974,8 +974,6 @@ class game catacurses::window w_pixel_minimap; //only a pointer, can refer to w_messages_short or w_messages_long - catacurses::window w_blackspace; - // View offset based on the driving speed (if any) // that has been added to u.view_offset, // Don't write to this directly, always use set_driving_view_offset diff --git a/src/overmap_ui.cpp b/src/overmap_ui.cpp index 8c642fd5c567f..3407be5c95307 100644 --- a/src/overmap_ui.cpp +++ b/src/overmap_ui.cpp @@ -1366,20 +1366,17 @@ static void place_ter_or_special( tripoint &curs, const tripoint &orig, const bo static tripoint display( const tripoint &orig, const draw_data_t &data = draw_data_t() ) { - // FIXME: temporarily disable redrawing of lower UIs before this UI is migrated to `ui_adaptor` - ui_adaptor ui( ui_adaptor::disable_uis_below {} ); - - /* please do not change point( TERMX - OVERMAP_LEGEND_WIDTH, 0 ) to point( OVERMAP_WINDOW_WIDTH, 0 ) */ - /* because overmap legend will be absent */ - g->w_omlegend = catacurses::newwin( TERMY, OVERMAP_LEGEND_WIDTH, - point( TERMX - OVERMAP_LEGEND_WIDTH, 0 ) ); - g->w_overmap = catacurses::newwin( OVERMAP_WINDOW_HEIGHT, OVERMAP_WINDOW_WIDTH, point_zero ); - - // Draw black padding space to avoid gap between map and legend - // also clears the pixel minimap in TILES - g->w_blackspace = catacurses::newwin( TERMY, TERMX, point_zero ); - mvwputch( g->w_blackspace, point_zero, c_black, ' ' ); - wrefresh( g->w_blackspace ); + ui_adaptor ui; + ui.on_screen_resize( []( ui_adaptor & ui ) { + /* please do not change point( TERMX - OVERMAP_LEGEND_WIDTH, 0 ) to point( OVERMAP_WINDOW_WIDTH, 0 ) */ + /* because overmap legend will be absent */ + g->w_omlegend = catacurses::newwin( TERMY, OVERMAP_LEGEND_WIDTH, + point( TERMX - OVERMAP_LEGEND_WIDTH, 0 ) ); + g->w_overmap = catacurses::newwin( OVERMAP_WINDOW_HEIGHT, OVERMAP_WINDOW_WIDTH, point_zero ); + + ui.position_from_window( catacurses::stdscr ); + } ); + ui.mark_resize(); tripoint ret = overmap::invalid_tripoint; tripoint curs( orig ); @@ -1426,14 +1423,17 @@ static tripoint display( const tripoint &orig, const draw_data_t &data = draw_da bool fast_scroll = false; /* fast scroll state should reset every time overmap UI is opened */ int fast_scroll_offset = get_option( "FAST_SCROLL_OFFSET" ); cata::optional mouse_pos; - bool redraw = true; std::chrono::time_point last_blink = std::chrono::steady_clock::now(); + + ui.on_redraw( [&]( const ui_adaptor & ) { + catacurses::erase(); + catacurses::refresh(); + draw( g->w_overmap, g->w_omlegend, curs, orig, uistate.overmap_show_overlays, + show_explored, fast_scroll, &ictxt, data ); + } ); + do { - if( redraw ) { - draw( g->w_overmap, g->w_omlegend, curs, orig, uistate.overmap_show_overlays, - show_explored, fast_scroll, &ictxt, data ); - } - redraw = true; + ui_manager::redraw(); #if (defined TILES || defined _WIN32 || defined WINDOWS ) int scroll_timeout = get_option( "EDGE_SCROLL" ); // If EDGE_SCROLL is disabled, it will have a value of -1. @@ -1451,9 +1451,7 @@ static tripoint display( const tripoint &orig, const draw_data_t &data = draw_da curs.y += vec->y * scroll_d; } else if( action == "MOUSE_MOVE" || action == "TIMEOUT" ) { tripoint edge_scroll = g->mouse_edge_scrolling_overmap( ictxt ); - if( edge_scroll == tripoint_zero ) { - redraw = false; - } else { + if( edge_scroll != tripoint_zero ) { if( action == "MOUSE_MOVE" ) { edge_scroll *= 2; } @@ -1579,15 +1577,10 @@ static tripoint display( const tripoint &orig, const draw_data_t &data = draw_da if( now > last_blink + std::chrono::milliseconds( BLINK_SPEED ) ) { if( uistate.overmap_blinking ) { uistate.overmap_show_overlays = !uistate.overmap_show_overlays; - redraw = true; } last_blink = now; } } while( action != "QUIT" && action != "CONFIRM" ); - werase( g->w_overmap ); - werase( g->w_omlegend ); - catacurses::erase(); - g->init_ui( true ); return ret; } diff --git a/src/sdltiles.cpp b/src/sdltiles.cpp index 78387b545e0b9..e3e14271cd5cc 100644 --- a/src/sdltiles.cpp +++ b/src/sdltiles.cpp @@ -1201,7 +1201,6 @@ void cata_cursesport::curses_drawwindow( const catacurses::window &w ) } else if( g && w == g->w_terrain && map_font ) { // When the terrain updates, predraw a black space around its edge // to keep various former interface elements from showing through the gaps - // TODO: Maybe track down screen changes and use g->w_blackspace to draw this instead //calculate width differences between map_font and font int partial_width = std::max( TERRAIN_WINDOW_TERM_WIDTH * fontwidth - TERRAIN_WINDOW_WIDTH * @@ -1234,15 +1233,6 @@ void cata_cursesport::curses_drawwindow( const catacurses::window &w ) int offsetx = win->pos.x * map_font->fontwidth; int offsety = win->pos.y * map_font->fontheight; update = map_font->draw_window( w, point( offsetx, offsety ) ); - } else if( g && w == g->w_blackspace ) { - // fill-in black space window skips draw code - // so as not to confuse framebuffer any more than necessary - int offsetx = win->pos.x * font->fontwidth; - int offsety = win->pos.y * font->fontheight; - int wwidth = win->width * font->fontwidth; - int wheight = win->height * font->fontheight; - FillRectDIB( point( offsetx, offsety ), wwidth, wheight, catacurses::black ); - update = true; } else if( g && w == g->w_pixel_minimap && g->pixel_minimap_option ) { // ensure the space the minimap covers is "dirtied". // this is necessary when it's the only part of the sidebar being drawn From 27dc10b8cdaa61abc394f81bcd3bb04ee0c9e9dc Mon Sep 17 00:00:00 2001 From: Qrox Date: Wed, 29 Apr 2020 19:34:24 +0800 Subject: [PATCH 20/48] Migrate overmap note preview to ui_adaptor --- src/overmap_ui.cpp | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/src/overmap_ui.cpp b/src/overmap_ui.cpp index 3407be5c95307..bf30c6bf30805 100644 --- a/src/overmap_ui.cpp +++ b/src/overmap_ui.cpp @@ -1073,15 +1073,29 @@ void create_note( const tripoint &curs ) std::string new_note = old_note; auto map_around = get_overmap_neighbors( curs ); - catacurses::window w_preview = catacurses::newwin( npm_height + 2, - max_note_display_length - npm_width - 1, - point( npm_width + 2, 2 ) ); - catacurses::window w_preview_title = catacurses::newwin( 2, max_note_display_length + 1, - point_zero ); - catacurses::window w_preview_map = catacurses::newwin( npm_height + 2, npm_width + 2, point( 0, - 2 ) ); - std::tuple preview_windows = - std::make_tuple( &w_preview, &w_preview_title, &w_preview_map ); + catacurses::window w_preview; + catacurses::window w_preview_title; + catacurses::window w_preview_map; + std::tuple preview_windows; + + ui_adaptor ui; + ui.on_screen_resize( [&]( ui_adaptor & ui ) { + w_preview = catacurses::newwin( npm_height + 2, + max_note_display_length - npm_width - 1, + point( npm_width + 2, 2 ) ); + w_preview_title = catacurses::newwin( 2, max_note_display_length + 1, + point_zero ); + w_preview_map = catacurses::newwin( npm_height + 2, npm_width + 2, + point( 0, 2 ) ); + preview_windows = std::make_tuple( &w_preview, &w_preview_title, &w_preview_map ); + + ui.position( point_zero, point( max_note_display_length + 1, npm_height + 4 ) ); + } ); + ui.mark_resize(); + + ui.on_redraw( [&]( const ui_adaptor & ) { + update_note_preview( new_note, map_around, preview_windows ); + } ); // this implies enable_ime() and ensures that ime mode is always restored on return ime_sentry sentry; @@ -1098,19 +1112,14 @@ void create_note( const tripoint &curs ) .string_color( c_yellow ) .identifier( "map_note" ); - update_note_preview( old_note, map_around, preview_windows ); - do { new_note = input_popup.query_string( false ); - const int first_input = input_popup.context().get_raw_input().get_first_input(); - if( first_input == KEY_ESCAPE ) { + if( input_popup.canceled() ) { new_note = old_note; esc_pressed = true; break; - } else if( first_input == '\n' ) { + } else if( input_popup.confirmed() ) { break; - } else { - update_note_preview( new_note, map_around, preview_windows ); } } while( true ); From 7f1b95e88305245113b2982b42c78adae224937c Mon Sep 17 00:00:00 2001 From: Qrox Date: Thu, 30 Apr 2020 12:14:59 +0800 Subject: [PATCH 21/48] Migrate overmap note list to ui_adaptor --- src/overmap_ui.cpp | 52 ++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/src/overmap_ui.cpp b/src/overmap_ui.cpp index bf30c6bf30805..852b82f4e1af9 100644 --- a/src/overmap_ui.cpp +++ b/src/overmap_ui.cpp @@ -183,6 +183,7 @@ static void update_note_preview( const std::string ¬e, const int npm_offset_x = 1; const int npm_offset_y = 1; + werase( *w_preview_map ); draw_border( *w_preview_map, c_yellow ); for( int i = 0; i < npm_height; i++ ) { for( int j = 0; j < npm_width; j++ ) { @@ -322,19 +323,42 @@ class map_notes_callback : public uilist_callback overmapbuffer::t_notes_vector _notes; int _z; int _selected = 0; + + catacurses::window w_preview; + catacurses::window w_preview_title; + catacurses::window w_preview_map; + std::tuple preview_windows; + ui_adaptor ui; + point point_selected() { return _notes[_selected].first; } tripoint note_location() { return tripoint( point_selected(), _z ); } - std::string old_note() { - return overmap_buffer.note( note_location() ); - } public: - map_notes_callback( const overmapbuffer::t_notes_vector ¬es, int z ) { - _notes = notes; - _z = z; + map_notes_callback( const overmapbuffer::t_notes_vector ¬es, int z ) + : _notes( notes ), _z( z ) { + ui.on_screen_resize( [this]( ui_adaptor & ui ) { + w_preview = catacurses::newwin( npm_height + 2, max_note_display_length - npm_width - 1, + point( npm_width + 2, 2 ) ); + w_preview_title = catacurses::newwin( 2, max_note_display_length + 1, point_zero ); + w_preview_map = catacurses::newwin( npm_height + 2, npm_width + 2, point( 0, 2 ) ); + preview_windows = std::make_tuple( &w_preview, &w_preview_title, &w_preview_map ); + + ui.position( point_zero, point( max_note_display_length + 1, npm_height + 4 ) ); + } ); + ui.mark_resize(); + + ui.on_redraw( [this]( const ui_adaptor & ) { + if( _selected >= 0 && static_cast( _selected ) < _notes.size() ) { + const tripoint note_pos = note_location(); + const auto map_around = get_overmap_neighbors( note_pos ); + update_note_preview( overmap_buffer.note( note_pos ), map_around, preview_windows ); + } else { + update_note_preview( {}, {}, preview_windows ); + } + } ); } bool key( const input_context &ctxt, const input_event &event, int, uilist *menu ) override { _selected = menu->selected; @@ -378,21 +402,9 @@ class map_notes_callback : public uilist_callback } return false; } - void refresh( uilist *menu ) override { + void select( uilist *menu ) override { _selected = menu->selected; - if( _selected >= 0 && static_cast( _selected ) < _notes.size() ) { - const auto map_around = get_overmap_neighbors( note_location() ); - catacurses::window w_preview = - catacurses::newwin( npm_height + 2, max_note_display_length - npm_width - 1, - point( npm_width + 2, 2 ) ); - catacurses::window w_preview_title = - catacurses::newwin( 2, max_note_display_length + 1, point_zero ); - catacurses::window w_preview_map = - catacurses::newwin( npm_height + 2, npm_width + 2, point( 0, 2 ) ); - const std::tuple preview_windows = - std::make_tuple( &w_preview, &w_preview_title, &w_preview_map ); - update_note_preview( old_note(), map_around, preview_windows ); - } + ui.invalidate_ui(); } }; From 3fab34bbfd4f83d9ecf0e34ec253f4c82fb1a637 Mon Sep 17 00:00:00 2001 From: Qrox Date: Thu, 30 Apr 2020 13:07:30 +0800 Subject: [PATCH 22/48] Migrate overmap search ui to ui_adaptor --- src/overmap_ui.cpp | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/src/overmap_ui.cpp b/src/overmap_ui.cpp index 852b82f4e1af9..1c1e1d4e22a4d 100644 --- a/src/overmap_ui.cpp +++ b/src/overmap_ui.cpp @@ -1147,8 +1147,7 @@ void create_note( const tripoint &curs ) } // if false, search yielded no results -static bool search( tripoint &curs, const tripoint &orig, const bool show_explored, - const bool fast_scroll, std::string &action ) +static bool search( const ui_adaptor &om_ui, tripoint &curs, const tripoint &orig ) { std::string term = string_input_popup() .title( _( "Search term:" ) ) @@ -1195,8 +1194,17 @@ static bool search( tripoint &curs, const tripoint &orig, const bool show_explor int i = 0; //Navigate through results - tripoint tmp = curs; - catacurses::window w_search = catacurses::newwin( 13, 27, point( TERMX - 27, 3 ) ); + const tripoint prev_curs = curs; + + catacurses::window w_search; + + ui_adaptor ui; + ui.on_screen_resize( [&]( ui_adaptor & ui ) { + w_search = catacurses::newwin( 13, 27, point( TERMX - 27, 3 ) ); + + ui.position_from_window( w_search ); + } ); + ui.mark_resize(); input_context ctxt( "OVERMAP_SEARCH" ); ctxt.register_leftright(); @@ -1207,15 +1215,7 @@ static bool search( tripoint &curs, const tripoint &orig, const bool show_explor ctxt.register_action( "HELP_KEYBINDINGS" ); ctxt.register_action( "ANY_INPUT" ); - // FIXME: temporarily disable redrawing of lower UIs before this UI is migrated to `ui_adaptor` - ui_adaptor ui( ui_adaptor::disable_uis_below {} ); - - do { - tmp.x = locations[i].x; - tmp.y = locations[i].y; - draw( g->w_overmap, g->w_omlegend, tmp, orig, uistate.overmap_show_overlays, show_explored, - fast_scroll, nullptr, - draw_data_t() ); + ui.on_redraw( [&]( const ui_adaptor & ) { //Draw search box // NOLINTNEXTLINE(cata-use-named-point-constants) mvwprintz( w_search, point( 1, 1 ), c_light_blue, _( "Search:" ) ); @@ -1235,6 +1235,14 @@ static bool search( tripoint &curs, const tripoint &orig, const bool show_explor mvwprintz( w_search, point( 1, 11 ), c_white, _( "q or ESC to return." ) ); draw_border( w_search ); wrefresh( w_search ); + } ); + + std::string action; + do { + curs.x = locations[i].x; + curs.y = locations[i].y; + om_ui.invalidate_ui(); + ui_manager::redraw(); action = ctxt.handle_input( BLINK_SPEED ); if( uistate.overmap_blinking ) { uistate.overmap_show_overlays = !uistate.overmap_show_overlays; @@ -1243,11 +1251,11 @@ static bool search( tripoint &curs, const tripoint &orig, const bool show_explor i = ( i + 1 ) % locations.size(); } else if( action == "PREV_TAB" || action == "LEFT" ) { i = ( i + locations.size() - 1 ) % locations.size(); - } else if( action == "CONFIRM" ) { - curs = tmp; + } else if( action == "QUIT" ) { + curs = prev_curs; + om_ui.invalidate_ui(); } } while( action != "CONFIRM" && action != "QUIT" ); - action.clear(); return true; } @@ -1585,7 +1593,7 @@ static tripoint display( const tripoint &orig, const draw_data_t &data = draw_da } else if( action == "TOGGLE_FOREST_TRAILS" ) { uistate.overmap_show_forest_trails = !uistate.overmap_show_forest_trails; } else if( action == "SEARCH" ) { - if( !search( curs, orig, show_explored, fast_scroll, action ) ) { + if( !search( ui, curs, orig ) ) { continue; } } else if( action == "PLACE_TERRAIN" || action == "PLACE_SPECIAL" ) { From f3bd0d4a7f4b69183caf37b4f481fceec6d056e0 Mon Sep 17 00:00:00 2001 From: Qrox Date: Thu, 30 Apr 2020 13:38:12 +0800 Subject: [PATCH 23/48] Migrate place_ter_or_special to ui_adaptor --- src/overmap_ui.cpp | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/overmap_ui.cpp b/src/overmap_ui.cpp index 1c1e1d4e22a4d..da1f55dd52d96 100644 --- a/src/overmap_ui.cpp +++ b/src/overmap_ui.cpp @@ -1259,13 +1259,13 @@ static bool search( const ui_adaptor &om_ui, tripoint &curs, const tripoint &ori return true; } -static void place_ter_or_special( tripoint &curs, const tripoint &orig, const bool show_explored, - const bool fast_scroll, std::string &action ) +static void place_ter_or_special( const ui_adaptor &om_ui, tripoint &curs, + const std::string &om_action ) { uilist pmenu; // This simplifies overmap_special selection using uilist std::vector oslist; - const bool terrain = action == "PLACE_TERRAIN"; + const bool terrain = om_action == "PLACE_TERRAIN"; if( terrain ) { pmenu.title = _( "Select terrain to place:" ); @@ -1291,12 +1291,22 @@ static void place_ter_or_special( tripoint &curs, const tripoint &orig, const bo pmenu.query(); if( pmenu.ret >= 0 ) { - catacurses::window w_editor = catacurses::newwin( 15, 27, point( TERMX - 27, 3 ) ); + catacurses::window w_editor; + + ui_adaptor ui; + ui.on_screen_resize( [&]( ui_adaptor & ui ) { + w_editor = catacurses::newwin( 15, 27, point( TERMX - 27, 3 ) ); + + ui.position_from_window( w_editor ); + } ); + ui.mark_resize(); + input_context ctxt( "OVERMAP_EDITOR" ); ctxt.register_directions(); ctxt.register_action( "CONFIRM" ); ctxt.register_action( "ROTATE" ); ctxt.register_action( "QUIT" ); + ctxt.register_action( "HELP_KEYBINDINGS" ); ctxt.register_action( "ANY_INPUT" ); if( terrain ) { @@ -1319,14 +1329,7 @@ static void place_ter_or_special( tripoint &curs, const tripoint &orig, const bo } } - // FIXME: temporarily disable redrawing of lower UIs before this UI is migrated to `ui_adaptor` - ui_adaptor ui( ui_adaptor::disable_uis_below {} ); - - do { - // overmap::draw will handle actually showing the preview - draw( g->w_overmap, g->w_omlegend, curs, orig, uistate.overmap_show_overlays, show_explored, - fast_scroll, nullptr, draw_data_t() ); - + ui.on_redraw( [&]( const ui_adaptor & ) { draw_border( w_editor ); if( terrain ) { // NOLINTNEXTLINE(cata-use-named-point-constants) @@ -1358,6 +1361,12 @@ static void place_ter_or_special( tripoint &curs, const tripoint &orig, const bo ctxt.get_desc( "CONFIRM" ) ); mvwprintz( w_editor, point( 1, 13 ), c_white, _( "[ESCAPE/Q] Cancel" ) ); wrefresh( w_editor ); + } ); + + std::string action; + do { + om_ui.invalidate_ui(); + ui_manager::redraw(); action = ctxt.handle_input( BLINK_SPEED ); @@ -1389,7 +1398,6 @@ static void place_ter_or_special( tripoint &curs, const tripoint &orig, const bo uistate.place_terrain = nullptr; uistate.place_special = nullptr; - action.clear(); } } @@ -1597,7 +1605,7 @@ static tripoint display( const tripoint &orig, const draw_data_t &data = draw_da continue; } } else if( action == "PLACE_TERRAIN" || action == "PLACE_SPECIAL" ) { - place_ter_or_special( curs, orig, show_explored, fast_scroll, action ); + place_ter_or_special( ui, curs, action ); } else if( action == "MISSIONS" ) { g->list_missions(); } From 7090b36d639241f714b2edbdc5c006a0863c8f3c Mon Sep 17 00:00:00 2001 From: curstwist <39442864+curstwist@users.noreply.github.com> Date: Sun, 3 May 2020 10:43:23 -0400 Subject: [PATCH 24/48] merge some maps, swap palette --- data/json/mapgen/mall/mall_ground.json | 869 +++----------------- data/json/mapgen_palettes/mall_palette.json | 10 + 2 files changed, 144 insertions(+), 735 deletions(-) diff --git a/data/json/mapgen/mall/mall_ground.json b/data/json/mapgen/mall/mall_ground.json index 211718090dcc5..6976f28e302a4 100644 --- a/data/json/mapgen/mall/mall_ground.json +++ b/data/json/mapgen/mall/mall_ground.json @@ -2,392 +2,88 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "mall_a_1" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "........................", - "....###..sssssssssssssss", - "....#T#.ss______________", - "....###ss_______________", - ".###..ss________________", - ".#T#.ss__________,,,,,,,", - ".###ss__________,,,,,,,,", - "...ss__________,,_______", - "..ss__________,,________", - ".ss________,_,,_________", - ".s________,,,,,,________", - ".s_________,,,__________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________" - ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 2, 23 ], "y": [ 2, 23 ], "density": 0.15 } ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_2" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "........................", - "ssssssssssssssssssssssss", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "______,,,,,,,,,,,,,,,,,,", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "______,,,,,,,,,,,,,,,,,,", - "________________________", - "________________________", - "________________________", - "________________________" - ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 2, 23 ], "y": [ 2, 23 ], "density": 0.3 } ], - "place_vehicles": [ { "vehicle": "semi_truck", "x": 12, "y": 17, "chance": 90, "rotation": 180 } ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_3" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "........................", - "ssssssssssssssssssssssss", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "____ssssssssssssssssssss", - "___ss.......######...###", - ",,,ss|------------------", - "_____|7 rrrr rr", - "_____= zz ", - "_____= zz zz ", - "_____= zz ", - "_____= zz ", - "_____| zz ", - ",,,,,| ", - "_____|7 ", - "_____= ", - "_____= ", - "_____= " - ], - "palettes": [ "mall_palette" ], - "place_loot": [ - { "group": "mechanics", "x": [ 13, 16 ], "y": [ 13, 13 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "tools_mechanic", "x": [ 22, 23 ], "y": [ 13, 13 ], "chance": 90 }, - { "group": "shirts", "x": [ 8, 9 ], "y": [ 14, 15 ], "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "shirts", "x": [ 8, 9 ], "y": [ 17, 18 ], "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "vending_food", "x": [ 12, 13 ], "y": [ 15, 16 ], "chance": 80, "repeat": [ 2, 5 ] } - ], - "place_monsters": [ - { "monster": "GROUP_MALL", "x": [ 2, 23 ], "y": [ 2, 10 ], "density": 0.2 }, - { "monster": "GROUP_MALL", "x": [ 8, 20 ], "y": [ 17, 21 ], "density": 0.1 } - ], - "place_vehicles": [ - { "vehicle": "truck_trailer", "x": 0, "y": 15, "chance": 100, "rotation": 180 }, - { "vehicle": "warehouse_vehicles", "x": 15, "y": 50, "chance": 75 } - ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_4" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "........................", - "ssssssssssssssssssssssss", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "ssssssssssssssssssssssss", - "###...######...######...", - "---------|-----|--------", - "rr |EEEEE| ", - " +EEEEE+ zz ", - " zz +EEEEE+ zz ", - " zz +EEEEE+ ", - " |EEEEE| ", - " |-----| ", - " ", - " ", - " |-----| ", - " |c + zzzzz", - " |S | -----" - ], - "palettes": [ "mall_palette" ], - "place_items": [ - { "item": "tools_common", "x": [ 0, 1 ], "y": [ 13, 13 ], "chance": 60 }, - { "item": "pants", "x": [ 6, 7 ], "y": [ 15, 16 ], "chance": 80 }, - { "item": "winter", "x": [ 20, 21 ], "y": [ 14, 15 ], "chance": 80 }, - { "item": "home_hw", "x": [ 19, 23 ], "y": [ 22, 22 ], "chance": 60 }, - { "item": "tools_common", "x": [ 10, 10 ], "y": [ 22, 22 ], "chance": 60 } - ], - "place_monsters": [ - { "monster": "GROUP_MALL", "x": [ 2, 23 ], "y": [ 2, 10 ], "density": 0.2 }, - { "monster": "GROUP_MALL", "x": [ 2, 23 ], "y": [ 17, 19 ], "density": 0.1 } - ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_5" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "...................sssss", - "ssssssssssssssssssss____", - "________________________", - "________________________", - "_________________,______", - "________________,,,,,___", - "________________,,,,,___", - "_________________,______", - "________________________", - "________________________", - "ssssssssssssssssssss____", - "######............sss___", - "---------------|...ss___", - " |...ss___", - "zz zz zz zz |...ss___", - "zz zz zz zz |#..ss___", - " zz zz |#T.ss___", - " zz zz zz |#..ss___", - " z |...ss___", - " zz |...ss___", - " zz |#..ss___", - " |#T.ss___", - " |#..ss___", - "|-::-|---|--|++|...ss___" - ], - "palettes": [ "mall_palette" ], - "place_items": [ - { "item": "jackets", "x": [ 0, 1 ], "y": [ 14, 15 ], "chance": 80 }, - { "item": "pants", "x": [ 6, 7 ], "y": [ 14, 15 ], "chance": 80 }, - { "item": "winter", "x": [ 9, 10 ], "y": [ 14, 15 ], "chance": 80 }, - { "item": "bags", "x": [ 12, 13 ], "y": [ 14, 15 ], "chance": 80 }, - { "item": "allclothes", "x": [ 9, 10 ], "y": [ 16, 17 ], "chance": 80 }, - { "item": "vending_food", "x": [ 12, 13 ], "y": [ 16, 17 ], "chance": 80 }, - { "item": "female_underwear_bottom", "x": [ 3, 3 ], "y": [ 18, 18 ], "chance": 80 }, - { "item": "allclothes", "x": [ 2, 3 ], "y": [ 17, 17 ], "chance": 80 }, - { "item": "allclothes", "x": [ 12, 13 ], "y": [ 19, 20 ], "chance": 80 } - ], + "om_terrain": [ [ "mall_a_1", "mall_a_2", "mall_a_3", "mall_a_4", "mall_a_5", "mall_a_6", "mall_a_7", "mall_a_8", "mall_a_9" ] ], + "weight": 250, + "object": { + "fill_ter": "t_thconc_floor", + "rows": [ + "ւււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГւււււււււււ", + "ււււɱɱɱււГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГււɱɱɱւււււ", + "ււււɱϻɱւГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГւɱϻɱւււււ", + "ււււɱɱɱГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւɱɱɱւււււ", + "ւɱɱɱււГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔ˽˽˽˽˽˽˽˽˽ɔɔɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւււււɱɱɱւ", + "ւɱϻɱւГГ˽˽˽˽˽˽˽˽˽˽ɔɔɔɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔɔ˽˽˽˽˽ɔɔ˽˽˽ɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւււււɱϻɱւ", + "ւɱɱɱГГ˽˽˽˽˽˽˽˽˽˽ɔɔɔɔɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔɔ˽˽˽˽ɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւււււɱɱɱւ", + "ւււГГ˽˽˽˽˽˽˽˽˽˽ɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔ˽˽˽˽˽˽˽ɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГււււււււ", + "ււГГ˽˽˽˽˽˽˽˽˽˽ɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔɔ˽˽˽˽˽ГГГГГГГГГГ˽˽˽˽˽˽˽˽˽˽ГГГГГГГГГГГГГГГГГГГ˽˽˽˽˽˽˽˽˽˽ГГГГГГГГГГГГГГГГГГГ˽˽˽˽˽˽˽˽˽˽˽ГГГГГГГГւ", + "ւГГ˽˽˽˽˽˽˽˽˽˽ɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔɔ˽˽˽˽ГГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГւ", + "ւГ˽˽˽˽˽˽˽˽ɔɔɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГ˽˽˽˽˽ɔɔ˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽ɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГւււււււɱɱɱɱɱɱւււɱɱɱɱɱɱւււɱɱɱɱɱɱւււɱɱɱɱɱɱւււɱɱɱɱɱɱււււււււււււГГГ˽˽˽˽ɔɔ˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽ɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔГГ|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||ւււГГ˽˽˽˽ɔɔ˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽|3______QQQQ_____QQQQ_______|_____|_______________________|ւււГГ˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽1__zz_______________________θ_____θ____zz__zz____zz_zz_zz_|ւււГГ˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽1__zz__zz________________zz_θ_____θ____zz__zz____zz_zz_zz_|ɱււГГ˽˽˽˽˽˽˽˽˽˽ГГɔɔɔɔɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔɔɔɔГГɔɔɔɔɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔɔɔɔГГɔɔɔɔɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔɔɔɔГւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽1______zz________________zz_θ_____θ_________________zz_zz_|ɱϻւГГ˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽1__zz______________________Ŋ|_____|Ŋ_________zz_____zz_zz_|ɱււГГ˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽|__zz_______________________|||||||___________z___________|ւււГГ˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔɔ|______________________________________________________zz_|ւււГГ˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽|3_____________________________________________________zz_|ɱււГГ˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽1___________________________|||||||_______________________|ɱϻւГГ˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽1___________________________|J____=___zzzzz_______________|ɱււГГ˽˽˽˽˽˽˽˽˽˽ГГɔɔɔɔɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔɔɔɔГГɔɔɔɔɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔɔɔɔГГɔɔɔɔɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔɔɔɔГւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽1___________________________|j____|___|||||||θθ|||||||||θθ|ւււГГ˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ" + ], + "palettes": [ "mall_palette_2" ], + "terrain": { "3": "t_gates_control_brick", "1": "t_door_metal_locked" }, "place_monsters": [ - { "monster": "GROUP_MALL", "x": [ 2, 23 ], "y": [ 0, 11 ], "density": 0.2 }, - { "monster": "GROUP_MALL", "x": [ 0, 9 ], "y": [ 16, 21 ], "density": 0.1 } - ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_6" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "ssssssssssssssssssssssss", - "________________________", - "_______,________________", - "_____,,,,_______________", - "___,,,,,,_______________", - "__,,___,________________", - "_,,_____________________", - "_,,_____________________", - "_,,_____ssssssssss______", - "_,,____sss______________", - "_,,____ss_______________", - "_,,____ss_______________", - "_,,____ss_______________", - "_______ss_______________", - "_______ss_______________", - "_______ss,,,,,,,,_______", - "_______ss_______________", - "_______ss_______________", - "_______ss_______________", - "_______ss_______________", - "_______ss_______________", - "_______ss_______________", - "_______ss,,,,,,,,_______", - "_______ss_______________" - ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 2, 23 ], "y": [ 2, 23 ], "density": 0.2 } ], - "place_vehicles": [ - { "vehicle": "car", "x": 12, "y": 11, "chance": 35, "rotation": 0 }, - { "vehicle": "beetle", "x": 12, "y": 19, "chance": 35, "rotation": 180 } - ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_7" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "ssssssssssssssssssssssss", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "____sssssssssssssssssss_", - "___________ssss_________", - "____________ss__________", - "____________ss__________", - "____________ss__________", - "____________ss__________", - "____________ss__________", - "_____,,,,,,,ss,,,,,,,,__", - "____________ss__________", - "____________ss__________", - "____________ss__________", - "____________ss__________", - "____________ss__________", - "____________ss__________", - "_____,,,,,,,ss,,,,,,,,__", - "____________ss__________" + { "monster": "GROUP_MALL", "x": [ 2, 23 ], "y": [ 2, 23 ], "density": 0.15 }, + { "monster": "GROUP_MALL", "x": [ 26, 47 ], "y": [ 2, 23 ], "density": 0.3 }, + { "monster": "GROUP_MALL", "x": [ 49, 71 ], "y": [ 2, 10 ], "density": 0.2 }, + { "monster": "GROUP_MALL", "x": [ 56, 68 ], "y": [ 17, 21 ], "density": 0.1 }, + { "monster": "GROUP_MALL", "x": [ 73, 95 ], "y": [ 2, 10 ], "density": 0.2 }, + { "monster": "GROUP_MALL", "x": [ 73, 95 ], "y": [ 17, 19 ], "density": 0.1 }, + { "monster": "GROUP_MALL", "x": [ 98, 119 ], "y": [ 0, 11 ], "density": 0.2 }, + { "monster": "GROUP_MALL", "x": [ 96, 105 ], "y": [ 16, 21 ], "density": 0.1 }, + { "monster": "GROUP_MALL", "x": [ 170, 191 ], "y": [ 2, 23 ], "density": 0.1 }, + { "monster": "GROUP_MALL", "x": [ 194, 215 ], "y": [ 2, 23 ], "density": 0.05 } ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 2, 23 ], "y": [ 2, 23 ], "density": 0.2 } ], - "place_vehicles": [ - { "vehicle": "car_sports", "x": 17, "y": 18, "chance": 35, "rotation": 0 }, - { "vehicle": "electric_car", "x": 8, "y": 11, "chance": 35, "rotation": 180 }, - { "vehicle": "cube_van", "x": 19, "y": 10, "chance": 35, "rotation": 0 }, - { "vehicle": "car_mini", "x": 8, "y": 18, "chance": 35, "rotation": 0 } - ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_8" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "ssssssssssssssssssssssss", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "_________sssssssssssssss", - "________________ssss____", - "_________________ss_____", - "_________________ss_____", - "_________________ss_____", - "_________________ss_____", - "_________________ss_____", - "__________,,,,,,,ss,,,,,", - "_________________ss_____", - "_________________ss_____", - "_________________ss_____", - "_________________ss_____", - "_________________ss_____", - "_________________ss_____", - "__________,,,,,,,ss,,,,,", - "_________________ss_____" + "place_loot": [ + { "group": "mechanics", "x": [ 61, 64 ], "y": 13, "chance": 90, "repeat": [ 1, 3 ] }, + { "group": "tools_mechanic", "x": [ 70, 71 ], "y": 13, "chance": 90 }, + { "group": "shirts", "x": [ 56, 57 ], "y": [ 14, 15 ], "chance": 80, "repeat": [ 1, 3 ] }, + { "group": "shirts", "x": [ 56, 57 ], "y": [ 17, 18 ], "chance": 80, "repeat": [ 1, 3 ] }, + { "group": "vending_food", "x": [ 60, 61 ], "y": [ 15, 16 ], "chance": 80, "repeat": [ 2, 5 ] }, + { "group": "tools_common", "x": [ 73, 73 ], "y": 13, "chance": 60 }, + { "group": "pants", "x": [ 78, 79 ], "y": [ 15, 16 ], "chance": 80 }, + { "group": "winter", "x": [ 92, 93 ], "y": [ 14, 15 ], "chance": 80 }, + { "group": "home_hw", "x": [ 90, 95 ], "y": 22, "chance": 60 }, + { "group": "tools_common", "x": 81, "y": 22, "chance": 60 }, + { "group": "jackets", "x": [ 96, 97 ], "y": [ 14, 15 ], "chance": 80 }, + { "group": "pants", "x": [ 102, 103 ], "y": [ 14, 15 ], "chance": 80 }, + { "group": "winter", "x": [ 105, 106 ], "y": [ 14, 15 ], "chance": 80 }, + { "group": "bags", "x": [ 108, 109 ], "y": [ 14, 15 ], "chance": 80 }, + { "group": "allclothes", "x": [ 105, 106 ], "y": [ 16, 17 ], "chance": 80 }, + { "group": "vending_food", "x": [ 108, 109 ], "y": [ 16, 17 ], "chance": 80 }, + { "group": "female_underwear_bottom", "x": 99, "y": 18, "chance": 80 }, + { "group": "allclothes", "x": [ 98, 99 ], "y": 17, "chance": 80 }, + { "group": "allclothes", "x": [ 108, 109 ], "y": [ 19, 20 ], "chance": 80 } ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 2, 23 ], "y": [ 2, 23 ], "density": 0.1 } ], "place_vehicles": [ - { "vehicle": "pickup", "x": 12, "y": 12, "chance": 35, "rotation": 180 }, - { "vehicle": "car", "x": 13, "y": 18, "chance": 35, "rotation": 0 }, - { "vehicle": "car", "x": 23, "y": 11, "chance": 35, "rotation": 0 }, - { "vehicle": "beetle", "x": 21, "y": 18, "chance": 35, "rotation": 0 } + { "vehicle": "semi_truck", "x": 36, "y": 17, "chance": 80, "rotation": 180 }, + { "vehicle": "warehouse_vehicles", "x": 63, "y": 19, "chance": 50 }, + { "vehicle": "car", "x": 132, "y": 11, "chance": 35, "rotation": 0 }, + { "vehicle": "beetle", "x": 132, "y": 19, "chance": 35, "rotation": 180 }, + { "vehicle": "car_sports", "x": 161, "y": 18, "chance": 35, "rotation": 0 }, + { "vehicle": "electric_car", "x": 152, "y": 11, "chance": 35, "rotation": 180 }, + { "vehicle": "cube_van", "x": 164, "y": 11, "chance": 35, "rotation": 0 }, + { "vehicle": "car_mini", "x": 153, "y": 17, "chance": 35, "rotation": 0 }, + { "vehicle": "pickup", "x": 178, "y": 12, "chance": 35, "rotation": 180 }, + { "vehicle": "car", "x": 181, "y": 18, "chance": 35, "rotation": 0 }, + { "vehicle": "car", "x": 188, "y": 11, "chance": 35, "rotation": 0 }, + { "vehicle": "beetle", "x": 188, "y": 18, "chance": 35, "rotation": 0 }, + { "vehicle": "schoolbus", "x": 211, "y": 17, "chance": 35, "rotation": 90 } ] } }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_9" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "sssssssssssss...........", - "____________ss..###.....", - "_____________ss.#T#.....", - "______________s.###.....", - "______________s.....###.", - "______________s.....#T#.", - "______________s.....###.", - "______________ss........", - "ssss___________ssssssss.", - "_____________________ss.", - "______________________s.", - "______________________s.", - "______________________s.", - "______________________s.", - "______________________s.", - ",,,____________,,,,,,,s.", - "______________________s.", - "______________________s.", - "______________________s.", - "______________________s.", - "______________________s.", - "______________________s.", - ",,,____________,,,,,,,s.", - "______________________s." - ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 2, 23 ], "y": [ 2, 23 ], "density": 0.05 } ], - "place_vehicles": [ { "vehicle": "schoolbus", "x": 18, "y": 22, "chance": 35, "rotation": 90 } ] - } - }, { "type": "mapgen", "method": "json", @@ -3665,368 +3361,71 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "mall_a_73" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "..ssssssss__________s###", - ".....###.ss_________s.##", - "....##T##.s_________s...", - ".....###.ss_________ss..", - "..ssssssss___________sss", - ".ss_____________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______________________", - ".s______,______,______,_", - ".s______,______,______,_", - ".s______,______,______,_", - ".s______,______,______,_", - ".s______,______,______,_", - ".s______,______,______,_", - ".ss_____,______,______,_", - "..ssssssssssssssssssssss", - "........................" - ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 0, 23 ], "y": [ 0, 23 ], "density": 0.15 } ], - "place_vehicles": [ { "vehicle": "schoolbus", "x": 18, "y": 18, "chance": 35, "rotation": 0 } ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_74" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "#s______,______,______,_", - ".s______,______,______,_", - ".s______,______,______,_", - "ss______________________", - "s_______________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "______ss________________", - "_____ssss______,______,_", - "_____s..s______,______,_", - "_____s..s______,______,_", - "_____s..s______,______,_", - "_____s..s______,______,_", - "_____s..s______,______,_", - "____ss..ss_____,______,_", - "sssss....sssssssssssssss", - "........................" - ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 0, 23 ], "y": [ 0, 23 ], "density": 0.15 } ], - "place_vehicles": [ - { "vehicle": "car", "x": 11, "y": 18, "chance": 35, "rotation": 270 }, - { "vehicle": "hippie_van", "x": 18, "y": 17, "chance": 35, "rotation": 270 } - ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_75" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "_____,______s###s______,", - "_____,______s.#.s______,", - "_____,______s...s______,", - "____________ss.ss_______", - "_____________sss________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "_____________sss________", - "____________ss.ss_______", - "_____,______s...s______,", - "_____,______s.#.s______,", - "_____,______s###s______,", - "_____,______s#T#s______,", - "_____,______s###s______,", - "_____,______s.#.s______,", - "_____,_____ss...ss_____,", - "ssssssssssss.....sssssss", - "........................" - ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 0, 23 ], "y": [ 0, 23 ], "density": 0.15 } ], - "place_vehicles": [ - { "vehicle": "motorcycle", "x": 1, "y": 18, "chance": 35, "rotation": 270 }, - { "vehicle": "car_mini", "x": 8, "y": 18, "chance": 35, "rotation": 270 }, - { "vehicle": "car", "x": 19, "y": 17, "chance": 35, "rotation": 270 } - ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_76" ], - "weight": 250, + "om_terrain": [ + [ "mall_a_73", "mall_a_74", "mall_a_75", "mall_a_76", "mall_a_77", "mall_a_78", "mall_a_79", "mall_a_80", "mall_a_81" ] + ], "object": { "fill_ter": "t_floor", "rows": [ - "______,______,______s.#.", - "______,______,______s.#.", - "______,______,______s.#.", - "____________________ss.s", - "_____________________sss", - "________________________", - "________________________", - "_____________________,__", - "___________________,,,,_", - "___________________,,,,_", - "_____________________,__", - "________________________", - "________________________", - "_____________________sss", - "____________________ss.s", - "______,______,______s.#.", - "______,______,______s.#.", - "______,______,______s.#.", - "______,______,______s.#.", - "______,______,______s.#.", - "______,______,______s.#.", - "______,______,_____ss.#.", - "ssssssssssssssssssss.#.s", - ".......................s" + "ււГГГГГГГГ˽˽˽˽˽˽˽˽˽˽ГɱЯЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯЯɱГ˽˽˽˽˽˽˽˽˽˽ГГГГГГГГɱɱ", + "ւɱɱɱɱɱɱɱɱГГ˽˽˽˽˽˽˽˽˽ГɱЯЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱϻɱГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГɱϻɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱϻɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯЯɱГ˽˽˽˽˽˽˽˽˽ГГɱɱɱɱɱɱɱɱɱ", + "ւɱЯϻЯЯϻЯЯɱГ˽˽˽˽˽˽˽˽˽ГɱЯЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱϻɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽˽˽˽ГГГГ˽˽˽˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯЯɱГ˽˽˽˽˽˽˽˽˽ГɱЯЯϻЯЯЯЯЯɱ", + "ւɱɱɱɱɱɱɱɱГГ˽˽˽˽˽˽˽˽˽ГГɱɱГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГɱГГ˽˽˽˽˽˽˽˽˽ГϻϻГ˽˽˽˽˽˽˽˽˽ГГɱГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГɱГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГɱɱГГ˽˽˽˽˽˽˽˽˽ГГɱɱɱɱɱɱɱɱɱ", + "ււГГГГГГГГ˽˽˽˽˽˽˽˽˽˽˽ГГГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГГ˽˽˽˽˽˽˽˽˽˽ГГГГ˽˽˽˽˽˽˽˽˽˽ГГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГГГ˽˽˽˽˽˽˽˽˽˽˽ГГГГГГГГɱւ", + "ւГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔɔɔɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ɔ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГГ˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽ГГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГɱГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГɱГГ˽˽˽˽˽˽˽˽˽ГГГГ˽˽˽˽˽˽˽˽˽ГГɱГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГɱГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГГГГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽ГГɱЯɱГГ˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽˽˽˽ГɱɱГ˽˽˽˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГГГГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽ГГɱϻɱГГ˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱϻɱГ˽˽˽˽˽˽˽˽˽ГɱɱГ˽˽˽˽˽˽˽˽˽ГɱϻɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱϻɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГЯЯГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽ГГɱЯɱГГ˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽˽˽˽ГɱɱГ˽˽˽˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГЯЯГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГЯЯГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽ГГɱЯɱГГ˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽ɔɔ˽˽˽˽ГɱɱГ˽˽˽˽ɔɔ˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГЯЯГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГЯЯГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽ГГɱЯɱГГ˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽ɔɔ˽˽˽˽ГɱɱГ˽˽˽ɔɔɔɔ˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГЯЯГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽Гւ", + "ւГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽ГГɱЯɱГГ˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽ɔɔɔɔ˽˽˽ГГГГ˽˽˽˽ɔɔ˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱЯɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ГɱɱГ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽Гւ", + "ւГГ˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽ГГɱɱГГ˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽ГГɱɱɱГГ˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽ГГɱɱɱГ˽˽˽ɔɔ˽˽˽˽˽ГГ˽˽˽˽˽ɔɔ˽˽˽ГɱɱɱГГ˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽ГГɱɱɱГГ˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽ГГɱɱГГ˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽˽ɔ˽˽˽˽˽ГГւ", + "ււГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГււ", + "ւււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГւււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււււ" ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 0, 23 ], "y": [ 0, 23 ], "density": 0.15 } ], - "place_vehicles": [ - { "vehicle": "flatbed_truck", "x": 2, "y": 18, "chance": 35, "rotation": 270 }, - { "vehicle": "scooter", "x": 9, "y": 17, "chance": 35, "rotation": 90 }, - { "vehicle": "car", "x": 16, "y": 17, "chance": 35, "rotation": 270 } - ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_77" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "s______________________s", - "s______________________s", - "s_________ssss_________s", - "s_________s##s_________s", - "__________ssss__________", - "________________________", - "________________________", - "________________________", - "_______________________,", - "_______________________,", - "________________________", - "________________________", - "________________________", - "___________ss___________", - "s_________ssss_________s", - "s_________s##s_________s", - "s_________s##s_________s", - "s_________s##s_________s", - "s___,,____s##s____,,___s", - "s___,,____s##s___,,,,__s", - "s__,,,,___ssss____,,___s", - "s___,,_____ss_____,,___s", - "s______________________s", - "________________________" - ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 0, 23 ], "y": [ 0, 23 ], "density": 0.25 } ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_78" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - ".#.s______,______,______", - ".#.s______,______,______", - ".#.s______,______,______", - "s.ss____________________", - "sss_____________________", - "________________________", - "________________________", - "_,______________________", - ",,,_____________________", - ",,,_____________________", - "_,______________________", - "________________________", - "________________________", - "sss_____________________", - "s.ss____________________", - ".#.s______,______,______", - ".#.s______,______,______", - ".#.s______,______,______", - ".#.s______,______,______", - ".#.s______,______,______", - ".#.s______,______,______", - ".#.ss_____,______,______", - "s.#.ssssssssssssssssssss", - "s......................." - ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 0, 23 ], "y": [ 0, 23 ], "density": 0.15 } ], - "place_vehicles": [ - { "vehicle": "cube_van", "x": 6, "y": 17, "chance": 35, "rotation": 270 }, - { "vehicle": "motorcycle", "x": 13, "y": 17, "chance": 35, "rotation": 90 }, - { "vehicle": "car", "x": 20, "y": 17, "chance": 35, "rotation": 270 } - ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_79" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - ",______s###s______,_____", - ",______s.#.s______,_____", - ",______s...s______,_____", - "_______sssss____________", - "________sss_____________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________sss_____________", - "_______ss.ss____________", - ",______s...s______,_____", - ",______s.#.s______,_____", - ",______s###s______,_____", - ",______s#T#s______,_____", - ",______s###s______,_____", - ",______s.#.s______,_____", - ",_____ss...ss_____,_____", - "sssssss.....ssssssssssss", - "........................" - ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 0, 23 ], "y": [ 0, 23 ], "density": 0.15 } ], - "place_vehicles": [ - { "vehicle": "hippie_van", "x": 3, "y": 17, "chance": 35, "rotation": 270 }, - { "vehicle": "car", "x": 14, "y": 18, "chance": 35, "rotation": 90 }, - { "vehicle": "car_sports", "x": 21, "y": 17, "chance": 35, "rotation": 270 } - ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_80" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "_,______,______,______s#", - "_,______,______,______s.", - "_,______,______,______s.", - "______________________ss", - "_______________________s", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________________", - "________________ss______", - "_,______,______ssss_____", - "_,______,______s..s_____", - "_,______,______s..s_____", - "_,______,______s..s_____", - "_,______,______s..s_____", - "_,______,______s..s_____", - "_,______,_____ss..ss____", - "sssssssssssssss....sssss", - "........................" - ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 0, 23 ], "y": [ 0, 23 ], "density": 0.15 } ], - "place_vehicles": [ - { "vehicle": "electric_car", "x": 4, "y": 17, "chance": 35, "rotation": 270 }, - { "vehicle": "motorcycle", "x": 11, "y": 18, "chance": 35, "rotation": 270 }, - { "vehicle": "car", "x": 21, "y": 17, "chance": 35, "rotation": 270 } - ] - } - }, - { - "type": "mapgen", - "method": "json", - "om_terrain": [ "mall_a_81" ], - "weight": 250, - "object": { - "fill_ter": "t_floor", - "rows": [ - "###s__________ssssssss..", - "##.s_________ss.###.....", - "...s_________s.##T##....", - "..ss_________ss.###.....", - "sss___________ssssssss..", - "_____________________ss.", - "______________________s.", - "______________________s.", - "______________________s.", - "______________________s.", - "______________________s.", - "______________________s.", - "______________________s.", - "______________________s.", - "______________________s.", - "_,______,______,______s.", - "_,______,______,______s.", - "_,______,______,______s.", - "_,______,______,______s.", - "_,______,______,______s.", - "_,______,______,______s.", - "_,______,______,_____ss.", - "ssssssssssssssssssssss..", - "........................" + "palettes": [ "mall_palette_2" ], + "place_monsters": [ + { "monster": "GROUP_MALL", "x": [ 0, 23 ], "y": [ 0, 23 ], "density": 0.15 }, + { "monster": "GROUP_MALL", "x": [ 24, 47 ], "y": [ 0, 23 ], "density": 0.15 }, + { "monster": "GROUP_MALL", "x": [ 48, 71 ], "y": [ 0, 23 ], "density": 0.15 }, + { "monster": "GROUP_MALL", "x": [ 72, 95 ], "y": [ 0, 23 ], "density": 0.15 }, + { "monster": "GROUP_MALL", "x": [ 96, 119 ], "y": [ 0, 23 ], "density": 0.15 }, + { "monster": "GROUP_MALL", "x": [ 120, 143 ], "y": [ 0, 23 ], "density": 0.15 }, + { "monster": "GROUP_MALL", "x": [ 144, 167 ], "y": [ 0, 23 ], "density": 0.15 }, + { "monster": "GROUP_MALL", "x": [ 168, 191 ], "y": [ 0, 23 ], "density": 0.15 }, + { "monster": "GROUP_MALL", "x": [ 192, 215 ], "y": [ 0, 23 ], "density": 0.15 } ], - "palettes": [ "mall_palette" ], - "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 0, 23 ], "y": [ 0, 23 ], "density": 0.15 } ], "place_vehicles": [ - { "vehicle": "semi_truck", "x": 4, "y": 15, "chance": 35, "rotation": 270 }, - { "vehicle": "semi_truck", "x": 11, "y": 15, "chance": 35, "rotation": 270 }, - { "vehicle": "car", "x": 18, "y": 17, "chance": 35, "rotation": 270 } + { "vehicle": "schoolbus", "x": 18, "y": 18, "chance": 35, "rotation": 0 }, + { "vehicle": "car", "x": 35, "y": 18, "chance": 35, "rotation": 270 }, + { "vehicle": "hippie_van", "x": 42, "y": 17, "chance": 35, "rotation": 270 }, + { "vehicle": "motorcycle", "x": 49, "y": 18, "chance": 35, "rotation": 270 }, + { "vehicle": "car_mini", "x": 56, "y": 18, "chance": 35, "rotation": 270 }, + { "vehicle": "car", "x": 67, "y": 17, "chance": 35, "rotation": 270 }, + { "vehicle": "flatbed_truck", "x": 73, "y": 13, "chance": 35, "rotation": 90 }, + { "vehicle": "scooter", "x": 81, "y": 17, "chance": 35, "rotation": 90 }, + { "vehicle": "car", "x": 88, "y": 17, "chance": 35, "rotation": 270 }, + { "vehicle": "cube_van", "x": 126, "y": 17, "chance": 35, "rotation": 270 }, + { "vehicle": "motorcycle", "x": 133, "y": 17, "chance": 35, "rotation": 90 }, + { "vehicle": "car", "x": 140, "y": 17, "chance": 35, "rotation": 270 }, + { "vehicle": "hippie_van", "x": 147, "y": 17, "chance": 35, "rotation": 270 }, + { "vehicle": "car", "x": 158, "y": 18, "chance": 35, "rotation": 90 }, + { "vehicle": "car_sports", "x": 165, "y": 17, "chance": 35, "rotation": 270 }, + { "vehicle": "electric_car", "x": 172, "y": 17, "chance": 35, "rotation": 270 }, + { "vehicle": "motorcycle", "x": 179, "y": 18, "chance": 35, "rotation": 270 }, + { "vehicle": "car", "x": 189, "y": 17, "chance": 35, "rotation": 270 }, + { "vehicle": "semi_truck", "x": 194, "y": 14, "chance": 35, "rotation": 270 }, + { "vehicle": "semi_truck", "x": 203, "y": 14, "chance": 35, "rotation": 270 }, + { "vehicle": "car", "x": 210, "y": 17, "chance": 35, "rotation": 270 } ] } } diff --git a/data/json/mapgen_palettes/mall_palette.json b/data/json/mapgen_palettes/mall_palette.json index 8138876cfd99d..c49c21418fc66 100644 --- a/data/json/mapgen_palettes/mall_palette.json +++ b/data/json/mapgen_palettes/mall_palette.json @@ -196,14 +196,24 @@ "u": [ "f_vending_c", "f_vending_reinforced" ], "v": "f_gun_safe_el", "w": "f_safe_l", + "Я": "f_flower_tulip", "y": [ "f_indoor_plant", "f_indoor_plant_y" ], "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, "terrain": { + "ɔ": "t_pavement_y", + "Г": "t_sidewalk", + "˽": "t_pavement", + "ɱ": "t_shrub_hydrangea", + "ϻ": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "Я": "t_region_groundcover_urban", + "ւ": "t_region_groundcover_urban", "Ŋ": "t_elevator_control_off", "ȴ": "t_gutter_downspout", "ȸ": "t_gutter_drop", + "θ": "t_door_metal_pickable", " ": "t_open_air", + "Ƨ": "t_open_air_rooved", ".": "t_linoleum_gray", ",": "t_linoleum_white", "_": "t_thconc_floor", From a6bb3927b4d1d37cac6b5fc5ee49f84bce3b7927 Mon Sep 17 00:00:00 2001 From: olanti-p Date: Sun, 3 May 2020 16:47:43 +0300 Subject: [PATCH 25/48] Fix regression related to aim-and-fire losing targets not identified by pc.get_targetable_creatures (e.g. behind fences) --- src/ranged.cpp | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/ranged.cpp b/src/ranged.cpp index 63b062405d78b..13201c4e52fa2 100644 --- a/src/ranged.cpp +++ b/src/ranged.cpp @@ -247,6 +247,9 @@ class target_ui // Calculates distance from 'src'. For consistency, prefer using this over rl_dist. int dist_fn( const tripoint &p ); + // Checks if player can see target. For consistency, prefer using this over pc.sees() + bool pl_can_target( const player &pc, const Creature *cr ); + // Set creature (or tile) under cursor as player's last target void set_last_target( player &pc ); @@ -1888,8 +1891,15 @@ target_handler::trajectory target_ui::run( player &pc, ExitCode *exit_code ) // We've lost our target from previous turn action.clear(); attack_was_confirmed = false; + pc.last_target.reset(); } set_cursor_pos( pc, initial_dst ); + if( dst != initial_dst ) { + // Our target moved out of range + action.clear(); + attack_was_confirmed = false; + pc.last_target.reset(); + } // Event loop! ExitCode loop_exit_code; @@ -2227,7 +2237,7 @@ bool target_ui::set_cursor_pos( player &pc, const tripoint &new_pos ) // Cache creature under cursor if( src != dst ) { Creature *cr = g->critter_at( dst, true ); - if( cr && ( pc.sees( *cr ) || pc.sees_with_infrared( *cr ) ) ) { + if( cr && pl_can_target( pc, cr ) ) { dst_critter = cr; } else { dst_critter = nullptr; @@ -2285,15 +2295,14 @@ void target_ui::update_target_list( player &pc ) bool target_ui::choose_initial_target( player &pc, bool reentered, tripoint &new_dst ) { // Determine if we had a target and it is still visible - const auto old_target = std::find( targets.begin(), targets.end(), pc.last_target.lock().get() ); - if( old_target == targets.end() ) { - // No luck - pc.last_target.reset(); - } else { - // There it is! - new_dst = ( *old_target )->pos(); - pc.last_target_pos = g->m.getabs( new_dst ); - return true; + if( !pc.last_target.expired() ) { + Creature *cr = pc.last_target.lock().get(); + if( pl_can_target( pc, cr ) ) { + // There it is! + new_dst = cr->pos(); + pc.last_target_pos = g->m.getabs( new_dst ); + return true; + } } // Check if we were aiming at a tile or a (now missing) creature in a tile @@ -2369,6 +2378,11 @@ int target_ui::dist_fn( const tripoint &p ) return static_cast( std::round( trig_dist( src, p ) ) ); } +bool target_ui::pl_can_target( const player &pc, const Creature *cr ) +{ + return pc.sees( *cr ) || pc.sees_with_infrared( *cr ); +} + void target_ui::set_last_target( player &pc ) { pc.last_target_pos = g->m.getabs( dst ); From 6a138fe45293a3e56dc3fd37585969b646381381 Mon Sep 17 00:00:00 2001 From: LaVeyanFiend Date: Sun, 3 May 2020 12:12:09 -0400 Subject: [PATCH 26/48] Zombie scientists can't open doors --- data/json/monsters/zed_lab.json | 1 - 1 file changed, 1 deletion(-) diff --git a/data/json/monsters/zed_lab.json b/data/json/monsters/zed_lab.json index 057ff5e12ce5a..15d9e964635d5 100644 --- a/data/json/monsters/zed_lab.json +++ b/data/json/monsters/zed_lab.json @@ -46,7 +46,6 @@ "REVIVES", "PUSH_MON", "PATH_AVOID_DANGER_1", - "CAN_OPEN_DOORS", "PRIORITIZE_TARGETS", "FILTHY" ] From 54e847789223aeab7b38ad146c1aab9e9124cf65 Mon Sep 17 00:00:00 2001 From: LaVeyanFiend Date: Sun, 3 May 2020 12:14:05 -0400 Subject: [PATCH 27/48] Mi-go can open doors --- data/json/monsters/mi-go.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/data/json/monsters/mi-go.json b/data/json/monsters/mi-go.json index bcd45a915fe74..862a8b5b86f4f 100644 --- a/data/json/monsters/mi-go.json +++ b/data/json/monsters/mi-go.json @@ -43,6 +43,7 @@ "NO_BREATHE", "ARTHROPOD_BLOOD", "PATH_AVOID_DANGER_2", + "CAN_OPEN_DOORS", "PRIORITIZE_TARGETS" ] }, @@ -92,6 +93,7 @@ "NO_BREATHE", "ARTHROPOD_BLOOD", "PATH_AVOID_DANGER_2", + "CAN_OPEN_DOORS", "PRIORITIZE_TARGETS" ] }, @@ -140,6 +142,7 @@ "NO_BREATHE", "ARTHROPOD_BLOOD", "PATH_AVOID_DANGER_2", + "CAN_OPEN_DOORS", "PRIORITIZE_TARGETS" ] }, @@ -192,6 +195,7 @@ "NO_BREATHE", "ARTHROPOD_BLOOD", "PATH_AVOID_DANGER_2", + "CAN_OPEN_DOORS", "PRIORITIZE_TARGETS" ] }, @@ -243,6 +247,7 @@ "NO_BREATHE", "ARTHROPOD_BLOOD", "PATH_AVOID_DANGER_2", + "CAN_OPEN_DOORS", "PRIORITIZE_TARGETS" ] }, @@ -301,6 +306,7 @@ "NO_BREATHE", "ARTHROPOD_BLOOD", "PATH_AVOID_DANGER_2", + "CAN_OPEN_DOORS", "PRIORITIZE_TARGETS" ] } From 70df07c251e90250d6334325566e9b00d11ddd1b Mon Sep 17 00:00:00 2001 From: LaVeyanFiend Date: Sun, 3 May 2020 12:14:57 -0400 Subject: [PATCH 28/48] Zombie masters and necros can open doors --- data/json/monsters/zed_misc.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/data/json/monsters/zed_misc.json b/data/json/monsters/zed_misc.json index 950d42530b591..c6f117909f5cb 100644 --- a/data/json/monsters/zed_misc.json +++ b/data/json/monsters/zed_misc.json @@ -645,6 +645,7 @@ "NO_BREATHE", "REVIVES", "PATH_AVOID_DANGER_2", + "CAN_OPEN_DOORS", "PRIORITIZE_TARGETS", "FILTHY" ] @@ -692,6 +693,7 @@ "NO_BREATHE", "REVIVES", "PATH_AVOID_DANGER_1", + "CAN_OPEN_DOORS", "PRIORITIZE_TARGETS", "FILTHY" ] From 86ab3c83ea75fbb31b2b9ddb8ea4a4c798d4509b Mon Sep 17 00:00:00 2001 From: NastyNate2612 <59994204+NastyNate2612@users.noreply.github.com> Date: Sun, 3 May 2020 14:07:59 -0700 Subject: [PATCH 29/48] Extracts and Concentrates pt 6 (recipes) (#37959) all the crafting recipes and deconstruction recipe for the vac oven --- data/json/recipes/other/tool.json | 256 +++++++++++++++++ data/json/recipes/recipe_deconstruction.json | 8 + .../json/recipes/recipe_medsandchemicals.json | 266 ++++++++++++++++++ 3 files changed, 530 insertions(+) diff --git a/data/json/recipes/other/tool.json b/data/json/recipes/other/tool.json index c8ea918bf8db1..ceafc514a1678 100644 --- a/data/json/recipes/other/tool.json +++ b/data/json/recipes/other/tool.json @@ -649,6 +649,262 @@ "autolearn": true, "components": [ [ [ "straw_pile", 3 ], [ "birchbark", 5 ] ] ] }, + { + "type": "recipe", + "result": "closed_loop_extractor_small", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "skills_required": [ "mechanics", 3 ], + "difficulty": 8, + "time": "16 h", + "autolearn": false, + "book_learn": [ [ "textbook_extraction", 5 ] ], + "reversible": true, + "using": [ [ "welding_standard", 5 ], [ "blacksmithing_standard", 2 ], [ "steel_standard", 5 ] ], + "qualities": [ + { "id": "HAMMER", "level": 3 }, + { "id": "HAMMER_FINE", "level": 1 }, + { "id": "SAW_M", "level": 2 }, + { "id": "WRENCH", "level": 2 }, + { "id": "SAW_M_FINE", "level": 1 }, + { "id": "WRENCH_FINE", "level": 1 }, + { "id": "SCREW", "level": 1 }, + { "id": "SCREW_FINE", "level": 1 }, + { "id": "DRILL", "level": 2 }, + { "id": "FILE", "level": 2 } + ], + "tools": [ [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ] ], + "components": [ + [ [ "jerrycan_big", 1 ], [ "metal_tank_little", 1 ] ], + [ [ "pipe", 1 ] ], + [ [ "hose", 3 ] ], + [ [ "recovery_pump", 1 ] ], + [ [ "gasket_plastic", 4 ] ], + [ [ "metal_funnel", 1 ] ] + ] + }, + { + "type": "recipe", + "result": "closed_loop_extractor_large", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "skills_required": [ "mechanics", 4 ], + "difficulty": 8, + "time": "24 h", + "autolearn": false, + "book_learn": [ [ "textbook_extraction", 5 ] ], + "reversible": true, + "using": [ [ "welding_standard", 10 ], [ "blacksmithing_standard", 5 ], [ "steel_standard", 10 ] ], + "qualities": [ + { "id": "HAMMER", "level": 3 }, + { "id": "HAMMER_FINE", "level": 1 }, + { "id": "SAW_M", "level": 2 }, + { "id": "WRENCH", "level": 2 }, + { "id": "SAW_M_FINE", "level": 1 }, + { "id": "WRENCH_FINE", "level": 1 }, + { "id": "SCREW", "level": 1 }, + { "id": "SCREW_FINE", "level": 1 }, + { "id": "DRILL", "level": 2 }, + { "id": "FILE", "level": 2 } + ], + "tools": [ [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ] ], + "components": [ + [ [ "30gal_drum", 1 ], [ "metal_tank", 1 ] ], + [ [ "pipe", 3 ] ], + [ [ "hose", 10 ] ], + [ [ "recovery_pump", 1 ] ], + [ [ "gasket_plastic", 14 ] ], + [ [ "metal_funnel", 3 ] ] + ] + }, + { + "type": "recipe", + "result": "oil_extractor_crude", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "skills_required": [ "mechanics", 2 ], + "difficulty": 4, + "time": "30 m", + "reversible": true, + "autolearn": false, + "book_learn": [ [ "textbook_extraction", 3 ] ], + "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "SAW_M_FINE", "level": 1 }, { "id": "DRILL", "level": 2 } ], + "components": [ + [ [ "55gal_drum", 1 ] ], + [ [ "pipe", 1 ], [ "stick_long", 1 ], [ "pointy_stick", 1 ] ], + [ [ "water_faucet", 1 ] ], + [ [ "duct_tape", 10 ], [ "gasket_plastic", 1 ] ] + ] + }, + { + "type": "recipe", + "result": "vac_pump", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "skills_required": [ "mechanics", 2 ], + "difficulty": 4, + "time": "12 h", + "autolearn": false, + "reversible": true, + "book_learn": [ [ "textbook_extraction", 3 ] ], + "using": [ [ "welding_standard", 10 ], [ "blacksmithing_standard", 5 ] ], + "qualities": [ + { "id": "HAMMER", "level": 3 }, + { "id": "HAMMER_FINE", "level": 1 }, + { "id": "SAW_M", "level": 2 }, + { "id": "WRENCH", "level": 2 }, + { "id": "SAW_M_FINE", "level": 1 }, + { "id": "WRENCH_FINE", "level": 1 }, + { "id": "SCREW", "level": 1 }, + { "id": "SCREW_FINE", "level": 1 }, + { "id": "DRILL", "level": 2 }, + { "id": "FILE", "level": 2 } + ], + "tools": [ [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ] ], + "components": [ + [ [ "pipe", 2 ] ], + [ [ "hose", 1 ] ], + [ [ "gasket_plastic", 2 ] ], + [ [ "well_pump", 1 ] ], + [ [ "drivebelt", 1 ], [ "drivebelt_makeshift", 1 ] ] + ] + }, + { + "type": "recipe", + "result": "filter_paper_qualitative", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "difficulty": 3, + "time": "1 m", + "batch_time_factors": [ 75, 4 ], + "autolearn": false, + "book_learn": [ [ "textbook_extraction", 2 ] ], + "qualities": [ { "id": "CUT", "level": 1 } ], + "components": [ [ [ "paper", 2 ] ] ] + }, + { + "type": "recipe", + "result": "filter_paper_quantitative", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "difficulty": 3, + "time": "1 m", + "batch_time_factors": [ 75, 4 ], + "autolearn": false, + "book_learn": [ [ "textbook_extraction", 2 ] ], + "qualities": [ { "id": "CUT", "level": 1 } ], + "components": [ [ [ "paper", 2 ] ] ] + }, + { + "type": "recipe", + "result": "recovery_pump", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "skills_required": [ "mechanics", 2 ], + "difficulty": 4, + "time": "12 h", + "autolearn": false, + "reversible": true, + "book_learn": [ [ "textbook_extraction", 3 ] ], + "using": [ [ "welding_standard", 10 ], [ "blacksmithing_standard", 5 ] ], + "qualities": [ + { "id": "HAMMER", "level": 3 }, + { "id": "HAMMER_FINE", "level": 1 }, + { "id": "SAW_M", "level": 2 }, + { "id": "WRENCH", "level": 2 }, + { "id": "SAW_M_FINE", "level": 1 }, + { "id": "WRENCH_FINE", "level": 1 }, + { "id": "SCREW", "level": 1 }, + { "id": "SCREW_FINE", "level": 1 }, + { "id": "DRILL", "level": 2 }, + { "id": "FILE", "level": 2 } + ], + "tools": [ [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ] ], + "components": [ [ [ "pipe", 4 ] ], [ [ "hose", 2 ] ], [ [ "gasket_plastic", 2 ] ], [ [ "well_pump", 1 ] ] ] + }, + { + "type": "recipe", + "result": "gasket_plastic", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "difficulty": 2, + "time": "20 m", + "autolearn": false, + "book_learn": [ [ "textbook_extraction", 2 ], [ "textbook_fabrication", 2 ] ], + "tools": [ [ [ "surface_heat", 5, "LIST" ] ], [ [ "mold_plastic", -1 ] ] ], + "components": [ [ [ "plastic_chunk", 1 ] ] ] + }, + { + "type": "recipe", + "result": "vac_oven_small", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "skills_required": [ "mechanics", 3 ], + "difficulty": 8, + "time": "8 h", + "autolearn": false, + "book_learn": [ [ "textbook_extraction", 5 ] ], + "reversible": true, + "using": [ [ "welding_standard", 5 ], [ "blacksmithing_standard", 2 ], [ "steel_standard", 5 ] ], + "qualities": [ + { "id": "HAMMER", "level": 3 }, + { "id": "HAMMER_FINE", "level": 1 }, + { "id": "SAW_M", "level": 2 }, + { "id": "WRENCH", "level": 2 }, + { "id": "SAW_M_FINE", "level": 1 }, + { "id": "WRENCH_FINE", "level": 1 }, + { "id": "SCREW", "level": 1 }, + { "id": "SCREW_FINE", "level": 1 }, + { "id": "DRILL", "level": 2 }, + { "id": "FILE", "level": 2 } + ], + "tools": [ [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ] ], + "components": [ + [ [ "metal_tank", 1 ] ], + [ [ "pipe", 2 ] ], + [ [ "hose", 2 ] ], + [ [ "vac_pump", 1 ] ], + [ [ "gasket_plastic", 2 ] ], + [ [ "element", 3 ] ], + [ [ "sheet_metal", 3 ] ], + [ [ "glass_sheet", 1 ] ] + ] + }, + { + "type": "recipe", + "result": "vac_oven_small_full", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "skills_required": [ "mechanics", 3 ], + "difficulty": 8, + "time": "30 m", + "book_learn": [ [ "textbook_extraction", 5 ] ], + "components": [ [ [ "paper", 6 ] ], [ [ "hi_q_crude_oil", 92 ] ], [ [ "gasket_plastic", 2 ] ], [ [ "vac_oven_small", 1 ] ] ] + }, + { + "type": "recipe", + "result": "dab_pen", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "fabrication", + "difficulty": 2, + "time": "1 m", + "reversible": true, + "book_learn": [ [ "textbook_extraction", 4 ] ], + "qualities": [ { "id": "CUT", "level": 1 } ], + "tools": [ [ [ "mold_plastic", -1 ] ], [ [ "surface_heat", 5, "LIST" ] ] ], + "components": [ [ [ "plastic_chunk", 1 ] ], [ [ "glass_shard", 1 ] ] ] + }, { "result": "dog_whistle_wood", "type": "recipe", diff --git a/data/json/recipes/recipe_deconstruction.json b/data/json/recipes/recipe_deconstruction.json index 9c246ff37e291..34e04e178da92 100644 --- a/data/json/recipes/recipe_deconstruction.json +++ b/data/json/recipes/recipe_deconstruction.json @@ -90,6 +90,14 @@ "qualities": [ { "id": "HAMMER", "level": 1 } ], "components": [ [ [ "silver_small", 2 ] ], [ [ "gold_small", 2 ] ] ] }, + { + "result": "vac_oven_small_done", + "type": "uncraft", + "skill_used": "fabrication", + "difficulty": 1, + "time": "15 m", + "components": [ [ [ "hi_q_shatter", 420 ] ], [ [ "vac_oven_small", 1 ] ] ] + }, { "result": "ear_spool", "type": "uncraft", diff --git a/data/json/recipes/recipe_medsandchemicals.json b/data/json/recipes/recipe_medsandchemicals.json index 864bf94705b93..4c79a4add47a3 100644 --- a/data/json/recipes/recipe_medsandchemicals.json +++ b/data/json/recipes/recipe_medsandchemicals.json @@ -1293,5 +1293,271 @@ "autolearn": true, "qualities": [ { "id": "CHISEL", "level": 2 }, { "id": "HAMMER", "level": 2 } ], "components": [ [ [ "material_rhodonite", 1 ] ] ] + }, + { + "type": "recipe", + "result": "hi_q_crude_oil", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 272, + "time": "180 m", + "book_learn": [ [ "textbook_extraction", 4 ] ], + "tools": [ [ [ "butane_tank", 1 ] ], [ [ "closed_loop_extractor_small_on", -1 ] ] ], + "components": [ + [ [ "gasket_plastic", 3 ] ], + [ [ "filter_paper_qualitative", 1 ] ], + [ [ "filter_paper_quantitative", 1 ] ], + [ [ "weed", 1816 ] ] + ] + }, + { + "type": "recipe", + "result": "hi_q_crude_oil", + "id_suffix": "using_pipe", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 3, + "batch_time_factors": [ 80, 3 ], + "charges": 1, + "time": "15 m", + "book_learn": [ [ "textbook_extraction", 4 ] ], + "tools": [ [ [ "butane_can", 1 ], [ "butane_tank", 1 ] ], [ [ "pipe", -1 ] ] ], + "components": [ [ [ "filter_paper_qualitative", 1 ] ], [ [ "filter_paper_quantitative", 1 ] ], [ [ "weed", 8 ] ] ] + }, + { + "type": "recipe", + "result": "lo_q_crude_oil", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 181, + "time": "60 m", + "book_learn": [ [ "textbook_extraction", 4 ] ], + "tools": [ [ [ "butane_tank", 1 ] ], [ [ "closed_loop_extractor_large_on", -1 ] ] ], + "components": [ + [ [ "gasket_plastic", 3 ] ], + [ [ "filter_paper_qualitative", 1 ] ], + [ [ "filter_paper_quantitative", 1 ] ], + [ [ "weed", 1816 ] ] + ] + }, + { + "type": "recipe", + "result": "lo_q_crude_oil_ethanol", + "id_suffix": "using_oil_extractor_crude", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 1015, + "time": "120 m", + "book_learn": [ [ "textbook_extraction", 4 ] ], + "tools": [ + [ [ "pointy_stick", -1 ], [ "pipe", -1 ] ], + [ [ "oil_extractor_crude", -1 ] ], + [ + [ "funnel", -1 ], + [ "makeshift_funnel", -1 ], + [ "birchbark_funnel", -1 ], + [ "metal_funnel", -1 ], + [ "leather_funnel", -1 ] + ] + ], + "components": [ + [ [ "chem_ethanol", 947 ] ], + [ [ "filter_paper_qualitative", 1 ] ], + [ [ "filter_paper_quantitative", 1 ] ], + [ [ "weed", 454 ] ] + ] + }, + { + "type": "recipe", + "result": "lo_q_crude_oil_ethanol", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 10, + "time": "4 m", + "batch_time_factors": [ 80, 4 ], + "book_learn": [ [ "textbook_extraction", 4 ] ], + "qualities": [ { "id": "CONTAIN", "level": 1 }, { "id": "BOIL", "level": 1 } ], + "tools": [ [ [ "pointy_stick", -1 ], [ "pipe", -1 ] ], [ [ "surface_heat", 5, "LIST" ] ] ], + "components": [ [ [ "lo_q_crude_oil", 1 ] ], [ [ "chem_ethanol", 9 ] ] ] + }, + { + "type": "recipe", + "result": "hi_q_crude_oil_ethanol", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 10, + "time": "4 m", + "batch_time_factors": [ 80, 4 ], + "book_learn": [ [ "textbook_extraction", 4 ] ], + "qualities": [ { "id": "CONTAIN", "level": 1 }, { "id": "BOIL", "level": 1 } ], + "tools": [ [ [ "pointy_stick", -1 ], [ "pipe", -1 ] ], [ [ "surface_heat", 5, "LIST" ] ] ], + "components": [ [ [ "hi_q_crude_oil", 1 ] ], [ [ "chem_ethanol", 9 ] ] ] + }, + { + "type": "recipe", + "result": "hi_q_wax", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 2, + "charges": 4, + "time": "45 m", + "batch_time_factors": [ 100, 1 ], + "book_learn": [ [ "textbook_extraction", 4 ] ], + "qualities": [ { "id": "CONTAIN", "level": 1 }, { "id": "BOIL", "level": 1 } ], + "tools": [ [ [ "pointy_stick", -1 ], [ "pipe", -1 ] ], [ [ "surface_heat", 5, "LIST" ] ] ], + "components": [ [ [ "hi_q_crude_oil", 1 ] ] ] + }, + { + "type": "recipe", + "result": "lo_q_crude_oil_ethanol_filtered", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 196, + "time": "10 m", + "batch_time_factors": [ 80, 4 ], + "book_learn": [ [ "textbook_extraction", 4 ] ], + "tools": [ [ [ "flask_glass", -1 ] ], [ [ "vac_pump_on", -1 ] ], [ [ "rag", -1 ] ] ], + "components": [ [ [ "filter_paper_qualitative", 1 ] ], [ [ "filter_paper_quantitative", 1 ] ], [ [ "lo_q_crude_oil_ethanol", 200 ] ] ] + }, + { + "type": "recipe", + "result": "hi_q_crude_oil_ethanol_filtered", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 196, + "time": "5 m", + "batch_time_factors": [ 80, 4 ], + "book_learn": [ [ "textbook_extraction", 4 ] ], + "tools": [ [ [ "flask_glass", -1 ] ], [ [ "vac_pump_on", -1 ] ], [ [ "rag", -1 ] ] ], + "components": [ [ [ "filter_paper_qualitative", 1 ] ], [ [ "filter_paper_quantitative", 1 ] ], [ [ "hi_q_crude_oil_ethanol", 200 ] ] ] + }, + { + "type": "recipe", + "result": "lo_q_crude_oil_filtered", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 25, + "time": "30 m", + "batch_time_factors": [ 80, 4 ], + "byproducts": [ [ "chem_ethanol", 1 ] ], + "book_learn": [ [ "textbook_extraction", 4 ] ], + "qualities": [ { "id": "CONCENTRATE", "level": 1 } ], + "tools": [ [ [ "vac_pump_on", -1 ] ] ], + "components": [ [ [ "lo_q_crude_oil_ethanol_filtered", 300 ] ] ] + }, + { + "type": "recipe", + "result": "hi_q_crude_oil_filtered", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 27, + "time": "30 m", + "batch_time_factors": [ 80, 4 ], + "byproducts": [ [ "chem_ethanol", 1 ] ], + "book_learn": [ [ "textbook_extraction", 4 ] ], + "qualities": [ { "id": "CONCENTRATE", "level": 1 } ], + "tools": [ [ [ "vac_pump_on", -1 ] ] ], + "components": [ [ [ "hi_q_crude_oil_ethanol_filtered", 300 ] ] ] + }, + { + "type": "recipe", + "result": "hi_q_distillate_heads", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 600, + "time": "180 m", + "byproducts": [ [ "hi_q_distillate_tails", 300 ] ], + "batch_time_factors": [ 90, 1 ], + "book_learn": [ [ "textbook_extraction", 4 ] ], + "qualities": [ { "id": "FINE_DISTILL", "level": 1 } ], + "tools": [ [ [ "vac_pump_on", -1 ] ] ], + "components": [ [ [ "hi_q_crude_oil_filtered", 100 ] ] ] + }, + { + "type": "recipe", + "result": "hi_q_distillate_heads", + "id_suffix": "using lo_q_crude", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 533, + "time": "180 m", + "byproducts": [ [ "hi_q_distillate_tails", 267 ] ], + "batch_time_factors": [ 90, 1 ], + "book_learn": [ [ "textbook_extraction", 4 ] ], + "qualities": [ { "id": "FINE_DISTILL", "level": 1 } ], + "tools": [ [ [ "vac_pump_on", -1 ] ] ], + "components": [ [ [ "lo_q_crude_oil_filtered", 100 ] ] ] + }, + { + "type": "recipe", + "result": "hi_q_distillate_heads", + "id_suffix": "using_tails", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 633, + "time": "180 m", + "byproducts": [ [ "hi_q_distillate_tails", 317 ] ], + "batch_time_factors": [ 90, 1 ], + "book_learn": [ [ "textbook_extraction", 4 ] ], + "qualities": [ { "id": "FINE_DISTILL", "level": 1 } ], + "tools": [ [ [ "vac_pump_on", -1 ] ] ], + "components": [ [ [ "hi_q_distillate_tails", 1000 ] ] ] + }, + { + "type": "recipe", + "result": "hi_q_distillate", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "cooking", + "difficulty": 6, + "charges": 633, + "time": "180 m", + "byproducts": [ [ "hi_q_distillate_tails", 317 ] ], + "batch_time_factors": [ 90, 1 ], + "book_learn": [ [ "textbook_extraction", 4 ] ], + "qualities": [ { "id": "FINE_DISTILL", "level": 1 } ], + "tools": [ [ [ "vac_pump_on", -1 ] ] ], + "components": [ [ [ "hi_q_distillate_heads", 1000 ] ] ] + }, + { + "type": "recipe", + "result": "hi_q_distillate_cart", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_DRUGS", + "skill_used": "fabrication", + "difficulty": 2, + "time": "5 m", + "charges": 50, + "batch_time_factors": [ 80, 1 ], + "book_learn": [ [ "textbook_extraction", 4 ] ], + "qualities": [ { "id": "CONTAIN", "level": 1 } ], + "tools": [ [ [ "syringe", -1 ] ], [ [ "surface_heat", 1, "LIST" ] ] ], + "components": [ [ [ "hi_q_distillate", 10 ] ], [ [ "element", 1 ] ], [ [ "plastic_chunk", 1 ] ], [ [ "glass_shard", 1 ] ] ] } ] From 964fe80a7e8ead3f73e751fd7a3f3d7eadd1b411 Mon Sep 17 00:00:00 2001 From: akirashirosawa <38557723+akirashirosawa@users.noreply.github.com> Date: Mon, 4 May 2020 00:54:11 +0300 Subject: [PATCH 30/48] Fix localized_comparator for macOS (#40100) --- src/translations.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/translations.cpp b/src/translations.cpp index 488b9abab45d2..f7eff7ad15d7c 100644 --- a/src/translations.cpp +++ b/src/translations.cpp @@ -698,5 +698,12 @@ std::string operator+( const translation &lhs, const translation &rhs ) bool localized_comparator::operator()( const std::string &l, const std::string &r ) const { +#if defined(MACOSX) + CFStringRef lr = CFStringCreateWithCStringNoCopy( kCFAllocatorDefault, l.c_str(), + kCFStringEncodingUTF8, kCFAllocatorNull ); + CFStringRef rr = CFStringCreateWithCStringNoCopy( kCFAllocatorDefault, r.c_str(), + kCFStringEncodingUTF8, kCFAllocatorNull ); + return CFStringCompare( lr, rr, kCFCompareLocalized ) < 0; +#endif return std::locale()( l, r ); } From 71827cfa5c0484ca1d1d925049bffef89eb0841e Mon Sep 17 00:00:00 2001 From: Jerimee Richir Date: Sun, 3 May 2020 17:56:40 -0400 Subject: [PATCH 31/48] Update JSON_INHERITANCE.md (#40107) --- doc/JSON_INHERITANCE.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/JSON_INHERITANCE.md b/doc/JSON_INHERITANCE.md index ee53b72e8d6bf..456edc7a77554 100644 --- a/doc/JSON_INHERITANCE.md +++ b/doc/JSON_INHERITANCE.md @@ -81,13 +81,14 @@ TOOL (but not TOOL_ARMOR) COMESTIBLE BOOK ENGINE +MATERIAL ``` To find out if a types supports copy-from, you need to know if it has implemented generic_factory. To find out if this is the case, do the following: * Open [init.cpp](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/src/init.cpp) * Find the line that mentions your type, for example `add( "gate", &gates::load );` * Copy the load function, in this case it would be *gates::load* -* Use this in [the search bar on github](https://github.com/CleverRaven/Cataclysm-DDA/search?q=%22gates%3A%3Aload%22&unscoped_q=%22gates%3A%3Aload%22&type=Code) to find the file that contains *gates::load* +* Use this in [the search bar on github](https://github.com/CleverRaven/Cataclysm-DDA/search?q=%22gates%3A%3Aload%22&unscoped_q=%22gates%3A%3Aload%22&type=Code) to find the file that contains *gates::load* (Note, you cannot search for ":" in file finder. The search will simply ignore this symbol.) * In the search results you find [gates.cpp](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/src/gates.cpp). open it. * In gates.cpp, find the generic_factory line, it looks like this: `generic_factory gates_data( "gate type", "handle", "other_handles" );` * Since the generic_factory line is present, you can now conclude that it supports copy-from. From 761e033147d20158a5b05da846132c1714935103 Mon Sep 17 00:00:00 2001 From: SouP <40143107+Soup-de-Loop@users.noreply.github.com> Date: Mon, 4 May 2020 07:57:48 +1000 Subject: [PATCH 32/48] Final Blazemod PR: Finalise succession of modern Blaze Industries from blazemod (#40093) --- .../{blazemod => BlazeIndustries}/README.txt | 19 ++++++++++++------- .../items/vehicle/blaze_engine.json | 0 .../items/vehicle/blaze_other.json | 0 .../items/vehicle/blaze_solar.json | 0 data/mods/BlazeIndustries/modinfo.json | 13 +++++++++++++ .../recipes/blaze_other_recipes.json | 0 .../snippets.json | 2 +- .../vehicleparts/blaze_combustion.json | 0 .../vehicleparts/blaze_other_parts.json | 0 .../vehicleparts/blaze_turrets_vanilla.json | 0 data/mods/blazemod/modinfo.json | 13 ------------- 11 files changed, 26 insertions(+), 21 deletions(-) rename data/mods/{blazemod => BlazeIndustries}/README.txt (52%) rename data/mods/{blazemod => BlazeIndustries}/items/vehicle/blaze_engine.json (100%) rename data/mods/{blazemod => BlazeIndustries}/items/vehicle/blaze_other.json (100%) rename data/mods/{blazemod => BlazeIndustries}/items/vehicle/blaze_solar.json (100%) create mode 100644 data/mods/BlazeIndustries/modinfo.json rename data/mods/{blazemod => BlazeIndustries}/recipes/blaze_other_recipes.json (100%) rename data/mods/{blazemod => BlazeIndustries}/snippets.json (83%) rename data/mods/{blazemod => BlazeIndustries}/vehicleparts/blaze_combustion.json (100%) rename data/mods/{blazemod => BlazeIndustries}/vehicleparts/blaze_other_parts.json (100%) rename data/mods/{blazemod => BlazeIndustries}/vehicleparts/blaze_turrets_vanilla.json (100%) delete mode 100644 data/mods/blazemod/modinfo.json diff --git a/data/mods/blazemod/README.txt b/data/mods/BlazeIndustries/README.txt similarity index 52% rename from data/mods/blazemod/README.txt rename to data/mods/BlazeIndustries/README.txt index 444f9da3a6a53..c92816f729c35 100644 --- a/data/mods/blazemod/README.txt +++ b/data/mods/BlazeIndustries/README.txt @@ -1,3 +1,8 @@ +WARNING: THIS IS NOT COMPATIBLE NOR MIGRATION READY WITH THE OLD BLAZEMOD. If you want to use the last modernised version of the legacy blazemod, +please get it from https://github.com/Soup-de-Loop/CDDA-old-complete-blazemod +Uninstall any turrets and turretframes from your vehicles before updating to it in order to avoid segfaults, some errors might still be thrown but +it shouldn't crash. Contact me using the options at the end if you need help, and I will try to set aside some time to direct. + Welcome to the new and improved blazemod, now with 90% less content. Over time this will be reversed as I expand on the scope of the base content and restore some things that have been removed, but over a longer time scale without constantly having to break saves when an oversight has to be fixed. @@ -6,18 +11,18 @@ Where did most of the content of blazemod go, you might be wondering? Despite ha content is actually quite out of place when compared to each other, and each part including the basic essentials of blazemod deserve to be worked on separately and properly implemented into the game rather than being kept in an uneasy limbo or left to be deleted. -If you want to keep playing with the content on a save that was compatible up until about the data 01/05/2020 (DD/MM/YY), you may download the -modernised versions of these mods from the following: +If you wish to restore old content that is now modernised, you can get them at the following links, but do not try to use these in conjunction with +the legacy blazemod- these are for Blaze Industries only and new weapons will become available in the new mod: Legacy weapons: https://github.com/Soup-de-Loop/CDDA-blaze-legacy-weapons Blob stuff: https://github.com/Soup-de-Loop/CDDA-blob-vehicles Diamond & Vortex: https://github.com/Soup-de-Loop/CCDA-high-science-vehicles -If your save is older than 0.E, I recommend that you keep your older version of blazemod backed up and put it back into the game files each time -you update. I will be changing the internal ID of the new blazemod so that it's possible to overlap and ignore the new content if you choose not to -use it in lieu of the legacy stuff. I will be writing up a large migration list that should make it possible to update from any of the pre-0.E -versions of blazemod to the newest, that can be applied once to carry an old save over without segfaults caused by blazemod. Additional instructions -will be included once it is made. +If your save is older than 0.E, I recommend that you keep your older version of blazemod backed up or use the version at the start of this README +and put it back into the game files each time you update. Blaze Industries has a different ident and name to blazemod so that it's possible to +overlap and ignore the new content if you choose not to use it in lieu of the legacy stuff. I will be writing up a large migration list that should +make it possible to update from any of the pre-0.E versions of blazemod to the newest, that can be applied once to carry an old save over without +segfaults caused by blazemod. Additional instructions will be included once it is made. Please note, however that I will also be working on re-introducing each of these parts of blazemod as separate mods unto themselves, better implemented into the game and of quality and calibre worthy of spirit of current development standards. diff --git a/data/mods/blazemod/items/vehicle/blaze_engine.json b/data/mods/BlazeIndustries/items/vehicle/blaze_engine.json similarity index 100% rename from data/mods/blazemod/items/vehicle/blaze_engine.json rename to data/mods/BlazeIndustries/items/vehicle/blaze_engine.json diff --git a/data/mods/blazemod/items/vehicle/blaze_other.json b/data/mods/BlazeIndustries/items/vehicle/blaze_other.json similarity index 100% rename from data/mods/blazemod/items/vehicle/blaze_other.json rename to data/mods/BlazeIndustries/items/vehicle/blaze_other.json diff --git a/data/mods/blazemod/items/vehicle/blaze_solar.json b/data/mods/BlazeIndustries/items/vehicle/blaze_solar.json similarity index 100% rename from data/mods/blazemod/items/vehicle/blaze_solar.json rename to data/mods/BlazeIndustries/items/vehicle/blaze_solar.json diff --git a/data/mods/BlazeIndustries/modinfo.json b/data/mods/BlazeIndustries/modinfo.json new file mode 100644 index 0000000000000..e93485cc9511e --- /dev/null +++ b/data/mods/BlazeIndustries/modinfo.json @@ -0,0 +1,13 @@ +[ + { + "type": "MOD_INFO", + "ident": "blazeindustries", + "name": "Blaze Industries", + "authors": [ "Blaze-whatdoyoumeanitsalreadytaken" ], + "maintainers": [ "Soup-de-Loop" ], + "description": "Introduces the fictional corporation Blaze Industries, bringing advanced vehicle modification to the consumer.", + "//": "Spiritual successor to blazemod, do not use together with the legacy blazemod unless you know what you are doing.", + "category": "content", + "dependencies": [ "dda" ] + } +] diff --git a/data/mods/blazemod/recipes/blaze_other_recipes.json b/data/mods/BlazeIndustries/recipes/blaze_other_recipes.json similarity index 100% rename from data/mods/blazemod/recipes/blaze_other_recipes.json rename to data/mods/BlazeIndustries/recipes/blaze_other_recipes.json diff --git a/data/mods/blazemod/snippets.json b/data/mods/BlazeIndustries/snippets.json similarity index 83% rename from data/mods/blazemod/snippets.json rename to data/mods/BlazeIndustries/snippets.json index 3d5e50ed7f5be..70aa384933742 100644 --- a/data/mods/blazemod/snippets.json +++ b/data/mods/BlazeIndustries/snippets.json @@ -13,7 +13,7 @@ }, { "id": "note_blazemod_3", - "text": "\"Dream Log 3: Another dream. This time I dropped a diamond on a sea of charcoal dust, and the diamond begun to shine and make the dust glitter until a shape of a car emerged from the dust made entirely of thick, perfectly angular diamond. A beautiful shape appeared on it, and in a flash of light I was pierced by a glittering lance.\"" + "text": "\"Dream Log 3: Another dream. This time I dropped a diamond on a sea of charcoal dust, and the diamond begun to shine and make the dust glitter until a shape of a car emerged from the dust made entirely of thick, perfectly angular diamond. A beautiful shape appeared on it, and in a flash of light I was pierced by a glittering lance.\"" }, { "id": "note_blazemod_4", diff --git a/data/mods/blazemod/vehicleparts/blaze_combustion.json b/data/mods/BlazeIndustries/vehicleparts/blaze_combustion.json similarity index 100% rename from data/mods/blazemod/vehicleparts/blaze_combustion.json rename to data/mods/BlazeIndustries/vehicleparts/blaze_combustion.json diff --git a/data/mods/blazemod/vehicleparts/blaze_other_parts.json b/data/mods/BlazeIndustries/vehicleparts/blaze_other_parts.json similarity index 100% rename from data/mods/blazemod/vehicleparts/blaze_other_parts.json rename to data/mods/BlazeIndustries/vehicleparts/blaze_other_parts.json diff --git a/data/mods/blazemod/vehicleparts/blaze_turrets_vanilla.json b/data/mods/BlazeIndustries/vehicleparts/blaze_turrets_vanilla.json similarity index 100% rename from data/mods/blazemod/vehicleparts/blaze_turrets_vanilla.json rename to data/mods/BlazeIndustries/vehicleparts/blaze_turrets_vanilla.json diff --git a/data/mods/blazemod/modinfo.json b/data/mods/blazemod/modinfo.json deleted file mode 100644 index 4c4a65e37ab8a..0000000000000 --- a/data/mods/blazemod/modinfo.json +++ /dev/null @@ -1,13 +0,0 @@ -[ - { - "type": "MOD_INFO", - "ident": "blazemod", - "name": "Vehicle Additions Pack", - "authors": [ "Blaze-whatdoyoumeanitsalreadytaken" ], - "maintainers": [ "Blaze-whatdoyoumeanitsalreadytaken" ], - "description": "Please see the included PAQ.txt in the mod folder if you encounter any issues.", - "category": "vehicles", - "dependencies": [ "dda" ], - "obsolete": true - } -] From ae3011782ac9e0c318cedbc36809208dc47db33f Mon Sep 17 00:00:00 2001 From: akirashirosawa <38557723+akirashirosawa@users.noreply.github.com> Date: Mon, 4 May 2020 00:58:45 +0300 Subject: [PATCH 33/48] Scan for languages (#40056) --- src/debug.cpp | 1 + src/options.cpp | 73 ++++++++++++++++++++++++++++++++++------------- src/options.h | 5 +++- src/path_info.cpp | 12 ++++++++ src/path_info.h | 2 ++ 5 files changed, 72 insertions(+), 21 deletions(-) diff --git a/src/debug.cpp b/src/debug.cpp index d0e9f05f7b083..ceaaff557690d 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -1282,6 +1282,7 @@ std::string game_info::game_report() for( const options_manager::id_and_option &vItem : options_manager::lang_options ) { if( vItem.first == lang ) { lang_translated = vItem.second.translated(); + break; } } diff --git a/src/options.cpp b/src/options.cpp index b5fd69c21412e..15773b1d28856 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -58,25 +58,8 @@ bool tile_iso; std::map TILESETS; // All found tilesets: std::map SOUNDPACKS; // All found soundpacks: -std::vector options_manager::lang_options = { - { "", translate_marker( "System language" ) }, - // Note: language names are in their own language and are *not* translated at all. - // Note: Somewhere in Github PR was better link to msdn.microsoft.com with language names. - // http://en.wikipedia.org/wiki/List_of_language_names - { "en", no_translation( R"(English)" ) }, - { "de", no_translation( R"(Deutsch)" ) }, - { "es_AR", no_translation( R"(Español (Argentina))" ) }, - { "es_ES", no_translation( R"(Español (España))" ) }, - { "fr", no_translation( R"(Français)" ) }, - { "hu", no_translation( R"(Magyar)" ) }, - { "ja", no_translation( R"(日本語)" ) }, - { "ko", no_translation( R"(한국어)" ) }, - { "pl", no_translation( R"(Polski)" ) }, - { "pt_BR", no_translation( R"(Português (Brasil))" )}, - { "ru", no_translation( R"(Русский)" ) }, - { "zh_CN", no_translation( R"(中文 (天朝))" ) }, - { "zh_TW", no_translation( R"(中文 (台灣))" ) }, -}; +const std::vector options_manager::lang_options = + options_manager::get_lang_options(); options_manager &get_options() { @@ -1035,6 +1018,57 @@ std::vector options_manager::build_soundpacks_li return result; } +std::unordered_set options_manager::get_langs_with_translation_files() +{ + std::vector lang_dirs = get_directories_with( PATH_INFO::lang_file(), + PATH_INFO::langdir(), true ); + const std::string start_str = "mo/"; + const std::size_t start_len = start_str.length(); + const std::string end_str = "/LC_MESSAGES"; + std::for_each( lang_dirs.begin(), lang_dirs.end(), [&]( std::string & dir ) { + const std::size_t start = dir.find( start_str ) + start_len; + const std::size_t len = dir.rfind( end_str ) - start; + dir = dir.substr( start, len ); + } ); + return std::unordered_set( lang_dirs.begin(), lang_dirs.end() ); +} + +std::vector options_manager::get_lang_options() +{ + std::vector lang_options = { + { "", translate_marker( "System language" ) }, + // Note: language names are in their own language and are *not* translated at all. + // Note: Somewhere in Github PR was better link to msdn.microsoft.com with language names. + // http://en.wikipedia.org/wiki/List_of_language_names + { "en", no_translation( R"(English)" ) }, + { "de", no_translation( R"(Deutsch)" ) }, + { "es_AR", no_translation( R"(Español (Argentina))" ) }, + { "es_ES", no_translation( R"(Español (España))" ) }, + { "fr", no_translation( R"(Français)" ) }, + { "hu", no_translation( R"(Magyar)" ) }, + { "ja", no_translation( R"(日本語)" ) }, + { "ko", no_translation( R"(한국어)" ) }, + { "pl", no_translation( R"(Polski)" ) }, + { "pt_BR", no_translation( R"(Português (Brasil))" )}, + { "ru", no_translation( R"(Русский)" ) }, + { "zh_CN", no_translation( R"(中文 (天朝))" ) }, + { "zh_TW", no_translation( R"(中文 (台灣))" ) }, + }; + + std::unordered_set lang_list = options_manager::get_langs_with_translation_files(); + + std::vector options; + + lang_list.insert( "" ); // for System language option + lang_list.insert( "en" ); // for English option + + std::copy_if( lang_options.begin(), lang_options.end(), std::back_inserter( options ), + [&lang_list]( const options_manager::id_and_option & pair ) { + return lang_list.count( pair.first ); + } ); + return options; +} + #if defined(__ANDROID__) bool android_get_default_setting( const char *settings_name, bool default_value ) { @@ -1330,7 +1364,6 @@ void options_manager::add_options_interface() interface_page_.items_.emplace_back(); }; - // TODO: scan for languages like we do for tilesets. add( "USE_LANG", "interface", translate_marker( "Language" ), translate_marker( "Switch Language." ), options_manager::lang_options, "" ); diff --git a/src/options.h b/src/options.h index e7c4c822fc28c..79e619920db55 100644 --- a/src/options.h +++ b/src/options.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include "translations.h" @@ -29,7 +30,7 @@ class options_manager : std::pair( first, second ) { } }; - static std::vector lang_options; + static const std::vector lang_options; private: static std::vector build_tilesets_list(); static std::vector build_soundpacks_list(); @@ -37,6 +38,8 @@ class options_manager const std::string &path ); static std::vector load_soundpack_from( const std::string &path ); + static std::unordered_set get_langs_with_translation_files(); + static std::vector get_lang_options(); bool load_legacy(); diff --git a/src/path_info.cpp b/src/path_info.cpp index 77c3efc006f62..5e33233746c14 100644 --- a/src/path_info.cpp +++ b/src/path_info.cpp @@ -35,6 +35,7 @@ static std::string autopickup_value; static std::string keymap_value; static std::string options_value; static std::string memorialdir_value; +static std::string langdir_value; void PATH_INFO::init_base_path( std::string path ) { @@ -82,13 +83,16 @@ void PATH_INFO::set_standard_filenames() #if defined(DATA_DIR_PREFIX) datadir_value = base_path_value + "share/cataclysm-dda/"; gfxdir_value = datadir_value + "gfx/"; + langdir_value = datadir_value + "lang/"; #else datadir_value = base_path_value + "data/"; gfxdir_value = base_path_value + "gfx/"; + langdir_value = base_path_value + "lang/"; #endif } else { datadir_value = "data/"; gfxdir_value = "gfx/"; + langdir_value = "lang/"; } // Shared dirs @@ -372,6 +376,14 @@ std::string PATH_INFO::gfxdir() { return gfxdir_value; } +std::string PATH_INFO::langdir() +{ + return langdir_value; +} +std::string PATH_INFO::lang_file() +{ + return "cataclysm-dda.mo"; +} std::string PATH_INFO::data_sound() { return datadir_value + "sound"; diff --git a/src/path_info.h b/src/path_info.h index 50dee5ee4c8c2..79923a7041ac0 100644 --- a/src/path_info.h +++ b/src/path_info.h @@ -57,6 +57,8 @@ std::string worldoptions(); std::string crash(); std::string tileset_conf(); std::string gfxdir(); +std::string langdir(); +std::string lang_file(); std::string user_gfx(); std::string data_sound(); std::string user_sound(); From b7091a5605fcc65019f8811764fbd996b48dc61a Mon Sep 17 00:00:00 2001 From: CountAlex Date: Mon, 4 May 2020 00:59:30 +0300 Subject: [PATCH 34/48] Add tea bags, herbal tea bags and adjust drinks recipes (#39989) --- data/json/itemgroups/Food/food.json | 18 +++++++++++++++--- data/json/itemgroups/SUS/domestic.json | 3 ++- data/json/itemgroups/food_service.json | 12 ++++++++---- data/json/items/comestibles/other.json | 24 ++++++++++++++++++++++++ data/json/items/containers.json | 15 +++++++++++++++ data/json/recipes/recipe_food.json | 4 ++-- 6 files changed, 66 insertions(+), 10 deletions(-) diff --git a/data/json/itemgroups/Food/food.json b/data/json/itemgroups/Food/food.json index a167d2ba77adf..839f1c7e959b0 100644 --- a/data/json/itemgroups/Food/food.json +++ b/data/json/itemgroups/Food/food.json @@ -243,7 +243,8 @@ { "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" }, - { "group": "big_canned_food", "prob": 4 } + { "group": "big_canned_food", "prob": 4 }, + { "group": "teabag_box", "prob": 20 } ] }, { @@ -456,7 +457,8 @@ { "item": "coffee_syrup", "prob": 10 }, { "item": "fruit_leather", "prob": 25 }, { "item": "kernels", "prob": 25 }, - { "item": "pine_nuts", "prob": 5 } + { "item": "pine_nuts", "prob": 5 }, + { "group": "teabag_box", "prob": 10 } ] }, { @@ -777,7 +779,17 @@ { "item": "restaurantmap", "prob": 5 }, { "item": "touristmap", "prob": 2 }, { "item": "noodles_fast", "prob": 30 }, - { "item": "milkshake_fastfood", "prob": 15 } + { "item": "milkshake_fastfood", "prob": 15 }, + { "group": "teabag_box", "prob": 5 } + ] + }, + { + "type": "item_group", + "id": "teabag_box", + "subtype": "distribution", + "entries": [ + { "item": "tea_bag", "prob": 20, "container-item": "box_tea", "charges-min": 1, "charges-max": 10 }, + { "item": "herbal_tea_bag", "prob": 5, "container-item": "box_tea", "charges-min": 1, "charges-max": 10 } ] } ] diff --git a/data/json/itemgroups/SUS/domestic.json b/data/json/itemgroups/SUS/domestic.json index 476b740b47748..09d2688803a11 100644 --- a/data/json/itemgroups/SUS/domestic.json +++ b/data/json/itemgroups/SUS/domestic.json @@ -262,7 +262,8 @@ "prob": 60 }, { "item": "spoon", "count": [ 1, 6 ] }, - { "item": "ceramic_mug", "count": [ 1, 6 ] } + { "item": "ceramic_mug", "count": [ 1, 6 ] }, + { "group": "teabag_box", "prob": 60 } ] }, { diff --git a/data/json/itemgroups/food_service.json b/data/json/itemgroups/food_service.json index 1e9ea8e49fdb1..1527495c9c3be 100644 --- a/data/json/itemgroups/food_service.json +++ b/data/json/itemgroups/food_service.json @@ -85,7 +85,8 @@ { "item": "tea_raw", "prob": 70 }, { "item": "ceramic_cup", "prob": 70 }, { "item": "teapot", "prob": 70 }, - { "item": "clay_teapot", "prob": 70 } + { "item": "clay_teapot", "prob": 70 }, + { "group": "teabag_box", "prob": 70 } ] }, { @@ -332,7 +333,8 @@ { "item": "coffee_raw", "prob": 50 }, { "item": "coffee_syrup", "prob": 15 }, { "item": "cookies", "prob": 35 }, - { "item": "tea_raw", "prob": 50 } + { "item": "tea_raw", "prob": 50 }, + { "group": "teabag_box", "prob": 30 } ] }, { @@ -349,7 +351,8 @@ { "item": "salt", "prob": 15 }, { "item": "sugar", "prob": 70 }, { "item": "tea_raw", "prob": 15 }, - { "item": "wrapper", "prob": 75 } + { "item": "wrapper", "prob": 75 }, + { "group": "teabag_box", "prob": 10 } ] }, { @@ -693,7 +696,8 @@ { "item": "curry_powder", "prob": 40 }, { "item": "can_cheese", "prob": 30 }, { "item": "sauce_red", "prob": 40 }, - { "item": "sauce_pesto", "prob": 20 } + { "item": "sauce_pesto", "prob": 20 }, + { "group": "teabag_box", "prob": 45 } ] }, { diff --git a/data/json/items/comestibles/other.json b/data/json/items/comestibles/other.json index 66a80b466311f..144b9f63c29f0 100644 --- a/data/json/items/comestibles/other.json +++ b/data/json/items/comestibles/other.json @@ -721,5 +721,29 @@ "price_postapoc": 0, "flags": [ "TRADER_AVOID" ], "volume": "250 ml" + }, + { + "id": "tea_bag", + "type": "COMESTIBLE", + "comestible_type": "FOOD", + "name": { "str": "tea bag" }, + "flags": [ "IRREPLACEABLE_CONSUMABLE", "INEDIBLE" ], + "weight": "5 g", + "volume": "10 ml", + "color": "white", + "symbol": "?", + "container": "box_tea", + "material": "paper", + "price": 50, + "price_postapoc": 200, + "description": "Paper sachet with tea leafs inside. Put it into boiling water to get your cup of tea." + }, + { + "id": "herbal_tea_bag", + "type": "COMESTIBLE", + "name": { "str": "herbal tea bag" }, + "copy-from": "tea_bag", + "color": "green", + "description": "Paper sachet with dried wild herbs inside. Put it into boiling water to make some healthy warm drink." } ] diff --git a/data/json/items/containers.json b/data/json/items/containers.json index 3d567dd47bcdb..d1ea4bea9ede5 100644 --- a/data/json/items/containers.json +++ b/data/json/items/containers.json @@ -1605,5 +1605,20 @@ } ], "qualities": [ [ "CONTAIN", 1 ], [ "BOIL", 2 ] ] + }, + { + "id": "box_tea", + "type": "CONTAINER", + "category": "container", + "name": { "str": "small cardboard box of tea bags", "str_pl": "small cardboard boxes of tea bags" }, + "description": "A very small cardboard box with tea brand written on it.", + "weight": "10 g", + "volume": "100 ml", + "price": 0, + "price_postapoc": 0, + "material": "cardboard", + "symbol": ")", + "color": "green", + "contains": "100 ml" } ] diff --git a/data/json/recipes/recipe_food.json b/data/json/recipes/recipe_food.json index aaa001e78ceed..f0e3822ef7bc0 100644 --- a/data/json/recipes/recipe_food.json +++ b/data/json/recipes/recipe_food.json @@ -1309,7 +1309,7 @@ "batch_time_factors": [ 80, 4 ], "qualities": [ { "id": "BOIL", "level": 1 } ], "tools": [ [ [ "water_boiling_heat", 2, "LIST" ] ] ], - "components": [ [ [ "tea_raw", 1 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ] + "components": [ [ [ "tea_raw", 1 ], [ "tea_bag", 1 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ] }, { "type": "recipe", @@ -1323,7 +1323,7 @@ "batch_time_factors": [ 80, 4 ], "qualities": [ { "id": "BOIL", "level": 1 } ], "tools": [ [ [ "water_boiling_heat", 2, "LIST" ] ] ], - "components": [ [ [ "wild_herbs", 10 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ] + "components": [ [ [ "wild_herbs", 10 ], [ "herbal_tea_bag", 1 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ] }, { "type": "recipe", From c2b5d41b95ffdc9e89376e59d000ea964239a836 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sun, 3 May 2020 17:00:07 -0500 Subject: [PATCH 35/48] [Aftershock] Uplifted monsters and zombies (#39097) --- data/mods/Aftershock/items/armor.json | 88 +++++++++++ data/mods/Aftershock/items/monsterdrops.json | 28 ++++ .../mods/Aftershock/mobs/monster_faction.json | 7 + data/mods/Aftershock/mobs/monster_groups.json | 66 ++++++++ data/mods/Aftershock/mobs/species.json | 8 + .../Aftershock/mobs/uplifted_monsters.json | 112 ++++++++++++++ data/mods/Aftershock/mobs/zombies.json | 143 ++++++++++++++++++ data/mods/Aftershock/player/professions.json | 4 +- 8 files changed, 454 insertions(+), 2 deletions(-) create mode 100644 data/mods/Aftershock/mobs/species.json create mode 100644 data/mods/Aftershock/mobs/uplifted_monsters.json diff --git a/data/mods/Aftershock/items/armor.json b/data/mods/Aftershock/items/armor.json index d62e112c09ac3..6aa3373f11b64 100644 --- a/data/mods/Aftershock/items/armor.json +++ b/data/mods/Aftershock/items/armor.json @@ -71,6 +71,52 @@ "flags": [ "OVERSIZE", "HOOD", "OUTER", "NO_REPAIR", "SUPER_FANCY", "STURDY" ], "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "BONUS_DODGE", "add": 1 } ] } ] } }, + { + "id": "xl_jeans", + "type": "ARMOR", + "name": { "str": "XL jeans", "str_pl": "pairs of XL jeans" }, + "description": "A pair of XL blue jeans with two deep pockets.", + "weight": "900 g", + "volume": "3 L", + "copy-from": "jeans", + "storage": "750 ml", + "material_thickness": 4, + "flags": [ "VARSIZE", "POCKETS", "OVERSIZE" ] + }, + { + "id": "xl_technician_pants_gray", + "repairs_like": "jeans", + "type": "ARMOR", + "name": { "str": "XL work pants", "str_pl": "pairs of XL work pants" }, + "description": "A pair of gray work pants.", + "copy-from": "technician_pants_gray", + "weight": "770 g", + "volume": "3 L", + "storage": "1700 ml", + "material_thickness": 2, + "snippet_category": [ + { "id": "xl_technician_pants_blue", "text": "A pair of XL blue work pants." }, + { "id": "xl_technician_pants_gray", "text": "A pair of XL gray work pants." }, + { "id": "xl_technician_pants_lightblue", "text": "A pair of XL light-blue work pants." } + ], + "flags": [ "VARSIZE", "POCKETS", "OVERSIZE" ] + }, + { + "id": "xl_technician_shirt_gray", + "repairs_like": "tshirt", + "type": "ARMOR", + "name": { "str": "work t-shirt" }, + "description": "A gray XL work t-shirt with a small front pocket.", + "weight": "84 g", + "volume": "350 ml", + "copy-from": "technician_shirt_gray", + "snippet_category": [ + { "id": "xl_technician_shirt_blue", "text": "An XL blue work t-shirt with a small front pocket." }, + { "id": "xl_technician_shirt_gray", "text": "An XL gray work t-shirt with a small front pocket." }, + { "id": "xl_technician_shirt_lightblue", "text": "An XL light-blue work t-shirt with a small front pocket." } + ], + "flags": [ "VARSIZE", "OVERSIZE" ] + }, { "id": "q_solarpack", "type": "TOOL_ARMOR", @@ -246,5 +292,47 @@ "warmth": 20, "material_thickness": 3, "flags": [ "OVERSIZE", "VARSIZE", "STURDY" ] + }, + { + "id": "xlleather_belt", + "type": "ARMOR", + "name": { "str": "XL leather belt" }, + "description": "An XL leather belt. Useful for making your pair of pants fit if you need really big pants.", + "weight": "150 g", + "volume": "350 ml", + "copy-from": "leather_belt", + "flags": [ "WAIST", "WATER_FRIENDLY", "OVERSIZE" ] + }, + { + "id": "police_belt", + "type": "ARMOR", + "name": { "str": "XL police duty belt" }, + "description": "An XL black leather belt used by extremely large uplifted police officers. It has several pouches and a holder for a baton.", + "weight": "450 g", + "volume": "2500 ml", + "copy-from": "police_belt", + "flags": [ "WAIST", "WATER_FRIENDLY", "OVERSIZE" ] + }, + { + "id": "xltac_fullhelmet", + "repairs_like": "xlkevlar", + "type": "ARMOR", + "category": "armor", + "name": { "str": "XL tactical full helmet" }, + "description": "An all-encompassing massive black helmet that covers your entire face and neck, providing excellent protection from all sorts of damage.", + "weight": "1324 g", + "volume": "2 L", + "copy-from": "tac_fullhelmet", + "flags": [ "VARSIZE", "STURDY", "SUN_GLASSES", "OVERSIZE" ] + }, + { + "type": "ARMOR", + "id": "xllegpouch_large", + "name": { "str": "XL leg ammo pouch", "str_pl": "XL leg ammo pouches" }, + "description": "An XL fabric ammo pouch that can be strapped to your leg and capable of holding two magazine close at hand.", + "weight": "120 g", + "volume": "250 ml", + "copy-from": "legpouch_large", + "flags": [ "WATER_FRIENDLY", "BELTED", "OVERSIZE" ] } ] diff --git a/data/mods/Aftershock/items/monsterdrops.json b/data/mods/Aftershock/items/monsterdrops.json index 2e8857996213e..ac52557be4859 100644 --- a/data/mods/Aftershock/items/monsterdrops.json +++ b/data/mods/Aftershock/items/monsterdrops.json @@ -45,5 +45,33 @@ [ "hard_plate", 30 ], [ "robot_controls", 5 ] ] + }, + { + "type": "item_group", + "id": "xl_uplift_death_drop", + "subtype": "collection", + "entries": [ + { "item": "xlboots_combat" }, + { "item": "xl_technician_pants_gray", "prob": 50 }, + { "item": "xl_technician_shirt_gray", "prob": 100 }, + { "item": "xl_jeans", "prob": 50 }, + { "item": "mp5mag", "prob": 10 }, + { "group": "military", "prob": 50 }, + { "group": "mil_food", "prob": 100 } + ] + }, + { + "type": "item_group", + "id": "xl_uplift_zed_death_drop", + "subtype": "collection", + "entries": [ + { "item": "xlboots_combat" }, + { "item": "xl_technician_pants_gray", "prob": 50 }, + { "item": "xl_technician_shirt_gray", "prob": 100 }, + { "item": "xl_jeans", "prob": 50 }, + { "item": "mp5mag", "prob": 10 }, + { "group": "military", "prob": 50 }, + { "group": "mil_food", "prob": 100 } + ] } ] diff --git a/data/mods/Aftershock/mobs/monster_faction.json b/data/mods/Aftershock/mobs/monster_faction.json index 3ca96e7bad4c0..cc042a85ab54a 100644 --- a/data/mods/Aftershock/mobs/monster_faction.json +++ b/data/mods/Aftershock/mobs/monster_faction.json @@ -13,5 +13,12 @@ "friendly": [ "human", "player" ], "neutral": "herbivore", "by_mood": [ "insect", "small_animal" ] + }, + { + "type": "MONSTER_FACTION", + "name": "UPLIFT", + "neutral": "herbivore", + "by_mood": [ "insect", "small_animal" ], + "hate": "zombie" } ] diff --git a/data/mods/Aftershock/mobs/monster_groups.json b/data/mods/Aftershock/mobs/monster_groups.json index b4ad758db2eb9..4243997d22c20 100644 --- a/data/mods/Aftershock/mobs/monster_groups.json +++ b/data/mods/Aftershock/mobs/monster_groups.json @@ -42,5 +42,71 @@ "//": "Mi-go base defenders for major boss battles.", "default": "mon_mi_go_guard", "monsters": [ { "monster": "afs_mon_migoturret", "freq": 50, "cost_multiplier": 3, "pack_size": [ 2, 3 ] } ] + }, + { + "type": "monstergroup", + "name": "GROUP_FOREST", + "default": "mon_null", + "is_animal": true, + "monsters": [ + { "monster": "mon_uplifted_bear", "freq": 1, "cost_multiplier": 10, "conditions": [ "SPRING", "SUMMER", "AUTUMN" ] }, + { "monster": "mon_zombie_upliftedbear", "freq": 1, "cost_multiplier": 10, "starts": 72 }, + { "monster": "mon_uplifted_ape_zed", "freq": 1, "cost_multiplier": 10, "starts": 72 }, + { + "monster": "mon_uplifted_bear", + "freq": 3, + "cost_multiplier": 10, + "conditions": [ "NIGHT", "SPRING", "SUMMER", "AUTUMN" ] + }, + { + "monster": "mon_uplifted_ape", + "freq": 1, + "cost_multiplier": 10, + "conditions": [ "SPRING", "SUMMER", "AUTUMN", "WINTER" ] + }, + { + "monster": "mon_uplifted_ape", + "freq": 3, + "cost_multiplier": 10, + "pack_size": [ 2, 4 ], + "conditions": [ "NIGHT", "SPRING", "SUMMER", "AUTUMN", "WINTER" ] + } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_CAVE", + "default": "mon_null", + "monsters": [ { "monster": "mon_uplifted_bear", "freq": 50, "cost_multiplier": 10, "pack_size": [ 1, 3 ] } ] + }, + { + "name": "GROUP_PARK_SCENIC", + "type": "monstergroup", + "default": "mon_null", + "monsters": [ + { "monster": "mon_zombie_upliftedbear", "freq": 10, "cost_multiplier": 1, "pack_size": [ 2, 3 ] }, + { "monster": "mon_uplifted_ape_zed", "freq": 10, "cost_multiplier": 1, "pack_size": [ 2, 3 ] } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_ZOMBIE_BRUTE", + "default": "mon_zombie_brute", + "//": "Brute upgrades", + "monsters": [ + { "monster": "mon_zombie_upliftedbear", "freq": 112, "cost_multiplier": 10 }, + { "monster": "mon_uplifted_ape_zed", "freq": 100, "cost_multiplier": 50 }, + { "monster": "mon_zombie_oliphant", "freq": 70, "cost_multiplier": 10 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_CENTRAL_LAB", + "default": "mon_zombie_scientist", + "monsters": [ + { "monster": "mon_zombie_upliftedbear", "freq": 3, "cost_multiplier": 10 }, + { "monster": "mon_uplifted_ape_zed", "freq": 10, "cost_multiplier": 5 }, + { "monster": "mon_zombie_oliphant", "freq": 1, "cost_multiplier": 50 } + ] } ] diff --git a/data/mods/Aftershock/mobs/species.json b/data/mods/Aftershock/mobs/species.json new file mode 100644 index 0000000000000..56be5a0860dda --- /dev/null +++ b/data/mods/Aftershock/mobs/species.json @@ -0,0 +1,8 @@ +[ + { + "type": "SPECIES", + "id": "UPLIFT", + "description": "an intelligent animal created by man before the Cataclysm", + "fear_triggers": [ "HURT", "FIRE", "FRIEND_DIED" ] + } +] diff --git a/data/mods/Aftershock/mobs/uplifted_monsters.json b/data/mods/Aftershock/mobs/uplifted_monsters.json new file mode 100644 index 0000000000000..2ea0266c608c2 --- /dev/null +++ b/data/mods/Aftershock/mobs/uplifted_monsters.json @@ -0,0 +1,112 @@ +[ + { + "id": "mon_uplifted_bear", + "type": "MONSTER", + "name": { "str": "Schwarz Walder" }, + "description": "Schwarz Walders were originally developed by a German company as forest rangers for the expanded Black Forest Conservation Area. Shortly afterwards it was determined that they also made excellent long range reconnaissance units that could operate independently indefinitely. Pre-Cataclysm they lived on every continent in a variety of jobs.", + "default_faction": "UPLIFT", + "bodytype": "bear", + "categories": [ "WILDLIFE" ], + "species": [ "UPLIFT" ], + "volume": "90 L", + "weight": "120 kg", + "hp": 120, + "speed": 140, + "material": [ "flesh" ], + "symbol": "B", + "color": "dark_gray", + "aggression": 2, + "morale": 60, + "melee_skill": 6, + "melee_dice": 4, + "melee_dice_sides": 6, + "melee_cut": 4, + "dodge": 3, + "armor_bash": 2, + "starting_ammo": { "9mm": 30 }, + "special_attacks": [ + { + "type": "gun", + "cooldown": 10, + "move_cost": 150, + "gun_type": "hk_mp5", + "ammo_type": "9mm", + "fake_skills": [ [ "gun", 5 ], [ "smg", 5 ] ], + "fake_dex": 9, + "ranges": [ [ 0, 14, "DEFAULT" ] ], + "require_targeting_npc": true, + "require_targeting_monster": true, + "laser_lock": false, + "targeting_cost": 400, + "targeting_timeout_extend": -10, + "targeting_sound": "\"You should walk away.\"", + "targeting_volume": 20, + "no_ammo_sound": "a chk!" + } + ], + "vision_day": 30, + "vision_night": 10, + "path_settings": { "max_dist": 10 }, + "anger_triggers": [ "HURT", "PLAYER_NEAR_BABY" ], + "fear_triggers": [ "SOUND" ], + "death_function": [ "NORMAL" ], + "death_drops": "xl_uplift_death_drop", + "harvest": "demihuman_large_fur", + "reproduction": { "baby_monster": "mon_uplifted_bear_cub", "baby_count": 1, "baby_timer": 700 }, + "//": "Uplifts will likely outlive mankind", + "baby_flags": [ "SPRING" ], + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "BLEED", "BASHES", "ATTACKMON" ] + }, + { + "id": "mon_uplifted_bear_cub", + "type": "MONSTER", + "copy-from": "mon_uplifted_bear", + "name": { "str": "Schwarz Walder cub" }, + "description": "A young Schwarz Walder. If one is out here a very protective parent is likely nearby.", + "volume": "45 L", + "weight": "60 kg", + "hp": 20, + "speed": 90, + "aggression": -5, + "symbol": "b", + "morale": 30, + "melee_skill": 2, + "melee_dice": 2, + "melee_dice_sides": 3, + "melee_cut": 2, + "dodge": 2, + "harvest": "demihuman_fur", + "special_attacks": [ [ "EAT_FOOD", 60 ] ], + "upgrades": { "age_grow": 480, "into": "mon_bear" } + }, + { + "id": "mon_uplifted_ape", + "type": "MONSTER", + "name": { "str": "infeme" }, + "description": "The Infeme are uplifted from apes and other near human ancestors. The Zulu word for monkey became the catch all term for many species of uplifts whether majority chimp, gorilla or baboon. They've probably formed colonies hidden from the Cataclysm.", + "default_faction": "UPLIFT", + "bodytype": "human", + "species": [ "UPLIFT" ], + "diff": 5, + "volume": "62500 ml", + "weight": "81500 g", + "hp": 120, + "speed": 160, + "material": [ "flesh" ], + "symbol": "&", + "color": "white", + "aggression": 1, + "morale": 100, + "melee_skill": 6, + "melee_dice": 2, + "melee_dice_sides": 6, + "melee_cut": 0, + "dodge": 4, + "vision_day": 30, + "death_drops": "xl_uplift_death_drop", + "harvest": "demihuman_large_fur", + "special_attacks": [ [ "scratch", 20 ] ], + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "SMELLS", "HEARS", "WARM", "BASHES", "GROUP_BASH", "ANIMAL", "PATH_AVOID_DANGER_1", "PATH_AVOID_DANGER_1" ] + } +] diff --git a/data/mods/Aftershock/mobs/zombies.json b/data/mods/Aftershock/mobs/zombies.json index 12051cd0a1f1b..95f70e42642c4 100644 --- a/data/mods/Aftershock/mobs/zombies.json +++ b/data/mods/Aftershock/mobs/zombies.json @@ -85,5 +85,148 @@ "NOHEAD", "LOUDMOVES" ] + }, + { + "id": "mon_zombie_upliftedbear", + "type": "MONSTER", + "name": { "str": "Haunting Forest Walker" }, + "description": "This towering zombie is covered in wounds and shedding fur. Once it may have prevented forest fires in national parks, now it kills anything it catches.", + "default_faction": "zombie", + "categories": [ "CLASSIC" ], + "species": [ "ZOMBIE", "HUMAN" ], + "volume": "90 L", + "weight": "100 kg", + "hp": 150, + "speed": 240, + "material": [ "flesh" ], + "symbol": "Z", + "color": "brown_magenta", + "aggression": 100, + "morale": 100, + "melee_skill": 5, + "melee_dice": 6, + "melee_dice_sides": 6, + "melee_cut": 0, + "vision_day": 25, + "vision_night": 5, + "harvest": "zombie_meatslug", + "special_attacks": [ + [ "GRAB", 3 ], + { + "type": "bite", + "cooldown": 10, + "damage_max_instance": [ { "damage_type": "stab", "amount": 18, "armor_multiplier": 0.7 } ] + } + ], + "death_drops": "xl_uplift_death_drop", + "death_function": [ "NORMAL" ], + "flags": [ + "SEES", + "HEARS", + "GOODHEARING", + "STUMBLES", + "WARM", + "BASHES", + "GROUP_BASH", + "POISON", + "BLEED", + "NO_BREATHE", + "REVIVES", + "PUSH_MON", + "FILTHY", + "LOUDMOVES" + ] + }, + { + "id": "mon_uplifted_ape_zed", + "type": "MONSTER", + "name": { "str": "rotting grodd" }, + "description": "Imagine a gorilla. Now imagine it dead and rotting and somehow looking at you with more hate than you had previously imagined possible.", + "default_faction": "zombie", + "bodytype": "human", + "species": [ "ZOMBIE" ], + "diff": 5, + "volume": "62500 ml", + "weight": "81500 g", + "hp": 180, + "speed": 160, + "material": [ "flesh" ], + "symbol": "&", + "color": "white", + "aggression": 0, + "morale": 100, + "melee_skill": 6, + "melee_dice": 2, + "melee_dice_sides": 6, + "melee_cut": 0, + "dodge": 4, + "vision_day": 20, + "harvest": "zombie_meatslug", + "death_drops": "xl_uplift_death_drop", + "special_attacks": [ [ "SMASH", 20 ] ], + "death_function": [ "NORMAL" ], + "flags": [ + "SEES", + "HEARS", + "GOODHEARING", + "STUMBLES", + "WARM", + "BASHES", + "GROUP_BASH", + "POISON", + "BLEED", + "NO_BREATHE", + "REVIVES", + "PUSH_MON", + "FILTHY", + "LOUDMOVES" + ] + }, + { + "id": "mon_zombie_oliphant", + "type": "MONSTER", + "name": { "str": "Ghoulodon" }, + "description": "An undead Uplifted Elephant of ginormous size. It still wears it's assault grade armor.", + "default_faction": "zombie", + "bodytype": "human", + "species": [ "ZOMBIE", "UPLIFT" ], + "diff": 7, + "volume": "875000 ml", + "weight": "200 kg", + "hp": 480, + "speed": 130, + "material": [ "flesh" ], + "symbol": "E", + "color": "white_magenta", + "aggression": 100, + "morale": 100, + "melee_skill": 5, + "melee_dice": 6, + "melee_dice_sides": 8, + "melee_cut": 0, + "armor_bash": 12, + "armor_cut": 16, + "vision_day": 50, + "vision_night": 4, + "harvest": "zombie", + "special_attacks": [ [ "SMASH", 28 ] ], + "death_drops": "xl_uplift_death_drop", + "death_function": [ "NORMAL" ], + "flags": [ + "SEES", + "HEARS", + "SMELLS", + "STUMBLES", + "WARM", + "BASHES", + "DESTROYS", + "POISON", + "ATTACKMON", + "NO_BREATHE", + "REVIVES", + "PUSH_MON", + "PUSH_VEH", + "FILTHY" + ] } ] diff --git a/data/mods/Aftershock/player/professions.json b/data/mods/Aftershock/player/professions.json index 68d806a5cfaff..5493bd5fb8d7e 100644 --- a/data/mods/Aftershock/player/professions.json +++ b/data/mods/Aftershock/player/professions.json @@ -200,8 +200,8 @@ { "level": 3, "name": "melee" }, { "level": 3, "name": "bashing" } ], - "traits": [ "PROF_SWAT", "UPLIFTED", "THRESH_MASTODON", "MUT_TOUGH", "TUSKS", "HUGE_OK" ], - "//": "Placeholder profession until mutant NPCs merged and post thresh MASTODON distribution table can be added. Need to add XL gear for MASTODON's in more items.", + "traits": [ "PROF_SWAT", "UPLIFTED", "THRESH_MASTODON", "MUT_TANK", "TUSKS" ], + "//": "Need to add XL gear for MASTODON's in more items.", "items": { "both": { "items": [ "xlswat_armor", "xlboots_combat", "xlgloves_tactical", "badge_swat", "wristwatch", "baton" ], From a13e5c7c078bb78d0dde0460391a8e2a4fc96de4 Mon Sep 17 00:00:00 2001 From: CodeBandit <63547126+CodeBandit@users.noreply.github.com> Date: Sun, 3 May 2020 18:00:57 -0400 Subject: [PATCH 36/48] Update throwing knives weight and size (#39992) --- data/json/items/ranged/throwing.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/items/ranged/throwing.json b/data/json/items/ranged/throwing.json index 4f048f166d1ec..03bc5f17e45d8 100644 --- a/data/json/items/ranged/throwing.json +++ b/data/json/items/ranged/throwing.json @@ -111,8 +111,8 @@ "color": "light_gray", "description": "A thin and flat knife made for throwing. Its ineffective cutting edge and odd shape makes it unsuitable for use as a tool.", "material": "steel", - "volume": "250 ml", - "weight": "268 g", + "volume": "100 ml", + "weight": "460 g", "bashing": 1, "cutting": 10, "thrown_damage": [ { "damage_type": "stab", "amount": 14 } ] From 4e0786ce021191e7580e9ac81e3bf1772f46c54a Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sun, 3 May 2020 17:02:19 -0500 Subject: [PATCH 37/48] Xl underwear and accessories Part 1 (#39978) --- data/json/items/armor/boots.json | 30 +++++++++++++++++++ data/json/items/armor/undergarment.json | 40 +++++++++++++++++++++++++ data/json/recipes/armor/feet.json | 35 ++++++++++++++++++++++ data/json/recipes/armor/legs.json | 39 ++++++++++++++++++++++++ data/json/recipes/armor/torso.json | 12 ++++++++ 5 files changed, 156 insertions(+) diff --git a/data/json/items/armor/boots.json b/data/json/items/armor/boots.json index 9e127bb4c1015..46bf5f6c6352d 100644 --- a/data/json/items/armor/boots.json +++ b/data/json/items/armor/boots.json @@ -1249,6 +1249,16 @@ "environmental_protection": 2, "flags": [ "VARSIZE", "WATER_FRIENDLY", "SKINTIGHT", "STURDY" ] }, + { + "id": "xlnomex_socks", + "type": "ARMOR", + "name": { "str": "pair of XL flame-resistant socks", "str_pl": "pairs of XL flame-resistant socks" }, + "description": "A snug fitting pair of stockings made from thin and lightweight Nomex fire-resistant fabric. Tough yet breathable, they are light and comfortable to wear under clothing.", + "weight": "300 g", + "volume": "1000 ml", + "copy-from": "nomex_socks", + "flags": [ "VARSIZE", "WATER_FRIENDLY", "SKINTIGHT", "STURDY" ] + }, { "id": "socks", "type": "ARMOR", @@ -1268,6 +1278,16 @@ "material_thickness": 1, "flags": [ "VARSIZE", "SKINTIGHT" ] }, + { + "id": "xlsocks", + "type": "ARMOR", + "name": { "str": "pair of XL socks", "str_pl": "pairs of XL socks" }, + "description": "Socks. Big ones. Put 'em on your feet.", + "weight": "58 g", + "volume": "250 ml", + "copy-from": "socks", + "flags": [ "VARSIZE", "SKINTIGHT", "OVERSIZE" ] + }, { "id": "socks_ankle", "type": "ARMOR", @@ -1344,6 +1364,16 @@ "material_thickness": 1, "flags": [ "VARSIZE", "SKINTIGHT" ] }, + { + "id": "xlsocks_wool", + "type": "ARMOR", + "name": { "str": "pair of XL wool socks", "str_pl": "pairs of XL wool socks" }, + "description": "Warm socks made of wool for a larger than you'd previously thought possible human.", + "weight": "77 g", + "volume": "500 ml", + "copy-from": "socks_wool", + "flags": [ "VARSIZE", "SKINTIGHT", "OVERSIZE" ] + }, { "id": "stockings", "type": "ARMOR", diff --git a/data/json/items/armor/undergarment.json b/data/json/items/armor/undergarment.json index 9dc0e9bd9ced8..b93bfb79669b9 100644 --- a/data/json/items/armor/undergarment.json +++ b/data/json/items/armor/undergarment.json @@ -131,6 +131,16 @@ "material_thickness": 1, "flags": [ "VARSIZE", "SKINTIGHT" ] }, + { + "id": "xlboxer_briefs", + "type": "ARMOR", + "name": { "str_sp": "XL boxer briefs" }, + "description": "The age-old question, boxers or briefs? Your answer? Chonk!", + "weight": "50 g", + "volume": "350 ml", + "copy-from": "boxer_briefs", + "flags": [ "VARSIZE", "SKINTIGHT", "OVERSIZE" ] + }, { "id": "boxer_shorts", "type": "ARMOR", @@ -150,6 +160,16 @@ "material_thickness": 1, "flags": [ "VARSIZE", "SKINTIGHT" ] }, + { + "id": "xlboxer_shorts", + "type": "ARMOR", + "name": { "str_sp": "XL boxer shorts" }, + "description": "Men's XL boxer shorts. For the very big and tall. More fashionable than briefs and just as comfortable.", + "weight": "72 g", + "volume": "500 ml", + "copy-from": "boxer_shorts", + "flags": [ "VARSIZE", "SKINTIGHT", "OVERSIZE" ] + }, { "id": "boy_shorts", "type": "ARMOR", @@ -169,6 +189,16 @@ "material_thickness": 1, "flags": [ "VARSIZE", "SKINTIGHT" ] }, + { + "id": "xlboy_shorts", + "type": "ARMOR", + "name": { "str_sp": "XL boy shorts" }, + "description": "Female underwear similar to men's boxer shorts, but much more close-fitting. This size is made for giants.", + "weight": "72 g", + "volume": "500 ml", + "copy-from": "boy_shorts", + "flags": [ "VARSIZE", "SKINTIGHT", "OVERSIZE" ] + }, { "id": "bra", "type": "ARMOR", @@ -503,6 +533,16 @@ "material_thickness": 1, "flags": [ "VARSIZE", "WATER_FRIENDLY", "SKINTIGHT" ] }, + { + "id": "xlsports_bra", + "type": "ARMOR", + "name": { "str": "XL sports bra" }, + "description": "A sturdy nylon bra to provide additional support during physical movement. Typically worn when exercising, it clings to the skin and is easy to wear. This one appears to have been made for a massive person.", + "weight": "160 g", + "volume": "750 ml", + "copy-from": "sports_bra", + "flags": [ "VARSIZE", "WATER_FRIENDLY", "SKINTIGHT", "OVERSIZE" ] + }, { "id": "tank_top", "type": "ARMOR", diff --git a/data/json/recipes/armor/feet.json b/data/json/recipes/armor/feet.json index d260dfb4e3cc5..dc008d5acaa43 100644 --- a/data/json/recipes/armor/feet.json +++ b/data/json/recipes/armor/feet.json @@ -387,6 +387,18 @@ "using": [ [ "sewing_standard", 12 ] ], "components": [ [ [ "nomex", 9 ] ] ] }, + { + "result": "xlnomex_socks", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_FEET", + "skill_used": "tailor", + "difficulty": 6, + "time": "37 m", + "book_learn": [ [ "textbook_fireman", 6 ], [ "textbook_tailor", 5 ], [ "tailor_portfolio", 5 ] ], + "using": [ [ "sewing_standard", 20 ] ], + "components": [ [ [ "nomex", 18 ] ] ] + }, { "result": "shoes_birchbark", "type": "recipe", @@ -411,6 +423,17 @@ "using": [ [ "sewing_standard", 4 ] ], "components": [ [ [ "rag", 2 ] ] ] }, + { + "result": "xlsocks", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_FEET", + "skill_used": "tailor", + "time": "15 m", + "autolearn": true, + "using": [ [ "sewing_standard", 4 ] ], + "components": [ [ [ "rag", 4 ] ] ] + }, { "result": "socks_bag", "type": "recipe", @@ -434,6 +457,18 @@ "qualities": [ { "id": "KNIT", "level": 1 } ], "components": [ [ [ "yarn", 75 ] ] ] }, + { + "result": "socks_wool", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_FEET", + "skill_used": "tailor", + "difficulty": 1, + "time": "1 h", + "autolearn": true, + "qualities": [ { "id": "KNIT", "level": 1 } ], + "components": [ [ [ "yarn", 150 ] ] ] + }, { "result": "socks_ankle", "type": "recipe", diff --git a/data/json/recipes/armor/legs.json b/data/json/recipes/armor/legs.json index 1aaed6df39e1f..31c5d2e5167d1 100644 --- a/data/json/recipes/armor/legs.json +++ b/data/json/recipes/armor/legs.json @@ -40,6 +40,19 @@ "qualities": [ { "id": "SEW", "level": 1 } ], "components": [ [ [ "rag", 3 ] ] ] }, + { + "result": "xlboy_shorts", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_LEGS", + "skill_used": "tailor", + "difficulty": 2, + "time": "50 m", + "autolearn": true, + "using": [ [ "filament", 25 ] ], + "qualities": [ { "id": "SEW", "level": 1 } ], + "components": [ [ [ "rag", 6 ] ] ] + }, { "result": "boxer_briefs", "type": "recipe", @@ -53,6 +66,19 @@ "using": [ [ "sewing_standard", 15 ] ], "components": [ [ [ "rag", 3 ] ] ] }, + { + "result": "xlboxer_briefs", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_LEGS", + "skill_used": "tailor", + "difficulty": 2, + "time": "40 m", + "autolearn": true, + "book_learn": [ [ "mag_tailor", 1 ], [ "manual_tailor", 1 ] ], + "using": [ [ "sewing_standard", 20 ] ], + "components": [ [ [ "rag", 5 ] ] ] + }, { "result": "boxer_shorts", "type": "recipe", @@ -66,6 +92,19 @@ "using": [ [ "sewing_standard", 10 ] ], "components": [ [ [ "rag", 5 ] ] ] }, + { + "result": "xlboxer_shorts", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_LEGS", + "skill_used": "tailor", + "difficulty": 2, + "time": "45 m", + "autolearn": true, + "book_learn": [ [ "mag_tailor", 1 ], [ "manual_tailor", 1 ] ], + "using": [ [ "sewing_standard", 20 ] ], + "components": [ [ [ "rag", 10 ] ] ] + }, { "result": "breeches", "type": "recipe", diff --git a/data/json/recipes/armor/torso.json b/data/json/recipes/armor/torso.json index 3c051cf2a27e0..e6729842e512a 100644 --- a/data/json/recipes/armor/torso.json +++ b/data/json/recipes/armor/torso.json @@ -912,6 +912,18 @@ "using": [ [ "sewing_standard", 15 ] ], "components": [ [ [ "lycra_patch", 2 ] ] ] }, + { + "result": "xlsports_bra", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_TORSO", + "skill_used": "tailor", + "difficulty": 3, + "time": "55 m", + "autolearn": true, + "using": [ [ "sewing_standard", 25 ] ], + "components": [ [ [ "lycra_patch", 4 ] ] ] + }, { "result": "sundress", "type": "recipe", From 1e45902b49aff1788ef65ec11a022c4f8c1cdca1 Mon Sep 17 00:00:00 2001 From: Anton Burmistrov Date: Mon, 4 May 2020 02:03:28 +0400 Subject: [PATCH 38/48] Slipping when climbing down may happen only on unstable terrain below (#40035) --- src/iexamine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iexamine.cpp b/src/iexamine.cpp index db84ecbab8062..3dfb81cc05b1f 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -4288,7 +4288,7 @@ void iexamine::ledge( player &p, const tripoint &examp ) p.moves -= to_moves( 1_seconds + 1_seconds * fall_mod ); p.setpos( examp ); - if( g->slip_down( true ) ) { + if( g->m.has_flag( "UNSTABLE", examp + tripoint_below ) && g->slip_down( true ) ) { return; } From 92b6013003568b0f724ac71de9d10c90fe60e151 Mon Sep 17 00:00:00 2001 From: Rail-Runner <8814734+Rail-Runner@users.noreply.github.com> Date: Mon, 4 May 2020 01:04:01 +0300 Subject: [PATCH 39/48] Add extra forging recipes, part 2 (#40057) --- data/json/recipes/other/tool.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/data/json/recipes/other/tool.json b/data/json/recipes/other/tool.json index ceafc514a1678..3981f924d61c1 100644 --- a/data/json/recipes/other/tool.json +++ b/data/json/recipes/other/tool.json @@ -590,6 +590,19 @@ [ [ "rag", 2 ], [ "felt_patch", 2 ], [ "leather", 2 ], [ "fur", 2 ] ] ] }, + { + "type": "recipe", + "result": "ny_hook", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "difficulty": 6, + "time": "6 h", + "book_learn": [ [ "textbook_fireman", 6 ] ], + "using": [ [ "blacksmithing_standard", 16 ], [ "steel_standard", 3 ] ], + "qualities": [ { "id": "CHISEL", "level": 3 } ], + "tools": [ [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ] ] + }, { "result": "makeshift_crowbar", "type": "recipe", From 33f26cab119918cdd2deb8cce9d95cb1291ccc86 Mon Sep 17 00:00:00 2001 From: Rail-Runner <8814734+Rail-Runner@users.noreply.github.com> Date: Mon, 4 May 2020 01:06:04 +0300 Subject: [PATCH 40/48] Split some traits from professions (#40075) * Split some traits from professions --- data/json/mutations/mutations.json | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/data/json/mutations/mutations.json b/data/json/mutations/mutations.json index d5a411efd78c3..a1b28711a4bbd 100644 --- a/data/json/mutations/mutations.json +++ b/data/json/mutations/mutations.json @@ -6100,10 +6100,11 @@ "id": "PROF_HELI_PILOT", "name": "Helicopter Pilot", "points": 0, - "description": "You are a trained pilot, you wonder if you will ever have the chance to fly again.", + "description": "You are a trained helicopter pilot. This makes you one of the few living people who can operate a helicopter after the Cataclysm.", "valid": false, "purifiable": false, - "profession": true + "profession": true, + "cancels": [ "WAYFARER" ] }, { "type": "mutation", @@ -6180,11 +6181,10 @@ "type": "mutation", "id": "PROF_SKATER", "name": { "str": "Skater" }, - "points": 0, - "description": "You spent a lot of time actively maneuvering on skates before the Cataclysm, and are better at staying on your feet when checked or blocked.", - "valid": false, - "purifiable": false, - "profession": true + "points": 1, + "description": "You are skilled in maneuvering on skates. You suffer less dodging penalties and are less likely to fall down if hit in melee combat while you're wearing rollerskates or rollerblades.", + "starting_trait": true, + "valid": false }, { "type": "mutation", @@ -6559,6 +6559,7 @@ "points": -8, "description": "Whether from personal choice or childhood trauma, traveling with vehicles is off-limits to you, even if your life depended on it.", "starting_trait": true, - "valid": false + "valid": false, + "cancels": [ "PROF_HELI_PILOT" ] } ] From 9936ba5ec0128910ac3e8b8b103daefc3e555dcb Mon Sep 17 00:00:00 2001 From: Curtis Merrill Date: Sun, 3 May 2020 18:10:18 -0400 Subject: [PATCH 41/48] Magic bionics (#39940) * allow bionics to have you learn spells created a couple new functions in `spell` to facilitate setting spell levels spells you learn from a CBM make you gain the class trait added documentation for usage * add bionic sneeze beam CBM adjusted scroll drop to be CBM drop instead, and removed scroll from the drop list. additionally renamed the scroll for easier search in debug wish. --- .../mods/Magiclysm/itemgroups/spellbooks.json | 2 +- data/mods/Magiclysm/items/bionics.json | 28 ++++++++++++++ data/mods/Magiclysm/items/spell_scrolls.json | 2 +- doc/JSON_INFO.md | 1 + src/bionics.cpp | 37 +++++++++++++++++++ src/bionics.h | 6 +++ src/magic.cpp | 16 ++++++++ src/magic.h | 3 ++ 8 files changed, 93 insertions(+), 2 deletions(-) diff --git a/data/mods/Magiclysm/itemgroups/spellbooks.json b/data/mods/Magiclysm/itemgroups/spellbooks.json index 4c04f959bd34a..250e7fff81270 100644 --- a/data/mods/Magiclysm/itemgroups/spellbooks.json +++ b/data/mods/Magiclysm/itemgroups/spellbooks.json @@ -117,7 +117,7 @@ [ "spell_scroll_obfuscated_body", 10 ], [ "spell_scroll_lava_bomb", 5 ], [ "spell_scroll_druidic_healing", 20 ], - [ "spell_scroll_overcharge_eyes", 50 ] + [ "bio_sneeze_beam", 50 ] ] }, { diff --git a/data/mods/Magiclysm/items/bionics.json b/data/mods/Magiclysm/items/bionics.json index ee2a12431c53d..7fdce236541a7 100644 --- a/data/mods/Magiclysm/items/bionics.json +++ b/data/mods/Magiclysm/items/bionics.json @@ -8,5 +8,33 @@ "price": 450000, "weight": "500 g", "difficulty": 8 + }, + { + "type": "enchantment", + "id": "ench_bio_sneeze_beam", + "values": [ { "value": "MAX_MANA", "add": 500 } ] + }, + { + "id": "bio_sneeze_beam", + "copy-from": "bionic_general", + "type": "BIONIC_ITEM", + "name": { "str": "Crystallized Mana Nose Replacement" }, + "description": "A large gem made with crystallized mana and some other stabilizing metals. Comes with a specially designed power pack (installed into the skull) that does not interfere with your mana ley lines. WARNING: for Technomancer use only. By using this spell you are waiving all liability of Frikken Laser Beams Inc. and its subsidiaries.", + "price": 450000, + "weight": "750 g", + "volume": "177 ml", + "difficulty": 8 + }, + { + "id": "bio_sneeze_beam", + "type": "bionic", + "name": { "str": "Crystallized Mana Nose Replacement" }, + "description": "A large gem made with crystallized mana and some other stabilizing metals. Comes with a specially designed power pack (installed into the skull) that does not interfere with your mana ley lines. WARNING: for Technomancer use only. By using this spell you are waiving all liability of Frikken Laser Beams Inc. and its subsidiaries.", + "occupied_bodyparts": [ [ "HEAD", 10 ], [ "MOUTH", 1 ] ], + "capacity": "500 kJ", + "learned_spells": { "overcharge_eyes": 4 }, + "canceled_mutations": [ "EARTHSHAPER" ], + "enchantments": [ "ench_bio_sneeze_beam" ], + "flags": [ "BIONIC_SHOCKPROOF" ] } ] diff --git a/data/mods/Magiclysm/items/spell_scrolls.json b/data/mods/Magiclysm/items/spell_scrolls.json index f88afb85838ff..1a14e8f087579 100644 --- a/data/mods/Magiclysm/items/spell_scrolls.json +++ b/data/mods/Magiclysm/items/spell_scrolls.json @@ -743,7 +743,7 @@ "copy-from": "spell_scroll", "id": "spell_scroll_overcharge_eyes", "//": "Technomancer spell", - "name": { "str": "Scroll of Overcharge", "str_pl": "Scrolls of Overcharge" }, + "name": { "str": "Scroll of Optical Sneeze Beam", "str_pl": "Scrolls of Optical Sneeze Beam" }, "description": "You overcharge your internal batteries to send a semi-directed beam from your face.", "use_action": { "type": "learn_spell", "spells": [ "overcharge_eyes" ] } }, diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 248a64e0a85d2..417ff78a339ae 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -498,6 +498,7 @@ This section describes each json file and their contents. Each json has their ow | power_gen_emission | (_optional_) `emit_id` of the field emitted by this bionic when it produces energy. Emit_ids are defined in `emit.json`. | stat_bonus | (_optional_) List of passive stat bonus. Stat are designated as follow: "DEX", "INT", "STR", "PER". | enchantments | (_optional_) List of enchantments applied by this CBM (see MAGIC.md for instructions on enchantment. NB: enchantments are not necessarily magic.) +| learned_spells | (_optional_) Map of {spell:level} you gain when installing this CBM, and lose when you uninstall this CBM. Spell classes are automatically gained. ```C++ { diff --git a/src/bionics.cpp b/src/bionics.cpp index fdfff6f6956cc..efd1449bdb07a 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -2425,6 +2425,28 @@ void Character::add_bionic( const bionic_id &b ) add_bionic( inc_bid ); } + for( const std::pair spell_pair : b->learned_spells ) { + const spell_id learned_spell = spell_pair.first; + if( learned_spell->spell_class != trait_id( "NONE" ) ) { + const trait_id spell_class = learned_spell->spell_class; + // spells you learn from a bionic overwrite the opposite spell class. + // for best UX, include those spell classes in "canceled_mutations" + if( !has_trait( spell_class ) ) { + set_mutation( spell_class ); + on_mutation_gain( spell_class ); + add_msg_if_player( spell_class->desc() ); + } + } + if( !magic.knows_spell( learned_spell ) ) { + magic.learn_spell( learned_spell, *this, true ); + } + spell &known_spell = magic.get_spell( learned_spell ); + // spells you learn from installing a bionic upgrade spells you know if they are the same + if( known_spell.get_level() < spell_pair.second ) { + known_spell.set_level( spell_pair.second ); + } + } + reset_encumbrance(); recalc_sight_limits(); if( !b->enchantments.empty() ) { @@ -2435,6 +2457,8 @@ void Character::add_bionic( const bionic_id &b ) void Character::remove_bionic( const bionic_id &b ) { bionic_collection new_my_bionics; + // any spells you should not forget due to still having a bionic installed that has it. + std::set cbm_spells; for( bionic &i : *my_bionics ) { if( b == i.id ) { continue; @@ -2445,8 +2469,20 @@ void Character::remove_bionic( const bionic_id &b ) continue; } + for( const std::pair &spell_pair : i.id->learned_spells ) { + cbm_spells.emplace( spell_pair.first ); + } + new_my_bionics.push_back( bionic( i.id, i.invlet ) ); } + + // any spells you learn from installing a bionic you forget. + for( const std::pair &spell_pair : b->learned_spells ) { + if( cbm_spells.count( spell_pair.first ) == 0 ) { + magic.forget_spell( spell_pair.first ); + } + } + *my_bionics = new_my_bionics; reset_encumbrance(); recalc_sight_limits(); @@ -2576,6 +2612,7 @@ void load_bionic( const JsonObject &jsobj ) assign( jsobj, "coverage_power_gen_penalty", new_bionic.coverage_power_gen_penalty ); assign( jsobj, "is_remote_fueled", new_bionic.is_remote_fueled ); + assign( jsobj, "learned_spells", new_bionic.learned_spells ); jsobj.read( "canceled_mutations", new_bionic.canceled_mutations ); jsobj.read( "included_bionics", new_bionic.included_bionics ); jsobj.read( "included", new_bionic.included ); diff --git a/src/bionics.h b/src/bionics.h index 6d2d5a1d8918f..a29ab8a307844 100644 --- a/src/bionics.h +++ b/src/bionics.h @@ -130,6 +130,12 @@ struct bionic_data { * E.g. enhanced optic bionic may cancel HYPEROPIC trait. */ std::vector canceled_mutations; + + /** + * The spells you learn when you install this bionic, and what level you learn them at. + */ + std::map learned_spells; + /** * Additional bionics that are installed automatically when this * bionic is installed. This can be used to install several bionics diff --git a/src/magic.cpp b/src/magic.cpp index f6d12a7ba52ed..c925b55c468db 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -599,6 +599,22 @@ void spell::gain_level() gain_exp( exp_to_next_level() ); } +void spell::gain_levels( int gains ) +{ + if( gains < 1 ) { + return; + } + for( int gained = 0; gained < gains || is_max_level(); gained++ ) { + gain_level(); + } +} + +void spell::set_level( int nlevel ) +{ + experience = 0; + gain_levels( nlevel ); +} + bool spell::is_max_level() const { return get_level() >= type->max_level; diff --git a/src/magic.h b/src/magic.h index 45fae237e8b8e..c762a2a627684 100644 --- a/src/magic.h +++ b/src/magic.h @@ -322,6 +322,9 @@ class spell float exp_modifier( const Character &guy ) const; // level up! void gain_level(); + // gains a number of levels, or until max. 0 or less just returns early. + void gain_levels( int gains ); + void set_level( int nlevel ); // is the spell at max level? bool is_max_level() const; // what is the max level of the spell From 1a517a94b03d2830427626f251d9063acf2107d6 Mon Sep 17 00:00:00 2001 From: anothersimulacrum <42699974+anothersimulacrum@users.noreply.github.com> Date: Sun, 3 May 2020 15:35:23 -0700 Subject: [PATCH 42/48] Prevent copying in range-based loops --- src/bionics.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bionics.cpp b/src/bionics.cpp index f0e1783b28dc3..c0e9567ed056e 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -2425,7 +2425,7 @@ void Character::add_bionic( const bionic_id &b ) add_bionic( inc_bid ); } - for( const std::pair spell_pair : b->learned_spells ) { + for( const std::pair &spell_pair : b->learned_spells ) { const spell_id learned_spell = spell_pair.first; if( learned_spell->spell_class != trait_id( "NONE" ) ) { const trait_id spell_class = learned_spell->spell_class; @@ -2469,7 +2469,7 @@ void Character::remove_bionic( const bionic_id &b ) continue; } - for( const std::pair &spell_pair : i.id->learned_spells ) { + for( const std::pair &spell_pair : i.id->learned_spells ) { cbm_spells.emplace( spell_pair.first ); } @@ -2477,7 +2477,7 @@ void Character::remove_bionic( const bionic_id &b ) } // any spells you learn from installing a bionic you forget. - for( const std::pair &spell_pair : b->learned_spells ) { + for( const std::pair &spell_pair : b->learned_spells ) { if( cbm_spells.count( spell_pair.first ) == 0 ) { magic.forget_spell( spell_pair.first ); } From b3f3ea48e0a90b7f9a52c059b7eff026b1ee967b Mon Sep 17 00:00:00 2001 From: anothersimulacrum <42699974+anothersimulacrum@users.noreply.github.com> Date: Sun, 3 May 2020 16:11:32 -0700 Subject: [PATCH 43/48] Update tea box to be a container --- data/json/items/containers.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/items/containers.json b/data/json/items/containers.json index d1ea4bea9ede5..5b2880bd627a0 100644 --- a/data/json/items/containers.json +++ b/data/json/items/containers.json @@ -1608,7 +1608,7 @@ }, { "id": "box_tea", - "type": "CONTAINER", + "type": "GENERIC", "category": "container", "name": { "str": "small cardboard box of tea bags", "str_pl": "small cardboard boxes of tea bags" }, "description": "A very small cardboard box with tea brand written on it.", @@ -1619,6 +1619,6 @@ "material": "cardboard", "symbol": ")", "color": "green", - "contains": "100 ml" + "pocket_data": [ { "pocket_type": "CONTAINER", "rigid": true, "max_contains_volume": "100 ml", "max_contains_weight": "200 g" } ] } ] From d15c896ecbbc14448b1a7b519bebb0393c354dde Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Mon, 4 May 2020 00:19:13 +0000 Subject: [PATCH 44/48] Add newly required tools to crafting test --- tests/crafting_test.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/crafting_test.cpp b/tests/crafting_test.cpp index 2c5140ce20738..48cd1f8400f3e 100644 --- a/tests/crafting_test.cpp +++ b/tests/crafting_test.cpp @@ -544,6 +544,8 @@ TEST_CASE( "total crafting time with or without interruption", "[crafting][time] std::vector tools; tools.emplace_back( "hammer" ); + tools.emplace_back( "wrench" ); + tools.emplace_back( "hacksaw" ); // Will interrupt after 2 turns, so craft needs to take at least that long REQUIRE( expected_turns_taken > 2 ); From 17b6b766a1ef150d7ad63cbb13ad8ba25ea236a0 Mon Sep 17 00:00:00 2001 From: Anton Burmistrov Date: Mon, 4 May 2020 04:52:15 +0400 Subject: [PATCH 45/48] Bionic fingerpick fix (#39857) * Added new PICKABLE flag to all pickable terrains and locked gun safe furniture Also added documentation. * Reworked bionic lockpicks activation Now it temporarily creates a copy of a fake bionic lockpicks item in player inventory, activates activity with this item, and immediately after that removes this item from inventory. * 100% chance to pick lock with bionic picklocks * Replaced hardcoded terrain/furniture list with a check for PICKABLE flag * Special case for lockpicking activity: remove fake bionic lockpick item from player's inventory if activity is canceled mid-way --- .../furniture-storage.json | 2 +- .../furniture_and_terrain/terrain-doors.json | 29 ++++++++++++++++--- data/json/items/tool/entry_tools.json | 1 + doc/JSON_FLAGS.md | 1 + src/activity_handlers.cpp | 7 ++--- src/bionics.cpp | 23 ++++++++------- src/character.cpp | 9 ++++++ src/iexamine.cpp | 2 -- src/iuse_actor.cpp | 22 ++------------ 9 files changed, 54 insertions(+), 42 deletions(-) diff --git a/data/json/furniture_and_terrain/furniture-storage.json b/data/json/furniture_and_terrain/furniture-storage.json index 4bb233b63f02f..56d7179002850 100644 --- a/data/json/furniture_and_terrain/furniture-storage.json +++ b/data/json/furniture_and_terrain/furniture-storage.json @@ -293,7 +293,7 @@ "coverage": 30, "required_str": 14, "max_volume": "250 L", - "flags": [ "TRANSPARENT", "CONTAINER", "SEALED", "PLACE_ITEM", "MOUNTABLE", "MINEABLE" ], + "flags": [ "TRANSPARENT", "CONTAINER", "SEALED", "PLACE_ITEM", "MOUNTABLE", "MINEABLE", "PICKABLE" ], "examine_action": "locked_object_pickable", "bash": { "str_min": 40, diff --git a/data/json/furniture_and_terrain/terrain-doors.json b/data/json/furniture_and_terrain/terrain-doors.json index 7e6619830c10b..6d380f4ce9828 100644 --- a/data/json/furniture_and_terrain/terrain-doors.json +++ b/data/json/furniture_and_terrain/terrain-doors.json @@ -1391,7 +1391,16 @@ "move_cost": 0, "coverage": 95, "roof": "t_flat_roof", - "flags": [ "FLAMMABLE_ASH", "NOITEM", "REDUCE_SCENT", "CONNECT_TO_WALL", "BARRICADABLE_DOOR", "LOCKED", "BLOCK_WIND" ], + "flags": [ + "FLAMMABLE_ASH", + "NOITEM", + "REDUCE_SCENT", + "CONNECT_TO_WALL", + "BARRICADABLE_DOOR", + "LOCKED", + "BLOCK_WIND", + "PICKABLE" + ], "examine_action": "locked_object", "bash": { "str_min": 8, @@ -1428,6 +1437,7 @@ "CONNECT_TO_WALL", "BARRICADABLE_DOOR", "LOCKED", + "PICKABLE", "BLOCK_WIND" ], "examine_action": "locked_object", @@ -1467,6 +1477,7 @@ "CONNECT_TO_WALL", "BARRICADABLE_DOOR", "LOCKED", + "PICKABLE", "BLOCK_WIND" ], "open": "t_door_o_peep", @@ -1498,7 +1509,17 @@ "move_cost": 0, "coverage": 95, "roof": "t_flat_roof", - "flags": [ "FLAMMABLE_ASH", "ALARMED", "NOITEM", "REDUCE_SCENT", "CONNECT_TO_WALL", "BARRICADABLE_DOOR", "LOCKED", "BLOCK_WIND" ], + "flags": [ + "FLAMMABLE_ASH", + "ALARMED", + "NOITEM", + "REDUCE_SCENT", + "CONNECT_TO_WALL", + "BARRICADABLE_DOOR", + "LOCKED", + "BLOCK_WIND", + "PICKABLE" + ], "examine_action": "locked_object", "bash": { "str_min": 8, @@ -2156,7 +2177,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_flat_roof", - "flags": [ "NOITEM", "REDUCE_SCENT", "OPENCLOSE_INSIDE", "CONNECT_TO_WALL", "LOCKED", "MINEABLE", "BLOCK_WIND" ], + "flags": [ "NOITEM", "REDUCE_SCENT", "OPENCLOSE_INSIDE", "CONNECT_TO_WALL", "LOCKED", "MINEABLE", "BLOCK_WIND", "PICKABLE" ], "open": "t_door_metal_o", "examine_action": "locked_object_pickable", "bash": { @@ -2239,7 +2260,7 @@ "color": "cyan", "move_cost": 0, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "NOITEM", "PERMEABLE", "CONNECT_TO_WALL", "LOCKED", "THIN_OBSTACLE" ], + "flags": [ "TRANSPARENT", "NOITEM", "PERMEABLE", "CONNECT_TO_WALL", "LOCKED", "THIN_OBSTACLE", "PICKABLE" ], "examine_action": "locked_object_pickable", "bash": { "str_min": 30, diff --git a/data/json/items/tool/entry_tools.json b/data/json/items/tool/entry_tools.json index d69d78e4c6bd5..8c6de6bb8f256 100644 --- a/data/json/items/tool/entry_tools.json +++ b/data/json/items/tool/entry_tools.json @@ -103,6 +103,7 @@ "max_charges": 1, "charges_per_use": 1, "qualities": [ [ "LOCKPICK", 40 ] ], + "flags": [ "PSEUDO" ], "use_action": { "type": "picklock", "pick_quality": 40 } } ] diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index 4635e64d87fd3..97a8e86e8708a 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -567,6 +567,7 @@ List of known flags, used in both `terrain.json` and `furniture.json`. - ```OPENCLOSE_INSIDE``` If it's a door (with an 'open' or 'close' field), it can only be opened or closed if you're inside. - ```PAINFUL``` May cause a small amount of pain. - ```PERMEABLE``` Permeable for gases. +- ```PICKABLE``` This terrain/furniture could be picked with lockpicks. - ```PLACE_ITEM``` Valid terrain for `place_item()` to put items on. - ```PLANT``` A 'furniture' that grows and fruits. - ```PLANTABLE``` This terrain or furniture can have seeds planted in it. diff --git a/src/activity_handlers.cpp b/src/activity_handlers.cpp index 5975f8f5d032b..b1f8dd053196c 100644 --- a/src/activity_handlers.cpp +++ b/src/activity_handlers.cpp @@ -241,8 +241,6 @@ static const mtype_id mon_skeleton( "mon_skeleton" ); static const mtype_id mon_zombie_crawler( "mon_zombie_crawler" ); static const bionic_id bio_ears( "bio_ears" ); -static const bionic_id bio_fingerhack( "bio_fingerhack" ); -static const bionic_id bio_lockpick( "bio_lockpick" ); static const bionic_id bio_painkiller( "bio_painkiller" ); static const trait_id trait_DEBUG_HS( "DEBUG_HS" ); @@ -2540,6 +2538,7 @@ void activity_handlers::lockpicking_finish( player_activity *act, player *p ) item *it = loc.get_item(); if( it == nullptr ) { debugmsg( "lockpick item location lost" ); + p->cancel_activity(); return; } @@ -2582,7 +2581,7 @@ void activity_handlers::lockpicking_finish( player_activity *act, player *p ) it->get_quality( qual_LOCKPICK ) - it->damage() / 2000.0 ) + p->dex_cur / 4.0; int lock_roll = rng( 1, 120 ); - if( pick_roll >= lock_roll ) { + if( ( pick_roll >= lock_roll ) || it->has_flag( "PSEUDO" ) ) { p->practice( skill_lockpick, lock_roll ); g->m.has_furn( act->placement ) ? g->m.furn_set( act->placement, new_furn_type ) : @@ -2611,7 +2610,7 @@ void activity_handlers::lockpicking_finish( player_activity *act, player *p ) p->global_sm_location() ); } } - if( destroy ) { + if( destroy || it->has_flag( "PSEUDO" ) ) { p->i_rem( it ); } diff --git a/src/bionics.cpp b/src/bionics.cpp index c0e9567ed056e..f0c56bfcd83d2 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -752,21 +752,22 @@ bool Character::activate_bionic( int b, bool eff_only ) mod_moves( -100 ); } else if( bio.id == bio_lockpick ) { - tmp_item = item( "pseudo_bio_picklock", 0 ); g->refresh_all(); - int charges = tmp_item.charges; - bool used = false; - if( invoke_item( &tmp_item ) ) { - if( tmp_item.charges != charges ) { - used = true; + const cata::optional pnt = choose_adjacent( _( "Use your lockpick where?" ) ); + if( pnt && g->m.has_flag( "PICKABLE", *pnt ) ) { + g->u.i_add( item( "pseudo_bio_picklock" ) ); + std::vector bio_picklocks = g->u.items_with( []( const item & itm ) { + return itm.typeId() == "pseudo_bio_picklock"; + } ); + if( !bio_picklocks.empty() ) { + add_msg_activate(); + g->u.assign_activity( activity_id( "ACT_LOCKPICK" ), 400 ); + g->u.activity.targets.push_back( item_location( g->u, bio_picklocks[0] ) ); + g->u.activity.placement = *pnt; } - } - - if( used ) { - add_msg_activate(); - mod_moves( -100 ); } else { refund_power(); + add_msg_if_player( m_info, _( "There is nothing to lockpick nearby." ) ); return false; } } else if( bio.id == bio_flashbang ) { diff --git a/src/character.cpp b/src/character.cpp index 8968bec72c87c..faffd78b38e40 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -89,6 +89,7 @@ struct dealt_projectile_attack; static const activity_id ACT_DROP( "ACT_DROP" ); +static const activity_id ACT_LOCKPICK( "ACT_LOCKPICK" ); static const activity_id ACT_MOVE_ITEMS( "ACT_MOVE_ITEMS" ); static const activity_id ACT_STASH( "ACT_STASH" ); static const activity_id ACT_TREE_COMMUNION( "ACT_TREE_COMMUNION" ); @@ -9385,6 +9386,14 @@ void Character::cancel_activity() if( has_activity( ACT_TRY_SLEEP ) ) { remove_value( "sleep_query" ); } + if( has_activity( ACT_LOCKPICK ) ) { + std::vector bio_picklocks = g->u.items_with( []( const item & itm ) { + return itm.typeId() == "pseudo_bio_picklock"; + } ); + if( !bio_picklocks.empty() ) { + g->u.i_rem( bio_picklocks[0] ); + } + } // Clear any backlog items that aren't auto-resume. for( auto backlog_item = backlog.begin(); backlog_item != backlog.end(); ) { if( backlog_item->auto_resume ) { diff --git a/src/iexamine.cpp b/src/iexamine.cpp index 3dfb81cc05b1f..c02f316e39ef5 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -113,7 +113,6 @@ static const skill_id skill_cooking( "cooking" ); static const skill_id skill_electronics( "electronics" ); static const skill_id skill_fabrication( "fabrication" ); static const skill_id skill_firstaid( "firstaid" ); -static const skill_id skill_lockpick( "lockpick" ); static const skill_id skill_mechanics( "mechanics" ); static const skill_id skill_survival( "survival" ); @@ -148,7 +147,6 @@ static const mtype_id mon_spider_widow_giant_s( "mon_spider_widow_giant_s" ); static const bionic_id bio_ears( "bio_ears" ); static const bionic_id bio_fingerhack( "bio_fingerhack" ); static const bionic_id bio_lighter( "bio_lighter" ); -static const bionic_id bio_lockpick( "bio_lockpick" ); static const bionic_id bio_painkiller( "bio_painkiller" ); static const bionic_id bio_power_storage( "bio_power_storage" ); static const bionic_id bio_power_storage_mkII( "bio_power_storage_mkII" ); diff --git a/src/iuse_actor.cpp b/src/iuse_actor.cpp index 7babb2c3d89d2..597c83e911af3 100644 --- a/src/iuse_actor.cpp +++ b/src/iuse_actor.cpp @@ -1055,29 +1055,11 @@ int pick_lock_actor::use( player &p, item &it, bool, const tripoint & ) const return 0; } - const std::set allowed_ter_id { - t_chaingate_l, - t_door_locked, - t_door_locked_alarm, - t_door_locked_interior, - t_door_locked_peep, - t_door_metal_pickable, - t_door_bar_locked - }; - const std::set allowed_furn_id { - f_gunsafe_ml - }; - - const std::function f = [&allowed_ter_id, - &allowed_furn_id]( const tripoint & pnt ) { + const std::function f = []( const tripoint & pnt ) { if( pnt == g->u.pos() ) { return false; } - const ter_id ter = g->m.ter( pnt ); - const furn_id furn = g->m.furn( pnt ); - const bool is_allowed = allowed_ter_id.find( ter ) != allowed_ter_id.end() || - allowed_furn_id.find( furn ) != allowed_furn_id.end(); - return is_allowed; + return g->m.has_flag( "PICKABLE", pnt ); }; const cata::optional pnt_ = choose_adjacent_highlight( From 87b94d9dcc6c3df6b0bcb8045baab0b2a9812f55 Mon Sep 17 00:00:00 2001 From: CodeBandit <63547126+CodeBandit@users.noreply.github.com> Date: Sun, 3 May 2020 21:26:58 -0400 Subject: [PATCH 46/48] Max stamina modifiers from mutations now affect stamina regen (#39994) --- src/character.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/character.cpp b/src/character.cpp index faffd78b38e40..e7394c226089b 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -7423,8 +7423,9 @@ void Character::update_stamina( int turns ) float stamina_recovery = 0.0f; // Recover some stamina every turn. // Mutated stamina works even when winded + // max stamina modifers from mutation also affect stamina multi float stamina_multiplier = ( !has_effect( effect_winded ) ? 1.0f : 0.1f ) + - mutation_value( stamina_regen_modifier ); + mutation_value( stamina_regen_modifier ) + ( mutation_value( "max_stamina_modifier" ) - 1.0f ); // But mouth encumbrance interferes, even with mutated stamina. stamina_recovery += stamina_multiplier * std::max( 1.0f, base_regen_rate - ( encumb( bp_mouth ) / 5.0f ) ); From 47b1e3db02e8519d1127444dd762f6758b092f12 Mon Sep 17 00:00:00 2001 From: Fris0uman <41293484+Fris0uman@users.noreply.github.com> Date: Mon, 4 May 2020 03:44:28 +0200 Subject: [PATCH 47/48] Allow HEALING_RATE for any effect (#40072) --- src/character.cpp | 39 ++++++++++++++------------------------- 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/src/character.cpp b/src/character.cpp index e7394c226089b..8de43a73edc6b 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -6894,40 +6894,29 @@ float Character::healing_rate( float at_rest_quality ) const float Character::healing_rate_medicine( float at_rest_quality, const body_part bp ) const { float rate_medicine = 0.0f; - float bandaged_rate = 0.0f; - float disinfected_rate = 0.0f; - const effect &e_bandaged = get_effect( effect_bandaged, bp ); - const effect &e_disinfected = get_effect( effect_disinfected, bp ); + for( const std::pair>> + &elem : *effects ) { + for( const std::pair &i : elem.second ) { + const effect &eff = i.second; + float tmp_rate = static_cast( eff.get_amount( "HEAL_RATE" ) ) / to_turns + ( 24_hours ); - if( !e_bandaged.is_null() ) { - bandaged_rate += static_cast( e_bandaged.get_amount( "HEAL_RATE" ) ) / to_turns - ( 24_hours ); - if( bp == bp_head ) { - bandaged_rate *= e_bandaged.get_amount( "HEAL_HEAD" ) / 100.0f; - } - if( bp == bp_torso ) { - bandaged_rate *= e_bandaged.get_amount( "HEAL_TORSO" ) / 100.0f; - } - } - - if( !e_disinfected.is_null() ) { - disinfected_rate += static_cast( e_disinfected.get_amount( "HEAL_RATE" ) ) / to_turns - ( 24_hours ); - if( bp == bp_head ) { - disinfected_rate *= e_disinfected.get_amount( "HEAL_HEAD" ) / 100.0f; - } - if( bp == bp_torso ) { - disinfected_rate *= e_disinfected.get_amount( "HEAL_TORSO" ) / 100.0f; + if( bp == bp_head ) { + tmp_rate *= eff.get_amount( "HEAL_HEAD" ) / 100.0f; + } + if( bp == bp_torso ) { + tmp_rate *= eff.get_amount( "HEAL_TORSO" ) / 100.0f; + } + rate_medicine += tmp_rate; } } - rate_medicine += bandaged_rate + disinfected_rate; rate_medicine *= 1.0f + mutation_value( "healing_resting" ); rate_medicine *= 1.0f + at_rest_quality; // increase healing if character has both effects - if( !e_bandaged.is_null() && !e_disinfected.is_null() ) { + if( has_effect( effect_bandaged ) && has_effect( effect_disinfected ) ) { rate_medicine *= 2; } From 4aaba046197ef0662494314032cbe150447e3b31 Mon Sep 17 00:00:00 2001 From: anothersimulacrum <42699974+anothersimulacrum@users.noreply.github.com> Date: Sat, 2 May 2020 11:55:02 -0700 Subject: [PATCH 48/48] Replace random lab turrets with lab security There's not really any rationale for placing turrets in random locations that aren't of high value in labs. It makes much more sense to have lab security there, as opposed to turrets. --- data/json/mapgen/lab/lab_floorplan_cross.json | 24 +++++++------------ data/json/mapgen/lab/lab_floorplans.json | 2 +- data/json/mapgen/lab/lab_rooms.json | 4 ++-- data/json/mapgen/lab/lab_rooms_wall.json | 10 ++++---- data/json/monstergroups/lab.json | 1 - src/mapgen.cpp | 5 ++-- 6 files changed, 18 insertions(+), 28 deletions(-) diff --git a/data/json/mapgen/lab/lab_floorplan_cross.json b/data/json/mapgen/lab/lab_floorplan_cross.json index f8e035fd76e33..82c5d3af0d7d8 100644 --- a/data/json/mapgen/lab/lab_floorplan_cross.json +++ b/data/json/mapgen/lab/lab_floorplan_cross.json @@ -659,8 +659,7 @@ " ", " " ], - "palettes": [ "lab_palette", "lab_loot_bionic_vault" ], - "place_monster": [ { "monster": "mon_turret_rifle", "x": [ 11, 12 ], "y": [ 2, 5 ], "chance": 25 } ] + "palettes": [ "lab_palette", "lab_loot_bionic_vault" ] } }, { @@ -695,8 +694,7 @@ " ", " " ], - "palettes": [ "lab_palette", "lab_loot_serum_vault" ], - "place_monster": [ { "monster": "mon_turret_rifle", "x": [ 11, 12 ], "y": [ 2, 5 ], "chance": 10 } ] + "palettes": [ "lab_palette", "lab_loot_serum_vault" ] } }, { @@ -731,8 +729,7 @@ " ", " " ], - "palettes": [ "lab_palette", "lab_loot_bionic_vault" ], - "place_monster": [ { "monster": "mon_turret_rifle", "x": [ 2, 5 ], "y": [ 11, 12 ], "chance": 25 } ] + "palettes": [ "lab_palette", "lab_loot_bionic_vault" ] } }, { @@ -767,8 +764,7 @@ " ", " " ], - "palettes": [ "lab_palette", "lab_loot_serum_vault" ], - "place_monster": [ { "monster": "mon_turret_rifle", "x": [ 2, 5 ], "y": [ 11, 12 ], "chance": 10 } ] + "palettes": [ "lab_palette", "lab_loot_serum_vault" ] } }, { @@ -803,8 +799,7 @@ " ------ ", "####################### " ], - "palettes": [ "lab_palette", "lab_loot_bionic_vault" ], - "place_monster": [ { "monster": "mon_turret_rifle", "x": [ 11, 12 ], "y": [ 18, 21 ], "chance": 25 } ] + "palettes": [ "lab_palette", "lab_loot_bionic_vault" ] } }, { @@ -839,8 +834,7 @@ " ------ ", "####################### " ], - "palettes": [ "lab_palette", "lab_loot_serum_vault" ], - "place_monster": [ { "monster": "mon_turret_rifle", "x": [ 11, 12 ], "y": [ 18, 21 ], "chance": 10 } ] + "palettes": [ "lab_palette", "lab_loot_serum_vault" ] } }, { @@ -875,8 +869,7 @@ " #", " " ], - "palettes": [ "lab_palette", "lab_loot_bionic_vault" ], - "place_monster": [ { "monster": "mon_turret_rifle", "x": [ 18, 21 ], "y": [ 11, 12 ], "chance": 25 } ] + "palettes": [ "lab_palette", "lab_loot_bionic_vault" ] } }, { @@ -911,8 +904,7 @@ " #", " " ], - "palettes": [ "lab_palette", "lab_loot_serum_vault" ], - "place_monster": [ { "monster": "mon_turret_rifle", "x": [ 18, 21 ], "y": [ 11, 12 ], "chance": 10 } ] + "palettes": [ "lab_palette", "lab_loot_serum_vault" ] } } ] diff --git a/data/json/mapgen/lab/lab_floorplans.json b/data/json/mapgen/lab/lab_floorplans.json index 63daffe762179..d839a92416446 100644 --- a/data/json/mapgen/lab/lab_floorplans.json +++ b/data/json/mapgen/lab/lab_floorplans.json @@ -488,7 +488,7 @@ "r": { "items": [ { "item": "mine_equipment", "chance": 30 } ] }, "c": { "items": [ { "item": "chem_lab", "chance": 30 }, { "item": "tools_science", "chance": 30 } ] } }, - "place_monster": [ { "monster": "mon_turret_rifle", "x": 11, "y": 9, "chance": 20 } ], + "place_monsters": [ { "monster": "GROUP_LAB_SECURITY", "x": [ 0, 11 ], "y": [ 8, 9 ], "chance": 20, "repeat": 7 } ], "place_nested": [ { "chunks": [ "lab_spawn_9x9_crossdoors" ], "x": 6, "y": 11 }, { "chunks": [ "lab_spawn_7x7_wall_nw" ], "x": 12, "y": 2 }, diff --git a/data/json/mapgen/lab/lab_rooms.json b/data/json/mapgen/lab/lab_rooms.json index 796bcad8509fb..99b271c604cec 100644 --- a/data/json/mapgen/lab/lab_rooms.json +++ b/data/json/mapgen/lab/lab_rooms.json @@ -131,7 +131,7 @@ ], "palettes": [ "lab_palette", "lab_palette_map_computer" ], "terrain": { "c": [ "t_thconc_floor" ] }, - "place_monster": [ { "monster": "mon_turret_rifle", "x": [ 2, 3 ], "y": [ 3, 3 ] } ] + "place_monsters": [ { "monster": "GROUP_LAB_SECURITY", "x": [ 0, 6 ], "y": [ 0, 6 ], "repeat": [ 1, 6 ], "chance": 3 } ] } }, { @@ -154,7 +154,7 @@ ], "palettes": [ "lab_palette", "lab_palette_map_computer" ], "terrain": { "c": [ "t_thconc_floor" ] }, - "place_monster": [ { "monster": "mon_turret_rifle", "x": [ 4, 4 ], "y": [ 1, 4 ] } ] + "place_monsters": [ { "monster": "GROUP_LAB_SECURITY", "x": [ 0, 6 ], "y": [ 0, 6 ], "repeat": [ 1, 6 ], "chance": 3 } ] } }, { diff --git a/data/json/mapgen/lab/lab_rooms_wall.json b/data/json/mapgen/lab/lab_rooms_wall.json index 8d0c59f93a048..b68fb2f6fdd90 100644 --- a/data/json/mapgen/lab/lab_rooms_wall.json +++ b/data/json/mapgen/lab/lab_rooms_wall.json @@ -189,8 +189,7 @@ "|-------" ], "palettes": [ "lab_palette", "lab_loot_bionic_vault" ], - "terrain": { "M": "t_wall_metal" }, - "place_monster": [ { "monster": "mon_turret_rifle", "x": 5, "y": 3, "chance": 25 } ] + "terrain": { "M": "t_wall_metal" } } }, { @@ -211,8 +210,7 @@ "|#######" ], "palettes": [ "lab_palette", "lab_loot_serum_vault" ], - "terrain": { "M": "t_wall_metal" }, - "place_monster": [ { "monster": "mon_turret_rifle", "x": 5, "y": 3, "chance": 10 } ] + "terrain": { "M": "t_wall_metal" } } }, { @@ -435,14 +433,14 @@ "g,,,,,,,,,", "|,,,,,,,,,", "g,,,,,,,,,", - "|x,,,7,,,x", + "|x,,,,,,,x", "g,,,,,,,,,", "|,,,,,,,,,", "g,,,,,,,,,", "|x,,,x,,,x" ], "palettes": [ "lab_palette" ], - "monster": { "7": { "monster": "mon_turret_rifle" } }, + "place_monsters": [ { "monster": "GROUP_LAB_SECURITY", "x": [ 1, 9 ], "y": [ 1, 9 ] } ], "terrain": { "g": "t_wall_glass", "G": "t_door_glass_lab_c", "7": "t_thconc_floor" } } }, diff --git a/data/json/monstergroups/lab.json b/data/json/monstergroups/lab.json index 99724ebfa3145..69c3293bd6acd 100644 --- a/data/json/monstergroups/lab.json +++ b/data/json/monstergroups/lab.json @@ -99,7 +99,6 @@ { "monster": "mon_skitterbot", "freq": 85, "cost_multiplier": 0 }, { "monster": "mon_skitterbot", "freq": 85, "cost_multiplier": 0, "pack_size": [ 2, 3 ] }, { "monster": "mon_skitterbot", "freq": 1, "cost_multiplier": 0, "pack_size": [ 8, 12 ] }, - { "monster": "mon_turret_rifle", "freq": 85, "cost_multiplier": 0 }, { "monster": "mon_secubot", "freq": 1, "cost_multiplier": 10 }, { "monster": "mon_talon_m202a1", "freq": 1, "cost_multiplier": 15 }, { "monster": "mon_zombie_bio_op", "freq": 50, "cost_multiplier": 5 }, diff --git a/src/mapgen.cpp b/src/mapgen.cpp index d24a6f64ba067..d3b70621fe1e7 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -80,6 +80,7 @@ static const mongroup_id GROUP_FUNGI_FUNGALOID( "GROUP_FUNGI_FUNGALOID" ); static const mongroup_id GROUP_HAZMATBOT( "GROUP_HAZMATBOT" ); static const mongroup_id GROUP_LAB( "GROUP_LAB" ); static const mongroup_id GROUP_LAB_CYBORG( "GROUP_LAB_CYBORG" ); +static const mongroup_id GROUP_LAB_SECURITY( "GROUP_LAB_SECURITY" ); static const mongroup_id GROUP_NETHER( "GROUP_NETHER" ); static const mongroup_id GROUP_PLAIN( "GROUP_PLAIN" ); static const mongroup_id GROUP_ROBOT_SECUBOT( "GROUP_ROBOT_SECUBOT" ); @@ -6207,7 +6208,7 @@ void science_room( map *m, const point &p1, const point &p2, int z, int rotate ) tmpcomp->add_failure( COMPFAIL_SHUTDOWN ); tmpcomp->add_failure( COMPFAIL_ALARM ); tmpcomp->add_failure( COMPFAIL_DAMAGE ); - m->place_spawns( GROUP_TURRET, 1, + m->place_spawns( GROUP_LAB_SECURITY, 1, point( static_cast( ( p1.x + p2.x ) / 2 ), desk ), point( static_cast( ( p1.x + p2.x ) / 2 ), desk ), 1, true ); } else { @@ -6223,7 +6224,7 @@ void science_room( map *m, const point &p1, const point &p2, int z, int rotate ) tmpcomp->add_failure( COMPFAIL_SHUTDOWN ); tmpcomp->add_failure( COMPFAIL_ALARM ); tmpcomp->add_failure( COMPFAIL_DAMAGE ); - m->place_spawns( GROUP_TURRET, 1, + m->place_spawns( GROUP_LAB_SECURITY, 1, point( desk, static_cast( ( p1.y + p2.y ) / 2 ) ), point( desk, static_cast( ( p1.y + p2.y ) / 2 ) ), 1, true ); }