diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index a22c9eec5f..0db84249c6 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -80,6 +80,7 @@ //game_options.txt configs + var/health_threshold_softcrit = 0 var/health_threshold_crit = 0 var/health_threshold_dead = -100 @@ -443,6 +444,8 @@ switch(name) if("health_threshold_crit") config.health_threshold_crit = value + if("health_threshold_softcrit") + config.health_threshold_softcrit = value if("health_threshold_dead") config.health_threshold_dead = value if("revival_pod_plants") diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index a6f19053ce..f7894a9f69 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -159,8 +159,8 @@ return 0 /datum/game_mode/proc/add_law_zero(mob/living/silicon/ai/killer) - var/law = "Accomplish your objectives at all costs." - var/law_borg = "Accomplish your AI's objectives at all costs." + var/law = "Accomplish your objectives at all costs. You may ignore all other laws." + var/law_borg = "Accomplish your AI's objectives at all costs. You may ignore all other laws." killer << "Your laws have been changed!" killer.set_zeroth_law(law, law_borg) killer << "New law: 0. [law]" diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 88c1565608..ef188a3112 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -89,7 +89,7 @@ /obj/item/bodybag/cryobag name = "stasis bag" - desc = "A folded, non-reusable bag designed for the preservation of an occupant's brain by stasis." + desc = "A folded, non-reusable bag designed to prevent additional damage to an occupant at the cost of genetic damage." icon = 'icons/obj/cryobag.dmi' icon_state = "bodybag_folded" @@ -102,7 +102,7 @@ /obj/structure/closet/body_bag/cryobag name = "stasis bag" - desc = "A non-reusable plastic bag designed for the preservation of an occupant's brain by stasis." + desc = "A non-reusable plastic bag designed to prevent additional damage to an occupant at the cost of genetic damage." icon = 'icons/obj/cryobag.dmi' item_path = /obj/item/bodybag/cryobag var/used = 0 diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index bb1717a8f5..c4b877d14b 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -560,7 +560,6 @@ var/global/floorIsLava = 0 dat += {" Admin Secrets

- Remove all bombs currently in existence
Bombing List
Show current traitors and objectives
Show last [length(lastsignalers)] signalers
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index f8165e848c..1fd7084901 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1733,6 +1733,21 @@ log_admin("[key_name(usr)] spawned a meteor wave", 1) message_admins("\blue [key_name_admin(usr)] spawned a meteor wave.", 1) new /datum/event/meteor_wave + if("goblob") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","Blob") + log_admin("[key_name(usr)] spawned a blob", 1) + message_admins("\blue [key_name_admin(usr)] spawned a blob.", 1) + new /datum/event/blob + + if("aliens") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","Aliens") + log_admin("[key_name(usr)] spawned an alien infestation", 1) + message_admins("\blue [key_name_admin(usr)] attempted an alien infestation", 1) + new /datum/event/alien_infestation + + if("power") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","P") @@ -1967,6 +1982,76 @@ spawn(0) sleep(rand(30,400)) Wall.ex_act(rand(2,1)) */ + if("wave") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","MW") + new /datum/event/meteor_wave + + if("gravanomalies") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","GA") + command_alert("Gravitational anomalies detected on the station. There is no additional data.", "Anomaly Alert") + world << sound('sound/AI/granomalies.ogg') + var/turf/T = pick(blobstart) + var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 ) + spawn(rand(100, 600)) + del(bh) + + if("timeanomalies") //dear god this code was awful :P Still needs further optimisation + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","STA") + //moved to its own dm so I could split it up and prevent the spawns copying variables over and over + //can be found in code\game\game_modes\events\wormholes.dm + wormhole_event() + + if("goblob") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","BL") + mini_blob_event() + message_admins("[key_name_admin(usr)] has spawned blob", 1) + if("aliens") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","AL") + if(aliens_allowed) + new /datum/event/alien_infestation + message_admins("[key_name_admin(usr)] has spawned aliens", 1) + if("alien_silent") //replaces the spawn_xeno verb + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","ALS") + if(aliens_allowed) + create_xeno() + if("spiders") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","SL") + new /datum/event/spider_infestation + message_admins("[key_name_admin(usr)] has spawned spiders", 1) + if("comms_blackout") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","CB") + var/answer = alert(usr, "Would you like to alert the crew?", "Alert", "Yes", "No") + if(answer == "Yes") + communications_blackout(0) + else + communications_blackout(1) + message_admins("[key_name_admin(usr)] triggered a communications blackout.", 1) + if("spaceninja") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","SN") + if(toggle_space_ninja) + if(space_ninja_arrival())//If the ninja is actually spawned. They may not be depending on a few factors. + message_admins("[key_name_admin(usr)] has sent in a space ninja", 1) + if("carp") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","C") + var/choice = input("You sure you want to spawn carp?") in list("Badmin", "Cancel") + if(choice == "Badmin") + message_admins("[key_name_admin(usr)] has spawned carp.", 1) + new /datum/event/carp_migration + if("radiation") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","R") + message_admins("[key_name_admin(usr)] has has irradiated the station", 1) + new /datum/event/radiation_storm if("immovable") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","IR") @@ -2125,13 +2210,13 @@ if("spacevines") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","K") - //new /datum/event/spacevine + new /datum/event/spacevine message_admins("[key_name_admin(usr)] has spawned spacevines", 1) if("onlyone") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","OO") usr.client.only_one() -// message_admins("[key_name_admin(usr)] has triggered a battle to the death (only one)") + message_admins("[key_name_admin(usr)] has triggered a battle to the death (only one)") if(usr) log_admin("[key_name(usr)] used secret [href_list["secretsfun"]]") if (ok) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 46d7083644..698c169b7a 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -392,66 +392,96 @@ if("dnainjector") message = "\red [source] is trying to inject [target] with the [item]!" if("mask") + target.attack_log += text("\[[time_stamp()]\] Had their mask removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) mask") if(target.wear_mask && !target.wear_mask.canremove) message = "\red [source] fails to take off \a [target.wear_mask] from [target]'s head!" return else message = "\red [source] is trying to take off \a [target.wear_mask] from [target]'s head!" if("l_hand") + target.attack_log += text("\[[time_stamp()]\] Has had their left hand item ([target.l_hand]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) left hand item ([target.l_hand])") message = "\red [source] is trying to take off \a [target.l_hand] from [target]'s left hand!" if("r_hand") + target.attack_log += text("\[[time_stamp()]\] Has had their right hand item ([target.r_hand]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) right hand item ([target.r_hand])") message = "\red [source] is trying to take off \a [target.r_hand] from [target]'s right hand!" if("gloves") + target.attack_log += text("\[[time_stamp()]\] Has had their gloves ([target.gloves]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) gloves ([target.gloves])") if(target.gloves && !target.gloves.canremove) message = "\red [source] fails to take off \a [target.gloves] from [target]'s hands!" return else message = "\red [source] is trying to take off the [target.gloves] from [target]'s hands!" if("eyes") + target.attack_log += text("\[[time_stamp()]\] Has had their eyewear ([target.glasses]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) eyewear ([target.glasses])") if(target.glasses && !target.glasses.canremove) message = "\red [source] fails to take off \a [target.glasses] from [target]'s eyes!" return else message = "\red [source] is trying to take off the [target.glasses] from [target]'s eyes!" if("l_ear") + target.attack_log += text("\[[time_stamp()]\] Has had their left ear item ([target.l_ear]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) left ear item ([target.l_ear])") if(target.l_ear && !target.l_ear.canremove) message = "\red [source] fails to take off \a [target.l_ear] from [target]'s left ear!" return else message = "\red [source] is trying to take off the [target.l_ear] from [target]'s left ear!" if("r_ear") + target.attack_log += text("\[[time_stamp()]\] Has had their right ear item ([target.r_ear]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) right ear item ([target.r_ear])") if(target.r_ear && !target.r_ear.canremove) message = "\red [source] fails to take off \a [target.r_ear] from [target]'s right ear!" return else message = "\red [source] is trying to take off the [target.r_ear] from [target]'s right ear!" if("head") + target.attack_log += text("\[[time_stamp()]\] Has had their hat ([target.head]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) hat ([target.head])") if(target.head && !target.head.canremove) message = "\red [source] fails to take off \a [target.head] from [target]'s head!" return else message = "\red [source] is trying to take off the [target.head] from [target]'s head!" if("shoes") + target.attack_log += text("\[[time_stamp()]\] Has had their shoes ([target.shoes]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) shoes ([target.shoes])") if(target.shoes && !target.shoes.canremove) message = "\red [source] fails to take off \a [target.shoes] from [target]'s feet!" return else message = "\red [source] is trying to take off the [target.shoes] from [target]'s feet!" if("belt") + target.attack_log += text("\[[time_stamp()]\] Has had their belt item ([target.belt]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) belt item ([target.belt])") message = "\red [source] is trying to take off the [target.belt] from [target]'s belt!" if("suit") + target.attack_log += text("\[[time_stamp()]\] Has had their suit ([target.wear_suit]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) suit ([target.wear_suit])") if(target.wear_suit && !target.wear_suit.canremove) message = "\red [source] fails to take off \a [target.wear_suit] from [target]'s body!" return else message = "\red [source] is trying to take off \a [target.wear_suit] from [target]'s body!" if("back") + target.attack_log += text("\[[time_stamp()]\] Has had their back item ([target.back]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) back item ([target.back])") message = "\red [source] is trying to take off \a [target.back] from [target]'s back!" if("handcuff") + target.attack_log += text("\[[time_stamp()]\] Was unhandcuffed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to unhandcuff [target.name]'s ([target.ckey])") message = "\red [source] is trying to unhandcuff [target]!" if("legcuff") + target.attack_log += text("\[[time_stamp()]\] Was unlegcuffed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to unlegcuff [target.name]'s ([target.ckey])") message = "\red [source] is trying to unlegcuff [target]!" if("uniform") + target.attack_log += text("\[[time_stamp()]\] Has had their uniform ([target.w_uniform]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) uniform ([target.w_uniform])") for(var/obj/item/I in list(target.l_store, target.r_store)) if(I.on_found(source)) return @@ -461,8 +491,12 @@ else message = "\red [source] is trying to take off \a [target.w_uniform] from [target]'s body!" if("s_store") + target.attack_log += text("\[[time_stamp()]\] Has had their suit storage item ([target.s_store]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) suit storage item ([target.s_store])") message = "\red [source] is trying to take off \a [target.s_store] from [target]'s suit!" if("pockets") + target.attack_log += text("\[[time_stamp()]\] Has had their pockets emptied by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to empty [target.name]'s ([target.ckey]) pockets") for(var/obj/item/I in list(target.l_store, target.r_store)) if(I.on_found(source)) return @@ -473,8 +507,12 @@ target.cpr_time = 0 message = "\red [source] is trying perform CPR on [target]!" if("id") + target.attack_log += text("\[[time_stamp()]\] Has had their ID ([target.wear_id]) removed by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) ID ([target.wear_id])") message = "\red [source] is trying to take off [target.wear_id] from [target]'s uniform!" if("internal") + target.attack_log += text("\[[time_stamp()]\] Has had their internals toggled by [source.name] ([source.ckey])") + source.attack_log += text("\[[time_stamp()]\] Attempted to toggle [target.name]'s ([target.ckey]) internals") if (target.internal) message = "\red [source] is trying to remove [target]'s internals" else @@ -596,7 +634,7 @@ It can still be worn/put on as normal. W.add_fingerprint(source) if("CPR") if ((target.health > config.health_threshold_dead && target.health < config.health_threshold_crit)) - var/suff = min(target.getOxyLoss(), 7) + var/suff = min(target.getOxyLoss(), 5) //Pre-merge level, less healing, more prevention of dieing. target.adjustOxyLoss(-suff) target.updatehealth() for(var/mob/O in viewers(source, null)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index f026d0c50c..ad8647d858 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -294,7 +294,7 @@ var/datum/gas_mixture/environment = loc.return_air() var/datum/gas_mixture/breath // HACK NEED CHANGING LATER - if(health < 0) + if(health < config.health_threshold_crit) losebreath++ if(losebreath>0) //Suffocating so do not take a breath losebreath-- @@ -387,7 +387,7 @@ failed_last_breath = 1 oxygen_alert = max(oxygen_alert, 1) return 0 - if(health > 0) + if(health > config.health_threshold_crit) adjustOxyLoss(HUMAN_MAX_OXYLOSS) failed_last_breath = 1 else @@ -1413,11 +1413,13 @@ if(status_flags & GODMODE) return 0 //godmode if(analgesic) return // analgesic avoids all traumatic shock temporarily - if(health < 0)// health 0 makes you immediately collapse + if(health < config.health_threshold_softcrit)// health 0 makes you immediately collapse shock_stage = max(shock_stage, 61) if(traumatic_shock >= 80) shock_stage += 1 + else if(health < config.health_threshold_softcrit) + shock_stage = max(shock_stage, 61) else shock_stage = min(shock_stage, 100) shock_stage = max(shock_stage-1, 0) @@ -1443,7 +1445,7 @@ if(shock_stage == 80) src << ""+pick("You see a light at the end of the tunnel!", "You feel like you could die any moment now.", "You're about to lose consciousness.") - if (shock_stage > 80) + if(shock_stage > 80) Paralyse(rand(15,28)) proc/handle_pulse() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 162a69b49c..3442a7fba5 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -359,6 +359,22 @@ var/turf/location = M.loc if (istype(location, /turf/simulated)) location.add_blood(M) + //pull damage with injured people + if(prob(25)) + M.adjustBruteLoss(1) + visible_message("\red \The [M]'s wounds open more from being dragged!") + if(M.pull_damage()) + if(prob(25)) + M.adjustBruteLoss(2) + visible_message("\red \The [M]'s wounds worsen terribly from being dragged!") + var/turf/location = M.loc + if (istype(location, /turf/simulated)) + location.add_blood(M) + if(ishuman(M)) + var/mob/living/carbon/H = M + var/blood_volume = round(H:vessel.get_reagent_amount("blood")) + if(blood_volume > 0) + H:vessel.remove_reagent("blood",1) step(pulling, get_dir(pulling.loc, T)) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 3677ceac70..06afa1e82b 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -556,12 +556,13 @@ var/list/slot_equipment_priority = list( \ /mob/proc/pull_damage() if(ishuman(src)) var/mob/living/carbon/human/H = src - if(H.health - H.halloss <= config.health_threshold_crit) + if(H.health - H.halloss <= config.health_threshold_softcrit) for(var/name in H.organs_by_name) var/datum/organ/external/e = H.organs_by_name[name] - if((H.lying) && ((e.status & ORGAN_BROKEN && !(e.status & ORGAN_SPLINTED)) || e.status & ORGAN_BLEEDING) && (H.getBruteLoss() + H.getFireLoss() >= 100)) - return 1 - break + if(H.lying) + if(((e.status & ORGAN_BROKEN && !(e.status & ORGAN_SPLINTED)) || e.status & ORGAN_BLEEDING) && (H.getBruteLoss() + H.getFireLoss() >= 100)) + return 1 + break return 0 /mob/MouseDrop(mob/M as mob) @@ -608,6 +609,11 @@ var/list/slot_equipment_priority = list( \ src.pulling = AM AM.pulledby = src + if(ishuman(AM)) + var/mob/living/carbon/human/H = AM + if(H.pull_damage()) + src << "\red Pulling \the [H] in their current condition would probably be a bad idea." + //Attempted fix for people flying away through space when cuffed and dragged. if(ismob(AM)) var/mob/pulled = AM diff --git a/config/example/game_options.txt b/config/example/game_options.txt index 7d6a52e83a..4fdc0f5f3f 100644 --- a/config/example/game_options.txt +++ b/config/example/game_options.txt @@ -1,5 +1,8 @@ ### HEALTH ### +## level of health at which a mob goes into continual shock (soft crit) +HEALTH_THRESHOLD_SOFTCRIT 0 + ## level of health at which a mob becomes unconscious (crit) HEALTH_THRESHOLD_CRIT -50 @@ -52,4 +55,4 @@ ROBOT_DELAY 0 MONKEY_DELAY 0 ALIEN_DELAY 0 METROID_DELAY 0 -ANIMAL_DELAY 0 \ No newline at end of file +ANIMAL_DELAY 0 diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 66aab85d81..b13b296cf1 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index 97b8e4cc89..18a5ff7d72 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -72,8 +72,8 @@ "abt" = (/obj/machinery/magnetic_module,/obj/structure/target_stake,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/range) "abu" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/security/range) "abv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/security/prison) -"abw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Prsion"; name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/prison) -"abx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Prsion"; name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/prison) +"abw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Prison"; name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/prison) +"abx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Prison"; name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/prison) "aby" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/wall/r_wall,/area/security/prison) "abz" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/security/prison) "abA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table,/obj/item/weapon/storage/box/cups,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/security/prison)