diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index 99bd0277969..5b292dc83dc 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -13,6 +13,7 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new())
anchored = 1
layer = GAS_PIPE_HIDDEN_LAYER //under wires
resistance_flags = FIRE_PROOF
+ max_integrity = 200
plane = FLOOR_PLANE
idle_power_usage = 0
active_power_usage = 0
diff --git a/code/ATMOSPHERICS/components/unary_devices/tank.dm b/code/ATMOSPHERICS/components/unary_devices/tank.dm
index deb194af6e7..cb82417033b 100644
--- a/code/ATMOSPHERICS/components/unary_devices/tank.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/tank.dm
@@ -5,6 +5,8 @@
name = "pressure tank"
desc = "A large vessel containing pressurized gas."
+ max_integrity = 800
+
var/volume = 10000 //in liters, 1 meters by 1 meters by 2 meters ~tweaked it a little to simulate a pressure tank without needing to recode them yet
density = 1
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index 1370b64ecc7..4352e48ffe1 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -295,8 +295,9 @@
~~~~~~~~~~~~~~~~~~~~~*/
/obj/mecha/proc/diag_hud_set_mechhealth()
var/image/holder = hud_list[DIAG_MECH_HUD]
- holder.icon_state = "huddiag[RoundDiagBar(health/initial(health))]"
-
+ var/icon/I = icon(icon, icon_state, dir)
+ holder.pixel_y = I.Height() - world.icon_size
+ holder.icon_state = "huddiag[RoundDiagBar(obj_integrity/max_integrity)]"
/obj/mecha/proc/diag_hud_set_mechcell()
var/image/holder = hud_list[DIAG_BATT_HUD]
diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm
index 5f66297b5d8..a41b13e11ef 100644
--- a/code/game/gamemodes/blob/blobs/core.dm
+++ b/code/game/gamemodes/blob/blobs/core.dm
@@ -2,7 +2,7 @@
name = "blob core"
icon = 'icons/mob/blob.dmi'
icon_state = "blank_blob"
- health = 200
+ max_integrity = 400
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 90)
fire_resist = 2
point_return = -1
diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm
index 7ebdcc841de..63d4023b41b 100644
--- a/code/game/gamemodes/blob/blobs/factory.dm
+++ b/code/game/gamemodes/blob/blobs/factory.dm
@@ -2,8 +2,7 @@
name = "factory blob"
icon = 'icons/mob/blob.dmi'
icon_state = "blob_factory"
- health = 100
- fire_resist = 2
+ max_integrity = 200
point_return = 18
var/list/spores = list()
var/max_spores = 3
diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm
index 6153719f204..574e1c3a3ba 100644
--- a/code/game/gamemodes/blob/blobs/node.dm
+++ b/code/game/gamemodes/blob/blobs/node.dm
@@ -2,9 +2,8 @@
name = "blob node"
icon = 'icons/mob/blob.dmi'
icon_state = "blank_blob"
- health = 100
+ max_integrity = 200
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 65, "acid" = 90)
- fire_resist = 2
point_return = 18
/obj/structure/blob/node/New(loc, var/h = 100)
diff --git a/code/game/gamemodes/blob/blobs/resource.dm b/code/game/gamemodes/blob/blobs/resource.dm
index 6a9100ccdbc..bafed3d4f83 100644
--- a/code/game/gamemodes/blob/blobs/resource.dm
+++ b/code/game/gamemodes/blob/blobs/resource.dm
@@ -2,8 +2,7 @@
name = "resource blob"
icon = 'icons/mob/blob.dmi'
icon_state = "blob_resource"
- health = 30
- fire_resist = 2
+ max_integrity = 60
point_return = 12
var/resource_delay = 0
diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/game/gamemodes/blob/blobs/shield.dm
index 119a4b4a28a..c5a7f241d49 100644
--- a/code/game/gamemodes/blob/blobs/shield.dm
+++ b/code/game/gamemodes/blob/blobs/shield.dm
@@ -3,20 +3,28 @@
icon = 'icons/mob/blob.dmi'
icon_state = "blob_idle"
desc = "Some blob creature thingy"
- health = 75
- fire_resist = 2
- point_return = 4
- var/maxHealth = 75
+ max_integrity = 150
+ brute_resist = 0.25
+ explosion_block = 3
+ atmosblock = TRUE
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
/obj/structure/blob/shield/core
point_return = 0
/obj/structure/blob/shield/update_icon()
- if(health <= 0)
- qdel(src)
- return
- return
+ ..()
+ if(obj_integrity < max_integrity * 0.5)
+ icon_state = "[initial(icon_state)]_damaged"
+ name = "weakened [initial(name)]"
+ desc = "A wall of twitching tendrils."
+ atmosblock = FALSE
+ else
+ icon_state = initial(icon_state)
+ name = initial(name)
+ desc = initial(desc)
+ atmosblock = TRUE
+ air_update_turf(1)
/obj/structure/blob/shield/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE)
return
@@ -29,9 +37,9 @@
name = "reflective blob"
desc = "A solid wall of slightly twitching tendrils with a reflective glow."
icon_state = "blob_idle_glow"
- brute_resist = 0
- health = 50
- maxHealth = 50
+ max_integrity = 100
+ brute_resist = 0.5
+ explosion_block = 2
point_return = 9
flags_2 = CHECK_RICOCHET_1
var/reflect_chance = 80 //80% chance to reflect
diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm
index 2971d2aa8ee..140ead3a947 100644
--- a/code/game/gamemodes/blob/overmind.dm
+++ b/code/game/gamemodes/blob/overmind.dm
@@ -97,7 +97,7 @@
..()
if(statpanel("Status"))
if(blob_core)
- stat(null, "Core Health: [blob_core.health]")
+ stat(null, "Core Health: [blob_core.obj_integrity]")
stat(null, "Power Stored: [blob_points]/[max_blob_points]")
/mob/camera/blob/Move(var/NewLoc, var/Dir = 0)
diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm
index 8f1d454d40b..d4c429a6f53 100644
--- a/code/game/gamemodes/blob/powers.dm
+++ b/code/game/gamemodes/blob/powers.dm
@@ -76,7 +76,7 @@
return
- else if(S.health < S.maxHealth * 0.5)
+ else if(S.obj_integrity < S.max_integrity * 0.5)
to_chat(src, "This shield blob is too damaged to be modified properly!")
return
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index 1d0bba83212..1a4f6f995c8 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -7,12 +7,14 @@
density = 0
opacity = 0
anchored = 1
+ max_integrity = 30
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
var/point_return = 0 //How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed.
var/health = 30
var/health_timestamp = 0
var/brute_resist = 4
var/fire_resist = 1
+ var/atmosblock = FALSE //if the blob blocks atmos and heat spread
var/mob/camera/blob/overmind
@@ -23,15 +25,22 @@
..(loc)
for(var/atom/A in loc)
A.blob_act(src)
+ if(atmosblock)
+ air_update_turf(1)
return
/obj/structure/blob/Destroy()
+ if(atmosblock)
+ atmosblock = FALSE
+ air_update_turf(1)
blobs -= src
if(isturf(loc)) //Necessary because Expand() is retarded and spawns a blob and then deletes it
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
return ..()
+/obj/structure/blob/BlockSuperconductivity()
+ return atmosblock
/obj/structure/blob/CanPass(atom/movable/mover, turf/target, height=0)
if(height==0)
@@ -40,6 +49,9 @@
return 1
return 0
+/obj/structure/blob/CanAtmosPass(turf/T)
+ return !atmosblock
+
/obj/structure/blob/CanAStarPass(ID, dir, caller)
. = 0
if(ismovableatom(caller))
@@ -215,15 +227,27 @@
/obj/structure/blob/normal
icon_state = "blob"
light_range = 0
- health = 21
+ obj_integrity = 21 //doesn't start at full health
+ max_integrity = 25
+ brute_resist = 0.25
/obj/structure/blob/normal/update_icon()
- if(health <= 0)
- qdel(src)
- else if(health <= 15)
+ ..()
+ if(obj_integrity <= 15)
icon_state = "blob_damaged"
+ name = "fragile blob"
+ desc = "A thin lattice of slightly twitching tendrils."
+ brute_resist = 0.5
+ else if(overmind)
+ icon_state = "blob"
+ name = "blob"
+ desc = "A thick wall of writhing tendrils."
+ brute_resist = 0.25
else
icon_state = "blob"
+ name = "dead blob"
+ desc = "A thick wall of lifeless tendrils."
+ brute_resist = 0.25
/* // Used to create the glow sprites. Remember to set the animate loop to 1, instead of infinite!
diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm
index eb54b52c225..b3d559059ed 100644
--- a/code/game/gamemodes/malfunction/Malf_Modules.dm
+++ b/code/game/gamemodes/malfunction/Malf_Modules.dm
@@ -321,7 +321,7 @@
for(var/obj/machinery/porta_turret/turret in GLOB.machines)
var/turf/T = get_turf(turret)
if(is_station_level(T.z))
- turret.health += 30
+ turret.obj_integrity += 30
turret.eprojectile = /obj/item/projectile/beam/laser/heavylaser //Once you see it, you will know what it means to FEAR.
turret.eshot_sound = 'sound/weapons/lasercannonfire.ogg'
diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
index 4308f8863b6..d87ba8c057f 100644
--- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
+++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
@@ -477,10 +477,9 @@
anchored = 1
light_range = 1
mouse_opacity = MOUSE_OPACITY_ICON
- var/health = 30
+ max_integrity = 30
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
light_color = LIGHT_COLOR_CYAN
- max_integrity = 30
var/lon_range = 1
/obj/structure/swarmer/New()
@@ -525,7 +524,7 @@
icon_state = "trap"
light_range = 1
light_color = LIGHT_COLOR_CYAN
- health = 10
+ max_integrity = 10
/obj/structure/swarmer/trap/Crossed(var/atom/movable/AM, oldloc)
if(isliving(AM))
@@ -566,7 +565,7 @@
icon_state = "barricade"
light_range = 1
light_color = LIGHT_COLOR_CYAN
- health = 50
+ max_integrity = 50
density = 1
anchored = 1
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 40ca8b28f5d..4508de4e6ba 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -400,6 +400,7 @@ var/bomb_set
name = "nuclear authentication disk"
desc = "Better keep this safe."
icon_state = "nucleardisk"
+ max_integrity = 250
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
diff --git a/code/game/machinery/Freezer.dm b/code/game/machinery/Freezer.dm
index 41200c42c42..b958b9fc625 100644
--- a/code/game/machinery/Freezer.dm
+++ b/code/game/machinery/Freezer.dm
@@ -8,6 +8,7 @@
use_power = IDLE_POWER_USE
current_heat_capacity = 1000
layer = 3
+ max_integrity = 300
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 30)
/obj/machinery/atmospherics/unary/cold_sink/freezer/New()
@@ -168,6 +169,7 @@
anchored = 1.0
layer = 3
current_heat_capacity = 1000
+ max_integrity = 300
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 30)
/obj/machinery/atmospherics/unary/heat_reservoir/heater/New()
diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm
index bbde8b87f6b..b1daa0f7b67 100644
--- a/code/game/machinery/PDApainter.dm
+++ b/code/game/machinery/PDApainter.dm
@@ -5,6 +5,7 @@
icon_state = "pdapainter"
density = 1
anchored = 1
+ max_integrity = 200
var/obj/item/pda/storedpda = null
var/list/colorlist = list()
diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm
index 9189a31c975..2c838a110cb 100644
--- a/code/game/machinery/ai_slipper.dm
+++ b/code/game/machinery/ai_slipper.dm
@@ -5,6 +5,7 @@
layer = 3
plane = FLOOR_PLANE
anchored = 1.0
+ max_integrity = 200
armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
var/uses = 20
var/disabled = TRUE
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index be6abb0d42e..d13406eee99 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -80,6 +80,8 @@
active_power_usage = 8
power_channel = ENVIRON
req_one_access = list(access_atmospherics, access_engine_equip)
+ max_integrity = 250
+ integrity_failure = 80
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
resistance_flags = FIRE_PROOF
siemens_strength = 1
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 2dcceecba76..7f6cca54efa 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -51,6 +51,8 @@ var/datum/canister_icons/canister_icon_container = new()
var/health = 100.0
flags = CONDUCT
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 50)
+ max_integrity = 250
+ integrity_failure = 100
var/menu = 0
//used by nanoui: 0 = main menu, 1 = relabel
diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm
index 8989f7d11a9..90601f61bfb 100644
--- a/code/game/machinery/atmoalter/meter.dm
+++ b/code/game/machinery/atmoalter/meter.dm
@@ -8,6 +8,7 @@
var/obj/machinery/atmospherics/pipe/target = null
anchored = TRUE
+ max_integrity = 150
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 40, "acid" = 0)
power_channel = ENVIRON
var/frequency = ATMOS_DISTRO_FREQ
diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm
index 0041f75b666..aebfc3e5f74 100644
--- a/code/game/machinery/atmoalter/portable_atmospherics.dm
+++ b/code/game/machinery/atmoalter/portable_atmospherics.dm
@@ -1,6 +1,7 @@
/obj/machinery/portable_atmospherics
name = "atmoalter"
use_power = NO_POWER_USE
+ max_integrity = 250
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 60, "acid" = 30)
var/datum/gas_mixture/air_contents = new
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index eb2d6106724..735a423a230 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -255,7 +255,8 @@
assembly.update_icon()
assembly = null
else
- new /obj/item/camera_assembly(loc)
+ var/obj/item/I = new /obj/item/camera_assembly(loc)
+ I.obj_integrity = I.max_integrity * 0.5
new /obj/item/stack/cable_coil(loc, 2)
qdel(src)
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index 9f4647e6fd0..15468dae4bf 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -4,6 +4,7 @@
name = "AI core"
icon = 'icons/mob/AI.dmi'
icon_state = "0"
+ max_integrity = 500
var/state = 0
var/datum/ai_laws/laws = null
var/obj/item/circuitboard/circuit = null
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index 123846f04cd..438c8f92246 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -7,6 +7,8 @@
use_power = IDLE_POWER_USE
idle_power_usage = 300
active_power_usage = 300
+ max_integrity = 200
+ integrity_failure = 100
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 20)
var/obj/item/circuitboard/circuit = null //if circuit==null, computer can't disassembly
var/processing = 0
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 7d36ebb7abf..c911d158576 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -5,7 +5,7 @@
density = 1
anchored = 1
use_power = NO_POWER_USE
- max_integrity = 100
+ max_integrity = 250
var/obj/item/circuitboard/circuit = null
var/list/components = null
var/list/req_components = null
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 29fb0c5c438..6c3960176e1 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -8,6 +8,7 @@
layer = ABOVE_WINDOW_LAYER
plane = GAME_PLANE
interact_offline = 1
+ max_integrity = 350
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 30, "acid" = 30)
var/on = 0
var/temperature_archived
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index dad6ece80cf..d562c6b78ea 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -284,7 +284,6 @@
icon_state = "frame1"
anchored = FALSE
density = TRUE
- max_integrity = 300
var/constructionStep = CONSTRUCTION_NOCIRCUIT
var/reinforced = 0
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index b3716508d02..4d8fbf01974 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -8,6 +8,7 @@
explosion_block = 3
heat_proof = TRUE
safe = FALSE
+ max_integrity = 600
armor = list("melee" = 50, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70)
resistance_flags = FIRE_PROOF
damage_deflection = 70
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index a56373fec3f..fe104ff794c 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -40,8 +40,7 @@
/obj/machinery/door/window/Destroy()
density = FALSE
- for(var/I in debris)
- qdel(I)
+ QDEL_LIST(debris)
if(obj_integrity == 0)
playsound(src, "shatter", 70, 1)
QDEL_NULL(electronics)
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index 46ea5f967bd..643cc500441 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -12,6 +12,8 @@ FIRE ALARM
var/timing = 0.0
var/lockdownbyai = 0
anchored = 1.0
+ max_integrity = 250
+ integrity_failure = 100
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100, fire = 90, acid = 30)
use_power = IDLE_POWER_USE
idle_power_usage = 2
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 6d267ad8daf..0579e0ccbe7 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -5,6 +5,8 @@
desc = "A wall-mounted flashbulb device."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "mflash1"
+ max_integrity = 250
+ integrity_failure = 100
damage_deflection = 10
var/id = null
var/range = 2 //this is roughly the size of brig cell
diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm
index 68e22f2e8c7..20e5c0f38e4 100644
--- a/code/game/machinery/floodlight.dm
+++ b/code/game/machinery/floodlight.dm
@@ -4,6 +4,8 @@
icon_state = "flood00"
anchored = FALSE
density = TRUE
+ max_integrity = 100
+ integrity_failure = 80
light_power = 20
var/on = FALSE
var/obj/item/stock_parts/cell/high/cell = null
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 9d8dd6d36c7..be51ef7618a 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -45,6 +45,7 @@ var/list/holopads = list()
active_power_usage = 100
layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them.
plane = FLOOR_PLANE
+ max_integrity = 300
armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0)
var/list/masters = list()//List of living mobs that use the holopad
var/list/holorays = list()//Holoray-mob link.
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index 305871c9196..008d6741ef1 100755
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -4,6 +4,7 @@
icon = 'icons/obj/stationobjs.dmi'
icon_state = "igniter1"
plane = FLOOR_PLANE
+ max_integrity = 300
armor = list(melee = 50, bullet = 30, laser = 70, energy = 50, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 70)
resistance_flags = FIRE_PROOF
var/id = null
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 20a36401e5b..63368000567 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -97,6 +97,7 @@ Class Procs:
name = "machinery"
icon = 'icons/obj/stationobjs.dmi'
pressure_resistance = 15
+ max_integrity = 200
layer = BELOW_OBJ_LAYER
var/stat = 0
var/emagged = 0
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 937f64c007e..c93c4e099b2 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -10,6 +10,7 @@
level = 1 // underfloor
layer = 2.5
anchored = 1
+ max_integrity = 500
armor = list(melee = 70, bullet = 70, laser = 70, energy = 70, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80)
var/open = 0 // true if cover is open
var/locked = 1 // true if controls are locked
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index 05b8c416134..2d61a318bd8 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -79,6 +79,8 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
icon = 'icons/obj/terminals.dmi'
icon_state = "newscaster_normal"
armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
+ max_integrity = 200
+ integrity_failure = 50
var/screen = NEWSCASTER_MAIN
var/paper_remaining = 15
var/securityCaster = 0
@@ -139,21 +141,24 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
return ..()
/obj/machinery/newscaster/update_icon()
- overlays.Cut()
+ cut_overlays()
if(inoperable())
icon_state = "newscaster_off"
- if(stat & BROKEN) //If the thing is smashed, add crack overlay on top of the unpowered sprite.
- overlays += image(icon, "crack3")
else
if(!news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message
icon_state = "newscaster_normal"
if(alert) //new message alert overlay
- overlays += "newscaster_alert"
+ add_overlay("newscaster_alert")
+ var/hp_percent = obj_integrity * 100 /max_integrity
+ switch(hp_percent)
+ if(75 to 100)
+ return
+ if(50 to 75)
+ add_overlay("crack1")
+ if(25 to 50)
+ add_overlay("crack2")
else
- icon_state = "newscaster_wanted"
-
- if(hitstaken > 0) //Cosmetic damage overlay
- overlays += image(icon, "crack[hitstaken]")
+ add_overlay("crack3")
/obj/machinery/newscaster/power_change()
..()
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 6953b8d7865..df3d13b7378 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -13,6 +13,9 @@
idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power
active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power
power_channel = EQUIP //drains power from the EQUIPMENT channel
+
+ max_integrity = 160 //the turret's health
+ integrity_failure = 80
armor = list(melee = 50, bullet = 30, laser = 30, energy = 30, bomb = 30, bio = 0, rad = 0, fire = 90, acid = 90)
var/raised = 0 //if the turret cover is "open" and the turret is raised
var/raising= 0 //if the turret is currently opening or closing its cover
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index 0b5eca3f76d..2cc86ee1b3a 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -38,6 +38,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
anchored = 1
icon = 'icons/obj/terminals.dmi'
icon_state = "req_comp0"
+ max_integrity = 300
armor = list("melee" = 70, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department
var/list/message_log = list() //List of all messages
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index fd034999a76..00d29b43459 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -5,6 +5,7 @@
icon_state = "sheater0"
name = "space heater"
desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed not to set the station on fire."
+ max_integrity = 250
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 10)
var/obj/item/stock_parts/cell/cell
var/on = 0
diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm
index 9abdfcc8549..9295e3bc385 100644
--- a/code/game/mecha/combat/combat.dm
+++ b/code/game/mecha/combat/combat.dm
@@ -3,7 +3,6 @@
var/maxsize = 2
internal_damage_threshold = 50
maint_access = 0
- damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8)
armor = list(melee = 30, bullet = 30, laser = 15, energy = 20, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100)
destruction_sleep_duration = 2
var/am = "d3c2fbcadca903a41161ccc9df9cf948"
diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm
index f29bf9ed26a..a30f50a69d0 100644
--- a/code/game/mecha/combat/durand.dm
+++ b/code/game/mecha/combat/durand.dm
@@ -5,9 +5,8 @@
initial_icon = "durand"
step_in = 4
dir_in = 1 //Facing North.
- health = 400
+ max_integrity = 400
deflect_chance = 20
- damage_absorption = list("brute"=0.5,"fire"=1.1,"bullet"=0.65,"laser"=0.85,"energy"=0.9,"bomb"=0.8)
armor = list(melee = 40, bullet = 35, laser = 15, energy = 10, bomb = 20, bio = 0, rad = 50, fire = 100, acid = 100)
max_temperature = 30000
infra_luminosity = 8
@@ -36,9 +35,9 @@
initial_icon = "old_durand"
step_in = 4
dir_in = 1 //Facing North.
- health = 400
+ max_integrity = 400
deflect_chance = 20
- damage_absorption = list("brute"=0.5,"fire"=1.1,"bullet"=0.65,"laser"=0.85,"energy"=0.9,"bomb"=0.8)
+ armor = list(melee = 50, bullet = 35, laser = 15, energy = 15, bomb = 20, bio = 0, rad = 50, fire = 100, acid = 100)
max_temperature = 30000
infra_luminosity = 8
force = 40
diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm
index 8733414ee40..4a26149ec2f 100644
--- a/code/game/mecha/combat/gygax.dm
+++ b/code/game/mecha/combat/gygax.dm
@@ -5,9 +5,8 @@
initial_icon = "gygax"
step_in = 3
dir_in = 1 //Facing North.
- health = 250
+ max_integrity = 250
deflect_chance = 5
- damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1)
armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100)
max_temperature = 25000
infra_luminosity = 6
@@ -39,9 +38,8 @@
name = "Dark Gygax"
icon_state = "darkgygax"
initial_icon = "darkgygax"
- health = 300
+ max_integrity = 300
deflect_chance = 15
- damage_absorption = list("brute"=0.6,"fire"=0.8,"bullet"=0.6,"laser"=0.5,"energy"=0.65,"bomb"=0.8)
armor = list(melee = 40, bullet = 40, laser = 50, energy = 35, bomb = 20, bio = 0, rad =20, fire = 100, acid = 100)
max_temperature = 35000
leg_overload_coeff = 100
diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm
index 6dd38b02ba0..a9f72b2a67f 100644
--- a/code/game/mecha/combat/honker.dm
+++ b/code/game/mecha/combat/honker.dm
@@ -4,10 +4,9 @@
icon_state = "honker"
initial_icon = "honker"
step_in = 3
- health = 140
+ max_integrity = 140
deflect_chance = 60
internal_damage_threshold = 60
- damage_absorption = list("brute"=1.2,"fire"=1.5,"bullet"=1,"laser"=1,"energy"=1,"bomb"=1)
armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
max_temperature = 25000
infra_luminosity = 5
@@ -28,7 +27,7 @@
ME.attach(src)
/obj/mecha/combat/honker/get_stats_part()
- var/integrity = health/initial(health)*100
+ var/integrity = obj_integrity/max_integrity*100
var/cell_charge = get_charge()
var/tank_pressure = internal_tank ? round(internal_tank.return_pressure(),0.01) : "None"
var/tank_temperature = internal_tank ? internal_tank.return_temperature() : "Unknown"
diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm
index b7fc1c14cd7..2347813b2ce 100644
--- a/code/game/mecha/combat/marauder.dm
+++ b/code/game/mecha/combat/marauder.dm
@@ -4,9 +4,8 @@
icon_state = "marauder"
initial_icon = "marauder"
step_in = 5
- health = 500
+ max_integrity = 500
deflect_chance = 25
- damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7)
armor = list("melee" = 50, "bullet" = 55, "laser" = 40, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 60, "fire" = 100, "acid" = 100)
max_temperature = 60000
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
@@ -52,7 +51,7 @@
initial_icon = "seraph"
operation_req_access = list(access_cent_commander)
step_in = 3
- health = 550
+ max_integrity = 550
wreckage = /obj/effect/decal/mecha_wreckage/seraph
internal_damage_threshold = 20
force = 80
diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm
index 179e060ecc0..0350f73985d 100644
--- a/code/game/mecha/combat/phazon.dm
+++ b/code/game/mecha/combat/phazon.dm
@@ -7,9 +7,8 @@
dir_in = 2 //Facing south.
step_energy_drain = 3
normal_step_energy_drain = 3
- health = 200
+ max_integrity = 200
deflect_chance = 30
- damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7)
armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 50, "fire" = 100, "acid" = 100)
max_temperature = 25000
infra_luminosity = 3
diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm
index 39e2a771bc8..2e86a2ab35e 100644
--- a/code/game/mecha/combat/reticence.dm
+++ b/code/game/mecha/combat/reticence.dm
@@ -5,9 +5,8 @@
initial_icon = "mime"
step_in = 2
dir_in = 1 //Facing North.
- health = 150
+ max_integrity = 150
deflect_chance = 30
- damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1)
armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
max_temperature = 15000
wreckage = /obj/effect/decal/mecha_wreckage/reticence
diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
index 3f87c304c97..e7aa4d45578 100644
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ b/code/game/mecha/equipment/mecha_equipment.dm
@@ -7,6 +7,7 @@
icon_state = "mecha_equip"
force = 5
origin_tech = "materials=2;engineering=2"
+ max_integrity = 300
var/equip_cooldown = 0
var/equip_ready = 1
var/energy_drain = 0
diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm
index 9e4b86f579e..43937ab1111 100644
--- a/code/game/mecha/equipment/tools/other_tools.dm
+++ b/code/game/mecha/equipment/tools/other_tools.dm
@@ -245,8 +245,8 @@
chassis.clearInternalDamage(int_dam_flag)
repaired = 1
break
- if(health_boost<0 || chassis.health < initial(chassis.health))
- chassis.health += min(health_boost, initial(chassis.health)-chassis.health)
+ if(h_boost<0 || chassis.obj_integrity < chassis.max_integrity)
+ chassis.obj_integrity += min(h_boost, chassis.max_integrity-chassis.obj_integrity)
repaired = 1
if(repaired)
if(!chassis.use_power(energy_drain))
diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm
index 4e12a22a109..895361f301b 100644
--- a/code/game/mecha/mech_bay.dm
+++ b/code/game/mecha/mech_bay.dm
@@ -175,7 +175,7 @@
if(recharge_port && !QDELETED(recharge_port))
data["recharge_port"] = list("mech" = null)
if(recharge_port.recharging_mecha && !QDELETED(recharge_port.recharging_mecha))
- data["recharge_port"]["mech"] = list("health" = recharge_port.recharging_mecha.health, "maxhealth" = initial(recharge_port.recharging_mecha.health), "cell" = null)
+ data["recharge_port"]["mech"] = list("health" = recharge_port.recharging_mecha.obj_integrity, "maxhealth" = initial(recharge_port.recharging_mecha.max_integrity), "cell" = null)
if(recharge_port.recharging_mecha.cell && !QDELETED(recharge_port.recharging_mecha.cell))
data["has_mech"] = 1
data["mecha_name"] = recharge_port.recharging_mecha || "None"
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 1ef0434557d..ffd90bed09c 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -15,6 +15,7 @@
layer = MOB_LAYER //icon draw layer
infra_luminosity = 15 //byond implementation is bugged.
force = 5
+ max_integrity = 300 //max_integrity is base health
armor = list(melee = 20, bullet = 10, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100)
var/list/facing_modifiers = list(MECHA_FRONT_ARMOUR = 1.5, MECHA_SIDE_ARMOUR = 1, MECHA_BACK_ARMOUR = 0.5)
var/ruin_mecha = FALSE //if the mecha starts on a ruin, don't automatically give it a tracking beacon to prevent metagaming.
@@ -27,10 +28,7 @@
var/step_energy_drain = 10
var/melee_energy_drain = 15
var/overload_step_energy_drain_min = 100
- var/health = 300 //health is health
var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
- //the values in this list show how much damage will pass through, not how much will be absorbed.
- var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1)
var/obj/item/stock_parts/cell/cell
var/state = 0
var/list/log = new
@@ -167,7 +165,7 @@
/obj/mecha/examine(mob/user)
. = ..()
- var/integrity = health/initial(health)*100
+ var/integrity = obj_integrity * 100 / max_integrity
switch(integrity)
if(85 to 100)
. += "It's fully intact."
@@ -328,8 +326,7 @@
else
occupant.clear_alert("mechaport")
if(leg_overload_mode)
- take_damage(1)
- if(health < initial(health) - initial(health) / 3)
+ if(obj_integrity < max_integrity - max_integrity / 3)
leg_overload_mode = FALSE
step_in = initial(step_in)
step_energy_drain = initial(step_energy_drain)
@@ -436,10 +433,11 @@
//////// Internal damage ////////
///////////////////////////////////
-/obj/mecha/proc/check_for_internal_damage(var/list/possible_int_damage,var/ignore_threshold=null)
- if(!islist(possible_int_damage) || isemptylist(possible_int_damage)) return
+/obj/mecha/proc/check_for_internal_damage(list/possible_int_damage, ignore_threshold=null)
+ if(!islist(possible_int_damage) || isemptylist(possible_int_damage))
+ return
if(prob(20))
- if(ignore_threshold || health*100/initial(health) 0)
- spark_system.start()
- diag_hud_set_mechhealth()
- else
- qdel(src)
- return
-
/obj/mecha/attack_hand(mob/living/user)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
@@ -773,7 +755,7 @@
else if(iswelder(W) && user.a_intent != INTENT_HARM)
var/obj/item/weldingtool/WT = W
- if(health < initial(health))
+ if(obj_integrity < max_integrity)
if(WT.remove_fuel(0, user))
user.visible_message("[user] starts repairing some damage to [name].", "You start repairing some damage to [name]")
if(do_after_once(user, 15 * WT.toolspeed, target = src, attempt_cancel_message = "You stop repairing [name]."))
@@ -782,7 +764,7 @@
user.visible_message("[user] repairs the damaged gas tank.", "You repair the damaged gas tank.")
else
user.visible_message("[user] repairs some damage to [name].", "You repair some damage to [name].")
- health += min(20, initial(health) - health)
+ obj_integrity += min(10, max_integrity - obj_integrity)
else
to_chat(user, "The welder must be on for this task!")
else
@@ -1073,7 +1055,7 @@
visible_message("[user] starts to climb into [src]")
if(do_after(user, 40, target = src))
- if(health <= 0)
+ if(obj_integrity <= 0)
to_chat(user, "You cannot get in the [name], it has been destroyed!")
else if(occupant)
to_chat(user, "[occupant] was faster! Try better next time, loser.")
diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm
index c7ab5ac6620..3c71db19b72 100644
--- a/code/game/mecha/mecha_actions.dm
+++ b/code/game/mecha/mecha_actions.dm
@@ -113,7 +113,6 @@
chassis.log_message("Toggled defence mode.")
UpdateButtonIcon()
-
/datum/action/innate/mecha/mech_overload_mode
name = "Toggle leg actuators overload"
button_icon_state = "mech_overload_off"
@@ -121,7 +120,7 @@
/datum/action/innate/mecha/mech_overload_mode/Activate(forced_state = null)
if(!owner || !chassis || chassis.occupant != owner)
return
- if(chassis.health < initial(chassis.health) - initial(chassis.health) / 3)
+ if(chassis.obj_integrity < chassis.max_integrity - chassis.max_integrity / 3)
chassis.occupant_message("The leg actuators are too damaged to overload!")
return // Can't activate them if the mech is too damaged
if(!isnull(forced_state))
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index 894056118fe..99e6ca72367 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -89,7 +89,7 @@
answer["cell_percentage"] = round(M.cell.percent())
else
answer["cell"] = 0
- answer["integrity"] = M.health/initial(M.health)*100
+ answer["integrity"] = round((M.obj_integrity/M.max_integrity*100), 0.01)
answer["airtank"] = M.return_pressure()
answer["pilot"] = "[M.occupant||"None"]"
var/area/area = get_area(M)
@@ -109,7 +109,7 @@
var/cell_charge = M.get_charge()
var/area/A = get_area(M)
var/answer = {"Name: [M.name]
- Integrity: [M.health/initial(M.health)*100]%
+ Integrity: [M.obj_integrity / M.max_integrity * 100]%
Cell charge: [isnull(cell_charge)?"Not found":"[M.cell.percent()]%"]
Airtank: [M.return_pressure()]kPa
Pilot: [M.occupant||"None"]
diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm
index c4367056e03..9598d328d7a 100644
--- a/code/game/mecha/mecha_topic.dm
+++ b/code/game/mecha/mecha_topic.dm
@@ -69,7 +69,7 @@
/obj/mecha/proc/get_stats_part()
- var/integrity = health/initial(health)*100
+ var/integrity = obj_integrity/max_integrity*100
var/cell_charge = get_charge()
var/tank_pressure = internal_tank ? round(internal_tank.return_pressure(),0.01) : "None"
var/tank_temperature = internal_tank ? internal_tank.return_temperature() : "Unknown"
diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm
index da746290e8a..ead74cfcc08 100644
--- a/code/game/mecha/medical/odysseus.dm
+++ b/code/game/mecha/medical/odysseus.dm
@@ -5,7 +5,7 @@
initial_icon = "odysseus"
step_in = 3
max_temperature = 15000
- health = 120
+ max_integrity = 120
wreckage = /obj/effect/decal/mecha_wreckage/odysseus
internal_damage_threshold = 35
deflect_chance = 15
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index 757a379a25a..2f37642d78d 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -7,15 +7,15 @@
var/fast_pressure_step_in = 2 //step_in while in normal pressure conditions
var/slow_pressure_step_in = 4 //step_in while in better pressure conditions
max_temperature = 20000
- health = 200
+ max_integrity = 200
lights_power = 7
deflect_chance = 15
- damage_absorption = list("brute"=0.6,"fire"=1,"bullet"=0.8,"laser"=0.9,"energy"=1,"bomb"=0.6)
armor = list("melee" = 40, "bullet" = 20, "laser" = 10, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
max_equip = 6
wreckage = /obj/effect/decal/mecha_wreckage/ripley
var/list/cargo = new
var/cargo_capacity = 15
+ var/hides = 0
/obj/mecha/working/ripley/Move()
. = ..()
@@ -32,9 +32,8 @@
ore.forceMove(ore_box)
/obj/mecha/working/ripley/Destroy()
- while(damage_absorption["brute"] < 0.6)
- new /obj/item/stack/sheet/animalhide/goliath_hide(loc)
- damage_absorption["brute"] = damage_absorption["brute"] + 0.1 //If a goliath-plated ripley gets killed, all the plates drop
+ for(var/i=1, i <= hides, i++)
+ new /obj/item/stack/sheet/animalhide/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop
for(var/atom/movable/A in cargo)
A.forceMove(loc)
step_rand(A)
@@ -43,30 +42,24 @@
/obj/mecha/working/ripley/go_out()
..()
- if(damage_absorption["brute"] < 0.6 && damage_absorption["brute"] > 0.3)
- overlays = null
- overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-open")
- else if(damage_absorption["brute"] == 0.3)
- overlays = null
- overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full-open")
+ update_icon()
-/obj/mecha/working/ripley/moved_inside(var/mob/living/carbon/human/H as mob)
+/obj/mecha/working/ripley/moved_inside(mob/living/carbon/human/H)
..()
- if(damage_absorption["brute"] < 0.6 && damage_absorption["brute"] > 0.3)
- overlays = null
- overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g")
- else if(damage_absorption["brute"] == 0.3)
- overlays = null
- overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full")
+ update_icon()
-/obj/mecha/working/ripley/mmi_moved_inside(var/obj/item/mmi/mmi_as_oc as obj,mob/user as mob)
+/obj/mecha/working/ripley/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user)
..()
- if(damage_absorption["brute"] < 0.6 && damage_absorption["brute"] > 0.3)
- overlays = null
- overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g")
- else if(damage_absorption["brute"] == 0.3)
- overlays = null
- overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full")
+ update_icon()
+
+/obj/mecha/working/ripley/update_icon()
+ ..()
+ if(hides)
+ cut_overlays()
+ if(hides < 3)
+ add_overlay(occupant ? "ripley-g" : "ripley-g-open")
+ else
+ add_overlay(occupant ? "ripley-g-full" : "ripley-g-full-open")
/obj/mecha/working/ripley/firefighter
desc = "Standart APLU chassis was refitted with additional thermal protection and cistern."
@@ -74,10 +67,9 @@
icon_state = "firefighter"
initial_icon = "firefighter"
max_temperature = 65000
- health = 250
+ max_integrity = 250
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
lights_power = 7
- damage_absorption = list("brute"=0.6,"fire"=0.5,"bullet"=0.7,"laser"=0.7,"energy"=1,"bomb"=0.4)
armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 60, "bio" = 0, "rad" = 70, "fire" = 100, "acid" = 100)
max_equip = 5 // More armor, less tools
wreckage = /obj/effect/decal/mecha_wreckage/ripley/firefighter
@@ -91,9 +83,9 @@
slow_pressure_step_in = 3
opacity=0
max_temperature = 65000
- health = 300
+ max_integrity = 300
lights_power = 7
- damage_absorption = list("brute"=0.6,"fire"=0.4,"bullet"=0.6,"laser"=0.6,"energy"=1,"bomb"=0.3)
+ armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 0, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
wreckage = /obj/effect/decal/mecha_wreckage/ripley/deathripley
step_energy_drain = 0
normal_step_energy_drain = 0
@@ -107,6 +99,7 @@
/obj/mecha/working/ripley/mining
desc = "An old, dusty mining ripley."
name = "APLU \"Miner\""
+ obj_integrity = 75 //Low starting health
/obj/mecha/working/ripley/mining/New()
..()
diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm
index a7bc63febb5..0fe284fb67e 100644
--- a/code/game/objects/effects/glowshroom.dm
+++ b/code/game/objects/effects/glowshroom.dm
@@ -3,13 +3,13 @@
/obj/structure/glowshroom
name = "glowshroom"
desc = "Mycena Bregprox, a species of mushroom that glows in the dark."
- anchored = 1
+ anchored = TRUE
opacity = 0
- density = 0
+ density = FALSE
icon = 'icons/obj/lighting.dmi'
icon_state = "glowshroom" //replaced in New
- layer = 2.1
- var/endurance = 30
+ layer = ABOVE_NORMAL_TURF_LAYER
+ max_integrity = 30
var/delay = 1200
var/floor = 0
var/generation = 1
@@ -52,7 +52,8 @@
myseed.adjust_production(rand(-3,6))
myseed.adjust_endurance(rand(-3,6))
delay = delay - myseed.production * 100 //So the delay goes DOWN with better stats instead of up. :I
- endurance = myseed.endurance
+ obj_integrity = myseed.endurance
+ max_integrity = myseed.endurance
if(myseed.get_gene(/datum/plant_gene/trait/glow))
var/datum/plant_gene/trait/glow/G = myseed.get_gene(/datum/plant_gene/trait/glow)
set_light(G.glow_range(myseed), G.glow_power(myseed), G.glow_color)
@@ -151,23 +152,6 @@
floor = 1
return 1
-/obj/structure/glowshroom/attackby(obj/item/I, mob/user)
- ..()
- var/damage_to_do = I.force
- if(istype(I, /obj/item/scythe))
- var/obj/item/scythe/S = I
- if(S.extend) //so folded telescythes won't get damage boosts / insta-clears (they instead will instead be treated like non-scythes)
- damage_to_do *= 4
- for(var/obj/structure/glowshroom/G in range(1,src))
- G.endurance -= damage_to_do
- G.CheckEndurance()
- return
- else if(I.sharp)
- damage_to_do = I.force * 3 // wirecutter: 6->18, knife 10->30, hatchet 12->36
- if(I.damtype != STAMINA)
- endurance -= damage_to_do
- CheckEndurance()
-
/obj/structure/glowshroom/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
if(damage_type == BURN && damage_amount)
playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
@@ -175,12 +159,7 @@
/obj/structure/glowshroom/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
if(exposed_temperature > 300)
- endurance -= 5
- CheckEndurance()
-
-/obj/structure/glowshroom/proc/CheckEndurance()
- if(endurance <= 0)
- qdel(src)
+ take_damage(5, BURN, 0, 0)
/obj/structure/glowshroom/acid_act(acidpwr, acid_volume)
. = 1
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 97856717b70..169a0a4b3c8 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -5,7 +5,7 @@
icon = 'icons/effects/effects.dmi'
anchored = TRUE
density = FALSE
- var/health = 15
+ max_integrity = 15
var/mob/living/carbon/human/master_commander = null
/obj/structure/spider/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
@@ -26,31 +26,10 @@
master_commander = null
return ..()
-/obj/structure/spider/attackby(obj/item/W, mob/user, params)
- if(W.attack_verb.len)
- visible_message("[user] has [pick(W.attack_verb)] [src] with [W]!")
- else
- visible_message("[user] has attacked [src] with [W]!")
- var/damage = W.force / 4
- if(iswelder(W))
- var/obj/item/weldingtool/WT = W
- if(WT.remove_fuel(0, user))
- damage = 15
- playsound(loc, WT.usesound, 100, 1)
- user.changeNext_move(CLICK_CD_MELEE)
- user.do_attack_animation(src)
- health -= damage
- healthcheck()
-
-/obj/structure/spider/proc/healthcheck()
- if(health <= 0)
- qdel(src)
-
/obj/structure/spider/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
if(exposed_temperature > 300)
- health -= 5
- healthcheck()
+ take_damage(5, BURN, 0, 0)
/obj/structure/spider/stickyweb
icon_state = "stickyweb1"
@@ -105,7 +84,7 @@
icon_state = "spiderling"
anchored = 0
layer = 2.75
- health = 3
+ max_integrity = 3
var/amount_grown = 0
var/grow_as = null
var/obj/machinery/atmospherics/unary/vent_pump/entry_vent
@@ -123,6 +102,7 @@
/obj/structure/spider/spiderling/Destroy()
STOP_PROCESSING(SSobj, src)
entry_vent = null
+ new /obj/effect/decal/cleanable/spiderling_remains(get_turf(src))
return ..()
/obj/structure/spider/spiderling/Bump(atom/user)
@@ -131,15 +111,6 @@
else
..()
-/obj/structure/spider/spiderling/proc/die()
- visible_message("[src] dies!")
- new /obj/effect/decal/cleanable/spiderling_remains(loc)
- qdel(src)
-
-/obj/structure/spider/spiderling/healthcheck()
- if(health <= 0)
- die()
-
/obj/structure/spider/spiderling/process()
if(travelling_in_vent)
if(istype(loc, /turf))
@@ -229,7 +200,7 @@
name = "cocoon"
desc = "Something wrapped in silky spider web"
icon_state = "cocoon1"
- health = 60
+ max_integrity = 60
/obj/structure/spider/cocoon/New()
..()
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index bc4f3417e6e..f8eb1bb1e97 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -15,6 +15,8 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
var/inhand_x_dimension = 32
var/inhand_y_dimension = 32
+ max_integrity = 200
+
can_be_hit = FALSE
suicidal_hands = TRUE
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index 1e75bdc84fc..01f8f2f2057 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -22,6 +22,7 @@
sound = 'sound/items/zip.ogg'
var/item_path = /obj/item/bodybag
density = 0
+ integrity_failure = 0
/obj/structure/closet/body_bag/attackby(W as obj, mob/user as mob, params)
diff --git a/code/game/objects/items/devices/instruments.dm b/code/game/objects/items/devices/instruments.dm
index a3321112891..3942407b3d8 100644
--- a/code/game/objects/items/devices/instruments.dm
+++ b/code/game/objects/items/devices/instruments.dm
@@ -5,6 +5,7 @@
lefthand_file = 'icons/mob/inhands/equipment/instruments_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/instruments_righthand.dmi'
resistance_flags = FLAMMABLE
+ max_integrity = 100
var/datum/song/handheld/song
var/instrumentId = "generic"
var/instrumentExt = "mid"
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 647837a1812..a38805283dc 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -8,6 +8,7 @@
throw_speed = 3
throw_range = 7
resistance_flags = FLAMMABLE
+ max_integrity = 40
var/heal_brute = 0
var/heal_burn = 0
var/self_delay = 20
diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm
index 7e18fa4a8ea..e48aa4befe5 100644
--- a/code/game/objects/items/stacks/sheets/leather.dm
+++ b/code/game/objects/items/stacks/sheets/leather.dm
@@ -133,52 +133,41 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \
flags = NOBLUDGEON
w_class = WEIGHT_CLASS_NORMAL
layer = MOB_LAYER
- var/static/list/can_strengthen_clothing
-
-/obj/item/stack/sheet/animalhide/goliath_hide/Initialize(mapload)
- . = ..()
- if(!can_strengthen_clothing)
- can_strengthen_clothing = typecacheof(list(
+ var/static/list/goliath_platable_armor_typecache = typecacheof(list(
/obj/item/clothing/suit/space/hardsuit/mining,
/obj/item/clothing/head/helmet/space/hardsuit/mining,
/obj/item/clothing/suit/hooded/explorer,
/obj/item/clothing/head/hooded/explorer,
- /obj/item/clothing/head/helmet/space/plasmaman/mining
- ))
+ /obj/item/clothing/head/helmet/space/plasmaman/mining))
/obj/item/stack/sheet/animalhide/goliath_hide/afterattack(atom/target, mob/user, proximity_flag)
- if(proximity_flag)
- if(is_type_in_typecache(target, can_strengthen_clothing))
- var/obj/item/clothing/C = target
- var/current_armor = C.armor
- if(current_armor["melee"] < 60)
- current_armor["melee"] = min(current_armor["melee"] + 10, 60)
- to_chat(user, "You strengthen [target], improving its resistance against melee attacks.")
- use(1)
+ if(!proximity_flag)
+ return
+ if(is_type_in_typecache(target, goliath_platable_armor_typecache))
+ var/obj/item/clothing/C = target
+ var/list/current_armor = C.armor
+ if(current_armor["melee"] < 60)
+ current_armor["melee"] = min(current_armor["melee"] + 10, 60)
+ to_chat(user, "You strengthen [target], improving its resistance against melee attacks.")
+ use(1)
+ else
+ to_chat(user, "You can't improve [C] any further!")
+ else if(istype(target, /obj/mecha/working/ripley))
+ var/obj/mecha/working/ripley/D = target
+ if(D.hides < 3)
+ D.hides++
+ D.armor["melee"] = min(D.armor["melee"] + 10, 70)
+ D.armor["bullet"] = min(D.armor["bullet"] + 5, 50)
+ D.armor["laser"] = min(D.armor["laser"] + 5, 50)
+ to_chat(user, "You strengthen [target], improving its resistance against melee attacks.")
+ D.update_icon()
+ if(D.hides == 3)
+ D.desc = "Autonomous Power Loader Unit. It's wearing a fearsome carapace entirely composed of goliath hide plates - its pilot must be an experienced monster hunter."
else
- to_chat(user, "You can't improve [C] any further.")
- return
- if(istype(target, /obj/mecha/working/ripley))
- var/obj/mecha/D = target
- if(D.icon_state != "ripley-open")
- to_chat(user, "You can't add armour onto the mech while someone is inside!")
- return
- var/list/damage_absorption = D.damage_absorption
- if(damage_absorption["brute"] > 0.3)
- damage_absorption["brute"] = max(damage_absorption["brute"] - 0.1, 0.3)
- damage_absorption["bullet"] = damage_absorption["bullet"] - 0.05
- damage_absorption["fire"] = damage_absorption["fire"] - 0.05
- damage_absorption["laser"] = damage_absorption["laser"] - 0.025
- to_chat(user, "You strengthen [target], improving its resistance against melee attacks.")
- use(1)
- D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-open")
D.desc = "Autonomous Power Loader Unit. Its armour is enhanced with some goliath hide plates."
- if(damage_absorption["brute"] == 0.3)
- D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-full-open")
- D.desc = "Autonomous Power Loader Unit. It's wearing a fearsome carapace entirely composed of goliath hide plates - the pilot must be an experienced monster hunter."
- else
- to_chat(user, "You can't improve [D] any further!")
- return
+ use(1)
+ else
+ to_chat(user, "You can't improve [D] any further!")
/obj/item/stack/sheet/animalhide/ashdrake
name = "ash drake hide"
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index d18fc636794..89146cf9952 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -10,6 +10,7 @@
var/list/attack_verb_on = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
hitsound = 'sound/weapons/blade1.ogg' // Probably more appropriate than the previous hitsound. -- Dave
usesound = 'sound/weapons/blade1.ogg'
+ max_integrity = 200
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
resistance_flags = FIRE_PROOF
toolspeed = 1
diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm
index 06345581381..a6c152dd5e3 100644
--- a/code/game/objects/items/weapons/paint.dm
+++ b/code/game/objects/items/weapons/paint.dm
@@ -9,7 +9,7 @@
materials = list(MAT_METAL=200)
w_class = WEIGHT_CLASS_NORMAL
resistance_flags = FLAMMABLE
- max_integrity = 50
+ max_integrity = 100
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(5,10,20,30,50,70)
volume = 70
diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm
index 84dc6934f1a..1bad335bb49 100644
--- a/code/game/objects/items/weapons/shards.dm
+++ b/code/game/objects/items/weapons/shards.dm
@@ -13,6 +13,7 @@
attack_verb = list("stabbed", "slashed", "sliced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
armor = list("melee" = 100, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100)
+ max_integrity = 40
resistance_flags = ACID_PROOF
sharp = TRUE
var/cooldown = 0
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 8582692cd39..5560f3b4306 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -8,6 +8,7 @@
righthand_file = 'icons/mob/inhands/equipment/belt_righthand.dmi'
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
+ max_integrity = 300
var/use_item_overlays = 0 // Do we have overlays for items held inside the belt?
/obj/item/storage/belt/update_icon()
diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm
index 7819c1c8b54..2375c42db65 100644
--- a/code/game/objects/items/weapons/tanks/watertank.dm
+++ b/code/game/objects/items/weapons/tanks/watertank.dm
@@ -9,6 +9,7 @@
slot_flags = SLOT_BACK
slowdown = 1
actions_types = list(/datum/action/item_action/toggle_mister)
+ max_integrity = 200
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
resistance_flags = FIRE_PROOF
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index be2a497c301..fdaea1eb183 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -182,6 +182,7 @@
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
usesound = 'sound/items/crowbar.ogg'
+ max_integrity = 200
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
resistance_flags = FIRE_PROOF
@@ -231,6 +232,7 @@
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
block_chance = 75
sharp_when_wielded = TRUE // only sharp when wielded
+ max_integrity = 200
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
resistance_flags = FIRE_PROOF
light_power = 2
@@ -340,6 +342,7 @@
sharp = TRUE
no_spin_thrown = TRUE
var/obj/item/grenade/explosive = null
+ max_integrity = 200
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
var/icon_prefix = "spearglass"
@@ -811,6 +814,7 @@
force_wielded = 15
attack_verb = list("attacked", "impaled", "pierced")
hitsound = 'sound/weapons/bladeslice.ogg'
+ max_integrity = 200
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
resistance_flags = FIRE_PROOF
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index 4f30d5808f0..735ae7dc608 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -9,6 +9,7 @@
throw_speed = 7
throw_range = 15
attack_verb = list("banned")
+ max_integrity = 200
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
resistance_flags = FIRE_PROOF
@@ -48,6 +49,7 @@
w_class = WEIGHT_CLASS_NORMAL
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
block_chance = 50
+ max_integrity = 200
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
resistance_flags = FIRE_PROOF
@@ -74,6 +76,7 @@
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
block_chance = 50
+ max_integrity = 200
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
resistance_flags = FIRE_PROOF
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 33c1fd2e674..797f0922565 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -1,6 +1,7 @@
/obj/structure
icon = 'icons/obj/structures.dmi'
pressure_resistance = 8
+ max_integrity = 300
var/climbable
var/mob/climber
var/broken = FALSE
diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm
index dfda018a744..58a26d2b0da 100644
--- a/code/game/objects/structures/barsign.dm
+++ b/code/game/objects/structures/barsign.dm
@@ -4,6 +4,8 @@
icon = 'icons/obj/barsigns.dmi'
icon_state = "empty"
req_access = list(access_bar)
+ max_integrity = 500
+ integrity_failure = 250
armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
var/list/barsigns=list()
var/list/hiddensigns
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index d69e2050aa5..44d430c590e 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -4,6 +4,8 @@
icon = 'icons/obj/closet.dmi'
icon_state = "closed"
density = 1
+ max_integrity = 200
+ integrity_failure = 50
armor = list("melee" = 20, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60)
var/icon_closed = "closed"
var/icon_opened = "open"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index 7a408fce06c..f10efc4858a 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -7,6 +7,7 @@
opened = 0
locked = 1
broken = 0
+ max_integrity = 250
armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
damage_deflection = 20
var/large = 1
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index e58d287ea57..56748357506 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -220,6 +220,7 @@
var/greenlight = "securecrateg"
var/sparks = "securecratesparks"
var/emag = "securecrateemag"
+ max_integrity = 500
armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
damage_deflection = 25
var/tamperproof = 0
@@ -529,6 +530,7 @@
icon_state = "largemetal"
icon_opened = "largemetalopen"
icon_closed = "largemetal"
+ integrity_failure = 0 //Makes the crate break when integrity reaches 0, instead of opening and becoming an invisible sprite.
/obj/structure/closet/crate/large/close()
. = ..()
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index 38378837d90..09a12a9171d 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -98,6 +98,8 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
anchored = TRUE
resistance_flags = ACID_PROOF
armor = list("melee" = 30, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100)
+ max_integrity = 200
+ integrity_failure = 50
var/health = 30
var/obj/item/occupant = null
var/destroyed = FALSE
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index c407596ab49..e7f6cce19df 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -10,6 +10,8 @@
icon_state = "extinguisher_closed"
anchored = 1
density = 0
+ max_integrity = 200
+ integrity_failure = 50
var/obj/item/extinguisher/has_extinguisher = null
var/extinguishertype
var/opened = 0
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 86d8e8fad45..113d1d12e7b 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -21,6 +21,7 @@
density = TRUE
opacity = TRUE
+ max_integrity = 100
canSmoothWith = list(
/turf/simulated/wall,
@@ -226,6 +227,7 @@
mineral = /obj/item/stack/sheet/mineral/diamond
walltype = /turf/simulated/wall/mineral/diamond
canSmoothWith = list(/obj/structure/falsewall/diamond, /turf/simulated/wall/mineral/diamond)
+ max_integrity = 800
/obj/structure/falsewall/plasma
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 4913be8ae77..71ea97cb92f 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -6,7 +6,7 @@
layer = BELOW_OBJ_LAYER
var/state = GIRDER_NORMAL
var/girderpasschance = 20 // percentage chance that a projectile passes through the girder.
- var/health = 200
+ max_integrity = 200
var/can_displace = TRUE //If the girder can be moved around by crowbarring it
var/metalUsed = 2 //used to determine amount returned in deconstruction
@@ -376,14 +376,14 @@
anchored = 0
state = GIRDER_DISPLACED
girderpasschance = 25
- health = 120
+ max_integrity = 120
/obj/structure/girder/reinforced
name = "reinforced girder"
icon_state = "reinforced"
state = GIRDER_REINF
girderpasschance = 0
- health = 350
+ max_integrity = 350
/obj/structure/girder/cult
name = "runed girder"
diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index 74d1e2ba8f0..9eb8f8b3184 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -8,6 +8,7 @@
desc = "The frame of a meat spike."
density = 1
anchored = 0
+ max_integrity = 200
/obj/structure/kitchenspike_frame/attackby(obj/item/I, mob/user, params)
add_fingerprint(user)
@@ -37,6 +38,7 @@
anchored = 1
buckle_lying = FALSE
can_buckle = TRUE
+ max_integrity = 250
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/structure/kitchenspike/attack_hand(mob/user)
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index ce0091fd26c..a5fdff392b4 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -6,6 +6,7 @@
density = FALSE
anchored = TRUE
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
+ max_integrity = 50
layer = LATTICE_LAYER //under pipes
plane = FLOOR_PLANE
var/number_of_rods = 1
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index f290ea49b7c..008cc43f24d 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -7,6 +7,7 @@
icon = 'icons/obj/doors/mineral_doors.dmi'
icon_state = "metal"
+ max_integrity = 200
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 50, "acid" = 50)
var/initial_state
var/state = 0 //closed, 1 == open
@@ -148,13 +149,13 @@
qdel(src)
/obj/structure/mineral_door/iron
- hardness = 3
+ max_integrity = 300
/obj/structure/mineral_door/silver
name = "silver door"
icon_state = "silver"
sheetType = /obj/item/stack/sheet/mineral/silver
- hardness = 3
+ max_integrity = 300
/obj/structure/mineral_door/gold
name = "gold door"
@@ -165,14 +166,14 @@
name = "uranium door"
icon_state = "uranium"
sheetType = /obj/item/stack/sheet/mineral/uranium
- hardness = 3
+ max_integrity = 300
light_range = 2
/obj/structure/mineral_door/sandstone
name = "sandstone door"
icon_state = "sandstone"
sheetType = /obj/item/stack/sheet/mineral/sandstone
- hardness = 0.5
+ max_integrity = 100
/obj/structure/mineral_door/transparent
opacity = 0
@@ -208,7 +209,7 @@
name = "diamond door"
icon_state = "diamond"
sheetType = /obj/item/stack/sheet/mineral/diamond
- hardness = 10
+ max_integrity = 1000
/obj/structure/mineral_door/wood
name = "wood door"
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index 421afc015dc..83da489a466 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -6,6 +6,8 @@
icon_state = "mirror"
density = 0
anchored = 1
+ max_integrity = 200
+ integrity_failure = 100
var/list/ui_users = list()
/obj/structure/mirror/New(turf/T, newdir = SOUTH, building = FALSE)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 2953744a824..1b73feef730 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -16,6 +16,7 @@
icon = 'icons/obj/stationobjs.dmi'
icon_state = "morgue1"
density = 1
+ max_integrity = 400
dir = EAST
var/obj/structure/m_tray/connected = null
var/list/status_descriptors = list(
@@ -184,6 +185,7 @@
var/obj/structure/morgue/connected = null
anchored = 1.0
pass_flags = LETPASSTHROW
+ max_integrity = 350
/obj/structure/m_tray/attack_hand(mob/user as mob)
diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm
index a32fd94b392..381b904d4ae 100644
--- a/code/game/objects/structures/noticeboard.dm
+++ b/code/game/objects/structures/noticeboard.dm
@@ -5,6 +5,7 @@
icon_state = "nboard00"
density = 0
anchored = 1
+ max_integrity = 150
var/notices = 0
/obj/structure/noticeboard/Initialize()
diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm
index 891c084f105..8d323fececb 100644
--- a/code/game/objects/structures/signs.dm
+++ b/code/game/objects/structures/signs.dm
@@ -4,6 +4,7 @@
opacity = 0
density = 0
layer = 3.5
+ max_integrity = 100
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
/obj/structure/sign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
@@ -66,6 +67,7 @@
/obj/structure/sign/double/map
name = "station map"
desc = "A framed picture of the station."
+ max_integrity = 500
/obj/structure/sign/double/map/left
icon_state = "map-left"
diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm
index a09e8e13f66..44a5cbc665b 100644
--- a/code/game/objects/structures/statues.dm
+++ b/code/game/objects/structures/statues.dm
@@ -5,6 +5,7 @@
icon_state = ""
density = 1
anchored = 0
+ max_integrity = 100
var/oreAmount = 5
var/material_drop_type = /obj/item/stack/sheet/metal
@@ -61,6 +62,7 @@
qdel(src)
/obj/structure/statue/uranium
+ max_integrity = 300
light_range = 2
material_drop_type = /obj/item/stack/sheet/mineral/uranium
var/last_event = 0
@@ -98,6 +100,7 @@
active = null
/obj/structure/statue/plasma
+ max_integrity = 200
material_drop_type = /obj/item/stack/sheet/mineral/plasma
desc = "This statue is suitably made from plasma."
@@ -145,6 +148,7 @@
PlasmaBurn()
/obj/structure/statue/gold
+ max_integrity = 300
material_drop_type = /obj/item/stack/sheet/mineral/gold
desc = "This is a highly valuable statue made from gold."
@@ -169,6 +173,7 @@
icon_state = "rd"
/obj/structure/statue/silver
+ max_integrity = 300
material_drop_type = /obj/item/stack/sheet/mineral/silver
desc = "This is a valuable statue made from silver."
@@ -193,6 +198,7 @@
icon_state = "medborg"
/obj/structure/statue/diamond
+ max_integrity = 1000
material_drop_type = /obj/item/stack/sheet/mineral/diamond
desc = "This is a very expensive diamond statue."
@@ -209,6 +215,7 @@
icon_state = "ai2"
/obj/structure/statue/bananium
+ max_integrity = 300
material_drop_type = /obj/item/stack/sheet/mineral/bananium
desc = "A bananium statue with a small engraving:'HOOOOOOONK'."
var/spam_flag = 0
@@ -237,6 +244,7 @@
spam_flag = 0
/obj/structure/statue/sandstone
+ max_integrity = 50
material_drop_type = /obj/item/stack/sheet/mineral/sandstone
/obj/structure/statue/sandstone/assistant
@@ -251,6 +259,7 @@
icon_state = "venus"
/obj/structure/statue/tranquillite
+ max_integrity = 300
material_drop_type = /obj/item/stack/sheet/mineral/tranquillite
desc = "..."
@@ -278,10 +287,10 @@
icon_state = "snowman"
anchored = TRUE
density = TRUE
+ max_integrity = 50
/obj/structure/snowman/built
desc = "Just like the ones you remember from childhood!"
- max_integrity = 50
/obj/structure/snowman/built/Destroy()
new /obj/item/reagent_containers/food/snacks/grown/carrot(drop_location())
diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm
index 83f62310ac4..f8c65089324 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm
@@ -5,7 +5,7 @@
desc = "It's a gruesome pile of thick, sticky resin shaped like a nest."
icon = 'icons/mob/alien.dmi'
icon_state = "nest"
- var/health = 100
+ max_integrity = 120
var/image/nest_overlay
comfort = 0
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index 08a4fb5f80a..0e9b7b3a6ae 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -8,6 +8,8 @@
buckle_lying = FALSE // you sit in a chair, not lay
anchored = TRUE
resistance_flags = NONE
+ max_integrity = 250
+ integrity_failure = 25
buckle_offset = 0
var/buildstacktype = /obj/item/stack/sheet/metal
var/buildstackamount = 1
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index ebe66d128a6..654fb23fdd6 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -482,7 +482,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
cancolor = TRUE
heat_resistance = 1600
armor = list("melee" = 80, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
- max_integrity = 50
+ max_integrity = 75
explosion_block = 1
damage_deflection = 11
glass_type = /obj/item/stack/sheet/rglass
@@ -554,7 +554,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
shardtype = /obj/item/shard/plasma
glass_type = /obj/item/stack/sheet/plasmaglass
heat_resistance = 32000
- max_integrity = 120
+ max_integrity = 200
explosion_block = 1
armor = list("melee" = 80, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 45, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
@@ -568,7 +568,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
shardtype = /obj/item/shard/plasma
glass_type = /obj/item/stack/sheet/plasmarglass
reinf = TRUE
- max_integrity = 160
+ max_integrity = 500
explosion_block = 2
armor = list("melee" = 80, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
damage_deflection = 21
@@ -603,7 +603,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
shardtype = /obj/item/shard/plasma
glass_type = /obj/item/stack/sheet/plasmaglass
heat_resistance = 32000
- max_integrity = 240
+ max_integrity = 300
smooth = SMOOTH_TRUE
canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced)
explosion_block = 1
@@ -618,7 +618,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
glass_type = /obj/item/stack/sheet/plasmarglass
smooth = SMOOTH_TRUE
reinf = TRUE
- max_integrity = 320
+ max_integrity = 1000
explosion_block = 2
armor = list("melee" = 80, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
@@ -632,7 +632,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
icon_state = "r_window"
smooth = SMOOTH_TRUE
canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced)
- max_integrity = 100
+ max_integrity = 150
reinf = TRUE
heat_resistance = 1600
armor = list("melee" = 80, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
@@ -658,7 +658,7 @@ obj/structure/window/full/reinforced/ice
desc = "A reinforced, air-locked pod window."
icon = 'icons/obj/smooth_structures/shuttle_window.dmi'
icon_state = "shuttle_window"
- max_integrity = 160
+ max_integrity = 150
reinf = TRUE
heat_resistance = 1600
explosion_block = 3
diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm
index bd304b93883..3e923f20790 100644
--- a/code/game/shuttle_engines.dm
+++ b/code/game/shuttle_engines.dm
@@ -2,6 +2,7 @@
name = "shuttle"
icon = 'icons/turf/shuttle.dmi'
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
+ max_integrity = 500
armor = list(melee = 100, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) //default + ignores melee
/obj/structure/shuttle/shuttleRotate(rotation)
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 03e1bb463dd..c2c74a8e9f0 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -1,5 +1,7 @@
/obj/item/clothing
name = "clothing"
+ max_integrity = 200
+ integrity_failure = 80
resistance_flags = FLAMMABLE
var/list/species_restricted = null //Only these species can wear this kit.
var/scan_reagents = 0 //Can the wearer see reagents while it's equipped?
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 2a31c978996..32b594b1387 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -4,6 +4,7 @@
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
icon_state = "hardsuit0-engineering"
item_state = "eng_helm"
+ max_integrity = 300
armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75)
var/basestate = "hardsuit"
allowed = list(/obj/item/flashlight)
@@ -87,6 +88,7 @@
desc = "A special space suit for environments that might pose hazards beyond just the vacuum of space. Provides more protection than a standard space suit."
icon_state = "hardsuit-engineering"
item_state = "eng_hardsuit"
+ max_integrity = 300
armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75)
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/t_scanner, /obj/item/rcd, /obj/item/rpd)
siemens_coefficient = 0
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index ec33d24625e..037e967f5ee 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -219,6 +219,7 @@
icon_state = "durathread"
item_state = "durathread"
strip_delay = 60
+ max_integrity = 200
resistance_flags = FLAMMABLE
armor = list("melee" = 20, "bullet" = 10, "laser" = 30, "energy" = 5, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 50)
diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
index 348fea9b23e..adee1f7d3c2 100644
--- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
@@ -10,6 +10,7 @@
lefthand_file = 'icons/goonstation/mob/inhands/items_lefthand.dmi'
righthand_file = 'icons/goonstation/mob/inhands/items_righthand.dmi'
materials = list(MAT_GLASS=500)
+ max_integrity = 20
resistance_flags = ACID_PROOF
/obj/item/reagent_containers/food/drinks/drinkingglass/attackby(obj/item/I, mob/user, params)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
index 4212653d891..274605e554b 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
@@ -8,6 +8,7 @@
icon = 'icons/obj/cooking_machines.dmi'
icon_state = "icecream_vat"
use_power = IDLE_POWER_USE
+ max_integrity = 300
idle_power_usage = 20
var/obj/item/reagent_containers/glass/beaker = null
var/useramount = 15 //Last used amount
diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm
index ee208359801..d39df221d8d 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm
@@ -53,6 +53,7 @@ var/list/ingredients_source = list(
icon_state = "icecream_vat"
density = 1
anchored = 0
+ max_integrity = 300
var/list/ingredients = list()
var/dispense_flavour = 1
var/obj/item/reagent_containers/glass/held_container
diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm
index ef1a10cd85f..5427ac9f2c9 100644
--- a/code/modules/hydroponics/beekeeping/beebox.dm
+++ b/code/modules/hydroponics/beekeeping/beebox.dm
@@ -37,7 +37,6 @@
icon_state = "beebox"
anchored = TRUE
density = TRUE
- max_integrity = 300
var/mob/living/simple_animal/hostile/poison/bees/queen/queen_bee = null
var/list/bees = list() //bees owned by the box, not those inside it
var/list/honeycombs = list()
diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm
index 983f1a20632..7d494803495 100644
--- a/code/modules/hydroponics/grown/misc.dm
+++ b/code/modules/hydroponics/grown/misc.dm
@@ -136,6 +136,7 @@
bitesize_mod = 2
tastes = list("cherry" = 1, "explosion" = 1)
volume = 125 //Gives enough room for the black powder at max potency
+ max_integrity = 40
wine_power = 0.8
/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/attack_self(mob/living/user)
diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm
index 70bd904bed2..90ee1d58e05 100644
--- a/code/modules/mining/abandonedcrates.dm
+++ b/code/modules/mining/abandonedcrates.dm
@@ -8,6 +8,7 @@
var/lastattempt = null
var/attempts = 10
var/codelen = 4
+ integrity_failure = 0 //no breaking open the crate
/obj/structure/closet/crate/secure/loot/New()
..()
diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm
index 35a1abed814..00e838bdf87 100644
--- a/code/modules/mining/equipment/marker_beacons.dm
+++ b/code/modules/mining/equipment/marker_beacons.dm
@@ -21,6 +21,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list(
icon = 'icons/obj/lighting.dmi'
icon_state = "marker"
armor = list("melee" = 50, "bullet" = 75, "laser" = 75, "energy" = 75, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 25, "acid" = 0)
+ max_integrity = 50
merge_type = /obj/item/stack/marker_beacon
max_amount = 100
var/picked_color = "random"
diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm
index 2b49121fe6f..0f7cd5cb2ef 100644
--- a/code/modules/mining/lavaland/ash_flora.dm
+++ b/code/modules/mining/lavaland/ash_flora.dm
@@ -150,6 +150,7 @@
icon_state = "mushroom_shavings"
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
+ max_integrity = 100
seed = /obj/item/seeds/lavaland/polypore
wine_power = 0.2
diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
index e55800ea184..5d2d684e1a7 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -102,7 +102,7 @@ I'm using this for Stat to give it a more nifty interface to work with
if(istype(src.loc, /obj/mecha))
var/obj/mecha/M = src.loc
stat("Exosuit Charge:", "[istype(M.cell) ? "[M.cell.charge] / [M.cell.maxcharge]" : "No cell detected"]")
- stat("Exosuit Integrity", "[!M.health ? "0" : "[(M.health / initial(M.health)) * 100]"]%")
+ stat("Exosuit Integrity", "[!M.obj_integrity ? "0" : "[(M.obj_integrity / M.max_integrity) * 100]"]%")
/mob/living/carbon/brain/can_safely_leave_loc()
return 0 //You're not supposed to be ethereal jaunting, brains
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm
index 957be60b2cd..b72ec90cf58 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm
@@ -139,7 +139,7 @@
icon = 'icons/effects/effects.dmi'
anchored = 1 // prevents people dragging it
density = 0 // prevents it blocking all movement
- health = 20 // two welders, or one laser shot (15 for the normal spider webs)
+ max_integrity = 20 // two welders, or one laser shot (15 for the normal spider webs)
icon_state = "stickyweb1"
var/creator_ckey = null
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm
index ea4753866c2..62832527293 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm
@@ -94,4 +94,4 @@
name = "thick web"
desc = "This web is so thick, most cannot see beyond it."
opacity = 1
- health = 40
\ No newline at end of file
+ max_integrity = 40
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/red.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/red.dm
index 91e70dd837d..3f16eb44837 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/red.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/red.dm
@@ -62,6 +62,6 @@
/obj/structure/spider/terrorweb/red
- health = 30
+ max_integrity = 30
name = "reinforced web"
desc = "This web is reinforced with extra strands, for added strength."
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm
index 7e90867e783..4bba74001fd 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm
@@ -9,7 +9,7 @@
icon_state = "spiderling"
anchored = 0
layer = 2.75
- health = 3
+ max_integrity = 3
var/stillborn = FALSE
var/spider_myqueen = null
var/spider_mymother = null
@@ -39,10 +39,10 @@
. = ..()
-/obj/structure/spider/spiderling/terror_spiderling/die()
+/obj/structure/spider/spiderling/terror_spiderling/Destroy()
for(var/obj/structure/spider/spiderling/terror_spiderling/S in view(7, src))
S.immediate_ventcrawl = TRUE
- . = ..()
+ return ..()
/obj/structure/spider/spiderling/terror_spiderling/proc/score_surroundings(atom/A = src)
var/safety_score = 0
@@ -163,7 +163,7 @@
if(stillborn)
if(amount_grown >= 300)
// Fake spiderlings stick around for awhile, just to be spooky.
- die()
+ qdel(src)
else
if(!grow_as)
grow_as = pick(/mob/living/simple_animal/hostile/poison/terror_spider/red, /mob/living/simple_animal/hostile/poison/terror_spider/gray, /mob/living/simple_animal/hostile/poison/terror_spider/green)
diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm
index 36c4409fb34..61e26ed9899 100644
--- a/code/modules/modular_computers/computers/machinery/modular_computer.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm
@@ -28,9 +28,6 @@ var/list/global_modular_computers = list()
var/base_active_power_usage = 100 // Power usage when the computer is open (screen is active) and can be interacted with. Remember hardware can use power too.
var/base_idle_power_usage = 10 // Power usage when the computer is idle and screen is off (currently only applies to laptops)
- integrity_failure = 150
- max_integrity = 300
-
var/obj/item/modular_computer/processor/cpu = null // CPU that handles most logic while this type only handles power and other specific things.
/obj/machinery/modular_computer/New()
diff --git a/code/modules/modular_computers/computers/machinery/modular_console.dm b/code/modules/modular_computers/computers/machinery/modular_console.dm
index ec19bbe4136..aeb4c18bc2d 100644
--- a/code/modules/modular_computers/computers/machinery/modular_console.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_console.dm
@@ -15,7 +15,6 @@
max_hardware_size = 4
steel_sheet_cost = 10
light_strength = 2
- obj_integrity = 300
max_integrity = 300
integrity_failure = 150
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index aefc3b5daa4..f1487e2e7d2 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -11,6 +11,8 @@
idle_power_usage = 30
active_power_usage = 200
power_channel = EQUIP
+ max_integrity = 300
+ integrity_failure = 100
var/emag_cooldown
atom_say_verb = "bleeps"
var/obj/item/copyitem = null //what's in the copier!
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 1df1e742e40..54ef828936f 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -47,6 +47,8 @@
desc = "A control terminal for the area electrical systems."
icon_state = "apc0"
use_power = NO_POWER_USE
+ max_integrity = 200
+ integrity_failure = 50
resistance_flags = FIRE_PROOF
req_access = list(access_engine_equip)
siemens_strength = 1
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index b5611fbfc30..d02263d8ed8 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -16,6 +16,7 @@
icon_state = "tube-construct-stage1"
anchored = 1
layer = 5
+ max_integrity = 200
armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
var/stage = 1
var/fixture_type = "tube"
@@ -144,6 +145,7 @@
desc = "A lighting fixture."
anchored = 1
layer = 5 // They were appearing under mobs which is a little weird - Ostaf
+ max_integrity = 100
use_power = ACTIVE_POWER_USE
idle_power_usage = 2
active_power_usage = 20
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 5d32b1b73fb..45fa6fa06cd 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -9,6 +9,8 @@ var/global/list/rad_collectors = list()
density = 1
req_access = list(access_engine_equip)
// use_power = NO_POWER_USE
+ max_integrity = 350
+ integrity_failure = 80
var/obj/item/tank/plasma/P = null
var/last_power = 0
var/active = 0
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index 961ce769d65..d6711be53e1 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -27,6 +27,8 @@ field_generator power level display
anchored = 0
density = 1
use_power = NO_POWER_USE
+ max_integrity = 500
+ //100% immune to lasers and energy projectiles since it absorbs their energy.
armor = list("melee" = 25, "bullet" = 10, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
var/const/num_power_levels = 6 // Total number of power level icon has
var/power_level = 0
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index a791c25f472..5c07f662baa 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -62,6 +62,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
icon_state = "none"
anchored = 0
density = 1
+ max_integrity = 500
armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 80)
var/obj/machinery/particle_accelerator/control_box/master = null
var/construction_state = 0
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index bf6d2911498..95f5e07e677 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -10,6 +10,8 @@
use_power = NO_POWER_USE
idle_power_usage = 0
active_power_usage = 0
+ max_integrity = 150
+ integrity_failure = 50
var/id = 0
var/health = 10
var/obscured = 0
@@ -49,7 +51,8 @@
S.anchored = 1
S.loc = src
if(S.glass_type == /obj/item/stack/sheet/rglass) //if the panel is in reinforced glass
- health *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to
+ max_integrity *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to
+ obj_integrity = max_integrity
update_icon()
@@ -263,6 +266,8 @@
density = 1
use_power = IDLE_POWER_USE
idle_power_usage = 250
+ max_integrity = 200
+ integrity_failure = 100
var/icon_screen = "solar"
var/icon_keyboard = "power_key"
var/id = 0
diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm
index 3d0efa7ea9b..5706eb6d3da 100644
--- a/code/modules/power/tracker.dm
+++ b/code/modules/power/tracker.dm
@@ -10,6 +10,8 @@
icon_state = "tracker"
density = TRUE
use_power = NO_POWER_USE
+ max_integrity = 250
+ integrity_failure = 50
var/id = 0
var/sun_angle = 0 // sun angle as set by sun datum
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 7d0d23120f0..db7a38d88e7 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -7,7 +7,7 @@
anchored = 0
pressure_resistance = 2*ONE_ATMOSPHERE
container_type = DRAINABLE | AMOUNT_VISIBLE
-
+ max_integrity = 300
var/tank_volume = 1000 //In units, how much the dispenser can hold
var/reagent_id = "water" //The ID of the reagent that the dispenser uses
var/lastrigger = "" // The last person to rig this fuel tank - Stored with the object. Only the last person matter for investigation
diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm
index 09fd3dcdba3..0c1c775c1f9 100644
--- a/code/modules/recycling/disposal-construction.dm
+++ b/code/modules/recycling/disposal-construction.dm
@@ -11,6 +11,7 @@
density = 0
pressure_resistance = 5*ONE_ATMOSPHERE
level = 2
+ max_integrity = 200
var/ptype = PIPE_DISPOSALS_STRAIGHT //Use the defines
var/base_state
var/dpdir = 0 // directions as disposalpipe
@@ -187,7 +188,7 @@
update()
return
-
+
if(ptype in list(PIPE_DISPOSALS_BIN, PIPE_DISPOSALS_OUTLET, PIPE_DISPOSALS_CHUTE)) // Disposal or outlet
var/obj/structure/disposalpipe/trunk/CP = locate() in T
if(!CP) // There's no trunk
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 5fb6ea54b4e..b10ffc106e4 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -16,6 +16,7 @@
density = 1
on_blueprints = TRUE
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
+ max_integrity = 200
resistance_flags = FIRE_PROOF
var/datum/gas_mixture/air_contents // internal reservoir
var/mode = 1 // item mode 0=off 1=charging 2=charged
@@ -686,6 +687,7 @@
var/dpdir = 0 // bitmask of pipe directions
dir = 0 // dir will contain dominant direction for junction pipes
var/health = 10 // health points 0-10
+ max_integrity = 200
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
damage_deflection = 10
layer = DISPOSAL_PIPE_LAYER // slightly lower than wires and other pipes
diff --git a/code/modules/vehicle/atv.dm b/code/modules/vehicle/atv.dm
index 7e0dc88fb23..39d3e7e4612 100644
--- a/code/modules/vehicle/atv.dm
+++ b/code/modules/vehicle/atv.dm
@@ -3,8 +3,10 @@
desc = "An all-terrain vehicle built for traversing rough terrain with ease. One of the few old-earth technologies that are still relevant on most planet-bound outposts."
icon = 'icons/vehicles/4wheeler.dmi'
icon_state = "atv"
+ max_integrity = 150
armor = list("melee" = 50, "bullet" = 25, "laser" = 20, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
key_type = /obj/item/key
+ integrity_failure = 70
generic_pixel_x = 0
generic_pixel_y = 4
vehicle_move_delay = 1
diff --git a/code/modules/vehicle/secway.dm b/code/modules/vehicle/secway.dm
index 76748e81a93..48821a6e630 100644
--- a/code/modules/vehicle/secway.dm
+++ b/code/modules/vehicle/secway.dm
@@ -2,8 +2,10 @@
name = "secway"
desc = "A brave security cyborg gave its life to help you look like a complete tool."
icon_state = "secway"
+ max_integrity = 100
armor = list("melee" = 20, "bullet" = 15, "laser" = 10, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
key_type = /obj/item/key/security
+ integrity_failure = 50
generic_pixel_x = 0
generic_pixel_y = 4
vehicle_move_delay = 1
diff --git a/code/modules/vehicle/vehicle.dm b/code/modules/vehicle/vehicle.dm
index 15ec4019537..cbaa3dc56e5 100644
--- a/code/modules/vehicle/vehicle.dm
+++ b/code/modules/vehicle/vehicle.dm
@@ -8,6 +8,7 @@
anchored = 0
can_buckle = TRUE
buckle_lying = FALSE
+ max_integrity = 300
armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
var/key_type
var/held_key_type //Similar to above, but the vehicle needs the key in hands as opposed to inserted into the ignition
@@ -39,6 +40,16 @@
. += "Put a key inside it by clicking it with the key."
else
. += "Alt-click [src] to remove the key."
+ if(resistance_flags & ON_FIRE)
+ . += "It's on fire!"
+ var/healthpercent = obj_integrity/max_integrity * 100
+ switch(healthpercent)
+ if(50 to 99)
+ . += "It looks slightly damaged."
+ if(25 to 50)
+ . += "It appears heavily damaged."
+ if(0 to 25)
+ . += "It's falling apart!"
/obj/vehicle/attackby(obj/item/I, mob/user, params)
if(key_type && !is_key(inserted_key) && is_key(I))