diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm index 41d298fffb1..be40fb0f2ab 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm @@ -968,7 +968,7 @@ /turf/simulated/floor/mineral/bananium/lubed, /area/ruin/powered/clownplanet) "bD" = ( -/obj/effect/decal/mecha_wreckage/honker, +/obj/structure/mecha_wreckage/honker, /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 diff --git a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm index ae055f8bc63..2a5c0eae533 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm @@ -91,7 +91,7 @@ }, /area/ruin/powered) "s" = ( -/obj/effect/decal/mecha_wreckage/phazon, +/obj/structure/mecha_wreckage/phazon, /turf/simulated/shuttle/floor{ tag = "icon-floor2"; icon_state = "floor2" @@ -104,14 +104,14 @@ }, /area/ruin/powered) "u" = ( -/obj/effect/decal/mecha_wreckage/ripley/firefighter, +/obj/structure/mecha_wreckage/ripley/firefighter, /turf/simulated/shuttle/floor{ tag = "icon-floor2"; icon_state = "floor2" }, /area/ruin/powered) "v" = ( -/obj/effect/decal/mecha_wreckage/ripley, +/obj/structure/mecha_wreckage/ripley, /turf/simulated/shuttle/floor{ tag = "icon-floor2"; icon_state = "floor2" @@ -150,7 +150,7 @@ }, /area/ruin/powered) "A" = ( -/obj/effect/decal/mecha_wreckage/durand, +/obj/structure/mecha_wreckage/durand, /turf/simulated/shuttle/floor{ tag = "icon-floor2"; icon_state = "floor2" @@ -194,7 +194,7 @@ /turf/simulated/floor/plating/airless, /area/ruin/powered) "J" = ( -/obj/effect/decal/mecha_wreckage/odysseus, +/obj/structure/mecha_wreckage/odysseus, /turf/simulated/shuttle/floor{ tag = "icon-floor2"; icon_state = "floor2" @@ -205,7 +205,7 @@ /turf/space, /area/space/nearstation) "L" = ( -/obj/effect/decal/mecha_wreckage/gygax, +/obj/structure/mecha_wreckage/gygax, /turf/simulated/shuttle/floor{ tag = "icon-floor3"; icon_state = "floor3" diff --git a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm index 77e09164224..af52a542c18 100644 --- a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm +++ b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm @@ -3156,7 +3156,7 @@ }, /area/awaymission/BMPship/Aft) "ia" = ( -/obj/effect/decal/mecha_wreckage/ripley, +/obj/structure/mecha_wreckage/ripley, /turf/simulated/floor/plating/airless, /area/awaymission) "ib" = ( diff --git a/_maps/map_files/RandomZLevels/centcomAway.dmm b/_maps/map_files/RandomZLevels/centcomAway.dmm index e64c25da157..27ddb6f8a93 100644 --- a/_maps/map_files/RandomZLevels/centcomAway.dmm +++ b/_maps/map_files/RandomZLevels/centcomAway.dmm @@ -3483,7 +3483,7 @@ }, /area/awaymission/centcomAway/general) "iP" = ( -/obj/effect/decal/mecha_wreckage/ripley, +/obj/structure/mecha_wreckage/ripley, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -4924,7 +4924,7 @@ }, /area/awaymission/centcomAway/general) "lW" = ( -/obj/effect/decal/mecha_wreckage/seraph, +/obj/structure/mecha_wreckage/seraph, /turf/simulated/floor/plasteel{ tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index ffb4f0fbc7f..684365ada39 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -9138,7 +9138,7 @@ }, /area/admin) "vH" = ( -/obj/effect/decal/mecha_wreckage/phazon, +/obj/structure/mecha_wreckage/phazon, /turf/unsimulated/floor{ tag = "icon-floor"; icon_state = "floor" diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index 61c4eaf0dff..354f28a45b7 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -56,18 +56,6 @@ if(overmind) //we should have an overmind, but... overmind.update_health_hud() -/obj/structure/blob/core/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) - return - -/obj/structure/blob/core/update_icon() - cut_overlays() - color = null - var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") - if(overmind) - blob_overlay.color = overmind.blob_reagent_datum.color - add_overlay(blob_overlay) - add_overlay(mutable_appearance('icons/mob/blob.dmi', "blob_core_overlay")) - /obj/structure/blob/core/RegenHealth() return // Don't regen, we handle it in Life() diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index d4164997184..7d21bcc7946 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -20,9 +20,6 @@ var/image/C = new('icons/mob/blob.dmi', "blob_node_overlay") src.overlays += C -/obj/structure/blob/node/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) - return - /obj/structure/blob/node/Destroy() blob_nodes -= src STOP_PROCESSING(SSobj, src) @@ -36,13 +33,4 @@ for(var/i = 1; i < 8; i += i) Pulse(5, i, color) obj_integrity = min(max_integrity, obj_integrity + 1) - color = null - -/obj/structure/blob/node/update_icon() - cut_overlays() - color = null - var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") - if(overmind) - blob_overlay.color = overmind.blob_reagent_datum.color - add_overlay(blob_overlay) - add_overlay(mutable_appearance('icons/mob/blob.dmi', "blob_node_overlay")) \ No newline at end of file + color = null \ No newline at end of file diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/game/gamemodes/blob/blobs/shield.dm index c5a7f241d49..d35aaccea37 100644 --- a/code/game/gamemodes/blob/blobs/shield.dm +++ b/code/game/gamemodes/blob/blobs/shield.dm @@ -1,7 +1,7 @@ /obj/structure/blob/shield name = "strong blob" icon = 'icons/mob/blob.dmi' - icon_state = "blob_idle" + icon_state = "blob_shield" desc = "Some blob creature thingy" max_integrity = 150 brute_resist = 0.25 @@ -26,9 +26,6 @@ atmosblock = TRUE air_update_turf(1) -/obj/structure/blob/shield/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) - return - /obj/structure/blob/shield/CanPass(atom/movable/mover, turf/target, height=0) if(istype(mover) && mover.checkpass(PASSBLOB)) return 1 return 0 @@ -36,7 +33,7 @@ /obj/structure/blob/shield/reflective name = "reflective blob" desc = "A solid wall of slightly twitching tendrils with a reflective glow." - icon_state = "blob_idle_glow" + icon_state = "blob_glow" max_integrity = 100 brute_resist = 0.5 explosion_block = 2 diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 34db0a40478..37251cabbf2 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -53,12 +53,6 @@ var/atom/movable/mover = caller . = . || mover.checkpass(PASSBLOB) -/obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind. - if(overmind) - add_atom_colour(overmind.blob_reagent_datum.color, FIXED_COLOUR_PRIORITY) - else - remove_atom_colour(FIXED_COLOUR_PRIORITY) - /obj/structure/blob/process() Life() return diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 735a423a230..7e0508ba24f 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -234,8 +234,8 @@ return ..() /obj/machinery/camera/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - if(!(stat & BROKEN)) - return 0 + if(stat & BROKEN) + return damage_amount . = ..() /obj/machinery/camera/obj_break(damage_flag) diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 008dc26f834..e9cf036d3ca 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -69,6 +69,7 @@ if(occupant.health >= 0 && occupant.stat == DEAD) occupant.update_revive() occupant.lying = 0 + update_icon() sleep(10) active = 0 add_fingerprint(usr) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index a56d5c40236..28f847d81eb 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -8,18 +8,17 @@ light_color = "#00FF00" var/prize = /obj/item/stack/tickets -/obj/machinery/computer/arcade/power_change() - ..() - if(!(stat & (BROKEN|NOPOWER))) - set_light(2) - else - set_light(0) +/obj/machinery/computer/arcade/proc/Reset() + return /obj/machinery/computer/arcade/New() ..() - var/choice = pick(subtypesof(/obj/machinery/computer/arcade)) - new choice(loc) - qdel(src) + if(!circuit) + var/choice = pick(subtypesof(/obj/machinery/computer/arcade)) + new choice(loc) + qdel(src) + return + Reset() /obj/machinery/computer/arcade/proc/prizevend(var/score) @@ -65,7 +64,7 @@ var/blocked = 0 //Player cannot attack/heal while set var/turtle = 0 -/obj/machinery/computer/arcade/battle/New() +/obj/machinery/computer/arcade/battle/Reset() var/name_action var/name_part1 var/name_part2 @@ -166,7 +165,7 @@ turtle = 0 if(emagged) - New() + Reset() emagged = 0 add_fingerprint(usr) @@ -186,7 +185,7 @@ new /obj/item/clothing/head/collectable/petehat(get_turf(src)) message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.") - New() + Reset() emagged = 0 else feedback_inc("arcade_win_normal") @@ -311,7 +310,7 @@ var/spaceport_freebie = 0 var/last_spaceport_action = "" -/obj/machinery/computer/arcade/orion_trail/New() +/obj/machinery/computer/arcade/orion_trail/Reset() // Sets up the main trail stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime") stopblurbs = list( diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index ab75682aeb3..9e8bc08f9b2 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -453,6 +453,7 @@ to_chat(user, "You wrench the frame into place.") anchored = 1 state = 1 + return if(istype(P, /obj/item/weldingtool)) var/obj/item/weldingtool/WT = P if(!WT.remove_fuel(0, user)) @@ -463,7 +464,7 @@ if(!src || !WT.isOn()) return to_chat(user, "You deconstruct the frame.") deconstruct(TRUE) - return + return if(1) if(istype(P, /obj/item/wrench)) playsound(loc, P.usesound, 50, 1) @@ -471,6 +472,7 @@ to_chat(user, "You unfasten the frame.") anchored = 0 state = 0 + return if(istype(P, /obj/item/circuitboard) && !circuit) var/obj/item/circuitboard/B = P if(B.board_type == "computer") @@ -482,11 +484,13 @@ P.loc = src else to_chat(user, "This frame does not accept circuit boards of this type!") + return if(istype(P, /obj/item/screwdriver) && circuit) playsound(loc, P.usesound, 50, 1) to_chat(user, "You screw the circuit board into place.") state = 2 icon_state = "2" + return if(istype(P, /obj/item/crowbar) && circuit) playsound(loc, P.usesound, 50, 1) to_chat(user, "You remove the circuit board.") @@ -494,13 +498,14 @@ icon_state = "0" circuit.loc = loc circuit = null - return + return if(2) if(istype(P, /obj/item/screwdriver) && circuit) playsound(loc, P.usesound, 50, 1) to_chat(user, "You unfasten the circuit board.") state = 1 icon_state = "1" + return if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = P if(C.amount >= 5) @@ -516,7 +521,7 @@ return else to_chat(user, "You need five lengths of cable to wire the frame.") - return + return if(3) if(istype(P, /obj/item/wirecutters)) playsound(loc, P.usesound, 50, 1) @@ -525,7 +530,7 @@ icon_state = "2" var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc ) A.amount = 5 - + return if(istype(P, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/G = P if(G.amount >= 2) @@ -541,7 +546,7 @@ return else to_chat(user, "You need two sheets of glass for this.") - return + return if(4) if(istype(P, /obj/item/crowbar)) playsound(loc, P.usesound, 50, 1) @@ -549,6 +554,7 @@ state = 3 icon_state = "3" new /obj/item/stack/sheet/glass(loc, 2) + return if(istype(P, /obj/item/screwdriver)) playsound(loc, P.usesound, 50, 1) to_chat(user, "You connect the monitor.") @@ -562,8 +568,9 @@ var/obj/item/circuitboard/supplycomp/C = circuit SC.can_order_contraband = C.contraband_enabled qdel(src) - return - return ..() + return + if(user.a_intent == INTENT_HARM) + return ..() diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 57a77ecad2e..2d082afb9c2 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -19,7 +19,7 @@ /obj/machinery/constructable_frame/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) new /obj/item/stack/sheet/metal(loc, 5) - if(state >= 3) + if(state >= 2) var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil(loc) A.amount = 5 if(circuit) @@ -88,13 +88,13 @@ return else to_chat(user, "You need five lengths of cable to wire the frame.") - return + return if(istype(P, /obj/item/wrench)) playsound(src.loc, P.usesound, 75, 1) to_chat(user, "You dismantle the frame.") deconstruct(TRUE) - return + return if(2) if(istype(P, /obj/item/circuitboard)) var/obj/item/circuitboard/B = P @@ -121,8 +121,6 @@ var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil(src.loc,5) A.amount = 5 return - return - if(3) if(istype(P, /obj/item/crowbar)) playsound(src.loc, P.usesound, 50, 1) @@ -213,8 +211,10 @@ if(!success) to_chat(user, "You cannot add that to the machine!") return 0 - return - return ..() + return + if(user.a_intent == INTENT_HARM) + return ..() + //Machine Frame Circuit Boards /*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit, diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index a30f50a69d0..52b3b122c18 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -11,7 +11,7 @@ max_temperature = 30000 infra_luminosity = 8 force = 40 - wreckage = /obj/effect/decal/mecha_wreckage/durand + wreckage = /obj/structure/mecha_wreckage/durand /obj/mecha/combat/durand/GrantActions(mob/living/user, human_occupant = 0) ..() @@ -41,4 +41,4 @@ max_temperature = 30000 infra_luminosity = 8 force = 40 - wreckage = /obj/effect/decal/mecha_wreckage/durand/old \ No newline at end of file + wreckage = /obj/structure/mecha_wreckage/durand/old \ No newline at end of file diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 4a26149ec2f..b47693f1dcb 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -11,7 +11,7 @@ max_temperature = 25000 infra_luminosity = 6 leg_overload_coeff = 2 - wreckage = /obj/effect/decal/mecha_wreckage/gygax + wreckage = /obj/structure/mecha_wreckage/gygax internal_damage_threshold = 35 max_equip = 3 maxsize = 2 @@ -44,7 +44,7 @@ max_temperature = 35000 leg_overload_coeff = 100 operation_req_access = list(access_syndicate) - wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark + wreckage = /obj/structure/mecha_wreckage/gygax/dark max_equip = 4 maxsize = 2 starting_voice = /obj/item/mecha_modkit/voice/syndicate diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index a9f72b2a67f..35df97e3bea 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -11,7 +11,7 @@ max_temperature = 25000 infra_luminosity = 5 operation_req_access = list(access_clown) - wreckage = /obj/effect/decal/mecha_wreckage/honker + wreckage = /obj/structure/mecha_wreckage/honker add_req_access = 0 max_equip = 3 starting_voice = /obj/item/mecha_modkit/voice/honk diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 2347813b2ce..4b17b172c55 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -11,7 +11,7 @@ resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF infra_luminosity = 3 operation_req_access = list(access_cent_specops) - wreckage = /obj/effect/decal/mecha_wreckage/marauder + wreckage = /obj/structure/mecha_wreckage/marauder add_req_access = 0 internal_damage_threshold = 25 force = 45 @@ -52,7 +52,7 @@ operation_req_access = list(access_cent_commander) step_in = 3 max_integrity = 550 - wreckage = /obj/effect/decal/mecha_wreckage/seraph + wreckage = /obj/structure/mecha_wreckage/seraph internal_damage_threshold = 20 force = 80 max_equip = 8 @@ -89,7 +89,7 @@ icon_state = "mauler" initial_icon = "mauler" operation_req_access = list(access_syndicate) - wreckage = /obj/effect/decal/mecha_wreckage/mauler + wreckage = /obj/structure/mecha_wreckage/mauler starting_voice = /obj/item/mecha_modkit/voice/syndicate /obj/mecha/combat/marauder/mauler/loaded/New() diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 0350f73985d..be166c3b8f3 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -12,7 +12,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 - wreckage = /obj/effect/decal/mecha_wreckage/phazon + wreckage = /obj/structure/mecha_wreckage/phazon add_req_access = 1 //operation_req_access = list() internal_damage_threshold = 25 diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm index 2e86a2ab35e..35fb7dff7f8 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -9,7 +9,7 @@ deflect_chance = 30 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 + wreckage = /obj/structure/mecha_wreckage/reticence operation_req_access = list(access_mime) add_req_access = 0 internal_damage_threshold = 60 diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index ae2bf716018..f61a1383309 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -40,10 +40,9 @@ if(isliving(target)) drill_mob(target, chassis.occupant) playsound(src, 'sound/weapons/drill.ogg', 40, TRUE) - else if(istype(target, /obj)) + else if(isobj(target)) var/obj/O = target - //O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target)) - O.ex_act(2)//TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable + O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target)) playsound(src, 'sound/weapons/drill.ogg', 40, TRUE) else set_ready_state(TRUE) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index ffd90bed09c..6e86bbed7de 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -113,7 +113,6 @@ smoke_system.set_up(3, src) smoke_system.attach(src) add_cell() - START_PROCESSING(SSobj, src) GLOB.poi_list |= src log_message("[src] created.") @@ -602,24 +601,31 @@ if(occupant) occupant.ex_act(severity) +/obj/mecha/handle_atom_del(atom/A) + if(A == occupant) + occupant = null + icon_state = initial(icon_state)+"-open" + setDir(dir_in) /obj/mecha/Destroy() if(occupant) occupant.SetSleeping(destruction_sleep_duration) go_out() + var/mob/living/silicon/ai/AI for(var/mob/M in src) //Let's just be ultra sure if(isAI(M)) - M.gib() //AIs are loaded into the mech computer itself. When the mech dies, so does the AI. Forever. + occupant = null + AI = M //AIs are loaded into the mech computer itself. When the mech dies, so does the AI. They can be recovered with an AI card from the wreck. else M.forceMove(loc) - for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) E.detach(loc) qdel(E) equipment.Cut() QDEL_NULL(cell) QDEL_NULL(internal_tank) - + if(AI) + AI.gib() //No wreck, no AI to recover STOP_PROCESSING(SSobj, src) GLOB.poi_list.Remove(src) if(loc) @@ -638,7 +644,7 @@ /obj/mecha/emp_act(severity) if(get_charge()) use_power((cell.charge/3)/(severity*2)) - take_damage(50 / severity, "energy") + take_damage(30 / severity, BURN, "energy", 1) log_message("EMP detected", 1) check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL, MECHA_INT_CONTROL_LOST, MECHA_INT_SHORT_CIRCUIT), 1) @@ -646,7 +652,7 @@ ..() if(exposed_temperature > max_temperature) log_message("Exposed to dangerous temperature.", 1) - take_damage(5, "fire") + take_damage(5, BURN, 0, 1) check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL)) ////////////////////// @@ -1355,7 +1361,7 @@ if(cabin_air && cabin_air.return_volume()>0) cabin_air.temperature = min(6000+T0C, cabin_air.return_temperature()+rand(10,15)) if(cabin_air.return_temperature() > max_temperature/2) - take_damage(4/round(max_temperature/cabin_air.return_temperature(),0.1),"fire") + take_damage(4/round(max_temperature/cabin_air.return_temperature(),0.1), BURN, 0, 0) if(internal_damage & MECHA_INT_TANK_BREACH) //remove some air from internal tank if(internal_tank) @@ -1444,7 +1450,7 @@ if(isAI(occupant)) AI = occupant occupant = null - var/obj/effect/decal/mecha_wreckage/WR = new wreckage(loc, AI) + var/obj/structure/mecha_wreckage/WR = new wreckage(loc, AI) for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) if(E.salvageable && prob(30)) WR.crowbar_salvage += E diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index ebda1140c4b..0e0ed85b727 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -3,230 +3,214 @@ /////////////////////////////////// -/obj/effect/decal/mecha_wreckage - name = "Exosuit wreckage" - desc = "Remains of some unfortunate mecha. Completely unrepairable." +/obj/structure/mecha_wreckage + name = "exosuit wreckage" + desc = "Remains of some unfortunate mecha. Completely unrepairable, but perhaps something can be salvaged." icon = 'icons/mecha/mecha.dmi' - density = 1 - anchored = 0 + density = TRUE + anchored = FALSE opacity = 0 - var/list/welder_salvage = list(/obj/item/stack/sheet/plasteel,/obj/item/stack/sheet/metal,/obj/item/stack/rods) - var/list/wirecutters_salvage = list(/obj/item/stack/cable_coil) - var/list/crowbar_salvage + var/list/welder_salvage = list(/obj/item/stack/sheet/plasteel, /obj/item/stack/sheet/metal, /obj/item/stack/rods) var/salvage_num = 5 + var/list/crowbar_salvage = list() + var/wires_removed = FALSE + var/mob/living/silicon/ai/AI //AIs to be salvaged + var/list/parts -/obj/effect/decal/mecha_wreckage/New() - ..() - crowbar_salvage = new - return - -/obj/effect/decal/mecha_wreckage/ex_act(severity) - if(severity < 2) - qdel(src) - -/obj/effect/decal/mecha_wreckage/bullet_act(obj/item/projectile/Proj) - return - - -/obj/effect/decal/mecha_wreckage/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/weldingtool)) - var/obj/item/weldingtool/WT = W - if(salvage_num <= 0) - user.visible_message("[user] begins to slice apart the now completely stripped [src].", "You begin to slice apart the [src].", "You hear the sound of a welder nearby.") - if(WT.remove_fuel(0,user) && do_after(user, 80 * WT.toolspeed, target = src)) - user.visible_message("The now-dilapidated [src] falls apart in a clatter.", "As you slice apart the final support structures, the [src] falls apart in a heap.", "You hear metal clanking to the floor.") - new /obj/item/stack/sheet/metal(src.loc) - var/obj/item/stack/rods/rods = new /obj/item/stack/rods(src.loc) - rods.amount = 2 - qdel(src) - else - if(isemptylist(welder_salvage)) - to_chat(user, "What's left on the [src] cannot be removed with a welder, besides the frame itself") - else if(WT.remove_fuel(0,user)) - var/type = prob(70)?pick(welder_salvage):null - if(type) - var/N = new type(get_turf(user)) - user.visible_message("[user] cuts [N] from [src]", "You cut [N] from [src]", "You hear a sound of welder nearby") - if(istype(N, /obj/item/mecha_parts/part)) - welder_salvage -= type - salvage_num-- - else - to_chat(user, "You failed to salvage anything valuable from [src].") - else - to_chat(user, "You need more welding fuel to complete this task.") - else if(istype(W, /obj/item/wirecutters)) - if(salvage_num <= 0) - to_chat(user, "You don't see anything that can be cut with [W].") - return - else if(!isemptylist(wirecutters_salvage)) - var/type = prob(70)?pick(wirecutters_salvage):null - if(type) - var/N = new type(get_turf(user)) - user.visible_message("[user] cuts [N] from [src].", "You cut [N] from [src].") - salvage_num-- - else - to_chat(user, "You failed to salvage anything valuable from [src].") - else if(istype(W, /obj/item/crowbar)) - if(!isemptylist(crowbar_salvage)) - var/obj/S = pick(crowbar_salvage) - if(S) - S.loc = get_turf(user) - crowbar_salvage -= S - user.visible_message("[user] pries [S] from [src].", "You pry [S] from [src].") - else - to_chat(user, "You don't see anything that can be pried with [W].") - else - return ..() - - -/obj/effect/decal/mecha_wreckage/gygax - name = "Gygax wreckage" - icon_state = "gygax-broken" - -/obj/effect/decal/mecha_wreckage/gygax/New() - ..() - var/list/parts = list(/obj/item/mecha_parts/part/gygax_torso, - /obj/item/mecha_parts/part/gygax_head, - /obj/item/mecha_parts/part/gygax_left_arm, - /obj/item/mecha_parts/part/gygax_right_arm, - /obj/item/mecha_parts/part/gygax_left_leg, - /obj/item/mecha_parts/part/gygax_right_leg) - for(var/i=0;i<2;i++) - if(!isemptylist(parts) && prob(40)) +/obj/structure/mecha_wreckage/Initialize(mapload, mob/living/silicon/ai/AI_pilot) + . = ..() + if(parts) + for(var/i in 1 to 2) + if(!parts.len) + break + if(prob(60)) + continue var/part = pick(parts) welder_salvage += part - parts -= part - return + parts = null + if(!AI_pilot) //Type-checking for this is already done in mecha/Destroy() + return + AI = AI_pilot + AI.apply_damage(150, BURN) //Give the AI a bit of damage from the "shock" of being suddenly shut down + AI.death() //The damage is not enough to kill the AI, but to be 'corrupted files' in need of repair. + AI.forceMove(src) //Put the dead AI inside the wreckage for recovery + add_overlay(mutable_appearance('icons/obj/projectiles.dmi', "green_laser")) //Overlay for the recovery beacon + AI.controlled_mech = null + AI.remote_control = null -/obj/effect/decal/mecha_wreckage/gygax/dark - name = "Dark Gygax wreckage" +/obj/structure/mecha_wreckage/Destroy() + QDEL_NULL(AI) + QDEL_LIST(crowbar_salvage) + return ..() + +/obj/structure/mecha_wreckage/examine(mob/user) + . = ..() + if(!AI) + return + . += "The AI recovery beacon is active." + +/obj/structure/mecha_wreckage/attackby(obj/item/I, mob/user, params) + if(iswelder(I)) + if(salvage_num <= 0 || !length(welder_salvage)) + to_chat(user, "You don't see anything that can be cut with [I]!") + return + var/obj/item/weldingtool/WT = I + playsound(get_turf(src), WT.usesound, 50, TRUE) + if(!WT.remove_fuel(0, user)) + return + if(prob(30)) + to_chat(user, "You fail to salvage anything valuable from [src]!") + return + var/type = pick(welder_salvage) + var/N = new type(get_turf(user)) + user.visible_message("[user] cuts [N] from [src].", "You cut [N] from [src].") + if(!istype(N, /obj/item/stack)) + welder_salvage -= type + salvage_num-- + return + + if(iswirecutter(I)) + if(wires_removed) + to_chat(user, "You don't see anything that can be cut with [I]!") + return + var/N = new /obj/item/stack/cable_coil(get_turf(user), rand(1, 3)) + user.visible_message("[user] cuts [N] from [src].", "You cut [N] from [src].") + wires_removed = TRUE + return + + if(iscrowbar(I)) + if(crowbar_salvage.len) + var/obj/S = pick(crowbar_salvage) + S.forceMove(user.drop_location()) + user.visible_message("[user] pries [S] from [src].", "You pry [S] from [src].") + crowbar_salvage -= S + return + to_chat(user, "You don't see anything that can be cut with [I]!") + return + return ..() + + +/obj/structure/mecha_wreckage/transfer_ai(interaction, mob/user, null, obj/item/aicard/card) + if(!..()) + return + + //Proc called on the wreck by the AI card. + if(interaction != AI_TRANS_TO_CARD) //AIs can only be transferred in one direction, from the wreck to the card. + return + if(!AI) //No AI in the wreck + to_chat(user, "No AI backups found.") + return + cut_overlays() //Remove the recovery beacon overlay + AI.forceMove(card) //Move the dead AI to the card. + if(AI.client) //AI player is still in the dead AI and is connected + to_chat(AI, "The remains of your file system have been recovered on a mobile storage device.") + else //Give the AI a heads-up that it is probably going to get fixed. + AI.notify_ghost_cloning("You have been recovered from the wreckage!", source = card) + to_chat(user, "Backup files recovered: [AI.name] ([rand(1000, 9999)].exe) salvaged from [name] and stored within local memory.") + AI = null + +/obj/structure/mecha_wreckage/gygax + name = "\improper Gygax wreckage" + icon_state = "gygax-broken" + parts = list( + /obj/item/mecha_parts/part/gygax_torso, + /obj/item/mecha_parts/part/gygax_head, + /obj/item/mecha_parts/part/gygax_left_arm, + /obj/item/mecha_parts/part/gygax_right_arm, + /obj/item/mecha_parts/part/gygax_left_leg, + /obj/item/mecha_parts/part/gygax_right_leg + ) + +/obj/structure/mecha_wreckage/gygax/dark + name = "\improper Dark Gygax wreckage" icon_state = "darkgygax-broken" -/obj/effect/decal/mecha_wreckage/marauder - name = "Marauder wreckage" +/obj/structure/mecha_wreckage/marauder + name = "\improper Marauder wreckage" icon_state = "marauder-broken" -/obj/effect/decal/mecha_wreckage/mauler - name = "Mauler wreckage" +/obj/structure/mecha_wreckage/mauler + name = "\improper Mauler wreckage" icon_state = "mauler-broken" desc = "The syndicate won't be very happy about this..." -/obj/effect/decal/mecha_wreckage/seraph - name = "Seraph wreckage" +/obj/structure/mecha_wreckage/seraph + name = "\improper Seraph wreckage" icon_state = "seraph-broken" -/obj/effect/decal/mecha_wreckage/reticence +/obj/structure/mecha_wreckage/reticence name = "\improper Reticence wreckage" - icon_state = "mime-broken" + icon_state = "reticence-broken" + color = "#87878715" + desc = "..." -/obj/effect/decal/mecha_wreckage/ripley - name = "Ripley wreckage" +/obj/structure/mecha_wreckage/ripley + name = "\improper Ripley wreckage" icon_state = "ripley-broken" + parts = list(/obj/item/mecha_parts/part/ripley_torso, + /obj/item/mecha_parts/part/ripley_left_arm, + /obj/item/mecha_parts/part/ripley_right_arm, + /obj/item/mecha_parts/part/ripley_left_leg, + /obj/item/mecha_parts/part/ripley_right_leg) -/obj/effect/decal/mecha_wreckage/ripley/New() - ..() - var/list/parts = list(/obj/item/mecha_parts/part/ripley_torso, - /obj/item/mecha_parts/part/ripley_left_arm, - /obj/item/mecha_parts/part/ripley_right_arm, - /obj/item/mecha_parts/part/ripley_left_leg, - /obj/item/mecha_parts/part/ripley_right_leg) - for(var/i=0;i<2;i++) - if(!isemptylist(parts) && prob(40)) - var/part = pick(parts) - welder_salvage += part - parts -= part - return +/obj/structure/mecha_wreckage/ripley/mkii + name = "\improper Ripley MK-II wreckage" + icon_state = "ripleymkii-broken" -/obj/effect/decal/mecha_wreckage/ripley/firefighter - name = "Firefighter wreckage" +/obj/structure/mecha_wreckage/ripley/firefighter + name = "\improper Firefighter wreckage" icon_state = "firefighter-broken" + parts = list(/obj/item/mecha_parts/part/ripley_torso, + /obj/item/mecha_parts/part/ripley_left_arm, + /obj/item/mecha_parts/part/ripley_right_arm, + /obj/item/mecha_parts/part/ripley_left_leg, + /obj/item/mecha_parts/part/ripley_right_leg, + /obj/item/clothing/suit/fire) -/obj/effect/decal/mecha_wreckage/ripley/firefighter/New() - ..() - var/list/parts = list(/obj/item/mecha_parts/part/ripley_torso, - /obj/item/mecha_parts/part/ripley_left_arm, - /obj/item/mecha_parts/part/ripley_right_arm, - /obj/item/mecha_parts/part/ripley_left_leg, - /obj/item/mecha_parts/part/ripley_right_leg, - /obj/item/clothing/suit/fire) - for(var/i=0;i<2;i++) - if(!isemptylist(parts) && prob(40)) - var/part = pick(parts) - welder_salvage += part - parts -= part - return - -/obj/effect/decal/mecha_wreckage/ripley/deathripley - name = "Death-Ripley wreckage" +/obj/structure/mecha_wreckage/ripley/deathripley + name = "\improper Death-Ripley wreckage" icon_state = "deathripley-broken" + parts = null -/obj/effect/decal/mecha_wreckage/honker - name = "Honker wreckage" +/obj/structure/mecha_wreckage/honker + name = "\improper H.O.N.K wreckage" icon_state = "honker-broken" + desc = "All is right in the universe." + parts = list( + /obj/item/mecha_parts/chassis/honker, + /obj/item/mecha_parts/part/honker_torso, + /obj/item/mecha_parts/part/honker_head, + /obj/item/mecha_parts/part/honker_left_arm, + /obj/item/mecha_parts/part/honker_right_arm, + /obj/item/mecha_parts/part/honker_left_leg, + /obj/item/mecha_parts/part/honker_right_leg) -/obj/effect/decal/mecha_wreckage/honker/New() - ..() - var/list/parts = list( - /obj/item/mecha_parts/chassis/honker, - /obj/item/mecha_parts/part/honker_torso, - /obj/item/mecha_parts/part/honker_head, - /obj/item/mecha_parts/part/honker_left_arm, - /obj/item/mecha_parts/part/honker_right_arm, - /obj/item/mecha_parts/part/honker_left_leg, - /obj/item/mecha_parts/part/honker_right_leg) - for(var/i=0;i<2;i++) - if(!isemptylist(parts) && prob(40)) - var/part = pick(parts) - welder_salvage += part - parts -= part - return - -/obj/effect/decal/mecha_wreckage/durand - name = "Durand wreckage" +/obj/structure/mecha_wreckage/durand + name = "\improper Durand wreckage" icon_state = "durand-broken" + parts = list( + /obj/item/mecha_parts/part/durand_torso, + /obj/item/mecha_parts/part/durand_head, + /obj/item/mecha_parts/part/durand_left_arm, + /obj/item/mecha_parts/part/durand_right_arm, + /obj/item/mecha_parts/part/durand_left_leg, + /obj/item/mecha_parts/part/durand_right_leg) -/obj/effect/decal/mecha_wreckage/durand/New() - ..() - var/list/parts = list( - /obj/item/mecha_parts/part/durand_torso, - /obj/item/mecha_parts/part/durand_head, - /obj/item/mecha_parts/part/durand_left_arm, - /obj/item/mecha_parts/part/durand_right_arm, - /obj/item/mecha_parts/part/durand_left_leg, - /obj/item/mecha_parts/part/durand_right_leg) - for(var/i=0;i<2;i++) - if(!isemptylist(parts) && prob(40)) - var/part = pick(parts) - welder_salvage += part - parts -= part - return - - -/obj/effect/decal/mecha_wreckage/durand/old - name = "Durand wreckage" +/obj/structure/mecha_wreckage/durand/old icon_state = "old_durand-broken" -/obj/effect/decal/mecha_wreckage/phazon - name = "Phazon wreckage" +/obj/structure/mecha_wreckage/phazon + name = "\improper Phazon wreckage" icon_state = "phazon-broken" -/obj/effect/decal/mecha_wreckage/odysseus - name = "Odysseus wreckage" +/obj/structure/mecha_wreckage/odysseus + name = "\improper Odysseus wreckage" icon_state = "odysseus-broken" - -/obj/effect/decal/mecha_wreckage/odysseus/New() - ..() - var/list/parts = list( - /obj/item/mecha_parts/part/odysseus_torso, - /obj/item/mecha_parts/part/odysseus_head, - /obj/item/mecha_parts/part/odysseus_left_arm, - /obj/item/mecha_parts/part/odysseus_right_arm, - /obj/item/mecha_parts/part/odysseus_left_leg, - /obj/item/mecha_parts/part/odysseus_right_leg) - for(var/i=0;i<2;i++) - if(!isemptylist(parts) && prob(40)) - var/part = pick(parts) - welder_salvage += part - parts -= part - return + parts = list( + /obj/item/mecha_parts/part/odysseus_torso, + /obj/item/mecha_parts/part/odysseus_head, + /obj/item/mecha_parts/part/odysseus_left_arm, + /obj/item/mecha_parts/part/odysseus_right_arm, + /obj/item/mecha_parts/part/odysseus_left_leg, + /obj/item/mecha_parts/part/odysseus_right_leg) \ No newline at end of file diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index ead74cfcc08..dcee2c1e74e 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -6,7 +6,7 @@ step_in = 3 max_temperature = 15000 max_integrity = 120 - wreckage = /obj/effect/decal/mecha_wreckage/odysseus + wreckage = /obj/structure/mecha_wreckage/odysseus internal_damage_threshold = 35 deflect_chance = 15 step_energy_drain = 6 diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 2f37642d78d..0e095f7ca12 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -12,7 +12,7 @@ deflect_chance = 15 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 + wreckage = /obj/structure/mecha_wreckage/ripley var/list/cargo = new var/cargo_capacity = 15 var/hides = 0 @@ -72,7 +72,7 @@ lights_power = 7 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 + wreckage = /obj/structure/mecha_wreckage/ripley/firefighter /obj/mecha/working/ripley/deathripley desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" @@ -86,7 +86,7 @@ max_integrity = 300 lights_power = 7 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 + wreckage = /obj/structure/mecha_wreckage/ripley/deathripley step_energy_drain = 0 normal_step_energy_drain = 0 diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 62ff1fb8281..deaf07cbe78 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -74,6 +74,7 @@ trigger_alarm() /obj/structure/displaycase/proc/trigger_alarm() + set waitfor = FALSE if(alert && is_station_contact(z)) var/area/alarmed = get_area(src) alarmed.burglaralert(src) diff --git a/code/game/objects/structures/door_assembly_types.dm b/code/game/objects/structures/door_assembly_types.dm index 2475e9e1b4d..2873686e4f4 100644 --- a/code/game/objects/structures/door_assembly_types.dm +++ b/code/game/objects/structures/door_assembly_types.dm @@ -150,7 +150,7 @@ else bound_width = world.icon_size bound_height = width * world.icon_size - update_icon() + ..() /obj/structure/door_assembly/multi_tile/Move() . = ..() 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 345bada5151..69eda1e4269 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm @@ -25,6 +25,7 @@ /obj/machinery/icemachine/New() + ..() create_reagents(500) /obj/machinery/icemachine/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/mob/living/simple_animal/bot/syndicate.dm b/code/modules/mob/living/simple_animal/bot/syndicate.dm index ae26bfee220..6aa15ba0270 100644 --- a/code/modules/mob/living/simple_animal/bot/syndicate.dm +++ b/code/modules/mob/living/simple_animal/bot/syndicate.dm @@ -167,7 +167,7 @@ visible_message("[src] blows apart!") do_sparks(3, 1, src) new /obj/effect/decal/cleanable/blood/oil(loc) - var/obj/effect/decal/mecha_wreckage/gygax/dark/wreck = new /obj/effect/decal/mecha_wreckage/gygax/dark(loc) + var/obj/structure/mecha_wreckage/gygax/dark/wreck = new /obj/structure/mecha_wreckage/gygax/dark(loc) wreck.name = "sentry bot wreckage" raise_alert("[src] destroyed.") diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 23b51fc899b..f24b990a608 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -673,8 +673,8 @@ to_chat(user, "Access denied.") /obj/machinery/power/apc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - if((!(stat & BROKEN) || malfai)) - return 0 + if(stat & BROKEN) + return damage_amount . = ..() /obj/machinery/power/apc/obj_break(damage_flag) diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index befb2a4931a..327c29cebda 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -38,6 +38,10 @@ else if(istype(A, /obj/singularity)) var/obj/singularity/S = A S.energy += energy + else if(istype(A, /obj/structure/blob)) + var/obj/structure/blob/B = A + B.take_damage(energy * 0.6) + movement_range = 0 /obj/effect/accelerated_particle/Crossed(atom/A, oldloc) if(isliving(A)) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 754479a69ca..7d7910b45d4 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -247,7 +247,7 @@ else if(closest_blob) continue - else if(istype(A, /obj/structure)) + else if(isstructure(A)) var/obj/structure/S = A var/dist = get_dist(source, A) if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !S.being_shocked) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index b10ffc106e4..8efd181ac1a 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -169,7 +169,7 @@ if(!user.drop_item()) return if(I) - I.loc = src + I.forceMove(src) to_chat(user, "You place \the [I] into the [src].") for(var/mob/M in viewers(src)) @@ -833,14 +833,14 @@ // will expel any holder inside at the time // then delete the pipe // remains : set to leave broken pipe pieces in place -/obj/structure/disposalpipe/proc/broken(var/remains = 0) +/obj/structure/disposalpipe/proc/broken(remains = 0) if(remains) for(var/D in cardinal) if(D & dpdir) var/obj/structure/disposalpipe/broken/P = new(src.loc) - P.dir = D + P.setDir(D) - src.invisibility = 101 // make invisible (since we won't delete the pipe immediately) + invisibility = 101 // make invisible (since we won't delete the pipe immediately) var/obj/structure/disposalholder/H = locate() in src if(H) // holder was present @@ -863,6 +863,18 @@ spawn(2) // delete pipe after 2 ticks to ensure expel proc finished qdel(src) +// pipe affected by explosion +/obj/structure/disposalpipe/ex_act(severity) + switch(severity) + if(1) + broken(0) + if(2) + health -= rand(5, 15) + healthcheck() + if(3) + health -= rand(0, 15) + healthcheck() + // test health for brokenness /obj/structure/disposalpipe/proc/healthcheck() if(health < -2) diff --git a/icons/mob/blob.dmi b/icons/mob/blob.dmi index 809c68bd59b..63633844b83 100644 Binary files a/icons/mob/blob.dmi and b/icons/mob/blob.dmi differ