diff --git a/code/__DEFINES/alerts.dm b/code/__DEFINES/alerts.dm new file mode 100644 index 000000000000..b4fc5e04c9c7 --- /dev/null +++ b/code/__DEFINES/alerts.dm @@ -0,0 +1,7 @@ +#define ALERT_BUCKLED "buckled" +#define ALERT_HANDCUFFED "handcuffed" +#define ALERT_LEGCUFFED "legcuffed" +#define ALERT_FLOORED "floored" +#define ALERT_INCAPACITATED "incapacitated" +#define ALERT_KNOCKEDOUT "knockedout" +#define ALERT_IMMOBILIZED "immobilized" diff --git a/code/__DEFINES/dcs/signals/atom/mob/living/signals_living.dm b/code/__DEFINES/dcs/signals/atom/mob/living/signals_living.dm index 56cd4dd8cd8e..89f3951e7c99 100644 --- a/code/__DEFINES/dcs/signals/atom/mob/living/signals_living.dm +++ b/code/__DEFINES/dcs/signals/atom/mob/living/signals_living.dm @@ -23,11 +23,6 @@ #define COMSIG_LIVING_SPEAK "living_speak" #define COMPONENT_OVERRIDE_SPEAK (1<<0) -#define COMSIG_LIVING_APPLY_EFFECT "living_apply_effect" -#define COMSIG_LIVING_ADJUST_EFFECT "living_adjust_effect" -#define COMSIG_LIVING_SET_EFFECT "living_set_effect" - #define COMPONENT_CANCEL_EFFECT (1<<0) - /// From /obj/structure/proc/do_climb(var/mob/living/user, mods) #define COMSIG_LIVING_CLIMB_STRUCTURE "climb_over_structure" /// From /mob/living/Collide(): (atom/A) diff --git a/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm b/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm index f4beec321c9e..bfb62c2bcf6e 100644 --- a/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm +++ b/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm @@ -95,6 +95,9 @@ #define COMSIG_MOB_MOVE_OR_LOOK "mob_move_or_look" #define COMPONENT_OVERRIDE_MOB_MOVE_OR_LOOK (1<<0) +///from rejuv +#define COMSIG_LIVING_POST_FULLY_HEAL "living_post_fully_heal" + ///from /mob/living/emote(): () #define COMSIG_MOB_EMOTE "mob_emote" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 0dcd26de3e3a..e50d9e72497c 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -1,3 +1,6 @@ +/// Multiplier for Stun/KD/KO/etc durations in new backend, due to old system being based on life ticks +#define GLOBAL_STATUS_MULTIPLIER 20 // each in-code unit is worth 20ds of duration + #define HEALTH_THRESHOLD_DEAD -100 #define HEALTH_THRESHOLD_CRIT -50 diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm new file mode 100644 index 000000000000..ecccbd40abeb --- /dev/null +++ b/code/__DEFINES/status_effects.dm @@ -0,0 +1,25 @@ +///if it allows multiple instances of the effect +#define STATUS_EFFECT_MULTIPLE 0 +///if it allows only one, preventing new instances +#define STATUS_EFFECT_UNIQUE 1 +///if it allows only one, but new instances replace +#define STATUS_EFFECT_REPLACE 2 +/// if it only allows one, and new instances just instead refresh the timer +#define STATUS_EFFECT_REFRESH 3 + +///Processing flags - used to define the speed at which the status will work +///This is fast - 0.2s between ticks (I believe!) +#define STATUS_EFFECT_FAST_PROCESS 0 +///This is slower and better for more intensive status effects - 1s between ticks +#define STATUS_EFFECT_NORMAL_PROCESS 1 + +//Incapacitated status effect flags +/// If the incapacitated status effect will ignore a mob in restraints (handcuffs) +#define IGNORE_RESTRAINTS (1<<0) +/// If the incapacitated status effect will ignore a mob in stasis (stasis beds) +#define IGNORE_STASIS (1<<1) +/// If the incapacitated status effect will ignore a mob being agressively grabbed +#define IGNORE_GRAB (1<<2) + +/// Time threshold after which we launch ending timer - this should be higher than the slowest processing rate +#define STATUS_EFFECT_TIME_THRESHOLD (2 SECONDS) diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 6af4a3585e29..9cb67e1e0de1 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -179,9 +179,11 @@ #define SS_PRIORITY_FAST_OBJECTS 105 #define SS_PRIORITY_OBJECTS 104 #define SS_PRIORITY_DECORATOR 99 +#define SS_PRIORITY_EFFECTS 97 +#define SS_PRIORITY_FASTEFFECTS 96 #define SS_PRIORITY_HIJACK 97 #define SS_PRIORITY_POWER 95 -#define SS_PRIORITY_EFFECTS 92 +#define SS_PRIORITY_OLDEFFECTS 92 #define SS_PRIORITY_MACHINERY 90 #define SS_PRIORITY_FZ_TRANSITIONS 88 #define SS_PRIORITY_ROUND_RECORDING 83 diff --git a/code/__DEFINES/surgery.dm b/code/__DEFINES/surgery.dm index 9257172eeee5..d63c6da26ac6 100644 --- a/code/__DEFINES/surgery.dm +++ b/code/__DEFINES/surgery.dm @@ -38,6 +38,15 @@ unless the surgical tool is completely unsuited to what it's being used for.*/ ///A tool that's perfect for the surgery. #define SURGERY_TOOL_MULT_IDEAL 1 +///The (no) chance of failure for surgery because the correct tools/conditions are used or skill compensates +#define SURGERY_FAILURE_IMPOSSIBLE 0 +///The chance of failure for surgery because the the tool/ground is SURGERY_TOOL_MULT_BAD_SUBSTITUTE/SURGERY_SURFACE_MULT_UNSUITED and skill can't compensate enough +#define SURGERY_FAILURE_UNLIKELY 5 +///The chance of failure for surgery because the the tool/ground is SURGERY_TOOL_MULT_AWFUL/SURGERY_SURFACE_MULT_AWFUL and skill can't compensate enough +#define SURGERY_FAILURE_POSSIBLE 25 +///The chance of failure for surgery because the the tool and ground is some combination worse than awful and skill can't compensate enough +#define SURGERY_FAILURE_LIKELY 50 + //When initiating surgeries, these define their order when listed in initiation selector or 'you can't use this tool for anything, but could x, y, or z' messages. ///Appears first in lists. Ex. larva surgery, opening incision. Immediately life-threatening or initiation surgeries. #define SURGERY_PRIORITY_MAXIMUM 5 diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index a0a4c927d3d9..630c9740dc80 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -580,9 +580,7 @@ #define XENO_STRUCTURE_CORE "hive core" #define XENO_STRUCTURE_CLUSTER "hive cluster" #define XENO_STRUCTURE_PYLON "hive pylon" -#define XENO_STRUCTURE_POOL "spawn pool" #define XENO_STRUCTURE_EGGMORPH "egg morpher" -#define XENO_STRUCTURE_EVOPOD "evolution pod" #define XENO_STRUCTURE_RECOVERY "recovery node" #define XENO_STRUCTURE_NEST "thick resin nest" diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 215e228fdd9d..f5f61424daac 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -230,6 +230,7 @@ hud_version = display_hud_version persistent_inventory_update(screenmob) mymob.update_action_buttons(TRUE) + reorganize_alerts(screenmob) mymob.reload_fullscreens() // ensure observers get an accurate and up-to-date view diff --git a/code/controllers/subsystem/processing/effects.dm b/code/controllers/subsystem/processing/effects.dm index 5dc9c5f7b9c2..095d557c1ad3 100644 --- a/code/controllers/subsystem/processing/effects.dm +++ b/code/controllers/subsystem/processing/effects.dm @@ -1,5 +1,4 @@ PROCESSING_SUBSYSTEM_DEF(effects) name = "Effects" wait = 1 SECONDS - flags = SS_NO_INIT | SS_KEEP_TIMING priority = SS_PRIORITY_EFFECTS diff --git a/code/controllers/subsystem/processing/fasteffects.dm b/code/controllers/subsystem/processing/fasteffects.dm new file mode 100644 index 000000000000..29d3857916f9 --- /dev/null +++ b/code/controllers/subsystem/processing/fasteffects.dm @@ -0,0 +1,4 @@ +PROCESSING_SUBSYSTEM_DEF(fasteffects) + name = "Fast Effects" + wait = 0.2 SECONDS + priority = SS_PRIORITY_FASTEFFECTS diff --git a/code/controllers/subsystem/processing/oldeffects.dm b/code/controllers/subsystem/processing/oldeffects.dm new file mode 100644 index 000000000000..d2b217f5fc9d --- /dev/null +++ b/code/controllers/subsystem/processing/oldeffects.dm @@ -0,0 +1,5 @@ +PROCESSING_SUBSYSTEM_DEF(oldeffects) + name = "Old Effects" + wait = 1 SECONDS + flags = SS_NO_INIT | SS_KEEP_TIMING + priority = SS_PRIORITY_OLDEFFECTS diff --git a/code/datums/ammo/ammo.dm b/code/datums/ammo/ammo.dm index cff78f5fb553..48a387e54d20 100644 --- a/code/datums/ammo/ammo.dm +++ b/code/datums/ammo/ammo.dm @@ -164,7 +164,8 @@ /datum/ammo/proc/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile) if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob - target.apply_effect(0.7, WEAKEN) // 0.9 seconds of stun, per agreement from Balance Team when switched from MC stuns to exact stuns + target.Stun(0.7) // Previous comment said they believed 0.7 was 0.9s and that the balance team approved this. Geez... + target.KnockDown(0.7) target.apply_effect(1, SUPERSLOW) target.apply_effect(2, SLOW) to_chat(target, SPAN_XENODANGER("You are shaken by the sudden impact!")) diff --git a/code/datums/ammo/bullet/rifle.dm b/code/datums/ammo/bullet/rifle.dm index b6085572e3b9..0be6f1db8ff4 100644 --- a/code/datums/ammo/bullet/rifle.dm +++ b/code/datums/ammo/bullet/rifle.dm @@ -175,7 +175,8 @@ if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!")) - target.apply_effect(0.5, WEAKEN) + target.KnockDown(0.5) // purely for visual effect, noone actually cares + target.Stun(0.5) target.apply_effect(2, SUPERSLOW) target.apply_effect(5, SLOW) else diff --git a/code/datums/ammo/bullet/shotgun.dm b/code/datums/ammo/bullet/shotgun.dm index 77e1e6401472..96ac4cb6ba04 100644 --- a/code/datums/ammo/bullet/shotgun.dm +++ b/code/datums/ammo/bullet/shotgun.dm @@ -25,7 +25,8 @@ if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!")) - target.apply_effect(0.5, WEAKEN) + target.KnockDown(0.5) // If you ask me the KD should be left out, but players like their visual cues + target.Stun(0.5) target.apply_effect(1, SUPERSLOW) target.apply_effect(3, SLOW) else @@ -249,7 +250,8 @@ if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!")) - target.apply_effect(0.5, WEAKEN) + target.KnockDown(0.5) // If you ask me the KD should be left out, but players like their visual cues + target.Stun(0.5) target.apply_effect(2, SUPERSLOW) target.apply_effect(5, SLOW) else @@ -338,7 +340,8 @@ return shake_camera(M, 3, 4) - M.apply_effect(2, WEAKEN) + M.KnockDown(2) // If you ask me the KD should be left out, but players like their visual cues + M.Stun(2) M.apply_effect(4, SLOW) if(iscarbonsizexeno(M)) to_chat(M, SPAN_XENODANGER("The impact knocks you off your feet!")) @@ -351,7 +354,8 @@ if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!")) - target.apply_effect(0.5, WEAKEN) + target.KnockDown(0.5) // If you ask me the KD should be left out, but players like their visual cues + target.Stun(0.5) target.apply_effect(2, SUPERSLOW) target.apply_effect(5, SLOW) else diff --git a/code/datums/ammo/energy.dm b/code/datums/ammo/energy.dm index 01c69ffa0015..27d2b7d4e0c5 100644 --- a/code/datums/ammo/energy.dm +++ b/code/datums/ammo/energy.dm @@ -103,8 +103,8 @@ icon_state = "shrapnel_plasma" damage_type = BURN -/datum/ammo/bullet/shrapnel/plasma/on_hit_mob(mob/hit_mob, obj/projectile/hit_projectile) - hit_mob.apply_effect(2, WEAKEN) +/datum/ammo/bullet/shrapnel/plasma/on_hit_mob(mob/living/hit_mob, obj/projectile/hit_projectile) + hit_mob.Stun(2) /datum/ammo/energy/yautja/caster name = "root caster bolt" @@ -141,12 +141,8 @@ log_attack("[key_name(C)] was stunned by a high power stun bolt from [key_name(P.firer)] at [get_area(P)]") if(ishuman(C)) - var/mob/living/carbon/human/H = C stun_time++ - H.apply_effect(stun_time, WEAKEN) - else - M.apply_effect(stun_time, WEAKEN) - + C.apply_effect(stun_time, WEAKEN) C.apply_effect(stun_time, STUN) ..() @@ -217,12 +213,7 @@ continue to_chat(M, SPAN_DANGER("A powerful electric shock ripples through your body, freezing you in place!")) M.apply_effect(stun_time, STUN) - - if (ishuman(M)) - var/mob/living/carbon/human/H = M - H.apply_effect(stun_time, WEAKEN) - else - M.apply_effect(stun_time, WEAKEN) + M.apply_effect(stun_time, WEAKEN) /datum/ammo/energy/yautja/rifle/bolt name = "plasma rifle bolt" diff --git a/code/datums/ammo/rocket.dm b/code/datums/ammo/rocket.dm index 52914f745110..66a9f65bdcdd 100644 --- a/code/datums/ammo/rocket.dm +++ b/code/datums/ammo/rocket.dm @@ -65,7 +65,6 @@ /datum/ammo/rocket/ap/on_hit_mob(mob/M, obj/projectile/P) var/turf/T = get_turf(M) M.ex_act(150, P.dir, P.weapon_cause_data, 100) - M.apply_effect(2, WEAKEN) M.apply_effect(2, PARALYZE) if(ishuman_strict(M)) // No yautya or synths. Makes humans gib on direct hit. M.ex_act(300, P.dir, P.weapon_cause_data, 100) @@ -84,7 +83,6 @@ var/hit_something = 0 for(var/mob/M in T) M.ex_act(150, P.dir, P.weapon_cause_data, 100) - M.apply_effect(4, WEAKEN) M.apply_effect(4, PARALYZE) hit_something = 1 continue diff --git a/code/datums/ammo/xeno.dm b/code/datums/ammo/xeno.dm index 9ecc9ebf9321..654ab88c7abc 100644 --- a/code/datums/ammo/xeno.dm +++ b/code/datums/ammo/xeno.dm @@ -49,8 +49,9 @@ if(!isxeno(M)) if(insta_neuro) - if(M.GetKnockDownValueNotADurationDoNotUse() < 3) // If they have less than somewhere random between 4 and 6 seconds KD left and assuming it doesnt get refreshed itnernally - M.adjust_effect(1 * power, WEAKEN) + if(M.GetKnockDownDuration() < 3) // Why are you not using KnockDown(3) ? Do you even know 3 is SIX seconds ? So many questions left unanswered. + M.KnockDown(power) + M.Stun(power) return if(ishuman(M)) @@ -65,8 +66,9 @@ no_clothes_neuro = TRUE if(no_clothes_neuro) - if(M.GetKnockDownValueNotADurationDoNotUse() < 5) // If they have less than somewhere random between 8 and 10 seconds KD left and assuming it doesnt get refreshed itnernally - M.adjust_effect(1 * power, WEAKEN) // KD them a bit more + if(M.GetKnockDownDuration() < 5) // Nobody actually knows what this means. Supposedly it means less than 10 seconds. Frankly if you get locked into 10s of knockdown to begin with there are bigger issues. + M.KnockDown(power) + M.Stun(power) M.visible_message(SPAN_DANGER("[M] falls prone.")) /proc/apply_scatter_neuro(mob/living/M) @@ -79,9 +81,9 @@ H.visible_message(SPAN_DANGER("[M] shrugs off the neurotoxin!")) return - if(M.GetKnockDownValueNotADurationDoNotUse() < 0.7) // basically (knocked_down && prob(90)) - M.apply_effect(0.7, WEAKEN) - M.visible_message(SPAN_DANGER("[M] falls prone.")) + M.KnockDown(0.7) // Completely arbitrary values from another time where stun timers incorrectly stacked. Kill as needed. + M.Stun(0.7) + M.visible_message(SPAN_DANGER("[M] falls prone.")) /datum/ammo/xeno/toxin/on_hit_mob(mob/M,obj/projectile/P) if(ishuman(M)) diff --git a/code/datums/construction/xenomorph/construction_template_xenomorph.dm b/code/datums/construction/xenomorph/construction_template_xenomorph.dm index 46b7e797632f..0bddbeecf359 100644 --- a/code/datums/construction/xenomorph/construction_template_xenomorph.dm +++ b/code/datums/construction/xenomorph/construction_template_xenomorph.dm @@ -4,7 +4,9 @@ name = "xenomorph structure" build_type = /obj/effect/alien/resin/special crystals_required = 45 * XENO_STRUCTURE_PLASMA_MULTIPLIER - var/datum/hive_status/hive_ref //Who gets what we build + /// The hive that this structure belongs to. + var/datum/hive_status/hive_ref + /// The range around this structure which needs to be clear for it to be constructed. var/block_range = 1 /datum/construction_template/xenomorph/set_structure_image() @@ -24,6 +26,7 @@ /datum/construction_template/xenomorph/core name = XENO_STRUCTURE_CORE + description = "Heart of the hive, grows hive weeds (which are necessary for other structures), stores larva, spawns lesser drones, and protects the hive from skyfire." build_type = /obj/effect/alien/resin/special/pylon/core build_icon_state = "core" crystals_required = 100 * XENO_STRUCTURE_PLASMA_MULTIPLIER @@ -31,6 +34,7 @@ /datum/construction_template/xenomorph/cluster name = XENO_STRUCTURE_CLUSTER + description = "Remote section of the hive, grows hive weeds, and morphs into a hive pylon when placed near a communications tower." build_type = /obj/effect/alien/resin/special/cluster build_icon_state = "hive_cluster" pixel_y = -8 @@ -43,6 +47,7 @@ /datum/construction_template/xenomorph/pylon name = XENO_STRUCTURE_PYLON + description = "Remote section of the hive, grows hive weeds, spawns lesser drones, and protects sisters from air strikes." build_type = /obj/effect/alien/resin/special/pylon build_icon_state = "pylon" crystals_required = 100 * XENO_STRUCTURE_PLASMA_MULTIPLIER @@ -50,16 +55,19 @@ /datum/construction_template/xenomorph/eggmorph name = XENO_STRUCTURE_EGGMORPH + description = "Processes hatched hosts into new facehuggers." build_type = /obj/effect/alien/resin/special/eggmorph build_icon_state = "eggmorph_preview" /datum/construction_template/xenomorph/recovery name = XENO_STRUCTURE_RECOVERY + description = "Hastily recovers the strength of sisters resting around it." build_type = /obj/effect/alien/resin/special/recovery build_icon_state = "recovery" /datum/construction_template/xenomorph/nest name = XENO_STRUCTURE_NEST + description = "Strong enough to secure a headhunter for indeterminate durations." build_type = /obj/effect/alien/resin/special/nest build_icon_state = "reinforced_nest" @@ -101,3 +109,5 @@ xeno_message(SPAN_XENOWARNING("This structure needs to be built directly next to an vertical surface."), 7, XENO_HIVE_NORMAL) qdel(owner) qdel(src) + +#undef XENO_STRUCTURE_PLASMA_MULTIPLIER diff --git a/code/datums/effects/_effects.dm b/code/datums/effects/_effects.dm index 932dc44954fc..ea6823574f54 100644 --- a/code/datums/effects/_effects.dm +++ b/code/datums/effects/_effects.dm @@ -41,7 +41,7 @@ if(!validate_atom(thing) || QDELETED(thing)) qdel(src) return - START_PROCESSING(SSeffects, src) + START_PROCESSING(SSoldeffects, src) affected_atom = thing LAZYADD(affected_atom.effects_list, src) @@ -118,7 +118,7 @@ if(affected_atom) LAZYREMOVE(affected_atom.effects_list, src) affected_atom = null - STOP_PROCESSING(SSeffects, src) + STOP_PROCESSING(SSoldeffects, src) . = ..() diff --git a/code/datums/medal_awards.dm b/code/datums/medal_awards.dm index 78fec7569582..ba8847c03661 100644 --- a/code/datums/medal_awards.dm +++ b/code/datums/medal_awards.dm @@ -174,9 +174,7 @@ GLOBAL_LIST_INIT(human_medals, list(MARINE_CONDUCT_MEDAL, MARINE_BRONZE_HEART_ME user.visible_message("ERROR: ID card not registered in USCM registry. Potential medal fraud detected.") return - var/real_owner_ref = card.registered_ref - - if(real_owner_ref != WEAKREF(user)) + if(!card.check_biometrics(user)) user.visible_message("ERROR: ID card not registered for [user.real_name] in USCM registry. Potential medal fraud detected.") return diff --git a/code/datums/status_effects/_status_effect.dm b/code/datums/status_effects/_status_effect.dm new file mode 100644 index 000000000000..ddbd6366d98c --- /dev/null +++ b/code/datums/status_effects/_status_effect.dm @@ -0,0 +1,277 @@ +/// Status effects are used to apply temporary or permanent effects to mobs. +/// This file contains their code, plus code for applying and removing them. +/datum/status_effect + /// The ID of the effect. ID is used in adding and removing effects to check for duplicates, among other things. + var/id = "effect" + /// When set initially / in on_creation, this is how long the status effect lasts in deciseconds. + /// While processing, this becomes the world.time when the status effect will expire. + /// -1 = infinite duration. + VAR_PROTECTED/duration = -1 + /// Truthy once duration is initialized + VAR_PRIVATE/duration_set = FALSE + /// When set initially / in on_creation, this is how long between [proc/tick] calls in deciseconds. + /// Note that this cannot be faster than the processing subsystem you choose to fire the effect on. (See: [var/processing_speed]) + /// While processing, this becomes the world.time when the next tick will occur. + /// -1 = will prevent ticks, and if duration is also unlimited (-1), stop processing wholesale. + var/tick_interval = 1 SECONDS + /// The mob affected by the status effect. + var/mob/living/owner + /// How many of the effect can be on one mob, and/or what happens when you try to add a duplicate. + var/status_type = STATUS_EFFECT_UNIQUE + /// If TRUE, we call [proc/on_remove] when owner is deleted. Otherwise, we call [proc/be_replaced]. + var/on_remove_on_mob_delete = FALSE + /// The typepath to the alert thrown by the status effect when created. + /// Status effect "name"s and "description"s are shown to the owner here. + var/alert_type = /atom/movable/screen/alert/status_effect + /// The alert itself, created in [proc/on_creation] (if alert_type is specified). + var/atom/movable/screen/alert/status_effect/linked_alert + /// Used to define if the status effect should be using SSfasteffects or SSeffects + var/processing_speed = STATUS_EFFECT_FAST_PROCESS + /// Do we self-terminate when a fullheal is called? // CM note: this is rejuvenate + var/remove_on_fullheal = FALSE + + /* Unimplemented feature: Our Rejuv needs refactoring to work with this + /// If remove_on_fullheal is TRUE, what flag do we need to be removed? + var/heal_flag_necessary = HEAL_STATUS + */ + + /* Particle effects feature was cut due to lacking backend, feel free to add when we have backend */ + + /// Timer ID for triggering the effect end precisely + var/timerid + +/datum/status_effect/New(list/arguments) + on_creation(arglist(arguments)) + +/// Called from New() with any supplied status effect arguments. +/// Not guaranteed to exist by the end. +/// Returning FALSE from on_apply will stop on_creation and self-delete the effect. +/datum/status_effect/proc/on_creation(mob/living/new_owner, ...) + SHOULD_NOT_SLEEP(TRUE) // Don't sleep between duration_set and update_timer + if(new_owner) + owner = new_owner + if(QDELETED(owner) || !on_apply()) + qdel(src) + return + if(owner) + LAZYADD(owner.status_effects, src) + RegisterSignal(owner, COMSIG_LIVING_REJUVENATED, PROC_REF(remove_effect_on_heal)) + + if(duration != -1) + duration = world.time + duration + duration_set = TRUE + if(tick_interval != -1) + tick_interval = world.time + tick_interval + + if(alert_type) + var/atom/movable/screen/alert/status_effect/new_alert = owner.throw_alert(id, alert_type) + new_alert.attached_effect = src //so the alert can reference us, if it needs to + linked_alert = new_alert //so we can reference the alert, if we need to + + if(duration > world.time || tick_interval > world.time) //don't process if we don't care + switch(processing_speed) + if(STATUS_EFFECT_FAST_PROCESS) + START_PROCESSING(SSfasteffects, src) + if(STATUS_EFFECT_NORMAL_PROCESS) + START_PROCESSING(SSeffects, src) + update_timer() + + update_particles() + + return TRUE + +/datum/status_effect/Destroy() + if(timerid) + deltimer(timerid) + switch(processing_speed) + if(STATUS_EFFECT_FAST_PROCESS) + STOP_PROCESSING(SSfasteffects, src) + if(STATUS_EFFECT_NORMAL_PROCESS) + STOP_PROCESSING(SSeffects, src) + if(owner) + linked_alert = null + owner.clear_alert(id) + LAZYREMOVE(owner.status_effects, src) + on_remove() + UnregisterSignal(owner, COMSIG_LIVING_REJUVENATED) + owner = null + return ..() + +// Status effect process. Handles adjusting its duration and ticks. +// If you're adding processed effects, put them in [proc/tick] +// instead of extending / overriding the process() proc. +/datum/status_effect/process(seconds_per_tick) + SHOULD_NOT_OVERRIDE(TRUE) + if(QDELETED(owner)) + qdel(src) + return + if(tick_interval != -1 && tick_interval < world.time) + var/tick_length = initial(tick_interval) + tick(tick_length / (1 SECONDS)) + tick_interval = world.time + tick_length + if(QDELING(src)) + // tick deleted us, no need to continue + return + + // Timer and update procs should basically always handle this, it's a safety net + if(!timerid && duration != -1 && duration < world.time) + qdel(src) + else + update_timer() // Attempt to start up end timer + +/// Updates the timer used for precisely ending the effect +/// We force_refresh if the duration changed otherwise than ticking down +/datum/status_effect/proc/update_timer(force_refresh = FALSE) + if(duration == -1 || duration <= world.time) // infinite or expired + return + else if(duration - world.time <= STATUS_EFFECT_TIME_THRESHOLD) + if(!timerid || force_refresh) + timerid = addtimer(CALLBACK(src, PROC_REF(timer_callback)), duration - world.time, TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_NO_HASH_WAIT) + else if(timerid) + deltimer(timerid) + timerid = null + +/// Timer invocation callback to end the effect +/datum/status_effect/proc/timer_callback() + if(timerid) + timerid = null + qdel(src) // shrimple as that + +/// Called when the effect is applied in on_created +/// Returning FALSE will cause it to delete itself during creation instead. +/datum/status_effect/proc/on_apply() + return TRUE + +/// Gets and formats examine text associated with our status effect. +/// Return 'null' to have no examine text appear (default behavior). +/datum/status_effect/proc/get_examine_text() + return null + +/** + * Called every tick from process(). + * This is only called of tick_interval is not -1. + * + * Note that every tick =/= every processing cycle. + * + * * seconds_between_ticks = This is how many SECONDS that elapse between ticks. + * This is a constant value based upon the initial tick interval set on the status effect. + * It is similar to seconds_per_tick, from processing itself, but adjusted to the status effect's tick interval. + */ +/datum/status_effect/proc/tick(seconds_between_ticks) + return + +/// Called whenever the buff expires or is removed (qdeleted) +/// Note that at the point this is called, it is out of the +/// owner's status_effects list, but owner is not yet null +/datum/status_effect/proc/on_remove() + return + +/// Called instead of on_remove when a status effect +/// of status_type STATUS_EFFECT_REPLACE is replaced by itself, +/// or when a status effect with on_remove_on_mob_delete +/// set to FALSE has its mob deleted +/datum/status_effect/proc/be_replaced() + linked_alert = null + owner.clear_alert(id) + LAZYREMOVE(owner.status_effects, src) + owner = null + qdel(src) + +/// Called before being fully removed (before on_remove) +/// Returning FALSE will cancel removal +/datum/status_effect/proc/before_remove() + return TRUE + +/// Called when a status effect of status_type STATUS_EFFECT_REFRESH +/// has its duration refreshed in apply_status_effect - is passed New() args +/datum/status_effect/proc/refresh(effect, ...) + var/original_duration = initial(duration) + if(original_duration == -1) + return + duration = world.time + original_duration + update_timer(force_refresh = TRUE) + +/// Adds nextmove modifier multiplicatively to the owner while applied +/datum/status_effect/proc/nextmove_modifier() + return 1 + +/// Adds nextmove adjustment additiviely to the owner while applied +/datum/status_effect/proc/nextmove_adjust() + return 0 + +/// Signal proc for [COMSIG_LIVING_REJUVENATED] to remove us on fullheal +/datum/status_effect/proc/remove_effect_on_heal(datum/source, heal_flags) + SIGNAL_HANDLER + + if(!remove_on_fullheal) + return + +// if(!heal_flag_necessary || (heal_flags & heal_flag_necessary)) +// qdel(src) + qdel(src) + +/// Updates the duration of the status effect to the given [amount] of deciseconds from now, qdeling / ending if we eclipse the current world time. +/// If increment is truthy, we only update if the resulting amount is higher. +/datum/status_effect/proc/update_duration(amount, increment = FALSE) + if(!duration_set) // Barebones setter for before we start everything up + if(increment) + duration = max(duration, amount) + else + duration = amount + return FALSE + if(duration == -1) // Infinite duration + return FALSE + var/new_duration = world.time + amount + if(increment && duration >= new_duration) + return FALSE + duration = new_duration + if(duration <= world.time) + qdel(src) + return TRUE + update_timer(force_refresh = TRUE) + return FALSE + +/// Updates the duration of the status effect to the given [amount] of deciseconds from its current set ending +/datum/status_effect/proc/adjust_duration(amount) + if(!duration_set) + duration += amount + return FALSE + if(duration == -1) + return FALSE + var/remaining = duration - world.time + remaining += amount + return update_duration(remaining) + +/// Remove [amount] of duration (in deciseconds) from the status effect. Compatibility handler with /tg/. +/datum/status_effect/proc/remove_duration(amount) + adjust_duration(-amount) + +/// Get duration left on the effect +/datum/status_effect/proc/get_duration_left() + if(!duration_set) + return -1 + var/remaining = duration - world.time + if(remaining < 0) + return -1 + return remaining + + +/** + * Updates the particles for the status effects + * Should be handled by subtypes! + */ + +/datum/status_effect/proc/update_particles() + SHOULD_CALL_PARENT(FALSE) + +/// Alert base type for status effect alerts +/atom/movable/screen/alert/status_effect + name = "Curse of Mundanity" + desc = "You don't feel any different..." + /// The status effect we're linked to + var/datum/status_effect/attached_effect + +/atom/movable/screen/alert/status_effect/Destroy() + attached_effect = null //Don't keep a ref now + return ..() + diff --git a/code/datums/status_effects/_status_effect_helpers.dm b/code/datums/status_effects/_status_effect_helpers.dm new file mode 100644 index 000000000000..0ee952200610 --- /dev/null +++ b/code/datums/status_effects/_status_effect_helpers.dm @@ -0,0 +1,136 @@ + +// Status effect helpers for living mobs + +/** + * Applies a given status effect to this mob. + * + * new_effect - TYPEPATH of a status effect to apply. + * Additional status effect arguments can be passed. + * + * Returns the instance of the created effected, if successful. + * Returns 'null' if unsuccessful. + */ +/mob/living/proc/apply_status_effect(datum/status_effect/new_effect, ...) + RETURN_TYPE(/datum/status_effect) + + // The arguments we pass to the start effect. The 1st argument is this mob. + var/list/arguments = args.Copy() + arguments[1] = src + + // If the status effect we're applying doesn't allow multiple effects, we need to handle it + if(initial(new_effect.status_type) != STATUS_EFFECT_MULTIPLE) + for(var/datum/status_effect/existing_effect as anything in status_effects) + if(existing_effect.id != initial(new_effect.id)) + continue + + switch(existing_effect.status_type) + // Multiple are allowed, continue as normal. (Not normally reachable) + if(STATUS_EFFECT_MULTIPLE) + break + // Only one is allowed of this type - early return + if(STATUS_EFFECT_UNIQUE) + return + // Replace the existing instance (deletes it). + if(STATUS_EFFECT_REPLACE) + existing_effect.be_replaced() + // Refresh the existing type, then early return + if(STATUS_EFFECT_REFRESH) + existing_effect.refresh(arglist(arguments)) + return + + // Create the status effect with our mob + our arguments + var/datum/status_effect/new_instance = new new_effect(arguments) + if(!QDELETED(new_instance)) + return new_instance + +/** + * Removes all instances of a given status effect from this mob + * + * removed_effect - TYPEPATH of a status effect to remove. + * Additional status effect arguments can be passed - these are passed into before_remove. + * + * Returns TRUE if at least one was removed. + */ +/mob/living/proc/remove_status_effect(datum/status_effect/removed_effect, ...) + var/list/arguments = args.Copy(2) + + . = FALSE + for(var/datum/status_effect/existing_effect as anything in status_effects) + if(existing_effect.id == initial(removed_effect.id) && existing_effect.before_remove(arguments)) + qdel(existing_effect) + . = TRUE + + return . + +/** + * Checks if this mob has a status effect that shares the passed effect's ID + * + * checked_effect - TYPEPATH of a status effect to check for. Checks for its ID, not it's typepath + * + * Returns an instance of a status effect, or NULL if none were found. + */ +/mob/proc/has_status_effect(datum/status_effect/checked_effect) + // Yes I'm being cringe and putting this on the mob level even though status effects only apply to the living level + // There's quite a few places (namely examine and, bleh, cult code) where it's easier to not need to cast to living before checking + // for an effect such as blindness + return null + +/mob/living/has_status_effect(datum/status_effect/checked_effect) + RETURN_TYPE(/datum/status_effect) + + for(var/datum/status_effect/present_effect as anything in status_effects) + if(present_effect.id == initial(checked_effect.id)) + return present_effect + + return null + +/** + * Checks if this mob has a status effect that shares the passed effect's ID + * and has the passed sources are in its list of sources (ONLY works for grouped efects!) + * + * checked_effect - TYPEPATH of a status effect to check for. Checks for its ID, not it's typepath + * + * Returns an instance of a status effect, or NULL if none were found. + */ +/mob/proc/has_status_effect_from_source(datum/status_effect/grouped/checked_effect, sources) + // See [/mob/proc/has_status_effect] for reason behind having this on the mob level + return null + +/mob/living/has_status_effect_from_source(datum/status_effect/grouped/checked_effect, sources) + RETURN_TYPE(/datum/status_effect) + + if(!ispath(checked_effect)) + CRASH("has_status_effect_from_source passed with an improper status effect path.") + + if(!islist(sources)) + sources = list(sources) + + for(var/datum/status_effect/grouped/present_effect in status_effects) + if(present_effect.id != initial(checked_effect.id)) + continue + var/list/matching_sources = present_effect.sources & sources + if(length(matching_sources)) + return present_effect + + return null + +/** + * Returns a list of all status effects that share the passed effect type's ID + * + * checked_effect - TYPEPATH of a status effect to check for. Checks for its ID, not it's typepath + * + * Returns a list + */ +/mob/proc/has_status_effect_list(datum/status_effect/checked_effect) + // See [/mob/proc/has_status_effect] for reason behind having this on the mob level + return null + +/mob/living/has_status_effect_list(datum/status_effect/checked_effect) + RETURN_TYPE(/list) + + var/list/effects_found = list() + for(var/datum/status_effect/present_effect as anything in status_effects) + if(present_effect.id == initial(checked_effect.id)) + effects_found += present_effect + + return effects_found diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm new file mode 100644 index 000000000000..a36b7b91e4c6 --- /dev/null +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -0,0 +1,104 @@ +//Largely negative status effects go here, even if they have small benificial effects +//STUN EFFECTS +/datum/status_effect/incapacitating + tick_interval = -1 + status_type = STATUS_EFFECT_REPLACE + alert_type = null + remove_on_fullheal = TRUE +// heal_flag_necessary = HEAL_CC_STATUS + var/needs_update_stat = FALSE + +/datum/status_effect/incapacitating/on_creation(mob/living/new_owner, set_duration) + if(isnum(set_duration)) + update_duration(set_duration) + . = ..() + if(. && needs_update_stat) + owner.update_stat() + + +/datum/status_effect/incapacitating/on_remove() + if(needs_update_stat ) //silicons need stat updates in addition to normal canmove updates + owner.update_stat() + return ..() + +//STUN +/datum/status_effect/incapacitating/stun + id = "stun" +// alert_type = /atom/movable/screen/alert/status_effect/stun + +/datum/status_effect/incapacitating/stun/on_apply() + . = ..() + if(!.) + return + owner.add_traits(list(TRAIT_INCAPACITATED, TRAIT_IMMOBILIZED /*, TRAIT_HANDS_BLOCKED*/), TRAIT_STATUS_EFFECT(id)) + +/datum/status_effect/incapacitating/stun/on_remove() + owner.remove_traits(list(TRAIT_INCAPACITATED, TRAIT_IMMOBILIZED /*, TRAIT_HANDS_BLOCKED*/), TRAIT_STATUS_EFFECT(id)) + return ..() + +/atom/movable/screen/alert/status_effect/stun + name = "Stunned" + desc = "You are incapacitated. You may not move or act." + icon_state = ALERT_INCAPACITATED + + +//KNOCKDOWN +/datum/status_effect/incapacitating/knockdown + id = "knockdown" +// alert_type = /atom/movable/screen/alert/status_effect/knockdown + +/datum/status_effect/incapacitating/knockdown/on_apply() + . = ..() + if(!.) + return + owner.add_traits(list(TRAIT_FLOORED, TRAIT_IMMOBILIZED), TRAIT_STATUS_EFFECT(id)) + +/datum/status_effect/incapacitating/knockdown/on_remove() + owner.remove_traits(list(TRAIT_FLOORED, TRAIT_IMMOBILIZED), TRAIT_STATUS_EFFECT(id)) + return ..() + +/atom/movable/screen/alert/status_effect/knockdown + name = "Floored" + desc = "You can't stand up!" + icon_state = ALERT_FLOORED + +//IMMOBILIZED +/datum/status_effect/incapacitating/immobilized + id = "immobilized" +// alert_type = /atom/movable/screen/alert/status_effect/immobilized + +/datum/status_effect/incapacitating/immobilized/on_apply() + . = ..() + if(!.) + return + ADD_TRAIT(owner, TRAIT_IMMOBILIZED, TRAIT_STATUS_EFFECT(id)) + +/datum/status_effect/incapacitating/immobilized/on_remove() + REMOVE_TRAIT(owner, TRAIT_IMMOBILIZED, TRAIT_STATUS_EFFECT(id)) + return ..() + +/atom/movable/screen/alert/status_effect/immobilized + name = "Immobilized" + desc = "You can't move." + icon_state = ALERT_IMMOBILIZED + +//UNCONSCIOUS +/datum/status_effect/incapacitating/unconscious + id = "unconscious" + needs_update_stat = TRUE +// alert_type = /atom/movable/screen/alert/status_effect/unconscious + +/datum/status_effect/incapacitating/unconscious/on_apply() + . = ..() + if(!.) + return + ADD_TRAIT(owner, TRAIT_KNOCKEDOUT, TRAIT_STATUS_EFFECT(id)) + +/datum/status_effect/incapacitating/unconscious/on_remove() + REMOVE_TRAIT(owner, TRAIT_KNOCKEDOUT, TRAIT_STATUS_EFFECT(id)) + return ..() + +/atom/movable/screen/alert/status_effect/unconscious + name = "Unconscious" + desc = "You've been knocked out." + icon_state = ALERT_KNOCKEDOUT diff --git a/code/datums/status_effects/grouped_effect.dm b/code/datums/status_effects/grouped_effect.dm new file mode 100644 index 000000000000..ade0a187e0db --- /dev/null +++ b/code/datums/status_effects/grouped_effect.dm @@ -0,0 +1,20 @@ +/// Status effect from multiple sources, when all sources are removed, so is the effect +/datum/status_effect/grouped + // Grouped effects adds itself to [var/sources] and destroys itself if one exists already, there are never actually multiple + status_type = STATUS_EFFECT_MULTIPLE + /// A list of all sources applying this status effect. Sources are a list of keys + var/list/sources = list() + +/datum/status_effect/grouped/on_creation(mob/living/new_owner, source) + var/datum/status_effect/grouped/existing = new_owner.has_status_effect(type) + if(existing) + existing.sources |= source + qdel(src) + return FALSE + + sources |= source + return ..() + +/datum/status_effect/grouped/before_remove(source) + sources -= source + return !length(sources) diff --git a/code/datums/status_effects/limited_effect.dm b/code/datums/status_effects/limited_effect.dm new file mode 100644 index 000000000000..0f56e72da52f --- /dev/null +++ b/code/datums/status_effects/limited_effect.dm @@ -0,0 +1,20 @@ +/// These effects reapply their on_apply() effect when refreshed while stacks < max_stacks. +/datum/status_effect/limited_buff + id = "limited_buff" + duration = -1 + status_type = STATUS_EFFECT_REFRESH + ///How many stacks we currently have + var/stacks = 1 + ///How many stacks we can have maximum + var/max_stacks = 3 + +/datum/status_effect/limited_buff/refresh(effect) + if(stacks < max_stacks) + on_apply() + stacks++ + else + maxed_out() + +/// Called whenever the buff is refreshed when there are more stacks than max_stacks. +/datum/status_effect/limited_buff/proc/maxed_out() + return diff --git a/code/datums/status_effects/stacking_effect.dm b/code/datums/status_effects/stacking_effect.dm new file mode 100644 index 000000000000..3ef5855938f7 --- /dev/null +++ b/code/datums/status_effects/stacking_effect.dm @@ -0,0 +1,101 @@ +/// Status effects that can stack. +/datum/status_effect/stacking + id = "stacking_base" + duration = -1 // Only removed under specific conditions. + tick_interval = 1 SECONDS // Deciseconds between decays, once decay starts + alert_type = null + /// How many stacks are currently accumulated. + /// Also, the default stacks number given on application. + var/stacks = 0 + // Deciseconds until ticks start occuring, which removes stacks + /// (first stack will be removed at this time plus tick_interval) + var/delay_before_decay + /// How many stacks are lost per tick (decay trigger) + var/stack_decay = 1 + /// The threshold for having special effects occur when a certain stack number is reached + var/stack_threshold + /// The maximum number of stacks that can be applied + var/max_stacks + /// If TRUE, the status effect is consumed / removed when stack_threshold is met + var/consumed_on_threshold = TRUE + /// Set to true once the stack_threshold is crossed, and false once it falls back below + var/threshold_crossed = FALSE + +/* This implementation is missing effects overlays because we did not have + /tg/ overlays backend available at the time. Feel free to add them when we do! */ + +/// Effects that occur when the stack count crosses stack_threshold +/datum/status_effect/stacking/proc/threshold_cross_effect() + return + +/// Effects that occur if the status effect is removed due to the stack_threshold being crossed +/datum/status_effect/stacking/proc/stacks_consumed_effect() + return + +/// Effects that occur if the status is removed due to being under 1 remaining stack +/datum/status_effect/stacking/proc/fadeout_effect() + return + +/// Runs every time tick(), causes stacks to decay over time +/datum/status_effect/stacking/proc/stack_decay_effect() + return + +/// Called when the stack_threshold is crossed (stacks go over the threshold) +/datum/status_effect/stacking/proc/on_threshold_cross() + threshold_cross_effect() + if(consumed_on_threshold) + stacks_consumed_effect() + qdel(src) + +/// Called when the stack_threshold is uncrossed / dropped (stacks go under the threshold after being over it) +/datum/status_effect/stacking/proc/on_threshold_drop() + return + +/// Whether the owner can have the status effect. +/// Return FALSE if the owner is not in a valid state (self-deletes the effect), or TRUE otherwise +/datum/status_effect/stacking/proc/can_have_status() + return owner.stat != DEAD + +/// Whether the owner can currently gain stacks or not +/// Return FALSE if the owner is not in a valid state, or TRUE otherwise +/datum/status_effect/stacking/proc/can_gain_stacks() + return owner.stat != DEAD + +/datum/status_effect/stacking/tick(seconds_between_ticks) + if(!can_have_status()) + qdel(src) + else + add_stacks(-stack_decay) + stack_decay_effect() + +/// Add (or remove) [stacks_added] stacks to our current stack count. +/datum/status_effect/stacking/proc/add_stacks(stacks_added) + if(stacks_added > 0 && !can_gain_stacks()) + return FALSE + stacks += stacks_added + if(stacks > 0) + if(stacks >= stack_threshold && !threshold_crossed) //threshold_crossed check prevents threshold effect from occuring if changing from above threshold to still above threshold + threshold_crossed = TRUE + on_threshold_cross() + if(consumed_on_threshold) + return + else if(stacks < stack_threshold && threshold_crossed) + threshold_crossed = FALSE //resets threshold effect if we fall below threshold so threshold effect can trigger again + on_threshold_drop() + if(stacks_added > 0) + tick_interval += delay_before_decay //refreshes time until decay + stacks = min(stacks, max_stacks) + else + fadeout_effect() + qdel(src) //deletes status if stacks fall under one + +/datum/status_effect/stacking/on_creation(mob/living/new_owner, stacks_to_apply) + . = ..() + if(.) + add_stacks(stacks_to_apply) + +/datum/status_effect/stacking/on_apply() + if(!can_have_status()) + return FALSE + return ..() + diff --git a/code/game/gamemodes/colonialmarines/huntergames.dm b/code/game/gamemodes/colonialmarines/huntergames.dm index aad0f9ba5787..310785070458 100644 --- a/code/game/gamemodes/colonialmarines/huntergames.dm +++ b/code/game/gamemodes/colonialmarines/huntergames.dm @@ -244,7 +244,8 @@ H.skills = null //no restriction on what the contestants can do - H.apply_effect(15, WEAKEN) + H.KnockDown(15) + H.Stun(15) H.nutrition = NUTRITION_NORMAL var/randjob = rand(0,10) diff --git a/code/game/machinery/computer/almayer_control.dm b/code/game/machinery/computer/almayer_control.dm index 2b54d2e1df5b..e9b969e023b8 100644 --- a/code/game/machinery/computer/almayer_control.dm +++ b/code/game/machinery/computer/almayer_control.dm @@ -134,6 +134,19 @@ . = TRUE if("evacuation_cancel") + var/mob/living/carbon/human/human_user = usr + var/obj/item/card/id/idcard = human_user.get_active_hand() + var/bio_fail = FALSE + if(!istype(idcard)) + idcard = human_user.wear_id + if(!istype(idcard)) + bio_fail = TRUE + else if(!idcard.check_biometrics(human_user)) + bio_fail = TRUE + if(bio_fail) + to_chat(human_user, SPAN_WARNING("Biometrics failure! You require an authenticated ID card to perform this action!")) + return FALSE + if(!SShijack.cancel_evacuation()) to_chat(usr, SPAN_WARNING("You are unable to cancel the evacuation right now!")) return FALSE diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 7a51539b8888..bcc4c4ac3ec8 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -154,6 +154,19 @@ state = STATE_EVACUATION if("evacuation_cancel") + var/mob/living/carbon/human/human_user = usr + var/obj/item/card/id/idcard = human_user.get_active_hand() + var/bio_fail = FALSE + if(!istype(idcard)) + idcard = human_user.wear_id + if(!istype(idcard)) + bio_fail = TRUE + else if(!idcard.check_biometrics(human_user)) + bio_fail = TRUE + if(bio_fail) + to_chat(human_user, SPAN_WARNING("Biometrics failure! You require an authenticated ID card to perform this action!")) + return FALSE + if(state == STATE_EVACUATION_CANCEL) if(!SShijack.cancel_evacuation()) to_chat(usr, SPAN_WARNING("You are unable to cancel the evacuation right now!")) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 9a08ab7bd566..e7626938549a 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -95,7 +95,7 @@ if("Released") background = "'background-color:#2981b3;'" if("Suspect") - background = "'background-color:#008743;'" + background = "'background-color:#686A6C;'" if("NJP") background = "'background-color:#faa20a;'" if("None") diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 53bf82c93925..ab5dc6448f4b 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -386,34 +386,35 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li stop_processing() /obj/structure/machinery/cryopod/attackby(obj/item/W, mob/living/user) - + if(isxeno(user)) + return FALSE if(istype(W, /obj/item/grab)) - if(isxeno(user)) return var/obj/item/grab/G = W if(occupant) to_chat(user, SPAN_WARNING("[src] is occupied.")) - return + return FALSE if(!isliving(G.grabbed_thing)) - return + return FALSE - var/willing = null //We don't want to allow people to be forced into despawning. + var/willing = FALSE //We don't want to allow people to be forced into despawning. var/mob/living/M = G.grabbed_thing if(M.stat == DEAD) //This mob is dead to_chat(user, SPAN_WARNING("[src] immediately rejects [M]. \He passed away!")) - return + return FALSE if(isxeno(M)) to_chat(user, SPAN_WARNING("There is no way [src] will accept [M]!")) - return + return FALSE if(M.client) if(alert(M,"Would you like to enter cryosleep?", , "Yes", "No") == "Yes") - if(!M || !G || !G.grabbed_thing) return - willing = 1 + if(!M || !G || !G.grabbed_thing) + return FALSE + willing = TRUE else - willing = 1 + willing = TRUE if(willing) @@ -424,7 +425,7 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li if(!M || !G || !G.grabbed_thing) return if(occupant) to_chat(user, SPAN_WARNING("[src] is occupied.")) - return + return FALSE go_in_cryopod(M) @@ -434,6 +435,7 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li //Despawning occurs when process() is called with an occupant without a client. add_fingerprint(user) + return TRUE /obj/structure/machinery/cryopod/relaymove(mob/user) if(user.is_mob_incapacitated(TRUE)) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index b03ba1e8e195..332d9b96bd44 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -858,7 +858,8 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread sparks.set_up(5, 1, src) sparks.start() - xeno.apply_effect(1, WEAKEN) + xeno.KnockDown(1) + xeno.Stun(1) playsound(src, 'sound/effects/metalhit.ogg', 50, TRUE) xeno.visible_message(SPAN_XENOWARNING("\The [xeno] strikes \the [src] with its tail!"), SPAN_XENOWARNING("You strike \the [src] with your tail!")) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index fc2cf5a6320c..437ef7b067ea 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -60,7 +60,7 @@ src.last_flash = world.time use_power(1500) - for (var/mob/O in viewers(src, null)) + for (var/mob/living/O in viewers(src, null)) if (get_dist(src, O) > src.range) continue @@ -72,7 +72,9 @@ if (istype(O, /mob/living/carbon/xenomorph))//So aliens don't get flashed (they have no external eyes)/N continue - O.apply_effect(strength, WEAKEN) + O.KnockDown(strength) + O.Stun(strength) + if (istype(O, /mob/living/carbon/human)) var/mob/living/carbon/human/H = O var/datum/internal_organ/eyes/E = H.internal_organs_by_name["eyes"] diff --git a/code/game/machinery/medical_pod/bodyscanner.dm b/code/game/machinery/medical_pod/bodyscanner.dm index bbc3be7d5aae..732ff1ba97b9 100644 --- a/code/game/machinery/medical_pod/bodyscanner.dm +++ b/code/game/machinery/medical_pod/bodyscanner.dm @@ -204,7 +204,7 @@ "toxloss" = H.getToxLoss(), "cloneloss" = H.getCloneLoss(), "brainloss" = H.getBrainLoss(), - "knocked_out" = H.GetKnockOutValueNotADurationDoNotUse(), + "knocked_out" = H.GetKnockOutDuration(), "bodytemp" = H.bodytemperature, "inaprovaline_amount" = H.reagents.get_reagent_amount("inaprovaline"), "dexalin_amount" = H.reagents.get_reagent_amount("dexalin"), @@ -263,7 +263,7 @@ s_class = occ["brainloss"] < 1 ? INTERFACE_GOOD : INTERFACE_BAD dat += "[SET_CLASS("  Approx. Brain Damage:", INTERFACE_PINK)] [SET_CLASS("[occ["brainloss"]]%", s_class)]

" - dat += "[SET_CLASS("Knocked Out Summary:", "#40628a")] [occ["knocked_out"]]% (approximately [round(occ["knocked_out"] / 5)] seconds left!)
" + dat += "[SET_CLASS("Knocked Out Summary:", "#40628a")] [occ["knocked_out"]]% (approximately [round(occ["knocked_out"] * GLOBAL_STATUS_MULTIPLIER / (1 SECONDS))] seconds left!)
" dat += "[SET_CLASS("Body Temperature:", "#40628a")] [occ["bodytemp"]-T0C]°C ([occ["bodytemp"]*1.8-459.67]°F)

" s_class = occ["blood_amount"] > 448 ? INTERFACE_OKAY : INTERFACE_BAD diff --git a/code/game/machinery/medical_pod/sleeper.dm b/code/game/machinery/medical_pod/sleeper.dm index fe2b698caed0..84ef2f579ba1 100644 --- a/code/game/machinery/medical_pod/sleeper.dm +++ b/code/game/machinery/medical_pod/sleeper.dm @@ -391,7 +391,7 @@ to_chat(user, "[]\t -Toxin Content %: []", (occupant.getToxLoss() < 60 ? SPAN_NOTICE("") : SPAN_DANGER("")), occupant.getToxLoss()) to_chat(user, "[]\t -Burn Severity %: []", (occupant.getFireLoss() < 60 ? SPAN_NOTICE("") : SPAN_DANGER("")), occupant.getFireLoss()) to_chat(user, SPAN_NOTICE(" Expected time till occupant can safely awake: (note: These times are always inaccurate)")) - to_chat(user, SPAN_NOTICE(" \t [occupant.GetKnockOutValueNotADurationDoNotUse() / 5] second\s (if around 1 or 2 the sleeper is keeping them asleep.)")) + to_chat(user, SPAN_NOTICE(" \t [occupant.GetKnockOutDuration() * GLOBAL_STATUS_MULTIPLIER / (1 SECONDS)] second\s (if around 1 or 2 the sleeper is keeping them asleep.)")) else to_chat(user, SPAN_NOTICE(" There is no one inside!")) return diff --git a/code/game/machinery/nuclearbomb.dm b/code/game/machinery/nuclearbomb.dm index 369953788ae1..cfb0d1abb94f 100644 --- a/code/game/machinery/nuclearbomb.dm +++ b/code/game/machinery/nuclearbomb.dm @@ -111,7 +111,7 @@ GLOBAL_VAR_INIT(bomb_set, FALSE) if(isqueen(user)) if(timing && GLOB.bomb_set) - user.visible_message(SPAN_INFO("[user] begins to defuse \the [src]."), SPAN_INFO("You begin to defuse \the [src]. This will take some time...")) + user.visible_message(SPAN_INFO("[user] begins engulfing \the [src] with resin."), SPAN_INFO("You start regurgitating and engulfing the \the [src] with resin... stopping the electronics from working, this will take some time...")) if(do_after(user, 5 SECONDS, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) disable() return @@ -333,13 +333,13 @@ GLOBAL_VAR_INIT(bomb_set, FALSE) announcement_helper("WARNING.\n\nDETONATION IN [round(timeleft/10)] SECONDS.", "HQ Intel Division", humans_other, 'sound/misc/notice1.ogg') //preds part var/t_left = duration2text_sec(round(rand(timeleft - timeleft / 10, timeleft + timeleft / 10))) - yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!\n\nYou have approximately [t_left] seconds to abandon the hunting grounds before activation of human Purification Device.")) + yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!\n\nYou have approximately [t_left] seconds to abandon the hunting grounds before activation of the human purification device.")) //xenos part var/warning if(timer_warning & NUKE_SHOW_TIMER_HALF) - warning = "Hive killer is halfway through preparation cycle!" + warning = "A shiver goes down our carapace as we feel the approaching end... the hive killer is halfway through its preparation cycle!" else if(timer_warning & NUKE_SHOW_TIMER_MINUTE) - warning = "Hive killer is almost ready to trigger!" + warning = "Every sense in our form is screaming... the hive killer is almost ready to trigger!" else warning = "DISABLE IT! NOW!" var/datum/hive_status/hive @@ -355,7 +355,7 @@ GLOBAL_VAR_INIT(bomb_set, FALSE) announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE ACTIVATED.\n\nDETONATION IN [round(timeleft/10)] SECONDS.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE ACTIVATED.\n\nDETONATION IN [round(timeleft/10)] SECONDS.", "HQ Nuclear Tracker", humans_other, 'sound/misc/notice1.ogg') var/t_left = duration2text_sec(round(rand(timeleft - timeleft / 10, timeleft + timeleft / 10))) - yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!
A human Purification Device has been detected. You have approximately [t_left] to abandon the hunting grounds before it activates.")) + yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!
A human purification device has been detected. You have approximately [t_left] to abandon the hunting grounds before it activates.")) for(var/hivenumber in GLOB.hive_datum) hive = GLOB.hive_datum[hivenumber] if(!hive.totalXenos.len) @@ -364,7 +364,7 @@ GLOBAL_VAR_INIT(bomb_set, FALSE) else announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE DEACTIVATED.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE DEACTIVATED.", "HQ Intel Division", humans_other, 'sound/misc/notice1.ogg') - yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!
The human Purification Device's signature has disappeared.")) + yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!
The human purification device's signature has disappeared.")) for(var/hivenumber in GLOB.hive_datum) hive = GLOB.hive_datum[hivenumber] if(!hive.totalXenos.len) @@ -575,14 +575,14 @@ GLOBAL_VAR_INIT(bomb_set, FALSE) announcement_helper("DECRYPTION COMPLETE", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') announcement_helper("DECRYPTION COMPLETE", "HQ Intel Division", humans_other, 'sound/misc/notice1.ogg') - yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!\n\nThe human Purification Device is able to be activated.")) + yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!\n\nThe human purification device is able to be activated.")) var/datum/hive_status/hive for(var/hivenumber in GLOB.hive_datum) hive = GLOB.hive_datum[hivenumber] if(!length(hive.totalXenos)) return - xeno_announcement(SPAN_XENOANNOUNCE("The hive killer is ready to be activated! Assault at once!"), hive.hivenumber, XENO_GENERAL_ANNOUNCE) + xeno_announcement(SPAN_XENOANNOUNCE("We get a sense of impending doom... the hive killer is ready to be activated."), hive.hivenumber, XENO_GENERAL_ANNOUNCE) return announcement_helper("DECRYPTION IN [round(decryption_time/10)] SECONDS.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') @@ -590,12 +590,12 @@ GLOBAL_VAR_INIT(bomb_set, FALSE) //preds part var/time_left = duration2text_sec(round(rand(decryption_time - decryption_time / 10, decryption_time + decryption_time / 10))) - yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!\n\nYou have approximately [time_left] seconds to abandon the hunting grounds before human Purification Device is able to be activated.")) + yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!\n\nYou have approximately [time_left] seconds to abandon the hunting grounds before the human purification device is able to be activated.")) //xenos part - var/warning = "Hive killer is almost prepared to be activated!" + var/warning = "We are almost out of time, STOP THEM." if(timer_warning & NUKE_DECRYPT_SHOW_TIMER_HALF) - warning = "Hive killer is halfway through its initial phase!" + warning = "The Hive grows restless! it's halfway done..." var/datum/hive_status/hive for(var/hivenumber in GLOB.hive_datum) @@ -610,7 +610,7 @@ GLOBAL_VAR_INIT(bomb_set, FALSE) announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE DECRYPTION STARTED.\n\nDECRYPTION IN [round(decryption_time/10)] SECONDS.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE DECRYPTION STARTED.\n\nDECRYPTION IN [round(decryption_time/10)] SECONDS.", "HQ Nuclear Tracker", humans_other, 'sound/misc/notice1.ogg') var/time_left = duration2text_sec(round(rand(decryption_time - decryption_time / 10, decryption_time + decryption_time / 10))) - yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!
A human Purification Device has been detected. You have approximately [time_left] before it finishes its initial phase.")) + yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!
A human purification device has been detected. You have approximately [time_left] before it finishes its initial phase.")) for(var/hivenumber in GLOB.hive_datum) hive = GLOB.hive_datum[hivenumber] if(!length(hive.totalXenos)) @@ -620,7 +620,7 @@ GLOBAL_VAR_INIT(bomb_set, FALSE) announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE DECRYPTION HALTED.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE DECRYPTION HALTED.", "HQ Intel Division", humans_other, 'sound/misc/notice1.ogg') - yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!
The human Purification Device's signature has disappeared.")) + yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!
The human purification device's signature has disappeared.")) for(var/hivenumber in GLOB.hive_datum) hive = GLOB.hive_datum[hivenumber] if(!length(hive.totalXenos)) diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm index 02b602cc8e07..6415e1d0acd5 100644 --- a/code/game/machinery/vending/cm_vending.dm +++ b/code/game/machinery/vending/cm_vending.dm @@ -555,7 +555,7 @@ GLOBAL_LIST_EMPTY(vending_products) vend_fail() return FALSE var/obj/item/card/id/ID = user.wear_id - if(!istype(ID) || ID.registered_ref != WEAKREF(usr)) + if(!istype(ID) || !ID.check_biometrics(user)) to_chat(user, SPAN_WARNING("You must be wearing your [SPAN_INFO("dog tags")] to select a specialization!")) return FALSE var/specialist_assignment @@ -779,15 +779,15 @@ GLOBAL_LIST_EMPTY(vending_products) vend_fail() return FALSE - var/mob/living/carbon/human/H = user - var/obj/item/card/id/I = H.wear_id - if(!istype(I)) + var/mob/living/carbon/human/human_user = user + var/obj/item/card/id/idcard = human_user.wear_id + if(!istype(idcard)) if(display) to_chat(user, SPAN_WARNING("Access denied. No ID card detected")) vend_fail() return FALSE - if(I.registered_name != user.real_name) + if(!idcard.check_biometrics(human_user)) if(display) to_chat(user, SPAN_WARNING("Wrong ID card owner detected.")) vend_fail() diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index d328bb958643..41adfdd9581d 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -326,11 +326,11 @@ handle_weather() RegisterSignal(SSdcs, COMSIG_GLOB_WEATHER_CHANGE, PROC_REF(handle_weather)) RegisterSignal(acid_t, COMSIG_PARENT_QDELETING, PROC_REF(cleanup)) - START_PROCESSING(SSeffects, src) + START_PROCESSING(SSoldeffects, src) /obj/effect/xenomorph/acid/Destroy() acid_t = null - STOP_PROCESSING(SSeffects, src) + STOP_PROCESSING(SSoldeffects, src) . = ..() /obj/effect/xenomorph/acid/proc/cleanup() diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index ac5136b07a4a..5f58a3b1d292 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -144,6 +144,12 @@ to_chat(usr, "[icon2html(src, usr)] [name]: The current assignment on the card is [assignment]") to_chat(usr, "The blood type on the card is [blood_type].") +/obj/item/card/id/proc/check_biometrics(mob/living/carbon/human/target) + if(registered_ref && (registered_ref != WEAKREF(target))) + return FALSE + if(target.real_name != registered_name) + return FALSE + return TRUE /obj/item/card/id/data name = "identification holo-badge" diff --git a/code/game/objects/items/devices/portable_vendor.dm b/code/game/objects/items/devices/portable_vendor.dm index 1a4b5143f00f..465ba0666828 100644 --- a/code/game/objects/items/devices/portable_vendor.dm +++ b/code/game/objects/items/devices/portable_vendor.dm @@ -46,7 +46,7 @@ if(!ishuman(user)) return - var/mob/living/carbon/human/H = user + var/mob/living/carbon/human/human_user = user src.add_fingerprint(usr) @@ -58,17 +58,17 @@ to_chat(user, SPAN_WARNING("Access denied.")) return - var/obj/item/card/id/I = H.wear_id - if(!istype(I)) //not wearing an ID - to_chat(H, SPAN_WARNING("Access denied. No ID card detected")) + var/obj/item/card/id/idcard = human_user.wear_id + if(!istype(idcard)) //not wearing an ID + to_chat(human_user, SPAN_WARNING("Access denied. No ID card detected")) return - if(I.registered_name != H.real_name) - to_chat(H, SPAN_WARNING("Wrong ID card owner detected.")) + if(!idcard.check_biometrics(human_user)) + to_chat(human_user, SPAN_WARNING("Wrong ID card owner detected.")) return - if(req_role && I.rank != req_role) - to_chat(H, SPAN_WARNING("This device isn't for you.")) + if(req_role && idcard.rank != req_role) + to_chat(human_user, SPAN_WARNING("This device isn't for you.")) return diff --git a/code/game/objects/items/pamphlets.dm b/code/game/objects/items/pamphlets.dm index 682215be67bb..763d78bd6ea6 100644 --- a/code/game/objects/items/pamphlets.dm +++ b/code/game/objects/items/pamphlets.dm @@ -84,7 +84,7 @@ if(!istype(ID)) //not wearing an ID to_chat(user, SPAN_WARNING("You should wear your ID before doing this.")) return FALSE - if(ID.registered_ref != WEAKREF(user)) + if(!ID.check_biometrics(user)) to_chat(user, SPAN_WARNING("You should wear your ID before doing this.")) return FALSE diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 9afa0dfd1851..d12f09c2042e 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -302,7 +302,7 @@ if(istype(W) && !W.heat_source && !W.burnt) if(prob(burn_chance)) to_chat(user, SPAN_WARNING("\The [W] lights, but you burn your hand in the process! Ouch!")) - user.apply_damage(3, BRUTE, pick("r_hand", "l_hand")) + user.apply_damage(3, BURN, pick("r_hand", "l_hand")) if((user.pain.feels_pain) && prob(25)) user.emote("scream") W.light_match() diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index 2514e2e5f10c..06337995479f 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -650,19 +650,19 @@ if(!idlock) return TRUE - var/mob/living/carbon/human/H = user + var/mob/living/carbon/human/human_user = user - if(!allowed(user)) + if(!allowed(human_user)) to_chat(user, SPAN_NOTICE("It must have some kind of ID lock...")) return FALSE - var/obj/item/card/id/I = H.wear_id - if(!istype(I)) //not wearing an ID - to_chat(H, SPAN_NOTICE("It must have some kind of ID lock...")) + var/obj/item/card/id/idcard = human_user.wear_id + if(!istype(idcard)) //not wearing an ID + to_chat(human_user, SPAN_NOTICE("It must have some kind of ID lock...")) return FALSE - if(I.registered_name != H.real_name) - to_chat(H, SPAN_WARNING("Wrong ID card owner detected.")) + if(!idcard.check_biometrics(human_user)) + to_chat(human_user, SPAN_WARNING("Wrong ID card owner detected.")) return FALSE return TRUE diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 9d730c71970b..cc9f1fe53fea 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -236,6 +236,7 @@ /obj/proc/unbuckle() SIGNAL_HANDLER if(buckled_mob && buckled_mob.buckled == src) + buckled_mob.clear_alert(ALERT_BUCKLED) buckled_mob.set_buckled(null) buckled_mob.anchored = initial(buckled_mob.anchored) @@ -302,6 +303,7 @@ /obj/proc/do_buckle(mob/living/target, mob/user) send_buckling_message(target, user) if (src && src.loc) + target.throw_alert(ALERT_BUCKLED, /atom/movable/screen/alert/buckled) target.set_buckled(src) target.forceMove(src.loc) target.setDir(dir) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 736427606683..2ed19485acc9 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -274,7 +274,9 @@ var/mob/living/M = G.grabbed_thing if(user.a_intent == INTENT_HARM) if(user.grab_level > GRAB_AGGRESSIVE) - if (prob(15)) M.apply_effect(5, WEAKEN) + if (prob(15)) + M.KnockDown(5) + M.Stun(5) M.apply_damage(8, def_zone = "head") user.visible_message(SPAN_DANGER("[user] slams [M]'s face against [src]!"), SPAN_DANGER("You slam [M]'s face against [src]!")) @@ -284,7 +286,8 @@ return else if(user.grab_level >= GRAB_AGGRESSIVE) M.forceMove(loc) - M.apply_effect(5, WEAKEN) + M.KnockDown(5) + M.Stun(5) playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7) user.visible_message(SPAN_DANGER("[user] throws [M] on [src], stunning them!"), SPAN_DANGER("You throw [M] on [src], stunning them!")) diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index b689f7b33df3..069d932d991b 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -17,29 +17,25 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new()) /area/supply ceiling = CEILING_METAL -/area/supply/station //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS. +/area/supply/station name = "Supply Shuttle" icon_state = "shuttle3" - base_lighting_alpha = 255 requires_power = 0 ambience_exterior = AMBIENCE_ALMAYER -/area/supply/dock //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS. +/area/supply/dock name = "Supply Shuttle" icon_state = "shuttle3" - base_lighting_alpha = 255 requires_power = 0 -/area/supply/station_vehicle //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS. +/area/supply/station_vehicle name = "Vehicle ASRS" icon_state = "shuttle3" - base_lighting_alpha = 255 requires_power = 0 -/area/supply/dock_vehicle //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS. +/area/supply/dock_vehicle name = "Vehicle ASRS" icon_state = "shuttle3" - base_lighting_alpha = 255 requires_power = 0 //SUPPLY PACKS MOVED TO /code/defines/obj/supplypacks.dm diff --git a/code/modules/character_traits/hair_dye.dm b/code/modules/character_traits/hair_dye.dm index 1da4ea364064..3c6ce01f8acc 100644 --- a/code/modules/character_traits/hair_dye.dm +++ b/code/modules/character_traits/hair_dye.dm @@ -6,7 +6,6 @@ trait_name = "Hair Dye" trait_desc = "Enables hair gradients in the character creation screen." applyable = TRUE - cost = 1 trait_group = /datum/character_trait_group/hair_dye refresh_choices = TRUE refresh_mannequin = TRUE diff --git a/code/modules/cm_aliens/Ovipositor.dm b/code/modules/cm_aliens/Ovipositor.dm index 07d3466a279d..b8983f37cc7a 100644 --- a/code/modules/cm_aliens/Ovipositor.dm +++ b/code/modules/cm_aliens/Ovipositor.dm @@ -14,11 +14,11 @@ . = ..() begin_decay_time = world.timeofday + QUEEN_OVIPOSITOR_DECAY_TIME - START_PROCESSING(SSeffects, src) // Process every second + START_PROCESSING(SSoldeffects, src) // Process every second /obj/ovipositor/Destroy() if(!decayed && !destroyed) - STOP_PROCESSING(SSeffects, src) + STOP_PROCESSING(SSoldeffects, src) return ..() @@ -32,7 +32,7 @@ /obj/ovipositor/proc/do_decay() decayed = TRUE - STOP_PROCESSING(SSeffects, src) + STOP_PROCESSING(SSoldeffects, src) icon_state = "ovipositor_molted" flick("ovipositor_decay", src) @@ -46,7 +46,7 @@ /obj/ovipositor/proc/explode() destroyed = TRUE - STOP_PROCESSING(SSeffects, src) + STOP_PROCESSING(SSoldeffects, src) icon_state = "ovipositor_gibbed" flick("ovipositor_explosion", src) diff --git a/code/modules/cm_aliens/structures/egg.dm b/code/modules/cm_aliens/structures/egg.dm index edb86c204558..5b0654d05b55 100644 --- a/code/modules/cm_aliens/structures/egg.dm +++ b/code/modules/cm_aliens/structures/egg.dm @@ -49,7 +49,7 @@ if(status == EGG_BURST || status == EGG_DESTROYED) M.animation_attack_on(src) M.visible_message(SPAN_XENONOTICE("[M] clears the hatched egg."), \ - SPAN_XENONOTICE("You clear the hatched egg.")) + SPAN_XENONOTICE("We clear the hatched egg.")) playsound(src.loc, "alien_resin_break", 25) qdel(src) return XENO_NONCOMBAT_ACTION @@ -57,7 +57,7 @@ if(M.hivenumber != hivenumber) M.animation_attack_on(src) M.visible_message(SPAN_XENOWARNING("[M] crushes \the [src]"), - SPAN_XENOWARNING("You crush \the [src]")) + SPAN_XENOWARNING("We crush \the [src]")) Burst(TRUE) return XENO_ATTACK_ACTION @@ -70,9 +70,9 @@ return XENO_NO_DELAY_ACTION if(EGG_GROWN) if(islarva(M)) - to_chat(M, SPAN_XENOWARNING("You nudge the egg, but nothing happens.")) + to_chat(M, SPAN_XENOWARNING("We nudge the egg, but nothing happens.")) return - to_chat(M, SPAN_XENONOTICE("You retrieve the child.")) + to_chat(M, SPAN_XENONOTICE("We retrieve the child.")) Burst(FALSE) return XENO_NONCOMBAT_ACTION @@ -186,7 +186,7 @@ if(EGG_BURST) if(user) visible_message(SPAN_XENOWARNING("[user] slides [F] back into [src]."), \ - SPAN_XENONOTICE("You place the child back in to [src].")) + SPAN_XENONOTICE("We place the child back in to [src].")) user.temp_drop_inv_item(F) else visible_message(SPAN_XENOWARNING("[F] crawls back into [src]!")) //Not sure how, but let's roll with it for now. diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm index 51a6fcc8cab0..2350ecfa4462 100644 --- a/code/modules/cm_aliens/structures/special/pylon_core.dm +++ b/code/modules/cm_aliens/structures/special/pylon_core.dm @@ -190,7 +190,7 @@ if(!linked_hive.hive_location || !linked_hive.living_xeno_queen) return - var/list/hive_xenos = linked_hive.totalXenos + var/list/hive_xenos = linked_hive.totalXenos.Copy() for(var/mob/living/carbon/xenomorph/xeno in hive_xenos) if(!xeno.counts_for_slots) @@ -417,7 +417,6 @@ linked_hive.hardcore = TRUE linked_hive.allow_queen_evolve = FALSE linked_hive.hive_structures_limit[XENO_STRUCTURE_CORE] = 0 - linked_hive.hive_structures_limit[XENO_STRUCTURE_POOL] = 0 xeno_announcement("\The [linked_hive.name] has lost their hive core!", "everything", HIGHER_FORCE_ANNOUNCE) if(linked_hive.hijack_burrowed_surge) diff --git a/code/modules/cm_aliens/structures/special_structure.dm b/code/modules/cm_aliens/structures/special_structure.dm index 8378d93e1ac9..83ca09547185 100644 --- a/code/modules/cm_aliens/structures/special_structure.dm +++ b/code/modules/cm_aliens/structures/special_structure.dm @@ -1,26 +1,6 @@ /* * Special Structures */ - -/proc/get_xeno_structure_desc(name) - var/message - switch(name) - if(XENO_STRUCTURE_CORE) - message = "[XENO_STRUCTURE_CORE] - Heart of the hive, grows hive weeds (which are necessary for other structures), stores resources and protects the hive from skyfire." - if(XENO_STRUCTURE_PYLON) - message = "[XENO_STRUCTURE_PYLON] - Remote section of the hive, grows hive weeds (which are necessary for other structures), stores resources and protects sisters from skyfire." - if(XENO_STRUCTURE_POOL) - message = "[XENO_STRUCTURE_POOL] - Respawns xenomorphs that fall in battle." - if(XENO_STRUCTURE_EGGMORPH) - message = "[XENO_STRUCTURE_EGGMORPH] - Processes hatched hosts into new eggs." - if(XENO_STRUCTURE_EVOPOD) - message = "[XENO_STRUCTURE_EVOPOD] - Grants an additional 0.2 evolution per tick for all sisters on weeds." - if(XENO_STRUCTURE_RECOVERY) - message = "[XENO_STRUCTURE_RECOVERY] - Hastily recovers the strength of sisters resting around it." - if(XENO_STRUCTURE_NEST) - message = "[XENO_STRUCTURE_NEST] - Strong enough to secure a headhunter for indeterminate durations." - return message - /obj/effect/alien/resin/special name = "Special Resin Structure" icon = 'icons/mob/xenos/structures64x64.dmi' diff --git a/code/modules/cm_aliens/structures/tunnel.dm b/code/modules/cm_aliens/structures/tunnel.dm index 8c467be695b4..1f0f98c14361 100644 --- a/code/modules/cm_aliens/structures/tunnel.dm +++ b/code/modules/cm_aliens/structures/tunnel.dm @@ -147,7 +147,7 @@ //No teleporting! return FALSE - to_chat(X, SPAN_XENONOTICE("You begin moving to your destination.")) + to_chat(X, SPAN_XENONOTICE("We begin moving to our destination.")) var/tunnel_time = TUNNEL_MOVEMENT_XENO_DELAY @@ -165,11 +165,11 @@ to_chat(X, SPAN_WARNING("The tunnel is too crowded, wait for others to exit!")) return FALSE if(!T.loc) - to_chat(X, SPAN_WARNING("The tunnel has collapsed before you reached its exit!")) + to_chat(X, SPAN_WARNING("The tunnel has collapsed before we reached its exit!")) return FALSE X.forceMove(T) - to_chat(X, SPAN_XENONOTICE("You have reached your destination.")) + to_chat(X, SPAN_XENONOTICE("We have reached our destination.")) return TRUE /obj/structure/tunnel/proc/exit_tunnel(mob/living/carbon/xenomorph/X) @@ -177,7 +177,7 @@ if(X in contents) X.forceMove(loc) visible_message(SPAN_XENONOTICE("\The [X] pops out of the tunnel!"), \ - SPAN_XENONOTICE("You pop out through the other side!")) + SPAN_XENONOTICE("We pop out through the other side!")) return TRUE //Used for controling tunnel exiting and returning @@ -200,15 +200,15 @@ if(!isfriendly(M)) if(M.mob_size < MOB_SIZE_BIG) - to_chat(M, SPAN_XENOWARNING("You aren't large enough to collapse this tunnel!")) + to_chat(M, SPAN_XENOWARNING("We aren't large enough to collapse this tunnel!")) return XENO_NO_DELAY_ACTION M.visible_message(SPAN_XENODANGER("[M] begins to fill [src] with dirt."),\ - SPAN_XENONOTICE("You begin to fill [src] with dirt using your massive claws."), max_distance = 3) + SPAN_XENONOTICE("We begin to fill [src] with dirt using our massive claws."), max_distance = 3) xeno_attack_delay(M) if(!do_after(M, 10 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE, src, INTERRUPT_ALL_OUT_OF_RANGE, max_dist = 1)) - to_chat(M, SPAN_XENOWARNING("You decide not to cave the tunnel in.")) + to_chat(M, SPAN_XENOWARNING("We decide not to cave the tunnel in.")) return XENO_NO_DELAY_ACTION src.visible_message(SPAN_XENODANGER("[src] caves in!"), max_distance = 3) @@ -217,7 +217,7 @@ return XENO_NO_DELAY_ACTION if(M.anchored) - to_chat(M, SPAN_XENOWARNING("You can't climb through a tunnel while immobile.")) + to_chat(M, SPAN_XENOWARNING("We can't climb through a tunnel while immobile.")) return XENO_NO_DELAY_ACTION if(!hive.tunnels.len) @@ -237,14 +237,14 @@ if(M.mob_size >= MOB_SIZE_BIG) M.visible_message(SPAN_XENONOTICE("[M] begins heaving their huge bulk down into \the [src]."), \ - SPAN_XENONOTICE("You begin heaving your monstrous bulk into \the [src].")) + SPAN_XENONOTICE("We begin heaving our monstrous bulk into \the [src].")) else M.visible_message(SPAN_XENONOTICE("\The [M] begins crawling down into \the [src]."), \ - SPAN_XENONOTICE("You begin crawling down into \the [src].")) + SPAN_XENONOTICE("We begin crawling down into \the [src].")) xeno_attack_delay(M) if(!do_after(M, tunnel_time, INTERRUPT_NO_NEEDHAND, BUSY_ICON_GENERIC)) - to_chat(M, SPAN_WARNING("Your crawling was interrupted!")) + to_chat(M, SPAN_WARNING("Our crawling was interrupted!")) return XENO_NO_DELAY_ACTION if(hive.tunnels.len) //Make sure other tunnels exist @@ -252,7 +252,7 @@ to_chat(M, SPAN_HIGHDANGER("Alt + Click the tunnel to exit, Ctrl + Click to choose a destination.")) pick_tunnel(M) else - to_chat(M, SPAN_WARNING("\The [src] ended unexpectedly, so you return back up.")) + to_chat(M, SPAN_WARNING("\The [src] ended unexpectedly, so we return back up.")) return XENO_NO_DELAY_ACTION /obj/structure/tunnel/maint_tunnel diff --git a/code/modules/cm_marines/NonLethalRestraints.dm b/code/modules/cm_marines/NonLethalRestraints.dm index 3b2439a22a82..e1eb7ec60a77 100644 --- a/code/modules/cm_marines/NonLethalRestraints.dm +++ b/code/modules/cm_marines/NonLethalRestraints.dm @@ -31,7 +31,7 @@ to_chat(user, SPAN_WARNING("\The [src] is out of charge.")) add_fingerprint(user) -/obj/item/weapon/stunprod/attack(mob/M, mob/user) +/obj/item/weapon/stunprod/attack(mob/living/M, mob/user) if(isrobot(M)) ..() return @@ -43,7 +43,8 @@ return if(status) - M.apply_effect(6, WEAKEN) + M.KnockDown(6) + M.Stun(6) charges -= 2 M.visible_message(SPAN_DANGER("[M] has been prodded with [src] by [user]!")) diff --git a/code/modules/maptext_alerts/screen_alerts.dm b/code/modules/maptext_alerts/screen_alerts.dm index 0b923f7dc753..b096d3b3718f 100644 --- a/code/modules/maptext_alerts/screen_alerts.dm +++ b/code/modules/maptext_alerts/screen_alerts.dm @@ -214,6 +214,9 @@ /// Alert owner var/mob/owner + /// Boolean. If TRUE, the Click() proc will attempt to Click() on the master first if there is a master. + var/click_master = TRUE + /atom/movable/screen/alert/MouseEntered(location,control,params) . = ..() if(!QDELETED(src)) @@ -251,3 +254,65 @@ if(NOTIFY_XENO_TACMAP) GLOB.xeno_tacmap_status.tgui_interact(ghost_user) +/atom/movable/screen/alert/buckled + name = "Buckled" + desc = "You've been buckled to something. Click the alert to unbuckle unless you're handcuffed." + icon_state = ALERT_BUCKLED + +/atom/movable/screen/alert/restrained/handcuffed + name = "Handcuffed" + desc = "You're handcuffed and can't act. If anyone drags you, you won't be able to move. Click the alert to free yourself." + click_master = FALSE + +/atom/movable/screen/alert/restrained/legcuffed + name = "Legcuffed" + desc = "You're legcuffed, which slows you down considerably. Click the alert to free yourself." + click_master = FALSE + +/atom/movable/screen/alert/restrained/clicked() + . = ..() + if(!.) + return + + var/mob/living/living_owner = owner + + if(!living_owner.can_resist()) + return + +// living_owner.changeNext_move(CLICK_CD_RESIST) // handled in resist proc + if((living_owner.mobility_flags & MOBILITY_MOVE) && (living_owner.last_special <= world.time)) + return living_owner.resist_restraints() + +/atom/movable/screen/alert/buckled/clicked() + . = ..() + if(!.) + return + + var/mob/living/living_owner = owner + + if(!living_owner.can_resist()) + return +// living_owner.changeNext_move(CLICK_CD_RESIST) // handled in resist proc + if(living_owner.last_special <= world.time) + return living_owner.resist_buckle() + +/atom/movable/screen/alert/clicked(location, control, params) + if(!usr || !usr.client) + return FALSE + if(usr != owner) + return FALSE + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, SHIFT_CLICK)) // screen objects don't do the normal Click() stuff so we'll cheat + to_chat(usr, SPAN_BOLDNOTICE("[name] - [desc]")) + return FALSE + if(master && click_master) + return usr.client.Click(master, location, control, params) + + return TRUE + +/atom/movable/screen/alert/Destroy() + . = ..() + severity = 0 + master = null + owner = null + screen_loc = "" diff --git a/code/modules/mob/dead/observer/actions.dm b/code/modules/mob/dead/observer/actions.dm index ff897db4a3f6..7daae802dc7a 100644 --- a/code/modules/mob/dead/observer/actions.dm +++ b/code/modules/mob/dead/observer/actions.dm @@ -21,6 +21,9 @@ INVOKE_ASYNC(src, PROC_REF(remove_from), user) +/datum/action/ghost/xeno + action_icon_state = "ghost_xeno" + /datum/action/join_ert name = "Join ERT" action_icon_state = "join_ert" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 6170aec3031c..b523cef08eec 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1098,9 +1098,9 @@ for(var/datum/effects/bleeding/internal/internal_bleed in effects_list) msg += "They have bloating and discoloration on their [internal_bleed.limb.display_name]\n" - if(knocked_out && stat != DEAD) + if(stat == UNCONSCIOUS) msg += "They seem to be unconscious\n" - if(stat == DEAD) + else if(stat == DEAD) if(src.check_tod() && is_revivable()) msg += "They're not breathing" else diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index dfbc2c971a8c..8f032288065b 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -161,7 +161,9 @@ disarm_chance += 5 * defender_skill_level if(disarm_chance <= 25) - apply_effect(2 + max((attacker_skill_level - defender_skill_level), 0), WEAKEN) + var/strength = 2 + max((attacker_skill_level - defender_skill_level), 0) + KnockDown(strength) + Stun(strength) playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7) var/shove_text = attacker_skill_level > 1 ? "tackled" : pick("pushed", "shoved") visible_message(SPAN_DANGER("[attacking_mob] has [shove_text] [src]!"), null, null, 5) @@ -205,15 +207,14 @@ if (w_uniform) w_uniform.add_fingerprint(M) - - if(body_position == LYING_DOWN || sleeping) + if(HAS_TRAIT(src, TRAIT_FLOORED) || HAS_TRAIT(src, TRAIT_KNOCKEDOUT) || body_position == LYING_DOWN || sleeping) if(client) sleeping = max(0,src.sleeping-5) if(!sleeping) set_resting(FALSE) M.visible_message(SPAN_NOTICE("[M] shakes [src] trying to wake [t_him] up!"), \ SPAN_NOTICE("You shake [src] trying to wake [t_him] up!"), null, 4) - else if(stunned) + else if(HAS_TRAIT(src, TRAIT_INCAPACITATED)) M.visible_message(SPAN_NOTICE("[M] shakes [src], trying to shake [t_him] out of his stupor!"), \ SPAN_NOTICE("You shake [src], trying to shake [t_him] out of his stupor!"), null, 4) else diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 90a4d7bca4ab..e09e9e2ebb7b 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -514,11 +514,3 @@ This function restores all limbs. damage_to_deal *= 0.25 // Massively reduced effectiveness stamina.apply_damage(damage_to_deal) - -/mob/living/carbon/human/knocked_out_start() - ..() - sound_environment_override = SOUND_ENVIRONMENT_PSYCHOTIC - -/mob/living/carbon/human/knocked_out_callback() - . = ..() - sound_environment_override = SOUND_ENVIRONMENT_NONE diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index be1c7833c5c1..1a43138421e4 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -88,3 +88,10 @@ if(!client && !mind && species) species.handle_npc(src) + +/mob/living/carbon/human/set_stat(new_stat) + . = ..() + // Temporarily force triggering HUD updates so they apply immediately rather than on Life tick. + // Remove this once effects have been ported to trait signals (blinded, dazed, etc) + if(stat != .) + handle_regular_hud_updates() diff --git a/code/modules/mob/living/carbon/human/life/handle_regular_status_updates.dm b/code/modules/mob/living/carbon/human/life/handle_regular_status_updates.dm index 41554f056744..e9bb307d7335 100644 --- a/code/modules/mob/living/carbon/human/life/handle_regular_status_updates.dm +++ b/code/modules/mob/living/carbon/human/life/handle_regular_status_updates.dm @@ -53,7 +53,7 @@ if(!already_in_crit) new /datum/effects/crit/human(src) - if(HAS_TRAIT(src, TRAIT_KNOCKEDOUT)) + if(IsKnockOut()) blinded = TRUE if(regular_update && halloss > 0) apply_damage(-3, HALLOSS) diff --git a/code/modules/mob/living/carbon/human/life/handle_stasis_bag.dm b/code/modules/mob/living/carbon/human/life/handle_stasis_bag.dm index 16d9955395b0..43c757fabb3e 100644 --- a/code/modules/mob/living/carbon/human/life/handle_stasis_bag.dm +++ b/code/modules/mob/living/carbon/human/life/handle_stasis_bag.dm @@ -4,9 +4,9 @@ //Handle side effects from stasis switch(in_stasis) if(STASIS_IN_BAG) - // I hate whoever wrote this and statuses with a passion - knocked_down = knocked_down? --knocked_down : knocked_down + 10 //knocked_down set. - if(knocked_down <= 0) - knocked_down_callback() + // At least 6 seconds, but reduce by 2s every time - IN ADDITION to normal recovery + // Don't ask me why and feel free to change it + KnockDown(3) + AdjustKnockDown(-1) if(STASIS_IN_CRYO_CELL) if(sleeping < 10) sleeping += 10 //Puts the mob to sleep indefinitely. diff --git a/code/modules/mob/living/carbon/human/life/life_helpers.dm b/code/modules/mob/living/carbon/human/life/life_helpers.dm index 25f020a9f8b6..bf254b9da1ed 100644 --- a/code/modules/mob/living/carbon/human/life/life_helpers.dm +++ b/code/modules/mob/living/carbon/human/life/life_helpers.dm @@ -197,12 +197,6 @@ speech_problem_flag = TRUE return slurring -/mob/living/carbon/human/handle_stunned() - if(stunned) - adjust_effect(-species.stun_reduction, STUN, EFFECT_FLAG_LIFE) - speech_problem_flag = TRUE - return stunned - /mob/living/carbon/human/handle_dazed() if(dazed) var/skill_resistance = skills ? (skills.get_skill_level(SKILL_ENDURANCE)-1)*0.1 : 0 @@ -213,26 +207,6 @@ speech_problem_flag = TRUE return dazed -/mob/living/carbon/human/handle_knocked_down() - if(knocked_down) - var/species_resistance = species.knock_down_reduction - var/skill_resistance = skills ? (skills.get_skill_level(SKILL_ENDURANCE)-1)*0.1 : 0 - - var/final_reduction = species_resistance + skill_resistance - adjust_effect(-final_reduction, WEAKEN, EFFECT_FLAG_LIFE) - knocked_down_callback_check() - return knocked_down - -/mob/living/carbon/human/handle_knocked_out() - if(knocked_out) - var/species_resistance = species.knock_out_reduction - var/skill_resistance = skills ? (skills.get_skill_level(SKILL_ENDURANCE)-1)*0.1 : 0 - - var/final_reduction = species_resistance + skill_resistance - adjust_effect(-final_reduction, PARALYZE, EFFECT_FLAG_LIFE) - knocked_out_callback_check() - return knocked_out - /mob/living/carbon/human/handle_stuttering() if(..()) speech_problem_flag = TRUE @@ -240,40 +214,23 @@ #define HUMAN_TIMER_TO_EFFECT_CONVERSION (0.05) //(1/20) //once per 2 seconds, with effect equal to endurance, which is used later -// This is here because sometimes our stun comes too early and tick is about to start, so we need to compensate -// this is the best place to do it, tho name might be a bit misleading I guess -/mob/living/carbon/human/stun_clock_adjustment() - var/species_resistance = species.knock_down_reduction - var/skill_resistance = skills ? (skills.get_skill_level(SKILL_ENDURANCE)-1)*0.1 : 0 - - var/final_reduction = species_resistance + skill_resistance - var/shift_left = (SShuman.next_fire - world.time) * HUMAN_TIMER_TO_EFFECT_CONVERSION * final_reduction - if(stunned > shift_left) - stunned += SShuman.wait * HUMAN_TIMER_TO_EFFECT_CONVERSION * final_reduction - shift_left - -/mob/living/carbon/human/knockdown_clock_adjustment() - if(!species) - return FALSE - - var/species_resistance = species.knock_down_reduction - var/skill_resistance = skills ? (skills.get_skill_level(SKILL_ENDURANCE)-1)*0.1 : 0 - - var/final_reduction = species_resistance + skill_resistance - var/shift_left = (SShuman.next_fire - world.time) * HUMAN_TIMER_TO_EFFECT_CONVERSION * final_reduction - if(knocked_down > shift_left) - knocked_down += SShuman.wait * HUMAN_TIMER_TO_EFFECT_CONVERSION * final_reduction - shift_left - -/mob/living/carbon/human/knockout_clock_adjustment() - if(!species) - return FALSE - - var/species_resistance = species.knock_out_reduction - var/skill_resistance = skills ? (skills.get_skill_level(SKILL_ENDURANCE)-1)*0.1 : 0 - - var/final_reduction = species_resistance + skill_resistance - var/shift_left = (SShuman.next_fire - world.time) * HUMAN_TIMER_TO_EFFECT_CONVERSION * final_reduction - if(knocked_out > shift_left) - knocked_out += SShuman.wait * HUMAN_TIMER_TO_EFFECT_CONVERSION * final_reduction - shift_left +/mob/living/carbon/human/GetStunDuration(amount) + . = ..() + var/skill_resistance = skills ? (skills.get_skill_level(SKILL_ENDURANCE)-1)*0.08 : 0 + var/final_reduction = (1 - skill_resistance) / species.stun_reduction + return . * final_reduction + +/mob/living/carbon/human/GetKnockDownDuration(amount) + . = ..() + var/skill_resistance = skills ? (skills.get_skill_level(SKILL_ENDURANCE)-1)*0.08 : 0 + var/final_reduction = (1 - skill_resistance) / species.knock_down_reduction + return . * final_reduction + +/mob/living/carbon/human/GetKnockOutDuration(amount) + . = ..() + var/skill_resistance = skills ? (skills.get_skill_level(SKILL_ENDURANCE)-1)*0.08 : 0 + var/final_reduction = (1 - skill_resistance) / species.knock_out_reduction + return . * final_reduction /mob/living/carbon/human/proc/handle_revive() SEND_SIGNAL(src, COMSIG_HUMAN_REVIVED) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 397a478a2779..4392c3359596 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -92,9 +92,12 @@ "eyes" = /datum/internal_organ/eyes ) - var/knock_down_reduction = 1 //how much the knocked_down effect is reduced per Life call. - var/stun_reduction = 1 //how much the stunned effect is reduced per Life call. - var/knock_out_reduction = 1 //same thing + /// Factor of reduction of KnockDown duration. + var/knock_down_reduction = 1 + /// Factor of reduction of Stun duration. + var/stun_reduction = 1 + /// Factor of reduction of KnockOut duration. + var/knock_out_reduction = 1 /// If different from 1, a signal is registered on post_spawn(). var/weed_slowdown_mult = 1 diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 97bf25e08932..e5673817b277 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -4,11 +4,18 @@ if(handcuffed) drop_held_items() stop_pulling() + throw_alert(ALERT_HANDCUFFED, /atom/movable/screen/alert/restrained/handcuffed, new_master = handcuffed) + else + clear_alert(ALERT_HANDCUFFED) update_inv_handcuffed() + /mob/living/carbon/proc/legcuff_update() if(legcuffed) set_movement_intent(MOVE_INTENT_WALK) + throw_alert(ALERT_LEGCUFFED, /atom/movable/screen/alert/restrained/legcuffed, new_master = handcuffed) + else + clear_alert(ALERT_LEGCUFFED) update_inv_legcuffed() diff --git a/code/modules/mob/living/carbon/xenomorph/Powers.dm b/code/modules/mob/living/carbon/xenomorph/Powers.dm index 401442e9c83c..87a6db3c0816 100644 --- a/code/modules/mob/living/carbon/xenomorph/Powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/Powers.dm @@ -164,8 +164,10 @@ new_structure.set_template(structure_template) hive.add_construction(new_structure) + var/max_constructions = hive.hive_structures_limit[structure_template.name] + var/remaining_constructions = max_constructions - hive.get_structure_count(structure_template.name) visible_message(SPAN_XENONOTICE("A thick substance emerges from the ground and shapes into \a [new_structure]."), \ - SPAN_XENONOTICE("We designate a new [structure_template] construction."), null, 5) + SPAN_XENONOTICE("We designate a new [structure_template] construction. ([remaining_constructions]/[max_constructions] remaining)"), null, 5) playsound(new_structure, "alien_resin_build", 25) if(hive.living_xeno_queen) diff --git a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm index b4287309bb3c..46b6c857d481 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm @@ -284,7 +284,8 @@ if(H.check_shields(15, "the pounce")) //Human shield block. visible_message(SPAN_DANGER("[src] slams into [H]!"), SPAN_XENODANGER("We slam into [H]!"), null, 5) - apply_effect(1, WEAKEN) + KnockDown(1) + Stun(1) throwing = FALSE //Reset throwing manually. playsound(H, "bonk", 75, FALSE) //bonk return @@ -299,13 +300,15 @@ else if(prob(75)) //Body slam the fuck out of xenos jumping at your front. visible_message(SPAN_DANGER("[H] body slams [src]!"), SPAN_XENODANGER("[H] body slams us!"), null, 5) - apply_effect(3, WEAKEN) + KnockDown(3) + Stun(3) throwing = FALSE return if(iscolonysynthetic(H) && prob(60)) visible_message(SPAN_DANGER("[H] withstands being pounced and slams down [src]!"), SPAN_XENODANGER("[H] throws us down after withstanding the pounce!"), null, 5) - apply_effect(1.5, WEAKEN) + KnockDown(1.5) + Stun(1.5) throwing = FALSE return @@ -313,7 +316,8 @@ visible_message(SPAN_DANGER("[src] [pounceAction.ability_name] onto [M]!"), SPAN_XENODANGER("We [pounceAction.ability_name] onto [M]!"), null, 5) if (pounceAction.knockdown) - M.apply_effect(pounceAction.knockdown_duration, WEAKEN) + M.KnockDown(pounceAction.knockdown_duration) + M.Stun(pounceAction.knockdown_duration) // To replicate legacy behavior. Otherwise M39 Armbrace users for example can still shoot step_to(src, M) if (pounceAction.freeze_self) diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index f77d7d99c1a3..3095e805be6a 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -252,13 +252,9 @@ var/pounce_distance = 0 // Life reduction variables. - var/life_stun_reduction = -1.5 - var/life_knockdown_reduction = -1.5 - var/life_knockout_reduction = -1.5 var/life_daze_reduction = -1.5 var/life_slow_reduction = -1.5 - ////////////////////////////////////////////////////////////////// // // Misc. State - poorly modularized @@ -1101,11 +1097,6 @@ forceMove(current_structure.loc) return TRUE -/mob/living/carbon/xenomorph/knocked_down_callback() - . = ..() - if(!resting) // !resting because we dont wanna prematurely update wounds if they're just trying to rest - update_wounds() - ///Generate a new unused nicknumber for the current hive, if hive doesn't exist return 0 /mob/living/carbon/xenomorph/proc/generate_and_set_nicknumber() if(!hive) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm index 6834f7b2e165..80e4130fccb9 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm @@ -394,10 +394,12 @@ /// remove hide and apply modified attack cooldown /datum/action/xeno_action/onclick/xenohide/proc/post_attack() var/mob/living/carbon/xenomorph/xeno = owner + UnregisterSignal(xeno, COMSIG_MOB_STATCHANGE) if(xeno.layer == XENO_HIDING_LAYER) xeno.layer = initial(xeno.layer) button.icon_state = "template" xeno.update_wounds() + xeno.update_layer() apply_cooldown(4) //2 second cooldown after attacking /datum/action/xeno_action/onclick/xenohide/give_to(mob/living/living_mob) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm index 14b2a064e68c..81f500245a41 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm @@ -500,14 +500,21 @@ xeno.layer = XENO_HIDING_LAYER to_chat(xeno, SPAN_NOTICE("We are now hiding.")) button.icon_state = "template_active" + RegisterSignal(xeno, COMSIG_MOB_STATCHANGE, PROC_REF(unhide_on_stat)) else xeno.layer = initial(xeno.layer) to_chat(xeno, SPAN_NOTICE("We have stopped hiding.")) button.icon_state = "template" + UnregisterSignal(xeno, COMSIG_MOB_STATCHANGE) xeno.update_wounds() apply_cooldown() return ..() +/datum/action/xeno_action/onclick/xenohide/proc/unhide_on_stat(mob/living/carbon/xenomorph/source, new_stat, old_stat) + SIGNAL_HANDLER + if(new_stat >= UNCONSCIOUS && old_stat <= UNCONSCIOUS) + post_attack() + /datum/action/xeno_action/onclick/place_trap/use_ability(atom/A) var/mob/living/carbon/xenomorph/X = owner if(!X.check_state()) @@ -627,13 +634,14 @@ to_chat(X, SPAN_WARNING("The weeds are still recovering from the death of the hive core, wait until the weeds have recovered!")) return FALSE if(X.hive.has_structure(XENO_STRUCTURE_CORE) || !X.hive.can_build_structure(XENO_STRUCTURE_CORE)) - choice = tgui_input_list(X, "Choose a structure to build", "Build structure", X.hive.hive_structure_types + "help", theme="hive_status") + choice = tgui_input_list(X, "Choose a structure to build", "Build structure", X.hive.hive_structure_types + "help", theme = "hive_status") if(!choice) return if(choice == "help") - var/message = "
Placing a construction node creates a template for special structures that can benefit the hive, which require the insertion of [MATERIAL_CRYSTAL] to construct the following:
" + var/message = "Placing a construction node creates a template for special structures that can benefit the hive, which require the insertion of [MATERIAL_CRYSTAL] to construct the following:
" for(var/structure_name in X.hive.hive_structure_types) - message += "[get_xeno_structure_desc(structure_name)]
" + var/datum/construction_template/xenomorph/structure_type = X.hive.hive_structure_types[structure_name] + message += "[capitalize_first_letters(structure_name)] - [initial(structure_type.description)]
" to_chat(X, SPAN_NOTICE(message)) return TRUE if(!X.check_state(TRUE) || !X.check_plasma(400)) @@ -641,32 +649,28 @@ var/structure_type = X.hive.hive_structure_types[choice] var/datum/construction_template/xenomorph/structure_template = new structure_type() - if(!spacecheck(X,T,structure_template)) + if(!spacecheck(X, T, structure_template)) return FALSE if(!do_after(X, XENO_STRUCTURE_BUILD_TIME, INTERRUPT_NO_NEEDHAND|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) return FALSE - if(!spacecheck(X,T,structure_template)) //doublechecking + if(!spacecheck(X, T, structure_template)) //doublechecking return FALSE if((choice == XENO_STRUCTURE_CORE) && isqueen(X) && X.hive.has_structure(XENO_STRUCTURE_CORE)) if(X.hive.hive_location.hardcore || world.time > XENOMORPH_PRE_SETUP_CUTOFF) to_chat(X, SPAN_WARNING("We can't rebuild this structure!")) - return + return FALSE if(alert(X, "Are we sure that we want to move the hive and destroy the old hive core?", , "Yes", "No") != "Yes") - return + return FALSE qdel(X.hive.hive_location) else if(!X.hive.can_build_structure(choice)) to_chat(X, SPAN_WARNING("We can't build any more [choice]s for the hive.")) - return FALSE - - if(!X.hive.can_build_structure(structure_template.name) && !(choice == XENO_STRUCTURE_CORE)) - to_chat(X, SPAN_WARNING("We cannot build any more [structure_template.name]!")) qdel(structure_template) return FALSE - if (QDELETED(T)) + if(QDELETED(T)) to_chat(X, SPAN_WARNING("We cannot build here!")) qdel(structure_template) return FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_abilities.dm index 5127ca6fe4ed..2c16477c1414 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_abilities.dm @@ -10,7 +10,7 @@ // Configurables var/fling_distance = 4 - var/stun_power = 0 + var/stun_power = 0.5 var/weaken_power = 0.5 var/slowdown = 2 diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_powers.dm index 4bb9e63ebaf2..c25b7e5fc49f 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_powers.dm @@ -77,9 +77,9 @@ xeno.visible_message(SPAN_XENOWARNING("[xeno] effortlessly flings [carbon] to the side!"), SPAN_XENOWARNING("We effortlessly fling [carbon] to the side!")) playsound(carbon,'sound/weapons/alien_claw_block.ogg', 75, 1) if(stun_power) - carbon.apply_effect(get_xeno_stun_duration(carbon, stun_power), STUN) + carbon.Stun(get_xeno_stun_duration(carbon, stun_power)) if(weaken_power) - carbon.apply_effect(weaken_power, WEAKEN) + carbon.KnockDown(get_xeno_stun_duration(carbon, weaken_power)) if(slowdown) if(carbon.slowed < slowdown) carbon.apply_effect(slowdown, SLOW) diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm index a038974b608b..d57df232cda4 100644 --- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm +++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm @@ -204,12 +204,14 @@ if(M.attempt_tackle(src, tackle_mult, tackle_min_offset, tackle_max_offset)) playsound(loc, 'sound/weapons/alien_knockdown.ogg', 25, 1) - apply_effect(rand(M.tacklestrength_min, M.tacklestrength_max), WEAKEN) + var/strength = rand(M.tacklestrength_min, M.tacklestrength_max) + Stun(strength) + KnockDown(strength) // Purely for knockdown visuals. All the heavy lifting is done by Stun M.visible_message(SPAN_DANGER("[M] tackles down [src]!"), \ SPAN_DANGER("We tackle down [src]!"), null, 5, CHAT_TYPE_XENO_COMBAT) else playsound(loc, 'sound/weapons/alien_claw_swipe.ogg', 25, 1) - if (HAS_TRAIT(src, TRAIT_FLOORED)) + if (body_position == LYING_DOWN) M.visible_message(SPAN_DANGER("[M] tries to tackle [src], but they are already down!"), \ SPAN_DANGER("We try to tackle [src], but they are already down!"), null, 5, CHAT_TYPE_XENO_COMBAT) else diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Crusher.dm b/code/modules/mob/living/carbon/xenomorph/castes/Crusher.dm index 64dfd021f894..d2c0b0e40e59 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Crusher.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Crusher.dm @@ -81,21 +81,21 @@ //Barricade collision else if (istype(target, /obj/structure/barricade)) var/obj/structure/barricade/B = target - visible_message(SPAN_DANGER("[src] rams into [B] and skids to a halt!"), SPAN_XENOWARNING("You ram into [B] and skid to a halt!")) + visible_message(SPAN_DANGER("[src] rams into [B] and skids to a halt!"), SPAN_XENOWARNING("We ram into [B] and skid to a halt!")) B.Collided(src) . = FALSE else if (istype(target, /obj/vehicle/multitile)) var/obj/vehicle/multitile/M = target - visible_message(SPAN_DANGER("[src] rams into [M] and skids to a halt!"), SPAN_XENOWARNING("You ram into [M] and skid to a halt!")) + visible_message(SPAN_DANGER("[src] rams into [M] and skids to a halt!"), SPAN_XENOWARNING("We ram into [M] and skid to a halt!")) M.Collided(src) . = FALSE else if (istype(target, /obj/structure/machinery/m56d_hmg)) var/obj/structure/machinery/m56d_hmg/HMG = target - visible_message(SPAN_DANGER("[src] rams [HMG]!"), SPAN_XENODANGER("You ram [HMG]!")) + visible_message(SPAN_DANGER("[src] rams [HMG]!"), SPAN_XENODANGER("We ram [HMG]!")) playsound(loc, "punch", 25, 1) HMG.CrusherImpact() . = FALSE @@ -132,7 +132,7 @@ else if (istype(target, /obj/structure/machinery/defenses)) var/obj/structure/machinery/defenses/DF = target - visible_message(SPAN_DANGER("[src] rams [DF]!"), SPAN_XENODANGER("You ram [DF]!")) + visible_message(SPAN_DANGER("[src] rams [DF]!"), SPAN_XENODANGER("We ram [DF]!")) if (!DF.unacidable) playsound(loc, "punch", 25, 1) @@ -148,7 +148,7 @@ if (V.unslashable) . = FALSE else - visible_message(SPAN_DANGER("[src] smashes straight into [V]!"), SPAN_XENODANGER("You smash straight into [V]!")) + visible_message(SPAN_DANGER("[src] smashes straight into [V]!"), SPAN_XENODANGER("We smash straight into [V]!")) playsound(loc, "punch", 25, 1) V.tip_over() @@ -165,7 +165,7 @@ if (V.unslashable) . = FALSE else - visible_message(SPAN_DANGER("[src] smashes straight into [V]!"), SPAN_XENODANGER("You smash straight into [V]!")) + visible_message(SPAN_DANGER("[src] smashes straight into [V]!"), SPAN_XENODANGER("We smash straight into [V]!")) playsound(loc, "punch", 25, 1) V.tip_over() @@ -184,7 +184,7 @@ if (O.unacidable) . = FALSE else if (O.anchored) - visible_message(SPAN_DANGER("[src] crushes [O]!"), SPAN_XENODANGER("You crush [O]!")) + visible_message(SPAN_DANGER("[src] crushes [O]!"), SPAN_XENODANGER("We crush [O]!")) if(O.contents.len) //Hopefully won't auto-delete things inside crushed stuff. var/turf/T = get_turf(src) for(var/atom/movable/S in T.contents) S.forceMove(T) @@ -195,7 +195,7 @@ else if(O.buckled_mob) O.unbuckle() - visible_message(SPAN_WARNING("[src] knocks [O] aside!"), SPAN_XENOWARNING("You knock [O] aside.")) //Canisters, crates etc. go flying. + visible_message(SPAN_WARNING("[src] knocks [O] aside!"), SPAN_XENOWARNING("We knock [O] aside.")) //Canisters, crates etc. go flying. playsound(loc, "punch", 25, 1) var/impact_range = 2 diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Sentinel.dm b/code/modules/mob/living/carbon/xenomorph/castes/Sentinel.dm index af7aa7224f0c..a568a093b3a4 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Sentinel.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Sentinel.dm @@ -103,5 +103,6 @@ #undef NEURO_TOUCH_DELAY /datum/behavior_delegate/sentinel_base/proc/paralyzing_slash(mob/living/carbon/human/human_target) - human_target.apply_effect(2, WEAKEN) + human_target.KnockDown(2) + human_target.Stun(2) to_chat(human_target, SPAN_XENOHIGHDANGER("You fall over, paralyzed by the toxin!")) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Warrior.dm b/code/modules/mob/living/carbon/xenomorph/castes/Warrior.dm index 3bcea7d91d60..04996af8f8db 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Warrior.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Warrior.dm @@ -101,7 +101,9 @@ if(should_neckgrab && living_mob.mob_size < MOB_SIZE_BIG) living_mob.drop_held_items() - living_mob.apply_effect(get_xeno_stun_duration(living_mob, 2), WEAKEN) + var/duration = get_xeno_stun_duration(living_mob, 2) + living_mob.KnockDown(duration) + living_mob.Stun(duration) if(living_mob.pulledby != src) return // Grab was broken, probably as Stun side effect (eg. target getting knocked away from a manned M56D) visible_message(SPAN_XENOWARNING("[src] grabs [living_mob] by the throat!"), \ diff --git a/code/modules/mob/living/carbon/xenomorph/damage_procs.dm b/code/modules/mob/living/carbon/xenomorph/damage_procs.dm index b6ceb2043458..e372b03e68d9 100644 --- a/code/modules/mob/living/carbon/xenomorph/damage_procs.dm +++ b/code/modules/mob/living/carbon/xenomorph/damage_procs.dm @@ -81,6 +81,7 @@ powerfactor_value = min(powerfactor_value,20) if(powerfactor_value > 0 && small_explosives_stun) KnockDown(powerfactor_value/5) + Stun(powerfactor_value/5) // Due to legacy knockdown being considered an impairement if(mob_size < MOB_SIZE_BIG) Slow(powerfactor_value) Superslow(powerfactor_value/2) diff --git a/code/modules/mob/living/carbon/xenomorph/death.dm b/code/modules/mob/living/carbon/xenomorph/death.dm index 08065106c895..ea1e674a1faf 100644 --- a/code/modules/mob/living/carbon/xenomorph/death.dm +++ b/code/modules/mob/living/carbon/xenomorph/death.dm @@ -132,6 +132,7 @@ notify_ghosts(header = "Last Xenomorph", message = "There is only one Xenomorph left: [X.name].", source = X, action = NOTIFY_ORBIT) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_XENO_DEATH, src, gibbed) + give_action(src, /datum/action/ghost/xeno) /mob/living/carbon/xenomorph/gib(datum/cause_data/cause = create_cause_data("gibbing", src)) var/obj/effect/decal/remains/xeno/remains = new(get_turf(src)) diff --git a/code/modules/mob/living/carbon/xenomorph/hive_status.dm b/code/modules/mob/living/carbon/xenomorph/hive_status.dm index 67f19c8d07cb..c7326937c4cd 100644 --- a/code/modules/mob/living/carbon/xenomorph/hive_status.dm +++ b/code/modules/mob/living/carbon/xenomorph/hive_status.dm @@ -79,9 +79,7 @@ var/list/hive_structures_limit = list( XENO_STRUCTURE_CORE = 1, XENO_STRUCTURE_CLUSTER = 8, - XENO_STRUCTURE_POOL = 1, XENO_STRUCTURE_EGGMORPH = 6, - XENO_STRUCTURE_EVOPOD = 2, XENO_STRUCTURE_RECOVERY = 6, XENO_STRUCTURE_PYLON = 2, ) @@ -627,15 +625,13 @@ /datum/hive_status/proc/can_build_structure(structure_name) if(!structure_name || !hive_structures_limit[structure_name]) return FALSE - var/total_count = 0 - if(hive_structures[structure_name]) - total_count += hive_structures[structure_name].len - if(hive_constructions[structure_name]) - total_count += hive_constructions[structure_name].len - if(total_count >= hive_structures_limit[structure_name]) + if(get_structure_count(structure_name) >= hive_structures_limit[structure_name]) return FALSE return TRUE +/datum/hive_status/proc/get_structure_count(structure_name) + return length(hive_structures[structure_name]) + length(hive_constructions[structure_name]) + /datum/hive_status/proc/has_structure(structure_name) if(!structure_name) return FALSE @@ -1107,7 +1103,6 @@ /datum/hive_status/corrupted/tamed/New() . = ..() hive_structures_limit[XENO_STRUCTURE_EGGMORPH] = 0 - hive_structures_limit[XENO_STRUCTURE_EVOPOD] = 0 /datum/hive_status/corrupted/tamed/proc/make_leader(mob/living/carbon/human/H) if(!istype(H)) @@ -1168,7 +1163,6 @@ /datum/hive_status/corrupted/renegade/New() . = ..() hive_structures_limit[XENO_STRUCTURE_EGGMORPH] = 0 - hive_structures_limit[XENO_STRUCTURE_EVOPOD] = 0 for(var/faction in FACTION_LIST_HUMANOID) //renegades allied to all humanoids, but it mostly affects structures. Their ability to attack humanoids and other xenos (including of the same hive) depends on iff settings allies[faction] = TRUE @@ -1351,6 +1345,3 @@ name = "Attack" desc = "Attack the enemy here!" icon_state = "attack" - - - diff --git a/code/modules/mob/living/carbon/xenomorph/life.dm b/code/modules/mob/living/carbon/xenomorph/life.dm index 70c92dad076d..07efb5be2ff8 100644 --- a/code/modules/mob/living/carbon/xenomorph/life.dm +++ b/code/modules/mob/living/carbon/xenomorph/life.dm @@ -516,25 +516,24 @@ Make sure their actual health updates immediately.*/ else if(world.time > next_grace_time && stat == CONSCIOUS) var/grace_time = crit_grace_time > 0 ? crit_grace_time + (1 SECONDS * max(round(warding_aura - 1), 0)) : 0 if(grace_time) - sound_environment_override = SOUND_ENVIRONMENT_PSYCHOTIC addtimer(CALLBACK(src, PROC_REF(handle_crit)), grace_time) else handle_crit() next_grace_time = world.time + grace_time + blinded = stat == UNCONSCIOUS // Xenos do not go blind from other sources - still, replace that by a status_effect or trait when able if(!gibbing) med_hud_set_health() /mob/living/carbon/xenomorph/proc/handle_crit() - if(stat == DEAD || gibbing) - return + if(stat <= CONSCIOUS && !gibbing) + set_stat(UNCONSCIOUS) - sound_environment_override = SOUND_ENVIRONMENT_NONE - set_stat(UNCONSCIOUS) - blinded = TRUE - see_in_dark = 5 - if(layer != initial(layer)) //Unhide - layer = initial(layer) - recalculate_move_delay = TRUE +/mob/living/carbon/xenomorph/set_stat(new_stat) + . = ..() + // Temporarily force triggering HUD updates so they apply immediately rather than on Life tick. + // Remove this once effects have been ported to trait signals (blinded, dazed, etc) + if(stat != .) + handle_regular_hud_updates() /mob/living/carbon/xenomorph/proc/handle_luminosity() var/new_luminosity = 0 @@ -548,12 +547,15 @@ Make sure their actual health updates immediately.*/ else set_light_on(FALSE) -/mob/living/carbon/xenomorph/handle_stunned() - if(stunned) - adjust_effect(life_stun_reduction, STUN, EFFECT_FLAG_LIFE) - stun_callback_check() - - return stunned +/mob/living/carbon/xenomorph/GetStunDuration(amount) + amount *= 2 / 3 + return ..() +/mob/living/carbon/xenomorph/GetKnockDownDuration(amount) + amount *= 2 / 3 + return ..() +/mob/living/carbon/xenomorph/GetKnockOutDuration(amount) + amount *= 2 / 3 + return ..() /mob/living/carbon/xenomorph/proc/handle_interference() if(interference) @@ -579,16 +581,6 @@ Make sure their actual health updates immediately.*/ adjust_effect(life_slow_reduction, SUPERSLOW, EFFECT_FLAG_LIFE) return superslowed -/mob/living/carbon/xenomorph/handle_knocked_down() - if(HAS_TRAIT(src, TRAIT_FLOORED)) - adjust_effect(life_knockdown_reduction, WEAKEN, EFFECT_FLAG_LIFE) - knocked_down_callback_check() - -/mob/living/carbon/xenomorph/handle_knocked_out() - if(HAS_TRAIT(src, TRAIT_KNOCKEDOUT)) - adjust_effect(life_knockout_reduction, PARALYZE, EFFECT_FLAG_LIFE) - knocked_out_callback_check() - //Returns TRUE if xeno is on weeds //Returns TRUE if xeno is off weeds AND doesn't need weeds for healing AND is not on Almayer UNLESS Queen is also on Almayer (aka - no solo Lurker Almayer hero) /mob/living/carbon/xenomorph/proc/check_weeds_for_healing() @@ -603,24 +595,3 @@ Make sure their actual health updates immediately.*/ if(hive && hive.living_xeno_queen && !is_mainship_level(hive.living_xeno_queen.loc.z) && is_mainship_level(loc.z)) return FALSE //We are on the ship, but the Queen isn't return TRUE //we have off-weed healing, and either we're on Almayer with the Queen, or we're on non-Almayer, or the Queen is dead, good enough! - - -#define XENO_TIMER_TO_EFFECT_CONVERSION (0.075) // (1.5/20) //once per 2 seconds, with 1.5 effect per that once - -// This is here because sometimes our stun comes too early and tick is about to start, so we need to compensate -// this is the best place to do it, tho name might be a bit misleading I guess -/mob/living/carbon/xenomorph/stun_clock_adjustment() - var/shift_left = (SSxeno.next_fire - world.time) * XENO_TIMER_TO_EFFECT_CONVERSION - if(stunned > shift_left) - stunned += SSxeno.wait * XENO_TIMER_TO_EFFECT_CONVERSION - shift_left - -/mob/living/carbon/xenomorph/knockdown_clock_adjustment() - var/shift_left = (SSxeno.next_fire - world.time) * XENO_TIMER_TO_EFFECT_CONVERSION - if(knocked_down > shift_left) - knocked_down += SSxeno.wait * XENO_TIMER_TO_EFFECT_CONVERSION - shift_left - -/mob/living/carbon/xenomorph/knockout_clock_adjustment() - var/shift_left = (SSxeno.next_fire - world.time) * XENO_TIMER_TO_EFFECT_CONVERSION - if(knocked_out > shift_left) - knocked_out += SSxeno.wait * XENO_TIMER_TO_EFFECT_CONVERSION - shift_left - diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/hivelord/resin_whisperer.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/hivelord/resin_whisperer.dm index 3200fd0da4a1..3653209b78f2 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/hivelord/resin_whisperer.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/hivelord/resin_whisperer.dm @@ -90,9 +90,9 @@ var/obj/structure/mineral_door/resin/resin_door = target_atom resin_door.TryToSwitchState(owner) if(resin_door.state) - to_chat(owner, SPAN_XENONOTICE("You focus your connection to the resin and remotely close the resin door.")) + to_chat(owner, SPAN_XENONOTICE("We focus our connection to the resin and remotely close the resin door.")) else - to_chat(owner, SPAN_XENONOTICE("You focus your connection to the resin and remotely open the resin door.")) + to_chat(owner, SPAN_XENONOTICE("We focus our connection to the resin and remotely open the resin door.")) return // since actions are instanced per hivelord, and only one construction can be made at a time, tweaking the datum on the fly here is fine. you're going to have to figure something out if these conditions change, though @@ -111,7 +111,7 @@ var/datum/resin_construction/resing_construction = GLOB.resin_constructions_list[hivelord.selected_resin] target_turf.visible_message(SPAN_XENONOTICE("The weeds begin pulsating wildly and secrete resin in the shape of \a [resing_construction.construction_name]!"), null, 5) - to_chat(owner, SPAN_XENONOTICE("You focus your plasma into the weeds below you and force the weeds to secrete resin in the shape of \a [resing_construction.construction_name].")) + to_chat(owner, SPAN_XENONOTICE("We focus our plasma into the weeds below us and force the weeds to secrete resin in the shape of \a [resing_construction.construction_name].")) playsound(target_turf, "alien_resin_build", 25) return TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/update_icons.dm b/code/modules/mob/living/carbon/xenomorph/update_icons.dm index e576b23e2855..7b048bdf2f58 100644 --- a/code/modules/mob/living/carbon/xenomorph/update_icons.dm +++ b/code/modules/mob/living/carbon/xenomorph/update_icons.dm @@ -99,19 +99,32 @@ . = ..() if(. != new_value) update_icons() // Snowflake handler for xeno resting icons + update_wounds() /mob/living/carbon/xenomorph/on_floored_start() . = ..() update_icons() + update_wounds() /mob/living/carbon/xenomorph/on_floored_end() . = ..() update_icons() + update_wounds() /mob/living/carbon/xenomorph/on_incapacitated_trait_gain() . = ..() update_icons() + update_wounds() /mob/living/carbon/xenomorph/on_incapacitated_trait_loss() . = ..() update_icons() + update_wounds() +/mob/living/carbon/xenomorph/on_knockedout_trait_gain() + . = ..() + update_icons() + update_wounds() +/mob/living/carbon/xenomorph/on_knockedout_trait_loss() + . = ..() + update_icons() + update_wounds() /* ^^^^^^^^^^^^^^ End Icon updates */ diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 9fade66e44c6..7c4eff0e2c15 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -65,14 +65,13 @@ //#define EFFECT_FLAG_XENOMORPH //#define EFFECT_FLAG_CHEMICAL +/// Legacy wrapper for effects, DO NOT USE and migrate all code to USING THE STATUS PROCS DIRECTLY /mob/proc/apply_effect() return FALSE +// Legacy wrapper for effects, DO NOT USE and migrate all code to USING THE BELOW PROCS DIRECTLY /mob/living/apply_effect(effect = 0, effect_type = STUN, effect_flags = EFFECT_FLAG_DEFAULT) - if(SEND_SIGNAL(src, COMSIG_LIVING_APPLY_EFFECT, effect, effect_type, effect_flags) & COMPONENT_CANCEL_EFFECT) - return - if(!effect) return FALSE @@ -106,9 +105,6 @@ /mob/living/adjust_effect(effect = 0, effect_type = STUN, effect_flags = EFFECT_FLAG_DEFAULT) - if(SEND_SIGNAL(src, COMSIG_LIVING_ADJUST_EFFECT, effect, effect_type, effect_flags) & COMPONENT_CANCEL_EFFECT) - return - if(!effect) return FALSE @@ -142,9 +138,6 @@ /mob/living/set_effect(effect = 0, effect_type = STUN, effect_flags = EFFECT_FLAG_DEFAULT) - if(SEND_SIGNAL(src, COMSIG_LIVING_SET_EFFECT, effect, effect_type, effect_flags) & COMPONENT_CANCEL_EFFECT) - return - switch(effect_type) if(STUN) SetStun(effect) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 6205c4f919a4..64c851310823 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -24,6 +24,7 @@ /mob/living/Destroy() GLOB.living_mob_list -= src + cleanup_status_effects() pipes_shown = null . = ..() @@ -33,6 +34,17 @@ QDEL_NULL(pain) QDEL_NULL(stamina) QDEL_NULL(hallucinations) + status_effects = null + +/// Clear all running status effects assuming deletion +/mob/living/proc/cleanup_status_effects() + PROTECTED_PROC(TRUE) + if(length(status_effects)) + for(var/datum/status_effect/S as anything in status_effects) + if(S?.on_remove_on_mob_delete) //the status effect calls on_remove when its mob is deleted + qdel(S) + else + S?.be_replaced() /mob/living/proc/initialize_pain() pain = new /datum/pain(src) @@ -473,10 +485,12 @@ if(CONSCIOUS) if(stat >= UNCONSCIOUS) ADD_TRAIT(src, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT) + sound_environment_override = SOUND_ENVIRONMENT_PSYCHOTIC add_traits(list(/*TRAIT_HANDS_BLOCKED, */ TRAIT_INCAPACITATED, TRAIT_FLOORED), STAT_TRAIT) if(UNCONSCIOUS) if(stat >= UNCONSCIOUS) ADD_TRAIT(src, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT) //adding trait sources should come before removing to avoid unnecessary updates + sound_environment_override = SOUND_ENVIRONMENT_PSYCHOTIC if(DEAD) SEND_SIGNAL(src, COMSIG_MOB_STAT_SET_ALIVE) // remove_from_dead_mob_list() @@ -486,15 +500,18 @@ if(CONSCIOUS) if(. >= UNCONSCIOUS) REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT) + sound_environment_override = SOUND_ENVIRONMENT_NONE remove_traits(list(/*TRAIT_HANDS_BLOCKED, */ TRAIT_INCAPACITATED, TRAIT_FLOORED, /*TRAIT_CRITICAL_CONDITION*/), STAT_TRAIT) if(UNCONSCIOUS) if(. >= UNCONSCIOUS) REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT) + sound_environment_override = SOUND_ENVIRONMENT_NONE if(DEAD) SEND_SIGNAL(src, COMSIG_MOB_STAT_SET_DEAD) // REMOVE_TRAIT(src, TRAIT_CRITICAL_CONDITION, STAT_TRAIT) // remove_from_alive_mob_list() // add_to_dead_mob_list() + update_layer() // Force update layers so that lying down works as intended upon death. This is redundant otherwise. Replace this by trait signals /** * Changes the inclination angle of a mob, used by humans and others to differentiate between standing up and prone positions. @@ -577,12 +594,16 @@ drop_l_hand() drop_r_hand() add_temp_pass_flags(PASS_MOB_THRU) + update_layer() + +/// Updates the layer the mob is on based on its current status. This can result in redundant updates. Replace by trait signals eventually +/mob/living/proc/update_layer() //so mob lying always appear behind standing mobs, but dead ones appear behind living ones if(pulledby && pulledby.grab_level == GRAB_CARRY) layer = ABOVE_MOB_LAYER - else if (stat == DEAD) + else if (body_position == LYING_DOWN && stat == DEAD) layer = LYING_DEAD_MOB_LAYER // Dead mobs should layer under living ones - else if(layer == initial(layer)) //to avoid things like hiding larvas. + else if(body_position == LYING_DOWN && layer == initial(layer)) //to avoid things like hiding larvas. //i have no idea what this means layer = LYING_LIVING_MOB_LAYER /// Called when mob changes from a standing position into a prone while lacking the ability to stand up at the moment. diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 43e94361676d..88bd8e09c386 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -14,15 +14,14 @@ var/brainloss = 0 //'Retardation' damage caused by someone hitting you in the head with a bible or being infected with brainrot. var/halloss = 0 //Hallucination damage. 'Fake' damage obtained through hallucinating or the holodeck. Sleeping should cause it to wear off. - // please don't use these - VAR_PROTECTED/knocked_out = 0 - VAR_PROTECTED/knocked_down = 0 - VAR_PROTECTED/stunned = 0 + // please don't use these directly, use the procs var/dazed = 0 var/slowed = 0 // X_SLOW_AMOUNT var/superslowed = 0 // X_SUPERSLOW_AMOUNT var/sleeping = 0 + ///a list of all status effects the mob has + var/list/status_effects /// Cooldown for manually toggling resting to avoid spamming COOLDOWN_DECLARE(rest_cooldown) diff --git a/code/modules/mob/living/living_health_procs.dm b/code/modules/mob/living/living_health_procs.dm index e4c9659db827..50e59622f132 100644 --- a/code/modules/mob/living/living_health_procs.dm +++ b/code/modules/mob/living/living_health_procs.dm @@ -81,55 +81,51 @@ /mob/living/proc/setMaxHealth(newMaxHealth) maxHealth = newMaxHealth - -/mob/living - VAR_PROTECTED/stun_timer = TIMER_ID_NULL - -/mob/living/proc/stun_callback() - REMOVE_TRAIT(src, TRAIT_INCAPACITATED, STUNNED_TRAIT) - stunned = 0 - handle_regular_status_updates(FALSE) - if(stun_timer != TIMER_ID_NULL) - deltimer(stun_timer) - stun_timer = TIMER_ID_NULL - -/mob/living/proc/stun_callback_check() - if(stunned) - ADD_TRAIT(src, TRAIT_INCAPACITATED, STUNNED_TRAIT) - if(stunned && stunned < recovery_constant) - stun_timer = addtimer(CALLBACK(src, PROC_REF(stun_callback)), (stunned/recovery_constant) * 2 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_STOPPABLE) +/* STUN (Incapacitation) */ +/// Overridable handler to adjust the numerical value of status effects. Expand as needed +/mob/living/proc/GetStunDuration(amount) + return amount * GLOBAL_STATUS_MULTIPLIER +/mob/living/proc/IsStun() //If we're stunned + return has_status_effect(/datum/status_effect/incapacitating/stun) +/mob/living/proc/AmountStun() //How much time remain in our stun - scaled by GLOBAL_STATUS_MULTIPLIER (normally in multiples of legacy 2 seconds) + var/datum/status_effect/incapacitating/stun/S = IsStun() + if(S) + return S.get_duration_left() / GLOBAL_STATUS_MULTIPLIER + return 0 +/mob/living/proc/Stun(amount) + if(!(status_flags & CANSTUN)) return - if(!stunned) // Force reset since the timer wasn't called - stun_callback() + amount = GetStunDuration(amount) + var/datum/status_effect/incapacitating/stun/S = IsStun() + if(S) + S.update_duration(amount, increment = TRUE) + else if(amount > 0) + S = apply_status_effect(/datum/status_effect/incapacitating/stun, amount) + return S +/mob/living/proc/SetStun(amount, ignore_canstun = FALSE) //Sets remaining duration + if(!(status_flags & CANSTUN)) return - - if(stun_timer != TIMER_ID_NULL) - deltimer(stun_timer) - stun_timer = TIMER_ID_NULL - -// adjust stun if needed, do not call it in adjust stunned -/mob/living/proc/stun_clock_adjustment() - return - -/mob/living/proc/Stun(amount) - if(status_flags & CANSTUN) - stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun - stun_clock_adjustment() - stun_callback_check() - return - -/mob/living/proc/SetStun(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned" - if(status_flags & CANSTUN) - stunned = max(amount,0) - stun_clock_adjustment() - stun_callback_check() - return - -/mob/living/proc/AdjustStun(amount) - if(status_flags & CANSTUN) - stunned = max(stunned + amount,0) - stun_callback_check() - return + amount = GetStunDuration(amount) + var/datum/status_effect/incapacitating/stun/S = IsStun() + if(amount <= 0) + if(S) + qdel(S) + else + if(S) + S.update_duration(amount) + else + S = apply_status_effect(/datum/status_effect/incapacitating/stun, amount) + return S +/mob/living/proc/AdjustStun(amount, ignore_canstun = FALSE) //Adds to remaining duration + if(!(status_flags & CANSTUN)) + return + amount = GetStunDuration(amount) + var/datum/status_effect/incapacitating/stun/S = IsStun() + if(S) + S.adjust_duration(amount) + else if(amount > 0) + S = apply_status_effect(/datum/status_effect/incapacitating/stun, amount) + return S /mob/living/proc/Daze(amount) if(status_flags & CANDAZE) @@ -174,103 +170,113 @@ SetSuperslow(superslowed + amount) return -/mob/living - VAR_PRIVATE/knocked_down_timer +/* KnockDown (Flooring) */ +/// Overridable handler to adjust the numerical value of status effects. Expand as needed +/mob/living/proc/GetKnockDownDuration(amount) + return amount * GLOBAL_STATUS_MULTIPLIER -/mob/living/proc/knocked_down_callback() - remove_traits(list(TRAIT_FLOORED, TRAIT_INCAPACITATED), KNOCKEDDOWN_TRAIT) - knocked_down = 0 - handle_regular_status_updates(FALSE) - knocked_down_timer = null +/mob/living/proc/IsKnockDown() + return has_status_effect(/datum/status_effect/incapacitating/knockdown) -/mob/living/proc/knocked_down_callback_check() - if(knocked_down) - add_traits(list(TRAIT_FLOORED, TRAIT_INCAPACITATED), KNOCKEDDOWN_TRAIT) +///How much time remains - scaled by GLOBAL_STATUS_MULTIPLIER (normally in multiples of legacy 2 seconds) +/mob/living/proc/AmountKnockDown() + var/datum/status_effect/incapacitating/knockdown/S = IsKnockDown() + if(S) + return S.get_duration_left() / GLOBAL_STATUS_MULTIPLIER + return 0 - if(knocked_down && knocked_down < recovery_constant) - knocked_down_timer = addtimer(CALLBACK(src, PROC_REF(knocked_down_callback)), (knocked_down/recovery_constant) * 2 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_STOPPABLE) // times whatever amount we have per tick +/mob/living/proc/KnockDown(amount) + if(!(status_flags & CANKNOCKDOWN)) return - - if(!knocked_down) // Force reset since the timer wasn't called - knocked_down_callback() + amount = GetKnockDownDuration(amount) + var/datum/status_effect/incapacitating/knockdown/S = IsKnockDown() + if(S) + S.update_duration(amount, increment = TRUE) + else if(amount > 0) + S = apply_status_effect(/datum/status_effect/incapacitating/knockdown, amount) + return S + +///Sets exact remaining KnockDown duration +/mob/living/proc/SetKnockDown(amount, ignore_canstun = FALSE) + if(!(status_flags & CANKNOCKDOWN)) return - - if(knocked_down_timer) - deltimer(knocked_down_timer) - knocked_down_timer = null - -/mob/living - VAR_PRIVATE/knocked_out_timer - -/mob/living/proc/knocked_out_start() - return - -/mob/living/proc/knocked_out_callback() - REMOVE_TRAIT(src, TRAIT_KNOCKEDOUT, KNOCKEDOUT_TRAIT) - knocked_out = 0 - handle_regular_status_updates(FALSE) - knocked_out_timer = null - -/mob/living/proc/knocked_out_callback_check() - if(knocked_out) - ADD_TRAIT(src, TRAIT_KNOCKEDOUT, KNOCKEDOUT_TRAIT) - if(knocked_out && knocked_out < recovery_constant) - knocked_out_timer = addtimer(CALLBACK(src, PROC_REF(knocked_out_callback)), (knocked_out/recovery_constant) * 2 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_STOPPABLE) // times whatever amount we have per tick + amount = GetKnockDownDuration(amount) + var/datum/status_effect/incapacitating/knockdown/S = IsKnockDown() + if(amount <= 0) + if(S) + qdel(S) + else + if(S) + S.update_duration(amount) + else + S = apply_status_effect(/datum/status_effect/incapacitating/knockdown, amount) + return S + +///Adds to remaining Knockdown duration +/mob/living/proc/AdjustKnockDown(amount, ignore_canstun = FALSE) + if(!(status_flags & CANKNOCKDOWN)) return - else if(!knocked_out) - //It's been called, and we're probably inconscious, so fix that. - knocked_out_callback() - - if(knocked_out_timer) - deltimer(knocked_out_timer) - knocked_out_timer = null - -// adjust knockdown if needed, do not call it in adjust knockdown -/mob/living/proc/knockdown_clock_adjustment() - return - -/mob/living/proc/KnockDown(amount, force) - if((status_flags & CANKNOCKDOWN) || force) - knocked_down = max(max(knocked_down,amount),0) - knockdown_clock_adjustment() - knocked_down_callback_check() - return - -/mob/living/proc/SetKnockDown(amount) - if(status_flags & CANKNOCKDOWN) - knocked_down = max(amount,0) - knockdown_clock_adjustment() - knocked_down_callback_check() - return - -/mob/living/proc/AdjustKnockDown(amount) - if(status_flags & CANKNOCKDOWN) - knocked_down = max(knocked_down + amount,0) - knocked_down_callback_check() - return - -/mob/living/proc/knockout_clock_adjustment() - return - + amount = GetKnockDownDuration(amount) + var/datum/status_effect/incapacitating/knockdown/S = IsKnockDown() + if(S) + S.adjust_duration(amount) + else if(amount > 0) + S = apply_status_effect(/datum/status_effect/incapacitating/knockdown, amount) + return S + +/* KnockOut (Unconscious) */ +/// Overridable handler to adjust the numerical value of status effects. Expand as needed +/mob/living/proc/GetKnockOutDuration(amount) + return amount * GLOBAL_STATUS_MULTIPLIER + +/mob/living/proc/IsKnockOut() + return has_status_effect(/datum/status_effect/incapacitating/unconscious) + +/mob/living/proc/AmountKnockOut() //How much time remains - scaled by GLOBAL_STATUS_MULTIPLIER (normally in multiples of legacy 2 seconds) + var/datum/status_effect/incapacitating/unconscious/S = IsKnockOut() + if(S) + return S.get_duration_left() / GLOBAL_STATUS_MULTIPLIER + return 0 + +/// Sets Knockout duration to at least the amount provided /mob/living/proc/KnockOut(amount) - if(status_flags & CANKNOCKOUT) - knocked_out = max(max(knocked_out,amount),0) - knockout_clock_adjustment() - knocked_out_callback_check() - return - -/mob/living/proc/SetKnockOut(amount) - if(status_flags & CANKNOCKOUT) - knocked_out = max(amount,0) - knockout_clock_adjustment() - knocked_out_callback_check() - return - -/mob/living/proc/AdjustKnockOut(amount) - if(status_flags & CANKNOCKOUT) - knocked_out = max(knocked_out + amount,0) - knocked_out_callback_check() - return + if(!(status_flags & CANKNOCKOUT)) + return + amount = GetKnockOutDuration(amount) + var/datum/status_effect/incapacitating/unconscious/S = IsKnockOut() + if(S) + S.update_duration(amount, increment = TRUE) + else if(amount > 0) + S = apply_status_effect(/datum/status_effect/incapacitating/unconscious, amount) + return S + +/// Sets exact remaining Knockout duration +/mob/living/proc/SetKnockOut(amount, ignore_canstun = FALSE) + if(!(status_flags & CANKNOCKOUT)) + return + amount = GetKnockOutDuration(amount) + var/datum/status_effect/incapacitating/unconscious/S = IsKnockOut() + if(amount <= 0) + if(S) + qdel(S) + else + if(S) + S.update_duration(amount) + else + S = apply_status_effect(/datum/status_effect/incapacitating/unconscious, amount) + return S + +/// Adds to remaining Knockout duration +/mob/living/proc/AdjustKnockOut(amount, ignore_canstun = FALSE) + if(!(status_flags & CANKNOCKOUT)) + return + amount = GetKnockOutDuration(amount) + var/datum/status_effect/incapacitating/unconscious/S = IsKnockOut() + if(S) + S.adjust_duration(amount) + else if(amount > 0) + S = apply_status_effect(/datum/status_effect/incapacitating/unconscious, amount) + return S /mob/living/proc/Sleeping(amount) sleeping = max(max(sleeping,amount),0) @@ -416,8 +422,6 @@ /mob/living/proc/rejuvenate() heal_all_damage() - SEND_SIGNAL(src, COMSIG_LIVING_REJUVENATED) - // shut down ongoing problems status_flags &= ~PERMANENTLY_DEAD nutrition = NUTRITION_NORMAL @@ -458,6 +462,8 @@ set_stat(CONSCIOUS) regenerate_all_icons() + SEND_SIGNAL(src, COMSIG_LIVING_REJUVENATED) + /mob/living/proc/heal_all_damage() // shut down various types of badness @@ -503,11 +509,3 @@ return face_dir(direction) return ..() - -// Transition handlers. do NOT use this. I mean seriously don't. It's broken. Players love their broken behaviors. -/mob/living/proc/GetStunValueNotADurationDoNotUse() - return stunned -/mob/living/proc/GetKnockDownValueNotADurationDoNotUse() - return knocked_down -/mob/living/proc/GetKnockOutValueNotADurationDoNotUse() - return knocked_out diff --git a/code/modules/mob/living/living_verbs.dm b/code/modules/mob/living/living_verbs.dm index 88167feda3c0..3a97725a6fc4 100644 --- a/code/modules/mob/living/living_verbs.dm +++ b/code/modules/mob/living/living_verbs.dm @@ -1,3 +1,10 @@ +/mob/living/can_resist() + if(next_move > world.time) + return FALSE + if(HAS_TRAIT(src, TRAIT_INCAPACITATED)) + return FALSE + return TRUE + /mob/living/verb/resist() set name = "Resist" set category = "IC" diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 5b190143f5bc..7b0ee6869e80 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -34,9 +34,6 @@ // Gain Power apply_damage(-1, OXY) - // Handle EMP-stun - handle_stunned() - //stage = 1 //if (isRemoteControlling(src)) // Are we not sure what we are? var/blind = 0 diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index b4a6e59e52e2..ac031e74e11f 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -22,7 +22,7 @@ /mob/living/silicon/robot/proc/clamp_values() // set_effect(min(stunned, 30), STUN) - set_effect(min(knocked_out, 30), PARALYZE) +// set_effect(min(knocked_out, 30), PARALYZE) // set_effect(min(knocked_down, 20), WEAKEN) sleeping = 0 apply_damage(0, BRUTE) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 13d7c6d9b2ca..a1ef9032e435 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -93,10 +93,6 @@ if(health > maxHealth) health = maxHealth - handle_stunned() - handle_knocked_down(TRUE) - handle_knocked_out(TRUE) - //Movement if(!client && !stop_automated_movement && wander && !anchored) if(isturf(src.loc) && !resting && !buckled && (mobility_flags & MOBILITY_MOVE)) //This is so it only moves if it's not inside a closet, gentics machine, etc. diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c256f05e74b4..2ed1ee5e126c 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -833,10 +833,11 @@ note dizziness decrements automatically in the mob's Life() proc. selection.forceMove(get_turf(src)) return TRUE +///Can this mob resist (default FALSE) +/mob/proc/can_resist() + return FALSE + /mob/living/proc/handle_statuses() - handle_stunned() - handle_knocked_down() - handle_knocked_out() handle_stuttering() handle_silent() handle_drugged() @@ -845,11 +846,6 @@ note dizziness decrements automatically in the mob's Life() proc. handle_slowed() handle_superslowed() -/mob/living/proc/handle_stunned() - if(stunned) - adjust_effect(-1, STUN) - return stunned - /mob/living/proc/handle_dazed() if(dazed) adjust_effect(-1, DAZE) @@ -865,19 +861,6 @@ note dizziness decrements automatically in the mob's Life() proc. adjust_effect(-1, SUPERSLOW) return superslowed - -/mob/living/proc/handle_knocked_down(bypass_client_check = FALSE) - if(knocked_down && (bypass_client_check || client)) - knocked_down = max(knocked_down-1,0) - knocked_down_callback_check() - return knocked_down - -/mob/living/proc/handle_knocked_out(bypass_client_check = FALSE) - if(knocked_out && (bypass_client_check || client)) - knocked_out = max(knocked_out-1,0) - knocked_out_callback_check() - return knocked_out - /mob/living/proc/handle_stuttering() if(stuttering) stuttering = max(stuttering-1, 0) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 5d1baac3a534..6abe12eee9b1 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -313,9 +313,8 @@ GLOBAL_LIST_INIT(limb_types_by_name, list( /// Returns if the mob is incapacitated and unable to perform general actions /mob/proc/is_mob_incapacitated(ignore_restrained) - // note that stat includes knockout via unconscious - // TODO: re-re-re-figure out if we need TRAIT_FLOORED here or using TRAIT_INCAPACITATED only is acceptable deviance from legacy behavior return (stat || (!ignore_restrained && is_mob_restrained()) || (status_flags & FAKEDEATH) || HAS_TRAIT(src, TRAIT_INCAPACITATED)) + /mob/proc/get_eye_protection() return EYE_PROTECTION_NONE diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 65489944211a..8e9a513fdc88 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -182,10 +182,12 @@ move_delay += MOVE_REDUCTION_DIRECTION_LOCKED // by Geeves mob.cur_speed = Clamp(10/(move_delay + 0.5), MIN_SPEED, MAX_SPEED) - //We are now going to move - moving = TRUE - mob.move_intentionally = TRUE + next_movement = world.time + MINIMAL_MOVEMENT_INTERVAL // We pre-set this now for the crawling case. If crawling do_after fails, next_movement would be set after the attempt end instead of now. + + //Try to crawl first if(living_mob && living_mob.body_position == LYING_DOWN) + if(mob.crawling) + return // Already doing it. //check for them not being a limbless blob (only humans have limbs) if(ishuman(mob)) var/mob/living/carbon/human/human = mob @@ -194,19 +196,17 @@ if(!(human.get_limb(zone))) extremities.Remove(zone) if(extremities.len < 4) - next_movement = world.time + MINIMAL_MOVEMENT_INTERVAL - mob.move_intentionally = FALSE - moving = FALSE return //now crawl mob.crawling = TRUE if(!do_after(mob, 1 SECONDS, INTERRUPT_MOVED|INTERRUPT_UNCONSCIOUS|INTERRUPT_STUNNED|INTERRUPT_RESIST|INTERRUPT_CHANGED_LYING, NO_BUSY_ICON)) mob.crawling = FALSE - next_movement = world.time + MINIMAL_MOVEMENT_INTERVAL - mob.move_intentionally = FALSE - moving = FALSE return + if(!mob.crawling) + return // Crawling interrupted by a "real" move. Do nothing. In theory INTERRUPT_MOVED|INTERRUPT_CHANGED_LYING catches this in do_after. mob.crawling = FALSE + mob.move_intentionally = TRUE + moving = TRUE if(mob.confused) mob.Move(get_step(mob, pick(GLOB.cardinals))) else diff --git a/code/modules/projectiles/guns/specialist/sniper.dm b/code/modules/projectiles/guns/specialist/sniper.dm index 0cd9d8dd16c8..673de1a59602 100644 --- a/code/modules/projectiles/guns/specialist/sniper.dm +++ b/code/modules/projectiles/guns/specialist/sniper.dm @@ -453,7 +453,8 @@ if(PMC_sniper.body_position == STANDING_UP && !istype(PMC_sniper.wear_suit,/obj/item/clothing/suit/storage/marine/smartgunner/veteran/pmc) && !istype(PMC_sniper.wear_suit,/obj/item/clothing/suit/storage/marine/veteran)) PMC_sniper.visible_message(SPAN_WARNING("[PMC_sniper] is blown backwards from the recoil of the [src.name]!"),SPAN_HIGHDANGER("You are knocked prone by the blowback!")) step(PMC_sniper,turn(PMC_sniper.dir,180)) - PMC_sniper.apply_effect(5, WEAKEN) + PMC_sniper.KnockDown(5) + PMC_sniper.Stun(5) //Type 88 //Based on the actual Dragunov DMR rifle. diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index ef265e0b8095..d6191898c8c2 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -96,7 +96,10 @@ starting = null permutated = null path = null + vis_source = null + process_start_turf = null weapon_cause_data = null + bullet_traits = null firer = null QDEL_NULL(bound_beam) SSprojectiles.stop_projectile(src) diff --git a/code/modules/reagents/chemistry_reagents/drink.dm b/code/modules/reagents/chemistry_reagents/drink.dm index 66ce0844556b..9739687dec20 100644 --- a/code/modules/reagents/chemistry_reagents/drink.dm +++ b/code/modules/reagents/chemistry_reagents/drink.dm @@ -555,8 +555,7 @@ /datum/reagent/neurotoxin/on_mob_life(mob/living/carbon/M) . = ..() if(!.) return - if(!HAS_TRAIT(src, TRAIT_FLOORED)) - M.apply_effect(5, WEAKEN) + M.KnockDown(5) if(!data) data = 1 data++ M.dizziness +=6 diff --git a/code/modules/reagents/chemistry_reagents/toxin.dm b/code/modules/reagents/chemistry_reagents/toxin.dm index d9be565a85b2..445918ef284d 100644 --- a/code/modules/reagents/chemistry_reagents/toxin.dm +++ b/code/modules/reagents/chemistry_reagents/toxin.dm @@ -115,7 +115,8 @@ M.status_flags |= FAKEDEATH ADD_TRAIT(M, TRAIT_IMMOBILIZED, FAKEDEATH_TRAIT) M.apply_damage(0.5*REM, OXY) - M.apply_effect(2, WEAKEN) + M.KnockDown(2) + M.Stun(2) M.silent = max(M.silent, 10) /datum/reagent/toxin/zombiepowder/on_delete() diff --git a/code/modules/shuttle/computers/escape_pod_computer.dm b/code/modules/shuttle/computers/escape_pod_computer.dm index ec523747e18d..c45ac7d56102 100644 --- a/code/modules/shuttle/computers/escape_pod_computer.dm +++ b/code/modules/shuttle/computers/escape_pod_computer.dm @@ -97,14 +97,19 @@ unslashable = TRUE unacidable = TRUE time_till_despawn = 6000000 //near infinite so despawn never occurs. + /// The name of the mob who injected the occupant into the pod. If it does not match the occupant, the occupant can leave. + var/injector_name var/being_forced = 0 //Simple variable to prevent sound spam. var/dock_state = STATE_IDLE /obj/structure/machinery/cryopod/evacuation/ex_act(severity) return FALSE -/obj/structure/machinery/cryopod/evacuation/attackby(obj/item/grab/G, mob/user) - if(istype(G)) +/obj/structure/machinery/cryopod/evacuation/attackby(obj/item/grab/the_grab, mob/user) + if(istype(the_grab)) + if(user.is_mob_incapacitated() || !(ishuman(user))) + return FALSE + if(being_forced) to_chat(user, SPAN_WARNING("There's something forcing it open!")) return FALSE @@ -117,16 +122,20 @@ to_chat(user, SPAN_WARNING("The cryo pod is not responding to commands!")) return FALSE - var/mob/living/carbon/human/M = G.grabbed_thing - if(!istype(M)) + var/mob/living/carbon/human/grabbed_mob = the_grab.grabbed_thing + if(!istype(grabbed_mob)) + return FALSE + if(grabbed_mob.stat == DEAD) //This mob is dead + to_chat(user, SPAN_WARNING("[src] immediately rejects [grabbed_mob]. \He passed away!")) return FALSE - visible_message(SPAN_WARNING("[user] starts putting [M.name] into the cryo pod."), null, null, 3) + visible_message(SPAN_WARNING("[user] starts putting [grabbed_mob.name] into the cryo pod."), null, null, 3) if(do_after(user, 20, INTERRUPT_ALL, BUSY_ICON_GENERIC)) - if(!M || !G || !G.grabbed_thing || !G.grabbed_thing.loc || G.grabbed_thing != M) + if(!grabbed_mob || !the_grab || !the_grab.grabbed_thing || !the_grab.grabbed_thing.loc || the_grab.grabbed_thing != grabbed_mob) return FALSE - move_mob_inside(M) + move_mob_inside(grabbed_mob) + injector_name = user.real_name /obj/structure/machinery/cryopod/evacuation/eject() set name = "Eject Pod" @@ -136,17 +145,24 @@ if(!occupant || !usr.stat || usr.is_mob_restrained()) return FALSE - if(occupant) //Once you're in, you cannot exit, and outside forces cannot eject you. - //The occupant is actually automatically ejected once the evac is canceled. - if(occupant != usr) to_chat(usr, SPAN_WARNING("You are unable to eject the occupant unless the evacuation is canceled.")) - add_fingerprint(usr) + //Once you're in, you cannot exit, and outside forces cannot eject you. + //The occupant is actually automatically ejected once the evac is canceled. + if(occupant != usr) + to_chat(usr, SPAN_WARNING("You are unable to eject the occupant unless the evacuation is canceled.")) + return FALSE + if(occupant.real_name != injector_name) + go_out() + else + to_chat(usr, SPAN_WARNING("You are unable to leave the [src] until evacuation completes, or is cancelled!.")) + return FALSE /obj/structure/machinery/cryopod/evacuation/go_out() //When the system ejects the occupant. if(occupant) occupant.forceMove(get_turf(src)) occupant.in_stasis = FALSE occupant = null + injector_name = null icon_state = orient_right ? "body_scanner_open-r" : "body_scanner_open" /obj/structure/machinery/cryopod/evacuation/move_inside() @@ -176,6 +192,7 @@ if(do_after(user, 20, INTERRUPT_NO_NEEDHAND, BUSY_ICON_GENERIC)) user.stop_pulling() move_mob_inside(user) + injector_name = user.real_name /obj/structure/machinery/cryopod/evacuation/attack_alien(mob/living/carbon/xenomorph/user) if(being_forced) diff --git a/code/modules/shuttle/helpers.dm b/code/modules/shuttle/helpers.dm index 6ab5d88da1b7..6b29f155582e 100644 --- a/code/modules/shuttle/helpers.dm +++ b/code/modules/shuttle/helpers.dm @@ -124,14 +124,13 @@ lockdown_door(air) /datum/door_controller/single/proc/bump_at_turf(turf/door_turf) - for(var/mob/blocking_mob in door_turf) - if(isliving(blocking_mob)) - to_chat(blocking_mob, SPAN_HIGHDANGER("You get thrown back as the [label] doors slam shut!")) - blocking_mob.apply_effect(4, WEAKEN) - for(var/turf/target_turf in orange(1, door_turf)) // Forcemove to a non shuttle turf - if(!istype(target_turf, /turf/open/shuttle) && !istype(target_turf, /turf/closed/shuttle)) - blocking_mob.forceMove(target_turf) - break + for(var/mob/living/blocking_mob in door_turf) + to_chat(blocking_mob, SPAN_HIGHDANGER("You get thrown back as the [label] doors slam shut!")) + blocking_mob.KnockDown(4) + for(var/turf/target_turf in orange(1, door_turf)) // Forcemove to a non shuttle turf + if(!istype(target_turf, /turf/open/shuttle) && !istype(target_turf, /turf/closed/shuttle)) + blocking_mob.forceMove(target_turf) + break /datum/door_controller/proc/lockdown_door(obj/structure/machinery/door/target) if(istype(target, /obj/structure/machinery/door/airlock)) diff --git a/code/modules/shuttle/shuttles/ert.dm b/code/modules/shuttle/shuttles/ert.dm index 1760caf3d87c..b619645c501c 100644 --- a/code/modules/shuttle/shuttles/ert.dm +++ b/code/modules/shuttle/shuttles/ert.dm @@ -61,14 +61,13 @@ INVOKE_ASYNC(src, PROC_REF(lockdown_door_launch), door) /obj/docking_port/mobile/emergency_response/proc/lockdown_door_launch(obj/structure/machinery/door/airlock/air) - for(var/mob/blocking_mob in air.loc) // Bump all mobs outta the way for outside airlocks of shuttles - if(isliving(blocking_mob)) - to_chat(blocking_mob, SPAN_HIGHDANGER("You get thrown back as the dropship doors slam shut!")) - blocking_mob.apply_effect(4, WEAKEN) - for(var/turf/target_turf in orange(1, air)) // Forcemove to a non shuttle turf - if(!istype(target_turf, /turf/open/shuttle) && !istype(target_turf, /turf/closed/shuttle)) - blocking_mob.forceMove(target_turf) - break + for(var/mob/living/blocking_mob in air.loc) // Bump all mobs outta the way for outside airlocks of shuttles + to_chat(blocking_mob, SPAN_HIGHDANGER("You get thrown back as the dropship doors slam shut!")) + blocking_mob.KnockDown(4) + for(var/turf/target_turf in orange(1, air)) // Forcemove to a non shuttle turf + if(!istype(target_turf, /turf/open/shuttle) && !istype(target_turf, /turf/closed/shuttle)) + blocking_mob.forceMove(target_turf) + break lockdown_door(air) /obj/docking_port/mobile/emergency_response/proc/lockdown_door(obj/structure/machinery/door/airlock/air) diff --git a/code/modules/shuttles/marine_ferry.dm b/code/modules/shuttles/marine_ferry.dm index 364d74824099..82c5b8e4403d 100644 --- a/code/modules/shuttles/marine_ferry.dm +++ b/code/modules/shuttles/marine_ferry.dm @@ -590,14 +590,13 @@ /datum/shuttle/ferry/marine/force_close_launch(obj/structure/machinery/door/AL) if(!iselevator) - for(var/mob/M in AL.loc) // Bump all mobs outta the way for outside airlocks of shuttles - if(isliving(M)) - to_chat(M, SPAN_HIGHDANGER("You get thrown back as the dropship doors slam shut!")) - M.apply_effect(4, WEAKEN) - for(var/turf/T in orange(1, AL)) // Forcemove to a non shuttle turf - if(!istype(T, /turf/open/shuttle) && !istype(T, /turf/closed/shuttle)) - M.forceMove(T) - break + for(var/mob/living/M in AL.loc) // Bump all mobs outta the way for outside airlocks of shuttles + to_chat(M, SPAN_HIGHDANGER("You get thrown back as the dropship doors slam shut!")) + M.KnockDown(4) + for(var/turf/T in orange(1, AL)) // Forcemove to a non shuttle turf + if(!istype(T, /turf/open/shuttle) && !istype(T, /turf/closed/shuttle)) + M.forceMove(T) + break return ..() // Sleeps /datum/shuttle/ferry/marine/open_doors(list/L) diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index a5911d18b3a2..dc6f3a682b24 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -29,8 +29,6 @@ var/iselevator = 0 //Used to remove some shuttle related procs and texts to make it compatible with elevators var/almayerelevator = 0 //elevators on the almayer without limitations - var/list/last_passangers = list() //list of living creatures that were our last passengers - var/require_link = FALSE var/linked = FALSE var/ambience_muffle = MUFFLE_HIGH @@ -202,9 +200,7 @@ origin.move_contents_to(destination, direction=direction) - last_passangers.Cut() - for(var/mob/M in destination) - last_passangers += M + for(var/mob/living/M in destination) if(M.client) spawn(0) if(M.buckled && !iselevator) @@ -215,17 +211,18 @@ shake_camera(M, iselevator? 2 : 10, 1) if(istype(M, /mob/living/carbon) && !iselevator) if(!M.buckled) - M.apply_effect(3, WEAKEN) + M.Stun(3) + M.KnockDown(3) for(var/turf/T in origin) // WOW so hacky - who cares. Abby if(iselevator) if(istype(T,/turf/open/space)) if(is_mainship_level(T.z)) - new /turf/open/floor/almayer/empty(T) + T.ChangeTurf(/turf/open/floor/almayer/empty) else - new /turf/open/gm/empty(T) + T.ChangeTurf(/turf/open/gm/empty) else if(istype(T,/turf/open/space)) - new /turf/open/floor/plating(T) + T.ChangeTurf(/turf/open/floor/plating) return diff --git a/code/modules/surgery/surgery_steps.dm b/code/modules/surgery/surgery_steps.dm index b58c62b57f68..9e1450868d1c 100644 --- a/code/modules/surgery/surgery_steps.dm +++ b/code/modules/surgery/surgery_steps.dm @@ -92,6 +92,7 @@ affected_limb, or location vars. Also, in that case there may be a wait between var/self_surgery var/tool_modifier var/surface_modifier + var/failure_penalties = 0 //Skill speed modifier. step_duration *= user.get_skill_duration_multiplier(SKILL_SURGERY) @@ -134,16 +135,22 @@ affected_limb, or location vars. Also, in that case there may be a wait between message += "this tool is[pick("n't ideal", " not the best")]" if(SURGERY_TOOL_MULT_SUBSTITUTE) message += "this tool is[pick("n't suitable", " a bad fit", " difficult to use")]" - if(SURGERY_TOOL_MULT_BAD_SUBSTITUTE, SURGERY_TOOL_MULT_AWFUL) + if(SURGERY_TOOL_MULT_BAD_SUBSTITUTE) message += "this tool is [pick("awful", "barely usable")]" + failure_penalties += 1 + if(SURGERY_TOOL_MULT_AWFUL) + message += "this tool is [pick("awful", "barely usable")]" + failure_penalties += 2 switch(surface_modifier) if(SURGERY_SURFACE_MULT_ADEQUATE) message += "[pick("it isn't easy, working", "it's tricky to perform complex surgeries", "this would be quicker if you weren't working")] [pick("in the field", "under these conditions", "without a proper surgical theatre")]" if(SURGERY_SURFACE_MULT_UNSUITED) message += "[pick("it's difficult to work", "it's slow going, working", "you need to take your time")] in these [pick("primitive", "rough", "crude")] conditions" + failure_penalties += 1 if(SURGERY_SURFACE_MULT_AWFUL) message += "[pick("you need to work slowly and carefully", "you need to be very careful", "this is delicate work, especially")] [pick("in these", "under such")] [pick("terrible", "awful", "utterly unsuitable")] conditions" + failure_penalties += 2 if(length(message)) to_chat(user, SPAN_WARNING("[capitalize(english_list(message, final_comma_text = ","))].")) @@ -151,6 +158,20 @@ affected_limb, or location vars. Also, in that case there may be a wait between var/advance //Whether to continue to the next step afterwards. var/pain_failure_chance = max(0, (target.pain?.feels_pain ? surgery.pain_reduction_required - target.pain.reduction_pain : 0) * 2 - human_modifiers["pain_reduction"]) //Each extra pain unit increases the chance by 2 + // Skill compensation for difficult conditions/tools + if(skillcheck(user, SKILL_SURGERY, SKILL_SURGERY_EXPERT)) + failure_penalties -= 2 // will ultimately be -3 + if(skillcheck(user, SKILL_SURGERY, SKILL_SURGERY_TRAINED)) + failure_penalties -= 1 + + var/surgery_failure_chance = SURGERY_FAILURE_IMPOSSIBLE + if(failure_penalties == 1) + surgery_failure_chance = SURGERY_FAILURE_UNLIKELY + else if(failure_penalties == 2) + surgery_failure_chance = SURGERY_FAILURE_POSSIBLE + else if(failure_penalties > 2) + surgery_failure_chance = SURGERY_FAILURE_LIKELY + play_preop_sound(user, target, target_zone, tool, surgery) if(tool?.flags_item & ANIMATED_SURGICAL_TOOL) //If we have an animated tool sprite, run it while we do any do_afters. @@ -171,6 +192,17 @@ affected_limb, or location vars. Also, in that case there may be a wait between target.emote("pain") play_failure_sound(user, target, target_zone, tool, surgery) + else if(prob(surgery_failure_chance)) + do_after(user, max(rand(step_duration * 0.1, step_duration * 0.5), 0.5), INTERRUPT_ALL|INTERRUPT_DIFF_INTENT, + BUSY_ICON_FRIENDLY, target, INTERRUPT_MOVED, BUSY_ICON_MEDICAL) //Brief do_after so that the interrupt doesn't happen instantly. + user.visible_message(SPAN_DANGER("[user] is struggling to perform surgery."), + SPAN_DANGER("You are struggling to perform the surgery with these tools and conditions!")) + if(failure(user, target, target_zone, tool, tool_type, surgery)) //Failure returns TRUE if the step should complete anyway. + advance = TRUE + target.emote("pain") + play_failure_sound(user, target, target_zone, tool, surgery) + msg_admin_niche("[user] failed a [surgery] step on [target] because of [failure_penalties] failure possibility penalties ([surgery_failure_chance]%)") + else //Help intent. if(do_after(user, step_duration, INTERRUPT_ALL|INTERRUPT_DIFF_INTENT, BUSY_ICON_FRIENDLY,target,INTERRUPT_MOVED,BUSY_ICON_MEDICAL)) success(user, target, target_zone, tool, tool_type, surgery) diff --git a/colonialmarines.dme b/colonialmarines.dme index 27acc51dc015..64f1338244b4 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -31,6 +31,7 @@ #include "code\__DEFINES\_tick.dm" #include "code\__DEFINES\access.dm" #include "code\__DEFINES\admin.dm" +#include "code\__DEFINES\alerts.dm" #include "code\__DEFINES\ARES.dm" #include "code\__DEFINES\assert.dm" #include "code\__DEFINES\atmospherics.dm" @@ -98,6 +99,7 @@ #include "code\__DEFINES\speech_channels.dm" #include "code\__DEFINES\stamina.dm" #include "code\__DEFINES\stats.dm" +#include "code\__DEFINES\status_effects.dm" #include "code\__DEFINES\STUI.dm" #include "code\__DEFINES\subsystems.dm" #include "code\__DEFINES\supply.dm" @@ -307,10 +309,12 @@ #include "code\controllers\subsystem\init\lobby_art.dm" #include "code\controllers\subsystem\processing\defprocess.dm" #include "code\controllers\subsystem\processing\effects.dm" +#include "code\controllers\subsystem\processing\fasteffects.dm" #include "code\controllers\subsystem\processing\fastobj.dm" #include "code\controllers\subsystem\processing\hive_status.dm" #include "code\controllers\subsystem\processing\obj_tab_items.dm" #include "code\controllers\subsystem\processing\objects.dm" +#include "code\controllers\subsystem\processing\oldeffects.dm" #include "code\controllers\subsystem\processing\processing.dm" #include "code\controllers\subsystem\processing\shield_pillar.dm" #include "code\controllers\subsystem\processing\slowobj.dm" @@ -634,6 +638,12 @@ #include "code\datums\statistics\random_facts\kills_fact.dm" #include "code\datums\statistics\random_facts\random_fact.dm" #include "code\datums\statistics\random_facts\revives_fact.dm" +#include "code\datums\status_effects\_status_effect.dm" +#include "code\datums\status_effects\_status_effect_helpers.dm" +#include "code\datums\status_effects\grouped_effect.dm" +#include "code\datums\status_effects\limited_effect.dm" +#include "code\datums\status_effects\stacking_effect.dm" +#include "code\datums\status_effects\debuffs\debuffs.dm" #include "code\datums\supply_packs\_supply_packs.dm" #include "code\datums\supply_packs\ammo.dm" #include "code\datums\supply_packs\attachments.dm" diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml index 06d79b8d8bdf..b0bde6fe0753 100644 --- a/html/changelogs/archive/2023-12.yml +++ b/html/changelogs/archive/2023-12.yml @@ -340,3 +340,66 @@ - maptweak: Numerous Fixes for new brig cuberound: - balance: DS doorgun can shoot over cades +2023-12-18: + Huffie56: + - bugfix: added landing zone camera on trijent. + - bugfix: fixed landing zone camera on all map in rotation. + sleepynecrons: + - imageadd: marine snow uniforms and armors given a new look +2023-12-19: + Drathek: + - balance: Added the possibility of surgery steps failing based on tool and surface + suitability compensated by surgery skill. + Huffie56: + - bugfix: fix a nightmare insert that had a wall and a door on same tile. + NateDross: + - bugfix: Requisitions elevator lighting fix + NessiePendragon: + - rscadd: Added new sprites for Warrior. + PurpleCIoud: + - imageadd: added chocolate bar new sprite + - imagedel: deleted old chocolate bar sprite + SabreML: + - rscadd: Updated the 'help' message for xeno special structure construction. + - qol: Added a 'remaining' counter when constructing special structures to let players + know how many can still be built. + - qol: Added a 'Ghost' button for dead xenomorphs. + realforest2001: + - rscadd: Added a proc for comparing the registered name of an ID, to the real name + of a mob. Also checks registered_ref if one exists. + - rscadd: Evacuation can no longer be cancelled without passing above check. + - rscadd: People forced into escape-pod stasis bays against their wishes can now + eject themselves. + - bugfix: Xenos can no longer force humans into escape-pod stasis bays. + - bugfix: Escape-pod stasis bays no longer accept corpses. + stalkerino: + - balance: fixes the balance of the game by making hair gradient trait free +2023-12-20: + Birdtalon, Fira: + - bugfix: Fixes hive UI crash upon pylon giving new larva. + Contrabang: + - bugfix: Matches now do burn damage instead of brute, when you accidently burn + your own hand. + InsaneRed: + - spellcheck: Converted more "YOU" to "WE" for xenomorphs. + LTNTS: + - qol: makes suspect nardo gray + fira: + - rscadd: Added Buckled, Handcuffed and Legcuffed screen alerts + - code_imp: Ported /tg/ status effects backend, modified with timers to let effects + end at appropriate time + - code_imp: Stun, Knockdown and Knockout now use the new effects backend + - balance: Due to backend change, all KO/KD/Stuns may behave differently timing + wise. This is of course subject to adjustments. + - balance: Endurance is now set at 8% effect duration reduction per level above + 1. However it now compounds with species bonus. Feel free to adjust. + - balance: Knockdowns are not inherently incapacitating anymore and many sources + of it have been updated to also stun to make up for it. + - bugfix: KO/KD/Stuns do not artificially and randomly ''stack'' due to incorrect + timer offset calculation anymore. + - bugfix: Stuns now correctly apply Stun reduction values instead of Knockdown reductions. + - bugfix: Crawling can now be interrupted by a normal move, if you are fit enough + to do so. + realforest2001: + - maptweak: Various doors around the Almayer will now close their opposites for + better security. diff --git a/icons/mob/hud/actions.dmi b/icons/mob/hud/actions.dmi index 9021db895eb7..843d38a67b86 100644 Binary files a/icons/mob/hud/actions.dmi and b/icons/mob/hud/actions.dmi differ diff --git a/icons/mob/humans/onmob/suit_1.dmi b/icons/mob/humans/onmob/suit_1.dmi index 636bbf8b9df0..a230aa7e4300 100644 Binary files a/icons/mob/humans/onmob/suit_1.dmi and b/icons/mob/humans/onmob/suit_1.dmi differ diff --git a/icons/mob/humans/onmob/uniform_0.dmi b/icons/mob/humans/onmob/uniform_0.dmi index 40305b9413b0..a140c4db6d8b 100644 Binary files a/icons/mob/humans/onmob/uniform_0.dmi and b/icons/mob/humans/onmob/uniform_0.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index af61a47aa885..21cc40876fbc 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/mob/xenos/warrior.dmi b/icons/mob/xenos/warrior.dmi index 1211da5ac188..e871f7749145 100644 Binary files a/icons/mob/xenos/warrior.dmi and b/icons/mob/xenos/warrior.dmi differ diff --git a/icons/obj/items/clothing/cm_suits.dmi b/icons/obj/items/clothing/cm_suits.dmi index 162d66a2f085..7db2158ee5bf 100644 Binary files a/icons/obj/items/clothing/cm_suits.dmi and b/icons/obj/items/clothing/cm_suits.dmi differ diff --git a/icons/obj/items/clothing/uniforms.dmi b/icons/obj/items/clothing/uniforms.dmi index f05eb3671f91..8eb3d03d68c7 100644 Binary files a/icons/obj/items/clothing/uniforms.dmi and b/icons/obj/items/clothing/uniforms.dmi differ diff --git a/icons/obj/items/food.dmi b/icons/obj/items/food.dmi index 54de858ffc9c..9e746bb62656 100644 Binary files a/icons/obj/items/food.dmi and b/icons/obj/items/food.dmi differ diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm index 6a90f35e4de3..48f7f9089399 100644 --- a/maps/map_files/BigRed/BigRed.dmm +++ b/maps/map_files/BigRed/BigRed.dmm @@ -45482,8 +45482,7 @@ aae aaf aai aah -aah -aah +aaF aah aah aah @@ -45501,6 +45500,7 @@ aah aah aah aah +aaF aah aeh aaf @@ -45700,7 +45700,6 @@ aaf aaj aah aah -aaF aah aah aah @@ -45716,7 +45715,8 @@ aah aah aah aah -aaF +aah +aah aah aah aei @@ -46884,7 +46884,7 @@ aSB bgX bhu bie -bie +bje bie bie bie @@ -46902,7 +46902,7 @@ bie bie bie bie -bie +bje bie bsb eWd @@ -47102,7 +47102,7 @@ bgX bhv bie bie -bje +bie bie bie bie @@ -47118,7 +47118,7 @@ bie bie bjo bie -bje +bie bie bie bsc @@ -47436,7 +47436,6 @@ aaf aaj aah aah -aaF aah aah aah @@ -47452,7 +47451,8 @@ aah aah aah aah -aaF +aah +aah aah aah aei @@ -47652,8 +47652,7 @@ aae aaf aak aah -aah -aah +aaF aah aah aah @@ -47671,6 +47670,7 @@ aah aah aah aah +aaF aah aej aaf @@ -48838,7 +48838,6 @@ eWd bhv bie bie -bje bie bie bie @@ -48854,7 +48853,8 @@ bie bie bie bie -bje +bie +bie bie bie bsc @@ -49054,7 +49054,7 @@ aSB bgX bhw bie -bie +bje bie bie bie @@ -49072,7 +49072,7 @@ bie bie bie bie -bie +bje bie bsd eWd diff --git a/maps/map_files/DesertDam/Desert_Dam.dmm b/maps/map_files/DesertDam/Desert_Dam.dmm index 4bf4d0e7a88c..66684b33731c 100644 --- a/maps/map_files/DesertDam/Desert_Dam.dmm +++ b/maps/map_files/DesertDam/Desert_Dam.dmm @@ -64577,6 +64577,10 @@ /obj/structure/desertdam/decals/road_edge, /turf/open/asphalt, /area/desert_dam/exterior/valley/valley_labs) +"tcB" = ( +/obj/structure/machinery/camera/autoname/lz_camera, +/turf/open/floor/plating, +/area/desert_dam/exterior/landing_pad_two) "tdf" = ( /obj/structure/surface/table, /obj/item/folder/yellow, @@ -65007,6 +65011,10 @@ icon_state = "dirt2" }, /area/desert_dam/exterior/valley/valley_crashsite) +"uHT" = ( +/obj/structure/machinery/camera/autoname/lz_camera, +/turf/open/floor/plating, +/area/desert_dam/exterior/landing_pad_one) "uKo" = ( /obj/structure/platform/mineral/sandstone/runed{ dir = 4 @@ -70120,6 +70128,7 @@ dTs cDb cDK cDY +tcB cDY cDY cDY @@ -70128,6 +70137,7 @@ cDY cDY cDY cDY +tcB cDY cDY cDY @@ -70136,9 +70146,7 @@ cDY cDY cDY cDY -cDY -cDY -cDY +tcB cDY cMD cBS @@ -72460,6 +72468,7 @@ cDc cDb cDV cDY +tcB cDY cDY cDY @@ -72468,6 +72477,7 @@ cDY cDY cDY cDY +tcB cDY cDY cDY @@ -72476,9 +72486,7 @@ cDY cDY cDY cDY -cDY -cDY -cDY +tcB cDY cNb cBS @@ -72982,6 +72990,7 @@ aUD aVj acI aWh +uHT aWh aWh aWh @@ -72990,6 +72999,7 @@ aWh aWh aWh aWh +uHT aWh aWh aWh @@ -72998,9 +73008,7 @@ aWh aWh aWh aWh -aWh -aWh -aWh +uHT aWh bAF aVi @@ -75322,6 +75330,7 @@ aUD aVg acJ aWh +uHT aWh aWh aWh @@ -75330,6 +75339,7 @@ aWh aWh aWh aWh +uHT aWh aWh aWh @@ -75338,9 +75348,7 @@ aWh aWh aWh aWh -aWh -aWh -aWh +uHT aWh bFg aVi diff --git a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm index bffe3f990722..b37d42f1a55f 100644 --- a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm +++ b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm @@ -73029,7 +73029,7 @@ nZB nZB iTt wQN -wSm +xnU wSm wSm wSm @@ -73047,7 +73047,7 @@ wSm wSm wSm wSm -wSm +xnU wQN eAM wSm @@ -73242,7 +73242,6 @@ nZB gBe wSm wSm -xnU wSm wSm wSm @@ -73258,7 +73257,8 @@ wSm wSm wSm wSm -xnU +wSm +wSm wSm wSm eSF @@ -74938,7 +74938,6 @@ nZB gBe wSm wSm -xnU wSm wSm wSm @@ -74954,7 +74953,8 @@ wSm wSm wSm wSm -xnU +wSm +wSm wSm wSm eSF @@ -75149,7 +75149,7 @@ nZB nZB bne wQN -wSm +xnU wSm wSm wSm @@ -75167,7 +75167,7 @@ wSm wSm wSm wSm -wSm +xnU wQN xrH wSm @@ -88846,7 +88846,7 @@ qaL nGZ uNs iOa -xeO +cCx xeO xeO xeO @@ -88864,7 +88864,7 @@ xeO xeO xeO xeO -xeO +cCx iOa eLB uYi @@ -89059,7 +89059,6 @@ pYD ehy xeO xeO -cCx xeO xeO xeO @@ -89075,7 +89074,8 @@ xeO xeO xeO xeO -cCx +xeO +xeO xeO xeO oGR @@ -90755,7 +90755,6 @@ pqY ehy doA xeO -cCx xeO xeO xeO @@ -90771,7 +90770,8 @@ xeO xeO xeO xeO -cCx +xeO +xeO xeO xeO kIh @@ -90966,7 +90966,7 @@ qaL nGZ aTe iOa -xeO +cCx xeO xeO xeO @@ -90984,7 +90984,7 @@ xeO xeO xeO xeO -xeO +cCx iOa rrD uYi diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm index 2e1ebb3ea204..d178ca9faddf 100644 --- a/maps/map_files/Kutjevo/Kutjevo.dmm +++ b/maps/map_files/Kutjevo/Kutjevo.dmm @@ -20100,10 +20100,10 @@ wGH cWV exI nbV -nbV umo nbV nbV +nbV lAI lAI lAI @@ -21172,10 +21172,10 @@ sVF xBm wvX hzN -hzN wqk hzN hzN +hzN ppX ppX ppX @@ -21770,10 +21770,10 @@ wGH cWV uhO bbc -nbV umo nbV nbV +nbV lAI lAI lAI @@ -22842,10 +22842,10 @@ oJE xBm saK hzN -hzN wqk hzN hzN +hzN ppX ppX ppX diff --git a/maps/map_files/Kutjevo/sprinkles/35.communications.dmm b/maps/map_files/Kutjevo/sprinkles/35.communications.dmm index bc89cfab0105..d172399ca564 100644 --- a/maps/map_files/Kutjevo/sprinkles/35.communications.dmm +++ b/maps/map_files/Kutjevo/sprinkles/35.communications.dmm @@ -306,7 +306,7 @@ dir = 1; req_one_access = null }, -/turf/closed/wall/kutjevo/colony, +/turf/open/floor/plating/kutjevo, /area/template_noop) "LG" = ( /obj/structure/fence, diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm index 9c84577bbbdd..ccaf5f201b6f 100644 --- a/maps/map_files/LV624/LV624.dmm +++ b/maps/map_files/LV624/LV624.dmm @@ -31401,7 +31401,7 @@ aZP aOB oOB aRg -aRg +aCi aRg aRg aRg @@ -31419,7 +31419,7 @@ aRg aRg aRg aRg -aRg +aCi aRg odw aRg @@ -31631,7 +31631,6 @@ aTv aRg aRg aRg -aCi aRg aRg aRg @@ -31646,7 +31645,8 @@ aRg aRg aRg aRg -aCi +aRg +aRg aKO aRg aEw @@ -33455,7 +33455,7 @@ aTv aRg aRg aRg -aCi +aRg aRg aRg aRg @@ -33470,7 +33470,7 @@ aRg aRg aRg aRg -aCi +aRg aRg aRg aEw @@ -33681,7 +33681,7 @@ aZP aOB kvE aRg -aRg +aCi aRg aRg aRg @@ -33699,7 +33699,7 @@ aRg aRg aRg aRg -aRg +aCi aRg byK aRg @@ -58084,7 +58084,6 @@ aGz aGz aDJ ank -ank ano ank ank @@ -58093,6 +58092,7 @@ ank ank ank ank +ank ano ank ank @@ -60364,7 +60364,6 @@ btF aDi aDL ank -ank ano ank ank @@ -60373,6 +60372,7 @@ ank ank ank ank +ank ano ank ank diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm index 656c4a7f48b1..a56328df85f0 100644 --- a/maps/map_files/New_Varadero/New_Varadero.dmm +++ b/maps/map_files/New_Varadero/New_Varadero.dmm @@ -86,10 +86,6 @@ icon_state = "multi_tiles" }, /area/varadero/interior/medical) -"ade" = ( -/obj/structure/machinery/camera/autoname/lz_camera, -/turf/open/gm/dirt, -/area/varadero/exterior/lz2_near) "adw" = ( /turf/closed/wall/r_wall, /area/varadero/interior/cargo) @@ -12292,14 +12288,6 @@ icon_state = "asteroidfloor" }, /area/varadero/interior/comms1) -"ias" = ( -/obj/structure/machinery/camera/autoname/lz_camera, -/obj/structure/machinery/landinglight/ds1/spoke{ - pixel_y = -5; - pixel_x = 13 - }, -/turf/open/auto_turf/sand_white/layer1, -/area/varadero/exterior/lz2_near) "iat" = ( /obj/structure/barricade/wooden{ dir = 1 @@ -18127,6 +18115,14 @@ /obj/effect/spawner/random/attachment, /turf/open/floor/carpet, /area/varadero/interior/administration) +"lIW" = ( +/obj/structure/machinery/landinglight/ds1/spoke{ + pixel_y = -5; + pixel_x = 13 + }, +/obj/structure/machinery/camera/autoname/lz_camera, +/turf/open/auto_turf/sand_white/layer1, +/area/varadero/exterior/lz2_near) "lJo" = ( /obj/structure/machinery/light{ dir = 8 @@ -28324,6 +28320,14 @@ }, /turf/open/floor/wood, /area/varadero/interior/beach_bar) +"sbP" = ( +/obj/structure/machinery/landinglight/ds1/spoke{ + pixel_y = -5; + pixel_x = -13 + }, +/obj/structure/machinery/camera/autoname/lz_camera, +/turf/open/auto_turf/sand_white/layer1, +/area/varadero/exterior/lz2_near) "sbX" = ( /obj/structure/flora/pottedplant{ icon_state = "pottedplant_22"; @@ -36538,14 +36542,6 @@ icon_state = "blue" }, /area/varadero/interior/technical_storage) -"xpL" = ( -/obj/structure/machinery/camera/autoname/lz_camera, -/obj/structure/machinery/landinglight/ds1/spoke{ - pixel_y = -5; - pixel_x = -13 - }, -/turf/open/auto_turf/sand_white/layer1, -/area/varadero/exterior/lz2_near) "xpP" = ( /turf/closed/wall/r_wall, /area/varadero/interior/comms1) @@ -49964,8 +49960,7 @@ wMw pbp sHV bZU -bZU -bZU +rtm bZU bZU bZU @@ -49983,6 +49978,7 @@ bZU bZU bZU bZU +rtm bZU xsH mrC @@ -50148,7 +50144,7 @@ irk bZU bZU bZU -rtm +bZU bZU bZU bZU @@ -50163,7 +50159,7 @@ bZU bZU bZU qOh -rtm +bZU bZU bZU bwP @@ -51604,7 +51600,7 @@ irk bZU bZU bZU -rtm +bZU bZU bZU bZU @@ -51619,7 +51615,7 @@ qOh bZU bZU bZU -rtm +bZU bZU bZU bwP @@ -51784,8 +51780,7 @@ wMw pbp cYZ bZU -bZU -bZU +rtm bZU bZU bZU @@ -51803,6 +51798,7 @@ bZU bZU bZU bZU +rtm bZU miF mrC @@ -63426,7 +63422,7 @@ wlB lTg lTg lTg -lTg +emP pXT lTg lTg @@ -63435,16 +63431,16 @@ wlB wlB lTg lTg -lTg emP lTg +lTg wlB wlB wlB wlB wlB lTg -pXT +lIW pXT rhu wlB @@ -63610,7 +63606,7 @@ eia lTg lTg lTg -ade +wlB wlB wlB wlB @@ -63625,7 +63621,7 @@ wlB wlB wlB nFX -ias +pXT lTg wlB lTg @@ -65066,7 +65062,7 @@ lTg lTg lTg lTg -ade +wlB wlB wlB wlB @@ -65081,7 +65077,7 @@ nFX wlB wlB wlB -xpL +uHD lTg wlB lTg @@ -65246,7 +65242,7 @@ lTg lTg wlB lTg -lTg +emP uHD lTg lTg @@ -65255,16 +65251,16 @@ wlB wlB lTg lTg -lTg emP lTg +lTg wlB wlB wlB wlB wlB lTg -uHD +sbP uHD lTg lTg diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index d8e05518eb7e..87cd78ddbd45 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -1058,12 +1058,6 @@ icon_state = "silver" }, /area/almayer/hallways/repair_bay) -"adm" = ( -/turf/open/floor/almayer{ - dir = 1; - icon_state = "redcorner" - }, -/area/almayer/shipboard/brig/processing) "ado" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 8; @@ -2953,6 +2947,12 @@ /obj/structure/window/framed/almayer, /turf/open/floor/plating, /area/almayer/hull/upper_hull/u_a_s) +"ake" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_f_s) "akf" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -7494,20 +7494,6 @@ icon_state = "silvercorner" }, /area/almayer/command/cic) -"ayt" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "CIC Lockdown"; - name = "\improper Combat Information Center Blast Door" - }, -/obj/structure/machinery/door/airlock/almayer/command/reinforced{ - name = "\improper Combat Information Center" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/command/cic) "ayu" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 4 @@ -8086,27 +8072,6 @@ icon_state = "silvercorner" }, /area/almayer/command/cic) -"aAl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/machinery/door/airlock/almayer/command/reinforced{ - id_tag = "cic_exterior"; - name = "\improper Combat Information Center" - }, -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "CIC Lockdown"; - name = "\improper Combat Information Center Blast Door" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/command/cic) "aAq" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -9028,6 +8993,16 @@ icon_state = "silver" }, /area/almayer/command/cic) +"aDM" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/pipes/standard/simple/hidden/supply, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/lobby) "aDO" = ( /turf/open/floor/almayer{ dir = 8; @@ -10114,6 +10089,22 @@ icon_state = "redfull" }, /area/almayer/engineering/upper_engineering) +"aIW" = ( +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + dir = 2; + id = "Warden Office Shutters"; + name = "\improper Privacy Shutters" + }, +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + dir = 1; + name = "\improper Warden's Office"; + closeOtherId = "brigwarden" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/chief_mp_office) "aIX" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -10495,6 +10486,10 @@ icon_state = "red" }, /area/almayer/hallways/aft_hallway) +"aKE" = ( +/obj/structure/machinery/light, +/turf/open/floor/almayer, +/area/almayer/living/numbertwobunks) "aKF" = ( /obj/structure/machinery/status_display{ pixel_y = 30 @@ -11043,15 +11038,6 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/starboard_hallway) -"aNo" = ( -/obj/structure/machinery/firealarm{ - pixel_y = 28 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "aNr" = ( /obj/effect/landmark/start/chef, /turf/open/floor/plating/plating_catwalk, @@ -11540,6 +11526,15 @@ icon_state = "test_floor4" }, /area/almayer/hallways/starboard_umbilical) +"aQb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 5 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/cic_hallway) "aQg" = ( /obj/structure/bed/chair/office/dark{ dir = 8; @@ -12199,13 +12194,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/command/cichallway) -"aTd" = ( -/obj/structure/closet/secure_closet/brig, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "redcorner" - }, -/area/almayer/shipboard/brig/processing) "aTf" = ( /obj/structure/platform{ dir = 8 @@ -12802,6 +12790,23 @@ icon_state = "orange" }, /area/almayer/hallways/stern_hallway) +"aWb" = ( +/obj/structure/machinery/computer/working_joe{ + dir = 4; + pixel_x = -17 + }, +/obj/structure/machinery/door_control/brbutton{ + id = "engie_store"; + name = "Emergency Storage"; + pixel_x = -2; + pixel_y = 26; + req_one_access_txt = "6" + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "orangecorner" + }, +/area/almayer/engineering/ce_room) "aWc" = ( /obj/structure/sign/safety/maint{ pixel_x = 8; @@ -15217,6 +15222,21 @@ "bjg" = ( /turf/open/floor/almayer, /area/almayer/engineering/lower_engineering) +"bjk" = ( +/obj/structure/machinery/door_control{ + id = "perma_lockdown_2"; + name = "Maint Lockdown Shutters"; + pixel_y = -20; + req_one_access_txt = "24;31" + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/sign/safety/bulkhead_door{ + pixel_y = -34 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/perma) "bjl" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -16204,9 +16224,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/operating_room_four) -"bom" = ( -/turf/closed/wall/almayer/reinforced, -/area/almayer/shipboard/brig/cic_hallway) "boq" = ( /obj/structure/bed/chair/comfy/alpha, /turf/open/floor/almayer{ @@ -16311,27 +16328,6 @@ icon_state = "plate" }, /area/almayer/engineering/engineering_workshop) -"boT" = ( -/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ - name = "\improper Warden's Office" - }, -/obj/structure/machinery/door/poddoor/shutters/almayer/open{ - dir = 4; - id = "Warden Office Shutters"; - name = "\improper Privacy Shutters" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 8 - }, -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "courtyard_cells"; - name = "\improper Courtyard Lockdown Shutter" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/chief_mp_office) "boU" = ( /obj/structure/platform{ dir = 4; @@ -17640,16 +17636,6 @@ icon_state = "test_floor4" }, /area/almayer/hallways/starboard_umbilical) -"bvY" = ( -/obj/structure/machinery/power/apc/almayer{ - dir = 4 - }, -/obj/structure/sign/safety/rewire{ - pixel_x = 7; - pixel_y = -30 - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/cells) "bwc" = ( /obj/structure/barricade/handrail{ dir = 8 @@ -17756,13 +17742,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/hallways/hangar) -"bwE" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/cic_hallway) "bwF" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -18010,6 +17989,23 @@ icon_state = "plate" }, /area/almayer/engineering/lower_engineering) +"bxQ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 1 + }, +/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + dir = 1; + name = "\improper Brig Prison Yard And Offices"; + closeOtherId = "brigcells" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/processing) "bxX" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -21205,6 +21201,14 @@ icon_state = "green" }, /area/almayer/squads/req) +"bMn" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_21" + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/numbertwobunks) "bMq" = ( /obj/structure/machinery/cm_vending/sorted/cargo_guns/squad_prep, /obj/structure/machinery/light{ @@ -22852,6 +22856,18 @@ icon_state = "plating" }, /area/almayer/engineering/engine_core) +"bTk" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ + name = "\improper Brig Lobby"; + closeOtherId = "brignorth" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/lobby) "bTl" = ( /obj/structure/machinery/power/fusion_engine{ name = "\improper S-52 fusion reactor 4" @@ -23450,6 +23466,18 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) +"bVT" = ( +/obj/structure/sign/safety/maint{ + pixel_x = -19; + pixel_y = -6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/safety/bulkhead_door{ + pixel_x = -19; + pixel_y = 6 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_s) "bVU" = ( /turf/closed/wall/almayer/outer, /area/almayer/shipboard/port_point_defense) @@ -25427,6 +25455,27 @@ icon_state = "red" }, /area/almayer/shipboard/port_missiles) +"cfn" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/obj/structure/machinery/door/airlock/almayer/research/reinforced{ + dir = 8; + name = "\improper Containment Airlock"; + closeOtherId = "containment_s" + }, +/obj/structure/machinery/door/poddoor/almayer/biohazard/white{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/medical/containment) "cfo" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/charlie) @@ -25633,6 +25682,13 @@ icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) +"cgT" = ( +/obj/structure/disposalpipe/junction, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 5 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/cic_hallway) "chf" = ( /obj/structure/window/reinforced{ dir = 4; @@ -25687,6 +25743,10 @@ icon_state = "red" }, /area/almayer/hallways/aft_hallway) +"chv" = ( +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/armory) "chC" = ( /obj/structure/platform_decoration, /turf/open/floor/plating/plating_catwalk, @@ -26056,6 +26116,17 @@ icon_state = "red" }, /area/almayer/hallways/port_hallway) +"cjz" = ( +/obj/structure/bed/chair/bolted{ + dir = 1 + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/perma) "cjA" = ( /obj/structure/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -26065,12 +26136,6 @@ icon_state = "plate" }, /area/almayer/squads/charlie) -"cjB" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_f_s) "cjC" = ( /obj/structure/machinery/vending/cola{ density = 0; @@ -26284,16 +26349,6 @@ icon_state = "blue" }, /area/almayer/squads/delta) -"ckZ" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "SE-out" - }, -/obj/structure/sign/safety/bathunisex{ - pixel_x = 8; - pixel_y = 25 - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/cells) "cla" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply{ @@ -26777,36 +26832,6 @@ icon_state = "test_floor4" }, /area/almayer/hallways/port_umbilical) -"cmI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/airlock/almayer/security/reinforced{ - access_modified = 1; - name = "\improper Astronavigational Deck"; - req_access = null; - req_one_access_txt = "3;19" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/navigation) -"cmJ" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/airlock/almayer/security/reinforced{ - access_modified = 1; - name = "\improper Astronavigational Deck"; - req_access = null; - req_one_access_txt = "3;19" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/navigation) "cmK" = ( /obj/structure/window/reinforced, /turf/open/floor/almayer{ @@ -26814,15 +26839,6 @@ icon_state = "silver" }, /area/almayer/command/securestorage) -"cmP" = ( -/obj/structure/machinery/power/apc/almayer{ - dir = 1 - }, -/turf/open/floor/almayer{ - dir = 4; - icon_state = "red" - }, -/area/almayer/shipboard/brig/processing) "cmX" = ( /obj/docking_port/stationary/escape_pod/west, /turf/open/floor/plating, @@ -27279,7 +27295,7 @@ /area/almayer/lifeboat_pumps/south1) "crp" = ( /obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/cameras/almayer_network{ +/obj/structure/machinery/computer/secure_data{ dir = 4 }, /turf/open/floor/almayer{ @@ -27402,6 +27418,18 @@ icon_state = "orange" }, /area/almayer/hallways/stern_hallway) +"ctT" = ( +/obj/structure/machinery/door/airlock/almayer/security/glass{ + dir = 1; + name = "\improper Cryogenics Bay" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/cryo) "cus" = ( /obj/docking_port/stationary/lifeboat_dock/starboard, /turf/open/floor/almayer_hull{ @@ -27492,15 +27520,6 @@ }, /turf/open/floor/almayer, /area/almayer/squads/req) -"cwE" = ( -/obj/structure/machinery/door/airlock/almayer/generic{ - dir = 1; - name = "Bathroom" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/main_office) "cwJ" = ( /turf/open/floor/almayer{ dir = 10; @@ -27632,11 +27651,13 @@ }, /area/almayer/medical/lower_medical_medbay) "cAy" = ( -/turf/open/floor/almayer{ - dir = 10; - icon_state = "red" +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, +/obj/structure/machinery/camera/autoname/almayer{ + dir = 4; + name = "ship-grade camera" }, -/area/almayer/shipboard/brig/processing) +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/armory) "cAF" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -27732,6 +27753,12 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/alpha) +"cBw" = ( +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = 25 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/general_equipment) "cBA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -27773,10 +27800,40 @@ }, /area/almayer/hallways/starboard_hallway) "cBZ" = ( -/obj/structure/bed/chair/comfy/orange{ - dir = 8 +/obj/structure/surface/table/almayer, +/obj/structure/machinery/door_control{ + id = "courtyard_cells"; + name = "\improper Courtyard Lockdown Shutters"; + pixel_x = 6; + req_access_txt = "3" + }, +/obj/structure/machinery/door_control{ + id = "Brig Lockdown Shutters"; + name = "Brig Lockdown Shutters"; + pixel_x = -6; + req_access_txt = "3" + }, +/obj/structure/machinery/door_control{ + id = "courtyard window"; + name = "Courtyard Window Shutters"; + pixel_x = -6; + pixel_y = 9; + req_access_txt = "3" + }, +/obj/structure/machinery/door_control{ + id = "Cell Privacy Shutters"; + name = "Cell Privacy Shutters"; + pixel_x = 6; + pixel_y = 9; + req_access_txt = "3" + }, +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" }, -/turf/open/floor/almayer, /area/almayer/shipboard/brig/chief_mp_office) "cCa" = ( /obj/structure/pipes/standard/simple/hidden/supply{ @@ -28494,6 +28551,13 @@ icon_state = "cargo" }, /area/almayer/hull/lower_hull/l_f_s) +"cQL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/lobby) "cQN" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -28720,6 +28784,20 @@ icon_state = "green" }, /area/almayer/living/offices) +"cWs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "cWt" = ( /turf/open/floor/almayer{ dir = 4; @@ -28869,6 +28947,21 @@ }, /turf/open/floor/plating, /area/almayer/command/cichallway) +"cZj" = ( +/obj/structure/machinery/camera/autoname/almayer{ + dir = 1; + name = "ship-grade camera" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "cZm" = ( /obj/structure/machinery/light{ dir = 1 @@ -29023,6 +29116,16 @@ icon_state = "green" }, /area/almayer/living/grunt_rnr) +"dco" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/cameras/almayer_network{ + dir = 4 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "red" + }, +/area/almayer/shipboard/brig/chief_mp_office) "dcp" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/plating/plating_catwalk, @@ -29145,6 +29248,14 @@ icon_state = "plate" }, /area/almayer/engineering/upper_engineering/starboard) +"dfk" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/cells) "dfC" = ( /obj/structure/machinery/light, /turf/open/floor/almayer{ @@ -29193,6 +29304,17 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_p) +"dgx" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_18"; + pixel_y = 13 + }, +/obj/structure/surface/table/almayer, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "red" + }, +/area/almayer/shipboard/brig/chief_mp_office) "dgN" = ( /obj/structure/surface/rack, /obj/item/tool/shovel/etool{ @@ -29403,16 +29525,6 @@ icon_state = "red" }, /area/almayer/living/briefing) -"dkr" = ( -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/processing) "dkO" = ( /obj/effect/step_trigger/teleporter_vector{ name = "Almayer_Down2"; @@ -29838,24 +29950,6 @@ }, /turf/open/floor/almayer, /area/almayer/living/chapel) -"dum" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/machinery/door/airlock/almayer/command/reinforced{ - id_tag = "cic_exterior"; - name = "\improper Combat Information Center" - }, -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "CIC Lockdown"; - name = "\improper Combat Information Center Blast Door" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/command/cic) "duo" = ( /obj/structure/machinery/power/apc/almayer{ dir = 8 @@ -29969,12 +30063,6 @@ }, /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) -"dvK" = ( -/turf/open/floor/almayer{ - dir = 4; - icon_state = "redcorner" - }, -/area/almayer/shipboard/brig/processing) "dwl" = ( /obj/structure/machinery/light, /turf/open/floor/almayer, @@ -30061,6 +30149,20 @@ icon_state = "cargo" }, /area/almayer/engineering/engineering_workshop/hangar) +"dya" = ( +/obj/structure/machinery/door/poddoor/almayer/locked{ + dir = 2; + id = "Perma 2"; + name = "\improper cell shutter" + }, +/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + dir = 2; + name = "\improper Isolation Cell" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/perma) "dyb" = ( /obj/structure/machinery/smartfridge/chemistry, /obj/item/device/radio/intercom{ @@ -30252,6 +30354,16 @@ }, /turf/open/floor/wood/ship, /area/almayer/shipboard/brig/chief_mp_office) +"dBS" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + layer = 2.5 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 10 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/execution) "dCe" = ( /obj/structure/machinery/cryopod{ pixel_y = 6 @@ -30438,6 +30550,16 @@ icon_state = "greencorner" }, /area/almayer/hallways/starboard_hallway) +"dEG" = ( +/obj/structure/machinery/light{ + unacidable = 1; + unslashable = 1 + }, +/obj/structure/closet/secure_closet/brig, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/processing) "dEJ" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ @@ -30458,6 +30580,16 @@ /obj/structure/machinery/light, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) +"dEX" = ( +/obj/structure/closet/secure_closet/guncabinet/riot_control, +/obj/item/weapon/shield/riot, +/obj/item/weapon/shield/riot, +/obj/item/weapon/shield/riot, +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/armory) "dFk" = ( /turf/open/floor/almayer{ dir = 8; @@ -31211,16 +31343,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/medical_science) -"dVI" = ( -/obj/structure/disposalpipe/junction, -/obj/structure/pipes/standard/manifold/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer{ - dir = 4; - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "dVO" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/emails{ @@ -31299,6 +31421,17 @@ icon_state = "plate" }, /area/almayer/squads/req) +"dXO" = ( +/obj/structure/sign/safety/maint{ + pixel_x = -19; + pixel_y = -6 + }, +/obj/structure/sign/safety/bulkhead_door{ + pixel_x = -19; + pixel_y = 6 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "dXV" = ( /obj/structure/desertdam/decals/road_edge{ pixel_x = 16 @@ -31673,6 +31806,15 @@ icon_state = "plate" }, /area/almayer/squads/alpha) +"efT" = ( +/obj/structure/machinery/atm{ + pixel_y = 32 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "red" + }, +/area/almayer/shipboard/brig/processing) "efU" = ( /obj/structure/machinery/power/apc/almayer{ dir = 1 @@ -31769,19 +31911,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/starboard_hallway) -"ehP" = ( -/obj/structure/surface/table/almayer, -/obj/item/storage/box/flashbangs, -/obj/item/storage/box/flashbangs{ - pixel_x = 5; - pixel_y = 9 - }, -/obj/item/storage/box/flashbangs{ - pixel_x = -8; - pixel_y = 5 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/armory) "ehR" = ( /obj/structure/window/reinforced{ dir = 4; @@ -31897,19 +32026,6 @@ icon_state = "cargo" }, /area/almayer/hallways/aft_hallway) -"ejs" = ( -/obj/structure/machinery/cryopod/right{ - layer = 3.1; - pixel_y = 13 - }, -/obj/structure/machinery/camera/autoname/almayer{ - dir = 8; - name = "ship-grade camera" - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/cryo) "ejt" = ( /turf/open/floor/almayer/uscm/directional{ dir = 4 @@ -31949,6 +32065,15 @@ "eky" = ( /turf/open/floor/almayer, /area/almayer/command/lifeboat) +"ekF" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "ekO" = ( /obj/structure/machinery/cryopod{ pixel_y = 6 @@ -32550,12 +32675,6 @@ icon_state = "test_floor4" }, /area/almayer/hull/lower_hull/l_f_s) -"exf" = ( -/turf/open/floor/almayer{ - dir = 1; - icon_state = "redcorner" - }, -/area/almayer/shipboard/brig/main_office) "exi" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/almayer, @@ -32650,15 +32769,6 @@ /obj/structure/bed/chair/wood/normal, /turf/open/floor/wood/ship, /area/almayer/shipboard/brig/cells) -"eAf" = ( -/obj/structure/sign/safety/cryo{ - pixel_x = -16 - }, -/obj/structure/machinery/cryopod, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/cryo) "eAg" = ( /obj/structure/flora/pottedplant{ desc = "It is made of Fiberbush(tm). It contains asbestos."; @@ -32732,33 +32842,6 @@ /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/south1) -"eBf" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NW-out"; - pixel_x = -2; - pixel_y = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NE-out"; - pixel_x = 2; - pixel_y = 1 - }, -/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ - dir = 2; - name = "\improper Armory" - }, -/obj/structure/machinery/door/poddoor/shutters/almayer{ - dir = 2; - id = "firearm_storage_armory"; - name = "\improper Armory Shutters" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/armory) "eBg" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, @@ -32834,6 +32917,25 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/south2) +"eCG" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_10" + }, +/obj/structure/closet/secure_closet/cmdcabinet{ + desc = "A bulletproof cabinet containing communications equipment."; + name = "communications cabinet"; + pixel_y = 24; + req_access = null; + req_one_access_txt = "207;203" + }, +/obj/item/device/radio, +/obj/item/device/radio/listening_bug/radio_linked/wy, +/obj/item/device/radio/listening_bug/radio_linked/wy{ + pixel_x = 4; + pixel_y = -3 + }, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliason) "eCI" = ( /obj/structure/window/reinforced/ultra{ pixel_y = -12 @@ -32930,6 +33032,25 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cic_hallway) +"eFc" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/machinery/door/airlock/almayer/command/reinforced{ + id_tag = "cic_exterior"; + name = "\improper Combat Information Center"; + closeOtherId = "ciclobby_s" + }, +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "CIC Lockdown"; + name = "\improper Combat Information Center Blast Door" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/command/cic) "eFj" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/manifold/hidden/supply{ @@ -33620,6 +33741,28 @@ }, /turf/open/floor/almayer, /area/almayer/living/chapel) +"eVR" = ( +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -8; + pixel_y = 18 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_x = 8; + pixel_y = 18 + }, +/obj/structure/machinery/power/apc/almayer{ + dir = 8 + }, +/obj/structure/sign/safety/rewire{ + pixel_x = -17; + pixel_y = 17 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/evidence_storage) "eVT" = ( /obj/structure/disposalpipe/trunk{ dir = 1 @@ -33793,28 +33936,6 @@ /obj/structure/filingcabinet/security, /turf/open/floor/wood/ship, /area/almayer/command/corporateliason) -"eZe" = ( -/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ - name = "\improper Brig Prisoner Yard" - }, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 8 - }, -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "courtyard_cells"; - name = "\improper Courtyard Lockdown Shutter" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/processing) "eZi" = ( /obj/effect/projector{ name = "Almayer_Up4"; @@ -33865,6 +33986,13 @@ icon_state = "green" }, /area/almayer/hallways/aft_hallway) +"fag" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/execution) "fau" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /obj/structure/disposalpipe/junction{ @@ -34022,22 +34150,6 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/starboard) -"fcW" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 1 - }, -/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ - dir = 1; - name = "\improper Brig Prison Yard And Offices" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/processing) "fcX" = ( /obj/effect/step_trigger/clone_cleaner, /obj/structure/machinery/light{ @@ -34144,18 +34256,6 @@ icon_state = "plating" }, /area/almayer/command/airoom) -"fgd" = ( -/obj/structure/surface/table/almayer, -/obj/effect/landmark/map_item, -/obj/item/folder/red, -/obj/structure/transmitter/rotary{ - name = "Brig CMP's Office Telephone"; - phone_category = "MP Dept."; - phone_id = "Brig CMP's Office"; - pixel_x = 15 - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/chief_mp_office) "fgh" = ( /obj/structure/machinery/light/small{ dir = 8 @@ -34263,15 +34363,6 @@ icon_state = "mono" }, /area/almayer/engineering/upper_engineering/starboard) -"fhY" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "red" - }, -/area/almayer/shipboard/brig/chief_mp_office) "fiq" = ( /turf/closed/wall/almayer, /area/almayer/hull/lower_hull/l_m_p) @@ -34603,6 +34694,17 @@ icon_state = "tcomms" }, /area/almayer/command/airoom) +"frX" = ( +/obj/structure/machinery/optable, +/obj/structure/sign/safety/medical{ + pixel_x = 8; + pixel_y = 29 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "sterile_green_corner" + }, +/area/almayer/shipboard/brig/surgery) "frY" = ( /obj/structure/closet/secure_closet/guncabinet, /obj/item/weapon/gun/rifle/l42a{ @@ -34772,6 +34874,10 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_f_p) +"fvA" = ( +/obj/structure/closet/secure_closet/brig, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/perma) "fvB" = ( /obj/structure/closet/secure_closet/staff_officer/armory/m4a1, /turf/open/floor/almayer{ @@ -34862,6 +34968,13 @@ icon_state = "plating" }, /area/almayer/engineering/upper_engineering) +"fxJ" = ( +/obj/structure/closet/secure_closet/guncabinet/riot_control, +/obj/item/weapon/shield/riot, +/obj/item/weapon/shield/riot, +/obj/item/weapon/shield/riot, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/armory) "fxO" = ( /obj/structure/machinery/vending/coffee{ density = 0; @@ -34901,6 +35014,15 @@ icon_state = "plate" }, /area/almayer/shipboard/weapon_room) +"fyp" = ( +/obj/structure/machinery/cryopod{ + layer = 3.1; + pixel_y = 13 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/cryo) "fyD" = ( /obj/structure/machinery/light, /obj/structure/ladder{ @@ -34966,12 +35088,22 @@ /obj/structure/machinery/light, /turf/open/floor/wood/ship, /area/almayer/command/corporateliason) +"fAr" = ( +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/armory) "fAt" = ( /obj/structure/largecrate/guns/merc{ name = "\improper dodgy crate" }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) +"fAE" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/main_office) "fAN" = ( /obj/structure/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -35134,36 +35266,6 @@ icon_state = "plate" }, /area/almayer/medical/morgue) -"fEH" = ( -/obj/item/bedsheet/brown{ - pixel_y = 13 - }, -/obj/structure/window/reinforced{ - dir = 8; - layer = 3.3; - pixel_y = 4 - }, -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = -2; - pixel_y = 4 - }, -/obj/structure/bed{ - can_buckle = 0 - }, -/obj/structure/bed{ - buckling_y = 13; - layer = 3.5; - pixel_y = 13 - }, -/obj/item/bedsheet/brown{ - layer = 3.1 - }, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "fEN" = ( /obj/structure/machinery/camera/autoname/almayer/containment/ares{ dir = 4 @@ -35348,24 +35450,6 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) -"fIu" = ( -/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ - dir = 2; - name = "\improper Brig Armoury"; - req_access = null; - req_one_access_txt = "1;3" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/main_office) "fIx" = ( /turf/open/floor/almayer{ dir = 1; @@ -35449,10 +35533,6 @@ icon_state = "green" }, /area/almayer/shipboard/brig/cells) -"fJV" = ( -/obj/structure/pipes/vents/pump, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/general_equipment) "fJX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -35682,17 +35762,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) -"fNn" = ( -/obj/structure/machinery/door/airlock/almayer/maint/reinforced, -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "Brig Lockdown Shutters"; - name = "\improper Brig Lockdown Shutter" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/hull/upper_hull/u_f_s) "fNC" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /obj/structure/disposalpipe/junction{ @@ -35849,15 +35918,6 @@ }, /turf/open/floor/almayer, /area/almayer/command/lifeboat) -"fRM" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 1 - }, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/processing) "fRN" = ( /obj/structure/sign/safety/restrictedarea{ pixel_x = 8; @@ -35897,17 +35957,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/starboard_hallway) -"fTb" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/faxmachine/uscm/brig, -/obj/structure/machinery/camera/autoname/almayer{ - dir = 1; - name = "ship-grade camera" - }, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/perma) "fTi" = ( /obj/structure/largecrate/supply/floodlights, /turf/open/floor/almayer{ @@ -36197,6 +36246,15 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_p) +"gax" = ( +/obj/structure/machinery/status_display{ + pixel_y = 30 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "gaJ" = ( /turf/closed/wall/almayer, /area/almayer/shipboard/brig/cryo) @@ -36571,6 +36629,19 @@ icon_state = "blue" }, /area/almayer/hallways/aft_hallway) +"giR" = ( +/obj/structure/machinery/status_display{ + pixel_y = -30 + }, +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/emails{ + dir = 4 + }, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "silver" + }, +/area/almayer/shipboard/brig/cic_hallway) "gjm" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -36756,24 +36827,6 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/port) -"gmz" = ( -/obj/structure/machinery/light{ - dir = 4 - }, -/obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/sentencing{ - dir = 8; - pixel_y = 6 - }, -/obj/structure/sign/safety/terminal{ - pixel_x = 32; - pixel_y = -22 - }, -/turf/open/floor/almayer{ - dir = 4; - icon_state = "red" - }, -/area/almayer/shipboard/brig/perma) "gnu" = ( /obj/structure/surface/table/almayer, /obj/item/facepaint/green, @@ -37122,20 +37175,13 @@ }, /area/almayer/hull/upper_hull/u_f_p) "gwj" = ( -/obj/structure/machinery/door/poddoor/shutters/almayer/open{ - dir = 2; - id = "Warden Office Shutters"; - name = "\improper Privacy Shutters" - }, -/obj/structure/pipes/standard/simple/hidden/supply, -/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ - dir = 1; - name = "\improper Warden's Office" +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 8 }, /turf/open/floor/almayer{ - icon_state = "test_floor4" + icon_state = "red" }, -/area/almayer/shipboard/brig/chief_mp_office) +/area/almayer/shipboard/brig/processing) "gwm" = ( /obj/structure/largecrate/random/case/small, /obj/item/device/taperecorder{ @@ -37289,6 +37335,14 @@ dir = 8 }, /area/almayer/medical/containment/cell) +"gxU" = ( +/obj/structure/surface/table/almayer, +/obj/item/toy/deck, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "silver" + }, +/area/almayer/shipboard/brig/cic_hallway) "gyt" = ( /obj/item/storage/firstaid/regular, /obj/structure/surface/rack, @@ -37565,6 +37619,22 @@ icon_state = "plate" }, /area/almayer/living/bridgebunks) +"gDt" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/crew/alt{ + dir = 4 + }, +/obj/structure/transmitter/rotary/no_dnd{ + name = "Brig Cells Telephone"; + phone_category = "MP Dept."; + phone_id = "Brig Cells"; + pixel_x = 16 + }, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "red" + }, +/area/almayer/shipboard/brig/processing) "gDP" = ( /obj/structure/closet/crate, /obj/item/ammo_box/magazine/l42a, @@ -37796,6 +37866,24 @@ /obj/structure/largecrate/random/barrel/red, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_s) +"gIU" = ( +/obj/structure/surface/table/almayer, +/obj/item/storage/box/tapes{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/storage/box/tapes{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/storage/box/tapes{ + pixel_x = 1; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/evidence_storage) "gJd" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38024,23 +38112,6 @@ icon_state = "cargo" }, /area/almayer/engineering/engine_core) -"gNl" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/recharger, -/obj/structure/sign/safety/terminal{ - pixel_y = 32 - }, -/obj/structure/transmitter/rotary{ - name = "Brig Wardens's Office Telephone"; - phone_category = "MP Dept."; - phone_id = "Brig Warden's Office"; - pixel_x = 15 - }, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "red" - }, -/area/almayer/shipboard/brig/chief_mp_office) "gNp" = ( /turf/open/floor/almayer{ dir = 9; @@ -38093,18 +38164,6 @@ icon_state = "silver" }, /area/almayer/command/airoom) -"gOH" = ( -/obj/structure/machinery/door/airlock/almayer/security/glass{ - dir = 1; - name = "\improper Cryogenics Bay" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/cryo) "gPc" = ( /obj/structure/machinery/power/terminal{ dir = 1 @@ -38138,13 +38197,6 @@ icon_state = "orange" }, /area/almayer/hallways/stern_hallway) -"gQh" = ( -/obj/structure/pipes/vents/scrubber, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/shipboard/brig/processing) "gQl" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/glass/bucket{ @@ -38376,15 +38428,6 @@ }, /turf/open/floor/plating, /area/almayer/medical/upper_medical) -"gWO" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/chief_mp_office) "gWR" = ( /obj/structure/largecrate/random/barrel/red, /obj/structure/sign/safety/fire_haz{ @@ -38445,6 +38488,15 @@ icon_state = "plating" }, /area/almayer/hull/lower_hull/l_a_p) +"gXx" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "silvercorner" + }, +/area/almayer/shipboard/brig/cic_hallway) "gXB" = ( /obj/structure/pipes/vents/pump, /obj/structure/bed/chair/comfy/delta{ @@ -38840,6 +38892,27 @@ icon_state = "plate" }, /area/almayer/engineering/engine_core) +"heo" = ( +/obj/structure/machinery/power/apc/almayer{ + cell_type = /obj/item/cell/hyper; + dir = 1 + }, +/obj/structure/sign/safety/rewire{ + pixel_x = -15; + pixel_y = 25 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 2 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -2 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/armory) "heK" = ( /obj/structure/machinery/door/airlock/almayer/maint{ dir = 1; @@ -39093,6 +39166,15 @@ icon_state = "test_floor4" }, /area/almayer/living/grunt_rnr) +"hjM" = ( +/obj/structure/bed/chair/bolted{ + dir = 8 + }, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "redcorner" + }, +/area/almayer/shipboard/brig/processing) "hki" = ( /obj/structure/machinery/cm_vending/sorted/tech/electronics_storage, /turf/open/floor/almayer{ @@ -39143,6 +39225,26 @@ icon_state = "silver" }, /area/almayer/command/cic) +"hkH" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/recharger, +/obj/structure/machinery/door_control{ + id = "courtyard_cells"; + name = "\improper Courtyard Lockdown Shutters"; + pixel_x = 16; + req_access_txt = "3" + }, +/obj/structure/machinery/door_control{ + id = "Brig Lockdown Shutters"; + name = "Brig Lockdown Shutters"; + pixel_x = 16; + pixel_y = 8; + req_access_txt = "3" + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/processing) "hkX" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/device/flashlight/lamp/green{ @@ -39181,13 +39283,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) -"hlO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/lobby) "hlU" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -39270,6 +39365,20 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/alpha_bravo_shared) +"hmG" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/machinery/door/airlock/almayer/security/glass{ + name = "\improper Brig Breakroom" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + layer = 1.9 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/main_office) "hmS" = ( /obj/structure/pipes/vents/pump, /turf/open/floor/almayer{ @@ -39516,14 +39625,6 @@ icon_state = "test_floor4" }, /area/almayer/engineering/upper_engineering/starboard) -"htj" = ( -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, -/obj/structure/machinery/camera/autoname/almayer{ - dir = 4; - name = "ship-grade camera" - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/armory) "htG" = ( /obj/item/tool/soap, /obj/structure/machinery/light/small{ @@ -39630,13 +39731,6 @@ /obj/effect/landmark/start/professor, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/offices) -"hwo" = ( -/obj/structure/pipes/vents/pump, -/turf/open/floor/almayer{ - dir = 4; - icon_state = "red" - }, -/area/almayer/shipboard/brig/chief_mp_office) "hwC" = ( /obj/structure/flora/pottedplant{ icon_state = "pottedplant_22"; @@ -39784,43 +39878,6 @@ icon_state = "cargo" }, /area/almayer/squads/delta) -"hzI" = ( -/obj/structure/machinery/light{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/surface/table/almayer, -/obj/item/book/manual/marine_law{ - pixel_x = -3; - pixel_y = 1 - }, -/obj/item/device/flashlight/lamp{ - layer = 3.1; - pixel_x = 7; - pixel_y = 10 - }, -/obj/item/poster, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/lobby) -"hzL" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "CIC Lockdown"; - name = "\improper Combat Information Center Blast Door" - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/machinery/door/airlock/almayer/command/reinforced{ - name = "\improper Combat Information Center" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/command/cic) "hzM" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/almayer{ @@ -39927,12 +39984,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_p) -"hCi" = ( -/obj/structure/largecrate/random/barrel/white, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_f_s) "hCo" = ( /obj/structure/surface/table/almayer, /obj/structure/flora/pottedplant{ @@ -40105,20 +40156,6 @@ icon_state = "test_floor4" }, /area/almayer/medical/morgue) -"hFR" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/machinery/door/airlock/almayer/security/glass{ - name = "\improper Brig Breakroom" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - layer = 1.9 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/main_office) "hFW" = ( /obj/structure/largecrate/random/barrel/red, /turf/open/floor/plating/plating_catwalk, @@ -40224,19 +40261,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) -"hHW" = ( -/obj/structure/machinery/status_display{ - pixel_y = -30 - }, -/obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/emails{ - dir = 4 - }, -/turf/open/floor/almayer{ - dir = 10; - icon_state = "silver" - }, -/area/almayer/shipboard/brig/cic_hallway) "hII" = ( /obj/structure/machinery/cm_vending/gear/tl{ density = 0; @@ -40418,6 +40442,12 @@ icon_state = "test_floor4" }, /area/almayer/living/briefing) +"hMc" = ( +/obj/structure/bed/chair/comfy/orange{ + dir = 8 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/chief_mp_office) "hMi" = ( /obj/structure/pipes/vents/scrubber, /turf/open/floor/almayer, @@ -40445,6 +40475,17 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/operating_room_three) +"hNl" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_21"; + pixel_y = 16 + }, +/obj/structure/surface/table/almayer, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "hNw" = ( /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -40840,39 +40881,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cic_hallway) -"hVa" = ( -/obj/structure/sign/safety/rewire{ - pixel_y = 32 - }, -/obj/item/bedsheet/brown{ - layer = 3.1 - }, -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = -2; - pixel_y = 4 - }, -/obj/structure/bed{ - can_buckle = 0 - }, -/obj/structure/window/reinforced{ - dir = 8; - layer = 3.3; - pixel_y = 4 - }, -/obj/structure/bed{ - buckling_y = 13; - layer = 3.5; - pixel_y = 13 - }, -/obj/item/bedsheet/brown{ - pixel_y = 13 - }, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "hVf" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 @@ -41116,6 +41124,18 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) +"hZU" = ( +/obj/structure/transmitter{ + name = "Brig Offices Telephone"; + phone_category = "MP Dept."; + phone_id = "Brig Main Offices"; + pixel_y = 32 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "iaa" = ( /obj/structure/closet/secure_closet/guncabinet/red/cic_armory_mk1_rifle_ap, /turf/open/floor/almayer{ @@ -41189,13 +41209,6 @@ icon_state = "red" }, /area/almayer/command/lifeboat) -"iaT" = ( -/obj/structure/closet/secure_closet/guncabinet/riot_control, -/obj/item/weapon/shield/riot, -/obj/item/weapon/shield/riot, -/obj/item/weapon/shield/riot, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/armory) "ibc" = ( /obj/structure/machinery/conveyor_switch{ id = "req_belt" @@ -41231,6 +41244,13 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cells) +"icZ" = ( +/obj/structure/closet/secure_closet/brig, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "redcorner" + }, +/area/almayer/shipboard/brig/processing) "idx" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -41489,17 +41509,6 @@ icon_state = "plate" }, /area/almayer/command/corporateliason) -"iiB" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_21"; - pixel_y = 16 - }, -/obj/structure/surface/table/almayer, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "iiC" = ( /obj/structure/sign/safety/maint{ pixel_x = 8; @@ -41621,32 +41630,6 @@ }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) -"ilc" = ( -/obj/structure/surface/table/almayer, -/obj/item/storage/box/ids{ - pixel_x = -6; - pixel_y = 8 - }, -/obj/item/device/flash, -/obj/structure/machinery/light{ - dir = 8; - invisibility = 101 - }, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) -"ilr" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 5 - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/cic_hallway) "ils" = ( /obj/structure/window/framed/almayer/hull, /turf/open/floor/plating, @@ -41899,6 +41882,15 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/port) +"iqR" = ( +/obj/structure/sign/safety/cryo{ + pixel_x = -16 + }, +/obj/structure/machinery/cryopod, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/cryo) "irn" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/plating/plating_catwalk, @@ -41916,6 +41908,12 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/south2) +"irF" = ( +/obj/structure/closet/emcloset/legacy, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/main_office) "irS" = ( /obj/effect/decal/cleanable/blood/oil, /obj/structure/cable/heavyduty{ @@ -42014,6 +42012,28 @@ icon_state = "silver" }, /area/almayer/command/airoom) +"itj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/machinery/door/airlock/almayer/command/reinforced{ + id_tag = "cic_exterior"; + name = "\improper Combat Information Center"; + closeOtherId = "ciclobby_n" + }, +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "CIC Lockdown"; + name = "\improper Combat Information Center Blast Door" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/command/cic) "itR" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -42367,6 +42387,16 @@ icon_state = "blue" }, /area/almayer/hallways/port_hallway) +"iBl" = ( +/obj/structure/machinery/power/apc/almayer{ + dir = 4 + }, +/obj/structure/sign/safety/rewire{ + pixel_x = 7; + pixel_y = -30 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/cells) "iBt" = ( /turf/open/floor/plating, /area/almayer/hull/upper_hull/u_m_p) @@ -42459,12 +42489,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_a_s) -"iDw" = ( -/obj/structure/pipes/vents/pump, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "iDN" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -42528,16 +42552,10 @@ }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) -"iEI" = ( -/obj/structure/sign/safety/medical{ - pixel_x = 16; - pixel_y = 27 - }, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "red" - }, -/area/almayer/shipboard/brig/processing) +"iFc" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/wood/ship, +/area/almayer/shipboard/brig/cells) "iFm" = ( /obj/structure/machinery/light{ dir = 1 @@ -42829,6 +42847,27 @@ icon_state = "orangefull" }, /area/almayer/living/briefing) +"iLl" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/obj/structure/machinery/door/poddoor/almayer/open{ + id = "Brig Lockdown Shutters"; + name = "\improper Brig Lockdown Shutter" + }, +/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + dir = 1; + name = "\improper Brig Maintenance"; + closeOtherId = "brigmaint_s" + }, +/obj/structure/machinery/door/poddoor/almayer/open{ + id = "perma_lockdown_2"; + name = "\improper Perma Lockdown Shutter" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/perma) "iLo" = ( /obj/structure/machinery/light{ unacidable = 1; @@ -43032,6 +43071,25 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) +"iQB" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/card{ + dir = 4; + layer = 3.2; + pixel_y = 4 + }, +/obj/structure/machinery/computer/secure_data{ + dir = 4; + pixel_y = 23 + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "red" + }, +/area/almayer/shipboard/brig/processing) "iRr" = ( /obj/structure/machinery/light{ dir = 1 @@ -43117,15 +43175,6 @@ icon_state = "dark_sterile" }, /area/almayer/living/port_emb) -"iSw" = ( -/obj/structure/bed/chair/bolted{ - dir = 8 - }, -/turf/open/floor/almayer{ - dir = 4; - icon_state = "redcorner" - }, -/area/almayer/shipboard/brig/processing) "iSZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -43169,6 +43218,12 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) +"iTl" = ( +/turf/open/floor/almayer{ + dir = 10; + icon_state = "red" + }, +/area/almayer/shipboard/brig/processing) "iTw" = ( /obj/structure/bed/chair/comfy{ dir = 4 @@ -43871,6 +43926,18 @@ icon_state = "orange" }, /area/almayer/engineering/engine_core) +"jfY" = ( +/obj/structure/surface/table/almayer, +/obj/effect/landmark/map_item, +/obj/item/folder/red, +/obj/structure/transmitter/rotary{ + name = "Brig CMP's Office Telephone"; + phone_category = "MP Dept."; + phone_id = "Brig CMP's Office"; + pixel_x = 15 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/chief_mp_office) "jfZ" = ( /obj/structure/target{ name = "punching bag" @@ -44618,23 +44685,6 @@ icon_state = "plate" }, /area/almayer/medical/lower_medical_medbay) -"jvl" = ( -/obj/structure/machinery/cryopod/right, -/obj/structure/sign/safety/cryo{ - pixel_x = 3; - pixel_y = 25 - }, -/obj/structure/sign/safety/rewire{ - pixel_x = 15; - pixel_y = 25 - }, -/obj/structure/machinery/light{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/cryo) "jvp" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply{ @@ -44672,6 +44722,14 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) +"jvP" = ( +/obj/structure/machinery/power/apc/almayer{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/cryo) "jvX" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -44769,16 +44827,6 @@ icon_state = "cargo" }, /area/almayer/hallways/hangar) -"jzs" = ( -/obj/structure/machinery/light{ - unacidable = 1; - unslashable = 1 - }, -/obj/structure/closet/secure_closet/brig, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/processing) "jzD" = ( /obj/structure/machinery/door/poddoor/almayer/locked{ icon_state = "almayer_pdoor"; @@ -44997,12 +45045,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) -"jGG" = ( -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/shipboard/brig/lobby) "jGI" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/item/reagent_container/food/drinks/cans/waterbottle, @@ -45211,16 +45253,6 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/charlie) -"jLo" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/lobby) "jLs" = ( /obj/structure/machinery/vending/cola, /turf/open/floor/prison{ @@ -45504,34 +45536,18 @@ icon_state = "plate" }, /area/almayer/engineering/upper_engineering/starboard) +"jPP" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/processing) "jPS" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/chief_mp_office) -"jPT" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/lobby) -"jPZ" = ( -/obj/structure/surface/table/almayer, -/obj/item/storage/fancy/cigarettes/lucky_strikes, -/obj/item/tool/lighter, -/obj/item/clothing/glasses/sunglasses/blindfold, -/obj/structure/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/shipboard/brig/execution) "jQt" = ( /turf/open/floor/almayer/research/containment/floor2{ dir = 8 @@ -45697,10 +45713,6 @@ icon_state = "plate" }, /area/almayer/living/bridgebunks) -"jUc" = ( -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/armory) "jUn" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/structure/machinery/door/window/southleft{ @@ -45819,6 +45831,13 @@ icon_state = "test_floor5" }, /area/almayer/command/computerlab) +"jVP" = ( +/obj/structure/machinery/light{ + unacidable = 1; + unslashable = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/execution) "jWh" = ( /turf/closed/wall/almayer, /area/almayer/engineering/upper_engineering/port) @@ -46006,13 +46025,6 @@ icon_state = "emerald" }, /area/almayer/squads/charlie) -"jZM" = ( -/obj/structure/machinery/light{ - unacidable = 1; - unslashable = 1 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/execution) "jZO" = ( /obj/structure/largecrate/random/barrel/blue, /turf/open/floor/almayer{ @@ -46251,15 +46263,6 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/starboard) -"kdz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 5 - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/cic_hallway) "kdB" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -46364,19 +46367,6 @@ /obj/structure/machinery/door/poddoor/almayer/biohazard/white, /turf/open/floor/plating, /area/almayer/medical/medical_science) -"kgG" = ( -/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ - dir = 1; - name = "\improper Brig Maintenance" - }, -/obj/structure/machinery/door/poddoor/almayer/open{ - id = "Brig Lockdown Shutters"; - name = "\improper Brig Lockdown Shutter" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/hull/upper_hull/u_f_p) "kgQ" = ( /obj/structure/surface/rack, /obj/item/storage/firstaid/adv{ @@ -46431,6 +46421,12 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) +"kif" = ( +/obj/structure/largecrate/random/barrel/white, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_f_s) "kij" = ( /obj/structure/sign/safety/distribution_pipes{ pixel_x = -17 @@ -46501,6 +46497,15 @@ icon_state = "plate" }, /area/almayer/living/briefing) +"kjk" = ( +/obj/structure/machinery/cryopod/right, +/obj/structure/sign/safety/cryo{ + pixel_x = 32 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/cryo) "kkt" = ( /obj/structure/surface/table/almayer, /obj/item/book/manual/marine_law, @@ -46714,12 +46719,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/almayer/command/airoom) -"kpm" = ( -/turf/open/floor/almayer{ - dir = 4; - icon_state = "redcorner" - }, -/area/almayer/shipboard/brig/main_office) "kpo" = ( /obj/structure/machinery/floodlight/landing{ name = "bolted floodlight" @@ -46867,6 +46866,15 @@ icon_state = "plate" }, /area/almayer/living/gym) +"kry" = ( +/obj/structure/machinery/flasher{ + id = "Perma 1"; + pixel_y = 24 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/perma) "krN" = ( /obj/structure/machinery/conveyor{ id = "req_belt" @@ -46993,6 +47001,17 @@ icon_state = "greencorner" }, /area/almayer/living/grunt_rnr) +"kui" = ( +/obj/structure/sign/safety/hazard{ + pixel_y = 32 + }, +/obj/structure/sign/safety/ammunition{ + pixel_x = 15; + pixel_y = 32 + }, +/obj/structure/machinery/vending/security/riot, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/armory) "kuk" = ( /obj/structure/pipes/vents/pump{ dir = 1 @@ -47012,6 +47031,13 @@ icon_state = "emeraldcorner" }, /area/almayer/living/briefing) +"kuJ" = ( +/obj/structure/pipes/vents/scrubber, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/processing) "kvh" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/station_alert{ @@ -47029,27 +47055,6 @@ icon_state = "tcomms" }, /area/almayer/engineering/engine_core) -"kvO" = ( -/obj/structure/machinery/power/apc/almayer{ - cell_type = /obj/item/cell/hyper; - dir = 1 - }, -/obj/structure/sign/safety/rewire{ - pixel_x = -15; - pixel_y = 25 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 2 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -2 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/shipboard/brig/armory) "kvU" = ( /obj/structure/surface/table/almayer, /turf/open/floor/plating/plating_catwalk, @@ -47310,6 +47315,12 @@ icon_state = "dark_sterile" }, /area/almayer/command/corporateliason) +"kAL" = ( +/obj/structure/closet/secure_closet/brig, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/processing) "kAU" = ( /obj/structure/platform{ dir = 4 @@ -47319,6 +47330,21 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/south2) +"kBh" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/obj/structure/machinery/door/airlock/almayer/security/reinforced{ + dir = 2; + name = "\improper Execution Equipment" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/execution) "kBo" = ( /obj/effect/decal/warning_stripes{ icon_state = "SE-out"; @@ -47465,6 +47491,16 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/starboard_hallway) +"kEc" = ( +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/item/vehicle_clamp, +/obj/item/vehicle_clamp, +/obj/item/vehicle_clamp, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/armory) "kEg" = ( /obj/structure/surface/table/almayer, /obj/item/toy/deck{ @@ -47508,7 +47544,7 @@ icon_state = "redfull" }, /area/almayer/living/briefing) -"kEO" = ( +"kEU" = ( /obj/structure/machinery/door/poddoor/almayer/open{ id = "Brig Lockdown Shutters"; name = "\improper Brig Lockdown Shutter" @@ -47516,7 +47552,7 @@ /turf/open/floor/almayer{ icon_state = "test_floor4" }, -/area/almayer/hull/upper_hull/u_f_p) +/area/almayer/hull/upper_hull/u_f_s) "kFe" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/firealarm{ @@ -47590,6 +47626,18 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) +"kGu" = ( +/obj/structure/machinery/cryopod{ + layer = 3.1; + pixel_y = 13 + }, +/obj/structure/machinery/status_display{ + pixel_x = -32 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/cryo) "kGF" = ( /obj/structure/reagent_dispensers/water_cooler/stacks{ density = 0; @@ -47651,17 +47699,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/starboard_hallway) -"kHL" = ( -/obj/structure/bed/chair/bolted{ - dir = 1 - }, -/obj/structure/machinery/light{ - dir = 8 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/shipboard/brig/perma) "kHS" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -48114,6 +48151,19 @@ allow_construction = 0 }, /area/almayer/shipboard/brig/processing) +"kQz" = ( +/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + dir = 1; + name = "\improper Brig Maintenance" + }, +/obj/structure/machinery/door/poddoor/almayer/open{ + id = "Brig Lockdown Shutters"; + name = "\improper Brig Lockdown Shutter" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/hull/upper_hull/u_f_p) "kRd" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -48129,16 +48179,6 @@ icon_state = "cargo" }, /area/almayer/command/lifeboat) -"kRl" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/faxmachine/uscm/brig, -/obj/structure/machinery/status_display{ - pixel_y = 30 - }, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/shipboard/brig/processing) "kRu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -48433,18 +48473,6 @@ icon_state = "plate" }, /area/almayer/squads/bravo) -"kXe" = ( -/obj/structure/machinery/cryopod{ - layer = 3.1; - pixel_y = 13 - }, -/obj/structure/machinery/status_display{ - pixel_x = -32 - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/cryo) "kXf" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 8; @@ -48498,6 +48526,18 @@ icon_state = "dark_sterile" }, /area/almayer/engineering/laundry) +"kXX" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ + name = "\improper Brig Cells"; + closeOtherId = "briglobby" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/processing) "kYa" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ dir = 2; @@ -48885,18 +48925,6 @@ icon_state = "plating" }, /area/almayer/engineering/engine_core) -"lgp" = ( -/obj/structure/bed/chair/wood/normal{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 6 - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/execution) "lgy" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -48945,21 +48973,6 @@ icon_state = "test_floor4" }, /area/almayer/hull/lower_hull/l_f_s) -"lhe" = ( -/obj/structure/sign/safety/intercom{ - pixel_x = -17 - }, -/obj/structure/bed/sofa/south/grey/left, -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_y = 28 - }, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "red" - }, -/area/almayer/shipboard/brig/lobby) "lht" = ( /turf/open/floor/almayer{ dir = 6; @@ -49135,6 +49148,16 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_lobby) +"ljS" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" + }, +/obj/structure/sign/safety/bathunisex{ + pixel_x = 8; + pixel_y = 25 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/cells) "ljW" = ( /obj/structure/machinery/light{ dir = 1 @@ -49172,18 +49195,6 @@ icon_state = "red" }, /area/almayer/living/offices/flight) -"lkl" = ( -/obj/structure/machinery/cryopod/right{ - layer = 3.1; - pixel_y = 13 - }, -/obj/structure/machinery/status_display{ - pixel_x = 32 - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/cryo) "lkm" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ @@ -49274,6 +49285,19 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/port) +"lnh" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/airlock/almayer/security/glass{ + dir = 8; + name = "\improper Chief MP's Office" + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/chief_mp_office) "lnm" = ( /turf/open/floor/almayer{ icon_state = "orangecorner" @@ -49472,18 +49496,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_s) -"lqB" = ( -/obj/structure/transmitter{ - name = "Brig Offices Telephone"; - phone_category = "MP Dept."; - phone_id = "Brig Main Offices"; - pixel_y = 32 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "lqF" = ( /turf/open/floor/almayer{ dir = 9; @@ -50761,6 +50773,16 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/operating_room_two) +"lOI" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/pipes/vents/pump, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "lON" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/machinery/door/poddoor/shutters/almayer/open{ @@ -50966,6 +50988,9 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) +"lUz" = ( +/turf/closed/wall/almayer, +/area/almayer/hull/upper_hull/u_f_s) "lUA" = ( /obj/structure/surface/table/almayer, /obj/item/weapon/gun/rifle/l42a{ @@ -51056,28 +51081,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull) -"lXK" = ( -/obj/structure/filingcabinet{ - density = 0; - pixel_x = -8; - pixel_y = 18 - }, -/obj/structure/filingcabinet{ - density = 0; - pixel_x = 8; - pixel_y = 18 - }, -/obj/structure/machinery/power/apc/almayer{ - dir = 8 - }, -/obj/structure/sign/safety/rewire{ - pixel_x = -17; - pixel_y = 17 - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/evidence_storage) "lXO" = ( /obj/structure/surface/table/almayer, /obj/item/paper_bin/uscm, @@ -51126,10 +51129,6 @@ icon_state = "sterile_green" }, /area/almayer/medical/hydroponics) -"lYM" = ( -/obj/structure/pipes/vents/pump, -/turf/open/floor/wood/ship, -/area/almayer/shipboard/brig/cells) "lYN" = ( /obj/effect/decal/warning_stripes{ icon_state = "E" @@ -51138,20 +51137,6 @@ icon_state = "plate" }, /area/almayer/hallways/hangar) -"lYP" = ( -/obj/structure/machinery/door/poddoor/almayer/locked{ - dir = 2; - id = "Perma 1"; - name = "\improper cell shutter" - }, -/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ - dir = 2; - name = "\improper Isolation Cell" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/perma) "lZs" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/item/device/radio/intercom{ @@ -51284,6 +51269,27 @@ icon_state = "plate" }, /area/almayer/squads/alpha) +"mdJ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/obj/structure/machinery/door/airlock/almayer/research/reinforced{ + dir = 8; + name = "\improper Containment Airlock"; + closeOtherId = "containment_n" + }, +/obj/structure/machinery/door/poddoor/almayer/biohazard/white{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/medical/containment) "mdW" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/effect/decal/warning_stripes{ @@ -51517,6 +51523,12 @@ /obj/structure/pipes/standard/manifold/fourway/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/starboard_hallway) +"mjt" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/almayer{ + allow_construction = 0 + }, +/area/almayer/shipboard/brig/processing) "mjR" = ( /obj/structure/largecrate/random/secure, /turf/open/floor/almayer{ @@ -51878,33 +51890,6 @@ icon_state = "dark_sterile" }, /area/almayer/medical/operating_room_two) -"mqW" = ( -/obj/item/newspaper{ - name = "character sheet" - }, -/obj/item/device/cassette_tape/heavymetal{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/item/toy/dice, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/machinery/light{ - unacidable = 1; - unslashable = 1 - }, -/obj/structure/machinery/door_control{ - id = "courtyard window"; - name = "Privacy Shutters"; - pixel_x = -8; - pixel_y = -6; - req_access_txt = "3" - }, -/obj/structure/surface/table/almayer, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/cells) "mrc" = ( /obj/item/reagent_container/glass/bucket, /obj/item/tool/mop{ @@ -51923,10 +51908,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/port_hallway) -"mrA" = ( -/obj/structure/closet/secure_closet/brig, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/perma) "mrB" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 8; @@ -52149,6 +52130,36 @@ icon_state = "bluecorner" }, /area/almayer/squads/delta) +"mvE" = ( +/obj/item/bedsheet/brown{ + pixel_y = 13 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/obj/item/bedsheet/brown{ + layer = 3.1 + }, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "mvI" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 4; @@ -52289,6 +52300,33 @@ icon_state = "red" }, /area/almayer/shipboard/brig/processing) +"mza" = ( +/obj/structure/machinery/door/poddoor/shutters/almayer{ + dir = 2; + id = "firearm_storage_armory"; + name = "\improper Armory Shutters" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + dir = 2; + name = "\improper Armory" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 2; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -2; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/armory) "mzb" = ( /obj/structure/prop/invuln/overhead_pipe{ pixel_x = 12 @@ -52404,24 +52442,6 @@ }, /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_s) -"mBp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/machinery/door/airlock/almayer/security/reinforced{ - access_modified = 1; - name = "\improper Astronavigational Deck"; - req_access = null; - req_one_access_txt = "3;19" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/navigation) "mBx" = ( /obj/structure/machinery/firealarm{ dir = 4; @@ -52622,6 +52642,15 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) +"mHb" = ( +/obj/structure/machinery/power/apc/almayer{ + dir = 1 + }, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "red" + }, +/area/almayer/shipboard/brig/processing) "mHm" = ( /obj/structure/sign/safety/distribution_pipes{ pixel_y = -32 @@ -52654,6 +52683,15 @@ }, /turf/open/floor/almayer, /area/almayer/living/gym) +"mHz" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/chief_mp_office) "mHA" = ( /obj/structure/closet/secure_closet/surgical{ pixel_x = -30 @@ -52692,19 +52730,6 @@ icon_state = "mono" }, /area/almayer/living/pilotbunks) -"mHQ" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/airlock/almayer/security/glass{ - dir = 8; - name = "\improper Chief MP's Office" - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/chief_mp_office) "mHR" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -52712,14 +52737,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_a_p) -"mIr" = ( -/obj/structure/closet/secure_closet/personal/cabinet{ - req_access = null; - pixel_y = 17; - pixel_x = 1 - }, -/turf/open/floor/almayer, -/area/almayer/living/numbertwobunks) "mIy" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -53008,16 +53025,6 @@ icon_state = "orange" }, /area/almayer/hallways/stern_hallway) -"mMo" = ( -/obj/structure/machinery/light/small{ - dir = 8 - }, -/obj/item/vehicle_clamp, -/obj/item/vehicle_clamp, -/obj/item/vehicle_clamp, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/armory) "mMP" = ( /obj/effect/landmark/start/intel, /turf/open/floor/plating/plating_catwalk, @@ -53033,16 +53040,16 @@ icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) -"mMW" = ( -/obj/structure/closet/secure_closet/guncabinet/riot_control, -/obj/item/weapon/shield/riot, -/obj/item/weapon/shield/riot, -/obj/item/weapon/shield/riot, -/obj/structure/machinery/light{ - dir = 1 +"mMZ" = ( +/obj/structure/disposalpipe/junction, +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 4 }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/armory) +/turf/open/floor/almayer{ + dir = 4; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "mNf" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/plating/plating_catwalk, @@ -53063,6 +53070,13 @@ icon_state = "sterile" }, /area/almayer/medical/upper_medical) +"mNK" = ( +/obj/structure/closet/secure_closet/brig/restraints, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "red" + }, +/area/almayer/shipboard/brig/perma) "mNR" = ( /obj/structure/surface/rack, /obj/item/storage/toolbox/mechanical, @@ -53204,27 +53218,6 @@ "mQC" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/port_atmos) -"mQE" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/reinforced{ - dir = 2; - name = "\improper Brig Permanent Confinement" - }, -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "perma_lockdown_1"; - name = "\improper Perma Lockdown Shutter" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/perma) "mQH" = ( /turf/open/floor/almayer{ dir = 5; @@ -53614,26 +53607,6 @@ "mXj" = ( /turf/closed/wall/almayer, /area/almayer/living/commandbunks) -"mXS" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/recharger, -/obj/structure/machinery/door_control{ - id = "courtyard_cells"; - name = "\improper Courtyard Lockdown Shutters"; - pixel_x = 16; - req_access_txt = "3" - }, -/obj/structure/machinery/door_control{ - id = "Brig Lockdown Shutters"; - name = "Brig Lockdown Shutters"; - pixel_x = 16; - pixel_y = 8; - req_access_txt = "3" - }, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/processing) "mXU" = ( /turf/open/floor/almayer{ dir = 9; @@ -53668,17 +53641,6 @@ icon_state = "blue" }, /area/almayer/hallways/port_hallway) -"mYU" = ( -/obj/structure/bed/chair/bolted{ - dir = 1 - }, -/obj/structure/machinery/light{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/shipboard/brig/perma) "mYY" = ( /obj/effect/decal/warning_stripes{ icon_state = "SW-out" @@ -53816,6 +53778,18 @@ icon_state = "test_floor4" }, /area/almayer/living/gym) +"ncf" = ( +/obj/structure/machinery/cryopod/right{ + layer = 3.1; + pixel_y = 13 + }, +/obj/structure/machinery/status_display{ + pixel_x = 32 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/cryo) "ncl" = ( /turf/open/floor/almayer{ icon_state = "red" @@ -54016,6 +53990,21 @@ icon_state = "emeraldfull" }, /area/almayer/living/briefing) +"ngr" = ( +/obj/structure/sign/safety/intercom{ + pixel_x = -17 + }, +/obj/structure/bed/sofa/south/grey/left, +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = 28 + }, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "red" + }, +/area/almayer/shipboard/brig/lobby) "ngs" = ( /obj/structure/largecrate/random/barrel/red, /turf/open/floor/almayer{ @@ -54082,19 +54071,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) -"nhs" = ( -/obj/structure/pipes/vents/pump, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/perma) -"nhw" = ( -/obj/structure/machinery/cm_vending/clothing/senior_officer{ - density = 0; - pixel_y = 30 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/numbertwobunks) "nhx" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/toy/deck{ @@ -54111,6 +54087,33 @@ }, /turf/open/floor/almayer, /area/almayer/squads/charlie_delta_shared) +"nhG" = ( +/obj/item/newspaper{ + name = "character sheet" + }, +/obj/item/device/cassette_tape/heavymetal{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/toy/dice, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/machinery/light{ + unacidable = 1; + unslashable = 1 + }, +/obj/structure/machinery/door_control{ + id = "courtyard window"; + name = "Privacy Shutters"; + pixel_x = -8; + pixel_y = -6; + req_access_txt = "3" + }, +/obj/structure/surface/table/almayer, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/cells) "nig" = ( /turf/open/floor/almayer{ icon_state = "red" @@ -54275,6 +54278,31 @@ icon_state = "red" }, /area/almayer/shipboard/starboard_missiles) +"nkF" = ( +/obj/structure/bed/chair/bolted{ + dir = 4 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "redcorner" + }, +/area/almayer/shipboard/brig/processing) +"nkX" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/cameras/almayer_network{ + dir = 4; + layer = 2.8; + pixel_y = 5 + }, +/obj/structure/sign/safety/terminal{ + pixel_x = 8; + pixel_y = 32 + }, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "red" + }, +/area/almayer/shipboard/brig/processing) "nlz" = ( /obj/structure/machinery/brig_cell/cell_3{ pixel_x = 32; @@ -54465,6 +54493,29 @@ icon_state = "dark_sterile" }, /area/almayer/medical/containment) +"npO" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/lobby) +"nqe" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 2 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -2 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/armory) "nqx" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/plating/plating_catwalk, @@ -54685,6 +54736,17 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) +"nux" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "perma_lockdown_1"; + name = "\improper Perma Lockdown Shutter" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/perma) "nuA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54929,14 +54991,6 @@ }, /turf/open/floor/almayer, /area/almayer/squads/req) -"nAw" = ( -/obj/structure/pipes/standard/manifold/hidden/supply{ - dir = 8 - }, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/processing) "nBa" = ( /obj/structure/machinery/cm_vending/sorted/cargo_guns/squad{ req_access = null; @@ -54968,13 +55022,6 @@ icon_state = "mono" }, /area/almayer/living/pilotbunks) -"nBU" = ( -/obj/structure/closet/secure_closet/brig/restraints, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "red" - }, -/area/almayer/shipboard/brig/perma) "nBW" = ( /obj/structure/sign/safety/maint{ pixel_x = -17 @@ -55283,21 +55330,6 @@ icon_state = "plate" }, /area/almayer/shipboard/port_point_defense) -"nGG" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "SW-out" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/obj/structure/machinery/door/airlock/almayer/security/reinforced{ - dir = 2; - name = "\improper Execution Equipment" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/execution) "nGY" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ @@ -55316,15 +55348,6 @@ icon_state = "plating_striped" }, /area/almayer/living/cryo_cells) -"nHM" = ( -/obj/structure/machinery/cryopod{ - layer = 3.1; - pixel_y = 13 - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/cryo) "nIj" = ( /turf/open/floor/almayer{ icon_state = "green" @@ -55403,6 +55426,12 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) +"nJz" = ( +/turf/open/floor/almayer{ + dir = 4; + icon_state = "redcorner" + }, +/area/almayer/shipboard/brig/main_office) "nJH" = ( /obj/structure/machinery/computer/cameras/almayer{ dir = 8; @@ -55421,21 +55450,6 @@ icon_state = "red" }, /area/almayer/command/lifeboat) -"nKW" = ( -/obj/structure/machinery/door_control{ - id = "perma_lockdown_2"; - name = "Maint Lockdown Shutters"; - pixel_y = -20; - req_one_access_txt = "24;31" - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/sign/safety/bulkhead_door{ - pixel_y = -34 - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/perma) "nLa" = ( /obj/structure/bed/chair{ dir = 4 @@ -55537,14 +55551,6 @@ dir = 1 }, /area/almayer/medical/containment/cell) -"nMo" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - layer = 2.5 - }, -/obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/execution) "nMp" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/condiment/hotsauce/franks, @@ -55791,9 +55797,7 @@ icon_state = "W"; layer = 2.5 }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 10 - }, +/obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/shipboard/brig/execution) "nSG" = ( @@ -56013,31 +56017,10 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_m_p) -"nWC" = ( -/obj/structure/disposalpipe/junction, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 5 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/cic_hallway) "nWN" = ( /obj/structure/surface/table/almayer, /turf/open/floor/wood/ship, /area/almayer/engineering/ce_room) -"nXB" = ( -/obj/structure/bed/bedroll{ - desc = "A bed of cotton fabric, purposely made for a cat to comfortably sleep on."; - name = "cat bed" - }, -/obj/structure/machinery/firealarm{ - pixel_x = -1; - pixel_y = 28 - }, -/mob/living/simple_animal/cat/Jones{ - dir = 8 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "nXF" = ( /obj/structure/bed/sofa/south/white/right{ pixel_y = 16 @@ -56452,23 +56435,20 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_p) -"ogW" = ( -/obj/structure/surface/table/almayer, -/obj/item/storage/box/evidence{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/storage/box/evidence{ - pixel_x = 1; - pixel_y = 1 +"ogK" = ( +/obj/structure/bed/bedroll{ + desc = "A bed of cotton fabric, purposely made for a cat to comfortably sleep on."; + name = "cat bed" }, -/obj/structure/machinery/light{ - dir = 1 +/obj/structure/machinery/firealarm{ + pixel_x = -1; + pixel_y = 28 }, -/turf/open/floor/almayer{ - icon_state = "plate" +/mob/living/simple_animal/cat/Jones{ + dir = 8 }, -/area/almayer/shipboard/brig/general_equipment) +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "ohj" = ( /obj/structure/machinery/cryopod, /turf/open/floor/almayer{ @@ -56762,6 +56742,16 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/wood/ship, /area/almayer/shipboard/brig/cells) +"omy" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 5 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/cic_hallway) "omP" = ( /obj/item/tool/mop, /obj/structure/surface/rack, @@ -56859,15 +56849,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) -"opz" = ( -/obj/structure/machinery/status_display{ - pixel_y = 30 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "opC" = ( /obj/structure/machinery/door/airlock/almayer/command/reinforced{ name = "\improper Combat Information Center" @@ -56879,6 +56860,13 @@ "opD" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/living/gym) +"opF" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "red" + }, +/area/almayer/shipboard/brig/chief_mp_office) "opI" = ( /obj/structure/closet/secure_closet, /obj/item/device/camera_film, @@ -57303,15 +57291,6 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south1) -"oxv" = ( -/obj/structure/machinery/door/airlock/almayer/generic{ - dir = 1; - name = "Bathroom" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/chief_mp_office) "oxU" = ( /obj/structure/machinery/photocopier, /turf/open/floor/almayer, @@ -57485,6 +57464,25 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/port) +"oCg" = ( +/obj/structure/machinery/door/airlock/almayer/research/reinforced{ + dir = 8; + name = "\improper Containment Airlock"; + closeOtherId = "containment_s" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/machinery/door/poddoor/almayer/biohazard/white{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply/no_boom{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/medical/medical_science) "oCi" = ( /obj/structure/sign/safety/restrictedarea{ pixel_x = -17 @@ -57776,28 +57774,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_s) -"oIr" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "NE-out"; - pixel_x = 1; - pixel_y = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NW-out"; - pixel_x = -1; - pixel_y = 1 - }, -/obj/structure/machinery/door/airlock/almayer/research/reinforced{ - dir = 8; - name = "\improper Containment Airlock" - }, -/obj/structure/machinery/door/poddoor/almayer/biohazard/white{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/medical/medical_science) "oIt" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -57894,16 +57870,6 @@ icon_state = "silver" }, /area/almayer/command/airoom) -"oLu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer{ - icon_state = "redcorner" - }, -/area/almayer/shipboard/brig/main_office) "oLv" = ( /obj/structure/sign/safety/medical{ pixel_x = 8; @@ -57918,6 +57884,28 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_p) +"oLF" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "Brig Lockdown Shutters"; + name = "\improper Brig Lockdown Shutter" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ + dir = 2; + name = "\improper Brig Lobby"; + req_access = null + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/lobby) "oLT" = ( /obj/structure/machinery/firealarm{ pixel_y = 28 @@ -58351,6 +58339,23 @@ icon_state = "silver" }, /area/almayer/command/cichallway) +"oVf" = ( +/obj/structure/surface/table/almayer, +/obj/item/storage/box/evidence{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/storage/box/evidence{ + pixel_x = 1; + pixel_y = 1 + }, +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/general_equipment) "oVP" = ( /obj/structure/bed/chair{ dir = 4 @@ -58414,12 +58419,6 @@ icon_state = "plate" }, /area/almayer/engineering/upper_engineering/port) -"oXO" = ( -/obj/structure/closet/emcloset/legacy, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/main_office) "oXY" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 8; @@ -58513,23 +58512,6 @@ icon_state = "plate" }, /area/almayer/living/briefing) -"oZG" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/secure_data{ - dir = 8 - }, -/obj/structure/machinery/firealarm{ - pixel_y = 28 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -14; - pixel_y = 28 - }, -/turf/open/floor/almayer{ - dir = 4; - icon_state = "red" - }, -/area/almayer/shipboard/brig/processing) "oZV" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/roller, @@ -58553,6 +58535,23 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/containment) +"pas" = ( +/obj/structure/machinery/cryopod/right, +/obj/structure/sign/safety/cryo{ + pixel_x = 3; + pixel_y = 25 + }, +/obj/structure/sign/safety/rewire{ + pixel_x = 15; + pixel_y = 25 + }, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/cryo) "paI" = ( /obj/structure/sign/safety/debark_lounge{ pixel_x = 15; @@ -58772,15 +58771,6 @@ }, /turf/open/floor/almayer, /area/almayer/living/briefing) -"pfN" = ( -/obj/item/storage/box/nade_box/tear_gas, -/obj/item/storage/box/nade_box/tear_gas{ - pixel_x = 3; - pixel_y = 5 - }, -/obj/structure/surface/table/almayer, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/armory) "pfT" = ( /obj/structure/machinery/ares/processor/interface, /turf/open/floor/almayer/no_build{ @@ -58865,6 +58855,16 @@ icon_state = "plate" }, /area/almayer/command/combat_correspondent) +"phN" = ( +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/processing) "piK" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/poddoor/almayer/locked{ @@ -59036,12 +59036,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) -"pmN" = ( -/obj/structure/pipes/vents/pump, -/turf/open/floor/almayer{ - allow_construction = 0 - }, -/area/almayer/shipboard/brig/processing) "pmV" = ( /obj/structure/prop/server_equipment/yutani_server/broken{ density = 0; @@ -59128,16 +59122,6 @@ }, /turf/open/floor/almayer, /area/almayer/living/auxiliary_officer_office) -"ppy" = ( -/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ - dir = 2; - name = "\improper Brig Lobby" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/processing) "pqc" = ( /turf/open/floor/almayer{ icon_state = "mono" @@ -59197,6 +59181,15 @@ }, /turf/open/floor/almayer, /area/almayer/living/gym) +"pre" = ( +/obj/structure/machinery/door/poddoor/almayer/open{ + id = "Brig Lockdown Shutters"; + name = "\improper Brig Lockdown Shutter" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/hull/upper_hull/u_f_p) "prx" = ( /obj/structure/bed/chair/comfy{ dir = 4 @@ -59230,24 +59223,6 @@ icon_state = "bluefull" }, /area/almayer/living/bridgebunks) -"psh" = ( -/obj/structure/surface/table/almayer, -/obj/item/storage/box/tapes{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/storage/box/tapes{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/storage/box/tapes{ - pixel_x = 1; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/evidence_storage) "psm" = ( /turf/closed/wall/almayer, /area/almayer/hull/upper_hull/u_a_s) @@ -59345,10 +59320,6 @@ /obj/structure/window/framed/almayer/hull, /turf/open/floor/plating, /area/almayer/shipboard/port_missiles) -"puo" = ( -/obj/structure/machinery/light, -/turf/open/floor/almayer, -/area/almayer/living/numbertwobunks) "pur" = ( /obj/structure/machinery/status_display{ pixel_x = -32 @@ -59380,11 +59351,18 @@ /area/almayer/shipboard/brig/main_office) "puE" = ( /obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/secure_data{ - dir = 4 +/obj/structure/machinery/recharger, +/obj/structure/sign/safety/terminal{ + pixel_y = 32 + }, +/obj/structure/transmitter/rotary{ + name = "Brig Wardens's Office Telephone"; + phone_category = "MP Dept."; + phone_id = "Brig Warden's Office"; + pixel_x = 15 }, /turf/open/floor/almayer{ - dir = 8; + dir = 9; icon_state = "red" }, /area/almayer/shipboard/brig/chief_mp_office) @@ -59845,15 +59823,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_p) -"pGl" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "pGK" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -59930,6 +59899,15 @@ icon_state = "bluecorner" }, /area/almayer/living/basketball) +"pId" = ( +/obj/item/storage/box/nade_box/tear_gas, +/obj/item/storage/box/nade_box/tear_gas{ + pixel_x = 3; + pixel_y = 5 + }, +/obj/structure/surface/table/almayer, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/armory) "pIf" = ( /obj/structure/disposalpipe/junction{ dir = 8 @@ -60530,6 +60508,16 @@ icon_state = "silver" }, /area/almayer/living/briefing) +"pUD" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/faxmachine/uscm/brig, +/obj/structure/machinery/status_display{ + pixel_y = 30 + }, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/shipboard/brig/processing) "pUJ" = ( /turf/closed/wall/almayer, /area/almayer/hull/upper_hull/u_f_p) @@ -61318,6 +61306,16 @@ /obj/effect/landmark/late_join/charlie, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/charlie) +"qkn" = ( +/obj/structure/machinery/power/apc/almayer{ + cell_type = /obj/item/cell/hyper; + dir = 1 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "qkP" = ( /obj/item/frame/light_fixture{ anchored = 1; @@ -61388,6 +61386,21 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) +"qlS" = ( +/obj/structure/reagent_dispensers/water_cooler/stacks{ + density = 0; + pixel_x = -7; + pixel_y = 17 + }, +/obj/structure/sign/safety/cryo{ + pixel_x = 12; + pixel_y = 28 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "qmk" = ( /obj/structure/surface/table/almayer, /obj/structure/pipes/standard/simple/hidden/supply{ @@ -61450,20 +61463,6 @@ icon_state = "sterile_green_corner" }, /area/almayer/medical/medical_science) -"qmC" = ( -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "Brig Lockdown Shutters"; - name = "\improper Brig Lockdown Shutter" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ - name = "\improper Brig" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/main_office) "qmD" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 @@ -61496,6 +61495,16 @@ icon_state = "plating_striped" }, /area/almayer/shipboard/brig/execution) +"qmU" = ( +/obj/item/vehicle_clamp, +/obj/item/vehicle_clamp, +/obj/item/vehicle_clamp, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/armory) "qnd" = ( /obj/effect/decal/warning_stripes{ icon_state = "SW-out" @@ -61541,6 +61550,29 @@ icon_state = "test_floor4" }, /area/almayer/living/pilotbunks) +"qnM" = ( +/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + name = "\improper Brig Prisoner Yard"; + closeOtherId = "brigcells" + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 8 + }, +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "courtyard_cells"; + name = "\improper Courtyard Lockdown Shutter" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/processing) "qnP" = ( /obj/structure/prop/invuln/overhead_pipe{ pixel_x = 12 @@ -61613,18 +61645,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/chemistry) -"qpU" = ( -/obj/structure/sign/safety/maint{ - pixel_x = -19; - pixel_y = -6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/safety/bulkhead_door{ - pixel_x = -19; - pixel_y = 6 - }, -/turf/open/floor/almayer, -/area/almayer/hull/upper_hull/u_f_s) "qqn" = ( /obj/structure/desertdam/decals/road_edge{ icon_state = "road_edge_decal3"; @@ -61703,12 +61723,6 @@ icon_state = "silver" }, /area/almayer/command/computerlab) -"qrX" = ( -/obj/structure/closet/firecloset/full, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/main_office) "qsd" = ( /obj/structure/largecrate/random, /turf/open/floor/almayer{ @@ -61848,10 +61862,6 @@ icon_state = "green" }, /area/almayer/living/grunt_rnr) -"qvu" = ( -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/armory) "qvC" = ( /obj/structure/machinery/power/apc/almayer{ dir = 4 @@ -61864,17 +61874,6 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south2) -"qvL" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ - name = "\improper Brig Cells" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/main_office) "qwo" = ( /obj/structure/machinery/washing_machine, /obj/structure/machinery/washing_machine{ @@ -61952,6 +61951,19 @@ }, /turf/closed/wall/almayer/research/containment/wall/purple, /area/almayer/medical/containment/cell) +"qxr" = ( +/obj/structure/machinery/cryopod/right{ + layer = 3.1; + pixel_y = 13 + }, +/obj/structure/machinery/camera/autoname/almayer{ + dir = 8; + name = "ship-grade camera" + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/cryo) "qxz" = ( /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ dir = 2; @@ -62189,6 +62201,24 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) +"qCU" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/sentencing{ + dir = 8; + pixel_y = 6 + }, +/obj/structure/sign/safety/terminal{ + pixel_x = 32; + pixel_y = -22 + }, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "red" + }, +/area/almayer/shipboard/brig/perma) "qDq" = ( /obj/effect/landmark/start/marine/bravo, /obj/effect/landmark/late_join/bravo, @@ -62385,15 +62415,6 @@ icon_state = "dark_sterile" }, /area/almayer/medical/operating_room_two) -"qGO" = ( -/obj/structure/machinery/flasher{ - id = "Perma 2"; - pixel_y = 24 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/shipboard/brig/perma) "qGU" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ @@ -62761,6 +62782,19 @@ "qMu" = ( /turf/closed/wall/almayer/outer, /area/almayer/hull/upper_hull/u_a_p) +"qMD" = ( +/obj/structure/surface/table/almayer, +/obj/item/storage/box/flashbangs, +/obj/item/storage/box/flashbangs{ + pixel_x = 5; + pixel_y = 9 + }, +/obj/item/storage/box/flashbangs{ + pixel_x = -8; + pixel_y = 5 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/armory) "qMP" = ( /obj/structure/bed/chair/comfy{ dir = 8 @@ -63065,12 +63099,6 @@ icon_state = "plate" }, /area/almayer/hallways/hangar) -"qVf" = ( -/obj/structure/closet/secure_closet/brig, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/processing) "qVC" = ( /obj/structure/surface/table/reinforced/almayer_B, /turf/open/floor/almayer{ @@ -63308,21 +63336,33 @@ }, /turf/open/floor/almayer, /area/almayer/living/briefing) -"qZt" = ( -/obj/structure/machinery/camera/autoname/almayer{ - dir = 1; - name = "ship-grade camera" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +"qZA" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, /turf/open/floor/almayer{ + dir = 8; icon_state = "red" }, -/area/almayer/shipboard/brig/main_office) +/area/almayer/shipboard/brig/chief_mp_office) +"qZF" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/cameras/almayer_network{ + dir = 8; + pixel_y = 6 + }, +/obj/structure/machinery/door_control{ + id = "perma_lockdown_1"; + name = "\improper Perma Cells Lockdown"; + pixel_x = -8; + pixel_y = -4; + req_access_txt = "3" + }, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "red" + }, +/area/almayer/shipboard/brig/perma) "qZH" = ( /obj/structure/surface/table/almayer, /obj/item/paper{ @@ -63365,6 +63405,22 @@ icon_state = "emerald" }, /area/almayer/squads/charlie) +"rbi" = ( +/obj/structure/surface/table/almayer, +/obj/item/storage/box/ids{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/device/flash, +/obj/structure/machinery/light{ + dir = 8; + invisibility = 101 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "rbp" = ( /obj/structure/largecrate/random/case/small, /turf/open/floor/almayer{ @@ -63417,6 +63473,18 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/charlie) +"rbK" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 6 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/execution) "rbX" = ( /obj/structure/sign/safety/manualopenclose{ pixel_x = 15; @@ -63479,16 +63547,6 @@ }, /turf/open/floor/almayer, /area/almayer/command/lifeboat) -"rdj" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/pipes/vents/pump, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "rdr" = ( /obj/structure/surface/table/almayer, /obj/item/storage/box/lights/tubes{ @@ -63600,22 +63658,6 @@ icon_state = "kitchen" }, /area/almayer/living/grunt_rnr) -"reQ" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/crew/alt{ - dir = 4 - }, -/obj/structure/transmitter/rotary/no_dnd{ - name = "Brig Cells Telephone"; - phone_category = "MP Dept."; - phone_id = "Brig Cells"; - pixel_x = 16 - }, -/turf/open/floor/almayer{ - dir = 10; - icon_state = "red" - }, -/area/almayer/shipboard/brig/processing) "rfa" = ( /obj/effect/landmark/start/marine/medic/alpha, /obj/effect/landmark/late_join/alpha, @@ -63672,6 +63714,16 @@ icon_state = "dark_sterile" }, /area/almayer/living/port_emb) +"rfY" = ( +/obj/structure/machinery/cryopod, +/obj/structure/machinery/light{ + dir = 8; + invisibility = 101 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/cryo) "rgy" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -64201,6 +64253,21 @@ icon_state = "plate" }, /area/almayer/squads/delta) +"rqS" = ( +/obj/structure/surface/table/almayer, +/obj/item/folder/red{ + pixel_x = -4 + }, +/obj/item/folder/blue{ + pixel_x = 4 + }, +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/shipboard/brig/evidence_storage) "rri" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -64453,25 +64520,6 @@ }, /turf/open/floor/plating, /area/almayer/living/pilotbunks) -"rxg" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_10" - }, -/obj/structure/closet/secure_closet/cmdcabinet{ - desc = "A bulletproof cabinet containing communications equipment."; - name = "communications cabinet"; - pixel_y = 24; - req_access = null; - req_one_access_txt = "207;203" - }, -/obj/item/device/radio, -/obj/item/device/radio/listening_bug/radio_linked/wy, -/obj/item/device/radio/listening_bug/radio_linked/wy{ - pixel_x = 4; - pixel_y = -3 - }, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliason) "rxk" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -64545,6 +64593,15 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_a_s) +"rzY" = ( +/obj/structure/machinery/firealarm{ + pixel_y = 28 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "rAb" = ( /turf/open/floor/almayer{ icon_state = "bluecorner" @@ -64592,6 +64649,20 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/starboard) +"rAX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out" + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "rBa" = ( /obj/structure/machinery/cm_vending/clothing/synth, /obj/structure/prop/invuln/overhead_pipe{ @@ -64706,16 +64777,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/briefing) -"rCU" = ( -/obj/structure/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "silver" - }, -/area/almayer/shipboard/brig/cic_hallway) "rDb" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 6 @@ -64791,12 +64852,31 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_s) +"rDQ" = ( +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/cryo) "rDV" = ( /obj/structure/bed/chair/comfy{ dir = 8 }, /turf/open/floor/plating/plating_catwalk, /area/almayer/medical/medical_science) +"rDY" = ( +/obj/item/stack/sheet/glass/reinforced{ + amount = 50 + }, +/obj/effect/spawner/random/toolbox, +/obj/effect/spawner/random/powercell, +/obj/effect/spawner/random/powercell, +/obj/structure/surface/rack, +/obj/structure/machinery/camera/autoname/almayer{ + dir = 1; + name = "ship-grade camera" + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/chief_mp_office) "rEf" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -64851,6 +64931,15 @@ icon_state = "silverfull" }, /area/almayer/command/computerlab) +"rEO" = ( +/obj/structure/machinery/camera/autoname/almayer{ + dir = 1; + name = "ship-grade camera" + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "rEQ" = ( /obj/structure/machinery/iv_drip, /turf/open/floor/almayer{ @@ -64858,6 +64947,25 @@ icon_state = "sterile_green_side" }, /area/almayer/shipboard/brig/surgery) +"rEY" = ( +/obj/structure/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "silver" + }, +/area/almayer/shipboard/brig/cic_hallway) +"rFg" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + dir = 1; + name = "Bathroom" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/chief_mp_office) "rFs" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/item/folder/black, @@ -65128,6 +65236,14 @@ icon_state = "test_floor4" }, /area/almayer/squads/charlie_delta_shared) +"rJA" = ( +/obj/structure/closet/secure_closet/personal/cabinet{ + req_access = null; + pixel_y = 17; + pixel_x = 1 + }, +/turf/open/floor/almayer, +/area/almayer/living/numbertwobunks) "rJD" = ( /obj/structure/prop/invuln/overhead_pipe{ pixel_x = 12 @@ -65135,17 +65251,43 @@ /obj/structure/machinery/cm_vending/own_points/experimental_tools, /turf/open/floor/almayer, /area/almayer/living/synthcloset) -"rJJ" = ( -/obj/effect/decal/cleanable/blood, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/execution) "rJK" = ( /obj/structure/pipes/vents/pump, /turf/open/floor/almayer, /area/almayer/living/briefing) +"rJN" = ( +/obj/structure/sign/safety/rewire{ + pixel_y = 32 + }, +/obj/item/bedsheet/brown{ + layer = 3.1 + }, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/obj/item/bedsheet/brown{ + pixel_y = 13 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "rKd" = ( /turf/open/floor/almayer/uscm/directional{ dir = 5 @@ -65234,20 +65376,6 @@ dir = 8 }, /area/almayer/medical/containment/cell/cl) -"rMF" = ( -/obj/structure/machinery/status_display{ - pixel_x = 32 - }, -/obj/structure/surface/table/almayer, -/obj/structure/machinery/camera/autoname/almayer{ - dir = 1; - name = "ship-grade camera" - }, -/turf/open/floor/almayer{ - dir = 6; - icon_state = "red" - }, -/area/almayer/shipboard/brig/lobby) "rNa" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/paper_bin/uscm{ @@ -65371,12 +65499,28 @@ icon_state = "blue" }, /area/almayer/squads/delta) +"rQc" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/processing) "rQj" = ( /obj/structure/largecrate/random/barrel/yellow, /turf/open/floor/almayer{ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_p) +"rQt" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/cic_hallway) "rQy" = ( /turf/closed/wall/almayer/white/reinforced, /area/almayer/medical/hydroponics) @@ -65441,25 +65585,6 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/south1) -"rRI" = ( -/obj/structure/machinery/door_control{ - id = "firearm_storage_armory"; - name = "Armory Lockdown"; - pixel_y = 24; - req_access_txt = "4" - }, -/obj/structure/sign/safety/ammunition{ - pixel_y = 32 - }, -/obj/structure/sign/safety/restrictedarea{ - pixel_x = 15; - pixel_y = 32 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "rRU" = ( /obj/structure/machinery/light{ dir = 8 @@ -65565,26 +65690,6 @@ icon_state = "silver" }, /area/almayer/command/computerlab) -"rUB" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 1 - }, -/obj/structure/machinery/door/poddoor/almayer/open{ - id = "Brig Lockdown Shutters"; - name = "\improper Brig Lockdown Shutter" - }, -/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ - dir = 1; - name = "\improper Brig Maintenance" - }, -/obj/structure/machinery/door/poddoor/almayer/open{ - id = "perma_lockdown_2"; - name = "\improper Perma Lockdown Shutter" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/perma) "rUU" = ( /obj/structure/machinery/door/airlock/almayer/maint{ req_access = null; @@ -65599,6 +65704,29 @@ icon_state = "test_floor4" }, /area/almayer/hull/lower_hull/l_f_s) +"rVg" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/airlock/almayer/security/reinforced{ + access_modified = 1; + name = "\improper Astronavigational Deck"; + req_access = null; + req_one_access_txt = "3;19"; + closeOtherId = "astroladder_s" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/navigation) +"rVm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/pipes/standard/simple/hidden/supply, +/turf/open/floor/almayer{ + icon_state = "redcorner" + }, +/area/almayer/shipboard/brig/main_office) "rVo" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -65607,21 +65735,28 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_s) +"rVC" = ( +/obj/structure/machinery/door/airlock/almayer/medical/glass{ + name = "\improper Brig Medbay"; + req_access = null; + req_one_access = null; + req_one_access_txt = "20;3"; + closeOtherId = "brigmed" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/surgery) "rVN" = ( /turf/open/floor/almayer{ dir = 8; icon_state = "red" }, /area/almayer/shipboard/port_missiles) -"rWb" = ( -/obj/structure/machinery/door/poddoor/almayer/open{ - id = "Brig Lockdown Shutters"; - name = "\improper Brig Lockdown Shutter" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/hull/upper_hull/u_f_s) "rWn" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -65828,6 +65963,20 @@ icon_state = "test_floor4" }, /area/almayer/engineering/upper_engineering/notunnel) +"sbD" = ( +/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + dir = 1; + name = "\improper Brig"; + closeOtherId = "brigmaint_n" + }, +/obj/structure/machinery/door/poddoor/almayer/open{ + id = "Brig Lockdown Shutters"; + name = "\improper Brig Lockdown Shutter" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/hull/upper_hull/u_f_s) "sbJ" = ( /turf/closed/wall/almayer/white/hull, /area/almayer/powered/agent) @@ -66013,12 +66162,6 @@ }, /turf/open/floor/almayer, /area/almayer/engineering/lower_engineering) -"sgb" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/processing) "sgc" = ( /obj/structure/closet/crate/freezer/cooler{ pixel_x = -7 @@ -66329,14 +66472,6 @@ icon_state = "green" }, /area/almayer/living/grunt_rnr) -"smj" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/cells) "smn" = ( /obj/structure/sign/safety/escapepod{ pixel_y = -32 @@ -66349,6 +66484,23 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/engineering_workshop) +"smZ" = ( +/obj/structure/window/framed/almayer/hull/hijack_bustable, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + dir = 4; + id = "Warden Office Shutters"; + name = "\improper Privacy Shutters" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 8 + }, +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "courtyard_cells"; + name = "\improper Courtyard Lockdown Shutter" + }, +/turf/open/floor/plating, +/area/almayer/shipboard/brig/chief_mp_office) "snb" = ( /obj/structure/ladder{ height = 1; @@ -66440,6 +66592,16 @@ icon_state = "blue" }, /area/almayer/squads/delta) +"snX" = ( +/obj/structure/sign/safety/medical{ + pixel_x = 16; + pixel_y = 27 + }, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "red" + }, +/area/almayer/shipboard/brig/processing) "soq" = ( /obj/structure/machinery/computer/working_joe{ dir = 4; @@ -66585,16 +66747,6 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/perma) -"sqn" = ( -/obj/structure/machinery/cryopod, -/obj/structure/machinery/light{ - dir = 8; - invisibility = 101 - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/cryo) "sqo" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -66614,22 +66766,6 @@ icon_state = "green" }, /area/almayer/shipboard/brig/cells) -"sry" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/cameras/almayer_network{ - dir = 4; - layer = 2.8; - pixel_y = 5 - }, -/obj/structure/sign/safety/terminal{ - pixel_x = 8; - pixel_y = 32 - }, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "red" - }, -/area/almayer/shipboard/brig/processing) "srT" = ( /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 8 @@ -66732,6 +66868,17 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/north1) +"stO" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/faxmachine/uscm/brig, +/obj/structure/machinery/camera/autoname/almayer{ + dir = 1; + name = "ship-grade camera" + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/perma) "stY" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/pipes/standard/simple/hidden/supply{ @@ -66923,6 +67070,18 @@ }, /turf/open/floor/almayer, /area/almayer/squads/delta) +"syN" = ( +/obj/structure/machinery/cm_vending/gear/executive_officer{ + pixel_y = 30; + density = 0 + }, +/obj/structure/machinery/power/apc/almayer{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/numbertwobunks) "syP" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -66930,17 +67089,6 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/port_hallway) -"syQ" = ( -/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ - name = "\improper Brig Cells" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/processing) "szf" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -66966,13 +67114,6 @@ icon_state = "test_floor4" }, /area/almayer/engineering/engine_core) -"szx" = ( -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m4ra_rifle, -/obj/structure/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/armory) "szE" = ( /obj/effect/decal/warning_stripes{ icon_state = "NE-out"; @@ -67004,6 +67145,12 @@ icon_state = "plate" }, /area/almayer/living/pilotbunks) +"szR" = ( +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = 25 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/main_office) "szU" = ( /obj/structure/toilet{ dir = 8 @@ -67113,6 +67260,29 @@ icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) +"sCR" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 1 + }, +/obj/structure/machinery/door/airlock/almayer/research/reinforced{ + dir = 8; + name = "\improper Containment Airlock"; + closeOtherId = "containment_n" + }, +/obj/structure/machinery/door/poddoor/almayer/biohazard/white{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/medical/medical_science) "sDu" = ( /obj/item/clothing/under/marine/dress, /turf/open/floor/almayer{ @@ -67260,6 +67430,22 @@ icon_state = "plate" }, /area/almayer/command/cic) +"sEZ" = ( +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = 26 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 2 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -2 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/armory) "sFf" = ( /turf/open/floor/almayer{ icon_state = "cargo" @@ -67458,6 +67644,10 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_p) +"sJm" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/chief_mp_office) "sJC" = ( /obj/structure/surface/table/almayer, /obj/item/trash/USCMtray{ @@ -67649,14 +67839,6 @@ icon_state = "plate" }, /area/almayer/living/offices) -"sPw" = ( -/obj/structure/machinery/power/apc/almayer{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/shipboard/brig/cryo) "sPA" = ( /obj/structure/sign/safety/ladder{ pixel_x = 8; @@ -67821,6 +68003,21 @@ icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) +"sTs" = ( +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "Brig Lockdown Shutters"; + name = "\improper Brig Lockdown Shutter" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + name = "\improper Brig"; + closeOtherId = "brigmaint_n" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/main_office) "sTw" = ( /obj/structure/platform_decoration{ dir = 8 @@ -67870,20 +68067,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cells) -"sUu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "sUE" = ( /obj/structure/surface/table/reinforced/almayer_B, /turf/open/floor/almayer{ @@ -67939,11 +68122,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_p) -"sVV" = ( -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/shipboard/brig/cryo) "sWs" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ @@ -68065,21 +68243,31 @@ icon_state = "orange" }, /area/almayer/engineering/lower_engineering) -"sYc" = ( -/obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ - dir = 1; - name = "\improper Hydroponics Garden" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/cells) "sYh" = ( /turf/open/floor/almayer{ dir = 1; icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) +"sYi" = ( +/obj/structure/machinery/door_control{ + id = "firearm_storage_armory"; + name = "Armory Lockdown"; + pixel_y = 24; + req_access_txt = "4" + }, +/obj/structure/sign/safety/ammunition{ + pixel_y = 32 + }, +/obj/structure/sign/safety/restrictedarea{ + pixel_x = 15; + pixel_y = 32 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "sYw" = ( /obj/structure/platform{ dir = 8 @@ -68118,16 +68306,19 @@ }, /area/almayer/command/lifeboat) "sYE" = ( -/obj/structure/sign/safety/maint{ - pixel_x = -19; - pixel_y = -6 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/sign/safety/bulkhead_door{ - pixel_x = -19; - pixel_y = 6 +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 }, -/turf/open/floor/almayer, -/area/almayer/hull/upper_hull/u_f_p) +/obj/structure/machinery/status_display{ + pixel_y = -32 + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "sYP" = ( /obj/structure/reagent_dispensers/fueltank/custom, /turf/open/floor/almayer{ @@ -68255,6 +68446,27 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/living/port_emb) +"tau" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/reinforced{ + dir = 2; + name = "\improper Brig Permanent Confinement" + }, +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "perma_lockdown_1"; + name = "\improper Perma Lockdown Shutter" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/perma) "taA" = ( /obj/structure/machinery/light{ dir = 4 @@ -68353,6 +68565,20 @@ icon_state = "orangecorner" }, /area/almayer/engineering/engine_core) +"tdy" = ( +/obj/structure/bed/sofa/south/grey/right, +/obj/structure/sign/safety/restrictedarea{ + pixel_y = 32 + }, +/obj/structure/sign/safety/security{ + pixel_x = 15; + pixel_y = 32 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/lobby) "tdE" = ( /obj/structure/window/reinforced{ dir = 8 @@ -68456,6 +68682,12 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/starboard) +"tff" = ( +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/lobby) "tfl" = ( /obj/structure/machinery/light{ dir = 1 @@ -68739,16 +68971,6 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/weapon_room) -"tkw" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/pipes/standard/manifold/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/processing) "tkN" = ( /obj/structure/machinery/cm_vending/sorted/cargo_ammo/squad{ req_access = null; @@ -68857,6 +69079,18 @@ }, /turf/open/floor/almayer, /area/almayer/living/briefing) +"tmH" = ( +/obj/structure/pipes/vents/pump, +/obj/structure/machinery/camera/autoname/almayer{ + dir = 4; + name = "ship-grade camera"; + pixel_y = 6 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "redcorner" + }, +/area/almayer/shipboard/brig/execution) "tmI" = ( /obj/structure/machinery/light, /obj/effect/decal/warning_stripes{ @@ -68995,13 +69229,6 @@ icon_state = "test_floor4" }, /area/almayer/hull/lower_hull/l_m_s) -"tpB" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/cic_hallway) "tpD" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -69233,18 +69460,6 @@ }, /turf/open/floor/plating, /area/almayer/powered/agent) -"ttv" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/sign/safety/rewire{ - pixel_x = 12; - pixel_y = -24 - }, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/chief_mp_office) "ttE" = ( /obj/structure/surface/table/almayer, /obj/item/paper_bin{ @@ -69458,24 +69673,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/port_hallway) -"txI" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ - dir = 2; - name = "\improper Brig Armoury"; - req_access = null; - req_one_access_txt = "1;3" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/main_office) "txO" = ( /obj/structure/machinery/landinglight/ds1{ dir = 4 @@ -69586,20 +69783,6 @@ icon_state = "dark_sterile" }, /area/almayer/medical/lower_medical_lobby) -"tzR" = ( -/obj/structure/bed/sofa/south/grey/right, -/obj/structure/sign/safety/restrictedarea{ - pixel_y = 32 - }, -/obj/structure/sign/safety/security{ - pixel_x = 15; - pixel_y = 32 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/shipboard/brig/lobby) "tAi" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -69959,18 +70142,6 @@ }, /turf/open/floor/wood/ship, /area/almayer/living/basketball) -"tIP" = ( -/obj/structure/surface/table/almayer, -/obj/item/tool/extinguisher, -/obj/item/reagent_container/spray/cleaner{ - pixel_x = -8; - pixel_y = 3 - }, -/turf/open/floor/almayer{ - dir = 10; - icon_state = "silver" - }, -/area/almayer/shipboard/brig/cic_hallway) "tIQ" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -70077,6 +70248,33 @@ icon_state = "cargo" }, /area/almayer/living/bridgebunks) +"tLa" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -2; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 2; + pixel_y = 1 + }, +/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + dir = 2; + name = "\improper Armory" + }, +/obj/structure/machinery/door/poddoor/shutters/almayer{ + dir = 2; + id = "firearm_storage_armory"; + name = "\improper Armory Shutters" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/armory) "tLc" = ( /obj/structure/surface/rack, /obj/item/storage/bag/plants{ @@ -70277,18 +70475,6 @@ /obj/structure/machinery/light, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) -"tQT" = ( -/obj/structure/machinery/cm_vending/gear/executive_officer{ - pixel_y = 30; - density = 0 - }, -/obj/structure/machinery/power/apc/almayer{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/numbertwobunks) "tQV" = ( /turf/closed/wall/almayer/outer, /area/almayer/lifeboat_pumps/south1) @@ -70319,7 +70505,15 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_f_s) "tRX" = ( -/turf/closed/wall/almayer, +/obj/structure/machinery/door/airlock/almayer/maint/reinforced, +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "Brig Lockdown Shutters"; + name = "\improper Brig Lockdown Shutter" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/almayer/hull/upper_hull/u_f_s) "tSc" = ( /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -70415,19 +70609,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/req) -"tUj" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 2 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -2 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/shipboard/brig/armory) "tUo" = ( /obj/item/clipboard, /obj/structure/surface/table/reinforced/black, @@ -70636,6 +70817,17 @@ }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) +"tYW" = ( +/obj/structure/bed/chair/bolted{ + dir = 1 + }, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/perma) "tYX" = ( /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -70815,23 +71007,6 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) -"uch" = ( -/obj/structure/closet/secure_closet/cmdcabinet{ - desc = "A bulletproof cabinet containing communications equipment."; - name = "communications cabinet"; - pixel_y = 24; - req_access = null; - req_one_access_txt = "3" - }, -/obj/item/device/radio/listening_bug/radio_linked/mp{ - pixel_y = 8 - }, -/obj/item/device/radio/listening_bug/radio_linked/mp, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "red" - }, -/area/almayer/shipboard/brig/chief_mp_office) "ucp" = ( /obj/structure/window/framed/almayer, /turf/open/floor/plating, @@ -70864,17 +71039,6 @@ icon_state = "plate" }, /area/almayer/command/cic) -"ucW" = ( -/obj/structure/machinery/optable, -/obj/structure/sign/safety/medical{ - pixel_x = 8; - pixel_y = 29 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "sterile_green_corner" - }, -/area/almayer/shipboard/brig/surgery) "udi" = ( /turf/open/floor/almayer{ icon_state = "red" @@ -71097,12 +71261,10 @@ icon_state = "cargo_arrow" }, /area/almayer/living/offices) -"uhm" = ( -/obj/structure/machinery/light{ - dir = 4 - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/cells) +"uhE" = ( +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m4ra_rifle, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/armory) "uhM" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 @@ -71117,6 +71279,12 @@ icon_state = "cargo_arrow" }, /area/almayer/living/offices) +"uhW" = ( +/turf/open/floor/almayer{ + dir = 1; + icon_state = "redcorner" + }, +/area/almayer/shipboard/brig/main_office) "uia" = ( /obj/structure/prop/invuln/overhead_pipe{ pixel_x = 12 @@ -71310,14 +71478,6 @@ icon_state = "mono" }, /area/almayer/medical/upper_medical) -"umQ" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_21" - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/numbertwobunks) "umS" = ( /obj/structure/bed/chair/comfy{ dir = 8 @@ -71406,21 +71566,6 @@ icon_state = "sterile_green" }, /area/almayer/medical/containment) -"uov" = ( -/obj/structure/surface/table/almayer, -/obj/item/folder/red{ - pixel_x = -4 - }, -/obj/item/folder/blue{ - pixel_x = 4 - }, -/obj/structure/machinery/light{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/evidence_storage) "uoA" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 @@ -71436,28 +71581,6 @@ icon_state = "silver" }, /area/almayer/command/computerlab) -"uoK" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "Brig Lockdown Shutters"; - name = "\improper Brig Lockdown Shutter" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ - dir = 2; - name = "\improper Brig Lobby"; - req_access = null - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/lobby) "uoS" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/light/small{ @@ -71479,15 +71602,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_p) -"upJ" = ( -/obj/structure/bed/chair/bolted{ - dir = 4 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "redcorner" - }, -/area/almayer/shipboard/brig/processing) "upM" = ( /obj/structure/machinery/light{ dir = 4 @@ -71555,6 +71669,17 @@ "uqo" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/armory) +"uqy" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ + name = "\improper Brig Cells" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/main_office) "uqA" = ( /obj/structure/machinery/firealarm{ dir = 8; @@ -71575,29 +71700,6 @@ }, /turf/open/floor/almayer, /area/almayer/command/lifeboat) -"urg" = ( -/obj/structure/machinery/flasher{ - id = "Perma 1"; - pixel_y = 24 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/shipboard/brig/perma) -"urL" = ( -/obj/structure/machinery/door/poddoor/almayer/locked{ - dir = 2; - id = "Perma 2"; - name = "\improper cell shutter" - }, -/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ - dir = 2; - name = "\improper Isolation Cell" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/perma) "urM" = ( /obj/structure/machinery/light{ dir = 8 @@ -71678,23 +71780,6 @@ icon_state = "cargo" }, /area/almayer/engineering/upper_engineering) -"utx" = ( -/obj/structure/machinery/computer/working_joe{ - dir = 4; - pixel_x = -17 - }, -/obj/structure/machinery/door_control/brbutton{ - id = "engie_store"; - name = "Emergency Storage"; - pixel_x = -2; - pixel_y = 26; - req_one_access_txt = "6" - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "orangecorner" - }, -/area/almayer/engineering/ce_room) "utK" = ( /obj/structure/machinery/light{ dir = 4 @@ -71709,16 +71794,11 @@ }, /area/almayer/medical/containment/cell) "utZ" = ( -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "Brig Lockdown Shutters"; - name = "\improper Brig Lockdown Shutter" - }, -/obj/structure/machinery/door/airlock/almayer/maint/reinforced, /turf/open/floor/almayer{ - icon_state = "test_floor4" + dir = 4; + icon_state = "redcorner" }, -/area/almayer/hull/upper_hull/u_f_p) +/area/almayer/shipboard/brig/processing) "uuj" = ( /obj/structure/surface/table/almayer, /obj/item/trash/USCMtray{ @@ -71864,20 +71944,6 @@ icon_state = "red" }, /area/almayer/shipboard/brig/cells) -"uwh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "SW-out" - }, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "uws" = ( /obj/structure/machinery/light{ dir = 4 @@ -71907,6 +71973,24 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cic_hallway) +"uwS" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ + dir = 2; + name = "\improper Brig Armoury"; + req_access = null; + req_one_access_txt = "1;3" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/main_office) "uwZ" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -71981,6 +72065,24 @@ icon_state = "greencorner" }, /area/almayer/hallways/port_hallway) +"uyh" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "CIC Lockdown"; + name = "\improper Combat Information Center Blast Door" + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/machinery/door/airlock/almayer/command/reinforced{ + name = "\improper Combat Information Center"; + closeOtherId = "ciclobby_s" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/command/cic) "uys" = ( /turf/closed/wall/almayer/reinforced, /area/almayer/squads/req) @@ -71997,6 +72099,25 @@ icon_state = "dark_sterile" }, /area/almayer/medical/chemistry) +"uyY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/airlock/almayer/security/reinforced{ + access_modified = 1; + name = "\improper Astronavigational Deck"; + req_access = null; + req_one_access_txt = "3;19"; + closeOtherId = "astroladder_n" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/navigation) "uzg" = ( /obj/structure/sign/safety/water{ pixel_x = 8; @@ -72340,6 +72461,28 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/aft_hallway) +"uGv" = ( +/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + name = "\improper Warden's Office"; + closeOtherId = "brigwarden" + }, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + dir = 4; + id = "Warden Office Shutters"; + name = "\improper Privacy Shutters" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 8 + }, +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "courtyard_cells"; + name = "\improper Courtyard Lockdown Shutter" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/chief_mp_office) "uGw" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/drinks/cans/souto/diet/lime{ @@ -72348,22 +72491,16 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_s) +"uGN" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/general_equipment) "uGQ" = ( /obj/structure/machinery/suit_storage_unit/compression_suit/uscm, /turf/open/floor/almayer{ icon_state = "plate" }, /area/almayer/engineering/upper_engineering/starboard) -"uHu" = ( -/obj/item/vehicle_clamp, -/obj/item/vehicle_clamp, -/obj/item/vehicle_clamp, -/obj/structure/machinery/light/small{ - dir = 4 - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/armory) "uId" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -72723,22 +72860,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/port_emb) -"uQS" = ( -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = 26 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 2 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -2 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/shipboard/brig/armory) "uQU" = ( /obj/structure/stairs{ dir = 1 @@ -73040,6 +73161,12 @@ icon_state = "orange" }, /area/almayer/engineering/lower_engineering) +"uVV" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/cells) "uVX" = ( /obj/structure/machinery/light{ dir = 1 @@ -73201,33 +73328,6 @@ icon_state = "plate" }, /area/almayer/hallways/hangar) -"vbq" = ( -/obj/structure/machinery/door/poddoor/shutters/almayer{ - dir = 2; - id = "firearm_storage_armory"; - name = "\improper Armory Shutters" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ - dir = 2; - name = "\improper Armory" - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NE-out"; - pixel_x = 2; - pixel_y = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NW-out"; - pixel_x = -2; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/armory) "vbB" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/south1) @@ -73322,20 +73422,6 @@ icon_state = "test_floor4" }, /area/almayer/medical/lower_medical_lobby) -"vcs" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/machinery/status_display{ - pixel_y = -32 - }, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "vcu" = ( /obj/effect/landmark/start/engineering, /turf/open/floor/plating/plating_catwalk, @@ -73778,6 +73864,15 @@ allow_construction = 0 }, /area/almayer/command/airoom) +"viH" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + dir = 1; + name = "Bathroom" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/main_office) "viJ" = ( /obj/structure/machinery/door/airlock/almayer/maint, /turf/open/floor/almayer{ @@ -73967,6 +74062,12 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cells) +"vlN" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "vlO" = ( /obj/structure/window/reinforced{ dir = 4; @@ -74157,15 +74258,6 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/processing) -"vqi" = ( -/obj/structure/machinery/atm{ - pixel_y = 32 - }, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "red" - }, -/area/almayer/shipboard/brig/processing) "vqC" = ( /obj/structure/pipes/vents/pump{ dir = 4 @@ -74250,20 +74342,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cells) -"vrA" = ( -/obj/item/stack/sheet/glass/reinforced{ - amount = 50 - }, -/obj/effect/spawner/random/toolbox, -/obj/effect/spawner/random/powercell, -/obj/effect/spawner/random/powercell, -/obj/structure/surface/rack, -/obj/structure/machinery/camera/autoname/almayer{ - dir = 1; - name = "ship-grade camera" - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/chief_mp_office) "vrB" = ( /obj/structure/closet/crate{ desc = "One of those old special operations crates from back in the day. After a leaked report from a meeting of SOF leadership lambasted the crates as 'waste of operational funds' the crates were removed from service."; @@ -74759,6 +74837,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/port_hallway) +"vzz" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ + dir = 1; + name = "\improper Hydroponics Garden" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/cells) "vzK" = ( /turf/open/floor/almayer, /area/almayer/engineering/ce_room) @@ -74839,15 +74926,6 @@ icon_state = "silver" }, /area/almayer/living/briefing) -"vBF" = ( -/obj/structure/machinery/cryopod/right, -/obj/structure/sign/safety/cryo{ - pixel_x = 32 - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/shipboard/brig/cryo) "vBJ" = ( /obj/structure/surface/table/almayer, /obj/item/tool/pen, @@ -74868,15 +74946,6 @@ icon_state = "green" }, /area/almayer/squads/req) -"vCc" = ( -/obj/structure/machinery/camera/autoname/almayer{ - dir = 1; - name = "ship-grade camera" - }, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "vCg" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -75034,24 +75103,6 @@ icon_state = "dark_sterile" }, /area/almayer/living/numbertwobunks) -"vGY" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/cameras/almayer_network{ - dir = 8; - pixel_y = 6 - }, -/obj/structure/machinery/door_control{ - id = "perma_lockdown_1"; - name = "\improper Perma Cells Lockdown"; - pixel_x = -8; - pixel_y = -4; - req_access_txt = "3" - }, -/turf/open/floor/almayer{ - dir = 4; - icon_state = "red" - }, -/area/almayer/shipboard/brig/perma) "vHa" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/structure/machinery/computer/ares_console{ @@ -75199,21 +75250,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) -"vIM" = ( -/obj/structure/reagent_dispensers/water_cooler/stacks{ - density = 0; - pixel_x = -7; - pixel_y = 17 - }, -/obj/structure/sign/safety/cryo{ - pixel_x = 12; - pixel_y = 28 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "vIN" = ( /obj/structure/sign/safety/distribution_pipes{ pixel_x = 15; @@ -75304,6 +75340,21 @@ icon_state = "sterile_green_corner" }, /area/almayer/medical/containment) +"vKc" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "CIC Lockdown"; + name = "\improper Combat Information Center Blast Door" + }, +/obj/structure/machinery/door/airlock/almayer/command/reinforced{ + name = "\improper Combat Information Center"; + closeOtherId = "ciclobby_n" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/command/cic) "vKe" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -75320,6 +75371,13 @@ icon_state = "test_floor4" }, /area/almayer/hull/lower_hull/l_f_s) +"vKB" = ( +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m4ra_rifle, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/armory) "vKF" = ( /obj/structure/stairs{ dir = 8; @@ -75771,16 +75829,6 @@ icon_state = "plate" }, /area/almayer/engineering/upper_engineering) -"vTI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/manifold/hidden/supply, -/obj/structure/machinery/light, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "vTK" = ( /turf/closed/wall/almayer/outer, /area/almayer/hull/lower_hull/l_a_p) @@ -75790,23 +75838,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/cryo_cells) -"vTW" = ( -/obj/structure/window/framed/almayer/hull/hijack_bustable, -/obj/structure/machinery/door/poddoor/shutters/almayer/open{ - dir = 4; - id = "Warden Office Shutters"; - name = "\improper Privacy Shutters" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 8 - }, -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "courtyard_cells"; - name = "\improper Courtyard Lockdown Shutter" - }, -/turf/open/floor/plating, -/area/almayer/shipboard/brig/chief_mp_office) "vUb" = ( /obj/effect/landmark/start/marine/alpha, /obj/effect/landmark/late_join/alpha, @@ -75849,6 +75880,9 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) +"vUP" = ( +/turf/closed/wall/almayer/reinforced, +/area/almayer/shipboard/brig/cic_hallway) "vUU" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 8; @@ -76063,24 +76097,6 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) -"vXV" = ( -/obj/structure/machinery/light{ - unacidable = 1; - unslashable = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "SE-out" - }, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/shipboard/brig/main_office) "vXX" = ( /obj/structure/surface/rack, /obj/effect/spawner/random/tool, @@ -76364,24 +76380,18 @@ }, /turf/open/floor/almayer, /area/almayer/living/auxiliary_officer_office) -"wdo" = ( -/obj/structure/machinery/door/airlock/almayer/research/reinforced{ - dir = 8; - name = "\improper Containment Airlock" - }, -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/machinery/door/poddoor/almayer/biohazard/white{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply/no_boom{ - dir = 4 +"wdh" = ( +/obj/structure/surface/table/almayer, +/obj/item/tool/extinguisher, +/obj/item/reagent_container/spray/cleaner{ + pixel_x = -8; + pixel_y = 3 }, /turf/open/floor/almayer{ - icon_state = "test_floor4" + dir = 10; + icon_state = "silver" }, -/area/almayer/medical/medical_science) +/area/almayer/shipboard/brig/cic_hallway) "wdz" = ( /obj/effect/landmark/start/marine/engineer/charlie, /obj/effect/landmark/late_join/charlie, @@ -76454,6 +76464,17 @@ }, /turf/open/floor/plating, /area/almayer/living/pilotbunks) +"weN" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ + dir = 2; + name = "\improper Brig Lobby"; + closeOtherId = "briglobby" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/processing) "weR" = ( /obj/structure/machinery/cryopod, /turf/open/floor/almayer{ @@ -76474,6 +76495,24 @@ }, /turf/open/floor/wood/ship, /area/almayer/command/corporateliason) +"wfB" = ( +/obj/structure/machinery/light{ + unacidable = 1; + unslashable = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "wfE" = ( /turf/closed/wall/almayer, /area/almayer/living/gym) @@ -76912,6 +76951,15 @@ /obj/structure/window/framed/almayer/white/hull, /turf/open/floor/plating, /area/almayer/command/airoom) +"wnw" = ( +/obj/structure/machinery/flasher{ + id = "Perma 2"; + pixel_y = 24 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/perma) "wnL" = ( /obj/item/stack/tile/carpet{ amount = 12 @@ -76970,15 +77018,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) -"wpc" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "silvercorner" - }, -/area/almayer/shipboard/brig/cic_hallway) "wpg" = ( /obj/structure/machinery/blackbox_recorder, /turf/open/shuttle/dropship{ @@ -77114,6 +77153,16 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/lobby) +"wsq" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/processing) "wst" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -77180,21 +77229,6 @@ }, /turf/open/floor/wood/ship, /area/almayer/shipboard/brig/chief_mp_office) -"wuc" = ( -/obj/structure/machinery/door/airlock/almayer/medical/glass{ - name = "\improper Brig Medbay"; - req_access = null; - req_one_access = null; - req_one_access_txt = "20;3" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/surgery) "wul" = ( /obj/structure/machinery/light/small{ dir = 4 @@ -77261,10 +77295,6 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/south1) -"wvk" = ( -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m4ra_rifle, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/armory) "wvE" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/cameras/almayer_network{ @@ -77485,17 +77515,20 @@ icon_state = "green" }, /area/almayer/hallways/port_hallway) -"wBy" = ( -/obj/structure/sign/safety/hazard{ - pixel_y = 32 +"wBd" = ( +/obj/structure/machinery/status_display{ + pixel_x = 32 }, -/obj/structure/sign/safety/ammunition{ - pixel_x = 15; - pixel_y = 32 +/obj/structure/surface/table/almayer, +/obj/structure/machinery/camera/autoname/almayer{ + dir = 1; + name = "ship-grade camera" }, -/obj/structure/machinery/vending/security/riot, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/armory) +/turf/open/floor/almayer{ + dir = 6; + icon_state = "red" + }, +/area/almayer/shipboard/brig/lobby) "wBY" = ( /obj/structure/pipes/vents/pump, /turf/open/floor/almayer, @@ -77540,6 +77573,17 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) +"wCZ" = ( +/obj/structure/machinery/door/poddoor/almayer/open{ + dir = 4; + id = "Brig Lockdown Shutters"; + name = "\improper Brig Lockdown Shutter" + }, +/obj/structure/machinery/door/airlock/almayer/maint/reinforced, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/hull/upper_hull/u_f_p) "wDm" = ( /obj/effect/decal/warning_stripes{ icon_state = "NE-out"; @@ -78125,15 +78169,11 @@ }, /area/almayer/hull/lower_hull) "wNt" = ( -/obj/structure/machinery/power/apc/almayer{ - cell_type = /obj/item/cell/hyper; - dir = 1 - }, /turf/open/floor/almayer{ dir = 1; - icon_state = "red" + icon_state = "redcorner" }, -/area/almayer/shipboard/brig/main_office) +/area/almayer/shipboard/brig/processing) "wNS" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -78168,17 +78208,6 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/port) -"wOV" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 1 - }, -/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ - name = "\improper Brig Lobby" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/lobby) "wPf" = ( /obj/structure/sign/safety/reception{ pixel_x = 32; @@ -78306,6 +78335,16 @@ icon_state = "dark_sterile" }, /area/almayer/engineering/laundry) +"wSu" = ( +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/lobby) "wSK" = ( /obj/structure/janitorialcart, /obj/item/tool/mop, @@ -78672,42 +78711,6 @@ }, /turf/open/floor/plating, /area/almayer/engineering/ce_room) -"wZs" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/door_control{ - id = "courtyard_cells"; - name = "\improper Courtyard Lockdown Shutters"; - pixel_x = 6; - req_access_txt = "3" - }, -/obj/structure/machinery/door_control{ - id = "Brig Lockdown Shutters"; - name = "Brig Lockdown Shutters"; - pixel_x = -6; - req_access_txt = "3" - }, -/obj/structure/machinery/door_control{ - id = "courtyard window"; - name = "Courtyard Window Shutters"; - pixel_x = -6; - pixel_y = 9; - req_access_txt = "3" - }, -/obj/structure/machinery/door_control{ - id = "Cell Privacy Shutters"; - name = "Cell Privacy Shutters"; - pixel_x = 6; - pixel_y = 9; - req_access_txt = "3" - }, -/obj/structure/machinery/light{ - dir = 1 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/shipboard/brig/chief_mp_office) "wZv" = ( /obj/structure/prop/invuln{ desc = "An inflated membrane. This one is puncture proof. Wow!"; @@ -78750,6 +78753,10 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_s) +"wZL" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/perma) "wZM" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -78758,6 +78765,18 @@ icon_state = "blue" }, /area/almayer/hallways/aft_hallway) +"wZN" = ( +/obj/structure/surface/table/almayer, +/obj/item/storage/fancy/cigarettes/lucky_strikes, +/obj/item/tool/lighter, +/obj/item/clothing/glasses/sunglasses/blindfold, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/execution) "wZT" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -78880,10 +78899,6 @@ icon_state = "plate" }, /area/almayer/living/gym) -"xbp" = ( -/obj/structure/pipes/vents/pump, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/chief_mp_office) "xbN" = ( /obj/structure/surface/rack{ density = 0; @@ -78952,25 +78967,6 @@ icon_state = "emeraldfull" }, /area/almayer/living/briefing) -"xet" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/card{ - dir = 4; - layer = 3.2; - pixel_y = 4 - }, -/obj/structure/machinery/computer/secure_data{ - dir = 4; - pixel_y = 23 - }, -/obj/structure/machinery/light{ - dir = 8 - }, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "red" - }, -/area/almayer/shipboard/brig/processing) "xeG" = ( /obj/structure/machinery/door/airlock/almayer/maint, /turf/open/floor/almayer{ @@ -79144,6 +79140,25 @@ icon_state = "plate" }, /area/almayer/living/briefing) +"xgQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/machinery/door/airlock/almayer/security/reinforced{ + access_modified = 1; + name = "\improper Astronavigational Deck"; + req_access = null; + req_one_access_txt = "3;19"; + closeOtherId = "astroladder_n" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/navigation) "xhn" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/almayer{ @@ -79163,19 +79178,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/main_office) -"xhM" = ( -/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ - dir = 1; - name = "\improper Brig" - }, -/obj/structure/machinery/door/poddoor/almayer/open{ - id = "Brig Lockdown Shutters"; - name = "\improper Brig Lockdown Shutter" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/hull/upper_hull/u_f_s) "xhQ" = ( /obj/structure/window/framed/almayer, /turf/open/floor/almayer{ @@ -79194,12 +79196,6 @@ }, /turf/open/floor/carpet, /area/almayer/command/cichallway) -"xii" = ( -/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ - pixel_y = 25 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/general_equipment) "xik" = ( /obj/structure/machinery/shower{ dir = 8 @@ -79568,6 +79564,23 @@ icon_state = "dark_sterile" }, /area/almayer/living/commandbunks) +"xpo" = ( +/obj/structure/closet/secure_closet/cmdcabinet{ + desc = "A bulletproof cabinet containing communications equipment."; + name = "communications cabinet"; + pixel_y = 24; + req_access = null; + req_one_access_txt = "3" + }, +/obj/item/device/radio/listening_bug/radio_linked/mp{ + pixel_y = 8 + }, +/obj/item/device/radio/listening_bug/radio_linked/mp, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "red" + }, +/area/almayer/shipboard/brig/chief_mp_office) "xpt" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = 25 @@ -79665,6 +79678,18 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/stern_hallway) +"xrt" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/sign/safety/rewire{ + pixel_x = 12; + pixel_y = -24 + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/chief_mp_office) "xrN" = ( /obj/structure/largecrate/supply/supplies/mre, /turf/open/floor/almayer{ @@ -79753,6 +79778,13 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_m_s) +"xuc" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/cic_hallway) "xuB" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -80314,6 +80346,25 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) +"xEd" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ + dir = 2; + name = "\improper Brig Armoury"; + req_access = null; + req_one_access_txt = "1;3"; + closeOtherId = "brignorth" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/main_office) "xEz" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/book/manual/surgery, @@ -80447,16 +80498,6 @@ icon_state = "cargo" }, /area/almayer/hull/upper_hull/u_f_p) -"xHZ" = ( -/obj/structure/pipes/standard/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/lobby) "xIb" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ @@ -80506,12 +80547,49 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/evidence_storage) +"xIu" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/secure_data{ + dir = 8 + }, +/obj/structure/machinery/firealarm{ + pixel_y = 28 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -14; + pixel_y = 28 + }, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "red" + }, +/area/almayer/shipboard/brig/processing) "xIQ" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" }, /turf/open/floor/almayer, /area/almayer/living/offices) +"xIW" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/surface/table/almayer, +/obj/item/book/manual/marine_law{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/item/device/flashlight/lamp{ + layer = 3.1; + pixel_x = 7; + pixel_y = 10 + }, +/obj/item/poster, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/lobby) "xJe" = ( /turf/open/floor/almayer{ dir = 8; @@ -80948,17 +81026,6 @@ icon_state = "green" }, /area/almayer/hallways/aft_hallway) -"xRZ" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/poddoor/almayer/open{ - dir = 4; - id = "perma_lockdown_1"; - name = "\improper Perma Lockdown Shutter" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/perma) "xSb" = ( /obj/structure/largecrate/random/barrel/red, /turf/open/floor/almayer{ @@ -81005,18 +81072,6 @@ /obj/effect/landmark/late_join, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/cryo_cells) -"xSN" = ( -/obj/structure/pipes/vents/pump, -/obj/structure/machinery/camera/autoname/almayer{ - dir = 4; - name = "ship-grade camera"; - pixel_y = 6 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "redcorner" - }, -/area/almayer/shipboard/brig/execution) "xSW" = ( /turf/open/floor/almayer{ dir = 8; @@ -81263,6 +81318,20 @@ "xXh" = ( /turf/closed/wall/almayer/research/containment/wall/west, /area/almayer/medical/containment/cell) +"xXj" = ( +/obj/structure/machinery/door/poddoor/almayer/locked{ + dir = 2; + id = "Perma 1"; + name = "\improper cell shutter" + }, +/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + dir = 2; + name = "\improper Isolation Cell" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/perma) "xXr" = ( /obj/item/reagent_container/glass/beaker/bluespace, /obj/structure/machinery/chem_dispenser/research, @@ -81312,6 +81381,16 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/south1) +"xYS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/manifold/hidden/supply, +/obj/structure/machinery/light, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "xYZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -81373,14 +81452,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_p) -"xZP" = ( -/obj/structure/surface/table/almayer, -/obj/item/toy/deck, -/turf/open/floor/almayer{ - dir = 10; - icon_state = "silver" - }, -/area/almayer/shipboard/brig/cic_hallway) "xZU" = ( /obj/structure/machinery/cryopod{ pixel_y = 6 @@ -81392,12 +81463,6 @@ icon_state = "cargo" }, /area/almayer/squads/charlie) -"xZV" = ( -/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ - pixel_y = 25 - }, -/turf/open/floor/almayer, -/area/almayer/shipboard/brig/main_office) "yac" = ( /obj/structure/platform_decoration{ dir = 8 @@ -81791,17 +81856,6 @@ /obj/effect/spawner/random/tool, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_f_p) -"ygG" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_18"; - pixel_y = 13 - }, -/obj/structure/surface/table/almayer, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "red" - }, -/area/almayer/shipboard/brig/chief_mp_office) "ygK" = ( /obj/structure/prop/almayer/computers/sensor_computer3, /turf/open/floor/almayer{ @@ -81925,6 +81979,15 @@ icon_state = "blue" }, /area/almayer/living/pilotbunks) +"yjT" = ( +/obj/structure/machinery/cm_vending/clothing/senior_officer{ + density = 0; + pixel_y = 30 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/numbertwobunks) "yjU" = ( /turf/open/floor/almayer{ icon_state = "emeraldfull" @@ -81974,26 +82037,6 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/main_office) -"ylc" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -1 - }, -/obj/structure/machinery/door/airlock/almayer/research/reinforced{ - dir = 8; - name = "\improper Containment Airlock" - }, -/obj/structure/machinery/door/poddoor/almayer/biohazard/white{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/medical/containment) "yle" = ( /obj/effect/landmark/start/marine/engineer/delta, /obj/effect/landmark/late_join/delta, @@ -89195,8 +89238,8 @@ feb qmR oog dsA -lgp -xSN +rbK +tmH feb aag aaf @@ -89398,8 +89441,8 @@ feb dhd oog jNT -rJJ -jZM +fag +jVP feb feb feb @@ -89601,12 +89644,12 @@ mtl vdl nPb fZX +dBS nSu -nMo wld mtl jjm -jPZ +wZN kgQ feb aag @@ -89807,7 +89850,7 @@ qVF xdJ kzr jqY -nGG +kBh jNT jNT wSK @@ -89999,10 +90042,10 @@ pCi pCi sBo naB -qGO +wnw pHp fgl -urL +dya fLF kEq mtl @@ -90203,16 +90246,16 @@ cpf cHP naB pQr -mYU +tYW wvI vPf -mrA +fvA qPD vcm tul -nBU +mNK gtU -nKW +bjk mtl mtl mtl @@ -90399,7 +90442,7 @@ mUQ rPC wcn eEf -xhM +sbD wcn tng hGD @@ -90416,16 +90459,16 @@ qPD qPD quJ rdA -rUB +iLl sql -rUB +iLl dTQ kIV iYi gSs eyd kIV -kgG +kQz jjX kIV kIV @@ -90609,12 +90652,12 @@ wcn tYB naB pQr -kHL +cjz wvI piK -mrA +fvA qPD -nhs +wZL ffg ffg wsh @@ -90808,25 +90851,25 @@ vBm vBm vBm vBm -qmC +sTs vBm naB -urg +kry pHp fgl -lYP +xXj qXE qPD sPF qPD qPD uQm -fTb +stO xkd teE xJT xkd -ckZ +ljS xkd xkd xkd @@ -91020,8 +91063,8 @@ hCV naB naB uUu -gmz -vGY +qCU +qZF qPD iQd qJo @@ -91225,8 +91268,8 @@ naB nVR nVR nVR -xRZ -mQE +nux +tau nVR xkd xik @@ -91417,19 +91460,19 @@ sFC sFC sFC vBm -rdj +lOI pJv jLM tak cMb -ilc +rbi wDp xys -sry -xet +nkX +iQB cmv vzk -dkr +phN iVP xkd xkd @@ -91627,13 +91670,13 @@ xsg xsg grF xVl -qvL +uqy wdF wdF wdF wdF cMl -aTd +icZ xkd uvY oBq @@ -91834,7 +91877,7 @@ lxy oRk oRk oRk -dvK +utZ cMl hTt kMH @@ -92028,7 +92071,7 @@ lrq lrq lrq cxA -fIu +uwS tpn tpn srT @@ -92036,7 +92079,7 @@ tpn tpn xjF myP -reQ +gDt bju cMl lMc @@ -92224,25 +92267,25 @@ pCi mUQ aou lrq -mMo -qvu -htj -wvk -szx +kEc +chv +cAy +uhE +vKB lrq -xZV -qZt +szR +cZj tpn -lXK +eVR cak vrM tpn -cmP -iSw +mHb +hjM xTH bju wSm -jzs +dEG xkd uvY duT @@ -92252,8 +92295,8 @@ jVa jVa moB moB -smj -sYc +dfk +vzz moB xkd lmk @@ -92427,20 +92470,20 @@ pCi hKi rPC lrq -kvO -tUj -tUj -tUj -tUj -eBf +heo +nqe +nqe +nqe +nqe +tLa eRL igt tpn -uov +rqS cak vrM tpn -kRl +pUD bju wdF wdF @@ -92630,23 +92673,23 @@ ahE nnF rPC lrq -wBy +kui uqo -pfN -ehP +pId +qMD uqo lrq -rRI -vcs +sYi +sYE tpn -psh +gIU xIq vrM tpn -vqi -upJ -mXS -gQh +efT +nkF +hkH +kuJ sLA jSw xkd @@ -92833,25 +92876,25 @@ ahE hUg wcn lrq -uQS -tUj -tUj -tUj -tUj -vbq +sEZ +nqe +nqe +nqe +nqe +mza eRL -vXV +wfB tpn tpn tpn tpn tpn -oZG +xIu xvQ eDt bju cMl -qVf +kAL xkd uvY sgE @@ -93036,23 +93079,23 @@ ahE rPC wcn lrq -mMW -iaT -iaT -jUc -uHu +dEX +fxJ +fxJ +fAr +qmU lrq -lqB -sUu -qrX +hZU +cWs +fAE kHa -ucW +frX mHA kHa -iEI +snX oIh oIh -adm +wNt cMl nlz vNp @@ -93246,8 +93289,8 @@ iwV lrq lrq gob -sUu -oXO +cWs +irF kHa rEQ xmX @@ -93269,7 +93312,7 @@ omt omt uxa iZU -mqW +nhG xkd mnm hgH @@ -93442,14 +93485,14 @@ pCi rPC rwS cQv -ogW +oVf rmx bvH evR cQv cQv vtD -uwh +rAX kHa kHa lRe @@ -93460,7 +93503,7 @@ tzd sgi bju wSm -qVf +kAL xkd uvY qEA @@ -93645,7 +93688,7 @@ ahE rPC nfI cQv -xii +cBw kde kde ajj @@ -93862,7 +93905,7 @@ dQv doj swn neC -pmN +mjt vqc edo fTt @@ -93876,7 +93919,7 @@ ezX pqF rUk thL -lYM +iFc thL tUx fgR @@ -94058,10 +94101,10 @@ pGT pGT vkM sjc -vTI +xYS kHa qPO -wuc +rVC qPO qPO ptq @@ -94069,7 +94112,7 @@ oRk eNR bju cMl -jzs +dEG xkd uvY lSs @@ -94460,10 +94503,10 @@ cQv eaf bEv sBg -fJV +uGN rXd cQv -opz +gax igt swn vsM @@ -94472,7 +94515,7 @@ ebv qPO cFC oIh -syQ +kXX skj tXc cqM @@ -94572,9 +94615,9 @@ bIy alU alU alU -cmI +uyY alU -cmJ +rVg alU alU alU @@ -94666,7 +94709,7 @@ kde ajj tuk cQv -aNo +rzY igt swn skq @@ -94678,7 +94721,7 @@ mTN hZJ iLG jXd -qVf +kAL xkd uvY cjk @@ -94870,14 +94913,14 @@ cQv tlk cQv cxA -txI +xEd qPO qPO -wuc +rVC qPO qPO mFc -ppy +weN emp lze wSm @@ -94887,13 +94930,13 @@ tUx iTI bQc pgP -uhm -bvY +uVV +iBl wIC -vTW -vTW +smZ +smZ wIC -boT +uGv wIC xCj kIV @@ -95070,12 +95113,12 @@ rdM gUg cov cqJ -iiB +hNl tak -exf +uhW uJs tsX -lhe +ngr cDN peO lEv @@ -95089,13 +95132,13 @@ emp emp emp emp -eZe +qnM emp emp wIC -gNl puE crp +dco dqZ wIC lTK @@ -95181,9 +95224,9 @@ kcp alU alU alU -mBp +xgQ alU -cmJ +rVg alU alU alU @@ -95273,12 +95316,12 @@ vxM vxM vxM vxM -vIM +qlS eRL eRL uJs tsX -tzR +tdy cDN oFY oFY @@ -95294,10 +95337,10 @@ oIh qUz ksg oIh -cAy +iTl wIC -wZs cBZ +hMc vAG jIo wIC @@ -95471,39 +95514,39 @@ pCi wcn rPC vxM -sqn -kXe -eAf -nHM +rfY +kGu +iqR +fyp wJh ldu eRL eRL uJs -wOV -jGG +bTk +tff cDN oFY -hlO -jPT +cQL +npO ncl jcf bju cMW qEy -fcW -fRM +bxQ +rQc oDy oDy -tkw +wsq vxK -nAw gwj +aIW jPS jPS -xbp +sJm dqZ -vrA +rDY wIC kIV lre @@ -95681,15 +95724,15 @@ fRS wJh yeu sjc -oLu -dVI -jLo +rVm +mMZ +aDM oSC uFq wsl -xHZ -hzI -rMF +wSu +xIW +wBd emp gbw oRk @@ -95698,11 +95741,11 @@ emp bPH rJj mBx -dvK +utZ pyj -sgb +jPP wIC -uch +xpo xqs rWF uSB @@ -95877,11 +95920,11 @@ pCi tCb aou vxM -sPw -sVV -sVV -sVV -gOH +jvP +rDQ +rDQ +rDQ +ctT mLJ bua ybU @@ -95890,7 +95933,7 @@ tsX tsX tsX epu -uoK +oLF tsX tsX emp @@ -95903,7 +95946,7 @@ emp emp emp wIC -mHQ +lnh wIC rWn rWn @@ -96085,7 +96128,7 @@ sbP sbP sbP wJh -pGl +ekF uif vBm vBm @@ -96101,13 +96144,13 @@ xuZ xuZ xuZ xuZ -rCU -xZP -hHW -bom +rEY +gxU +giR +vUP wIC -fhY -ygG +qZA +dgx fKi vxG wIC @@ -96283,12 +96326,12 @@ pCi wcn rPC vxM -jvl -lkl -vBF -ejs +pas +ncf +kjk +qxr wJh -pGl +ekF ugT qqC ceZ @@ -96303,16 +96346,16 @@ hiM hiM rWs rWs -bwE -nWC -tpB -wpc -tIP +rQt +cgT +xuc +gXx +wdh wIC -gWO +mHz jPS jPS -ttv +xrt wIC qqV nNg @@ -96491,7 +96534,7 @@ vxM vxM vxM gaJ -hFR +hmG xys vBm vGA @@ -96508,7 +96551,7 @@ gde uVA wIQ xWv -kdz +aQb vka jUY wIC @@ -96688,12 +96731,12 @@ aag pCi hKi wcn -rWb +kEU wcn cXZ vBm tJM -cwE +viH lCp ttE vBm @@ -96712,17 +96755,17 @@ awz jfK wIQ mPj -ilr +omy sCQ wIC wvE jhI -fgd +jfY bra wIC kIV hUc -kEO +pre mnm kIV xEF @@ -96891,7 +96934,7 @@ adG adG gqq iCz -rWb +kEU rPC rPC vBm @@ -96925,7 +96968,7 @@ qTQ wIC mnm kIV -kEO +pre kIV mrB tuA @@ -97098,7 +97141,7 @@ akC rDI rPC vBm -fEH +mvE tak lCp iLo @@ -97123,7 +97166,7 @@ nRH wIC tiF vAG -hwo +opF pDW wIC mnm @@ -97301,10 +97344,10 @@ akC cRc rPC vBm -wNt +qkn eRL lwK -iDw +vlN vBm pZS pEB @@ -97504,10 +97547,10 @@ akC oCL rPC vBm -hVa -kpm +rJN +nJz wgi -vCc +rEO vBm vkR wsD @@ -97529,7 +97572,7 @@ uVd wIC wjY aTg -oxv +rFg kkv wIC kIV @@ -97908,8 +97951,8 @@ adu aHZ akC eKM -cjB -hCi +ake +kif vBm rRr dFU @@ -98110,9 +98153,9 @@ adu adu aHZ akC +lUz tRX -fNn -tRX +lUz vBm hqU gcT @@ -98141,7 +98184,7 @@ aTg nNg wIC pUJ -utZ +wCZ pUJ kCi nRR @@ -98313,7 +98356,7 @@ nIt adu hxG akC -qpU +bVT wcn avl vBm @@ -98345,7 +98388,7 @@ wIC wIC gpe mnm -sYE +dXO kCi nNt vqC @@ -101355,7 +101398,7 @@ wBY hJJ qCi agj -nXB +ogK qgr agc agc @@ -103808,11 +103851,11 @@ wVW wVW wVW aCf -ayt +vKc aCf wVW aCf -hzL +uyh aCf wVW wVW @@ -104824,13 +104867,13 @@ awX wVW wVW wVW -aAl +itj jnX -dum +eFc wVW wVW wVW -mIr +rJA aGZ awF cST @@ -105034,7 +105077,7 @@ awF aEM aGV rvA -puo +aKE awF jzE aUw @@ -105437,7 +105480,7 @@ asl amO aGO awF -nhw +yjT aGY rvA aKO @@ -105640,8 +105683,8 @@ asp amO avj awF -tQT -umQ +syN +bMn rvA aqm awF @@ -114162,9 +114205,9 @@ iit kZV vOy vOy -oIr +sCR vOy -wdo +oCg vOy vOy vOy @@ -115177,9 +115220,9 @@ mSK mSK vOy vOy -ylc +mdJ wKP -ylc +cfn vOy vOy rhO @@ -116212,7 +116255,7 @@ rne rne wft awE -rxg +eCG qJU igp awE @@ -129983,7 +130026,7 @@ bNM iEr owg eNi -utx +aWb dyK vzK wYY