diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index b08b7ff7e43..23fe48b8871 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -1469,7 +1469,7 @@ "aCm" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk,/turf/open/floor/plating,/area/maintenance/disposal) "aCn" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/light,/turf/open/floor/plating,/area/maintenance/disposal) "aCo" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/door/poddoor{id = "crusherdoor"; layer = 3.1; name = "crusher safety blast door"},/turf/open/floor/plating,/area/maintenance/disposal) -"aCp" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/recycler/birdstation{emagged = 1; name = "dangerous old crusher"},/turf/open/floor/plating,/area/maintenance/disposal) +"aCp" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/recycler/deathtrap,/turf/open/floor/plating,/area/maintenance/disposal) "aCq" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/turf/open/floor/plating,/area/maintenance/disposal) "aCr" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal/deliveryChute{dir = 8},/turf/open/floor/plating,/area/maintenance/disposal) "aCs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall/r_wall,/area/maintenance/disposal) diff --git a/_maps/map_files/BirdStation/misc.dm b/_maps/map_files/BirdStation/misc.dm index b86c9247888..109392cfcde 100644 --- a/_maps/map_files/BirdStation/misc.dm +++ b/_maps/map_files/BirdStation/misc.dm @@ -1,38 +1,3 @@ - -// modified crusher -// only does 120 brute damage and won't eat the victims items - - -/obj/machinery/recycler/birdstation/eat(mob/living/L) - - L.loc = src.loc - - if(istype(L,/mob/living/silicon)) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - else - playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - - var/gib = 1 - if(istype(L,/mob/living/carbon)) - gib = 0 - add_blood(L) - - if(!blood && !istype(L,/mob/living/silicon)) - blood = 1 - update_icon() - L.Paralyse(5) - if(gib || emagged == 2) - L.gib() - else if(emagged == 1) - L.adjustBruteLoss(120) - -// we don't want anyone to dismantle or disable the crusher easily - -/obj/machinery/recycler/birdstation/attackby(obj/item/I, mob/user, params) - if (istype(I, /obj/item/weapon/wrench) || istype(I, /obj/item/weapon/screwdriver)) - return - - //special birdstation survival boxes /obj/item/weapon/storage/box/birdsurv/New() diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index a37a0e4d14e..319ce51d949 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -8,13 +8,15 @@ var/const/SAFETY_COOLDOWN = 100 layer = MOB_LAYER+1 // Overhead anchored = 1 density = 1 - var/safety_mode = 0 // Temporality stops the machine if it detects a mob - var/grinding = 0 + var/safety_mode = FALSE // Temporarily stops machine if it detects a mob var/icon_name = "grinder-o" var/blood = 0 var/eat_dir = WEST var/amount_produced = 1 var/datum/material_container/materials + var/crush_damage = 1000 + var/eat_victim_items = TRUE + var/item_recycle_sound = 'sound/items/Welder.ogg' /obj/machinery/recycler/New() ..() @@ -72,9 +74,9 @@ var/const/SAFETY_COOLDOWN = 100 /obj/machinery/recycler/emag_act(mob/user) if(!emagged) - emagged = 1 + emagged = TRUE if(safety_mode) - safety_mode = 0 + safety_mode = FALSE update_icon() playsound(src.loc, "sparks", 75, 1, -1) user << "You use the cryptographic sequencer on the [src.name]." @@ -83,7 +85,7 @@ var/const/SAFETY_COOLDOWN = 100 ..() var/is_powered = !(stat & (BROKEN|NOPOWER)) if(safety_mode) - is_powered = 0 + is_powered = FALSE icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end // This is purely for admin possession !FUN!. @@ -104,24 +106,34 @@ var/const/SAFETY_COOLDOWN = 100 var/move_dir = get_dir(loc, AM.loc) if(move_dir == eat_dir) + eat(AM) + +/obj/machinery/recycler/proc/eat(atom/AM0, sound=TRUE) + var/list/to_eat = list(AM0) + if(istype(AM0, /obj/item)) + to_eat += AM0.GetAllContents() + var/items_recycled = 0 + + for(var/i in to_eat) + var/atom/movable/AM = i if(isliving(AM)) if(emagged) - eat(AM) + crush_living(AM) else - stop(AM) + emergency_stop(AM) else if(istype(AM, /obj/item)) - recycle(AM) - else // Can't recycle + recycle_item(AM) + items_recycled++ + else playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) AM.loc = src.loc -/obj/machinery/recycler/proc/recycle(obj/item/I, sound = 1) - I.loc = src.loc - if(!istype(I)) - return + if(items_recycled && sound) + playsound(src.loc, item_recycle_sound, 50, 1) + +/obj/machinery/recycler/proc/recycle_item(obj/item/I) + I.loc = src.loc - if(sound) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) var/material_amount = materials.get_item_material_amount(I) if(!material_amount) qdel(I) @@ -131,18 +143,18 @@ var/const/SAFETY_COOLDOWN = 100 materials.retrieve_all() -/obj/machinery/recycler/proc/stop(mob/living/L) +/obj/machinery/recycler/proc/emergency_stop(mob/living/L) playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) - safety_mode = 1 + safety_mode = TRUE update_icon() L.loc = src.loc spawn(SAFETY_COOLDOWN) playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) - safety_mode = 0 + safety_mode = FALSE update_icon() -/obj/machinery/recycler/proc/eat(mob/living/L) +/obj/machinery/recycler/proc/crush_living(mob/living/L) L.loc = src.loc @@ -151,22 +163,23 @@ var/const/SAFETY_COOLDOWN = 100 else playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - var/gib = 1 + var/gib = TRUE // By default, the emagged recycler will gib all non-carbons. (human simple animal mobs don't count) if(iscarbon(L)) - gib = 0 + gib = FALSE if(L.stat == CONSCIOUS) L.say("ARRRRRRRRRRRGH!!!") add_blood(L) if(!blood && !issilicon(L)) - blood = 1 + blood = TRUE update_icon() - // Remove and recycle the equipped items. - for(var/obj/item/I in L.get_equipped_items()) - if(L.unEquip(I)) - recycle(I, 0) + // Remove and recycle the equipped items + if(eat_victim_items) + for(var/obj/item/I in L.get_equipped_items()) + if(L.unEquip(I)) + eat(I, sound=FALSE) // Instantly lie down, also go unconscious from the pain, before you die. L.Paralyse(5) @@ -175,9 +188,13 @@ var/const/SAFETY_COOLDOWN = 100 if(gib || emagged == 2) L.gib() else if(emagged == 1) - L.adjustBruteLoss(1000) - + L.adjustBruteLoss(crush_damage) +/obj/machinery/recycler/deathtrap + name = "dangerous old crusher" + emagged = TRUE + crush_damage = 120 + flags = NODECONSTRUCT /obj/item/weapon/paper/recycler name = "paper - 'garbage duty instructions'" diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm index b554a8a4547..6f5ba2a4d64 100644 --- a/code/modules/awaymissions/mission_code/Cabin.dm +++ b/code/modules/awaymissions/mission_code/Cabin.dm @@ -73,16 +73,16 @@ /obj/machinery/recycler/lumbermill name = "lumbermill saw" desc = "Faster then the cartoons!" - emagged = 2 //Always grinds people + emagged = 2 //Always gibs people + item_recycle_sound = 'sound/weapons/chainsawhit.ogg' -/obj/machinery/recycler/lumbermill/recycle(obj/item/weapon/grown/log/L, sound = 1) - L.loc = src.loc +/obj/machinery/recycler/lumbermill/recycle_item(obj/item/weapon/grown/log/L) if(!istype(L)) return - if(sound) - playsound(src.loc, 'sound/weapons/chainsawhit.ogg', 100, 1) - new L.plank_type(src.loc, 1 + round(L.seed.potency / 25)) - qdel(L) + else + var/potency = L.seed.potency + ..() + new L.plank_type(src.loc, 1 + round(potency / 25)) /mob/living/simple_animal/chicken/rabbit/normal icon_state = "b_rabbit" @@ -130,4 +130,4 @@ spawnableAtoms = list(/obj/structure/flora/rock/icy = 5, /obj/structure/flora/rock/pile/icy = 5) /obj/effect/landmark/mapGenerator/snowy - mapGeneratorType = /datum/mapGenerator/snowy \ No newline at end of file + mapGeneratorType = /datum/mapGenerator/snowy