From 8337ccac448e38b1b4b5266fcaf98663fd8e6a8e Mon Sep 17 00:00:00 2001 From: Qustinnus Date: Tue, 7 Jan 2020 16:02:19 +0100 Subject: [PATCH] Fixes integrity issues related to datum mats (#48586) --- code/__DEFINES/materials.dm | 1 + code/datums/materials/_material.dm | 38 ++++++++++--------- .../objects/structures/beds_chairs/chair.dm | 4 +- code/game/objects/structures/table_frames.dm | 2 +- code/game/objects/structures/tables_racks.dm | 2 +- code/game/objects/structures/watercloset.dm | 4 +- code/modules/clothing/head/helmet.dm | 2 +- code/modules/clothing/suits/armor.dm | 2 +- code/modules/mining/ores_coins.dm | 2 +- 9 files changed, 30 insertions(+), 27 deletions(-) diff --git a/code/__DEFINES/materials.dm b/code/__DEFINES/materials.dm index 0e5234792af..3c4a78ea7a5 100644 --- a/code/__DEFINES/materials.dm +++ b/code/__DEFINES/materials.dm @@ -12,3 +12,4 @@ #define MATERIAL_COLOR (1<<0) #define MATERIAL_ADD_PREFIX (1<<1) #define MATERIAL_NO_EFFECTS (1<<2) +#define MATERIAL_AFFECT_STATISTICS (1<<3) diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index 37fd67eff5f..b5ba7246967 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -1,6 +1,6 @@ /*! Material datum -Simple datum which is instanced once per type and is used for every object of said material. It has a variety of variables that define behavior. Subtyping from this makes it easier to create your own materials. +Simple datum which is instanced once per type and is used for every object of said material. It has a variety of variables that define behavior. Subtyping from this makes it easier to create your own materials. */ @@ -27,7 +27,7 @@ Simple datum which is instanced once per type and is used for every object of sa ///Armor modifiers, multiplies an items normal armor vars by these amounts. var/armor_modifiers = list("melee" = 1, "bullet" = 1, "laser" = 1, "energy" = 1, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 1, "acid" = 1) ///How beautiful is this material per unit - var/beauty_modifier = 0 + var/beauty_modifier = 0 ///This proc is called when the material is added to an object. /datum/material/proc/on_applied(atom/source, amount, material_flags) @@ -48,20 +48,21 @@ Simple datum which is instanced once per type and is used for every object of sa ///This proc is called when the material is added to an object specifically. /datum/material/proc/on_applied_obj(var/obj/o, amount, material_flags) - var/new_max_integrity = CEILING(o.max_integrity * integrity_modifier, 1) - o.modify_max_integrity(new_max_integrity) - o.force *= strength_modifier - o.throwforce *= strength_modifier + if(material_flags & MATERIAL_AFFECT_STATISTICS) + var/new_max_integrity = CEILING(o.max_integrity * integrity_modifier, 1) + o.modify_max_integrity(new_max_integrity) + o.force *= strength_modifier + o.throwforce *= strength_modifier - var/list/temp_armor_list = list() //Time to add armor modifiers! + var/list/temp_armor_list = list() //Time to add armor modifiers! - if(!istype(o.armor)) - return - var/list/current_armor = o.armor?.getList() + if(!istype(o.armor)) + return + var/list/current_armor = o.armor?.getList() - for(var/i in current_armor) - temp_armor_list[i] = current_armor[i] * armor_modifiers[i] - o.armor = getArmor(arglist(temp_armor_list)) + for(var/i in current_armor) + temp_armor_list[i] = current_armor[i] * armor_modifiers[i] + o.armor = getArmor(arglist(temp_armor_list)) ///This proc is called when the material is removed from an object. /datum/material/proc/on_removed(atom/source, material_flags) @@ -72,13 +73,14 @@ Simple datum which is instanced once per type and is used for every object of sa if(material_flags & MATERIAL_ADD_PREFIX) source.name = initial(source.name) - + if(istype(source, /obj)) //objs on_removed_obj(source, material_flags) ///This proc is called when the material is removed from an object specifically. /datum/material/proc/on_removed_obj(var/obj/o, amount, material_flags) - var/new_max_integrity = initial(o.max_integrity) - o.modify_max_integrity(new_max_integrity) - o.force = initial(o.force) - o.throwforce = initial(o.throwforce) + if(material_flags & MATERIAL_AFFECT_STATISTICS) + var/new_max_integrity = initial(o.max_integrity) + o.modify_max_integrity(new_max_integrity) + o.force = initial(o.force) + o.throwforce = initial(o.throwforce) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index c21f5d6d2cc..8bec5d3c4c5 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -124,7 +124,7 @@ ///Material chair /obj/structure/chair/greyscale - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS item_chair = /obj/item/chair/greyscale buildstacktype = null //Custom mats handle this @@ -340,7 +340,7 @@ smash(user) /obj/item/chair/greyscale - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS origin_type = /obj/structure/chair/greyscale /obj/item/chair/stool diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm index 7ba036843a6..11f8d557058 100644 --- a/code/game/objects/structures/table_frames.dm +++ b/code/game/objects/structures/table_frames.dm @@ -41,7 +41,7 @@ make_new_table(material.tableVariant) else if(material.get_amount() < 1) - to_chat(user, "You need one metal sheet to do this!") + to_chat(user, "You need one sheet to do this!") return to_chat(user, "You start adding [material] to [src]...") if(do_after(user, 20, target = src) && material.use(1)) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 2297bd11db0..6224460b686 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -205,7 +205,7 @@ /obj/structure/table/greyscale icon = 'icons/obj/smooth_structures/table_greyscale.dmi' icon_state = "table" - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS buildstack = null //No buildstack, so generate from mat datums diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 9ca3810c6c1..69cc2b182e6 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -139,7 +139,7 @@ contents += secret /obj/structure/toilet/greyscale - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS buildstacktype = null /obj/structure/urinal @@ -398,7 +398,7 @@ /obj/structure/sink/greyscale icon_state = "sink_greyscale" - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS buildstacktype = null //Shower Curtains// diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index cc9c882b211..3c27644dd2d 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -273,7 +273,7 @@ icon_state = "knight_greyscale" item_state = "knight_greyscale" armor = list("melee" = 35, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40) - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR//Can change color and add prefix + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Can change color and add prefix /obj/item/clothing/head/helmet/skull name = "skull helmet" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index cfa8dca5238..b28b1266b49 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -247,7 +247,7 @@ desc = "A classic suit of armour, able to be made from many different materials." icon_state = "knight_greyscale" item_state = "knight_greyscale" - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR//Can change color and add prefix + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS//Can change color and add prefix armor = list("melee" = 35, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40) /obj/item/clothing/suit/armor/vest/durathread diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 7fbea8d0465..396b5767412 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -322,7 +322,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ throwforce = 2 w_class = WEIGHT_CLASS_TINY custom_materials = list(/datum/material/iron = 400) - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS var/string_attached var/list/sideslist = list("heads","tails") var/cooldown = 0