From fbb78302cf7d2c3110de101a86df4f62d3f33bc8 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 5 Jun 2021 06:35:09 +0200 Subject: [PATCH] [MIRROR] Makes obj_integrity private and only updated through procs (#6125) * Makes obj_integrity only updated through procs (#59474) Having things updating integrity directly is just going to cause more problems down the line as more elements and components depend on being notified of integrity changes. It's an easy mistake to make so making it private should deal with the problem. get_integrity() might be useful in the future but is mainly a side effect of making obj_integrity private as that also disallows reads. * Makes obj_integrity private and only updated through procs * Mirror! Co-authored-by: Emmett Gaines Co-authored-by: Funce --- code/__DEFINES/dcs/signals.dm | 4 ++ code/datums/components/dejavu.dm | 4 +- code/datums/components/gas_leaker.dm | 5 ++- code/datums/elements/art.dm | 2 +- code/datums/elements/obj_regen.dm | 5 +-- code/game/machinery/_machinery.dm | 2 +- code/game/machinery/aug_manipulator.dm | 1 - code/game/machinery/camera/camera.dm | 2 +- code/game/machinery/doors/airlock.dm | 3 +- code/game/machinery/doors/firedoor.dm | 2 +- code/game/machinery/firealarm.dm | 4 +- code/game/objects/effects/countdown.dm | 2 +- .../items/devices/reverse_bear_trap.dm | 1 - code/game/objects/obj_defense.dm | 40 +++++++++++++++++-- code/game/objects/objs.dm | 5 +-- code/game/objects/structures/grille.dm | 5 ++- .../objects/structures/plaques/_plaques.dm | 4 +- code/game/objects/structures/signs/_signs.dm | 4 +- .../blob/blobstrains/_blobstrain.dm | 20 +++++----- .../blob/blobstrains/distributed_neurons.dm | 2 +- .../blob/blobstrains/energized_jelly.dm | 2 +- .../blob/blobstrains/reactive_spines.dm | 6 +-- .../blob/blobstrains/replicating_foam.dm | 4 +- .../blob/blobstrains/shifting_fragments.dm | 2 +- code/modules/antagonists/blob/overmind.dm | 4 +- code/modules/antagonists/blob/powers.dm | 7 ++-- .../traitor/equipment/Malf_Modules.dm | 2 +- .../atmospherics/machinery/airalarm.dm | 2 +- .../atmospherics/machinery/atmosmachinery.dm | 2 +- .../machinery/components/fusion/hfr_parts.dm | 2 +- .../machinery/components/fusion/hfr_procs.dm | 10 ++--- .../capture_the_flag/capture_the_flag.dm | 2 +- code/modules/events/spacevine.dm | 3 +- .../modules/explorer_drone/control_console.dm | 2 +- code/modules/mining/aux_base.dm | 2 +- .../living/simple_animal/hostile/hivebot.dm | 4 +- .../simple_animal/hostile/mecha_pilot.dm | 6 +-- .../computers/item/processor.dm | 2 +- .../computers/machinery/modular_computer.dm | 2 +- .../file_system/programs/sm_monitor.dm | 4 +- code/modules/power/lighting.dm | 2 +- code/modules/power/supermatter/supermatter.dm | 16 ++++---- code/modules/surgery/organs/tongue.dm | 2 +- code/modules/vehicles/mecha/combat/durand.dm | 1 - .../mecha/equipment/tools/other_tools.dm | 4 +- .../mecha/equipment/tools/work_tools.dm | 4 +- code/modules/vehicles/mecha/mech_bay.dm | 2 +- .../vehicles/mecha/mecha_control_console.dm | 4 +- code/modules/vehicles/mecha/working/ripley.dm | 8 +++- .../code/modules/events/spacevine.dm | 3 +- .../code/biohazard_blob_controller.dm | 4 +- .../modules/firefighter/code/firefighter.dm | 2 +- .../code/peacekeeper/peacekeeper_hammer.dm | 4 +- .../modules/tableflip/code/flipped_table.dm | 4 +- 54 files changed, 141 insertions(+), 106 deletions(-) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 0b141f27550..b844c2975aa 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -695,6 +695,8 @@ #define COMSIG_OBJ_TAKE_DAMAGE "obj_take_damage" /// Return bitflags for the above signal which prevents the object taking any damage. #define COMPONENT_NO_TAKE_DAMAGE (1<<0) +///from base of [/obj/proc/update_integrity]: () +#define COMSIG_OBJ_INTEGRITY_CHANGED "obj_integrity_changed" ///from base of obj/deconstruct(): (disassembled) #define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" ///from base of code/game/machinery @@ -705,6 +707,8 @@ #define COMSIG_OBJ_PAINTED "obj_painted" /// from /obj/proc/obj_break: () #define COMSIG_OBJ_BREAK "obj_break" +/// from base of [/obj/proc/obj_fix]: () +#define COMSIG_OBJ_FIX "obj_fix" // /obj/machinery signals diff --git a/code/datums/components/dejavu.dm b/code/datums/components/dejavu.dm index 62af7e81859..ac19b224cf1 100644 --- a/code/datums/components/dejavu.dm +++ b/code/datums/components/dejavu.dm @@ -56,7 +56,7 @@ else if(isobj(parent)) var/obj/O = parent - integrity = O.obj_integrity + integrity = O.get_integrity() rewind_type = .proc/rewind_obj addtimer(CALLBACK(src, rewind_type), rewind_interval) @@ -107,5 +107,5 @@ /datum/component/dejavu/proc/rewind_obj() var/obj/master = parent - master.obj_integrity = integrity + master.update_integrity(integrity) rewind() diff --git a/code/datums/components/gas_leaker.dm b/code/datums/components/gas_leaker.dm index 3010d91bd12..c8efe8a16f8 100644 --- a/code/datums/components/gas_leaker.dm +++ b/code/datums/components/gas_leaker.dm @@ -72,10 +72,11 @@ return process_machine(master, airs) /datum/component/gas_leaker/proc/process_leak(obj/master, list/airs) - if(master.obj_integrity > master.max_integrity * integrity_leak_percent) + var/current_integrity = master.get_integrity() + if(current_integrity > master.max_integrity * integrity_leak_percent) return PROCESS_KILL var/turf/location = get_turf(master) - var/true_rate = (1 - (master.obj_integrity / master.max_integrity)) * leak_rate + var/true_rate = (1 - (current_integrity / master.max_integrity)) * leak_rate for(var/datum/gas_mixture/mix as anything in airs) var/pressure = mix.return_pressure() if(mix.release_gas_to(location.return_air(), pressure, true_rate)) diff --git a/code/datums/elements/art.dm b/code/datums/elements/art.dm index 87f827c21f1..344608f24d9 100644 --- a/code/datums/elements/art.dm +++ b/code/datums/elements/art.dm @@ -48,7 +48,7 @@ var/mult = 1 if(isobj(source)) var/obj/art_piece = source - mult = art_piece.obj_integrity/art_piece.max_integrity + mult = art_piece.get_integrity() / art_piece.max_integrity apply_moodlet(source, user, impressiveness * mult) diff --git a/code/datums/elements/obj_regen.dm b/code/datums/elements/obj_regen.dm index ee459be5064..e4fbd6b128e 100644 --- a/code/datums/elements/obj_regen.dm +++ b/code/datums/elements/obj_regen.dm @@ -22,7 +22,7 @@ rate = _rate RegisterSignal(target, COMSIG_OBJ_TAKE_DAMAGE, .proc/on_take_damage) - if(target.obj_integrity < target.max_integrity) + if(target.get_integrity() < target.max_integrity) if(!length(processing)) START_PROCESSING(SSobj, src) processing |= target @@ -73,8 +73,7 @@ return continue - regen_obj.obj_integrity = clamp(regen_obj.obj_integrity + (regen_obj.max_integrity * cached_rate), 0, regen_obj.max_integrity) - if(regen_obj.obj_integrity == regen_obj.max_integrity) + if(!regen_obj.repair_damage(regen_obj.max_integrity * cached_rate)) processing -= regen_obj if(!length(processing)) STOP_PROCESSING(SSobj, src) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 26ceb988acd..9d73bc16bc2 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -568,7 +568,7 @@ . = new_frame new_frame.set_anchored(anchored) if(!disassembled) - new_frame.obj_integrity = new_frame.max_integrity * 0.5 //the frame is already half broken + new_frame.update_integrity(new_frame.max_integrity * 0.5) //the frame is already half broken transfer_fingerprints_to(new_frame) diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index 92782e1df22..31abe0f2506 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -5,7 +5,6 @@ icon_state = "pdapainter" base_icon_state = "pdapainter" density = TRUE - obj_integrity = 200 max_integrity = 200 var/obj/item/bodypart/storedpart var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi') diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 7bd817ef2a4..1f3b6d79bc1 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -372,7 +372,7 @@ assembly = null else var/obj/item/I = new /obj/item/wallframe/camera (loc) - I.obj_integrity = I.max_integrity * 0.5 + I.update_integrity(I.max_integrity * 0.5) new /obj/item/stack/cable_coil(loc, 2) qdel(src) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 3d8fe344b8f..9cdb88324ff 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1408,8 +1408,7 @@ A.update_appearance() if(!disassembled) - if(A) - A.obj_integrity = A.max_integrity * 0.5 + A?.update_integrity(A.max_integrity * 0.5) else if(obj_flags & EMAGGED) if(user) to_chat(user, "You discard the damaged electronics.") diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 1321e17ef13..63f06e7955d 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -233,7 +233,7 @@ F.constructionStep = CONSTRUCTION_PANEL_OPEN else F.constructionStep = CONSTRUCTION_NO_CIRCUIT - F.obj_integrity = F.max_integrity * 0.5 + F.update_integrity(F.max_integrity * 0.5) F.update_appearance() else new /obj/item/electronics/firelock (T) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 3de4e634efb..e49ab3de477 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -51,7 +51,7 @@ update_appearance() myarea = get_area(src) LAZYADD(myarea.firealarms, src) - + AddElement(/datum/element/atmos_sensitive, mapload) RegisterSignal(SSsecurity_level, COMSIG_SECURITY_LEVEL_CHANGED, .proc/check_security_level) @@ -337,7 +337,7 @@ if(!(machine_stat & BROKEN)) var/obj/item/I = new /obj/item/electronics/firealarm(loc) if(!disassembled) - I.obj_integrity = I.max_integrity * 0.5 + I.update_integrity(I.max_integrity * 0.5) new /obj/item/stack/cable_coil(loc, 3) qdel(src) diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm index 59355563b52..75775502eaf 100644 --- a/code/game/objects/effects/countdown.dm +++ b/code/game/objects/effects/countdown.dm @@ -96,7 +96,7 @@ var/obj/machinery/power/supermatter_crystal/S = attached_to if(!istype(S)) return - return "
[round(S.get_integrity(), 1)]%
" + return "
[round(S.get_integrity_percent(), 1)]%
" /obj/effect/countdown/transformer name = "transformer countdown" diff --git a/code/game/objects/items/devices/reverse_bear_trap.dm b/code/game/objects/items/devices/reverse_bear_trap.dm index 8ea79a7292d..d24b7e21162 100644 --- a/code/game/objects/items/devices/reverse_bear_trap.dm +++ b/code/game/objects/items/devices/reverse_bear_trap.dm @@ -7,7 +7,6 @@ flags_1 = CONDUCT_1 resistance_flags = FIRE_PROOF | UNACIDABLE w_class = WEIGHT_CLASS_NORMAL - obj_integrity = 300 max_integrity = 300 inhand_icon_state = "reverse_bear_trap" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 4f051850269..13dc1400c2a 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -1,5 +1,5 @@ -///the essential proc to call when an obj must receive damage of any kind. +/// The essential proc to call when an obj must receive damage of any kind. /obj/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0) if(QDELETED(src)) stack_trace("[src] taking damage after deletion") @@ -15,14 +15,43 @@ return . = damage_amount - obj_integrity = max(obj_integrity - damage_amount, 0) + + update_integrity(obj_integrity - damage_amount) + //BREAKING FIRST if(integrity_failure && obj_integrity <= integrity_failure * max_integrity) obj_break(damage_flag) + //DESTROYING SECOND if(obj_integrity <= 0) obj_destruction(damage_flag) +/// Proc for recovering obj_integrity. Returns the amount repaired by +/obj/proc/repair_damage(amount) + if(amount <= 0) // We only recover here + return + var/new_integrity = min(max_integrity, obj_integrity + amount) + . = new_integrity - obj_integrity + + update_integrity(new_integrity) + + if(integrity_failure && obj_integrity > integrity_failure * max_integrity) + obj_fix() + +/// Handles the integrity of an object changing. This must be called instead of changing integrity directly. +/obj/proc/update_integrity(new_value) + SHOULD_NOT_OVERRIDE(TRUE) + new_value = max(0, new_value) + if(obj_integrity == new_value) + return + obj_integrity = new_value + SEND_SIGNAL(src, COMSIG_OBJ_INTEGRITY_CHANGED) + +/// This mostly exists to keep obj_integrity private. Might be useful in the future. +/obj/proc/get_integrity() + SHOULD_BE_PURE(TRUE) + return obj_integrity + ///returns the damage value of the attack after processing the obj's various armor protections /obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0) if(damage_flag == MELEE && damage_amount < damage_deflection) @@ -223,11 +252,16 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e SEND_SIGNAL(src, COMSIG_OBJ_DECONSTRUCT, disassembled) qdel(src) -///called after the obj takes damage and integrity is below integrity_failure level +/// Called after the obj takes damage and integrity is below integrity_failure level /obj/proc/obj_break(damage_flag) SHOULD_CALL_PARENT(TRUE) SEND_SIGNAL(src, COMSIG_OBJ_BREAK) +/// Called when integrity is repaired above the breaking point having been broken before +/obj/proc/obj_fix() + SHOULD_CALL_PARENT(TRUE) + SEND_SIGNAL(src, COMSIG_OBJ_FIX) + ///what happens when the obj's integrity reaches zero. /obj/proc/obj_destruction(damage_flag) if(damage_flag == ACID) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index e608e2f87d6..504e7a78bdb 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -14,7 +14,7 @@ var/bare_wound_bonus = 0 var/datum/armor/armor - var/obj_integrity //defaults to max_integrity + VAR_PRIVATE/obj_integrity //defaults to max_integrity var/max_integrity = 500 var/integrity_failure = 0 //0 if we have no special broken behavior, otherwise is a percentage of at what point the obj breaks. 0.5 being 50% ///Damage under this value will be completely ignored @@ -59,8 +59,7 @@ armor = getArmor() else if (!istype(armor, /datum/armor)) stack_trace("Invalid type [armor.type] found in .armor during /obj Initialize()") - if(obj_integrity == null) - obj_integrity = max_integrity + obj_integrity = max_integrity . = ..() //Do this after, else mat datums is mad. diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index afd3a0b6c73..436bdfaba5f 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -334,7 +334,10 @@ /obj/structure/grille/broken // Pre-broken grilles for map placement icon_state = "brokengrille" density = FALSE - obj_integrity = 20 broken = TRUE rods_amount = 1 rods_broken = FALSE + +/obj/structure/grille/broken/Initialize(mapload) + . = ..() + take_damage(max_integrity * 0.6) diff --git a/code/game/objects/structures/plaques/_plaques.dm b/code/game/objects/structures/plaques/_plaques.dm index d6fa837b83c..d0212ea05f4 100644 --- a/code/game/objects/structures/plaques/_plaques.dm +++ b/code/game/objects/structures/plaques/_plaques.dm @@ -53,7 +53,7 @@ unwrenched_plaque.desc = desc unwrenched_plaque.engraved = engraved unwrenched_plaque.icon_state = icon_state - unwrenched_plaque.obj_integrity = obj_integrity + unwrenched_plaque.update_integrity(get_integrity()) unwrenched_plaque.setDir(dir) qdel(src) //The plaque structure on the wall goes poof and only the plaque item from unwrenching remains. return TRUE @@ -183,6 +183,6 @@ placed_plaque.desc = desc placed_plaque.engraved = engraved placed_plaque.icon_state = icon_state - placed_plaque.obj_integrity = obj_integrity + placed_plaque.update_integrity(get_integrity()) placed_plaque.setDir(dir) qdel(src) diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index dacc3b1b53f..fae46fcccc8 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -88,7 +88,7 @@ unwrenched_sign.sign_path = type unwrenched_sign.set_custom_materials(custom_materials) //This is here so picture frames and wooden things don't get messed up. unwrenched_sign.is_editable = is_editable - unwrenched_sign.obj_integrity = obj_integrity //Transfer how damaged it is. + unwrenched_sign.update_integrity(get_integrity()) //Transfer how damaged it is. unwrenched_sign.setDir(dir) qdel(src) //The sign structure on the wall goes poof and only the sign item from unwrenching remains. return TRUE @@ -206,7 +206,7 @@ user.visible_message("[user] fastens [src] to [target_turf].", \ "You attach the sign to [target_turf].") playsound(target_turf, 'sound/items/deconstruct.ogg', 50, TRUE) - placed_sign.obj_integrity = obj_integrity + placed_sign.update_integrity(get_integrity()) placed_sign.setDir(dir) qdel(src) diff --git a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm index 70a8e1cfbaa..daa5209c73a 100644 --- a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm +++ b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm @@ -7,23 +7,23 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ /// The color that stuff like healing effects and the overmind camera gets var/complementary_color = COLOR_BLACK /// A short description of the power and its effects - var/shortdesc = null + var/shortdesc = null /// Any long, blob-tile specific effects - var/effectdesc = null + var/effectdesc = null /// Short descriptor of what the strain does damage-wise, generally seen in the reroll menu var/analyzerdescdamage = "Unknown. Report this bug to a coder, or just adminhelp." /// Short descriptor of what the strain does in general, generally seen in the reroll menu var/analyzerdesceffect /// Blobbernaut attack verb - var/blobbernaut_message = "slams" + var/blobbernaut_message = "slams" /// Message sent to any mob hit by the blob - var/message = "The blob strikes you" + var/message = "The blob strikes you" /// Gets added onto 'message' if the mob stuck is of type living var/message_living = null /// Stores world.time to figure out when to next give resources var/resource_delay = 0 /// For blob-mobs and extinguishing-based effects - var/fire_based = FALSE + var/fire_based = FALSE var/mob/camera/blob/overmind /// The amount of health regenned on core_process var/base_core_regen = BLOB_CORE_HP_REGEN @@ -93,8 +93,7 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ F.max_spores += factory_spore_bonus for(var/obj/structure/blob/B as anything in overmind.all_blobs) - B.max_integrity *= max_structure_health_multiplier - B.obj_integrity *= max_structure_health_multiplier + B.modify_max_integrity(B.max_integrity * max_structure_health_multiplier) B.update_appearance() for(var/mob/living/simple_animal/hostile/blob/BM as anything in overmind.blob_mobs) @@ -125,13 +124,12 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ F.max_spores -= factory_spore_bonus for(var/obj/structure/blob/B as anything in overmind.all_blobs) - B.max_integrity /= max_structure_health_multiplier - B.obj_integrity /= max_structure_health_multiplier + B.modify_max_integrity(B.max_integrity / max_structure_health_multiplier) for(var/mob/living/simple_animal/hostile/blob/BM as anything in overmind.blob_mobs) BM.maxHealth /= max_mob_health_multiplier BM.health /= max_mob_health_multiplier - + /datum/blobstrain/proc/on_sporedeath(mob/living/spore) @@ -146,7 +144,7 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ if(resource_delay <= world.time) resource_delay = world.time + 10 // 1 second overmind.add_points(point_rate+point_rate_bonus) - overmind.blob_core.obj_integrity = min(overmind.blob_core.max_integrity, overmind.blob_core.obj_integrity+base_core_regen+core_regen_bonus) + overmind.blob_core.repair_damage(base_core_regen + core_regen_bonus) /datum/blobstrain/proc/attack_living(mob/living/L, list/nearby_blobs) // When the blob attacks people send_message(L) diff --git a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm index e90f7d602c3..9e22cca0bf4 100644 --- a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm +++ b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm @@ -12,7 +12,7 @@ reagent = /datum/reagent/blob/distributed_neurons /datum/blobstrain/reagent/distributed_neurons/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage <= 20 && B.obj_integrity - damage <= 0 && prob(15)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 15% chance of a shitty spore. + if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage <= 20 && B.get_integrity() - damage <= 0 && prob(15)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 15% chance of a shitty spore. B.visible_message("A spore floats free of the blob!") var/mob/living/simple_animal/hostile/blob/blobspore/weak/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(B.loc) BS.overmind = B.overmind diff --git a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm index e647d96c281..349ca1b5722 100644 --- a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm +++ b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm @@ -10,7 +10,7 @@ reagent = /datum/reagent/blob/energized_jelly /datum/blobstrain/reagent/energized_jelly/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && B.obj_integrity - damage <= 0 && prob(10)) + if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && B.get_integrity() - damage <= 0 && prob(10)) do_sparks(rand(2, 4), FALSE, B) return ..() diff --git a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm index 8b8f3b563fa..183711e79f9 100644 --- a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm +++ b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm @@ -13,18 +13,18 @@ COOLDOWN_DECLARE(retaliate_cooldown) /datum/blobstrain/reagent/reactive_spines/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if(damage && ((damage_type == BRUTE) || (damage_type == BURN)) && B.obj_integrity - damage > 0 && COOLDOWN_FINISHED(src, retaliate_cooldown)) // Is there any damage, is it burn or brute, will we be alive, and has the cooldown finished? + if(damage && ((damage_type == BRUTE) || (damage_type == BURN)) && B.get_integrity() - damage > 0 && COOLDOWN_FINISHED(src, retaliate_cooldown)) // Is there any damage, is it burn or brute, will we be alive, and has the cooldown finished? COOLDOWN_START(src, retaliate_cooldown, 2.5 SECONDS) // 2.5 seconds before auto-retaliate can whack everything within 1 tile again B.visible_message("The blob retaliates, lashing out!") for(var/atom/A in range(1, B)) var/attacked_turf = get_turf(A) - if(isliving(A) && !isblobmonster(A)) // Make sure to inject strain-reagents with automatic attacks when needed. + if(isliving(A) && !isblobmonster(A)) // Make sure to inject strain-reagents with automatic attacks when needed. B.blob_attack_animation(attacked_turf, overmind) attack_living(A) else if(A.blob_act(B)) // After checking for mobs, whack everything else with the standard attack B.blob_attack_animation(attacked_turf, overmind) // Only play the animation if the attack did something meaningful - + return ..() /datum/reagent/blob/reactive_spines diff --git a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm index bdfc0ad7357..83d84618da5 100644 --- a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm +++ b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm @@ -13,10 +13,10 @@ /datum/blobstrain/reagent/replicating_foam/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) if(damage_type == BRUTE) damage = damage * 2 - else if(damage_type == BURN && damage > 0 && B.obj_integrity - damage > 0 && prob(60)) + else if(damage_type == BURN && damage > 0 && B.get_integrity() - damage > 0 && prob(60)) var/obj/structure/blob/newB = B.expand(null, null, 0) if(newB) - newB.obj_integrity = B.obj_integrity - damage + newB.update_integrity(B.get_integrity() - damage) newB.update_appearance() return ..() diff --git a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm index 1a7b92c99de..3db0041b310 100644 --- a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm +++ b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm @@ -15,7 +15,7 @@ B.forceMove(T) /datum/blobstrain/reagent/shifting_fragments/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage > 0 && B.obj_integrity - damage > 0 && prob(60-damage)) + if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage > 0 && B.get_integrity() - damage > 0 && prob(60-damage)) var/list/blobstopick = list() for(var/obj/structure/blob/OB in orange(1, B)) if((istype(OB, /obj/structure/blob/normal) || (istype(OB, /obj/structure/blob/shield) && prob(25))) && OB.overmind && OB.overmind.blobstrain.type == B.overmind.blobstrain.type) diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index 410b87f2727..ed5a2e9765a 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -222,7 +222,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) /mob/camera/blob/update_health_hud() if(blob_core) - var/current_health = round((blob_core.obj_integrity / blob_core.max_integrity) * 100) + var/current_health = round((blob_core.get_integrity() / blob_core.max_integrity) * 100) hud_used.healths.maptext = MAPTEXT("
[current_health]%
") for(var/mob/living/simple_animal/hostile/blob/blobbernaut/B in blob_mobs) if(B.hud_used && B.hud_used.blobpwrdisplay) @@ -273,7 +273,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) /mob/camera/blob/get_status_tab_items() . = ..() if(blob_core) - . += "Core Health: [blob_core.obj_integrity]" + . += "Core Health: [blob_core.get_integrity()]" . += "Power Stored: [blob_points]/[max_blob_points]" . += "Blobs to Win: [blobs_legit.len]/[blobwincount]" if(free_strain_rerolls) diff --git a/code/modules/antagonists/blob/powers.dm b/code/modules/antagonists/blob/powers.dm index 69a1769fef4..2c66956ea9f 100644 --- a/code/modules/antagonists/blob/powers.dm +++ b/code/modules/antagonists/blob/powers.dm @@ -116,7 +116,7 @@ if(S) if(!can_buy(BLOB_UPGRADE_REFLECTOR_COST)) return - if(S.obj_integrity < S.max_integrity * 0.5) + if(S.get_integrity() < S.max_integrity * 0.5) add_points(BLOB_UPGRADE_REFLECTOR_COST) to_chat(src, "This shield blob is too damaged to be modified properly!") return @@ -134,7 +134,7 @@ if(B.naut) //if it already made a blobbernaut, it can't do it again to_chat(src, "This factory blob is already sustaining a blobbernaut.") return - if(B.obj_integrity < B.max_integrity * 0.5) + if(B.get_integrity() < B.max_integrity * 0.5) to_chat(src, "This factory blob is too damaged to sustain a blobbernaut.") return if(!can_buy(BLOBMOB_BLOBBERNAUT_RESOURCE_COST)) @@ -144,8 +144,7 @@ to_chat(src, "You attempt to produce a blobbernaut.") var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as a [blobstrain.name] blobbernaut?", ROLE_BLOB, ROLE_BLOB, 50) //players must answer rapidly if(LAZYLEN(candidates)) //if we got at least one candidate, they're a blobbernaut now. - B.max_integrity = initial(B.max_integrity) * 0.25 //factories that produced a blobbernaut have much lower health - B.obj_integrity = min(B.obj_integrity, B.max_integrity) + B.modify_max_integrity(initial(B.max_integrity) * 0.25) //factories that produced a blobbernaut have much lower health B.update_appearance() B.visible_message("The blobbernaut [pick("rips", "tears", "shreds")] its way out of the factory blob!") playsound(B.loc, 'sound/effects/splat.ogg', 50, TRUE) diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index 9215d8f2c87..84836f1f44e 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -817,7 +817,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) /datum/ai_module/upgrade/upgrade_turrets/upgrade(mob/living/silicon/ai/AI) for(var/obj/machinery/porta_turret/ai/turret in GLOB.machines) - turret.obj_integrity += 30 + turret.repair_damage(30) turret.lethal_projectile = /obj/projectile/beam/laser/heavylaser //Once you see it, you will know what it means to FEAR. turret.lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg' diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 7a2218c2cc2..6ca9e571512 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -880,7 +880,7 @@ new /obj/item/stack/sheet/iron(loc, 2) var/obj/item/I = new /obj/item/electronics/airalarm(loc) if(!disassembled) - I.obj_integrity = I.max_integrity * 0.5 + I.take_damage(I.max_integrity * 0.5, sound_effect=FALSE) new /obj/item/stack/cable_coil(loc, 3) qdel(src) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index cbcd040b0d9..91dcc721a9b 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -417,7 +417,7 @@ var/obj/item/pipe/stored = new construction_type(loc, null, dir, src, pipe_color) stored.setPipingLayer(piping_layer) if(!disassembled) - stored.obj_integrity = stored.max_integrity * 0.5 + stored.take_damage(stored.max_integrity * 0.5, sound_effect=FALSE) transfer_fingerprints_to(stored) . = stored ..() diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm index 57b0520944f..7d8199c3c7b 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm @@ -259,7 +259,7 @@ data["power_level"] = connected_core.power_level data["iron_content"] = connected_core.iron_content - data["integrity"] = connected_core.get_integrity() + data["integrity"] = connected_core.get_integrity_percent() data["start_power"] = connected_core.start_power data["start_cooling"] = connected_core.start_cooling diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm index 16462780efc..47c05c9a22c 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm @@ -204,7 +204,7 @@ * Check the integrity level and returns the status of the machine */ /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/get_status() - var/integrity = get_integrity() + var/integrity = get_integrity_percent() if(integrity < HYPERTORUS_MELTING_PERCENT) return HYPERTORUS_MELTING @@ -239,7 +239,7 @@ /** * Getter for the machine integrity */ -/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/get_integrity() +/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/get_integrity_percent() var/integrity = critical_threshold_proximity / melting_point integrity = round(100 - integrity * 100, 0.01) integrity = integrity < 0 ? 0 : integrity @@ -257,18 +257,18 @@ alarm() if(critical_threshold_proximity > emergency_point) - radio.talk_into(src, "[emergency_alert] Integrity: [get_integrity()]%", common_channel) + radio.talk_into(src, "[emergency_alert] Integrity: [get_integrity_percent()]%", common_channel) lastwarning = REALTIMEOFDAY if(!has_reached_emergency) investigate_log("has reached the emergency point for the first time.", INVESTIGATE_HYPERTORUS) message_admins("[src] has reached the emergency point [ADMIN_JMP(src)].") has_reached_emergency = TRUE else if(critical_threshold_proximity >= critical_threshold_proximity_archived) // The damage is still going up - radio.talk_into(src, "[warning_alert] Integrity: [get_integrity()]%", engineering_channel) + radio.talk_into(src, "[warning_alert] Integrity: [get_integrity_percent()]%", engineering_channel) lastwarning = REALTIMEOFDAY - (WARNING_TIME_DELAY * 5) else // Phew, we're safe - radio.talk_into(src, "[safe_alert] Integrity: [get_integrity()]%", engineering_channel) + radio.talk_into(src, "[safe_alert] Integrity: [get_integrity_percent()]%", engineering_channel) lastwarning = REALTIMEOFDAY //Melt diff --git a/code/modules/capture_the_flag/capture_the_flag.dm b/code/modules/capture_the_flag/capture_the_flag.dm index dae361b3ef6..4f593896f05 100644 --- a/code/modules/capture_the_flag/capture_the_flag.dm +++ b/code/modules/capture_the_flag/capture_the_flag.dm @@ -453,7 +453,7 @@ continue if(isstructure(atm)) var/obj/structure/S = atm - S.obj_integrity = S.max_integrity + S.repair_damage(S.max_integrity - S.get_integrity()) else if(!is_type_in_typecache(atm, ctf_object_typecache)) qdel(atm) diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index c50148d59fe..a3e66ec1a9d 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -292,8 +292,7 @@ /datum/spacevine_mutation/woodening/on_grow(obj/structure/spacevine/holder) if(holder.energy) holder.density = TRUE - holder.max_integrity = 100 - holder.obj_integrity = holder.max_integrity + holder.modify_max_integrity(100) /datum/spacevine_mutation/woodening/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage) if(I?.get_sharpness()) diff --git a/code/modules/explorer_drone/control_console.dm b/code/modules/explorer_drone/control_console.dm index 91bfe077543..8e50c3420e6 100644 --- a/code/modules/explorer_drone/control_console.dm +++ b/code/modules/explorer_drone/control_console.dm @@ -57,7 +57,7 @@ if(controlled_drone) .["drone_status"] = controlled_drone.drone_status .["drone_name"] = controlled_drone.name - .["drone_integrity"] = controlled_drone.obj_integrity + .["drone_integrity"] = controlled_drone.get_integrity() .["drone_max_integrity"] = controlled_drone.max_integrity .["drone_log"] = controlled_drone.drone_log .["configurable"] = controlled_drone.drone_status == EXODRONE_IDLE diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index 78ce793a169..0ae32d893db 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -72,7 +72,7 @@ if(LAZYLEN(turrets)) for(var/turret in turrets) var/obj/machinery/porta_turret/aux_base/base_turret = turret - var/turret_integrity = max((base_turret.obj_integrity - base_turret.integrity_failure * base_turret.max_integrity) / (base_turret.max_integrity - base_turret.integrity_failure * max_integrity) * 100, 0) + var/turret_integrity = max((base_turret.get_integrity() - base_turret.integrity_failure * base_turret.max_integrity) / (base_turret.max_integrity - base_turret.integrity_failure * max_integrity) * 100, 0) var/turret_status if(base_turret.machine_stat & BROKEN) turret_status = "ERROR" diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 644ec6e8a90..6a03aa12a26 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -116,12 +116,12 @@ /mob/living/simple_animal/hostile/hivebot/mechanic/AttackingTarget() if(istype(target, /obj/machinery)) var/obj/machinery/fixable = target - if(fixable.obj_integrity >= fixable.max_integrity) + if(fixable.get_integrity() >= fixable.max_integrity) to_chat(src, "Diagnostics indicate that this machine is at peak integrity.") return to_chat(src, "You begin repairs...") if(do_after(src, 50, target = fixable)) - fixable.obj_integrity = fixable.max_integrity + fixable.repair_damage(fixable.max_integrity - fixable.get_integrity()) do_sparks(3, TRUE, fixable) to_chat(src, "Repairs complete.") return diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm index a77e976add7..a9abfac451e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm +++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm @@ -121,7 +121,7 @@ return FALSE if(!M.has_charge(required_mecha_charge)) return FALSE - if(M.obj_integrity < M.max_integrity*0.5) + if(M.get_integrity() < M.max_integrity*0.5) return FALSE return TRUE @@ -215,7 +215,7 @@ return //Too Much Damage - Eject - if(mecha.obj_integrity < mecha.max_integrity*0.1) + if(mecha.get_integrity() < mecha.max_integrity*0.1) exit_mecha(mecha) return @@ -226,7 +226,7 @@ action.Trigger() //Heavy damage - Defense Power or Retreat - if(mecha.obj_integrity < mecha.max_integrity*0.25) + if(mecha.get_integrity() < mecha.max_integrity*0.25) if(prob(defense_mode_chance)) if(LAZYACCESSASSOC(mecha.occupant_actions, src, /datum/action/vehicle/sealed/mecha/mech_defense_mode) && !mecha.defense_mode) var/datum/action/action = mecha.occupant_actions[src][/datum/action/vehicle/sealed/mecha/mech_defense_mode] diff --git a/code/modules/modular_computers/computers/item/processor.dm b/code/modules/modular_computers/computers/item/processor.dm index 05ce1faadbc..5003ca98aba 100644 --- a/code/modules/modular_computers/computers/item/processor.dm +++ b/code/modules/modular_computers/computers/item/processor.dm @@ -33,7 +33,7 @@ hardware_flag = machinery_computer.hardware_flag max_hardware_size = machinery_computer.max_hardware_size steel_sheet_cost = machinery_computer.steel_sheet_cost - obj_integrity = machinery_computer.obj_integrity + update_integrity(machinery_computer.get_integrity()) max_integrity = machinery_computer.max_integrity integrity_failure = machinery_computer.integrity_failure base_active_power_usage = machinery_computer.base_active_power_usage diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index 1e57e0861a8..764fe792794 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -82,7 +82,7 @@ else . += cpu.active_program?.program_icon_state || screen_icon_state_menu - if(cpu && cpu.obj_integrity <= cpu.integrity_failure * cpu.max_integrity) + if(cpu && cpu.get_integrity() <= cpu.integrity_failure * cpu.max_integrity) . += "bsod" . += "broken" diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm index 432f7cbbd2a..18d8bb89b34 100644 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm @@ -129,7 +129,7 @@ return data["active"] = TRUE - data["SM_integrity"] = active.get_integrity() + data["SM_integrity"] = active.get_integrity_percent() data["SM_power"] = active.power data["SM_ambienttemp"] = air.temperature data["SM_ambientpressure"] = air.return_pressure() @@ -159,7 +159,7 @@ if(A) SMS.Add(list(list( "area_name" = A.name, - "integrity" = S.get_integrity(), + "integrity" = S.get_integrity_percent(), "uid" = S.uid ))) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index ffc96868d65..58a457f1373 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -607,7 +607,7 @@ newlight.setDir(src.dir) newlight.stage = cur_stage if(!disassembled) - newlight.obj_integrity = newlight.max_integrity * 0.5 + newlight.take_damage(newlight.max_integrity * 0.5, sound_effect=FALSE) if(status != LIGHT_BROKEN) break_light_tube() if(status != LIGHT_EMPTY) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 16f524c5654..07b046825ec 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -280,7 +280,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(!air) return SUPERMATTER_ERROR - var/integrity = get_integrity() + var/integrity = get_integrity_percent() if(integrity < SUPERMATTER_DELAM_PERCENT) return SUPERMATTER_DELAMINATING @@ -315,7 +315,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(SUPERMATTER_WARNING) playsound(src, 'sound/machines/terminal_alert.ogg', 75) -/obj/machinery/power/supermatter_crystal/proc/get_integrity() +/obj/machinery/power/supermatter_crystal/proc/get_integrity_percent() var/integrity = damage / explosion_point integrity = round(100 - integrity * 100, 0.01) integrity = integrity < 0 ? 0 : integrity @@ -487,7 +487,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) //Check for holes in the SM inner chamber for(var/turf/open/space/turf_to_check in RANGE_TURFS(1, loc)) if(LAZYLEN(turf_to_check.atmos_adjacent_turfs)) - var/integrity = get_integrity() + var/integrity = get_integrity_percent() if(integrity < 10) damage += clamp((power * 0.0005) * DAMAGE_INCREASE_MULTIPLIER, 0, MAX_SPACE_EXPOSURE_DAMAGE) else if(integrity < 25) @@ -724,7 +724,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) //Oh shit it's bad, time to freak out if(damage > emergency_point) - radio.talk_into(src, "[emergency_alert] Integrity: [get_integrity()]%", common_channel) + radio.talk_into(src, "[emergency_alert] Integrity: [get_integrity_percent()]%", common_channel) SEND_SIGNAL(src, COMSIG_SUPERMATTER_DELAM_ALARM) lastwarning = REALTIMEOFDAY if(!has_reached_emergency) @@ -732,12 +732,12 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) message_admins("[src] has reached the emergency point [ADMIN_JMP(src)].") has_reached_emergency = TRUE else if(damage >= damage_archived) // The damage is still going up - radio.talk_into(src, "[warning_alert] Integrity: [get_integrity()]%", engineering_channel) + radio.talk_into(src, "[warning_alert] Integrity: [get_integrity_percent()]%", engineering_channel) SEND_SIGNAL(src, COMSIG_SUPERMATTER_DELAM_ALARM) lastwarning = REALTIMEOFDAY - (WARNING_DELAY * 5) else // Phew, we're safe - radio.talk_into(src, "[safe_alert] Integrity: [get_integrity()]%", engineering_channel) + radio.talk_into(src, "[safe_alert] Integrity: [get_integrity_percent()]%", engineering_channel) lastwarning = REALTIMEOFDAY if(power > POWER_PENALTY_THRESHOLD) @@ -787,8 +787,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(!blob || isspaceturf(loc)) //does nothing in space return playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, TRUE) - damage += blob.obj_integrity * 0.5 //take damage equal to 50% of remaining blob health before it tried to eat us - if(blob.obj_integrity > 100) + damage += blob.get_integrity() * 0.5 //take damage equal to 50% of remaining blob health before it tried to eat us + if(blob.get_integrity() > 100) blob.visible_message("\The [blob] strikes at \the [src] and flinches away!", "You hear a loud crack as you are washed with a wave of heat.") blob.take_damage(100, BURN) diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 212f35f3ee9..2c77db9ed17 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -165,7 +165,7 @@ statue.set_visuals(becoming_statue.appearance) statue.forceMove(get_turf(becoming_statue)) becoming_statue.forceMove(statue) - statue.obj_integrity = becoming_statue.health + statue.update_integrity(becoming_statue.health) RegisterSignal(becoming_statue, COMSIG_MOVABLE_MOVED, .proc/human_left_statue) //somehow they used an exploit/teleportation to leave statue, lets clean up diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index 311bcbe8682..708df8880f9 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -140,7 +140,6 @@ own integrity back to max. Shield is automatically dropped if we run out of powe invisibility = INVISIBILITY_MAXIMUM //no showing on right-click pixel_y = 4 max_integrity = 10000 - obj_integrity = 10000 anchored = TRUE light_system = MOVABLE_LIGHT light_range = MINIMUM_USEFUL_LIGHT_RANGE diff --git a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm index 04d45d23de2..74b990c9c00 100644 --- a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm @@ -253,8 +253,8 @@ chassis.clear_internal_damage(int_dam_flag) repaired = TRUE break - if(h_boost<0 || chassis.obj_integrity < chassis.max_integrity) - chassis.obj_integrity += min(h_boost, chassis.max_integrity-chassis.obj_integrity) + if(h_boost<0 || chassis.get_integrity() < chassis.max_integrity) + chassis.repair_damage(h_boost) repaired = TRUE if(repaired) if(!chassis.use_power(energy_drain)) diff --git a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm index 1e7bf37b020..419182cf5fb 100644 --- a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm @@ -376,10 +376,10 @@ marktwo.dna_lock = markone.dna_lock marktwo.mecha_flags = markone.mecha_flags marktwo.strafe = markone.strafe - marktwo.obj_integrity = round((markone.obj_integrity / markone.max_integrity) * marktwo.obj_integrity) //Integ set to the same percentage integ as the old mecha, rounded to be whole number + //Integ set to the same percentage integ as the old mecha, rounded to be whole number + marktwo.update_integrity(round((markone.get_integrity() / markone.max_integrity) * marktwo.get_integrity())) if(markone.name != initial(markone.name)) marktwo.name = markone.name markone.wreckage = FALSE qdel(markone) playsound(get_turf(marktwo),'sound/items/ratchet.ogg',50,TRUE) - return diff --git a/code/modules/vehicles/mecha/mech_bay.dm b/code/modules/vehicles/mecha/mech_bay.dm index 9f1a17469f1..bd66a6f5cc8 100644 --- a/code/modules/vehicles/mecha/mech_bay.dm +++ b/code/modules/vehicles/mecha/mech_bay.dm @@ -110,7 +110,7 @@ if(recharge_port && !QDELETED(recharge_port)) data["recharge_port"] = list("mech" = null) if(recharge_port.recharging_mech && !QDELETED(recharge_port.recharging_mech)) - data["recharge_port"]["mech"] = list("health" = recharge_port.recharging_mech.obj_integrity, "maxhealth" = recharge_port.recharging_mech.max_integrity, "cell" = null, "name" = recharge_port.recharging_mech.name,) + data["recharge_port"]["mech"] = list("health" = recharge_port.recharging_mech.get_integrity(), "maxhealth" = recharge_port.recharging_mech.max_integrity, "cell" = null, "name" = recharge_port.recharging_mech.name,) if(recharge_port.recharging_mech.cell && !QDELETED(recharge_port.recharging_mech.cell)) data["recharge_port"]["mech"]["cell"] = list( "charge" = recharge_port.recharging_mech.cell.charge, diff --git a/code/modules/vehicles/mecha/mecha_control_console.dm b/code/modules/vehicles/mecha/mecha_control_console.dm index cc76561f00b..2b0e841e930 100644 --- a/code/modules/vehicles/mecha/mecha_control_console.dm +++ b/code/modules/vehicles/mecha/mecha_control_console.dm @@ -26,7 +26,7 @@ var/obj/vehicle/sealed/mecha/M = MT.chassis var/list/mech_data = list( name = M.name, - integrity = round((M.obj_integrity / M.max_integrity) * 100), + integrity = round((M.get_integrity() / M.max_integrity) * 100), charge = M.cell ? round(M.cell.percent()) : null, airtank = M.internal_tank ? M.return_pressure() : null, pilot = M.return_drivers(), @@ -94,7 +94,7 @@ var/cell_charge = chassis.get_charge() var/answer = {"Name: [chassis.name]
- Integrity: [round((chassis.obj_integrity/chassis.max_integrity * 100), 0.01)]%
+ Integrity: [round((chassis.get_integrity()/chassis.max_integrity * 100), 0.01)]%
Cell Charge: [isnull(cell_charge) ? "Not Found":"[chassis.cell.percent()]%"]
Airtank: [chassis.internal_tank ? "[round(chassis.return_pressure(), 0.01)]" : "Not Equipped"] kPa
Pilot: [chassis.return_drivers() || "None"]
diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm index e4c531adc31..14b898bd08f 100644 --- a/code/modules/vehicles/mecha/working/ripley.dm +++ b/code/modules/vehicles/mecha/working/ripley.dm @@ -117,7 +117,10 @@ /obj/vehicle/sealed/mecha/working/ripley/mining desc = "An old, dusty mining Ripley." name = "\improper APLU \"Miner\"" - obj_integrity = 75 //Low starting health + +/obj/vehicle/sealed/mecha/working/ripley/mining/Initialize() + . = ..() + take_damage(125) // Low starting health /obj/vehicle/sealed/mecha/working/ripley/mining/Initialize() . = ..() @@ -147,7 +150,6 @@ icon_state = "hauler" base_icon_state = "hauler" max_equip = 2 - obj_integrity = 50 //Low starting health max_integrity = 100 //Has half the health of a normal RIPLEY mech, so it's harder to use as a weapon. /obj/vehicle/sealed/mecha/working/ripley/cargo/Initialize() @@ -159,6 +161,8 @@ var/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/HC = new HC.attach(src) + take_damage(max_integrity * 0.5, sound_effect=FALSE) //Low starting health + /obj/vehicle/sealed/mecha/working/ripley/Exit(atom/movable/O) if(O in cargo) return FALSE diff --git a/modular_skyrat/master_files/code/modules/events/spacevine.dm b/modular_skyrat/master_files/code/modules/events/spacevine.dm index 20cdfd08961..6678b7c3462 100644 --- a/modular_skyrat/master_files/code/modules/events/spacevine.dm +++ b/modular_skyrat/master_files/code/modules/events/spacevine.dm @@ -292,8 +292,7 @@ /datum/spacevine_mutation/woodening/on_grow(obj/structure/spacevine/holder) if(holder.energy) holder.density = TRUE - holder.max_integrity = 100 - holder.obj_integrity = holder.max_integrity + holder.modify_max_integrity(100) /datum/spacevine_mutation/woodening/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage) if(I?.get_sharpness()) diff --git a/modular_skyrat/modules/biohazard_blob/code/biohazard_blob_controller.dm b/modular_skyrat/modules/biohazard_blob/code/biohazard_blob_controller.dm index 3d7fd4b19ff..d29c4038013 100644 --- a/modular_skyrat/modules/biohazard_blob/code/biohazard_blob_controller.dm +++ b/modular_skyrat/modules/biohazard_blob/code/biohazard_blob_controller.dm @@ -72,7 +72,7 @@ var/struct = new spawn_type(location, blob_type) other_structures[struct] = TRUE our_core.max_integrity += 10 - our_core.obj_integrity += 10 + our_core.repair_damage(10) return struct /datum/biohazard_blob_controller/Destroy() @@ -170,7 +170,7 @@ active_resin[new_resin] = TRUE new_resin.CalcDir() our_core.max_integrity += 2 - our_core.obj_integrity += 2 + our_core.repair_damage(2) return new_resin /datum/biohazard_blob_controller/proc/ActivateAdjacentResinRecursive(turf/centrum_turf, iterations = 1) diff --git a/modular_skyrat/modules/firefighter/code/firefighter.dm b/modular_skyrat/modules/firefighter/code/firefighter.dm index 25260a0ed57..51118e60a8c 100644 --- a/modular_skyrat/modules/firefighter/code/firefighter.dm +++ b/modular_skyrat/modules/firefighter/code/firefighter.dm @@ -91,7 +91,7 @@ mkf.dna_lock = markone.dna_lock mkf.mecha_flags = markone.mecha_flags mkf.strafe = markone.strafe - mkf.obj_integrity = round((markone.obj_integrity / markone.max_integrity) * mkf.obj_integrity) //Integ set to the same percentage integ as the old mecha, rounded to be whole number + mkf.update_integrity(round((markone.get_integrity() / markone.max_integrity) * mkf.get_integrity())) //Integ set to the same percentage integ as the old mecha, rounded to be whole number if(markone.name != initial(markone.name)) mkf.name = markone.name markone.wreckage = FALSE diff --git a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm b/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm index d6f11f1ca97..b5c8aad0ead 100644 --- a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm +++ b/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm @@ -97,7 +97,7 @@ if(!(user.Adjacent(target))) remove_track(user) return FALSE - if(target.obj_integrity < 1) + if(target.get_integrity() < 1) do_smoke(3, target.loc) remove_track(user) qdel(target, TRUE) @@ -111,7 +111,7 @@ if(do_after(user, breaching_delay)) if(QDELETED(target)) return FALSE - target.obj_integrity -= force*breaching_multipler + target.take_damage(force*breaching_multipler) playsound(target, 'sound/weapons/sonic_jackhammer.ogg', 70) visible_message("[user] smashes the [target] forcefully with the [src]") user.do_attack_animation(target, used_item = src) diff --git a/modular_skyrat/modules/tableflip/code/flipped_table.dm b/modular_skyrat/modules/tableflip/code/flipped_table.dm index e4440ecf1e7..905f0da3f73 100644 --- a/modular_skyrat/modules/tableflip/code/flipped_table.dm +++ b/modular_skyrat/modules/tableflip/code/flipped_table.dm @@ -55,7 +55,7 @@ user.visible_message("[user] starts flipping [src]!", "You start flipping over the [src]!") if(do_after(user, max_integrity/4)) var/obj/structure/table/T = new table_type(src.loc) - T.obj_integrity = src.obj_integrity + T.update_integrity(src.get_integrity()) user.visible_message("[user] flips over the [src]!", "You flip over the [src]!") playsound(src, 'sound/items/trayhit2.ogg', 100) qdel(src) @@ -78,7 +78,7 @@ if(new_dir == NORTH) T.layer = BELOW_MOB_LAYER T.max_integrity = src.max_integrity - T.obj_integrity = src.obj_integrity + T.update_integrity(src.get_integrity()) T.table_type = src.type user.visible_message("[user] flips over the [src]!", "You flip over the [src]!") playsound(src, 'sound/items/trayhit2.ogg', 100)