From 4f32eeb43d490dab9976c51165d0928ed8cc600a Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Mon, 18 Aug 2025 17:17:02 -0500 Subject: [PATCH 1/4] Adds sleeper despawners --- code/__HELPERS/mobs.dm | 16 +- code/_onclick/hud/alert.dm | 4 + code/game/machinery/announcement_system.dm | 2 + code/game/machinery/sleepers.dm | 170 +++++++++++++++++- maplestation.dme | 2 - .../icons/obj/machines/sleeper.dmi | Bin 0 -> 5366 bytes tgui/packages/tgui/interfaces/Sleeper.jsx | 54 +++--- 7 files changed, 210 insertions(+), 38 deletions(-) create mode 100644 maplestation_modules/icons/obj/machines/sleeper.dmi diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 4080ba37bf94..85d256f815d6 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -184,21 +184,21 @@ GLOBAL_LIST_INIT(skin_tone_names, list( * * Checks that `user` does not move, change hands, get stunned, etc. for the * given `delay`. Returns `TRUE` on success or `FALSE` on failure. - * + * * @param {mob} user - The mob performing the action. - * + * * @param {number} delay - The time in deciseconds. Use the SECONDS define for readability. `1 SECONDS` is 10 deciseconds. - * + * * @param {atom} target - The target of the action. This is where the progressbar will display. - * + * * @param {flag} timed_action_flags - Flags to control the behavior of the timed action. - * + * * @param {boolean} progress - Whether to display a progress bar / cogbar. - * + * * @param {datum/callback} extra_checks - Additional checks to perform before the action is executed. - * + * * @param {string} interaction_key - The assoc key under which the do_after is capped, with max_interact_count being the cap. Interaction key will default to target if not set. - * + * * @param {number} max_interact_count - The maximum amount of interactions allowed. */ /proc/do_after(mob/user, delay, atom/target, timed_action_flags = NONE, progress = TRUE, datum/callback/extra_checks, interaction_key, max_interact_count = 1, hidden = FALSE) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index c2f12a66e821..b7bdc2d957a6 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -113,6 +113,10 @@ /// 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/Initialize(mapload, datum/hud/hud_owner) + . = ..() + if(mouse_over_pointer == MOUSE_HAND_POINTER) + add_filter("clickglow", 2, outline_filter(color = COLOR_GOLD, size = 1)) /atom/movable/screen/alert/MouseEntered(location,control,params) . = ..() diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 1700abb0af1a..861e1a321ccb 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -90,6 +90,8 @@ GLOBAL_LIST_EMPTY(announcement_systems) message = CompileText(newhead, user, rank) else if(message_type == "ARRIVALS_BROKEN") message = "The arrivals shuttle has been damaged. Docking for repairs..." + else if(message_type == "DESPAWN") + message = CompileText("%PERSON, %RANK, has entered cryogenic storage.", user, rank) broadcast(message, channels) diff --git a/code/game/machinery/sleepers.dm b/code/game/machinery/sleepers.dm index c6415bdd04a9..ed1b69a81d7f 100644 --- a/code/game/machinery/sleepers.dm +++ b/code/game/machinery/sleepers.dm @@ -24,6 +24,8 @@ ///Message sent when a user enters the machine. var/enter_message = span_boldnotice("You feel cool air surround you. You go numb as your senses turn inward.") + var/resist_time = 0 SECONDS + ///List of currently available chems. var/list/available_chems = list() ///Used when emagged to scramble which chem is used, eg: mutadone -> morphine @@ -62,6 +64,13 @@ update_appearance() reset_chem_buttons() +/obj/machinery/sleeper/on_set_panel_open(old_value) + . = ..() + if(panel_open) + set_machine_stat(machine_stat | MAINT) + else + set_machine_stat(machine_stat & ~MAINT) + /obj/machinery/sleeper/RefreshParts() . = ..() var/matterbin_rating @@ -82,8 +91,15 @@ return ..() /obj/machinery/sleeper/container_resist_act(mob/living/user) - visible_message(span_notice("[occupant] emerges from [src]!"), - span_notice("You climb out of [src]!")) + if(resist_time > 0) + to_chat(user, span_notice("You pull at the release lever.")) + if(!do_after(user, resist_time, src)) + return + user.visible_message( + span_notice("[occupant] emerges from [src]!"), + span_notice("You climb out of [src]!"), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + ) open_machine() /obj/machinery/sleeper/Exited(atom/movable/gone, direction) @@ -367,3 +383,153 @@ log_combat(user, occupant, "sprayed [chem] into", addition = "via [src]") return TRUE return ..() + +#define IS_SPAWNING "spawning" + +/obj/machinery/sleeper/cryo + name = "cryogenic pod" + desc = "An enclosed machine designed to put subjects in a state of suspended animation for long-term storage." + icon = 'maplestation_modules/icons/obj/machines/sleeper.dmi' + icon_state = "cryopod" + base_icon_state = "cryopod" + // circuit = /obj/item/circuitboard/machine/sleeper/cryo + enter_message = span_boldnotice("You feel a cold chill as you enter the pod. \ + You feel your body go numb as you enter a state of suspended animation.") + possible_chems = null + state_open = FALSE + density = TRUE + resist_time = 0.5 SECONDS + + var/throw_alert = TRUE + +/obj/machinery/sleeper/cryo/Initialize(mapload) + . = ..() + AddElement(/datum/element/empprotection, EMP_PROTECT_ALL) + +/obj/machinery/sleeper/cryo/examine(mob/user) + . = ..() + if(isliving(occupant) && user != occupant) + var/mob/living/occupant_l = occupant + var/obj/item/card/id/their_id = occupant_l.get_idcard() + . += span_notice("Inside, you can see [occupant][their_id ? ", the [their_id.assignment]" : ""][HAS_TRAIT(occupant, TRAIT_KNOCKEDOUT) ? " - sound asleep" : ""].") + +/obj/machinery/sleeper/cryo/set_occupant(atom/movable/new_occupant) + var/mob/living/old_occupant = occupant + . = ..() + var/mob/living/new_occupant_l = new_occupant + var/skey = REF(src) + if(istype(old_occupant)) + old_occupant.remove_status_effect(/datum/status_effect/grouped/stasis, skey) + // REMOVE_TRAIT(old_occupant, TRAIT_KNOCKEDOUT, IS_SPAWNING) + // REMOVE_TRAIT(old_occupant, TRAIT_MUTE, skey) + REMOVE_TRAIT(old_occupant, TRAIT_BLOCK_HEADSET_USE, skey) + REMOVE_TRAIT(old_occupant, TRAIT_SOFTSPOKEN, skey) + UnregisterSignal(old_occupant, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE) + if(throw_alert) + old_occupant.clear_alert(skey) + if(istype(new_occupant_l)) + new_occupant_l.apply_status_effect(/datum/status_effect/grouped/stasis, skey) + // ADD_TRAIT(new_occupant_l, TRAIT_MUTE, skey) + ADD_TRAIT(new_occupant_l, TRAIT_BLOCK_HEADSET_USE, skey) + ADD_TRAIT(new_occupant_l, TRAIT_SOFTSPOKEN, skey) + RegisterSignal(new_occupant_l, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(early_move_check)) + if(throw_alert) + new_occupant_l.throw_alert(skey, /atom/movable/screen/alert/cryosleep) + +/obj/machinery/sleeper/cryo/proc/early_move_check(mob/living/mob_occupant, new_loc, direct) + SIGNAL_HANDLER + + if(mob_occupant.incapacitated(IGNORE_STASIS) || DOING_INTERACTION_WITH_TARGET(mob_occupant, src)) + return NONE + INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, relaymove), mob_occupant, direct) + return COMSIG_MOB_CLIENT_BLOCK_PRE_LIVING_MOVE + +/obj/machinery/sleeper/cryo/close_machine(mob/user, density_to_set) + . = ..() + if(isliving(occupant)) + playsound(src, 'sound/effects/spray.ogg', 5, TRUE, frequency = 0.5) + +/obj/machinery/sleeper/cryo/close_machine(mob/user, density_to_set) + . = ..() + if(isliving(occupant)) + playsound(src, 'sound/machines/fan_stop.ogg', 50, TRUE) + +/obj/machinery/sleeper/cryo/JoinPlayerHere(mob/living/joining_mob, buckle) + if(occupant || !ishuman(joining_mob)) + return ..() + throw_alert = FALSE + if(state_open) + close_machine() + set_occupant(joining_mob) + joining_mob.forceMove(src) + ADD_TRAIT(joining_mob, TRAIT_KNOCKEDOUT, IS_SPAWNING) + addtimer(TRAIT_CALLBACK_REMOVE(joining_mob, TRAIT_KNOCKEDOUT, IS_SPAWNING), rand(8, 15) * 1 SECONDS) + throw_alert = TRUE + +/obj/machinery/sleeper/cryo/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel = 0, custom_deconstruct = FALSE) + return FALSE + +/obj/machinery/sleeper/cryo/default_deconstruction_screwdriver(mob/living/user, icon_state, base_icon_state, obj/item/screwdriver) + return FALSE + +/obj/machinery/sleeper/cryo/default_change_direction_wrench(mob/living/user, obj/item/wrench) + return FALSE + +/obj/machinery/sleeper/cryo/proc/saveable_item(obj/item/save_me) + if(save_me.resistance_flags & INDESTRUCTIBLE) + return TRUE + if(GLOB.steal_item_handler.objectives_by_path[save_me.type]) + return TRUE + return FALSE + +/obj/machinery/sleeper/cryo/proc/despawn_occupant() + if(!isliving(occupant)) + return + var/drop_loc = drop_location() + var/mob/living/mob_occupant = occupant + + set_occupant(null) + mob_occupant.ghostize(FALSE) + + for(var/obj/item/save_me in mob_occupant.get_all_contents()) + if(saveable_item(save_me)) + mob_occupant.transferItemToLoc(save_me, drop_loc, force = TRUE, silent = TRUE) + + qdel(mob_occupant) + open_machine() + + var/datum/record/associated_record = find_record(mob_occupant.real_name) + var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) + if(!QDELETED(associated_record) && !QDELETED(announcer)) + announcer.announce("DESPAWN", mob_occupant.name, associated_record.rank, list()) + + deadchat_broadcast( + " has entered cryogenic storage.", + "[mob_occupant.real_name] ([associated_record?.rank || "Unknown"])", + turf_target = get_turf(src), + message_type = DEADCHAT_ARRIVALRATTLE, + ) + +#undef IS_SPAWNING + +/atom/movable/screen/alert/cryosleep + name = "Cryosleep" + desc = "Click this button to despawn your character." + mouse_over_pointer = MOUSE_HAND_POINTER + icon_state = "cold" + +/atom/movable/screen/alert/cryosleep/Click(location, control, params) + . = ..() + if(!.) + return . + var/obj/machinery/sleeper/cryo/sleeper = owner.loc + if(!istype(sleeper)) + stack_trace("[type] was clicked by [usr] without being in a sleeper.") + return FALSE + + var/are_you_sure = tgui_alert(usr, "Are you sure you want to despawn your character?", "Despawn Character", list("Yes", "No"), 5 SECONDS) + if(are_you_sure != "Yes" || QDELETED(src) || QDELETED(sleeper) || sleeper.occupant != usr) + return FALSE + + sleeper.despawn_occupant() + return TRUE diff --git a/maplestation.dme b/maplestation.dme index d61fe738b457..98934a4e46e3 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -6669,7 +6669,6 @@ #include "maplestation_modules\code\modules\vending\wardrobes.dm" #include "maplestation_modules\code\modules\wiremod\component_printer.dm" #include "maplestation_modules\code\modules\wiremod\shells.dm" -#ifdef MAPLESTATION_STORY_CONTENT #include "maplestation_modules\story_content\albert_equipment\code\albertclothing.dm" #include "maplestation_modules\story_content\albert_equipment\code\albertitem.dm" #include "maplestation_modules\story_content\alraune_miscitems\code\alrmiscitem.dm" @@ -6707,5 +6706,4 @@ #include "maplestation_modules\story_content\volkan_equipment\code\volkanpets_ai.dm" #include "maplestation_modules\story_content\volkan_equipment\datums\loadout_datum.dm" #include "maplestation_modules\story_content\wollys_items\code\wollysitems.dm" -#endif // MAPLESTATION_STORY_CONTENT // END_INCLUDE diff --git a/maplestation_modules/icons/obj/machines/sleeper.dmi b/maplestation_modules/icons/obj/machines/sleeper.dmi new file mode 100644 index 0000000000000000000000000000000000000000..27388313bf1e6b9c83a927825a3eccf696268c3d GIT binary patch literal 5366 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 { )} -
act('door')} - /> - } - > - {chems.map((chem) => ( -
+ {chems.length > 0 && ( +
act('door')} + /> + } + > + {chems.map((chem) => ( +
+ )} ); From 2d43e3fe2ddad81a19fb8ccb56229f9738b68ab8 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Mon, 18 Aug 2025 17:47:23 -0500 Subject: [PATCH 2/4] Some maps --- _maps/map_files/KiloStation/KiloStation.dmm | 434 +++++++++--------- _maps/map_files/LimaStation/LimaStation.dmm | 49 +- _maps/map_files/PubbyStation/PubbyStation.dmm | 39 +- 3 files changed, 256 insertions(+), 266 deletions(-) diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 19efdd3740ef..5c4f259c76ec 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -6115,14 +6115,17 @@ /turf/open/floor/iron/checker, /area/station/service/hydroponics) "aJz" = ( -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 4 }, -/obj/effect/turf_decal/siding/wood{ +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/siding/dark_green{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/commons/lounge) "aJA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, @@ -11934,24 +11937,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"bpo" = ( -/obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/storage/backpack/duffelbag/med{ - pixel_y = 5 - }, -/obj/item/reagent_containers/blood/random{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/reagent_containers/blood/random, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/warning/no_smoking/directional/north, -/obj/effect/spawner/random/medical/memeorgans, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "bpq" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/north, @@ -11988,14 +11973,9 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "bpD" = ( -/obj/structure/girder, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/effect/mapping_helpers/burnt_floor, -/obj/structure/grille/broken, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/turf/open/floor/eighties, +/area/station/commons/locker) "bpF" = ( /obj/structure/sign/departments/cargo, /turf/closed/wall, @@ -12459,18 +12439,15 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "bve" = ( -/obj/structure/table, -/obj/structure/sign/departments/medbay/alt/directional/east, -/obj/structure/sign/poster/official/help_others/directional/south, -/obj/item/storage/box/bodybags{ - pixel_y = 5 +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 }, -/obj/item/clothing/glasses/eyepatch{ - pixel_y = 4 +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/obj/item/clothing/mask/surgical, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/item/radio/intercom/directional/east, +/turf/open/floor/wood/parquet, +/area/station/commons/locker) "bvi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15783,6 +15760,15 @@ /obj/structure/sign/warning/vacuum/external/directional/north, /turf/open/floor/plating, /area/station/construction/mining/aux_base) +"bTk" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + dir = 2; + id = "virologysurgery"; + name = "Virology Privacy Shutters" + }, +/turf/open/floor/plating, +/area/station/medical/virology) "bTl" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/vacuum/external, @@ -23405,7 +23391,7 @@ "cOn" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/station/commons/fitness/recreation/entertainment) +/area/station/commons/lounge) "cOp" = ( /obj/structure/sign/warning/docking, /turf/closed/wall/rust, @@ -23882,13 +23868,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/surgery, /turf/open/floor/iron/dark, /area/station/medical/surgery/fore) -"cVO" = ( -/obj/structure/flora/grass/jungle/a/style_random, -/obj/structure/flora/bush/ferny/style_random, -/mob/living/carbon/human/species/monkey, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/grass, -/area/station/medical/virology) "cWg" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -23924,18 +23903,17 @@ /turf/closed/wall, /area/station/commons/storage/primary) "cWQ" = ( -/obj/effect/turf_decal/siding/wood/corner{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "cWW" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/bot, @@ -27081,21 +27059,25 @@ }, /obj/item/storage/medkit/o2, /obj/machinery/light/small/directional/south, +/obj/item/storage/backpack/duffelbag/med{ + pixel_y = 5 + }, /turf/open/floor/plating, /area/station/maintenance/port/greater) "eeg" = ( -/obj/structure/table, /obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, /obj/machinery/light/small/directional/south, -/obj/item/ashtray{ - pixel_y = 6; - pixel_x = 4 +/obj/machinery/sleeper/cryo{ + dir = 8 }, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/commons/lounge) "eej" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral{ @@ -27883,7 +27865,7 @@ /area/station/service/kitchen/coldroom) "epS" = ( /turf/closed/wall, -/area/station/commons/fitness/recreation/entertainment) +/area/station/commons/lounge) "eqk" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/cmo) @@ -28332,16 +28314,19 @@ /turf/open/floor/iron/dark, /area/station/service/hydroponics) "eyO" = ( -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/light/small/directional/north, +/obj/machinery/sleeper/cryo{ dir = 4 }, -/obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/siding/wood{ +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/siding/dark_green{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/commons/lounge) "ezd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29374,15 +29359,15 @@ /turf/open/floor/grass, /area/station/service/hydroponics) "eRj" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "eRk" = ( /obj/effect/turf_decal/bot, /obj/machinery/conveyor{ @@ -31599,6 +31584,16 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"fBa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "fBf" = ( /obj/effect/turf_decal/siding/dark_green{ dir = 4 @@ -31621,16 +31616,17 @@ /turf/open/floor/iron/dark, /area/station/medical/virology) "fBx" = ( -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/light/small/directional/north, +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/siding/wood{ +/obj/effect/turf_decal/siding/dark_green{ dir = 8 }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/turf/open/floor/iron/white, +/area/station/commons/lounge) "fBA" = ( /obj/machinery/chem_master, /obj/effect/turf_decal/delivery, @@ -33210,17 +33206,12 @@ }, /obj/item/storage/wallet, /obj/item/razor, +/obj/item/ashtray{ + pixel_y = 6; + pixel_x = 4 + }, /turf/open/floor/iron, /area/station/commons/locker) -"geB" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/open/floor/iron/dark, -/area/station/maintenance/department/medical/central) "geJ" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -34005,6 +33996,9 @@ req_access = list("brig") }, /obj/machinery/computer/security/telescreen/isolation/directional/north, +/obj/machinery/sleeper/cryo{ + dir = 4 + }, /turf/open/floor/iron, /area/station/security/prison) "gtw" = ( @@ -35716,9 +35710,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "gVM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -36639,6 +36630,16 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) +"hls" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "hma" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -38554,7 +38555,7 @@ }, /obj/effect/turf_decal/delivery, /obj/structure/sign/poster/official/no_erp/directional/south, -/obj/machinery/vending/coffee, +/obj/machinery/vending/autodrobe/all_access, /turf/open/floor/iron/dark, /area/station/commons/locker) "hUp" = ( @@ -38572,16 +38573,15 @@ /turf/closed/wall/r_wall, /area/station/maintenance/department/bridge) "hUE" = ( -/obj/effect/turf_decal/siding/wood/corner, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "hUK" = ( /obj/item/radio{ pixel_x = 5; @@ -39056,19 +39056,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) -"icM" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Virology Maintenance" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "viromonkey" - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/department/medical/central) "icT" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -39624,7 +39611,6 @@ /obj/item/storage/backpack/satchel, /obj/item/clothing/suit/hooded/wintercoat, /obj/item/clothing/shoes/winterboots, -/obj/machinery/airalarm/directional/north, /obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron/dark, /area/station/commons/locker) @@ -41091,6 +41077,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/machinery/airalarm/directional/east, /turf/open/floor/grass, /area/station/medical/virology) "iJw" = ( @@ -44428,13 +44415,16 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "jRu" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 +/obj/machinery/door/airlock/public/glass{ + name = "Arcade" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, -/area/station/maintenance/department/medical/central) +/area/station/commons/locker) "jRw" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -45485,15 +45475,13 @@ /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) "kkt" = ( -/obj/effect/turf_decal/stripes/corner{ +/obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/structure/sign/warning/biohazard/directional/north, -/obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/commons/locker) "kkB" = ( /obj/structure/altar_of_gods, /obj/item/book/bible, @@ -46810,12 +46798,14 @@ /turf/open/floor/iron/dark, /area/station/medical/paramedic) "kDD" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/station/commons/locker) "kEg" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral{ @@ -47366,18 +47356,18 @@ /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) "kPO" = ( -/obj/structure/table, /obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/screwdriver, /obj/machinery/airalarm/directional/south, /obj/machinery/light/small/directional/south, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/commons/lounge) "kPS" = ( /obj/structure/railing{ dir = 8 @@ -49372,10 +49362,12 @@ /turf/open/floor/engine/plasma, /area/station/engineering/atmos) "lwU" = ( -/obj/structure/chair/stool/directional/east, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/eighties, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "lxe" = ( /turf/closed/wall/r_wall, /area/station/security/prison) @@ -51422,8 +51414,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/vending/autodrobe/all_access, /obj/effect/turf_decal/delivery, +/obj/machinery/vending/coffee, /turf/open/floor/iron/dark, /area/station/commons/locker) "mlu" = ( @@ -54566,14 +54558,10 @@ /turf/open/floor/iron, /area/station/security/brig) "nmo" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/machinery/newscaster/directional/north, +/turf/open/floor/eighties, +/area/station/commons/locker) "nmp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56949,15 +56937,15 @@ /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) "ois" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Arcade" - }, /obj/machinery/door/firedoor, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/public/glass{ + name = "Crew Storage" + }, /turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) +/area/station/commons/lounge) "oiw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, @@ -59128,8 +59116,11 @@ "oUk" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/eighties, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "oUl" = ( /obj/effect/spawner/random/vending/snackvend, /obj/effect/turf_decal/tile/neutral{ @@ -60556,9 +60547,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "prF" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -61976,13 +61964,10 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "pPd" = ( -/obj/effect/turf_decal/bot, -/obj/structure/bed/medical/emergency, -/obj/machinery/light/small/directional/south, -/obj/machinery/iv_drip, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/structure/chair/stool/directional/east, +/turf/open/floor/eighties, +/area/station/commons/locker) "pPi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral{ @@ -62147,9 +62132,6 @@ /area/station/engineering/supermatter) "pRJ" = ( /obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -65596,20 +65578,6 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/white, /area/station/medical/exam_room) -"rdj" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/structure/sink/kitchen/directional/south{ - desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; - name = "old sink" - }, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "rdu" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -69571,8 +69539,14 @@ "siP" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/turf/open/floor/eighties, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "sjJ" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -69633,6 +69607,8 @@ }, /obj/structure/table, /obj/machinery/newscaster/directional/north, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron/dark, /area/station/commons/locker) "sko" = ( @@ -71525,14 +71501,17 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage/gas) "sVw" = ( -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 8 }, -/obj/effect/turf_decal/siding/wood{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/commons/lounge) "sVE" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -73736,10 +73715,12 @@ /area/station/engineering/supermatter) "tJn" = ( /obj/machinery/newscaster/directional/north, -/obj/structure/chair/stool/directional/east, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/eighties, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "tJq" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -74892,11 +74873,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"ubj" = ( -/obj/effect/turf_decal/sand/plating, -/mob/living/basic/bot/cleanbot/medbay, -/turf/open/floor/plating/airless, -/area/space/nearstation) "ubn" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/stripes/line{ @@ -81778,6 +81754,10 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) +"wzo" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/eighties, +/area/station/commons/locker) "wzs" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -82585,10 +82565,14 @@ /turf/open/floor/iron/dark, /area/station/hallway/secondary/service) "wMe" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/commons/locker) "wMg" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/neutral{ @@ -83269,6 +83253,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/locker) "wWj" = ( @@ -83938,10 +83924,11 @@ /turf/closed/wall, /area/station/engineering/storage/tech) "xeI" = ( -/obj/structure/chair/stool/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/eighties, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "xfj" = ( /obj/effect/turf_decal/siding/dark_green{ dir = 1 @@ -85925,6 +85912,7 @@ }, /obj/machinery/light/small/directional/north, /obj/effect/landmark/start/hangover/closet, +/obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark, /area/station/commons/locker) "xKO" = ( @@ -104709,8 +104697,8 @@ asg asX beX cnJ -xeI -xeI +fBa +lwU xeI hUE cOn @@ -104967,7 +104955,7 @@ cnL edM amA siP -oUk +hls oUk eRj ois @@ -105998,7 +105986,7 @@ acm oxC acm coy -epS +hBN xKT fZM sRc @@ -109850,8 +109838,8 @@ aUV aTh aTi sOO -cVO -icM +bAN +bAN nmo bpD tNZ @@ -110107,11 +110095,11 @@ bAN aTi dKg lGj -aPf -bAN -rdj +bTk +wzo pPd -tNZ +pPd +xXg imG kcq uFB @@ -110365,7 +110353,7 @@ vhx bAN teb bAN -bpo +kDD kDD bve wEY @@ -110622,9 +110610,9 @@ bpt wnU bpM boC -boC -geB -boC +tNZ +xXg +tNZ tNZ tNZ ePs @@ -114438,7 +114426,7 @@ aaa acm aaa aaa -ubj +cmU aUz aeu adH diff --git a/_maps/map_files/LimaStation/LimaStation.dmm b/_maps/map_files/LimaStation/LimaStation.dmm index 44b4fd0e9ca5..db4abb3d137a 100644 --- a/_maps/map_files/LimaStation/LimaStation.dmm +++ b/_maps/map_files/LimaStation/LimaStation.dmm @@ -132,6 +132,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"acU" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/sleeper/cryo{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/prison) "adb" = ( /obj/machinery/firealarm/directional/south, /obj/machinery/vending/tool, @@ -1018,7 +1025,7 @@ }, /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 8 }, /turf/open/floor/iron/freezer, @@ -3565,7 +3572,7 @@ dir = 8 }, /obj/machinery/airalarm/directional/south, -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 4 }, /turf/open/floor/iron/freezer, @@ -9774,14 +9781,14 @@ /turf/open/floor/wood/large, /area/station/maintenance/old_rec) "dmO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, /obj/effect/turf_decal/tile/neutral, /obj/machinery/camera/directional/south{ c_tag = "Prison Wing - Foyer"; network = list("ss13", "prison") }, +/obj/machinery/sleeper/cryo{ + dir = 4 + }, /turf/open/floor/iron, /area/station/security/prison) "dng" = ( @@ -16354,6 +16361,9 @@ /obj/machinery/light/directional/south, /obj/effect/turf_decal/tile/neutral, /obj/structure/noticeboard/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison) "fze" = ( @@ -36194,16 +36204,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/port/lower) -"lOt" = ( -/obj/effect/turf_decal/siding/wideplating{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/prison) "lOB" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -37826,7 +37826,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 4 }, /turf/open/floor/iron/freezer, @@ -52305,6 +52305,12 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"qMm" = ( +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/checker, +/area/station/security/prison) "qMo" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, @@ -71327,7 +71333,7 @@ }, /obj/structure/cable, /obj/machinery/newscaster/directional/east, -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 8 }, /turf/open/floor/iron/freezer, @@ -72785,6 +72791,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/security/prison) "xon" = ( @@ -73587,7 +73594,7 @@ }, /obj/structure/cable, /obj/machinery/firealarm/directional/east, -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 8 }, /turf/open/floor/iron/freezer, @@ -94629,7 +94636,7 @@ iIy sJB sJB qQq -dzL +acU eyn cYc wOX @@ -95396,7 +95403,7 @@ riq vLL hrv xoh -lhT +qMm aRO aRO mFV @@ -95909,7 +95916,7 @@ bID nkV jzw aJs -lOt +iQf vis dzL dzL diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 77c4563aeabb..c60b81cdd8bc 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -8865,7 +8865,7 @@ department = "Dormitories"; name = "Dorms Requests Console" }, -/obj/structure/tank_holder/extinguisher, +/obj/machinery/vending/snack/blue, /turf/open/floor/iron/corner{ dir = 1 }, @@ -34311,17 +34311,12 @@ /turf/open/floor/iron/edge, /area/station/security/brig) "emV" = ( -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 4 }, /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"enI" = ( -/obj/machinery/vending/cola/red, -/turf/open/floor/iron/white/smooth_large, -/area/station/commons/fitness/recreation) "enO" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -39370,6 +39365,15 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/white/smooth_large, /area/station/medical/virology) +"ibu" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/sleeper/cryo{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/security/prison) "ibw" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 4 @@ -43332,7 +43336,7 @@ /turf/open/floor/iron/smooth_half, /area/station/science/robotics/mechbay) "low" = ( -/obj/machinery/vending/snack/blue, +/obj/machinery/sleeper/cryo, /turf/open/floor/iron/white/smooth_large, /area/station/commons/fitness/recreation) "lpB" = ( @@ -43884,11 +43888,6 @@ /obj/item/wrench, /turf/open/floor/plating, /area/station/maintenance/department/science) -"lJM" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "lJR" = ( /obj/effect/turf_decal/tile/yellow/half{ dir = 1 @@ -48105,10 +48104,6 @@ "oMN" = ( /turf/open/floor/iron/stairs/left, /area/station/service/abandoned_gambling_den) -"oNs" = ( -/obj/machinery/vending/cigarette, -/turf/open/floor/iron/white/smooth_large, -/area/station/commons/fitness/recreation) "oND" = ( /obj/machinery/meter, /obj/effect/decal/cleanable/dirt, @@ -56822,6 +56817,7 @@ /area/station/medical/medbay/central) "uFi" = ( /obj/item/radio/intercom/directional/east, +/obj/structure/tank_holder/extinguisher, /turf/open/floor/iron/corner{ dir = 8 }, @@ -59327,7 +59323,7 @@ /turf/open/floor/plating, /area/station/engineering/atmos) "wwE" = ( -/obj/structure/table, +/obj/machinery/vending/cola/red, /turf/open/floor/iron/edge{ dir = 4 }, @@ -60110,7 +60106,6 @@ "wRG" = ( /obj/structure/closet/lasertag/red, /obj/effect/turf_decal/tile/blue, -/obj/machinery/door/firedoor, /turf/open/floor/iron/white/corner{ dir = 4 }, @@ -84542,7 +84537,7 @@ aem nud iTv agd -agp +ibu ahp agM asA @@ -103322,10 +103317,10 @@ sFK sFK sFK aiS -enI +low fVJ lFK -lJM +lFK duC rrM pcg @@ -103579,7 +103574,7 @@ aiT aiS sFK aiS -oNs +low eHq wKP wRG From 54bf0bb510b3885fdb393983f02944284fb70f94 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Mon, 18 Aug 2025 18:27:58 -0500 Subject: [PATCH 3/4] Adds way to alt join --- _maps/map_files/KiloStation/KiloStation.dmm | 13 ++++++++- code/__DEFINES/preferences.dm | 4 +++ code/game/machinery/sleepers.dm | 29 +++++++++++++++++-- code/modules/jobs/job_types/_job.dm | 9 +++++- .../modules/mob/dead/new_player/new_player.dm | 2 +- maplestation.dme | 1 + .../code/modules/client/preferences/height.dm | 17 +++++------ .../client/preferences/spawn_location.dm | 20 +++++++++++++ .../character_preferences/_latejoin_spawn.tsx | 11 +++++++ 9 files changed, 91 insertions(+), 15 deletions(-) create mode 100644 maplestation_modules/code/modules/client/preferences/spawn_location.dm create mode 100644 tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/_latejoin_spawn.tsx diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 5c4f259c76ec..32c858c0e518 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -12446,6 +12446,7 @@ dir = 8 }, /obj/item/radio/intercom/directional/east, +/obj/machinery/light/small/directional/south, /turf/open/floor/wood/parquet, /area/station/commons/locker) "bvi" = ( @@ -80759,6 +80760,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) +"weW" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood/parquet, +/area/station/commons/locker) "weX" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -110353,7 +110364,7 @@ vhx bAN teb bAN -kDD +weW kDD bve wEY diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 69ac863865b8..e13ffc00e6cb 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -168,3 +168,7 @@ #define UPPER_LIP "Upper" #define MIDDLE_LIP "Middle" #define LOWER_LIP "Lower" + +// Latejoin Spawnpoints +#define SPAWNPOINT_CRYO "Cryogenic Storage" +#define SPAWNPOINT_ARRIVALS "Arrivals Shuttle" diff --git a/code/game/machinery/sleepers.dm b/code/game/machinery/sleepers.dm index ed1b69a81d7f..6c842761c9c5 100644 --- a/code/game/machinery/sleepers.dm +++ b/code/game/machinery/sleepers.dm @@ -81,7 +81,7 @@ available_chems.Cut() for(var/datum/stock_part/servo/servos in component_parts) - for(var/i in 1 to servos.tier) + for(var/i in 1 to min(servos.tier, length(possible_chems))) available_chems |= possible_chems[i] reset_chem_buttons() @@ -384,6 +384,8 @@ return TRUE return ..() +GLOBAL_LIST_INIT(cryo_sleepers, list()) + #define IS_SPAWNING "spawning" /obj/machinery/sleeper/cryo @@ -405,6 +407,12 @@ /obj/machinery/sleeper/cryo/Initialize(mapload) . = ..() AddElement(/datum/element/empprotection, EMP_PROTECT_ALL) + GLOB.cryo_sleepers += src + open_machine() + +/obj/machinery/sleeper/cryo/Destroy() + GLOB.cryo_sleepers -= src + return ..() /obj/machinery/sleeper/cryo/examine(mob/user) . = ..() @@ -463,7 +471,7 @@ set_occupant(joining_mob) joining_mob.forceMove(src) ADD_TRAIT(joining_mob, TRAIT_KNOCKEDOUT, IS_SPAWNING) - addtimer(TRAIT_CALLBACK_REMOVE(joining_mob, TRAIT_KNOCKEDOUT, IS_SPAWNING), rand(8, 15) * 1 SECONDS) + addtimer(TRAIT_CALLBACK_REMOVE(joining_mob, TRAIT_KNOCKEDOUT, IS_SPAWNING), rand(8, 12) * 1 SECONDS) throw_alert = TRUE /obj/machinery/sleeper/cryo/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel = 0, custom_deconstruct = FALSE) @@ -475,6 +483,23 @@ /obj/machinery/sleeper/cryo/default_change_direction_wrench(mob/living/user, obj/item/wrench) return FALSE +/obj/machinery/sleeper/cryo/open_machine(drop = TRUE, density_to_set = FALSE) + density_to_set = TRUE + return ..() + +/// Checks if this can generically be used as a latejoin spawnpoint +/obj/machinery/sleeper/cryo/proc/can_latejoin(datum/job/joining) + if(!isnull(occupant)) + return FALSE + if(istype(joining, /datum/job/prisoner)) + if(!istype(get_area(src), /area/station/security/prison)) + return FALSE + else + if(!istype(get_area(src), /area/station/commons)) + return FALSE + return TRUE + +/// Checks if the passed item should avoid deletion when being despawned /obj/machinery/sleeper/cryo/proc/saveable_item(obj/item/save_me) if(save_me.resistance_flags & INDESTRUCTIBLE) return TRUE diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index b94ccc2f9730..2c0598b65654 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -516,9 +516,16 @@ log_mapping("Job [title] ([type]) couldn't find a round start spawn point.") /// Finds a valid latejoin spawn point, checking for events and special conditions. -/datum/job/proc/get_latejoin_spawn_point() +/datum/job/proc/get_latejoin_spawn_point(datum/preferences/prefs) if(length(GLOB.jobspawn_overrides[title])) //We're doing something special today. return pick(GLOB.jobspawn_overrides[title]) + if(prefs?.read_preference(/datum/preference/choiced/preferred_latejoin_spawn) == SPAWNPOINT_CRYO) + var/list/common_sleepers = list() + for(var/obj/machinery/sleeper/cryo/sleeper as anything in GLOB.cryo_sleepers) + if(sleeper.can_latejoin(src)) + common_sleepers += sleeper + if(length(common_sleepers)) + return pick(common_sleepers) if(length(SSjob.latejoin_trackers)) return pick(SSjob.latejoin_trackers) return SSjob.get_last_resort_spawn_points() diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 582f119bb037..c501d79d67f2 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -178,7 +178,7 @@ return FALSE mind.late_joiner = TRUE - var/atom/destination = mind.assigned_role.get_latejoin_spawn_point() + var/atom/destination = mind.assigned_role.get_latejoin_spawn_point(client.prefs) if(!destination) CRASH("Failed to find a latejoin spawn point.") var/mob/living/character = create_character(destination) diff --git a/maplestation.dme b/maplestation.dme index 98934a4e46e3..3024d18a1b9f 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -6397,6 +6397,7 @@ #include "maplestation_modules\code\modules\client\preferences\ready_anominity.dm" #include "maplestation_modules\code\modules\client\preferences\runechat_color.dm" #include "maplestation_modules\code\modules\client\preferences\sound_frequency.dm" +#include "maplestation_modules\code\modules\client\preferences\spawn_location.dm" #include "maplestation_modules\code\modules\client\preferences\toggle_radio.dm" #include "maplestation_modules\code\modules\client\preferences\toggle_speech.dm" #include "maplestation_modules\code\modules\client\preferences\species\lizard.dm" diff --git a/maplestation_modules/code/modules/client/preferences/height.dm b/maplestation_modules/code/modules/client/preferences/height.dm index 6df336f29f6a..e5d77e44fb1b 100644 --- a/maplestation_modules/code/modules/client/preferences/height.dm +++ b/maplestation_modules/code/modules/client/preferences/height.dm @@ -68,11 +68,7 @@ target.update_transform(resize_amount) /datum/preference/choiced/mob_size/is_accessible(datum/preferences/preferences) - if(!..(preferences)) - return FALSE - - var/datum/job/fav_job = preferences.get_highest_priority_job() - return !istype(fav_job, /datum/job/ai) && !istype(fav_job, /datum/job/cyborg) + return ..() && !has_silicon_prioritized(preferences) /datum/preference/choiced/mob_size/create_default_value(datum/preferences/preferences) return HEIGHT_NO_CHANGE @@ -118,11 +114,7 @@ target.set_mob_height(height_actual) /datum/preference/choiced/mob_height/is_accessible(datum/preferences/preferences) - if(!..(preferences)) - return FALSE - - var/datum/job/fav_job = preferences.get_highest_priority_job() - return !istype(fav_job, /datum/job/ai) && !istype(fav_job, /datum/job/cyborg) + return ..() && !has_silicon_prioritized(preferences) /datum/preference/choiced/mob_height/create_default_value(datum/preferences/preferences) return DEFAULT_HEIGHT @@ -158,3 +150,8 @@ return return ..() + +/datum/preference/proc/has_silicon_prioritized(datum/preferences/preferences) + // If you have a silicon job, don't show the height preference + var/datum/job/fav_job = preferences.get_highest_priority_job() + return istype(fav_job, /datum/job/ai) || istype(fav_job, /datum/job/cyborg) diff --git a/maplestation_modules/code/modules/client/preferences/spawn_location.dm b/maplestation_modules/code/modules/client/preferences/spawn_location.dm new file mode 100644 index 000000000000..3b1f7c0e8b75 --- /dev/null +++ b/maplestation_modules/code/modules/client/preferences/spawn_location.dm @@ -0,0 +1,20 @@ +/datum/preference/choiced/preferred_latejoin_spawn + savefile_key = "preferred_latejoin_spawn" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + can_randomize = FALSE + +/datum/preference/choiced/preferred_latejoin_spawn/create_default_value() + return SPAWNPOINT_ARRIVALS + +/datum/preference/choiced/preferred_latejoin_spawn/init_possible_values() + return list( + SPAWNPOINT_ARRIVALS, + SPAWNPOINT_CRYO, + ) + +/datum/preference/choiced/preferred_latejoin_spawn/apply_to_human(mob/living/carbon/human/target, value) + return + +/datum/preference/choiced/preferred_latejoin_spawn/is_accessible(datum/preferences/preferences) + return ..() && !has_silicon_prioritized(preferences) diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/_latejoin_spawn.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/_latejoin_spawn.tsx new file mode 100644 index 000000000000..920662e60b04 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/_latejoin_spawn.tsx @@ -0,0 +1,11 @@ +import { FeatureChoiced } from '../base'; +import { FeatureDropdownInput } from '../dropdowns'; + +export const preferred_latejoin_spawn: FeatureChoiced = { + name: 'Latejoin Preference', + description: + 'Determines the method of arrivals when joining midround. \ + This indicates preference - it does not guarantee a specific spawn point, \ + particularly for maps which may not support all options.', + component: FeatureDropdownInput, +}; From 6bb6a3bd768d7dbe35c4ad30cfc5c4bbd441ae34 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Mon, 18 Aug 2025 19:07:42 -0500 Subject: [PATCH 4/4] Fix --- maplestation.dme | 2 ++ 1 file changed, 2 insertions(+) diff --git a/maplestation.dme b/maplestation.dme index 3024d18a1b9f..ebd5f00edb2c 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -6670,6 +6670,7 @@ #include "maplestation_modules\code\modules\vending\wardrobes.dm" #include "maplestation_modules\code\modules\wiremod\component_printer.dm" #include "maplestation_modules\code\modules\wiremod\shells.dm" +#ifdef MAPLESTATION_STORY_CONTENT #include "maplestation_modules\story_content\albert_equipment\code\albertclothing.dm" #include "maplestation_modules\story_content\albert_equipment\code\albertitem.dm" #include "maplestation_modules\story_content\alraune_miscitems\code\alrmiscitem.dm" @@ -6707,4 +6708,5 @@ #include "maplestation_modules\story_content\volkan_equipment\code\volkanpets_ai.dm" #include "maplestation_modules\story_content\volkan_equipment\datums\loadout_datum.dm" #include "maplestation_modules\story_content\wollys_items\code\wollysitems.dm" +#endif // MAPLESTATION_STORY_CONTENT // END_INCLUDE