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))