diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 3abd79708f7a..de7eb672e87b 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -23,6 +23,8 @@ #define T0C 273.15 // 0degC #define T20C 293.15 // 20degC +#define T90C 363.15 // 90degC +#define T120C 393.15 // 120degC #define TCMB 2.7 // -270.3degC #define ICE_COLONY_TEMPERATURE 223 //-50degC #define SOROKYNE_TEMPERATURE 223 // Same as Ice for now diff --git a/code/__DEFINES/dcs/signals/signals_global.dm b/code/__DEFINES/dcs/signals/signals_global.dm index 032a1891a808..dc5e70fcd5ec 100644 --- a/code/__DEFINES/dcs/signals/signals_global.dm +++ b/code/__DEFINES/dcs/signals/signals_global.dm @@ -60,8 +60,11 @@ #define COMSIG_GLOB_GROUNDSIDE_FORSAKEN_HANDLING "!groundside_forsaken_handling" /// From -#define COMSIG_GLOB_YAUTJA_ARMORY_OPENED "yautja_armory_opened" +#define COMSIG_GLOB_YAUTJA_ARMORY_OPENED "!yautja_armory_opened" /// From /proc/biohazard_lockdown() -#define COMSIG_GLOB_RESEARCH_LOCKDOWN "research_lockdown_closed" -#define COMSIG_GLOB_RESEARCH_LIFT "research_lockdown_opened" +#define COMSIG_GLOB_RESEARCH_LOCKDOWN "!research_lockdown_closed" +#define COMSIG_GLOB_RESEARCH_LIFT "!research_lockdown_opened" + +/// From /obj/structure/machinery/power/fusion_engine/proc/set_overloading() : (set_overloading) +#define COMSIG_GLOB_GENERATOR_SET_OVERLOADING "!generator_set_overloading" diff --git a/code/__DEFINES/hijack.dm b/code/__DEFINES/hijack.dm new file mode 100644 index 000000000000..85d4c227ae70 --- /dev/null +++ b/code/__DEFINES/hijack.dm @@ -0,0 +1,13 @@ +#define EVACUATION_TYPE_NONE 0 +#define EVACUATION_TYPE_ADDITIVE 1 +#define EVACUATION_TYPE_MULTIPLICATIVE 2 + +#define HIJACK_ANNOUNCE "ARES Emergency Procedures" +#define XENO_HIJACK_ANNOUNCE "You sense something unusual..." + +#define EVACUATION_STATUS_NOT_INITIATED 0 +#define EVACUATION_STATUS_INITIATED 1 + +#define HIJACK_OBJECTIVES_NOT_STARTED 0 +#define HIJACK_OBJECTIVES_STARTED 1 +#define HIJACK_OBJECTIVES_COMPLETE 2 diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 158c59aff327..301ca0409655 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -109,36 +109,23 @@ // Subsystems shutdown in the reverse of the order they initialize in // The numbers just define the ordering, they are meaningless otherwise. -#define SS_INIT_TICKER_SPAWN 999 #define SS_INIT_INPUT 85 -#define SS_INIT_FAIL_TO_TOPIC 84 #define SS_INIT_TOPIC 83 #define SS_INIT_LOBBYART 82 -#define SS_INIT_RUST 30 #define SS_INIT_INFLUXDRIVER 28 -#define SS_INIT_SUPPLY_SHUTTLE 25 #define SS_INIT_GARBAGE 24 #define SS_INIT_EVENTS 23.5 -#define SS_INIT_JOB 23 +#define SS_INIT_HIJACK 22.6 #define SS_INIT_REDIS 22.5 #define SS_INIT_REAGENTS 22.1 #define SS_INIT_MAPPING 22 #define SS_INIT_NIGHTMARE 21.5 #define SS_INIT_TIMETRACK 21.1 #define SS_INIT_HUMANS 21 -#define SS_INIT_MAP 20 -#define SS_INIT_COMPONENT 19.5 #define SS_INIT_POWER 19 -#define SS_INIT_OBJECT 18 -#define SS_INIT_PIPENET 17.5 -#define SS_INIT_XENOARCH 17 -#define SS_INIT_MORE_INIT 16 -#define SS_INIT_AIR 15 -#define SS_INIT_TELEPORTER 13 #define SS_INIT_INFLUXMCSTATS 12 #define SS_INIT_INFLUXSTATS 11 #define SS_INIT_LIGHTING 10 -#define SS_INIT_DEFCON 9 #define SS_INIT_LAW 6 #define SS_INIT_FZ_TRANSITIONS 5 #define SS_INIT_PROJECTILES 4.1 @@ -152,12 +139,9 @@ #define SS_INIT_RADIO 2 #define SS_INIT_TIMER 100 #define SS_INIT_UNSPECIFIED 0 -#define SS_INIT_EMERGENCY_SHUTTLE -19 #define SS_INIT_ASSETS -20 #define SS_INIT_TICKER -21 #define SS_INIT_VOTE -23 -#define SS_INIT_FINISH -24 -#define SS_INIT_ADMIN -26 #define SS_INIT_DATABASE -27 #define SS_INIT_ENTITYMANAGER -28 #define SS_INIT_PLAYTIME -29 @@ -176,7 +160,6 @@ #define SS_PRIORITY_SOUND 250 #define SS_PRIORITY_TICKER 200 #define SS_PRIORITY_NIGHTMARE 180 -#define SS_PRIORITY_MAPVIEW 170 #define SS_PRIORITY_QUADTREE 160 #define SS_PRIORITY_CHAT 155 #define SS_PRIORITY_STATPANEL 154 @@ -194,20 +177,17 @@ #define SS_PRIORITY_VOTE 110 #define SS_PRIORITY_FAST_OBJECTS 105 #define SS_PRIORITY_OBJECTS 104 -#define SS_PRIORITY_FACEHUGGERS 100 #define SS_PRIORITY_DECORATOR 99 +#define SS_PRIORITY_HIJACK 97 #define SS_PRIORITY_POWER 95 #define SS_PRIORITY_EFFECTS 92 #define SS_PRIORITY_MACHINERY 90 #define SS_PRIORITY_FZ_TRANSITIONS 88 -#define SS_PRIORITY_PIPENET 85 #define SS_PRIORITY_ROUND_RECORDING 83 #define SS_PRIORITY_SHUTTLE 80 -#define SS_PRIORITY_TELEPORTER 75 #define SS_PRIORITY_EVENT 65 #define SS_PRIORITY_DISEASE 60 -#define SS_PRIORITY_FAST_MACHINERY 55 -#define SS_PRIORITY_MIDI 40 +#define SS_PRIORITY_DEFENSES 55 #define SS_PRIORITY_ENTITY 37 #define SS_PRIORITY_DEFCON 35 #define SS_PRIORITY_ACID_PILLAR 34 @@ -226,7 +206,6 @@ #define SS_PRIORITY_INFLUXSTATS 8 #define SS_PRIORITY_PLAYTIME 5 #define SS_PRIORITY_PERFLOGGING 4 -#define SS_PRIORITY_CORPSESPAWNER 3 #define SS_PRIORITY_GARBAGE 2 #define SS_PRIORITY_INACTIVITY 1 #define SS_PRIORITY_ADMIN 0 diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index d468d6044196..0cc106ec9cf2 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "6.6.1" +#define TGS_DMAPI_VERSION "6.6.2" // All functions and datums outside this document are subject to change with any version and should not be relied on. diff --git a/code/__DEFINES/urls.dm b/code/__DEFINES/urls.dm index 137095327a2c..5d3fca1a2032 100644 --- a/code/__DEFINES/urls.dm +++ b/code/__DEFINES/urls.dm @@ -1,3 +1,7 @@ +// placeholder strings to be replaced +#define WIKI_PLACEHOLDER "%WIKIURL%" +#define LAW_PLACEHOLDER "%LAWURL%" + // ------ MISC WIKI LINKS ------ // #define URL_WIKI_LAW "Marine_Law" #define URL_WIKI_XENO_QUICKSTART "Xeno_Quickstart_Guide" diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 9a6ee4362088..38c02e776735 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -21,16 +21,16 @@ #define between(low, middle, high) (max(min(middle, high), low)) //Offuscate x for coord system -#define obfuscate_x(x) (x + obfs_x) +#define obfuscate_x(x) (x + GLOB.obfs_x) //Offuscate y for coord system -#define obfuscate_y(y) (y + obfs_y) +#define obfuscate_y(y) (y + GLOB.obfs_y) //Deoffuscate x for coord system -#define deobfuscate_x(x) (x - obfs_x) +#define deobfuscate_x(x) (x - GLOB.obfs_x) //Deoffuscate y for coord system -#define deobfuscate_y(y) (y - obfs_y) +#define deobfuscate_y(y) (y - GLOB.obfs_y) #define can_xeno_build(T) (!T.density && !(locate(/obj/structure/fence) in T) && !(locate(/obj/structure/tunnel) in T) && (locate(/obj/effect/alien/weeds) in T)) diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm index 36058a44fc37..1e1e9cefd5db 100644 --- a/code/_globalvars/global_lists.dm +++ b/code/_globalvars/global_lists.dm @@ -1,6 +1,3 @@ - -var/list/unansweredAhelps = list() //This feels inefficient, but I can't think of a better way. Stores the message indexed by CID - GLOBAL_LIST_EMPTY(PressFaxes) GLOBAL_LIST_EMPTY(WYFaxes) //Departmental faxes GLOBAL_LIST_EMPTY(USCMFaxes) diff --git a/code/_globalvars/lists/object_lists.dm b/code/_globalvars/lists/object_lists.dm index 3a417625538b..3db9bd28cbfe 100644 --- a/code/_globalvars/lists/object_lists.dm +++ b/code/_globalvars/lists/object_lists.dm @@ -31,3 +31,6 @@ GLOBAL_LIST_EMPTY_TYPED(all_multi_vehicles, /obj/vehicle/multitile) GLOBAL_LIST_EMPTY_TYPED(lifeboat_almayer_docks, /obj/docking_port/stationary/lifeboat_dock) GLOBAL_LIST_EMPTY_TYPED(lifeboat_doors, /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/lifeboat/blastdoor) + +GLOBAL_LIST_EMPTY_TYPED(teleporters, /datum/teleporter) +GLOBAL_LIST_EMPTY(teleporters_by_id) diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 646b8ec2c854..44f4b2c4010f 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -30,3 +30,10 @@ GLOBAL_VAR_INIT(time_offset, setup_offset()) /// The last count of possible candidates in the xeno larva queue (updated via get_alien_candidates) GLOBAL_VAR(xeno_queue_candidate_count) + +//Coordinate obsfucator +//Used by the rangefinders and linked systems to prevent coords collection/prefiring +/// A number between -500 and 500. +GLOBAL_VAR(obfs_x) +/// A number between -500 and 500. +GLOBAL_VAR(obfs_y) diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index e8b010669c0e..147f57fcb1aa 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -20,7 +20,8 @@ var/policy var/static/regex/ic_filter_regex - var/list/fail_to_topic_whitelisted_ips + + var/is_loaded = FALSE /datum/controller/configuration/proc/admin_reload() if(IsAdminAdvancedProcCall()) @@ -53,7 +54,8 @@ loadmaplist(CONFIG_GROUND_MAPS_FILE, GROUND_MAP) loadmaplist(CONFIG_SHIP_MAPS_FILE, SHIP_MAP) LoadChatFilter() - LoadTopicRateWhitelist() + + is_loaded = TRUE if(Master) Master.OnConfigLoad() @@ -333,18 +335,3 @@ /datum/controller/configuration/proc/DelayedMessageAdmins(text) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(message_admins), text), 0) -/datum/controller/configuration/proc/LoadTopicRateWhitelist() - LAZYINITLIST(fail_to_topic_whitelisted_ips) - if(!fexists("[directory]/topic_rate_limit_whitelist.txt")) - log_config("Error 404: topic_rate_limit_whitelist.txt not found!") - return - - log_config("Loading config file topic_rate_limit_whitelist.txt...") - - for(var/line in file2list("[directory]/topic_rate_limit_whitelist.txt")) - if(!line) - continue - if(findtextEx(line, "#", 1, 2)) - continue - - fail_to_topic_whitelisted_ips[line] = 1 diff --git a/code/controllers/subsystem/admin.dm b/code/controllers/subsystem/admin.dm deleted file mode 100644 index 8aab64b04881..000000000000 --- a/code/controllers/subsystem/admin.dm +++ /dev/null @@ -1,40 +0,0 @@ -SUBSYSTEM_DEF(admin) - name = "Admin" - wait = 5 MINUTES - flags = SS_NO_INIT | SS_KEEP_TIMING - runlevels = RUNLEVELS_DEFAULT|RUNLEVEL_LOBBY - var/list/currentrun = list() - var/times_repeated = 0 - -/datum/controller/subsystem/admin/stat_entry(msg) - msg = "P:[unansweredAhelps.len]" - return ..() - -/datum/controller/subsystem/admin/fire(resumed = FALSE) - if (!resumed) - currentrun = unansweredAhelps.Copy() - - if(!currentrun.len) - times_repeated = 0 - return - - var/msg = "Unheard Ahelps (Repeated [times_repeated] times):" - - while (currentrun.len) - var/ahelp_msg = currentrun[currentrun.len] - currentrun.len-- - - if (!ahelp_msg) - continue - - msg += unansweredAhelps[ahelp_msg] + "\n" - - if (MC_TICK_CHECK) - return - - for(var/client/C in GLOB.admins) - if(C && C.admin_holder && (C.admin_holder.rights & R_MOD)) - if(C.prefs.toggles_sound & SOUND_ADMINHELP) - sound_to(C, 'sound/effects/adminhelp_new.ogg') - to_chat(C, msg) - times_repeated++ diff --git a/code/controllers/subsystem/disease.dm b/code/controllers/subsystem/disease.dm index 25200cce11ed..b98187ca252c 100644 --- a/code/controllers/subsystem/disease.dm +++ b/code/controllers/subsystem/disease.dm @@ -1,22 +1,19 @@ -var/list/active_diseases = list() - - SUBSYSTEM_DEF(disease) name = "Disease" wait = 2 SECONDS flags = SS_NO_INIT | SS_KEEP_TIMING priority = SS_PRIORITY_DISEASE - var/list/currentrun = list() + var/list/datum/disease/all_diseases = list() + var/list/datum/disease/currentrun = list() /datum/controller/subsystem/disease/stat_entry(msg) - msg = "P:[active_diseases.len]" + msg = "P:[all_diseases.len]" return ..() - /datum/controller/subsystem/disease/fire(resumed = FALSE) if (!resumed) - currentrun = active_diseases.Copy() + currentrun = all_diseases.Copy() while (currentrun.len) var/datum/disease/D = currentrun[currentrun.len] diff --git a/code/controllers/subsystem/fail_to_topic.dm b/code/controllers/subsystem/fail_to_topic.dm deleted file mode 100644 index 45674683a443..000000000000 --- a/code/controllers/subsystem/fail_to_topic.dm +++ /dev/null @@ -1,81 +0,0 @@ -SUBSYSTEM_DEF(fail_to_topic) - name = "Fail to Topic" - init_order = SS_INIT_FAIL_TO_TOPIC - flags = SS_BACKGROUND - runlevels = ALL - - var/list/rate_limiting = list() - var/list/fail_counts = list() - var/list/active_bans = list() - var/list/currentrun = list() - - var/rate_limit - var/max_fails - var/enabled = FALSE - -/datum/controller/subsystem/fail_to_topic/Initialize(timeofday) - rate_limit = ((CONFIG_GET(number/topic_rate_limit)) SECONDS) - max_fails = CONFIG_GET(number/topic_max_fails) - enabled = CONFIG_GET(flag/topic_enabled) - - if (world.system_type == UNIX && enabled) - enabled = FALSE - WARNING("fail_to_topic subsystem disabled. UNIX is not supported.") - return SS_INIT_NO_NEED - - if (!enabled) - can_fire = FALSE - return SS_INIT_NO_NEED - - return SS_INIT_SUCCESS - -/datum/controller/subsystem/fail_to_topic/fire(resumed = FALSE) - if(!resumed) - currentrun = rate_limiting.Copy() - //cache for sanic speed (lists are references anyways) - var/list/current_run = currentrun - - while(current_run.len) - var/ip = current_run[current_run.len] - var/last_attempt = current_run[ip] - current_run.len-- - - // last_attempt list housekeeping - if(world.time - last_attempt > rate_limit) - rate_limiting -= ip - fail_counts -= ip - - if(MC_TICK_CHECK) - return - -/datum/controller/subsystem/fail_to_topic/proc/IsRateLimited(ip) - if(!enabled) - return FALSE - - var/last_attempt = rate_limiting[ip] - - if (config.fail_to_topic_whitelisted_ips[ip]) - return FALSE - - if (active_bans[ip]) - return TRUE - - rate_limiting[ip] = world.time - - if (isnull(last_attempt)) - return FALSE - - if (world.time - last_attempt > rate_limit) - fail_counts -= ip - return FALSE - else - var/failures = fail_counts[ip] - - if (isnull(failures)) - fail_counts[ip] = 1 - return TRUE - else if (failures > max_fails) - return TRUE - else - fail_counts[ip] = failures + 1 - return TRUE diff --git a/code/controllers/subsystem/fast_machinery.dm b/code/controllers/subsystem/fast_machinery.dm deleted file mode 100644 index 8211b3b5e310..000000000000 --- a/code/controllers/subsystem/fast_machinery.dm +++ /dev/null @@ -1,27 +0,0 @@ -var/list/fast_machines = list() - - -SUBSYSTEM_DEF(fast_machinery) - name = "Fast Machinery" - wait = 0.7 SECONDS - priority = SS_PRIORITY_FAST_MACHINERY - flags = SS_NO_INIT - var/list/currentrun = list() - -/datum/controller/subsystem/fast_machinery/stat_entry(msg) - msg = "FP:[fast_machines.len]" - return ..() - -/datum/controller/subsystem/fast_machinery/fire(resumed = FALSE) - if(!resumed) - currentrun = fast_machines.Copy() - while(currentrun.len) - var/obj/structure/machinery/M = currentrun[currentrun.len] - currentrun.len-- - - if(QDELETED(M)) - continue - - M.process() - if(MC_TICK_CHECK) - return diff --git a/code/controllers/subsystem/game_decorator.dm b/code/controllers/subsystem/game_decorator.dm new file mode 100644 index 000000000000..cfee0406f84a --- /dev/null +++ b/code/controllers/subsystem/game_decorator.dm @@ -0,0 +1,35 @@ +// Essentially the same as decorators but that apply to the whole game state instead of individual atoms +SUBSYSTEM_DEF(game_decorator) + name = "Game Decorator" + init_order = SS_INIT_DECORATOR + flags = SS_NO_FIRE + +/datum/controller/subsystem/game_decorator/Initialize() + . = ..() + for(var/decorator_type in subtypesof(/datum/game_decorator)) + var/datum/game_decorator/decorator = new decorator_type() + if(!decorator.is_active_decor()) + continue + if(!decorator.defer_decoration) + decorator.decorate() + CHECK_TICK + + return SS_INIT_SUCCESS + +/datum/game_decorator + var/defer_decoration = TRUE //! So map decoration is done post-setup after nightmare and spawners + +/datum/game_decorator/New() + if(defer_decoration) + RegisterSignal(SSdcs, COMSIG_GLOB_MODE_POSTSETUP, PROC_REF(defered_decoration)) + +/datum/game_decorator/proc/is_active_decor() + return FALSE + +/datum/game_decorator/proc/defered_decoration(dcs) + SIGNAL_HANDLER + decorate() + +/datum/game_decorator/proc/decorate() + set waitfor = FALSE + return diff --git a/code/controllers/subsystem/hijack.dm b/code/controllers/subsystem/hijack.dm new file mode 100644 index 000000000000..55b5aa75caf8 --- /dev/null +++ b/code/controllers/subsystem/hijack.dm @@ -0,0 +1,429 @@ +SUBSYSTEM_DEF(hijack) + name = "Hijack" + wait = 2 SECONDS + flags = SS_KEEP_TIMING + priority = SS_PRIORITY_HIJACK + init_order = SS_INIT_HIJACK + + ///Required progress to evacuate safely via lifeboats + var/required_progress = 100 + + ///Current progress towards evacuating safely via lifeboats + var/current_progress = 0 + + /// How much progress is required to early launch + var/early_launch_required_progress = 25 + + ///The estimated time left to get to the safe evacuation point + var/estimated_time_left = 0 + + ///Areas that are marked as having progress, assoc list that is progress_area = boolean, the boolean indicating if it was progressing or not on the last fire() + var/list/area/progress_areas = list() + + ///The areas that need cycled through currently + var/list/area/current_run = list() + + ///The progress of the current run that needs to be added at the end of the current run + var/current_run_progress_additive = 0 + + ///Holds what the current_run_progress_additive should be multiplied by at the end of the current run + var/current_run_progress_multiplicative = 1 + + ///Holds the progress change from last run + var/last_run_progress_change = 0 + + ///Holds the next % point progress should be announced, increments on itself + var/announce_checkpoint = 25 + + ///What stage of evacuation we are currently on + var/evac_status = EVACUATION_STATUS_NOT_INITIATED + + ///What stage of hijack are we currently on + var/hijack_status = HIJACK_OBJECTIVES_NOT_STARTED + + ///Whether or not evacuation has been disabled by admins + var/evac_admin_denied = FALSE + + /// If TRUE, self destruct has been unlocked and is possible with a hold of reactor + var/sd_unlocked = FALSE + + /// Admin var to manually prevent self destruct from occurring + var/admin_sd_blocked = FALSE + + /// Maximum amount of fusion generators that can be overloaded at once for a time benefit + var/maximum_overload_generators = 18 + + /// How many generators are currently overloaded + var/overloaded_generators = 0 + + /// How long the manual self destruct will take on the high end + var/sd_max_time = 15 MINUTES + + /// How long the manual self destruct will take on the low end + var/sd_min_time = 5 MINUTES + + /// How much time left until SD detonates + var/sd_time_remaining = 0 + + /// Roughly what % of the SD countdown remains + var/percent_completion_remaining = 100 + + /// If the engine room has been heated, occurs at 33% SD completion + var/engine_room_heated = FALSE + + /// If the engine room has been superheated, occurs at 66% SD completion + var/engine_room_superheated = FALSE + + /// If the self destruct has/is detonating + var/sd_detonated = FALSE + + /// If a generator has ever been overloaded in the past this round + var/generator_ever_overloaded = FALSE + + /// If ARES has announced the 50% point yet for SD + var/ares_sd_announced = FALSE + +/datum/controller/subsystem/hijack/Initialize(timeofday) + RegisterSignal(SSdcs, COMSIG_GLOB_GENERATOR_SET_OVERLOADING, PROC_REF(on_generator_overload)) + return SS_INIT_SUCCESS + +/datum/controller/subsystem/hijack/stat_entry(msg) + if(!SSticker?.mode?.is_in_endgame) + msg = " Not Hijack" + return ..() + + if(current_progress >= required_progress) + msg = " Complete" + return ..() + + msg = " Progress: [current_progress]% | Last run: [last_run_progress_change]" + return ..() + +/datum/controller/subsystem/hijack/fire(resumed = FALSE) + if(!SSticker?.mode?.is_in_endgame) + return + + if(hijack_status < HIJACK_OBJECTIVES_STARTED) + hijack_status = HIJACK_OBJECTIVES_STARTED + + if(current_progress >= required_progress) + if(hijack_status < HIJACK_OBJECTIVES_COMPLETE) + hijack_status = HIJACK_OBJECTIVES_COMPLETE + + if(sd_unlocked && overloaded_generators) + sd_time_remaining -= wait + if(!engine_room_heated && (sd_time_remaining <= (max((1 - round(overloaded_generators / maximum_overload_generators, 0.01)) * sd_max_time, sd_min_time) * 0.66))) + heat_engine_room() + + if(!ares_sd_announced && (sd_time_remaining <= (max((1 - round(overloaded_generators / maximum_overload_generators, 0.01)) * sd_max_time, sd_min_time) * 0.5))) + announce_sd_halfway() + + if(!engine_room_superheated && (sd_time_remaining <= (max((1 - round(overloaded_generators / maximum_overload_generators, 0.01)) * sd_max_time, sd_min_time) * 0.33))) + superheat_engine_room() + + if((sd_time_remaining <= 0) && !sd_detonated) + detonate_sd() + + return + + if(!resumed) + current_run = progress_areas.Copy() + + for(var/area/almayer/cycled_area as anything in current_run) + current_run -= cycled_area + + if(progress_areas[cycled_area] != cycled_area.power_equip) + progress_areas[cycled_area] = !progress_areas[cycled_area] + announce_area_power_change(cycled_area) + + if(progress_areas[cycled_area]) + switch(cycled_area.hijack_evacuation_type) + if(EVACUATION_TYPE_ADDITIVE) + current_run_progress_additive += cycled_area.hijack_evacuation_weight + if(EVACUATION_TYPE_MULTIPLICATIVE) + current_run_progress_multiplicative *= cycled_area.hijack_evacuation_weight + + if (MC_TICK_CHECK) + return + + last_run_progress_change = current_run_progress_additive * current_run_progress_multiplicative + current_progress += last_run_progress_change + + if(last_run_progress_change) + estimated_time_left = ((required_progress - current_progress) / last_run_progress_change) * wait + else + estimated_time_left = INFINITY + + if(current_progress >= announce_checkpoint) + announce_progress() + announce_checkpoint += initial(announce_checkpoint) + + current_run_progress_additive = 0 + current_run_progress_multiplicative = 1 + +///Called when the xeno dropship crashes into the Almayer and announces the current status of various objectives to marines +/datum/controller/subsystem/hijack/proc/announce_status_on_crash() + var/message = "" + + for(var/area/cycled_area as anything in progress_areas) + message += "[cycled_area] - [cycled_area.power_equip ? "Online" : "Offline"]\n" + progress_areas[cycled_area] = cycled_area.power_equip + + message += "\nDue to low orbit, extra fuel is required for non-surface evacuations.\nMaintain fueling functionality for optimal evacuation conditions." + + marine_announcement(message, HIJACK_ANNOUNCE) + +///Called when an area power status is changed to announce that it has been changed +/datum/controller/subsystem/hijack/proc/announce_area_power_change(area/changed_area) + var/message = "[changed_area] - [changed_area.power_equip ? "Online" : "Offline"]" + + marine_announcement(message, HIJACK_ANNOUNCE) + +///Called to announce to xenos the state of evacuation progression +/datum/controller/subsystem/hijack/proc/announce_progress() + var/announce = announce_checkpoint / initial(announce_checkpoint) + + var/marine_warning_areas = "" + var/xeno_warning_areas = "" + + for(var/area/cycled_area as anything in progress_areas) + if(cycled_area.power_equip) + xeno_warning_areas += "[cycled_area], " + continue + marine_warning_areas += "[cycled_area], " + + if(xeno_warning_areas) + xeno_warning_areas = copytext(xeno_warning_areas, 1, -2) + + if(marine_warning_areas) + marine_warning_areas = copytext(marine_warning_areas, 1, -2) + + var/datum/hive_status/hive + for(var/hivenumber in GLOB.hive_datum) + hive = GLOB.hive_datum[hivenumber] + if(!length(hive.totalXenos)) + continue + + switch(announce) + if(1) + xeno_announcement(SPAN_XENOANNOUNCE("The talls are a quarter of the way towards their goals. Disable the following areas: [xeno_warning_areas]"), hive.hivenumber, XENO_HIJACK_ANNOUNCE) + if(2) + xeno_announcement(SPAN_XENOANNOUNCE("The talls are half way towards their goals. Disable the following areas: [xeno_warning_areas]"), hive.hivenumber, XENO_HIJACK_ANNOUNCE) + if(3) + xeno_announcement(SPAN_XENOANNOUNCE("The talls are three quarters of the way towards their goals. Disable the following areas: [xeno_warning_areas]"), hive.hivenumber, XENO_HIJACK_ANNOUNCE) + if(4) + xeno_announcement(SPAN_XENOANNOUNCE("The talls have completed their goals!"), hive.hivenumber, XENO_HIJACK_ANNOUNCE) + + switch(announce) + if(1) + marine_announcement("Emergency fuel replenishment at 25 percent. Lifeboat emergency early launch now available.[marine_warning_areas ? "\nTo increase speed restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) + if(2) + marine_announcement("Emergency fuel replenishment at 50 percent.[marine_warning_areas ? "\nTo increase speed restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) + if(3) + marine_announcement("Emergency fuel replenishment at 75 percent.[marine_warning_areas ? "\nTo increase speed restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) + if(4) + marine_announcement("Emergency fuel replenishment at 100 percent. Safe utilization of lifeboats now possible.", HIJACK_ANNOUNCE) + if(!admin_sd_blocked) + addtimer(CALLBACK(src, PROC_REF(unlock_self_destruct)), 8 SECONDS) + +/// Passes the ETA for status panels +/datum/controller/subsystem/hijack/proc/get_evac_eta() + switch(hijack_status) + if(HIJACK_OBJECTIVES_STARTED) + if(estimated_time_left == INFINITY) + return "Never" + return "[duration2text_sec(estimated_time_left)]" + + if(HIJACK_OBJECTIVES_COMPLETE) + return "Complete" + +/datum/controller/subsystem/hijack/proc/get_sd_eta() + if(!sd_time_remaining) + return "Complete" + + if(overloaded_generators <= 0) + return "Never" + + return "[duration2text_sec(sd_time_remaining)]" + +//~~~~~~~~~~~~~~~~~~~~~~~~ EVAC STUFF ~~~~~~~~~~~~~~~~~~~~~~~~// + +/// Initiates evacuation by announcing and then prepping all lifepods/lifeboats +/datum/controller/subsystem/hijack/proc/initiate_evacuation() + if(evac_status == EVACUATION_STATUS_NOT_INITIATED && !(evac_admin_denied & FLAGS_EVACUATION_DENY)) + evac_status = EVACUATION_STATUS_INITIATED + ai_announcement("Attention. Emergency. All personnel must evacuate immediately.", 'sound/AI/evacuate.ogg') + + for(var/obj/structure/machinery/status_display/cycled_status_display in machines) + if(is_mainship_level(cycled_status_display.z)) + cycled_status_display.set_picture("evac") + for(var/obj/docking_port/mobile/crashable/escape_shuttle/shuttle in SSshuttle.mobile) + shuttle.prepare_evac() + activate_lifeboats() + return TRUE + +/// Cancels evacuation, tells lifepods/lifeboats and status_displays +/datum/controller/subsystem/hijack/proc/cancel_evacuation() + if(evac_status == EVACUATION_STATUS_INITIATED) + evac_status = EVACUATION_STATUS_NOT_INITIATED + deactivate_lifeboats() + ai_announcement("Evacuation has been cancelled.", 'sound/AI/evacuate_cancelled.ogg') + + for(var/obj/structure/machinery/status_display/cycled_status_display in machines) + if(is_mainship_level(cycled_status_display.z)) + cycled_status_display.set_sec_level_picture() + + for(var/obj/docking_port/mobile/crashable/escape_shuttle/shuttle in SSshuttle.mobile) + shuttle.cancel_evac() + return TRUE + +/// Opens the lifeboat doors and gets them ready to launch +/datum/controller/subsystem/hijack/proc/activate_lifeboats() + for(var/obj/docking_port/stationary/lifeboat_dock/lifeboat_dock in GLOB.lifeboat_almayer_docks) + var/obj/docking_port/mobile/crashable/lifeboat/lifeboat = lifeboat_dock.get_docked() + if(lifeboat && lifeboat.available) + lifeboat.status = LIFEBOAT_ACTIVE + lifeboat_dock.open_dock() + +/// Turns off ability to manually take off lifeboats +/datum/controller/subsystem/hijack/proc/deactivate_lifeboats() + for(var/obj/docking_port/stationary/lifeboat_dock/lifeboat_dock in GLOB.lifeboat_almayer_docks) + var/obj/docking_port/mobile/crashable/lifeboat/lifeboat = lifeboat_dock.get_docked() + if(lifeboat && lifeboat.available) + lifeboat.status = LIFEBOAT_INACTIVE + + +/// Once refueling is done, marines can optionally hold SD for a time for a stalemate instead of a xeno minor +/datum/controller/subsystem/hijack/proc/unlock_self_destruct() + sd_time_remaining = sd_max_time + sd_unlocked = TRUE + marine_announcement("Fuel reserves full. Manual detonation of fuel reserves by overloading the on-board fusion reactors now possible.", HIJACK_ANNOUNCE) + +/datum/controller/subsystem/hijack/proc/on_generator_overload(obj/structure/machinery/power/fusion_engine/source, new_overloading) + SIGNAL_HANDLER + + if(!generator_ever_overloaded) + generator_ever_overloaded = TRUE + var/datum/hive_status/hive + for(var/hivenumber in GLOB.hive_datum) + hive = GLOB.hive_datum[hivenumber] + if(!length(hive.totalXenos)) + continue + + xeno_announcement(SPAN_XENOANNOUNCE("The talls may be attempting to take their ship down with them in Engineering, stop them!"), hive.hivenumber, XENO_HIJACK_ANNOUNCE) + + adjust_generator_overload_count(new_overloading ? 1 : -1) + +/datum/controller/subsystem/hijack/proc/adjust_generator_overload_count(amount = 1) + var/generator_overload_percent = round(overloaded_generators / maximum_overload_generators, 0.01) + var/old_required_time = sd_min_time + ((1 - generator_overload_percent) * (sd_max_time - sd_min_time)) + percent_completion_remaining = sd_time_remaining / old_required_time + overloaded_generators = clamp(overloaded_generators + amount, 0, maximum_overload_generators) + generator_overload_percent = round(overloaded_generators / maximum_overload_generators, 0.01) + var/new_required_time = sd_min_time + ((1 - generator_overload_percent) * (sd_max_time - sd_min_time)) + sd_time_remaining = percent_completion_remaining * new_required_time + +/datum/controller/subsystem/hijack/proc/heat_engine_room() + engine_room_heated = TRUE + var/area/engine_room = GLOB.areas_by_type[/area/almayer/engineering/engine_core] + engine_room.firealert() + engine_room.temperature = T90C + for(var/mob/current_mob as anything in GLOB.mob_list) + var/area/mob_area = get_area(current_mob) + if(istype(mob_area, /area/almayer/engineering/engine_core)) + to_chat(current_mob, SPAN_BOLDWARNING("You feel the heat of the room increase as the fusion engines whirr louder.")) + +/datum/controller/subsystem/hijack/proc/superheat_engine_room() + engine_room_superheated = TRUE + var/area/engine_room = GLOB.areas_by_type[/area/almayer/engineering/engine_core] + engine_room.firealert() + engine_room.temperature = T120C //slowly deals burn at this temp + for(var/mob/current_mob as anything in GLOB.mob_list) + var/area/mob_area = get_area(current_mob) + if(istype(mob_area, /area/almayer/engineering/engine_core)) + to_chat(current_mob, SPAN_BOLDWARNING("The room feels incredibly hot, you can't take much more of this!")) + +/datum/controller/subsystem/hijack/proc/announce_sd_halfway() + ares_sd_announced = TRUE + marine_announcement("ALERT: Fusion reactor meltdown has reached fifty percent.", HIJACK_ANNOUNCE) + +/datum/controller/subsystem/hijack/proc/detonate_sd() + set waitfor = FALSE + sd_detonated = TRUE + var/creak_picked = pick('sound/effects/creak1.ogg', 'sound/effects/creak2.ogg', 'sound/effects/creak3.ogg') + for(var/mob/current_mob as anything in GLOB.mob_list) + var/turf/current_turf = get_turf(current_mob) + if(!current_mob?.loc || !current_mob.client || !current_turf || !is_mainship_level(current_turf.z)) + continue + + to_chat(current_mob, SPAN_BOLDWARNING("The ship's deck worryingly creaks underneath you.")) + playsound_client(current_mob.client, creak_picked, vol = 50) + + sleep(7 SECONDS) + shakeship(2, 10, TRUE) + + marine_announcement("ALERT: Fusion reactors dangerously overloaded. Runaway meltdown in reactor core imminent.", HIJACK_ANNOUNCE) + sleep(5 SECONDS) + + var/sound_picked = pick('sound/theme/nuclear_detonation1.ogg','sound/theme/nuclear_detonation2.ogg') + for(var/client/player as anything in GLOB.clients) + playsound_client(player, sound_picked, 90) + + var/list/alive_mobs = list() //Everyone who will be destroyed on the zlevel(s). + var/list/dead_mobs = list() //Everyone who only needs to see the cinematic. + for(var/mob/current_mob as anything in GLOB.mob_list) //This only does something cool for the people about to die, but should prove pretty interesting. + var/turf/current_turf = get_turf(current_mob) + if(!current_mob?.loc || !current_turf) + continue + + if(current_mob.stat == DEAD) + dead_mobs |= current_mob + continue + + if(is_mainship_level(current_turf.z)) + alive_mobs |= current_mob + shake_camera(current_mob, 110, 4) + + + sleep(10 SECONDS) + /*Hardcoded for now, since this was never really used for anything else. + Would ideally use a better system for showing cutscenes.*/ + var/atom/movable/screen/cinematic/explosion/explosive_cinematic = new() + + for(var/mob/current_mob as anything in (alive_mobs + dead_mobs)) + if(current_mob?.loc && current_mob.client) + current_mob.client.add_to_screen(explosive_cinematic) //They may have disconnected in the mean time. + + sleep(1.5 SECONDS) //Extra 1.5 seconds to look at the ship. + flick("intro_nuke", explosive_cinematic) + + sleep(3.5 SECONDS) + for(var/mob/current_mob as anything in alive_mobs) + var/turf/current_mob_turf = get_turf(current_mob) + if(!current_mob?.loc || !current_mob_turf) //Who knows, maybe they escaped, or don't exist anymore. + continue + + if(is_mainship_level(current_mob_turf.z)) + if(istype(current_mob.loc, /obj/structure/closet/secure_closet/freezer/fridge)) + continue + + current_mob.death(create_cause_data("nuclear explosion")) + else + current_mob.client.remove_from_screen(explosive_cinematic) //those who managed to escape the z level at last second shouldn't have their view obstructed. + + flick("ship_destroyed", explosive_cinematic) + explosive_cinematic.icon_state = "summary_destroyed" + + for(var/client/player as anything in GLOB.clients) + playsound_client(player, 'sound/effects/explosionfar.ogg', 90) + + + sleep(0.5 SECONDS) + if(SSticker.mode) + SSticker.mode.check_win() + + if(!SSticker.mode) //Just a safety, just in case a mode isn't running, somehow. + to_world(SPAN_ROUNDBODY("Resetting in 30 seconds!")) + sleep(30 SECONDS) + log_game("Rebooting due to nuclear detonation.") + world.Reboot() diff --git a/code/controllers/subsystem/htmlui.dm b/code/controllers/subsystem/htmlui.dm deleted file mode 100644 index 5dc885abc625..000000000000 --- a/code/controllers/subsystem/htmlui.dm +++ /dev/null @@ -1,57 +0,0 @@ -// What in the name of god is this? -// You'd think it'd be some form of process for the HTML interface module. -// But it isn't? -// It's some form of proc queue but ??? -// Does anything even *use* this? - -SUBSYSTEM_DEF(html_ui) - name = "HTMLUI" - wait = 1.7 SECONDS - flags = SS_NO_INIT - runlevels = RUNLEVELS_DEFAULT|RUNLEVEL_LOBBY - var/list/update = list() - -/datum/controller/subsystem/html_ui/fire(resumed = FALSE) - if (update.len) - var/list/L = list() - var/key - - for (var/datum/procqueue_item/item in update) - key = "[item.ref]_[item.procname]" - - if (item.args) - key += "(" - var/first = 1 - for (var/a in item.args) - if (!first) - key += "," - key += "[a]" - first = 0 - key += ")" - - if (!(key in L)) - if (item.args) - call(item.ref, item.procname)(arglist(item.args)) - else - call(item.ref, item.procname)() - - L.Add(key) - - update.Cut() - - -/datum/controller/subsystem/html_ui/proc/queue(ref, procname, ...) - var/datum/procqueue_item/item = new - item.ref = ref - item.procname = procname - - if (args.len > 2) - item.args = args.Copy(3) - - update.Insert(1, item) - - -/datum/procqueue_item - var/ref - var/procname - var/list/args diff --git a/code/controllers/subsystem/interior.dm b/code/controllers/subsystem/interior.dm index 389e95fe6022..8fb7ffbfeee7 100644 --- a/code/controllers/subsystem/interior.dm +++ b/code/controllers/subsystem/interior.dm @@ -42,7 +42,7 @@ SUBSYSTEM_DEF(interior) continue if(x >= bounds[1].x && x <= bounds[2].x && y >= bounds[1].y && y <= bounds[2].y) return current_interior - return FALSE + return /// Checks if an atom is in an interior /datum/controller/subsystem/interior/proc/in_interior(loc) @@ -51,7 +51,7 @@ SUBSYSTEM_DEF(interior) if(!isturf(loc)) loc = get_turf(loc) - var/datum/turf_reservation/interior/reservation = SSmapping.used_turfs[loc] + var/datum/weakref/reservation = SSmapping.used_turfs[loc] if(!istype(reservation)) return FALSE diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 6f0f060305b2..913e5dcd50d3 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -6,10 +6,13 @@ SUBSYSTEM_DEF(mapping) var/list/datum/map_config/configs var/list/datum/map_config/next_map_configs + ///Name of all maps var/list/map_templates = list() - + ///Name of all shuttles var/list/shuttle_templates = list() var/list/all_shuttle_templates = list() + ///map_id of all tents + var/list/tent_type_templates = list() var/list/areas_in_z = list() @@ -201,6 +204,7 @@ SUBSYSTEM_DEF(mapping) map_templates[T.name] = T preloadShuttleTemplates() + preload_tent_templates() /proc/generateMapList(filename) . = list() @@ -242,6 +246,11 @@ SUBSYSTEM_DEF(mapping) all_shuttle_templates[item] = S map_templates[S.shuttle_id] = S +/datum/controller/subsystem/mapping/proc/preload_tent_templates() + for(var/template in subtypesof(/datum/map_template/tent)) + var/datum/map_template/tent/new_tent = new template() + tent_type_templates[new_tent.map_id] = new_tent + /datum/controller/subsystem/mapping/proc/RequestBlockReservation(width, height, z, type = /datum/turf_reservation, turf_type_override) UNTIL(initialized && !clearing_reserved_turfs) var/datum/turf_reservation/reserve = new type diff --git a/code/controllers/subsystem/midi.dm b/code/controllers/subsystem/midi.dm deleted file mode 100644 index 158d67cf25ac..000000000000 --- a/code/controllers/subsystem/midi.dm +++ /dev/null @@ -1,45 +0,0 @@ -/datum/midi_record - var/target - var/midi - -SUBSYSTEM_DEF(midi) - name = "Midi" - wait = 2 SECONDS - flags = SS_NO_INIT|SS_BACKGROUND - runlevels = RUNLEVELS_DEFAULT|RUNLEVEL_LOBBY - priority = SS_PRIORITY_MIDI - - var/list/datum/midi_record/prepped_midis = list() - - var/list/datum/midi_record/currentrun = list() - - -/datum/controller/subsystem/midi/stat_entry(msg) - msg = "MR:[prepped_midis.len]" - return ..() - - -/datum/controller/subsystem/midi/fire(resumed = FALSE) - if (!resumed) - currentrun = prepped_midis - prepped_midis = list() - - while (currentrun.len) - var/datum/midi_record/E = currentrun[currentrun.len] - currentrun.len-- - - if (!E) - continue - - E.target << E.midi - - if (MC_TICK_CHECK) - return - -/datum/controller/subsystem/midi/proc/queue(target, midi) - if(!prepped_midis) - prepped_midis = list() - var/datum/midi_record/MR = new() - MR.target = target - MR.midi = midi - prepped_midis.Add(MR) diff --git a/code/controllers/subsystem/processing/defprocess.dm b/code/controllers/subsystem/processing/defprocess.dm new file mode 100644 index 000000000000..3701a0617a7a --- /dev/null +++ b/code/controllers/subsystem/processing/defprocess.dm @@ -0,0 +1,5 @@ +PROCESSING_SUBSYSTEM_DEF(defprocess) + name = "Defenses Processing" + priority = SS_PRIORITY_DEFENSES + flags = SS_NO_INIT + wait = 0.7 SECONDS diff --git a/code/controllers/subsystem/smoke_system.dm b/code/controllers/subsystem/smoke_system.dm deleted file mode 100644 index 2010687fcba2..000000000000 --- a/code/controllers/subsystem/smoke_system.dm +++ /dev/null @@ -1,31 +0,0 @@ -var/list/active_smoke_effects = list() - - -SUBSYSTEM_DEF(smoke_effects) - name = "Smoke Effects" - wait = 1 SECONDS - flags = SS_NO_INIT | SS_KEEP_TIMING - priority = SS_PRIORITY_OBJECTS - - var/list/currentrun = list() - -/datum/controller/subsystem/smoke_effects/stat_entry(msg) - msg = "P:[active_smoke_effects.len]" - return ..() - - -/datum/controller/subsystem/smoke_effects/fire(resumed = FALSE) - if(!resumed) - currentrun = active_smoke_effects.Copy() - - while(currentrun.len) - var/obj/effect/particle_effect/smoke/E = currentrun[currentrun.len] - currentrun.len-- - - if(!E || QDELETED(E)) - continue - - E.process() - - if(MC_TICK_CHECK) - return diff --git a/code/controllers/subsystem/sound.dm b/code/controllers/subsystem/sound.dm index 1935294394e7..4fdfd7935349 100644 --- a/code/controllers/subsystem/sound.dm +++ b/code/controllers/subsystem/sound.dm @@ -41,5 +41,5 @@ SUBSYSTEM_DEF(sound) if(VI?.ready) var/list/bounds = VI.get_middle_coords() if(bounds.len >= 2) - hearers |= SSquadtree.players_in_range(RECT(bounds[1], bounds[2], VI.map_template.height, VI.map_template.width), bounds[3]) + hearers |= SSquadtree.players_in_range(RECT(bounds[1], bounds[2], VI.map_template.width, VI.map_template.height), bounds[3]) template_queue[template] = hearers diff --git a/code/controllers/subsystem/stamina.dm b/code/controllers/subsystem/stamina.dm deleted file mode 100644 index 84d5b4038cd0..000000000000 --- a/code/controllers/subsystem/stamina.dm +++ /dev/null @@ -1,25 +0,0 @@ -var/global/list/active_staminas = list() - -SUBSYSTEM_DEF(stamina) - name = "Stamina" - wait = 2 SECONDS - priority = SS_PRIORITY_STAMINA - flags = SS_NO_INIT - var/list/currentrun = list() - - -/datum/controller/subsystem/stamina/fire(resumed = FALSE) - if (!resumed) - currentrun = active_staminas.Copy() - - while (currentrun.len) - var/datum/stamina/S = currentrun[currentrun.len] - currentrun.len-- - - if (!S || QDELETED(S)) - continue - - S.process() - - if (MC_TICK_CHECK) - return diff --git a/code/controllers/subsystem/stats_collector.dm b/code/controllers/subsystem/stats_collector.dm deleted file mode 100644 index de66e3b2c6b1..000000000000 --- a/code/controllers/subsystem/stats_collector.dm +++ /dev/null @@ -1,17 +0,0 @@ -/// Collects simple round statistics periodically -SUBSYSTEM_DEF(stats_collector) - name = "Round Stats" - wait = 30 SECONDS - priority = SS_PRIORITY_PAGER_STATUS - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY - flags = SS_KEEP_TIMING | SS_NO_INIT - - var/stat_ticks = 0 - var/players_counter = 0 - -/datum/controller/subsystem/stats_collector/fire(resumed = FALSE) - players_counter += length(GLOB.clients) - stat_ticks++ - -/datum/controller/subsystem/stats_collector/proc/get_avg_players() - return players_counter / stat_ticks diff --git a/code/controllers/subsystem/teleporter.dm b/code/controllers/subsystem/teleporter.dm deleted file mode 100644 index b753bdb0d519..000000000000 --- a/code/controllers/subsystem/teleporter.dm +++ /dev/null @@ -1,10 +0,0 @@ -// Master teleporter controller. -SUBSYSTEM_DEF(teleporter) - name = "Teleporter" - wait = 5 SECONDS - init_order = SS_INIT_TELEPORTER - priority = SS_PRIORITY_TELEPORTER - flags = SS_NO_FIRE|SS_NO_INIT - - var/list/teleporters_by_id = list() // Associative list of teleporters by ID, master list of teleporters to process - var/list/teleporters = list() // Process list (identical contents to teleporters_by_id) diff --git a/code/controllers/subsystem/xenocon.dm b/code/controllers/subsystem/xenocon.dm deleted file mode 100644 index d16e59bd9813..000000000000 --- a/code/controllers/subsystem/xenocon.dm +++ /dev/null @@ -1,18 +0,0 @@ -SUBSYSTEM_DEF(xenocon) - name = "XENOCON" - wait = 5 SECONDS - priority = SS_PRIORITY_INACTIVITY - flags = SS_NO_INIT - var/rewarded = FALSE - -/datum/controller/subsystem/xenocon/fire(resumed = FALSE) - if(rewarded) - return - - var/datum/hive_status/hive - for(var/hivenumber in GLOB.hive_datum) - hive = GLOB.hive_datum[hivenumber] - if(hive.xenocon_points >= XENOCON_THRESHOLD) - var/datum/emergency_call/em_call = new /datum/emergency_call/xenos/platoon() - em_call.activate() - rewarded = TRUE diff --git a/code/datums/disease.dm b/code/datums/disease.dm index 92986b668b47..d2f466ebeb39 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -131,7 +131,7 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease /datum/disease/process() if(!holder) - active_diseases -= src + SSdisease.all_diseases -= src return if(prob(65)) spread(holder) @@ -176,7 +176,7 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease /datum/disease/New(process=TRUE)//process = 1 - adding the object to global list. List is processed by master controller. cure_list = list(cure_id) // to add more cures, add more vars to this list in the actual disease's New() if(process) // Viruses in list are considered active. - active_diseases += src + SSdisease.all_diseases += src initial_spread = spread /datum/disease/proc/IsSame(datum/disease/D) @@ -191,5 +191,5 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease /datum/disease/Destroy() affected_mob = null holder = null - active_diseases -= src + SSdisease.all_diseases -= src . = ..() diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 6440c9734374..ad4703ba65fe 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -391,7 +391,7 @@ var/list/advance_cures = list( D.AssignName(new_name) D.Refresh() - for(var/datum/disease/advance/AD in active_diseases) + for(var/datum/disease/advance/AD in SSdisease.all_diseases) AD.Refresh() for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list.Copy())) @@ -409,7 +409,7 @@ var/list/advance_cures = list( /* /mob/verb/test() - for(var/datum/disease/D in active_diseases) + for(var/datum/disease/D in SSdisease.all_diseases) to_chat(src, "[D.name] - [D.holder]") */ diff --git a/code/datums/stamina/_stamina.dm b/code/datums/stamina/_stamina.dm index 36705e3be300..e233aaa81676 100644 --- a/code/datums/stamina/_stamina.dm +++ b/code/datums/stamina/_stamina.dm @@ -37,13 +37,11 @@ current_stamina = Clamp(current_stamina - amount, 0, max_stamina) if(current_stamina < max_stamina) - if(!(src in active_staminas)) - active_staminas.Add(src) - + START_PROCESSING(SSobj, src) if(amount > 0) apply_rest_period(STAMINA_REST_PERIOD) else - active_staminas.Remove(src) + STOP_PROCESSING(SSobj, src) update_stamina_level() diff --git a/code/game/area/almayer.dm b/code/game/area/almayer.dm index 6ced81a22b15..742ae7a1addb 100644 --- a/code/game/area/almayer.dm +++ b/code/game/area/almayer.dm @@ -13,6 +13,21 @@ ambience_exterior = AMBIENCE_ALMAYER ceiling_muffle = FALSE + ///Whether this area is used for hijack evacuation progress + var/hijack_evacuation_area = FALSE + + ///The weight this area gives towards hijack evacuation progress + var/hijack_evacuation_weight = 0 + + ///Whether this area is additive or multiplicative towards evacuation progress + var/hijack_evacuation_type = EVACUATION_TYPE_NONE + +/area/almayer/Initialize(mapload, ...) + . = ..() + + if(hijack_evacuation_area) + SShijack.progress_areas[src] = power_equip + /area/shuttle/almayer/elevator_maintenance/upperdeck name = "\improper Maintenance Elevator" icon_state = "shuttle" @@ -160,6 +175,9 @@ fake_zlevel = 2 // lowerdeck soundscape_playlist = SCAPE_PL_ENG soundscape_interval = 15 + hijack_evacuation_area = TRUE + hijack_evacuation_weight = 0.2 + hijack_evacuation_type = EVACUATION_TYPE_ADDITIVE /area/almayer/engineering/starboard_atmos name = "\improper Atmospherics Starboard" @@ -183,6 +201,9 @@ name = "\improper Astronavigational Deck" icon_state = "astronavigation" fake_zlevel = 2 // lowerdeck + hijack_evacuation_area = TRUE + hijack_evacuation_weight = 1.1 + hijack_evacuation_type = EVACUATION_TYPE_MULTIPLICATIVE /area/almayer/shipboard/panic name = "\improper Hangar Panic Room" @@ -712,6 +733,9 @@ icon_state = "lifeboat_pump" requires_power = 1 fake_zlevel = 1 + hijack_evacuation_area = TRUE + hijack_evacuation_weight = 0.1 + hijack_evacuation_type = EVACUATION_TYPE_ADDITIVE /area/almayer/lifeboat_pumps/north1 name = "North West Lifeboat Fuel Pump" diff --git a/code/game/gamemodes/cm_self_destruct.dm b/code/game/gamemodes/cm_self_destruct.dm deleted file mode 100644 index 07c9c43a4768..000000000000 --- a/code/game/gamemodes/cm_self_destruct.dm +++ /dev/null @@ -1,478 +0,0 @@ -/* -TODO -Look into animation screen not showing on self-destruct and other weirdness -Intergrate distress into this controller. -Finish nanoui conversion for comm console. -Make sure people who get nuked and wake up from SSD don't live. -Add flashing lights to evac. //DEFERRED TO BETTER LIGHTING -Finish the game mode announcement thing. -Fix escape doors to work properly. -*/ - -/* -How this works: - -First: All of the linking is done automatically on world start, so nothing needs to be done on that end other than making -sure that objects are actually placed in the game world. If not, the game will error and let you know about it. But you -don't need to modify variables or worry about area placement. It's all done for you. -The rods, for example, configure the time per activation based on their number. Shuttles link their own machines via area. -Nothing in this controller is linked to game mode, so it's stand alone, more or less, but it's best used during a game mode. -Admins have a lot of tools in their disposal via the check antagonist panel, and devs can access the VV of this controller -through that panel. - -Second: The communication console handles most of the IC triggers for activating these functions, the rest is handled elsewhere. -Check communications.dm for that. shuttle_controller.dm handles the set up for the escape pods. escape_pods.dm handles most of the -functions of the escape pods themselves. This file would likely need to be broken down into individual parts at some point in the -future. - -Evacuation takes place when sufficient alert level is reaised and a distress beacon was launched. All of the evac pods come online -and open their doors to allow entry inside. Characters may then get inside of the cryo units to before the shuttles automatically launch. -If wanted, a nearby controller object may launch each individual shuttle early. Only three people may ride on a shuttle to escape, -otherwise the launch will fail and the shuttle will become inoperable. -Any launched shuttles are taken out of the game. If the evacuation is canceled, any persons inside of the cryo tubes will be ejected. -They may temporarily open the door to exit if they are stuck inside after evac is canceled. - -When the self-destruct is enabled, the console comes online. This usually happens during an evacuation. Once the console is -interacted with, it fires up the self-destruct sequence. Several rods rise and must be interacted with in order to arm the system. -Once that happens, the console must be interacted with again to trigger the self-destruct. The self-destruct may also be -canceled from the console. - -The self-destruct may also happen if a nuke is detonated on the ship's zlevel; if it is detonated elsewhere, the ship will not blow up. -Regardless of where it's detonated, or how, a successful detonation will end the round or automatically restart the game. - -All of the necessary difines are stored under mode.dm in defines. -*/ - -var/global/datum/authority/branch/evacuation/EvacuationAuthority //This is initited elsewhere so that the world has a chance to load in. - -/datum/authority/branch/evacuation - var/name = "Evacuation Authority" - var/evac_time //Time the evacuation was initiated. - var/evac_status = EVACUATION_STATUS_STANDING_BY //What it's doing now? It can be standing by, getting ready to launch, or finished. - - var/obj/structure/machinery/self_destruct/console/dest_master //The main console that does the brunt of the work. - var/dest_rods[] //Slave devices to make the explosion work. - var/dest_cooldown //How long it takes between rods, determined by the amount of total rods present. - var/dest_index = 1 //What rod the thing is currently on. - var/dest_status = NUKE_EXPLOSION_INACTIVE - var/dest_started_at = 0 - - var/flags_scuttle = NO_FLAGS - -/datum/authority/branch/evacuation/New() - ..() - dest_master = locate() - if(!dest_master) - log_debug("ERROR CODE SD1: could not find master self-destruct console") - to_world(SPAN_DEBUG("ERROR CODE SD1: could not find master self-destruct console")) - return FALSE - dest_rods = new - for(var/obj/structure/machinery/self_destruct/rod/I in dest_master.loc.loc) dest_rods += I - if(!dest_rods.len) - log_debug("ERROR CODE SD2: could not find any self-destruct rods") - to_world(SPAN_DEBUG("ERROR CODE SD2: could not find any self-destruct rods")) - QDEL_NULL(dest_master) - return FALSE - dest_cooldown = SELF_DESTRUCT_ROD_STARTUP_TIME / dest_rods.len - dest_master.desc = "The main operating panel for a self-destruct system. It requires very little user input, but the final safety mechanism is manually unlocked.\nAfter the initial start-up sequence, [dest_rods.len] control rods must be armed, followed by manually flipping the detonation switch." - -/** - * This proc returns the ship's z level list (or whatever specified), - * when an evac/self-destruct happens. - */ -/datum/authority/branch/evacuation/proc/get_affected_zlevels() - //Nuke is not in progress, end the round on ship only. - if(dest_status < NUKE_EXPLOSION_IN_PROGRESS && SSticker?.mode.is_in_endgame) - . = SSmapping.levels_by_any_trait(list(ZTRAIT_MARINE_MAIN_SHIP)) - return - -//========================================================================================= -//========================================================================================= -//=====================================EVACUATION========================================== -//========================================================================================= -//========================================================================================= - - -/datum/authority/branch/evacuation/proc/initiate_evacuation(force=0) //Begins the evacuation procedure. - if(force || (evac_status == EVACUATION_STATUS_STANDING_BY && !(flags_scuttle & FLAGS_EVACUATION_DENY))) - evac_time = world.time - evac_status = EVACUATION_STATUS_INITIATING - ai_announcement("Attention. Emergency. All personnel must evacuate immediately. You have [round(EVACUATION_ESTIMATE_DEPARTURE/60,1)] minute\s until departure.", 'sound/AI/evacuate.ogg') - xeno_message_all("A wave of adrenaline ripples through the hive. The fleshy creatures are trying to escape!") - - for(var/obj/structure/machinery/status_display/SD in machines) - if(is_mainship_level(SD.z)) - SD.set_picture("evac") - for(var/obj/docking_port/mobile/crashable/escape_shuttle/shuttle in SSshuttle.mobile) - shuttle.prepare_evac() - activate_lifeboats() - process_evacuation() - return TRUE - -/datum/authority/branch/evacuation/proc/cancel_evacuation() //Cancels the evac procedure. Useful if admins do not want the marines leaving. - if(evac_status == EVACUATION_STATUS_INITIATING) - evac_time = null - evac_status = EVACUATION_STATUS_STANDING_BY - deactivate_lifeboats() - ai_announcement("Evacuation has been cancelled.", 'sound/AI/evacuate_cancelled.ogg') - - if(get_security_level() == "red") - for(var/obj/structure/machinery/status_display/SD in machines) - if(is_mainship_level(SD.z)) - SD.set_picture("redalert") - - for(var/obj/docking_port/mobile/crashable/escape_shuttle/shuttle in SSshuttle.mobile) - shuttle.cancel_evac() - return TRUE - -/datum/authority/branch/evacuation/proc/begin_launch() //Launches the pods. - if(evac_status == EVACUATION_STATUS_INITIATING) - evac_status = EVACUATION_STATUS_IN_PROGRESS //Cannot cancel at this point. All shuttles are off. - spawn() //One of the few times spawn() is appropriate. No need for a new proc. - ai_announcement("WARNING: Evacuation order confirmed. Launching escape pods.", 'sound/AI/evacuation_confirmed.ogg') - addtimer(CALLBACK(src, PROC_REF(launch_lifeboats)), 10 SECONDS) // giving some time to board lifeboats - - for(var/obj/docking_port/mobile/crashable/escape_shuttle/shuttle in SSshuttle.mobile) - shuttle.evac_launch() - sleep(50) - - sleep(300) //Sleep 30 more seconds to make sure everyone had a chance to leave. - var/lifesigns = 0 - // lifesigns += P.passengers - var/obj/docking_port/mobile/crashable/lifeboat/lifeboat1 = SSshuttle.getShuttle(MOBILE_SHUTTLE_LIFEBOAT_PORT) - lifeboat1.check_for_survivors() - lifesigns += lifeboat1.survivors - var/obj/docking_port/mobile/crashable/lifeboat/lifeboat2 = SSshuttle.getShuttle(MOBILE_SHUTTLE_LIFEBOAT_STARBOARD) - lifeboat2.check_for_survivors() - lifesigns += lifeboat2.survivors - ai_announcement("ATTENTION: Evacuation complete. Outbound lifesigns detected: [lifesigns ? lifesigns : "none"].", 'sound/AI/evacuation_complete.ogg') - evac_status = EVACUATION_STATUS_COMPLETE - return TRUE - -/datum/authority/branch/evacuation/proc/process_evacuation() //Process the timer. - set background = 1 - - spawn while(evac_status == EVACUATION_STATUS_INITIATING) //If it's not departing, no need to process. - if(world.time >= evac_time + EVACUATION_AUTOMATIC_DEPARTURE) begin_launch() - sleep(10) //One second. - -/datum/authority/branch/evacuation/proc/get_status_panel_eta() - switch(evac_status) - if(EVACUATION_STATUS_INITIATING) - var/eta = EVACUATION_ESTIMATE_DEPARTURE - . = "[(eta / 60) % 60]:[add_zero(num2text(eta % 60), 2)]" - if(EVACUATION_STATUS_IN_PROGRESS) . = "NOW" - -// LIFEBOATS CORNER -/datum/authority/branch/evacuation/proc/activate_lifeboats() - for(var/obj/docking_port/stationary/lifeboat_dock/lifeboat_dock in GLOB.lifeboat_almayer_docks) - var/obj/docking_port/mobile/crashable/lifeboat/lifeboat = lifeboat_dock.get_docked() - if(lifeboat && lifeboat.available) - lifeboat.status = LIFEBOAT_ACTIVE - lifeboat_dock.open_dock() - - -/datum/authority/branch/evacuation/proc/deactivate_lifeboats() - for(var/obj/docking_port/stationary/lifeboat_dock/lifeboat_dock in GLOB.lifeboat_almayer_docks) - var/obj/docking_port/mobile/crashable/lifeboat/lifeboat = lifeboat_dock.get_docked() - if(lifeboat && lifeboat.available) - lifeboat.status = LIFEBOAT_INACTIVE - -/datum/authority/branch/evacuation/proc/launch_lifeboats() - for(var/obj/docking_port/stationary/lifeboat_dock/lifeboat_dock in GLOB.lifeboat_almayer_docks) - var/obj/docking_port/mobile/crashable/lifeboat/lifeboat = lifeboat_dock.get_docked() - if(lifeboat && lifeboat.available) - lifeboat.evac_launch() - -//========================================================================================= -//========================================================================================= -//=====================================SELF DETRUCT======================================== -//========================================================================================= -//========================================================================================= - -/datum/authority/branch/evacuation/proc/enable_self_destruct(force=0) - if(force || (dest_status == NUKE_EXPLOSION_INACTIVE && !(flags_scuttle & FLAGS_SELF_DESTRUCT_DENY))) - dest_status = NUKE_EXPLOSION_ACTIVE - dest_master.lock_or_unlock() - dest_started_at = world.time - set_security_level(SEC_LEVEL_DELTA) //also activate Delta alert, to open the SD shutters. - spawn(0) - for(var/obj/structure/machinery/door/poddoor/shutters/almayer/D in machines) - if(D.id == "sd_lockdown") - D.open() - return TRUE - -//Override is for admins bypassing normal player restrictions. -/datum/authority/branch/evacuation/proc/cancel_self_destruct(override) - if(dest_status == NUKE_EXPLOSION_ACTIVE) - var/obj/structure/machinery/self_destruct/rod/I - var/i - for(i in EvacuationAuthority.dest_rods) - I = i - if(I.active_state == SELF_DESTRUCT_MACHINE_ARMED && !override) - dest_master.state(SPAN_WARNING("WARNING: Unable to cancel detonation. Please disarm all control rods.")) - return FALSE - - dest_status = NUKE_EXPLOSION_INACTIVE - dest_master.in_progress = 1 - dest_started_at = 0 - for(i in dest_rods) - I = i - if(I.active_state == SELF_DESTRUCT_MACHINE_ACTIVE || (I.active_state == SELF_DESTRUCT_MACHINE_ARMED && override)) I.lock_or_unlock(1) - dest_master.lock_or_unlock(1) - dest_index = 1 - ai_announcement("The emergency destruct system has been deactivated.", 'sound/AI/selfdestruct_deactivated.ogg') - if(evac_status == EVACUATION_STATUS_STANDING_BY) //the evac has also been cancelled or was never started. - set_security_level(SEC_LEVEL_RED, TRUE) //both SD and evac are inactive, lowering the security level. - return TRUE - -/datum/authority/branch/evacuation/proc/initiate_self_destruct(override) - if(dest_status < NUKE_EXPLOSION_IN_PROGRESS) - var/obj/structure/machinery/self_destruct/rod/I - var/i - for(i in dest_rods) - I = i - if(I.active_state != SELF_DESTRUCT_MACHINE_ARMED && !override) - dest_master.state(SPAN_WARNING("WARNING: Unable to trigger detonation. Please arm all control rods.")) - return FALSE - dest_master.in_progress = !dest_master.in_progress - for(i in EvacuationAuthority.dest_rods) - I = i - I.in_progress = 1 - ai_announcement("DANGER. DANGER. Self-destruct system activated. DANGER. DANGER. Self-destruct in progress. DANGER. DANGER.") - trigger_self_destruct(,,override) - return TRUE - -/datum/authority/branch/evacuation/proc/trigger_self_destruct(list/z_levels = SSmapping.levels_by_trait(ZTRAIT_MARINE_MAIN_SHIP), origin = dest_master, override = FALSE, end_type = NUKE_EXPLOSION_FINISHED, play_anim = TRUE, end_round = TRUE) - set waitfor = 0 - if(dest_status < NUKE_EXPLOSION_IN_PROGRESS) //One more check for good measure, in case it's triggered through a bomb instead of the destruct mechanism/admin panel. - dest_status = NUKE_EXPLOSION_IN_PROGRESS - playsound(origin, 'sound/machines/Alarm.ogg', 75, 0, 30) - world << pick('sound/theme/nuclear_detonation1.ogg','sound/theme/nuclear_detonation2.ogg') - - var/ship_status = 1 - for(var/i in z_levels) - if(is_mainship_level(i)) - ship_status = 0 //Destroyed. - break - - var/list/alive_mobs = list() //Everyone who will be destroyed on the zlevel(s). - var/list/dead_mobs = list() //Everyone who only needs to see the cinematic. - for(var/mob/current_mob as anything in GLOB.mob_list) //This only does something cool for the people about to die, but should prove pretty interesting. - var/turf/current_turf = get_turf(current_mob) - if(!current_mob || !current_mob.loc || !current_turf) - continue //In case something changes when we sleep(). - if(current_mob.stat == DEAD) - dead_mobs |= current_mob - continue - if(current_turf.z in z_levels) - alive_mobs |= current_mob - shake_camera(current_mob, 110, 4) - - - sleep(100) - /*Hardcoded for now, since this was never really used for anything else. - Would ideally use a better system for showing cutscenes.*/ - var/atom/movable/screen/cinematic/explosion/C = new - - if(play_anim) - for(var/mob/current_mob as anything in alive_mobs + dead_mobs) - if(current_mob && current_mob.loc && current_mob.client) - current_mob.client.add_to_screen(C) //They may have disconnected in the mean time. - - sleep(15) //Extra 1.5 seconds to look at the ship. - flick(override ? "intro_override" : "intro_nuke", C) - sleep(35) - for(var/mob/current_mob in alive_mobs) - if(current_mob && current_mob.loc) //Who knows, maybe they escaped, or don't exist anymore. - var/turf/current_mob_turf = get_turf(current_mob) - if(!current_mob_turf) - continue - if(current_mob_turf.z in z_levels) - if(istype(current_mob.loc, /obj/structure/closet/secure_closet/freezer/fridge)) - continue - current_mob.death(create_cause_data("nuclear explosion")) - else - if(play_anim) - current_mob.client.remove_from_screen(C) //those who managed to escape the z level at last second shouldn't have their view obstructed. - if(play_anim) - flick(ship_status ? "ship_spared" : "ship_destroyed", C) - C.icon_state = ship_status ? "summary_spared" : "summary_destroyed" - world << sound('sound/effects/explosionfar.ogg') - - if(end_round) - dest_status = end_type - - sleep(5) - if(SSticker.mode) - SSticker.mode.check_win() - - if(!SSticker.mode) //Just a safety, just in case a mode isn't running, somehow. - to_world(SPAN_ROUNDBODY("Resetting in 30 seconds!")) - sleep(300) - log_game("Rebooting due to nuclear detonation.") - world.Reboot() - return TRUE - -/datum/authority/branch/evacuation/proc/process_self_destruct() - set background = 1 - - spawn while(dest_master && dest_master.loc && dest_master.active_state == SELF_DESTRUCT_MACHINE_ARMED && dest_status == NUKE_EXPLOSION_ACTIVE && dest_index <= dest_rods.len) - var/obj/structure/machinery/self_destruct/rod/I = dest_rods[dest_index] - if(world.time >= dest_cooldown + I.activate_time) - I.lock_or_unlock() //Unlock it. - if(++dest_index <= dest_rods.len) - I = dest_rods[dest_index]//Start the next sequence. - I.activate_time = world.time - sleep(10) //Checks every second. Could integrate into another controller for better tracking. - -//Generic parent base for the self_destruct items. -/obj/structure/machinery/self_destruct - icon = 'icons/obj/structures/machinery/self_destruct.dmi' - icon_state = "console_1" - var/base_icon_state = "console" - use_power = USE_POWER_NONE //Runs unpowered, may need to change later. - density = FALSE - anchored = TRUE //So it doesn't go anywhere. - unslashable = TRUE - unacidable = TRUE //Cannot C4 it either. - mouse_opacity = FALSE //No need to click or interact with this initially. - var/in_progress = 0 //Cannot interact with while it's doing something, like an animation. - var/active_state = SELF_DESTRUCT_MACHINE_INACTIVE //What step of the process it's on. - -/obj/structure/machinery/self_destruct/Initialize(mapload, ...) - . = ..() - icon_state = "[base_icon_state]_1" - -/obj/structure/machinery/self_destruct/Destroy() - . = ..() - machines -= src - operator = null - -/obj/structure/machinery/self_destruct/ex_act(severity) - return FALSE - -/obj/structure/machinery/self_destruct/attack_hand() - if(..() || in_progress) - return FALSE //This check is backward, ugh. - return TRUE - -//Add sounds. -/obj/structure/machinery/self_destruct/proc/lock_or_unlock(lock) - set waitfor = 0 - in_progress = 1 - flick("[base_icon_state]" + (lock? "_5" : "_2"),src) - sleep(9) - mouse_opacity = !mouse_opacity - icon_state = "[base_icon_state]" + (lock? "_1" : "_3") - in_progress = 0 - active_state = active_state > SELF_DESTRUCT_MACHINE_INACTIVE ? SELF_DESTRUCT_MACHINE_INACTIVE : SELF_DESTRUCT_MACHINE_ACTIVE - -/obj/structure/machinery/self_destruct/console - name = "self-destruct control panel" - icon_state = "console_1" - base_icon_state = "console" - req_one_access = list(ACCESS_MARINE_CO, ACCESS_MARINE_SENIOR) - -/obj/structure/machinery/self_destruct/console/Destroy() - . = ..() - EvacuationAuthority.dest_master = null - EvacuationAuthority.dest_rods = null - -/obj/structure/machinery/self_destruct/console/lock_or_unlock(lock) - playsound(src, 'sound/machines/hydraulics_1.ogg', 25, 1) - ..() - -//TODO: Add sounds. -/obj/structure/machinery/self_destruct/console/attack_hand(mob/user) - if(inoperable()) - return - - tgui_interact(user) - -/obj/structure/machinery/self_destruct/console/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "SelfDestructConsole", name) - ui.open() - -/obj/structure/machinery/sleep_console/ui_status(mob/user, datum/ui_state/state) - . = ..() - if(inoperable()) - return UI_CLOSE - - -/obj/structure/machinery/self_destruct/console/ui_data(mob/user) - var/list/data = list() - - data["dest_status"] = active_state - - return data - -/obj/structure/machinery/self_destruct/console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - - switch(action) - if("dest_start") - to_chat(usr, SPAN_NOTICE("You press a few keys on the panel.")) - to_chat(usr, SPAN_NOTICE("The system must be booting up the self-destruct sequence now.")) - playsound(src.loc, 'sound/items/rped.ogg', 25, TRUE) - sleep(2 SECONDS) - ai_announcement("Danger. The emergency destruct system is now activated. The ship will detonate in T-minus 20 minutes. Automatic detonation is unavailable. Manual detonation is required.", 'sound/AI/selfdestruct.ogg') - active_state = SELF_DESTRUCT_MACHINE_ARMED //Arm it here so the process can execute it later. - var/obj/structure/machinery/self_destruct/rod/I = EvacuationAuthority.dest_rods[EvacuationAuthority.dest_index] - I.activate_time = world.time - EvacuationAuthority.process_self_destruct() - . = TRUE - - if("dest_trigger") - EvacuationAuthority.initiate_self_destruct() - . = TRUE - - if("dest_cancel") - if(!allowed(usr)) - to_chat(usr, SPAN_WARNING("You don't have the necessary clearance to cancel the emergency destruct system!")) - return - EvacuationAuthority.cancel_self_destruct() - . = TRUE - -/obj/structure/machinery/self_destruct/rod - name = "self-destruct control rod" - desc = "It is part of a complicated self-destruct sequence, but relatively simple to operate. Twist to arm or disarm." - icon_state = "rod_1" - base_icon_state = "rod" - layer = BELOW_OBJ_LAYER - var/activate_time - -/obj/structure/machinery/self_destruct/rod/Destroy() - . = ..() - if(EvacuationAuthority && EvacuationAuthority.dest_rods) - EvacuationAuthority.dest_rods -= src - -/obj/structure/machinery/self_destruct/rod/lock_or_unlock(lock) - playsound(src, 'sound/machines/hydraulics_2.ogg', 25, 1) - ..() - if(lock) - activate_time = null - density = FALSE - layer = initial(layer) - else - density = TRUE - layer = ABOVE_OBJ_LAYER - -/obj/structure/machinery/self_destruct/rod/attack_hand(mob/user) - if(..()) - switch(active_state) - if(SELF_DESTRUCT_MACHINE_ACTIVE) - to_chat(user, SPAN_NOTICE("You twist and release the control rod, arming it.")) - playsound(src, 'sound/machines/switch.ogg', 25, 1) - icon_state = "rod_4" - active_state = SELF_DESTRUCT_MACHINE_ARMED - if(SELF_DESTRUCT_MACHINE_ARMED) - to_chat(user, SPAN_NOTICE("You twist and release the control rod, disarming it.")) - playsound(src, 'sound/machines/switch.ogg', 25, 1) - icon_state = "rod_3" - active_state = SELF_DESTRUCT_MACHINE_ACTIVE - else to_chat(user, SPAN_WARNING("The control rod is not ready.")) diff --git a/code/game/gamemodes/colonialmarines/colonialmarines.dm b/code/game/gamemodes/colonialmarines/colonialmarines.dm index df04873ac140..7b1c695ade2b 100644 --- a/code/game/gamemodes/colonialmarines/colonialmarines.dm +++ b/code/game/gamemodes/colonialmarines/colonialmarines.dm @@ -297,29 +297,25 @@ if(SSticker.current_state != GAME_STATE_PLAYING) return - var/living_player_list[] = count_humans_and_xenos(EvacuationAuthority.get_affected_zlevels()) + var/living_player_list[] = count_humans_and_xenos(get_affected_zlevels()) var/num_humans = living_player_list[1] var/num_xenos = living_player_list[2] if(force_end_at && world.time > force_end_at) round_finished = MODE_INFESTATION_X_MINOR - if(EvacuationAuthority.dest_status == NUKE_EXPLOSION_FINISHED) - round_finished = MODE_GENERIC_DRAW_NUKE //Nuke went off, ending the round. - if(EvacuationAuthority.dest_status == NUKE_EXPLOSION_GROUND_FINISHED) - round_finished = MODE_INFESTATION_M_MINOR //Nuke went off, ending the round. - if(EvacuationAuthority.dest_status < NUKE_EXPLOSION_IN_PROGRESS) //If the nuke ISN'T in progress. We do not want to end the round before it detonates. - if(!num_humans && num_xenos) //No humans remain alive. - round_finished = MODE_INFESTATION_X_MAJOR //Evacuation did not take place. Everyone died. - else if(num_humans && !num_xenos) - if(SSticker.mode && SSticker.mode.is_in_endgame) - round_finished = MODE_INFESTATION_X_MINOR //Evacuation successfully took place. - else - SSticker.roundend_check_paused = TRUE - round_finished = MODE_INFESTATION_M_MAJOR //Humans destroyed the xenomorphs. - ares_conclude() - addtimer(VARSET_CALLBACK(SSticker, roundend_check_paused, FALSE), MARINE_MAJOR_ROUND_END_DELAY) - else if(!num_humans && !num_xenos) - round_finished = MODE_INFESTATION_DRAW_DEATH //Both were somehow destroyed. + + if(!num_humans && num_xenos) //No humans remain alive. + round_finished = MODE_INFESTATION_X_MAJOR //Evacuation did not take place. Everyone died. + else if(num_humans && !num_xenos) + if(SSticker.mode && SSticker.mode.is_in_endgame) + round_finished = MODE_INFESTATION_X_MINOR //Evacuation successfully took place. + else + SSticker.roundend_check_paused = TRUE + round_finished = MODE_INFESTATION_M_MAJOR //Humans destroyed the xenomorphs. + ares_conclude() + addtimer(VARSET_CALLBACK(SSticker, roundend_check_paused, FALSE), MARINE_MAJOR_ROUND_END_DELAY) + else if(!num_humans && !num_xenos) + round_finished = MODE_INFESTATION_DRAW_DEATH //Both were somehow destroyed. /datum/game_mode/colonialmarines/check_queen_status(hivenumber) set waitfor = 0 @@ -367,7 +363,7 @@ round_statistics.current_map.total_marine_victories++ round_statistics.current_map.total_marine_majors++ if(MODE_INFESTATION_X_MINOR) - var/list/living_player_list = count_humans_and_xenos(EvacuationAuthority.get_affected_zlevels()) + var/list/living_player_list = count_humans_and_xenos(get_affected_zlevels()) if(living_player_list[1] && !living_player_list[2]) // If Xeno Minor but Xenos are dead and Humans are alive, see which faction is the last standing var/headcount = count_per_faction() var/living = headcount["total_headcount"] diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm index 6669dc058ee7..9b3ef1df4c15 100644 --- a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm +++ b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm @@ -152,9 +152,6 @@ spawn(0) //Deleting Almayer, for performance! SSitem_cleanup.delete_almayer() - if(SSxenocon) - //Don't need XENOCON - SSxenocon.wait = 30 MINUTES //PROCCESS diff --git a/code/game/gamemodes/colonialmarines/xenovsxeno.dm b/code/game/gamemodes/colonialmarines/xenovsxeno.dm index 5623295f1915..a19c3e3582c1 100644 --- a/code/game/gamemodes/colonialmarines/xenovsxeno.dm +++ b/code/game/gamemodes/colonialmarines/xenovsxeno.dm @@ -79,9 +79,6 @@ spawn(0) //Deleting Almayer, for performance! SSitem_cleanup.delete_almayer() - if(SSxenocon) - //Don't need XENOCON - SSxenocon.wait = 30 MINUTES //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// diff --git a/code/game/gamemodes/extended/infection.dm b/code/game/gamemodes/extended/infection.dm index 04e0545361aa..a6b909022aef 100644 --- a/code/game/gamemodes/extended/infection.dm +++ b/code/game/gamemodes/extended/infection.dm @@ -95,7 +95,7 @@ possible_survivors -= new_survivor //either we drafted a survivor, or we're skipping over someone, either or - remove them /datum/game_mode/infection/check_win() - var/living_player_list[] = count_humans_and_xenos(EvacuationAuthority.get_affected_zlevels()) + var/list/living_player_list = count_humans_and_xenos(get_affected_zlevels()) var/num_humans = living_player_list[1] var/zed = living_player_list[2] diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 5382d80f37a2..e467631c915e 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -111,6 +111,10 @@ var/global/cas_tracking_id_increment = 0 //this var used to assign unique tracki log_game("Server IP: [world.internet_address]:[world.port]") return TRUE +/datum/game_mode/proc/get_affected_zlevels() + if(is_in_endgame) + . = SSmapping.levels_by_any_trait(list(ZTRAIT_MARINE_MAIN_SHIP)) + return ///process() ///Called by the gameticker @@ -119,8 +123,7 @@ var/global/cas_tracking_id_increment = 0 //this var used to assign unique tracki /datum/game_mode/proc/check_finished() //to be called by ticker - if(EvacuationAuthority.dest_status == NUKE_EXPLOSION_FINISHED || EvacuationAuthority.dest_status == NUKE_EXPLOSION_GROUND_FINISHED ) - return TRUE + return /datum/game_mode/proc/cleanup() //This is called when the round has ended but not the game, if any cleanup would be necessary in that case. return diff --git a/code/game/jobs/job/civilians/other/liaison.dm b/code/game/jobs/job/civilians/other/liaison.dm index 7f73376a05dd..cbbb87124957 100644 --- a/code/game/jobs/job/civilians/other/liaison.dm +++ b/code/game/jobs/job/civilians/other/liaison.dm @@ -6,7 +6,7 @@ selection_class = "job_cl" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/liaison - entry_message_body = "As a representative of Weyland-Yutani Corporation, your job requires you to stay in character at all times. You are not required to follow military orders; however, you cannot give military orders. Your primary job is to observe and report back your findings to Weyland-Yutani. Follow regular game rules unless told otherwise by your superiors. Use your office fax machine to communicate with corporate headquarters or to acquire new directives. You may not receive anything back, and this is normal." + entry_message_body = "As a representative of Weyland-Yutani Corporation, your job requires you to stay in character at all times. You are not required to follow military orders; however, you cannot give military orders. Your primary job is to observe and report back your findings to Weyland-Yutani. Follow regular game rules unless told otherwise by your superiors. Use your office fax machine to communicate with corporate headquarters or to acquire new directives. You may not receive anything back, and this is normal." var/mob/living/carbon/human/active_liaison /datum/job/civilian/liaison/generate_entry_conditions(mob/living/liaison, whitelist_status) diff --git a/code/game/jobs/job/civilians/other/mess_seargent.dm b/code/game/jobs/job/civilians/other/mess_seargent.dm index 4b1975015a95..97578eb1159d 100644 --- a/code/game/jobs/job/civilians/other/mess_seargent.dm +++ b/code/game/jobs/job/civilians/other/mess_seargent.dm @@ -6,7 +6,7 @@ flags_startup_parameters = ROLE_ADD_TO_DEFAULT supervisors = "the auxiliary support officer" gear_preset = /datum/equipment_preset/uscm_ship/chef - entry_message_body = "Your job is to service the marines with excellent food, drinks and entertaining the shipside crew when needed. You have a lot of freedom and it is up to you, to decide what to do with it. Good luck!" + entry_message_body = "Your job is to service the marines with excellent food, drinks and entertaining the shipside crew when needed. You have a lot of freedom and it is up to you, to decide what to do with it. Good luck!" /obj/effect/landmark/start/chef name = JOB_MESS_SERGEANT diff --git a/code/game/jobs/job/civilians/other/survivors.dm b/code/game/jobs/job/civilians/other/survivors.dm index 5c82241c47de..23097e139eda 100644 --- a/code/game/jobs/job/civilians/other/survivors.dm +++ b/code/game/jobs/job/civilians/other/survivors.dm @@ -10,6 +10,8 @@ job_options = SURVIVOR_VARIANT_LIST var/intro_text var/story_text + /// Whether or not the survivor is an inherently hostile to marines. + var/hostile = FALSE /datum/job/civilian/survivor/set_spawn_positions(count) spawn_positions = Clamp((round(count * SURVIVOR_TO_TOTAL_SPAWN_RATIO)), 2, 8) @@ -59,23 +61,32 @@ if(picked_spawner.story_text) story_text = picked_spawner.story_text + + if(picked_spawner.hostile) + hostile = TRUE + new /datum/cm_objective/move_mob/almayer/survivor(H) -/datum/job/civilian/survivor/generate_entry_message(mob/living/carbon/human/H) +/datum/job/civilian/survivor/generate_entry_message(mob/living/carbon/human/survivor) if(intro_text) for(var/line in intro_text) - to_chat(H, line) + to_chat(survivor, line) else - to_chat(H, "

You are a survivor!

") - to_chat(H, SPAN_NOTICE(SSmapping.configs[GROUND_MAP].survivor_message)) - to_chat(H, SPAN_NOTICE("You are fully aware of the xenomorph threat and are able to use this knowledge as you see fit.")) - to_chat(H, SPAN_NOTICE("You are NOT aware of the marines or their intentions. ")) + to_chat(survivor, "

You are a survivor!

") + to_chat(survivor, SPAN_NOTICE(SSmapping.configs[GROUND_MAP].survivor_message)) + to_chat(survivor, SPAN_NOTICE("You are fully aware of the xenomorph threat and are able to use this knowledge as you see fit.")) + to_chat(survivor, SPAN_NOTICE("You are NOT aware of the marines or their intentions. ")) if(story_text) - to_chat(H, story_text) - H.mind.memory += story_text + to_chat(survivor, story_text) + survivor.mind.memory += story_text + else + tell_survivor_story(survivor) + + if(hostile) + to_chat(survivor, SPAN_HIGHDANGER("You are HOSTILE to the USCM!")) else - tell_survivor_story(H) + to_chat(survivor, SPAN_XENOHIGHDANGER("You are NON-HOSTILE to the USCM!")) /datum/job/civilian/survivor/proc/tell_survivor_story(mob/living/carbon/human/H) var/list/survivor_story = list( diff --git a/code/game/jobs/job/civilians/support/cmo.dm b/code/game/jobs/job/civilians/support/cmo.dm index 8c4690ea2057..835f16f7d814 100644 --- a/code/game/jobs/job/civilians/support/cmo.dm +++ b/code/game/jobs/job/civilians/support/cmo.dm @@ -6,7 +6,7 @@ selection_class = "job_cmo" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/uscm_medical/cmo - entry_message_body = "You're a commissioned officer of the USCM. You have authority over everything related to Medbay and Research, only able to be overriden by the XO and CO. You are in charge of medical staff, surgery, chemistry, stimulants and keeping the marines healthy overall." + entry_message_body = "You're a commissioned officer of the USCM. You have authority over everything related to Medbay and Research, only able to be overriden by the XO and CO. You are in charge of medical staff, surgery, chemistry, stimulants and keeping the marines healthy overall." AddTimelock(/datum/job/civilian/professor, list( JOB_MEDIC_ROLES = 10 HOURS diff --git a/code/game/jobs/job/civilians/support/nurse.dm b/code/game/jobs/job/civilians/support/nurse.dm index 7a0cab16f559..8912011298dc 100644 --- a/code/game/jobs/job/civilians/support/nurse.dm +++ b/code/game/jobs/job/civilians/support/nurse.dm @@ -6,7 +6,7 @@ selection_class = "job_doctor" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/uscm_medical/nurse - entry_message_body = "You are tasked with keeping the Marines healthy and strong. You are also an expert when it comes to medication and treatment, and can do minor surgical procedures. Focus on assisting doctors and triaging wounded marines." + entry_message_body = "You are tasked with keeping the Marines healthy and strong. You are also an expert when it comes to medication and treatment, and can do minor surgical procedures. Focus on assisting doctors and triaging wounded marines." /obj/effect/landmark/start/nurse name = JOB_NURSE diff --git a/code/game/jobs/job/civilians/support/researcher.dm b/code/game/jobs/job/civilians/support/researcher.dm index 61245c8164ab..21163f27959d 100644 --- a/code/game/jobs/job/civilians/support/researcher.dm +++ b/code/game/jobs/job/civilians/support/researcher.dm @@ -10,7 +10,7 @@ selection_class = "job_researcher" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/uscm_medical/researcher - entry_message_body = "You're a commissioned officer of the USCM, though you are not in the ship's chain of command. You are tasked with researching and developing new medical treatments, helping your fellow doctors, and generally learning new things. Your role involves a lot of roleplaying, but you can perform the function of a regular doctor. Do not hand out things to Marines without getting permission from your supervisor." + entry_message_body = "You're a commissioned officer of the USCM, though you are not in the ship's chain of command. You are tasked with researching and developing new medical treatments, helping your fellow doctors, and generally learning new things. Your role involves a lot of roleplaying, but you can perform the function of a regular doctor. Do not hand out things to Marines without getting permission from your supervisor." /datum/job/civilian/researcher/set_spawn_positions(count) spawn_positions = rsc_slot_formula(count) diff --git a/code/game/jobs/job/civilians/support/synthetic.dm b/code/game/jobs/job/civilians/support/synthetic.dm index 3e02385bc96c..70060fb36a15 100644 --- a/code/game/jobs/job/civilians/support/synthetic.dm +++ b/code/game/jobs/job/civilians/support/synthetic.dm @@ -9,7 +9,7 @@ flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADMIN_NOTIFY|ROLE_WHITELISTED|ROLE_CUSTOM_SPAWN flags_whitelist = WHITELIST_SYNTHETIC gear_preset = /datum/equipment_preset/synth/uscm - entry_message_body = "You are a Synthetic! You are held to a higher standard and are required to obey not only the Server Rules but Marine Law and Synthetic Rules. Failure to do so may result in your White-list Removal. Your primary job is to support and assist all USCM Departments and Personnel on-board. In addition, being a Synthetic gives you knowledge in every field and specialization possible on-board the ship. As a Synthetic you answer to the acting commanding officer. Special circumstances may change this!" + entry_message_body = "You are a Synthetic! You are held to a higher standard and are required to obey not only the Server Rules but Marine Law and Synthetic Rules. Failure to do so may result in your White-list Removal. Your primary job is to support and assist all USCM Departments and Personnel on-board. In addition, being a Synthetic gives you knowledge in every field and specialization possible on-board the ship. As a Synthetic you answer to the acting commanding officer. Special circumstances may change this!" /datum/job/civilian/synthetic/New() . = ..() diff --git a/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm b/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm index e5155c949a32..5f6293000365 100644 --- a/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm +++ b/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm @@ -5,7 +5,7 @@ allow_additional = TRUE flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/auxiliary_officer - entry_message_body = "Your job is to oversee the hangar crew, the intel officers, the engineering department, and requisition department. You have many responsibilities and a few plates to keep spinning but your subordinates are mostly self-reliant. Assist where you can and make sure command personnel are confident the auxiliary departments are operating at peak efficiency." + entry_message_body = "Your job is to oversee the hangar crew, the intel officers, the engineering department, and requisition department. You have many responsibilities and a few plates to keep spinning but your subordinates are mostly self-reliant. Assist where you can and make sure command personnel are confident the auxiliary departments are operating at peak efficiency." AddTimelock(/datum/job/command/auxiliary_officer, list( JOB_SQUAD_ROLES = 5 HOURS, diff --git a/code/game/jobs/job/command/auxiliary/crew_chief.dm b/code/game/jobs/job/command/auxiliary/crew_chief.dm index c8dfe2a8eb37..0770bcd60ffa 100644 --- a/code/game/jobs/job/command/auxiliary/crew_chief.dm +++ b/code/game/jobs/job/command/auxiliary/crew_chief.dm @@ -7,7 +7,7 @@ supervisors = "the pilot officers" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/dcc - entry_message_body = "Your job is to assist the pilot officer maintain the ship's dropship. You have authority only on the dropship, but you are expected to maintain order, as not to disrupt the pilot." + entry_message_body = "Your job is to assist the pilot officer maintain the ship's dropship. You have authority only on the dropship, but you are expected to maintain order, as not to disrupt the pilot." AddTimelock(/datum/job/command/crew_chief, list( JOB_SQUAD_ROLES = 5 HOURS diff --git a/code/game/jobs/job/command/auxiliary/intel.dm b/code/game/jobs/job/command/auxiliary/intel.dm index 8d83d49ed143..9905bc9d3747 100644 --- a/code/game/jobs/job/command/auxiliary/intel.dm +++ b/code/game/jobs/job/command/auxiliary/intel.dm @@ -8,7 +8,7 @@ supervisors = "the auxiliary support officer" flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = "USCM Intelligence Officer (IO) (Cryo)" - entry_message_body = "Your job is to assist the marines in collecting intelligence related to the current operation to better inform command of their opposition. You are in charge of gathering any data disks, folders, and notes you may find on the operational grounds and decrypt them to grant the USCM additional resources." + entry_message_body = "Your job is to assist the marines in collecting intelligence related to the current operation to better inform command of their opposition. You are in charge of gathering any data disks, folders, and notes you may find on the operational grounds and decrypt them to grant the USCM additional resources." /datum/job/command/intel/set_spawn_positions(count) spawn_positions = int_slot_formula(count) diff --git a/code/game/jobs/job/command/auxiliary/pilot.dm b/code/game/jobs/job/command/auxiliary/pilot.dm index a75846f92919..1a7a7c21d5a0 100644 --- a/code/game/jobs/job/command/auxiliary/pilot.dm +++ b/code/game/jobs/job/command/auxiliary/pilot.dm @@ -7,7 +7,7 @@ supervisors = "the auxiliary support officer" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/po - entry_message_body = "Your job is to fly, protect, and maintain the ship's dropship. While you are an officer, your authority is limited to the dropship, where you have authority over the enlisted personnel. If you are not piloting, there is an autopilot fallback for command, but don't leave the dropship without reason." + entry_message_body = "Your job is to fly, protect, and maintain the ship's dropship. While you are an officer, your authority is limited to the dropship, where you have authority over the enlisted personnel. If you are not piloting, there is an autopilot fallback for command, but don't leave the dropship without reason." // Dropship Roles is both PO and DCC combined to not force people to backtrack AddTimelock(/datum/job/command/pilot, list( diff --git a/code/game/jobs/job/command/auxiliary/senior.dm b/code/game/jobs/job/command/auxiliary/senior.dm index 5e9b7caf1f10..014db9569b2a 100644 --- a/code/game/jobs/job/command/auxiliary/senior.dm +++ b/code/game/jobs/job/command/auxiliary/senior.dm @@ -7,7 +7,7 @@ job_options = list("Gunnery Sergeant" = "GySGT", "Master Sergeant" = "MSgt", "First Sergeant" = "1Sgt", "Master Gunnery Sergeant" = "MGySgt", "Sergeant Major" = "SgtMaj") /datum/job/command/senior/on_config_load() - entry_message_body = "You are held to a higher standard and are required to obey not only the Server Rules but Marine Law and Standard Operating Procedure. Failure to do so may result in your Mentorship Removal. Your primary job is to teach others the game and its mechanics, and offer advice to all USCM Departments and Personnel on-board." + entry_message_body = "You are held to a higher standard and are required to obey not only the Server Rules but Marine Law and Standard Operating Procedure. Failure to do so may result in your Mentorship Removal. Your primary job is to teach others the game and its mechanics, and offer advice to all USCM Departments and Personnel on-board." return ..() /datum/job/command/senior/announce_entry_message(mob/living/carbon/human/H) diff --git a/code/game/jobs/job/command/cic/captain.dm b/code/game/jobs/job/command/cic/captain.dm index 98db585e1d07..72f861351912 100644 --- a/code/game/jobs/job/command/cic/captain.dm +++ b/code/game/jobs/job/command/cic/captain.dm @@ -16,7 +16,7 @@ ) /datum/job/command/commander/generate_entry_message() - entry_message_body = "You are the Commanding Officer of the [MAIN_SHIP_NAME] as well as the operation. Your goal is to lead the Marines on their mission as well as protect and command the ship and her crew. Your job involves heavy roleplay and requires you to behave like a high-ranking officer and to stay in character at all times. As the Commanding Officer your only superior is High Command itself. You must abide by the Commanding Officer Code of Conduct. Failure to do so may result in punitive action against you. Godspeed." + entry_message_body = "You are the Commanding Officer of the [MAIN_SHIP_NAME] as well as the operation. Your goal is to lead the Marines on their mission as well as protect and command the ship and her crew. Your job involves heavy roleplay and requires you to behave like a high-ranking officer and to stay in character at all times. As the Commanding Officer your only superior is High Command itself. You must abide by the Commanding Officer Code of Conduct. Failure to do so may result in punitive action against you. Godspeed." return ..() /datum/job/command/commander/get_whitelist_status(list/roles_whitelist, client/player) diff --git a/code/game/jobs/job/command/cic/staffofficer.dm b/code/game/jobs/job/command/cic/staffofficer.dm index fff51624aa4b..94769de2158f 100644 --- a/code/game/jobs/job/command/cic/staffofficer.dm +++ b/code/game/jobs/job/command/cic/staffofficer.dm @@ -6,7 +6,7 @@ scaled = FALSE flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/so - entry_message_body = "Your job is to monitor the Marines, man the CIC, and listen to your superior officers. You are in charge of logistics and the overwatch system. You are also in line to take command after other eligible superior commissioned officers." + entry_message_body = "Your job is to monitor the Marines, man the CIC, and listen to your superior officers. You are in charge of logistics and the overwatch system. You are also in line to take command after other eligible superior commissioned officers." /datum/job/command/bridge/set_spawn_positions(count) spawn_positions = so_slot_formula(count) diff --git a/code/game/jobs/job/command/police/chief_police.dm b/code/game/jobs/job/command/police/chief_police.dm index b76943c4d0ac..63e6d8023f17 100644 --- a/code/game/jobs/job/command/police/chief_police.dm +++ b/code/game/jobs/job/command/police/chief_police.dm @@ -4,7 +4,7 @@ selection_class = "job_cmp" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/uscm_police/cmp - entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. You lead the Military Police, ensure your officers maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the security of high-ranking personnel, including the command staff. Keep them safe!" + entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. You lead the Military Police, ensure your officers maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the security of high-ranking personnel, including the command staff. Keep them safe!" AddTimelock(/datum/job/command/warrant, list( JOB_POLICE_ROLES = 15 HOURS, diff --git a/code/game/jobs/job/command/police/police.dm b/code/game/jobs/job/command/police/police.dm index 7285c5b278b1..e05bc2e96256 100644 --- a/code/game/jobs/job/command/police/police.dm +++ b/code/game/jobs/job/command/police/police.dm @@ -8,7 +8,7 @@ selection_class = "job_mp" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/uscm_police/mp - entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. Your primary job is to maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the security of high-ranking personnel, including the command staff. Keep them safe!" + entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. Your primary job is to maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the security of high-ranking personnel, including the command staff. Keep them safe!" /datum/job/command/police/set_spawn_positions(count) spawn_positions = mp_slot_formula(count) diff --git a/code/game/jobs/job/command/police/warden.dm b/code/game/jobs/job/command/police/warden.dm index 55cbea975401..d2775e197537 100644 --- a/code/game/jobs/job/command/police/warden.dm +++ b/code/game/jobs/job/command/police/warden.dm @@ -5,7 +5,7 @@ flags_startup_parameters = ROLE_ADD_TO_DEFAULT supervisors = "the Chief MP" gear_preset = /datum/equipment_preset/uscm_ship/uscm_police/warden - entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. Your primary job is to maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the mainting security records and overwatching any prisoners in Brig." + entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. Your primary job is to maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the mainting security records and overwatching any prisoners in Brig." AddTimelock(/datum/job/command/warden, list( JOB_POLICE_ROLES = 10 HOURS diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 0d68d23e5524..48ad372e1f33 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -49,13 +49,16 @@ if(!disp_title) disp_title = title + if(global.config.is_loaded) + on_config_load() + /datum/job/proc/on_config_load() if(entry_message_body) entry_message_body = replace_placeholders(entry_message_body) /datum/job/proc/replace_placeholders(replacement_string) - replacement_string = replacetextEx(replacement_string, "%WIKIURL%", generate_wiki_link()) - replacement_string = replacetextEx(replacement_string, "%LAWURL%", "[CONFIG_GET(string/wikiarticleurl)]/[URL_WIKI_LAW]") + replacement_string = replacetextEx(replacement_string, WIKI_PLACEHOLDER, generate_wiki_link()) + replacement_string = replacetextEx(replacement_string, LAW_PLACEHOLDER, "[CONFIG_GET(string/wikiarticleurl)]/[URL_WIKI_LAW]") return replacement_string /datum/job/proc/generate_wiki_link() diff --git a/code/game/jobs/job/logistics/cargo/cargo_tech.dm b/code/game/jobs/job/logistics/cargo/cargo_tech.dm index 3b588022bd97..c4725289c3ff 100644 --- a/code/game/jobs/job/logistics/cargo/cargo_tech.dm +++ b/code/game/jobs/job/logistics/cargo/cargo_tech.dm @@ -8,7 +8,7 @@ selection_class = "job_ct" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/cargo - entry_message_body = "Your job is to dispense supplies to the marines, including weapon attachments. Stay in your department when possible to ensure the marines have full access to the supplies they may require. Listen to the radio in case someone requests a supply drop via the overwatch system." + entry_message_body = "Your job is to dispense supplies to the marines, including weapon attachments. Stay in your department when possible to ensure the marines have full access to the supplies they may require. Listen to the radio in case someone requests a supply drop via the overwatch system." /datum/job/logistics/cargo/set_spawn_positions(count) spawn_positions = ct_slot_formula(count) diff --git a/code/game/jobs/job/logistics/cargo/chief_req.dm b/code/game/jobs/job/logistics/cargo/chief_req.dm index 76b7e98f2db8..5d5123e687ed 100644 --- a/code/game/jobs/job/logistics/cargo/chief_req.dm +++ b/code/game/jobs/job/logistics/cargo/chief_req.dm @@ -3,7 +3,7 @@ selection_class = "job_qm" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/qm - entry_message_body = "Your job is to dispense supplies to the marines, including weapon attachments. Your cargo techs can help you out, but you have final say in your department. Make sure they're not goofing off. While you may request paperwork for supplies, do not go out of your way to screw with marines, unless you want to get deposed. A happy ship is a well-functioning ship." + entry_message_body = "Your job is to dispense supplies to the marines, including weapon attachments. Your cargo techs can help you out, but you have final say in your department. Make sure they're not goofing off. While you may request paperwork for supplies, do not go out of your way to screw with marines, unless you want to get deposed. A happy ship is a well-functioning ship." AddTimelock(/datum/job/logistics/requisition, list( JOB_REQUISITION_ROLES = 10 HOURS, diff --git a/code/game/jobs/job/logistics/engi/chief_engineer.dm b/code/game/jobs/job/logistics/engi/chief_engineer.dm index 3a15c8632953..b6aa23f9c4a6 100644 --- a/code/game/jobs/job/logistics/engi/chief_engineer.dm +++ b/code/game/jobs/job/logistics/engi/chief_engineer.dm @@ -3,7 +3,7 @@ selection_class = "job_ce" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/chief_engineer - entry_message_body = "Your job is to maintain your department and keep your technicians in check. You are responsible for engineering, power, ordnance, and the orbital cannon. Should the commanding and executive officer be unavailable, you are next in the chain of command." + entry_message_body = "Your job is to maintain your department and keep your technicians in check. You are responsible for engineering, power, ordnance, and the orbital cannon. Should the commanding and executive officer be unavailable, you are next in the chain of command." AddTimelock(/datum/job/logistics/engineering, list( JOB_ENGINEER_ROLES = 10 HOURS, diff --git a/code/game/jobs/job/logistics/engi/maint_tech.dm b/code/game/jobs/job/logistics/engi/maint_tech.dm index 8562408360d7..b13062127a12 100644 --- a/code/game/jobs/job/logistics/engi/maint_tech.dm +++ b/code/game/jobs/job/logistics/engi/maint_tech.dm @@ -6,7 +6,7 @@ selection_class = "job_ot" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/maint - entry_message_body = "Your job is to maintain the integrity of the ship, including the orbital cannon. You remain one of the more flexible roles on the ship and as such may receive other menial tasks from your superiors." + entry_message_body = "Your job is to maintain the integrity of the ship, including the orbital cannon. You remain one of the more flexible roles on the ship and as such may receive other menial tasks from your superiors." /obj/effect/landmark/start/maint name = JOB_MAINT_TECH diff --git a/code/game/jobs/job/logistics/engi/ordnance_tech.dm b/code/game/jobs/job/logistics/engi/ordnance_tech.dm index bed0acf15887..43a8a7122a8f 100644 --- a/code/game/jobs/job/logistics/engi/ordnance_tech.dm +++ b/code/game/jobs/job/logistics/engi/ordnance_tech.dm @@ -9,7 +9,7 @@ selection_class = "job_ot" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/ordn - entry_message_body = "Your job is to maintain the integrity of the USCM weapons, munitions and equipment, including the orbital cannon. You can use the workshop in the portside hangar to construct new armaments for the marines. However you remain one of the more flexible roles on the ship and as such may receive other menial tasks from your superiors." + entry_message_body = "Your job is to maintain the integrity of the USCM weapons, munitions and equipment, including the orbital cannon. You can use the workshop in the portside hangar to construct new armaments for the marines. However you remain one of the more flexible roles on the ship and as such may receive other menial tasks from your superiors." /datum/job/logistics/otech/set_spawn_positions(count) spawn_positions = ot_slot_formula(count) diff --git a/code/game/jobs/job/marine/squad/engineer.dm b/code/game/jobs/job/marine/squad/engineer.dm index 00a6b91dcffd..1910248a61a2 100644 --- a/code/game/jobs/job/marine/squad/engineer.dm +++ b/code/game/jobs/job/marine/squad/engineer.dm @@ -5,7 +5,7 @@ allow_additional = 1 flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/engineer - entry_message_body = "You have the equipment and skill to build fortifications, reroute power lines, and bunker down. Your squaddies will look to you when it comes to construction in the field of battle." + entry_message_body = "You have the equipment and skill to build fortifications, reroute power lines, and bunker down. Your squaddies will look to you when it comes to construction in the field of battle." /datum/job/marine/engineer/set_spawn_positions(count) for(var/datum/squad/sq in RoleAuthority.squads) diff --git a/code/game/jobs/job/marine/squad/leader.dm b/code/game/jobs/job/marine/squad/leader.dm index 960a80d5f659..be78438db3d6 100644 --- a/code/game/jobs/job/marine/squad/leader.dm +++ b/code/game/jobs/job/marine/squad/leader.dm @@ -5,7 +5,7 @@ supervisors = "the acting commanding officer" flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/leader - entry_message_body = "You are responsible for the men and women of your squad. Make sure they are on task, working together, and communicating. You are also in charge of communicating with command and letting them know about the situation first hand. Keep out of harm's way." + entry_message_body = "You are responsible for the men and women of your squad. Make sure they are on task, working together, and communicating. You are also in charge of communicating with command and letting them know about the situation first hand. Keep out of harm's way." /datum/job/marine/leader/whiskey title = JOB_WO_SQUAD_LEADER diff --git a/code/game/jobs/job/marine/squad/medic.dm b/code/game/jobs/job/marine/squad/medic.dm index cdbd74acefde..3df0a3793ca5 100644 --- a/code/game/jobs/job/marine/squad/medic.dm +++ b/code/game/jobs/job/marine/squad/medic.dm @@ -5,7 +5,7 @@ allow_additional = 1 flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/medic - entry_message_body = "You tend the wounds of your squad mates and make sure they are healthy and active. You may not be a fully-fledged doctor, but you stand between life and death when it matters." + entry_message_body = "You tend the wounds of your squad mates and make sure they are healthy and active. You may not be a fully-fledged doctor, but you stand between life and death when it matters." /datum/job/marine/medic/set_spawn_positions(count) for(var/datum/squad/sq in RoleAuthority.squads) diff --git a/code/game/jobs/job/marine/squad/smartgunner.dm b/code/game/jobs/job/marine/squad/smartgunner.dm index aacc562f921b..1a89abf5d3be 100644 --- a/code/game/jobs/job/marine/squad/smartgunner.dm +++ b/code/game/jobs/job/marine/squad/smartgunner.dm @@ -6,7 +6,7 @@ scaled = 1 flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/sg - entry_message_body = "You are the smartgunner. Your task is to provide heavy weapons support." + entry_message_body = "You are the smartgunner. Your task is to provide heavy weapons support." /datum/job/marine/smartgunner/set_spawn_positions(count) spawn_positions = sg_slot_formula(count) diff --git a/code/game/jobs/job/marine/squad/specialist.dm b/code/game/jobs/job/marine/squad/specialist.dm index 42ee69ef2d5c..e69241cdc70b 100644 --- a/code/game/jobs/job/marine/squad/specialist.dm +++ b/code/game/jobs/job/marine/squad/specialist.dm @@ -6,7 +6,7 @@ scaled = 1 flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/spec - entry_message_body = "You are the very rare and valuable weapon expert, trained to use special equipment. You can serve a variety of roles, so choose carefully." + entry_message_body = "You are the very rare and valuable weapon expert, trained to use special equipment. You can serve a variety of roles, so choose carefully." /datum/job/marine/specialist/set_spawn_positions(count) spawn_positions = spec_slot_formula(count) diff --git a/code/game/jobs/job/marine/squad/standard.dm b/code/game/jobs/job/marine/squad/standard.dm index e2502576e5ea..2fcd8a3cdd28 100644 --- a/code/game/jobs/job/marine/squad/standard.dm +++ b/code/game/jobs/job/marine/squad/standard.dm @@ -6,7 +6,10 @@ spawn_positions = -1 flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/pfc - entry_message_body = "You are a rank-and-file Marine of the USCM, and that is your strength. What you lack alone, you gain standing shoulder to shoulder with the men and women of the corps. Ooh-rah!" + +/datum/job/marine/standard/on_config_load() + entry_message_body = "You are a rank-and-file Marine of the USCM, and that is your strength. What you lack alone, you gain standing shoulder to shoulder with the men and women of the corps. Ooh-rah!" + return ..() /datum/job/marine/standard/set_spawn_positions(count) spawn_positions = max((round(count * STANDARD_MARINE_TO_TOTAL_SPAWN_RATIO)), 8) diff --git a/code/game/jobs/job/marine/squad/tl.dm b/code/game/jobs/job/marine/squad/tl.dm index ebebf360e830..2b0cff3ea3ed 100644 --- a/code/game/jobs/job/marine/squad/tl.dm +++ b/code/game/jobs/job/marine/squad/tl.dm @@ -5,7 +5,7 @@ allow_additional = 1 flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/tl - entry_message_body = "You are the Team Leader.Your task is to assist the squad leader in leading the squad as well as utilize ordnance such as orbital bombardments, CAS, and mortar as well as coordinating resupply with Requisitions and CIC. If the squad leader dies, you are expected to lead in their place." + entry_message_body = "You are the Team Leader.Your task is to assist the squad leader in leading the squad as well as utilize ordnance such as orbital bombardments, CAS, and mortar as well as coordinating resupply with Requisitions and CIC. If the squad leader dies, you are expected to lead in their place." /datum/job/marine/tl/generate_entry_conditions(mob/living/carbon/human/spawning_human) . = ..() diff --git a/code/game/machinery/ARES/ARES_interface.dm b/code/game/machinery/ARES/ARES_interface.dm index 64755897bc8e..0e45d5ee171b 100644 --- a/code/game/machinery/ARES/ARES_interface.dm +++ b/code/game/machinery/ARES/ARES_interface.dm @@ -79,7 +79,7 @@ data["access_level"] = authentication data["alert_level"] = security_level - data["evac_status"] = EvacuationAuthority.evac_status + data["evac_status"] = SShijack.evac_status data["worldtime"] = world.time data["access_log"] = datacore.interface_access_list @@ -397,12 +397,12 @@ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) return FALSE - if(EvacuationAuthority.flags_scuttle & FLAGS_EVACUATION_DENY) + if(SShijack.evac_admin_denied) to_chat(usr, SPAN_WARNING("The USCM has placed a lock on deploying the evacuation pods.")) playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) return FALSE - if(!EvacuationAuthority.initiate_evacuation()) + if(!SShijack.initiate_evacuation()) to_chat(usr, SPAN_WARNING("You are unable to initiate an evacuation procedure right now!")) playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) return FALSE diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index ee83c430c2db..8d4b27778c69 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -1,15 +1,3 @@ -/obj/structure/machinery/driver_button - name = "mass driver button" - icon = 'icons/obj/objects.dmi' - icon_state = "launcherbtt" - desc = "A remote control switch for a mass driver." - var/id = null - var/active = 0 - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 2 - active_power_usage = 4 - /obj/structure/machinery/ignition_switch name = "ignition switch" icon = 'icons/obj/objects.dmi' diff --git a/code/game/machinery/computer/almayer_control.dm b/code/game/machinery/computer/almayer_control.dm index 145d0d278cb6..fb9f7a0375d9 100644 --- a/code/game/machinery/computer/almayer_control.dm +++ b/code/game/machinery/computer/almayer_control.dm @@ -81,9 +81,9 @@ data["worldtime"] = world.time - data["evac_status"] = EvacuationAuthority.evac_status - if(EvacuationAuthority.evac_status == EVACUATION_STATUS_INITIATING) - data["evac_eta"] = EvacuationAuthority.get_status_panel_eta() + data["evac_status"] = SShijack.evac_status + if(SShijack.evac_status == EVACUATION_STATUS_INITIATED) + data["evac_eta"] = SShijack.get_evac_eta() if(!messagetitle.len) data["messages"] = null @@ -120,11 +120,11 @@ to_chat(usr, SPAN_WARNING("The ship must be under red alert in order to enact evacuation procedures.")) return FALSE - if(EvacuationAuthority.flags_scuttle & FLAGS_EVACUATION_DENY) + if(SShijack.evac_admin_denied) to_chat(usr, SPAN_WARNING("The USCM has placed a lock on deploying the evacuation pods.")) return FALSE - if(!EvacuationAuthority.initiate_evacuation()) + if(!SShijack.initiate_evacuation()) to_chat(usr, SPAN_WARNING("You are unable to initiate an evacuation procedure right now!")) return FALSE @@ -134,12 +134,10 @@ . = TRUE if("evacuation_cancel") - if(!EvacuationAuthority.cancel_evacuation()) + if(!SShijack.cancel_evacuation()) to_chat(usr, SPAN_WARNING("You are unable to cancel the evacuation right now!")) return FALSE - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/structure/machinery/computer/almayer_control, cancel_evac)), 4 SECONDS) - log_game("[key_name(usr)] has canceled the emergency evacuation.") message_admins("[key_name_admin(usr)] has canceled the emergency evacuation.") log_ares_security("Cancel Evacuation", "[usr] has cancelled the emergency evacuation.") @@ -276,10 +274,3 @@ // end tgui interact \\ // end tgui \\ - -/obj/structure/machinery/computer/almayer_control/proc/cancel_evac() - if(EvacuationAuthority.evac_status == EVACUATION_STATUS_STANDING_BY)//nothing changed during the wait - //if the self_destruct is active we try to cancel it (which includes lowering alert level to red) - if(!EvacuationAuthority.cancel_self_destruct(1)) - //if SD wasn't active (likely canceled manually in the SD room), then we lower the alert level manually. - set_security_level(SEC_LEVEL_RED, TRUE) //both SD and evac are inactive, lowering the security level. diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index d4d45de8db4e..3332577683fe 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -138,11 +138,11 @@ to_chat(usr, SPAN_WARNING("The ship must be under delta alert in order to enact evacuation procedures.")) return FALSE - if(EvacuationAuthority.flags_scuttle & FLAGS_EVACUATION_DENY) + if(SShijack.evac_admin_denied) to_chat(usr, SPAN_WARNING("The USCM has placed a lock on deploying the evacuation pods.")) return FALSE - if(!EvacuationAuthority.initiate_evacuation()) + if(!SShijack.initiate_evacuation()) to_chat(usr, SPAN_WARNING("You are unable to initiate an evacuation procedure right now!")) return FALSE @@ -155,17 +155,10 @@ if("evacuation_cancel") if(state == STATE_EVACUATION_CANCEL) - if(!EvacuationAuthority.cancel_evacuation()) + if(!SShijack.cancel_evacuation()) to_chat(usr, SPAN_WARNING("You are unable to cancel the evacuation right now!")) return FALSE - spawn(35)//some time between AI announcements for evac cancel and SD cancel. - if(EvacuationAuthority.evac_status == EVACUATION_STATUS_STANDING_BY)//nothing changed during the wait - //if the self_destruct is active we try to cancel it (which includes lowering alert level to red) - if(!EvacuationAuthority.cancel_self_destruct(1)) - //if SD wasn't active (likely canceled manually in the SD room), then we lower the alert level manually. - set_security_level(SEC_LEVEL_RED, TRUE) //both SD and evac are inactive, lowering the security level. - log_game("[key_name(usr)] has canceled the emergency evacuation.") message_admins("[key_name_admin(usr)] has canceled the emergency evacuation.") log_ares_security("Cancel Evacuation", "[usr] has cancelled the emergency evacuation.") @@ -327,8 +320,8 @@ user.set_interaction(src) var/dat = "Communications Console" - if(EvacuationAuthority.evac_status == EVACUATION_STATUS_INITIATING) - dat += "Evacuation in Progress\n
\nETA: [EvacuationAuthority.get_status_panel_eta()]
" + if(SShijack.evac_status == EVACUATION_STATUS_INITIATED) + dat += "Evacuation in Progress\n
\nETA: [SShijack.get_evac_eta()]
" switch(state) if(STATE_DEFAULT) if(authenticated) @@ -351,9 +344,11 @@ dat += "
Award a medal" dat += "
Send Distress Beacon" dat += "
Activate Self-Destruct" - switch(EvacuationAuthority.evac_status) - if(EVACUATION_STATUS_STANDING_BY) dat += "
Initiate emergency evacuation" - if(EVACUATION_STATUS_INITIATING) dat += "
Cancel emergency evacuation" + switch(SShijack.evac_status) + if(EVACUATION_STATUS_NOT_INITIATED) + dat += "
Initiate emergency evacuation" + if(EVACUATION_STATUS_INITIATED) + dat += "
Cancel emergency evacuation" else dat += "
LOG IN" @@ -408,20 +403,8 @@ if(STATE_ALERT_LEVEL) dat += "Current alert level: [get_security_level()]
" - if(security_level == SEC_LEVEL_DELTA) - if(EvacuationAuthority.dest_status >= NUKE_EXPLOSION_ACTIVE) - dat += SET_CLASS("The self-destruct mechanism is active. [EvacuationAuthority.evac_status != EVACUATION_STATUS_INITIATING ? "You have to manually deactivate the self-destruct mechanism." : ""]", INTERFACE_RED) - dat += "
" - switch(EvacuationAuthority.evac_status) - if(EVACUATION_STATUS_INITIATING) - dat += SET_CLASS("Evacuation initiated. Evacuate or rescind evacuation orders.", INTERFACE_RED) - if(EVACUATION_STATUS_IN_PROGRESS) - dat += SET_CLASS("Evacuation in progress.", INTERFACE_RED) - if(EVACUATION_STATUS_COMPLETE) - dat += SET_CLASS("Evacuation complete.", INTERFACE_RED) - else - dat += "Blue
" - dat += "Green" + dat += "Blue
" + dat += "Green" if(STATE_CONFIRM_LEVEL) dat += "Current alert level: [get_security_level()]
" diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index f6adaa8edd4e..7ec97874bb7f 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -1,158 +1,8 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/structure/machinery/computer/pod - name = "Pod Launch Control" - desc = "A control for launching pods. Some people prefer firing Mechas." +// Legacy SS13 machinery turned into props +/obj/structure/machinery/computer/pod/old + name = "DoorMex Control Computer" + desc = "A control for launching pods." icon_state = "computer_generic" density = TRUE - circuit = /obj/item/circuitboard/computer/pod - var/id = 1 - var/obj/structure/machinery/mass_driver/connected = null - var/timing = 0 - var/time = 30 - var/title = "Mass Driver Controls" + circuit = /obj/item/circuitboard/computer/pod/old processing = TRUE - - -/obj/structure/machinery/computer/pod/New() - ..() - spawn( 5 ) - for(var/obj/structure/machinery/mass_driver/M in machines) - if(M.id == id) - connected = M - return - return - - -/obj/structure/machinery/computer/pod/proc/alarm() - if(inoperable()) - return - - if(!( connected )) - to_chat(viewers(null, null), "Cannot locate mass driver connector. Cancelling firing sequence!") - return - - for(var/obj/structure/machinery/door/poddoor/M in machines) - if(M.id == id) - M.open() - - sleep(20) - - for(var/obj/structure/machinery/mass_driver/M in machines) - if(M.id == id) - M.power = connected.power - M.drive() - - sleep(50) - for(var/obj/structure/machinery/door/poddoor/M in machines) - if(M.id == id) - M.close() - return - return - -/obj/structure/machinery/computer/pod/attack_remote(mob/user as mob) - return attack_hand(user) - -/obj/structure/machinery/computer/pod/attack_hand(mob/user as mob) - if(..()) - return - - var/dat = "[title]" - user.set_interaction(src) - if(connected) - var/d2 - if(timing) //door controls do not need timers. - d2 = "Stop Time Launch" - else - d2 = "Initiate Time Launch" - var/second = time % 60 - var/minute = (time - second) / 60 - dat += "
\nTimer System: [d2]\nTime Left: [minute ? "[minute]:" : null][second] - - + +" - var/temp = "" - var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 ) - for(var/t in L) - if(t == connected.power) - temp += "[t] " - else - temp += "[t] " - dat += "
\nPower Level: [temp]
\nFiring Sequence
\nTest Fire Driver
\nToggle Outer Door
" - else - dat += "
\nToggle Outer Door
" - dat += "

Close
" - show_browser(user, dat, "computer", "size=400x500") - add_fingerprint(usr) - return - - -/obj/structure/machinery/computer/pod/process() - if(!..()) - return - if(timing) - if(time > 0) - time = round(time) - 1 - else - alarm() - time = 0 - timing = 0 - updateDialog() - return - - -/obj/structure/machinery/computer/pod/Topic(href, href_list) - if(..()) - return - if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (isRemoteControlling(usr))) - usr.set_interaction(src) - if(href_list["power"]) - var/t = text2num(href_list["power"]) - t = min(max(0.25, t), 16) - if(connected) - connected.power = t - if(href_list["alarm"]) - alarm() - if(href_list["drive"]) - for(var/obj/structure/machinery/mass_driver/M in machines) - if(M.id == id) - M.power = connected.power - M.drive() - - if(href_list["time"]) - timing = text2num(href_list["time"]) - if(href_list["tp"]) - var/tp = text2num(href_list["tp"]) - time += tp - time = min(max(round(time), 0), 120) - if(href_list["door"]) - for(var/obj/structure/machinery/door/poddoor/M in machines) - if(M.id == id) - if(M.density) - M.open() - else - M.close() - updateUsrDialog() - return - - - -/obj/structure/machinery/computer/pod/old - name = "DoorMex Control Computer" - title = "Door Controls" - -/obj/structure/machinery/computer/pod/old/syndicate - name = "ProComp Executive IIc" - desc = "The Syndicate operate on a tight budget. Operates external airlocks." - icon_state = "syndicomp" - title = "External Airlock Controls" - req_access = list(ACCESS_ILLEGAL_PIRATE) - -/obj/structure/machinery/computer/pod/old/syndicate/attack_hand(mob/user as mob) - if(!allowed(user)) - to_chat(user, SPAN_DANGER("Access Denied")) - return - else - ..() - -/obj/structure/machinery/computer/pod/old/swf - name = "Magix System IV" - icon_state = "wizard" - desc = "An arcane artifact that holds much magic. Running E-Knock 2.2: Sorceror's Edition" diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 8be8609d6008..8b73588f1d0b 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -150,47 +150,6 @@ else icon_state = initial(icon_state) + "0" -/obj/structure/machinery/driver_button/attack_remote(mob/user as mob) - return src.attack_hand(user) - -/obj/structure/machinery/driver_button/attackby(obj/item/W, mob/user as mob) - return src.attack_hand(user) - -/obj/structure/machinery/driver_button/attack_hand(mob/user as mob) - - src.add_fingerprint(usr) - if(inoperable()) - return - if(active) - return - add_fingerprint(user) - - use_power(5) - - active = 1 - icon_state = "launcheract" - - for(var/obj/structure/machinery/door/poddoor/M in machines) - if(M.id == src.id) - INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/structure/machinery/door, open)) - - sleep(20) - - for(var/obj/structure/machinery/mass_driver/M in machines) - if(M.id == src.id) - M.drive() - - sleep(50) - - for(var/obj/structure/machinery/door/poddoor/M in machines) - if(M.id == src.id) - INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/structure/machinery/door, close)) - - icon_state = "launcherbtt" - active = 0 - - return - // Controls elevator railings /obj/structure/machinery/door_control/railings name = "railing controls" diff --git a/code/game/machinery/fusion_engine.dm b/code/game/machinery/fusion_engine.dm index 4158727e3745..8e3097ef52d1 100644 --- a/code/game/machinery/fusion_engine.dm +++ b/code/game/machinery/fusion_engine.dm @@ -15,6 +15,7 @@ unacidable = TRUE //NOPE.jpg anchored = TRUE density = TRUE + power_machine = TRUE var/power_gen_percent = 0 //50,000W at full capacity var/buildstate = 0 //What state of building it are we on, 0-3, 1 is "broken", the default @@ -24,7 +25,8 @@ var/obj/item/fuelCell/fusion_cell = new //Starts with a fuel cell loaded in. Maybe replace with the plasma tanks in the future and have it consume plasma? Possibly remove this later if it's irrelevent... var/fuel_rate = 0 //Rate at which fuel is used. Based mostly on how long the generator has been running. - power_machine = TRUE + /// If the generator is overloaded. Only possible during hijack once fuel is at 100%. + var/overloaded = FALSE /obj/structure/machinery/power/fusion_engine/Initialize(mapload, ...) . = ..() @@ -35,11 +37,25 @@ /obj/structure/machinery/power/fusion_engine/Destroy() QDEL_NULL(fusion_cell) - . = ..() + return ..() +/obj/structure/machinery/power/fusion_engine/attack_alien(mob/living/carbon/xenomorph/xeno) + if(!overloaded) + to_chat(xeno, SPAN_WARNING("You see no reason to attack [src].")) + return XENO_NO_DELAY_ACTION + + xeno.animation_attack_on(src) + playsound(src, 'sound/effects/metalhit.ogg', 25, 1) + xeno.visible_message(SPAN_DANGER("[xeno] [xeno.slashes_verb] [src], stopping its overload process!"), \ + SPAN_DANGER("You [xeno.slash_verb] [src], stopping its overload process!"), null, 5, CHAT_TYPE_XENO_COMBAT) + set_overloading(FALSE) + return XENO_ATTACK_ACTION /obj/structure/machinery/power/fusion_engine/power_change() - return + . = ..() + if(overloaded) + set_overloading(FALSE) + visible_message("[icon2html(src, viewers(src))] [src]'s overload suddenly ceases as primary power is lost.") /obj/structure/machinery/power/fusion_engine/process() if(!is_on || buildstate || !anchored || !powernet || !fusion_cell) //Default logic checking @@ -60,9 +76,18 @@ stop_processing() return FALSE - if(!check_failure()) + if(overloaded && prob(1)) // up to 18 generators at 1% every 3.5 seconds means that every ~21 seconds or so, one generator will make noise assuming all are overloaded + switch(rand(1, 2)) + if(1) + visible_message("[icon2html(src, viewers(src))] [SPAN_NOTICE("[src] loudly hums.")]") + playsound(src, 'sound/machines/resource_node/node_idle.ogg', 60, TRUE) + if(2) + visible_message("[icon2html(src, viewers(src))] [SPAN_NOTICE("[src] makes a worrying hiss.")]") + playsound(src, 'sound/machines/hiss.ogg', 60, TRUE) - if(power_gen_percent < 100) power_gen_percent++ + if(!check_failure()) + if(power_gen_percent < 100) + power_gen_percent++ switch(power_gen_percent) //Flavor text! if(10) @@ -96,6 +121,10 @@ to_chat(user, SPAN_NOTICE("Use a wrench to repair it.")) return FALSE if(is_on) + if(overloaded) + to_chat(user, SPAN_WARNING("You can't shut off [src] while it's overloaded!")) + return + visible_message("[icon2html(src, viewers(src))] [SPAN_WARNING("[src] beeps softly and the humming stops as [usr] shuts off the generator.")]") is_on = 0 power_gen_percent = 0 @@ -208,11 +237,18 @@ if(buildstate) to_chat(user, SPAN_WARNING("You must repair the generator before working with its fuel cell.")) return + + if(overloaded) + to_chat(user, SPAN_WARNING("You must restore the safeties on the generator before working with its fuel cell.")) + return + if(is_on) to_chat(user, SPAN_WARNING("You must turn off the generator before working with its fuel cell.")) return + if(!fusion_cell) to_chat(user, SPAN_WARNING("There is no cell to remove.")) + else if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) user.visible_message(SPAN_WARNING("[user] fumbles around figuring out [src]'s fuel receptacle."), @@ -232,23 +268,73 @@ fusion_cell = null update_icon() return TRUE + + else if(HAS_TRAIT(O, TRAIT_TOOL_MULTITOOL)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + to_chat(user, SPAN_WARNING("You have no idea what to do with [src].")) + return + + if(!overloaded) + if(!SShijack.sd_unlocked) + to_chat(user, SPAN_WARNING("You consider overloading [src]'s safeties, but you decide against it.")) + return + + if(inoperable()) + to_chat(user, SPAN_WARNING("[src] needs to be working and have external power in order to overload it!")) + return + + to_chat(user, SPAN_WARNING("You start overloading the safeties on [src]...")) + if(!do_after(user, 1.5 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) + return + + if(inoperable()) + return + + to_chat(user, SPAN_WARNING("You finish overloading the safeties on [src].")) + set_overloading(TRUE) + log_game("[key_name(user)] has overloaded a generator.") + + else + to_chat(user, SPAN_WARNING("You start restoring the safeties on [src]...")) + if(!do_after(user, 1.5 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) + return + + if(inoperable()) + return + + to_chat(user, SPAN_WARNING("You finish restoring the safeties on [src].")) + log_game("[key_name(user)] has restored the safeties of a generator.") + set_overloading(FALSE) + + return TRUE + else return ..() /obj/structure/machinery/power/fusion_engine/get_examine_text(mob/user) . = ..() - if(ishuman(user)) + if(isxeno(user)) + if(overloaded) + . += SPAN_INFO("You could attack this to stop the overload process.") + + else if(ishuman(user)) if(buildstate) . += SPAN_INFO("It's broken.") switch(buildstate) if(1) - . += SPAN_INFO("Use a blowtorch, then wirecutters, then wrench to repair it.") + . += SPAN_INFO("Use a blowtorch, then wirecutters, then wrench to repair it.") if(2) - . += SPAN_INFO("Use a wirecutters, then wrench to repair it.") + . += SPAN_INFO("Use a wirecutters, then wrench to repair it.") if(3) - . += SPAN_INFO("Use a wrench to repair it.") + . += SPAN_INFO("Use a wrench to repair it.") return FALSE + if(SShijack.sd_unlocked && skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!overloaded) + . += SPAN_INFO("You could overload this with a multitool.") + else + . += SPAN_INFO("You could restore its safeties with a multitool.") + if(!is_on) . += SPAN_INFO("It looks offline.") else @@ -274,18 +360,21 @@ switch(buildstate) if(0) if(fusion_cell) - var/pstatus = is_on ? "on" : "off" - switch(fusion_cell.get_fuel_percent()) - if(0 to 10) - icon_state = "[pstatus]-10" - if(10 to 25) - icon_state = "[pstatus]-25" - if(25 to 50) - icon_state = "[pstatus]-50" - if(50 to 75) - icon_state = "[pstatus]-75" - if(75 to INFINITY) - icon_state = "[pstatus]-100" + if(overloaded) + icon_state = "overloaded" + else + var/pstatus = is_on ? "on" : "off" + switch(fusion_cell.get_fuel_percent()) + if(0 to 10) + icon_state = "[pstatus]-10" + if(10 to 25) + icon_state = "[pstatus]-25" + if(25 to 50) + icon_state = "[pstatus]-50" + if(50 to 75) + icon_state = "[pstatus]-75" + if(75 to INFINITY) + icon_state = "[pstatus]-100" else icon_state = "off" @@ -317,9 +406,13 @@ else return 0 +/obj/structure/machinery/power/fusion_engine/proc/set_overloading(new_overloading) + if(overloaded == new_overloading) + return - - + overloaded = new_overloading + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_GENERATOR_SET_OVERLOADING, overloaded) + update_icon() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index f4ad7a63ba77..4ce295aa9965 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -105,7 +105,7 @@ Class Procs: var/list/component_parts //list of all the parts used to build it, if made from certain kinds of frames. var/manual = 0 layer = OBJ_LAYER - var/machine_processing = 0 // whether the machine is busy and requires process() calls in scheduler. + var/machine_processing = 0 // whether the machine is busy and requires process() calls in scheduler. // Please replace this by DF_ISPROCESSING in another refactor --fira throwpass = 1 projectile_coverage = PROJECTILE_COVERAGE_MEDIUM var/power_machine = FALSE //Whether the machine should process on power, or normal processor diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm deleted file mode 100644 index 591cec1f5baa..000000000000 --- a/code/game/machinery/magnet.dm +++ /dev/null @@ -1,421 +0,0 @@ -// Magnetic attractor, creates variable magnetic fields and attraction. -// Can also be used to emit electron/proton beams to create a center of magnetism on another tile - -// tl;dr: it's magnets lol -// This was created for firing ranges, but I suppose this could have other applications - Doohl - -/obj/structure/machinery/magnetic_module - - icon = 'icons/obj/objects.dmi' - icon_state = "floor_magnet-f" - name = "Electromagnetic Generator" - desc = "A device that uses station power to create points of magnetic energy." - level = 1 // underfloor - layer = UNDERFLOOR_OBJ_LAYER - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 50 - - var/freq = 1449 // radio frequency - var/electricity_level = 1 // intensity of the magnetic pull - var/magnetic_field = 1 // the range of magnetic attraction - var/code = 0 // frequency code, they should be different unless you have a group of magnets working together or something - var/turf/center // the center of magnetic attraction - var/on = 0 - var/pulling = 0 - - // x, y modifiers to the center turf; (0, 0) is centered on the magnet, whereas (1, -1) is one tile right, one tile down - var/center_x = 0 - var/center_y = 0 - var/max_dist = 20 // absolute value of center_x,y cannot exceed this integer - -/obj/structure/machinery/magnetic_module/Initialize(mapload, ...) - . = ..() - - var/turf/T = loc - hide(T.intact_tile) - center = T - - SSradio.add_object(src, freq, RADIO_MAGNETS) - - INVOKE_ASYNC(src, PROC_REF(magnetic_process)) - -/obj/structure/machinery/magnetic_module/Destroy() - center = null - SSradio.remove_object(src, freq) - . = ..() - - - // update the invisibility and icon -/obj/structure/machinery/magnetic_module/hide(intact) - invisibility = intact ? 101 : 0 - updateicon() - - // update the icon_state -/obj/structure/machinery/magnetic_module/proc/updateicon() - var/state="floor_magnet" - var/onstate="" - if(!on) - onstate="0" - - if(invisibility) - icon_state = "[state][onstate]-f" // if invisible, set icon to faded version - // in case of being revealed by T-scanner - else - icon_state = "[state][onstate]" - -/obj/structure/machinery/magnetic_module/receive_signal(datum/signal/signal) - - var/command = signal.data["command"] - var/modifier = signal.data["modifier"] - var/signal_code = signal.data["code"] - if(command && (signal_code == code)) - - Cmd(command, modifier) - - - -/obj/structure/machinery/magnetic_module/proc/Cmd(command, modifier) - - if(command) - switch(command) - if("set-electriclevel") - if(modifier) electricity_level = modifier - if("set-magneticfield") - if(modifier) magnetic_field = modifier - - if("add-elec") - electricity_level++ - if(electricity_level > 12) - electricity_level = 12 - if("sub-elec") - electricity_level-- - if(electricity_level <= 0) - electricity_level = 1 - if("add-mag") - magnetic_field++ - if(magnetic_field > 4) - magnetic_field = 4 - if("sub-mag") - magnetic_field-- - if(magnetic_field <= 0) - magnetic_field = 1 - - if("set-x") - if(modifier) center_x = modifier - if("set-y") - if(modifier) center_y = modifier - - if("N") // NORTH - center_y++ - if("S") // SOUTH - center_y-- - if("E") // EAST - center_x++ - if("W") // WEST - center_x-- - if("C") // CENTER - center_x = 0 - center_y = 0 - if("R") // RANDOM - center_x = rand(-max_dist, max_dist) - center_y = rand(-max_dist, max_dist) - - if("set-code") - if(modifier) code = modifier - if("toggle-power") - on = !on - - if(on) - INVOKE_ASYNC(src, PROC_REF(magnetic_process)) - - -/obj/structure/machinery/magnetic_module/process() - if(stat & NOPOWER) - on = 0 - - // Sanity checks: - if(electricity_level <= 0) - electricity_level = 1 - if(magnetic_field <= 0) - magnetic_field = 1 - - - // Limitations: - if(abs(center_x) > max_dist) - center_x = max_dist - if(abs(center_y) > max_dist) - center_y = max_dist - if(magnetic_field > 4) - magnetic_field = 4 - if(electricity_level > 12) - electricity_level = 12 - - // Update power usage: - if(on) - use_power = USE_POWER_ACTIVE - active_power_usage = electricity_level*15 - else - use_power = USE_POWER_NONE - - - // Overload conditions: - /* // Eeeehhh kinda stupid - if(on) - if(electricity_level > 11) - if(prob(electricity_level)) - explosion(loc, 0, 1, 2, 3) // ooo dat shit EXPLODES son - spawn(2) - qdel(src) - */ - - updateicon() - - -/obj/structure/machinery/magnetic_module/proc/magnetic_process() // proc that actually does the pulling - if(pulling) return - while(on) - - pulling = 1 - center = locate(x+center_x, y+center_y, z) - if(center) - for(var/obj/M in orange(magnetic_field, center)) - if(!M.anchored && (M.flags_atom & CONDUCT)) - step_towards(M, center) - - for(var/mob/living/silicon/S in orange(magnetic_field, center)) - if(isAI(S)) continue - step_towards(S, center) - - use_power(electricity_level * 5) - sleep(13 - electricity_level) - - pulling = 0 - -/obj/structure/machinery/magnetic_controller - name = "Magnetic Control Console" - icon = 'icons/obj/structures/machinery/airlock_machines.dmi' // uses an airlock machine icon, THINK GREEN HELP THE ENVIRONMENT - RECYCLING! - icon_state = "airlock_control_standby" - density = TRUE - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 45 - var/frequency = 1449 - var/code = 0 - var/list/magnets = list() - var/title = "Magnetic Control Console" - var/autolink = 0 // if set to 1, can't probe for other magnets! - - var/pathpos = 1 // position in the path - var/path = "NULL" // text path of the magnet - var/speed = 1 // lowest = 1, highest = 10 - var/list/rpath = list() // real path of the magnet, used in iterator - - var/moving = 0 // 1 if scheduled to loop - var/looping = 0 // 1 if looping - - var/datum/radio_frequency/radio_connection - -/obj/structure/machinery/magnetic_controller/Initialize(mapload, ...) - . = ..() - if(autolink) - for(var/obj/structure/machinery/magnetic_module/M in machines) - if(M.freq == frequency && M.code == code) - magnets.Add(M) - - SSradio.add_object(src, frequency, RADIO_MAGNETS) - - if(path) // check for default path - filter_path() // renders rpath - -/obj/structure/machinery/magnetic_controller/Destroy() - QDEL_NULL_LIST(magnets) - SSradio.remove_object(src, frequency) - . = ..() - - -/obj/structure/machinery/magnetic_controller/process() - if(magnets.len == 0 && autolink) - for(var/obj/structure/machinery/magnetic_module/M in machines) - if(M.freq == frequency && M.code == code) - magnets.Add(M) - -/obj/structure/machinery/magnetic_controller/attack_remote(mob/user as mob) - return src.attack_hand(user) - -/obj/structure/machinery/magnetic_controller/attack_hand(mob/user as mob) - if(inoperable()) - return - user.set_interaction(src) - var/dat = "Magnetic Control Console

" - if(!autolink) - dat += {" - Frequency: [frequency]
- Code: [code]
- Probe Generators
- "} - - if(magnets.len >= 1) - - dat += "Magnets confirmed:
" - var/i = 0 - for(var/obj/structure/machinery/magnetic_module/M in magnets) - i++ - dat += "     < \[[i]\] ([M.on ? "On":"Off"])|Electricity level: - [M.electricity_level] +; Magnetic field: - [M.magnetic_field] +
" - - dat += "
Speed: - [speed] +
" - dat += "Path: {[path]}
" - dat += "Moving: [moving ? "Enabled":"Disabled"]" - - - show_browser(user, dat, name, "magnet", "size=400x500") - -/obj/structure/machinery/magnetic_controller/Topic(href, href_list) - . = ..() - if(.) - return - if(inoperable()) - return - usr.set_interaction(src) - src.add_fingerprint(usr) - - if(href_list["radio-op"]) - - // Prepare signal beforehand, because this is a radio operation - var/datum/signal/signal = new - signal.transmission_method = 1 // radio transmission - signal.source = src - signal.frequency = frequency - signal.data["code"] = code - - // Apply any necessary commands - switch(href_list["radio-op"]) - if("togglepower") - signal.data["command"] = "toggle-power" - - if("minuselec") - signal.data["command"] = "sub-elec" - if("pluselec") - signal.data["command"] = "add-elec" - - if("minusmag") - signal.data["command"] = "sub-mag" - if("plusmag") - signal.data["command"] = "add-mag" - - - // Broadcast the signal - - radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS) - - addtimer(CALLBACK(src, PROC_REF(updateUsrDialog)), 1) - - if(href_list["operation"]) - switch(href_list["operation"]) - if("plusspeed") - speed ++ - if(speed > 10) - speed = 10 - if("minusspeed") - speed -- - if(speed <= 0) - speed = 1 - if("setpath") - var/newpath = copytext(sanitize(input(usr, "Please define a new path!",,path) as text|null),1,MAX_MESSAGE_LEN) - if(newpath && newpath != "") - moving = 0 // stop moving - path = newpath - pathpos = 1 // reset position - filter_path() // renders rpath - - if("togglemoving") - moving = !moving - if(moving) - INVOKE_ASYNC(src, PROC_REF(MagnetMove)) - - - updateUsrDialog() - -/obj/structure/machinery/magnetic_controller/proc/MagnetMove() - if(looping) return - - while(moving && rpath.len >= 1) - - if(inoperable()) - break - - looping = 1 - - // Prepare the radio signal - var/datum/signal/signal = new - signal.transmission_method = 1 // radio transmission - signal.source = src - signal.frequency = frequency - signal.data["code"] = code - - if(pathpos > rpath.len) // if the position is greater than the length, we just loop through the list! - pathpos = 1 - - var/nextmove = uppertext(rpath[pathpos]) // makes it un-case-sensitive - - if(!(nextmove in list("N","S","E","W","C","R"))) - // N, S, E, W are directional - // C is center - // R is random (in magnetic field's bounds) - qdel(signal) - break // break the loop if the character located is invalid - - signal.data["command"] = nextmove - - - pathpos++ // increase iterator - - // Broadcast the signal - spawn() - radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS) - - if(speed == 10) - sleep(1) - else - sleep(12-speed) - - looping = 0 - - -/obj/structure/machinery/magnetic_controller/proc/filter_path() - // Generates the rpath variable using the path string, think of this as "string2list" - // Doesn't use params2list() because of the akward way it stacks entities - rpath = list() // clear rpath - var/maximum_character = min( 50, length(path) ) // chooses the maximum length of the iterator. 50 max length - - for(var/i=1, i<=maximum_character, i++) // iterates through all characters in path - - var/nextchar = copytext(path, i, i+1) // find next character - - if(!(nextchar in list(";", "&", "*", " "))) // if char is a separator, ignore - rpath += copytext(path, i, i+1) // else, add to list - - // there doesn't HAVE to be separators but it makes paths syntatically visible - - - - - - - - - - - - - - - - - - - - - - - diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index d1e2fecce20f..f1b0081e3a39 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -1,5 +1,4 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - +// Legacy SS13 machinery turned into a prop /obj/structure/machinery/mass_driver name = "mass driver" desc = "Shoots things into space." @@ -9,32 +8,3 @@ use_power = USE_POWER_IDLE idle_power_usage = 2 active_power_usage = 50 - - var/power = 1 - var/code = 1 - var/id = 1 - var/drive_range = 50 //this is mostly irrelevant since current mass drivers throw into space, but you could make a lower-range mass driver for interstation transport or something I guess. - - -/obj/structure/machinery/mass_driver/proc/drive(amount) - if(inoperable()) - return - use_power(500) - var/O_limit - var/atom/target = get_edge_target_turf(src, dir) - for(var/atom/movable/O in loc) - if(!O.anchored) - if(O_limit >= 20) - for(var/mob/M in hearers(src, null)) - to_chat(M, SPAN_NOTICE(" The mass driver lets out a screech, it mustn't be able to handle any more items.")) - break - use_power(500) - INVOKE_ASYNC(O, TYPE_PROC_REF(/atom/movable, throw_atom), target, drive_range * power, 100/power) - flick("mass_driver1", src) - return - -/obj/structure/machinery/mass_driver/emp_act(severity) - if(inoperable()) - return - drive() - ..(severity) diff --git a/code/game/machinery/nuclearbomb.dm b/code/game/machinery/nuclearbomb.dm index 743f53e4f03b..28ebbecc7552 100644 --- a/code/game/machinery/nuclearbomb.dm +++ b/code/game/machinery/nuclearbomb.dm @@ -394,7 +394,38 @@ var/bomb_set = FALSE update_icon() safety = TRUE - EvacuationAuthority.trigger_self_destruct(list(z), src, FALSE, NUKE_EXPLOSION_GROUND_FINISHED, FALSE, end_round) + playsound(src, 'sound/machines/Alarm.ogg', 75, 0, 30) + world << pick('sound/theme/nuclear_detonation1.ogg','sound/theme/nuclear_detonation2.ogg') + + var/list/alive_mobs = list() //Everyone who will be destroyed on the zlevel(s). + var/list/dead_mobs = list() //Everyone who only needs to see the cinematic. + for(var/mob/current_mob as anything in GLOB.mob_list) + if(!current_mob?.loc) + continue + if(current_mob.stat == DEAD) + dead_mobs |= current_mob + continue + var/turf/current_turf = get_turf(current_mob) + if(z == current_turf.z) + alive_mobs |= current_mob + shake_camera(current_mob, 110, 4) + + for(var/mob/current_mob in alive_mobs) + if(current_mob && current_mob.loc) + var/turf/current_mob_turf = get_turf(current_mob) + if(z == current_mob_turf.z) + if(istype(current_mob.loc, /obj/structure/closet/secure_closet/freezer/fridge)) + continue + current_mob.death(create_cause_data("nuclear explosion")) + + for(var/mob/current_mob in (alive_mobs + dead_mobs)) + if(current_mob && current_mob.loc) + var/turf/current_mob_turf = get_turf(current_mob) + if(z == current_mob_turf.z) + if(istype(current_mob.loc, /obj/structure/closet/secure_closet/freezer/fridge)) + continue + for(var/obj/item/alien_embryo/embryo in current_mob) + qdel(embryo) sleep(100) cell_explosion(loc, 500, 150, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, create_cause_data(initial(name))) diff --git a/code/game/machinery/sentry_holder.dm b/code/game/machinery/sentry_holder.dm index 61f87251282d..fe676e9103d2 100644 --- a/code/game/machinery/sentry_holder.dm +++ b/code/game/machinery/sentry_holder.dm @@ -10,13 +10,12 @@ idle_power_usage = 1000 power_channel = 1 use_power = USE_POWER_IDLE - machine_processing = 1 var/deployment_cooldown var/turret_path = /obj/structure/machinery/defenses/sentry/premade/deployable // Path of the turret used var/obj/structure/machinery/defenses/sentry/premade/deployable/deployed_turret var/ox = 0 var/oy = 0 - var/ind = FALSE + var/require_red_alert = FALSE /obj/structure/machinery/sentry_holder/Initialize() . = ..() @@ -36,34 +35,38 @@ . += "It's offline." /obj/structure/machinery/sentry_holder/attack_hand(mob/user) - if(deployed_turret) - if(deployment_cooldown > world.time) - to_chat(user, SPAN_WARNING("[src] is busy.")) - return //prevents spamming deployment/undeployment - if(deployed_turret.loc == src) //not deployed - if(stat & NOPOWER) - to_chat(user, SPAN_WARNING("[src] is non-functional.")) - else - to_chat(user, SPAN_NOTICE("You deploy [src].")) - deploy_sentry() - else - to_chat(user, SPAN_NOTICE("You retract [src].")) - undeploy_sentry() - else + if(!deployed_turret) to_chat(user, SPAN_WARNING("[src] is unresponsive.")) + return -/obj/structure/machinery/sentry_holder/process() - if(stat & NOPOWER) - if(deployed_turret) - undeploy_sentry() - ind = FALSE - else - icon_state = "sentry_system_destroyed" - else - update_use_power(USE_POWER_IDLE) - if(!ind) - deploy_sentry() - ind = TRUE + if(deployment_cooldown > world.time) + to_chat(user, SPAN_WARNING("[src] is busy.")) + return + + if(deployed_turret.loc == src) //not deployed + if(stat & NOPOWER) + to_chat(user, SPAN_WARNING("[src] is non-functional.")) + return + + if(require_red_alert && (seclevel2num(get_security_level()) < SEC_LEVEL_RED)) + to_chat(user, SPAN_WARNING("[src] can only be activated in emergencies.")) + return + + to_chat(user, SPAN_NOTICE("You deploy [src].")) + deploy_sentry() + return + + to_chat(user, SPAN_NOTICE("You retract [src].")) + undeploy_sentry() + return + +/obj/structure/machinery/sentry_holder/update_use_power(new_use_power) + ..() + + if(!(stat & NOPOWER)) + return + + undeploy_sentry() /obj/structure/machinery/sentry_holder/proc/deploy_sentry() if(!deployed_turret) @@ -111,3 +114,6 @@ desc = "A box that deploys a sentry turret for protection of the residents in the area." turret_path = /obj/structure/machinery/defenses/sentry/premade/deployable/colony +/obj/structure/machinery/sentry_holder/almayer + turret_path = /obj/structure/machinery/defenses/sentry/premade/deployable/almayer + require_red_alert = TRUE diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 6c6d2bda8b07..c56f8da36150 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -78,7 +78,7 @@ return 1 if(STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME) //emergency shuttle timer message1 = "EVAC" - message2 = EvacuationAuthority.get_status_panel_eta() + message2 = SShijack.get_evac_eta() if(message2) if(length(message2) > CHARS_PER_LINE) message2 = "Error" update_display(message1, message2) @@ -163,6 +163,15 @@ if(maptext) maptext = "" +/obj/structure/machinery/status_display/proc/set_sec_level_picture() + switch(security_level) + if(SEC_LEVEL_GREEN) + set_picture("default") + if(SEC_LEVEL_BLUE) + set_picture("bluealert") + if(SEC_LEVEL_RED, SEC_LEVEL_DELTA) + set_picture("redalert") + /obj/structure/machinery/ai_status_display icon = 'icons/obj/structures/machinery/status_display.dmi' icon_state = "frame" diff --git a/code/game/machinery/vending/vending_types.dm b/code/game/machinery/vending/vending_types.dm index a61934324491..c109db25b3a9 100644 --- a/code/game/machinery/vending/vending_types.dm +++ b/code/game/machinery/vending/vending_types.dm @@ -411,6 +411,7 @@ /obj/item/device/camera = 5, /obj/item/device/camera_film = 10, /obj/item/notepad = 5, + /obj/item/device/toner = 5, ) contraband = list(/obj/item/toy/sword = 2) @@ -431,5 +432,6 @@ /obj/item/toy/deck = 20, /obj/item/toy/deck/uno = 15, /obj/item/device/camera = 30, + /obj/item/device/toner = 15, ) product_type = VENDOR_PRODUCT_TYPE_RECREATIONAL diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm index 69399cfb1eb5..f6b99887bbbb 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm @@ -117,6 +117,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list( GLOBAL_LIST_INIT(cm_vending_clothing_medic, list( list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null), list("Standard Marine Apparel", 0, list(/obj/item/clothing/under/marine/medic, /obj/item/clothing/shoes/marine/knife, /obj/item/clothing/gloves/marine, /obj/item/device/radio/headset/almayer/marine, /obj/item/clothing/head/helmet/marine/medic), MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY), + list("Combat Sterile Gloves", 0, /obj/item/clothing/gloves/marine/medical, MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY), list("Map", 0, /obj/item/map/current_map, MARINE_CAN_BUY_KIT, VENDOR_ITEM_MANDATORY), diff --git a/code/game/objects/effects/effect_system/smoke.dm b/code/game/objects/effects/effect_system/smoke.dm index 78aa01b5dacb..b80f53b14d2e 100644 --- a/code/game/objects/effects/effect_system/smoke.dm +++ b/code/game/objects/effects/effect_system/smoke.dm @@ -31,13 +31,13 @@ amount = oldamount - 1 cause_data = new_cause_data time_to_live += rand(-1,1) - active_smoke_effects += src + START_PROCESSING(SSeffects, src) /obj/effect/particle_effect/smoke/Destroy() . = ..() if(opacity) set_opacity(0) - active_smoke_effects -= src + STOP_PROCESSING(SSeffects, src) cause_data = null /obj/effect/particle_effect/smoke/initialize_pass_flags(datum/pass_flags_container/PF) diff --git a/code/game/objects/effects/landmarks/survivor_spawner.dm b/code/game/objects/effects/landmarks/survivor_spawner.dm index b22fbafd23e9..22d738e3c3bc 100644 --- a/code/game/objects/effects/landmarks/survivor_spawner.dm +++ b/code/game/objects/effects/landmarks/survivor_spawner.dm @@ -8,6 +8,8 @@ var/roundstart_damage_min = 0 var/roundstart_damage_max = 0 var/roundstart_damage_times = 1 + /// Whether or not the spawner is for an inherently hostile survivor subtype. + var/hostile = FALSE var/spawn_priority = LOWEST_SPAWN_PRIORITY @@ -27,6 +29,7 @@ return TRUE /obj/effect/landmark/survivor_spawner/lv624_crashed_clf + hostile = TRUE equipment = /datum/equipment_preset/survivor/clf synth_equipment = /datum/equipment_preset/clf/synth intro_text = list("

You are a survivor of a crash landing!

",\ @@ -40,6 +43,7 @@ spawn_priority = SPAWN_PRIORITY_HIGH /obj/effect/landmark/survivor_spawner/lv624_crashed_clf_engineer + hostile = TRUE equipment = /datum/equipment_preset/clf/engineer synth_equipment = /datum/equipment_preset/clf/synth intro_text = list("

You are a survivor of a crash landing!

",\ @@ -53,6 +57,7 @@ spawn_priority = SPAWN_PRIORITY_VERY_HIGH /obj/effect/landmark/survivor_spawner/lv624_crashed_clf_medic + hostile = TRUE equipment = /datum/equipment_preset/clf/medic synth_equipment = /datum/equipment_preset/clf/synth intro_text = list("

You are a survivor of a crash landing!

",\ diff --git a/code/game/objects/items/circuitboards/computer.dm b/code/game/objects/items/circuitboards/computer.dm index 7276e8a7f051..122136f6f2fa 100644 --- a/code/game/objects/items/circuitboards/computer.dm +++ b/code/game/objects/items/circuitboards/computer.dm @@ -96,9 +96,9 @@ /obj/item/circuitboard/computer/atmos_alert name = "Circuit board (Atmospheric Alert)" build_path = /obj/structure/machinery/computer/atmos_alert -/obj/item/circuitboard/computer/pod - name = "Circuit board (Massdriver control)" - build_path = /obj/structure/machinery/computer/pod +/obj/item/circuitboard/computer/pod/old + name = "Circuit board (DoorMex)" + build_path = /obj/structure/machinery/computer/pod/old /obj/item/circuitboard/computer/robotics name = "Circuit board (Robotics Control)" build_path = /obj/structure/machinery/computer/robotics @@ -117,15 +117,6 @@ /obj/item/circuitboard/computer/powermonitor name = "Circuit board (Power Monitor)" build_path = /obj/structure/machinery/power/monitor -/obj/item/circuitboard/computer/olddoor - name = "Circuit board (DoorMex)" - build_path = /obj/structure/machinery/computer/pod/old -/obj/item/circuitboard/computer/syndicatedoor - name = "Circuit board (ProComp Executive)" - build_path = /obj/structure/machinery/computer/pod/old/syndicate -/obj/item/circuitboard/computer/swfdoor - name = "Circuit board (Magix)" - build_path = /obj/structure/machinery/computer/pod/old/swf /obj/item/circuitboard/computer/prisoner name = "Circuit board (Prisoner Management)" build_path = /obj/structure/machinery/computer/prisoner diff --git a/code/game/objects/items/devices/cictablet.dm b/code/game/objects/items/devices/cictablet.dm index f355b39c468a..6abd70980136 100644 --- a/code/game/objects/items/devices/cictablet.dm +++ b/code/game/objects/items/devices/cictablet.dm @@ -61,7 +61,7 @@ var/list/data = list() data["alert_level"] = security_level - data["evac_status"] = EvacuationAuthority.evac_status + data["evac_status"] = SShijack.evac_status data["endtime"] = announcement_cooldown data["distresstime"] = distress_cooldown data["worldtime"] = world.time @@ -135,11 +135,11 @@ to_chat(usr, SPAN_WARNING("The ship must be under red alert in order to enact evacuation procedures.")) return FALSE - if(EvacuationAuthority.flags_scuttle & FLAGS_EVACUATION_DENY) + if(SShijack.evac_admin_denied) to_chat(usr, SPAN_WARNING("The USCM has placed a lock on deploying the evacuation pods.")) return FALSE - if(!EvacuationAuthority.initiate_evacuation()) + if(!SShijack.initiate_evacuation()) to_chat(usr, SPAN_WARNING("You are unable to initiate an evacuation procedure right now!")) return FALSE diff --git a/code/game/objects/items/reagent_containers/reagent_container.dm b/code/game/objects/items/reagent_containers/reagent_container.dm index e0561d5a7e3d..327f6ba1ce1c 100644 --- a/code/game/objects/items/reagent_containers/reagent_container.dm +++ b/code/game/objects/items/reagent_containers/reagent_container.dm @@ -67,12 +67,6 @@ if (N) R.amount_per_transfer_from_this = N -/obj/item/reagent_container/Initialize() - . = ..() - if (!possible_transfer_amounts) - verbs -= /obj/item/reagent_container/verb/set_APTFT //which objects actually uses it? - create_reagents(volume) - /obj/item/reagent_container/Destroy() possible_transfer_amounts = null return ..() diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index d85e615bc1c8..3912e2d64165 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -182,6 +182,11 @@ Also change the icon to reflect the amount of sheets, if possible.*/ to_chat(usr, SPAN_WARNING("The [R.title] cannot be built here!")) //might cause some friendly fire regarding other items like barbed wire, shouldn't be a problem? return + var/obj/structure/tunnel/tunnel = locate(/obj/structure/tunnel) in usr.loc + if(tunnel) + to_chat(usr, SPAN_WARNING("The [R.title] cannot be constructed on a tunnel!")) + return + if((R.flags & RESULT_REQUIRES_SNOW) && !(istype(usr.loc, /turf/open/snow) || istype(usr.loc, /turf/open/auto_turf/snow))) to_chat(usr, SPAN_WARNING("The [R.title] must be built on snow!")) return diff --git a/code/game/objects/items/storage/large_holster.dm b/code/game/objects/items/storage/large_holster.dm index 1d37a542bad4..27026165fc31 100644 --- a/code/game/objects/items/storage/large_holster.dm +++ b/code/game/objects/items/storage/large_holster.dm @@ -249,9 +249,13 @@ if(!ishuman(user) || user.is_mob_incapacitated()) return FALSE - var/obj/item/weapon/gun/flamer/M240T/F = user.get_active_hand() - if(!istype(F)) - to_chat(usr, "You must be holding the M240-T incinerator unit to use [src]") + if(user.back != src) + to_chat(user, "The [src] must be equipped before you can switch types") + return + + var/obj/item/weapon/gun/flamer/M240T/flamer = user.get_active_hand() + if(!istype(flamer)) + to_chat(user, "You must be holding the M240-T incinerator unit to use [src]") return if(!active_fuel) @@ -267,14 +271,13 @@ else active_fuel = fuelB - for(var/X in actions) - var/datum/action/A = X - A.update_button_icon() + for(var/datum/action/action_added as anything in actions) + action_added.update_button_icon() to_chat(user, "You switch the fuel tank to [active_fuel.caliber]") playsound(src, 'sound/machines/click.ogg', 25, TRUE) - F.current_mag = active_fuel - F.update_icon() + flamer.current_mag = active_fuel + flamer.update_icon() return TRUE diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index e719359ab439..6cd6a5cd0300 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -173,6 +173,14 @@ return do_reinforced_wall(W, user) if(STATE_DISPLACED) if(HAS_TRAIT(W, TRAIT_TOOL_CROWBAR)) + var/turf/open/floor = loc + if(!floor.allow_construction) + to_chat(user, SPAN_WARNING("The girder must be secured on a proper surface!")) + return + var/obj/structure/tunnel/tunnel = locate(/obj/structure/tunnel) in loc + if(tunnel) + to_chat(user, SPAN_WARNING("The girder cannot be secured on a tunnel!")) + return playsound(loc, 'sound/items/Crowbar.ogg', 25, 1) to_chat(user, SPAN_NOTICE("Now securing the girder...")) if(!do_after(user, 40 * user.get_skill_duration_multiplier(SKILL_CONSTRUCTION), INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index ec277929facb..adabf0c54141 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -570,7 +570,7 @@ /obj/structure/sign/ROsign name = "\improper USCM Requisitions Office Guidelines" - desc = " 1. You are not entitled to service or equipment. Attachments are a privilege, not a right.\n 2. You must be fully dressed to obtain service. Cyrosleep underwear is non-permissible.\n 3. The Requsitions Officer has the final say and the right to decline service. Only the Acting Commanding Officer may override their decisions.\n 4. Please treat your Requsitions staff with respect. They work hard." + desc = " 1. You are not entitled to service or equipment. Attachments are a privilege, not a right.\n 2. You must be fully dressed to obtain service. Cryosleep underwear is non-permissible.\n 3. The Quartermaster has the final say and the right to decline service. Only the Acting Commanding Officer may override their decisions.\n 4. Please treat your Requsitions staff with respect. They work hard." icon_state = "roplaque" /obj/structure/sign/prop1 diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index a4781e1a6609..93eb45c3b79c 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -185,6 +185,7 @@ name = "cave" icon = 'icons/turf/floors/bigred.dmi' icon_state = "mars_cave_1" + is_groundmap_turf = TRUE /turf/open/mars_cave/Initialize(mapload, ...) @@ -283,6 +284,7 @@ name = "ground dirt" icon = 'icons/turf/ground_map.dmi' icon_state = "desert" + is_groundmap_turf = TRUE /turf/open/gm/attackby(obj/item/I, mob/user) @@ -646,6 +648,7 @@ baseturfs = /turf/open/gm/riverdeep supports_surgery = FALSE minimap_color = MINIMAP_WATER + is_groundmap_turf = FALSE // Not real ground /turf/open/gm/riverdeep/Initialize(mapload, ...) @@ -724,6 +727,7 @@ allow_construction = FALSE var/bushes_spawn = 1 var/plants_spawn = 1 + is_groundmap_turf = TRUE name = "wet grass" desc = "Thick, long, wet grass." icon = 'icons/turf/floors/jungle.dmi' diff --git a/code/game/world.dm b/code/game/world.dm index fce40ca468ae..f5388ed6fd52 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -71,8 +71,6 @@ var/list/reboot_sfx = file2list("config/reboot_sfx.txt") RoleAuthority = new /datum/authority/branch/role() to_world(SPAN_DANGER("\b Job setup complete")) - if(!EvacuationAuthority) EvacuationAuthority = new - initiate_minimap_icons() change_tick_lag(CONFIG_GET(number/ticklag)) @@ -91,8 +89,8 @@ var/list/reboot_sfx = file2list("config/reboot_sfx.txt") update_status() //Scramble the coords obsfucator - obfs_x = rand(-500, 500) //A number between -100 and 100 - obfs_y = rand(-500, 500) //A number between -100 and 100 + GLOB.obfs_x = rand(-500, 500) //A number between -100 and 100 + GLOB.obfs_y = rand(-500, 500) //A number between -100 and 100 spawn(3000) //so we aren't adding to the round-start lag if(CONFIG_GET(flag/ToRban)) @@ -174,11 +172,6 @@ var/world_topic_spam_protect_time = world.timeofday response["response"] = "Payload too large" return json_encode(response) - if(SSfail_to_topic?.IsRateLimited(addr)) - response["statuscode"] = 429 - response["response"] = "Rate limited" - return json_encode(response) - var/logging = CONFIG_GET(flag/log_world_topic) var/topic_decoded = rustg_url_decode(T) if(!rustg_json_is_valid(topic_decoded)) diff --git a/code/global.dm b/code/global.dm index bdde529a9af8..e329cbdd00d5 100644 --- a/code/global.dm +++ b/code/global.dm @@ -153,14 +153,6 @@ var/list/nato_phonetic_alphabet = list("Alpha", "Bravo", "Charlie", "Delta", "Ec var/distress_cancel = 0 var/destroy_cancel = 0 -//Coordinate obsfucator -//Used by the rangefinders and linked systems to prevent coords collection/prefiring - -/// A number between -500 and 500. -var/global/obfs_x = 0 -/// A number between -500 and 500. -var/global/obfs_y = 0 - // Which lobby art is on display // This is updated by the lobby art turf when it initializes var/displayed_lobby_art = -1 diff --git a/code/modules/admin/player_panel/player_panel.dm b/code/modules/admin/player_panel/player_panel.dm index 12686e683521..4b79c8c91569 100644 --- a/code/modules/admin/player_panel/player_panel.dm +++ b/code/modules/admin/player_panel/player_panel.dm @@ -389,15 +389,15 @@ dat += "Round Duration: [round(world.time / 36000)]:[add_zero(world.time / 600 % 60, 2)]:[world.time / 100 % 6][world.time / 100 % 10]
" if(check_rights(R_DEBUG, 0)) - dat += "
VV Evacuation Controller
" dat += "VV Shuttle Controller

" if(check_rights(R_MOD, 0)) - dat += "Evacuation: " - switch(EvacuationAuthority.evac_status) - if(EVACUATION_STATUS_STANDING_BY) dat += "STANDING BY" - if(EVACUATION_STATUS_INITIATING) dat += "IN PROGRESS: [EvacuationAuthority.get_status_panel_eta()]" - if(EVACUATION_STATUS_COMPLETE) dat += "COMPLETE" + dat += "Evacuation Goals: " + switch(SShijack.evac_status) + if(EVACUATION_STATUS_NOT_INITIATED) + dat += "STANDING BY" + if(EVACUATION_STATUS_INITIATED) + dat += "IN PROGRESS" dat += "
" dat += "Initiate Evacuation
" @@ -405,20 +405,6 @@ dat += "Toggle Evacuation Permission (does not affect evac in progress)
" if(check_rights(R_ADMIN, 0)) dat += "Force Evacuation Now
" - if(check_rights(R_ADMIN, 0)) - dat += "Self-Destruct: " - switch(EvacuationAuthority.dest_status) - if(NUKE_EXPLOSION_INACTIVE) dat += "INACTIVE" - if(NUKE_EXPLOSION_ACTIVE) dat += "ACTIVE" - if(NUKE_EXPLOSION_IN_PROGRESS) dat += "IN PROGRESS" - if(NUKE_EXPLOSION_FINISHED, NUKE_EXPLOSION_GROUND_FINISHED) dat += "FINISHED" - dat += "
" - - dat += "Unlock Self-Destruct control panel for humans
" - dat += "Lock Self-Destruct control panel for humans
" - dat += "Destruct the [MAIN_SHIP_NAME] NOW
" - dat += "Toggle Self-Destruct Permission (does not affect evac in progress)
" - dat += "
[SSticker.delay_end ? "End Round Normally" : "Delay Round End"]
" dat += "" show_browser(usr, dat, "Round Status", "roundstatus", "size=600x500") diff --git a/code/modules/admin/tabs/event_tab.dm b/code/modules/admin/tabs/event_tab.dm index 8bcd15cb04a9..fcc604c9cfa8 100644 --- a/code/modules/admin/tabs/event_tab.dm +++ b/code/modules/admin/tabs/event_tab.dm @@ -250,7 +250,7 @@ if(!SSticker.mode || !check_rights(R_ADMIN)) return set_security_level(SEC_LEVEL_RED) - EvacuationAuthority.initiate_evacuation() + SShijack.initiate_evacuation() message_admins("[key_name_admin(usr)] forced an emergency evacuation.") @@ -261,7 +261,7 @@ if(!SSticker.mode || !check_rights(R_ADMIN)) return - EvacuationAuthority.cancel_evacuation() + SShijack.cancel_evacuation() message_admins("[key_name_admin(usr)] canceled an emergency evacuation.") diff --git a/code/modules/admin/topic/topic.dm b/code/modules/admin/topic/topic.dm index f78b6a844d4b..d60377123c49 100644 --- a/code/modules/admin/topic/topic.dm +++ b/code/modules/admin/topic/topic.dm @@ -131,50 +131,20 @@ if(href_list["evac_authority"]) switch(href_list["evac_authority"]) if("init_evac") - if(!EvacuationAuthority.initiate_evacuation()) + if(!SShijack.initiate_evacuation()) to_chat(usr, SPAN_WARNING("You are unable to initiate an evacuation right now!")) else message_admins("[key_name_admin(usr)] called an evacuation.") if("cancel_evac") - if(!EvacuationAuthority.cancel_evacuation()) + if(!SShijack.cancel_evacuation()) to_chat(usr, SPAN_WARNING("You are unable to cancel an evacuation right now!")) else message_admins("[key_name_admin(usr)] canceled an evacuation.") if("toggle_evac") - EvacuationAuthority.flags_scuttle ^= FLAGS_EVACUATION_DENY - message_admins("[key_name_admin(usr)] has [EvacuationAuthority.flags_scuttle & FLAGS_EVACUATION_DENY ? "forbidden" : "allowed"] ship-wide evacuation.") - - if("force_evac") - if(!EvacuationAuthority.begin_launch()) - to_chat(usr, SPAN_WARNING("You are unable to launch the pods directly right now!")) - else - message_admins("[key_name_admin(usr)] force-launched the escape pods.") - - if("init_dest") - if(!EvacuationAuthority.enable_self_destruct()) - to_chat(usr, SPAN_WARNING("You are unable to authorize the self-destruct right now!")) - else - message_admins("[key_name_admin(usr)] force-enabled the self-destruct system.") - - if("cancel_dest") - if(!EvacuationAuthority.cancel_self_destruct(1)) - to_chat(usr, SPAN_WARNING("You are unable to cancel the self-destruct right now!")) - else - message_admins("[key_name_admin(usr)] canceled the self-destruct system.") - - if("use_dest") - - var/confirm = alert("Are you sure you want to self-destruct the Almayer?", "Self-Destruct", "Yes", "Cancel") - if(confirm != "Yes") - return - message_admins("[key_name_admin(usr)] forced the self-destrust system, destroying the [MAIN_SHIP_NAME].") - EvacuationAuthority.trigger_self_destruct() - - if("toggle_dest") - EvacuationAuthority.flags_scuttle ^= FLAGS_SELF_DESTRUCT_DENY - message_admins("[key_name_admin(usr)] has [EvacuationAuthority.flags_scuttle & FLAGS_SELF_DESTRUCT_DENY ? "forbidden" : "allowed"] the self-destruct system.") + SShijack.evac_admin_denied = !SShijack.evac_admin_denied + message_admins("[key_name_admin(usr)] has [SShijack.evac_admin_denied ? "forbidden" : "allowed"] ship-wide evacuation.") //====================================================== //====================================================== diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 0297145c7e8d..a7ee69469f1d 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -329,7 +329,7 @@ set desc = "For scheduler debugging" var/list/individual_counts = list() - for(var/datum/disease/M in active_diseases) + for(var/datum/disease/M in SSdisease.all_diseases) individual_counts["[M.type]"]++ for(var/mob/M in SShuman.processable_human_list) individual_counts["[M.type]"]++ diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 82540d6cbf5e..181133edc2aa 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -145,7 +145,6 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( if(!receiver_client) to_chat(src, SPAN_WARNING("The person you were attempting to PM has gone offline!")) return - if(unansweredAhelps[receiver_client.computer_id]) unansweredAhelps.Remove(receiver_client.computer_id) cmd_admin_pm(receiver_client, null) return @@ -467,7 +466,6 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( GLOB.clients -= src SSping.currentrun -= src - unansweredAhelps?.Remove(computer_id) log_access("Logout: [key_name(src)]") if(CLIENT_IS_STAFF(src)) message_admins("Admin logout: [key_name(src)]") diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index a8f2a1776733..bffbda9f538a 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -341,9 +341,13 @@ return if(stored_item) return + var/allowed = FALSE for(var/allowed_item in items_allowed) - if(!istype(attacking_item, allowed_item)) - continue + if(istype(attacking_item, allowed_item)) + allowed = TRUE + break + if(!allowed) + return if(!insert_after) return TRUE insert_item(user, attacking_item) diff --git a/code/modules/clothing/gloves/marine_gloves.dm b/code/modules/clothing/gloves/marine_gloves.dm index 15c596f9f6e1..9a3e9fd5bb08 100644 --- a/code/modules/clothing/gloves/marine_gloves.dm +++ b/code/modules/clothing/gloves/marine_gloves.dm @@ -53,6 +53,14 @@ item_state = "brown" adopts_squad_color = FALSE +/obj/item/clothing/gloves/marine/medical + name = "marine medical combat gloves" + desc = "Standard issue marine sterile gloves, offers regular protection whilst offering the user a better grip when performing medical work." + icon_state = "latex" + item_state = "lgloves" + adopts_squad_color = FALSE + + /obj/item/clothing/gloves/marine/officer name = "officer gloves" desc = "Shiny and impressive. They look expensive." diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index bd648484b875..2c89d31e04cf 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -337,7 +337,8 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( /obj/item/stack/medical/bruise_pack ="brutepack (bandages)", /obj/item/stack/medical/ointment = "ointment", /obj/item/tool/surgery/scalpel = "scalpel", - /obj/item/reagent_container/hypospray/autoinjector = "helmet_injector" + /obj/item/reagent_container/hypospray/autoinjector = "helmet_injector", + /obj/item/storage/pill_bottle/packet = "brutepack (bandages)", )) /obj/item/clothing/head/helmet/marine diff --git a/code/modules/cm_aliens/weeds.dm b/code/modules/cm_aliens/weeds.dm index eb4fc3cd6f09..736d4f947450 100644 --- a/code/modules/cm_aliens/weeds.dm +++ b/code/modules/cm_aliens/weeds.dm @@ -196,7 +196,7 @@ var/parent_type = /obj/effect/alien/weeds/node if(weed_strength >= WEED_LEVEL_HIVE) parent_type = /obj/effect/alien/weeds/node/pylon - + var/obj/effect/alien/weeds/node/found = locate(parent_type) in orange(node_range, get_turf(src)) if(found) found.add_child(src) diff --git a/code/modules/cm_marines/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm index 1d49c42f5e0d..edcb5a836b5d 100644 --- a/code/modules/cm_marines/orbital_cannon.dm +++ b/code/modules/cm_marines/orbital_cannon.dm @@ -171,6 +171,9 @@ var/list/ob_type_fuel_requirements flick("OBC_chambering",src) + + + playsound(loc, 'sound/machines/hydraulics_2.ogg', 40, 1) ob_cannon_busy = TRUE @@ -178,14 +181,29 @@ var/list/ob_type_fuel_requirements sleep(6) ob_cannon_busy = FALSE - chambered_tray = TRUE + var/misfuel = get_misfuel_amount() + var/message = "[key_name(user)] chambered the Orbital Bombardment cannon." + if(misfuel) + message += " It is misfueled by [misfuel] units!" + message_admins(message, x, y, z) update_icon() /var/global/list/orbital_cannon_cancellation = new -/obj/structure/orbital_cannon/proc/fire_ob_cannon(turf/T, mob/user) + +/obj/structure/orbital_cannon/proc/get_misfuel_amount() + switch(tray.warhead.warhead_kind) + if("explosive") + return abs(ob_type_fuel_requirements[1] - tray.fuel_amt) + if("incendiary") + return abs(ob_type_fuel_requirements[2] - tray.fuel_amt) + if("cluster") + return abs(ob_type_fuel_requirements[3] - tray.fuel_amt) + return 0 + +/obj/structure/orbital_cannon/proc/fire_ob_cannon(turf/T, mob/user, squad_behalf) set waitfor = 0 if(!chambered_tray || !loaded_tray || !tray || !tray.warhead || ob_cannon_busy) @@ -203,17 +221,22 @@ var/list/ob_type_fuel_requirements playsound(loc, 'sound/weapons/vehicles/smokelauncher_fire.ogg', 70, 1) playsound(loc, 'sound/weapons/pred_plasma_shot.ogg', 70, 1) - var/inaccurate_fuel = 0 - - switch(tray.warhead.warhead_kind) - if("explosive") - inaccurate_fuel = abs(ob_type_fuel_requirements[1] - tray.fuel_amt) - if("incendiary") - inaccurate_fuel = abs(ob_type_fuel_requirements[2] - tray.fuel_amt) - if("cluster") - inaccurate_fuel = abs(ob_type_fuel_requirements[3] - tray.fuel_amt) + var/inaccurate_fuel = get_misfuel_amount() + var/area/area = get_area(T) + var/off_x = (inaccurate_fuel + 1) * round(rand(-3,3), 1) + var/off_y = (inaccurate_fuel + 1) * round(rand(-3,3), 1) + var/target_x = Clamp(T.x + off_x, 1, world.maxx) + var/target_y = Clamp(T.y + off_y, 1, world.maxy) + var/turf/target = locate(target_x, target_y, T.z) + var/area/target_area = get_area(target) + + message_admins(FONT_SIZE_HUGE("ALERT: [key_name(user)] fired an orbital bombardment in '[target_area]' for squad '[squad_behalf]' landing at ([target.x],[target.y],[target.z])"), target.x, target.y, target.z) + var/message = "Orbital bombardment original target was ([T.x],[T.y],[T.z]) - offset by [abs(off_x)+abs(off_y)]" + if(inaccurate_fuel) + message += " - It was misfueled by [inaccurate_fuel] units!" + message_admins(message, T.x, T.y, T.z) + log_attack("[key_name(user)] fired an orbital bombardment in [area.name] for squad '[squad_behalf]'") - var/turf/target = locate(T.x + inaccurate_fuel * round(rand(-3,3), 1), T.y + inaccurate_fuel * round(rand(-3,3), 1), T.z) if(user) tray.warhead.source_mob = user diff --git a/code/modules/cm_marines/overwatch.dm b/code/modules/cm_marines/overwatch.dm index 66d83f9e73b8..5d651e0aa220 100644 --- a/code/modules/cm_marines/overwatch.dm +++ b/code/modules/cm_marines/overwatch.dm @@ -776,7 +776,7 @@ playsound(T,'sound/effects/alert.ogg', 25, 1) //Placeholder addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/structure/machinery/computer/overwatch, alert_ob), T), 2 SECONDS) addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/structure/machinery/computer/overwatch, begin_fire)), 6 SECONDS) - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/structure/machinery/computer/overwatch, fire_bombard), user, A, T), 6 SECONDS + 6) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/structure/machinery/computer/overwatch, fire_bombard), user, T), 6 SECONDS + 6) /obj/structure/machinery/computer/overwatch/proc/begin_fire() for(var/mob/living/carbon/H in GLOB.alive_mob_list) @@ -787,23 +787,20 @@ visible_message("[icon2html(src, viewers(src))] [SPAN_BOLDNOTICE("Orbital bombardment for squad '[current_squad]' has fired! Impact imminent!")]") current_squad.send_message("WARNING! Ballistic trans-atmospheric launch detected! Get outside of Danger Close!") -/obj/structure/machinery/computer/overwatch/proc/fire_bombard(mob/user, area/A, turf/T) - if(!A || !T) +/obj/structure/machinery/computer/overwatch/proc/fire_bombard(mob/user,turf/T) + if(!T) return var/ob_name = lowertext(almayer_orbital_cannon.tray.warhead.name) var/mutable_appearance/warhead_appearance = mutable_appearance(almayer_orbital_cannon.tray.warhead.icon, almayer_orbital_cannon.tray.warhead.icon_state) - notify_ghosts(header = "Bombardment Inbound", message = "\A [ob_name] targeting [A.name] has been fired!", source = T, alert_overlay = warhead_appearance, extra_large = TRUE) - message_admins(FONT_SIZE_HUGE("ALERT: [key_name(user)] fired an orbital bombardment in [A.name] for squad '[current_squad]' [ADMIN_JMP(T)]")) - log_attack("[key_name(user)] fired an orbital bombardment in [A.name] for squad '[current_squad]'") + notify_ghosts(header = "Bombardment Inbound", message = "\A [ob_name] targeting [get_area(T)] has been fired!", source = T, alert_overlay = warhead_appearance, extra_large = TRUE) /// Project ARES interface log. - log_ares_bombardment(user.name, ob_name, "X[x_bomb], Y[y_bomb] in [A.name]") + log_ares_bombardment(user.name, ob_name, "X[x_bomb], Y[y_bomb] in [get_area(T)]") busy = FALSE - var/turf/target = locate(T.x + rand(-3, 3), T.y + rand(-3, 3), T.z) - if(target && istype(target)) - almayer_orbital_cannon.fire_ob_cannon(target, user) + if(istype(T)) + almayer_orbital_cannon.fire_ob_cannon(T, user, current_squad) user.count_niche_stat(STATISTICS_NICHE_OB) /obj/structure/machinery/computer/overwatch/proc/handle_supplydrop() diff --git a/code/modules/decorators/halloween.dm b/code/modules/decorators/halloween.dm deleted file mode 100644 index af19d80bbb23..000000000000 --- a/code/modules/decorators/halloween.dm +++ /dev/null @@ -1,63 +0,0 @@ -/datum/decorator/halloween - priority = DECORATOR_MONTH_SPECIFIC - -/datum/decorator/halloween/is_active_decor() - return (get_event_progress() != -1) - -/datum/decorator/halloween/proc/get_event_progress() - . = -1 - var/cur_day = text2num(time2text(world.timeofday, "DD")) - var/cur_mon = text2num(time2text(world.timeofday, "MM")) - if(cur_mon == 10) - return min(0, 31 - cur_day) - if(cur_mon == 11 && cur_day < 4) - return 0 - -/// Cobweb decorator: adds more and more cobwebs as you go through the month -/datum/decorator/halloween/cobwebs - /// How much prob() chance to put a cobweb during halloween proper - var/base_chance = 25 - /// How much to remove per day before date - var/ramp_chance = 0.3 - /// How much to scale cobwebs alpha down per day (1 - ramp_scale * days, affects alpha & size) - var/ramp_scale = 0.01 - /// Extra randomness removed onto scale before full blown halloween - var/scale_rand = 0.3 - -/datum/decorator/halloween/cobwebs/decorate(turf/closed/wall/almayer/T) - var/static/list/order = list(NORTHWEST, SOUTHEAST, NORTHEAST, SOUTHWEST) // Ordering of wall_connections - if(length(T.wall_connections) < 4) - return - - var/event_progress = get_event_progress() - var/placement_chance = base_chance - (event_progress * ramp_chance) - for(var/i = 1 to 4) - var/diag = order[i] - if(T.wall_connections[i] != "5") // CORNER_CLOCKWISE | CORNER_COUNTERCLOCKWISE as string - don't ask me - continue - if(!prob(placement_chance)) - continue - - // Skip this if this corner is result of a door connection (mostly for Almayer shutters) - var/valid = TRUE - for(var/a_cardinal in cardinal) - var/cardinal_dir = diag & a_cardinal - if(!a_cardinal) // We check cardinals contributing to that diagonal - continue - var/turf/target = get_step(T, cardinal_dir) - if(locate(/obj/structure/machinery/door) in target) - valid = FALSE - break - - if(valid) // Actually place cobweb - var/turf/target = get_step(T, diag) - if(istype(target, /turf/open)) - var/scale = 1 - ramp_scale * event_progress - scale -= scale_rand * rand() - new /obj/effect/decal/cleanable/cobweb2/dynamic(target, diag, scale) - -/// Ship specific cobweb decorator -/datum/decorator/halloween/cobwebs/ship - -/datum/decorator/halloween/cobwebs/ship/get_decor_types() - return typesof(/turf/closed/wall/almayer) diff --git a/code/modules/defenses/defenses.dm b/code/modules/defenses/defenses.dm index d2c5e63fee29..b39128b1a8bc 100644 --- a/code/modules/defenses/defenses.dm +++ b/code/modules/defenses/defenses.dm @@ -147,12 +147,12 @@ /obj/structure/machinery/defenses/start_processing() if(!machine_processing) machine_processing = TRUE - fast_machines += src + START_PROCESSING(SSdefprocess, src) /obj/structure/machinery/defenses/stop_processing() if(machine_processing) machine_processing = FALSE - fast_machines -= src + STOP_PROCESSING(SSdefprocess, src) /obj/structure/machinery/defenses/proc/earn_kill() kills++ diff --git a/code/modules/defenses/sentry.dm b/code/modules/defenses/sentry.dm index 10d1b16dd9c3..999df7c22579 100644 --- a/code/modules/defenses/sentry.dm +++ b/code/modules/defenses/sentry.dm @@ -526,6 +526,10 @@ choice_categories[SENTRY_CATEGORY_IFF] = list(FACTION_COLONY, FACTION_WEYLAND) selected_categories[SENTRY_CATEGORY_IFF] = FACTION_COLONY +/obj/structure/machinery/defenses/sentry/premade/deployable/almayer + fire_delay = 4 + omni_directional = TRUE + //the turret inside the shuttle sentry deployment system /obj/structure/machinery/defenses/sentry/premade/dropship density = TRUE diff --git a/code/modules/gear_presets/survivors/new_varadero/preset_new_varadero.dm b/code/modules/gear_presets/survivors/new_varadero/preset_new_varadero.dm index f9af043aac62..daa3a8ec019b 100644 --- a/code/modules/gear_presets/survivors/new_varadero/preset_new_varadero.dm +++ b/code/modules/gear_presets/survivors/new_varadero/preset_new_varadero.dm @@ -17,10 +17,10 @@ assignment = "New Varadero Medical Technician" /datum/equipment_preset/survivor/doctor/nv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/synthetic/utility(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human.back), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap(new_human), WEAR_HEAD) ..() /datum/equipment_preset/survivor/scientist/nv @@ -28,13 +28,14 @@ assignment = "New Varadero Researcher" /datum/equipment_preset/survivor/scientist/nv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/researcher(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(new_human), WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science(new_human), WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/chem(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/purple(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(new_human), WEAR_FEET) ..() /datum/equipment_preset/survivor/interstellar_commerce_commission_liason/nv @@ -51,15 +52,16 @@ ..() /datum/equipment_preset/survivor/trucker/nv - name = "Survivor - New Varadero Vehicle Operator" - assignment = "New Varadero Vehicle Operator" + name = "Survivor - New Varadero Cargo Technician" + assignment = "New Varadero Cargo Technician" /datum/equipment_preset/survivor/trucker/nv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargo(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist/wy_davisone(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(new_human), WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beanie/tan(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/tech(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/brown(new_human), WEAR_HANDS) ..() /datum/equipment_preset/survivor/engineer/nv @@ -67,11 +69,11 @@ assignment = "New Varadero Engineer" /datum/equipment_preset/survivor/engineer/nv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/dispatch(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist/ua_civvies(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest/blue(new_human), WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/orange(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/dblue(new_human), WEAR_HEAD) ..() /datum/equipment_preset/survivor/chaplain/nv diff --git a/code/modules/holidays/halloween/decorators.dm b/code/modules/holidays/halloween/decorators.dm new file mode 100644 index 000000000000..b25d6ff6b957 --- /dev/null +++ b/code/modules/holidays/halloween/decorators.dm @@ -0,0 +1,108 @@ +/datum/game_decorator/halloween + +/datum/game_decorator/halloween/is_active_decor() + return (get_days_remaining() != -1) + +/// Get the number of days remaining to event, or -1 if not applicable +/datum/game_decorator/halloween/proc/get_days_remaining() + . = -1 + var/cur_day = text2num(time2text(world.timeofday, "DD")) + var/cur_mon = text2num(time2text(world.timeofday, "MM")) + if(cur_mon == 10) + return max(0, 31 - cur_day) + if(cur_mon == 11 && cur_day < 4) + return 0 + +/// Pumpkins decorator: adds patches of carvable/wearable pumpkins around the ground level +/datum/game_decorator/halloween/pumpkins + var/pumpkin_count = 60 //! Amount of pumpkins to place + var/pumpkin_count_decrease = 1 //! Amount of pumpkins to remove per day to halloween + var/pumpkin_prob_corruption = 20 + var/pumpkin_prob_decrease = 0.5 //! Chance reduction per day before halloween + var/exclusion_range = 10 + +/datum/game_decorator/halloween/pumpkins/decorate() + var/list/turf/valid_turfs = list() + var/list/ground_levels = SSmapping.levels_by_trait(ZTRAIT_GROUND) + for(var/ground_z in ground_levels) + var/list/turf/all_turfs = block(locate(1, 1, ground_z), locate(world.maxx, world.maxy, ground_z)) + for(var/turf/open/turf in all_turfs) + if(turf.is_groundmap_turf) + var/valid = TRUE + for(var/atom/movable/movable as anything in turf.contents) + if(movable.density && movable.can_block_movement) + valid = FALSE + break + if(valid) + valid_turfs += turf + CHECK_TICK + + var/list/turf/picked_turfs = list() + for(var/step in 1 to (pumpkin_count - pumpkin_count_decrease * get_days_remaining())) + if(!length(valid_turfs)) + break + var/turf/considered_turf = pick(valid_turfs) + var/x_min = max(1, considered_turf.x - exclusion_range) + var/y_min = max(1, considered_turf.y - exclusion_range) + var/x_max = min(world.maxx, considered_turf.x + exclusion_range) + var/y_max = min(world.maxy, considered_turf.y + exclusion_range) + var/list/turf/denied_turfs = block(locate(x_min, y_min, considered_turf.z), locate(x_max, y_max, considered_turf.z)) + valid_turfs -= denied_turfs + picked_turfs += considered_turf + + var/corruption_chance = pumpkin_prob_corruption - (get_days_remaining() * pumpkin_prob_decrease) + for(var/turf/target in picked_turfs) + if(prob(corruption_chance)) + new /obj/structure/pumpkin_patch/corrupted(target) + else + new /obj/structure/pumpkin_patch(target) + +/// Cobweb decorator: adds more and more cobwebs as you go through the month +/datum/game_decorator/halloween/cobwebs + /// How much prob() chance to put a cobweb during halloween proper + var/base_chance = 25 + /// How much to remove per day before date + var/ramp_chance = 0.5 + /// How much to scale cobwebs alpha down per day (1 - ramp_scale * days, affects alpha & size) + var/ramp_scale = 0.01 + /// Extra randomness removed onto scale before full blown halloween + var/scale_rand = 0.3 + +/datum/game_decorator/halloween/cobwebs/decorate() + for(var/turf/closed/wall/almayer/turf in world) + if(is_mainship_level(turf.z)) + decorate_turf(turf) + CHECK_TICK + +/datum/game_decorator/halloween/cobwebs/proc/decorate_turf(turf/closed/wall/almayer/turf) + var/static/list/order = list(NORTHWEST, SOUTHEAST, NORTHEAST, SOUTHWEST) // Ordering of wall_connections + if(length(turf.wall_connections) < 4) + return + + var/event_progress = get_days_remaining() + var/placement_chance = base_chance - (event_progress * ramp_chance) + for(var/i = 1 to 4) + var/diag = order[i] + if(turf.wall_connections[i] != "5") // CORNER_CLOCKWISE | CORNER_COUNTERCLOCKWISE as string - don't ask me + continue + if(!prob(placement_chance)) + continue + + // Skip this if this corner is result of a door connection (mostly for Almayer shutters) + var/valid = TRUE + for(var/a_cardinal in cardinal) + var/cardinal_dir = diag & a_cardinal + if(!a_cardinal) // We check cardinals contributing to that diagonal + continue + var/turf/target = get_step(turf, cardinal_dir) + if(locate(/obj/structure/machinery/door) in target) + valid = FALSE + break + + if(valid) // Actually place cobweb + var/turf/target = get_step(turf, diag) + if(istype(target, /turf/open)) + var/scale = 1 - ramp_scale * event_progress + scale -= scale_rand * rand() + new /obj/effect/decal/cleanable/cobweb2/dynamic(target, diag, scale) + diff --git a/code/modules/holidays/halloween/pumpkins/patches.dm b/code/modules/holidays/halloween/pumpkins/patches.dm new file mode 100644 index 000000000000..b84ba24ef4e6 --- /dev/null +++ b/code/modules/holidays/halloween/pumpkins/patches.dm @@ -0,0 +1,65 @@ +/// Patches of pumpkins spawned at roundstart from where marines can get their carvable pumpkins +/obj/structure/pumpkin_patch + icon = 'icons/misc/events/pumpkins.dmi' + name = "patch of pumpkins" + var/empty_name = "\proper vines" + + can_block_movement = FALSE + unslashable = TRUE + health = 400 // To avoid explosions and stray gunfire destroying them too easily + layer = LOWER_ITEM_LAYER + + var/has_vines = TRUE //! Whether there's still vines to display or not + var/pumpkin_count = 3 //! Amount of pumpkins currently in the patch + var/icon_prefix //! Prefix to prepend to icon states, for corrupted pumpkins + var/pumpkin_type = /obj/item/clothing/head/pumpkin + +/obj/structure/pumpkin_patch/Initialize(mapload, ...) + . = ..() + update_icon() + +/obj/structure/pumpkin_patch/update_icon() + overlays?.Cut() + . = ..() + switch(pumpkin_count) + if(3) icon_state = "[icon_prefix]pumpkins_full" + if(2) icon_state = "[icon_prefix]pumpkins_half" + if(1) icon_state = "[icon_prefix]pumpkin" + else icon_state = "empty" + if(has_vines) + overlays += image(icon, loc, "[icon_prefix]vines") + +/obj/structure/pumpkin_patch/attack_hand(mob/user) + if(pumpkin_count < 1) + to_chat(user, SPAN_WARNING("No more pumpkins here...")) + return + if(!user.get_active_hand()) //if active hand is empty + pumpkin_count-- + var/obj/item/clothing/head/pumpkin/pumpkin = new pumpkin_type(loc) + user.put_in_hands(pumpkin) + playsound(loc, 'sound/effects/vegetation_hit.ogg', 25, 1) + update_icon() + if(pumpkin_count < 1) + if(!has_vines) + qdel(src) + else + name = empty_name + return + return ..() + +/obj/structure/pumpkin_patch/attackby(obj/item/tool, mob/user) + if(has_vines && (tool.sharp == IS_SHARP_ITEM_ACCURATE || tool.sharp == IS_SHARP_ITEM_BIG)) + to_chat(user, SPAN_NOTICE("You cut down the vines.")) + playsound(loc, "alien_resin_break", 25) + has_vines = FALSE + update_icon() + if(pumpkin_count < 1 && !has_vines) + qdel(src) + return + return ..() + +/obj/structure/pumpkin_patch/corrupted + icon_prefix = "cor_" + name = "patch of corrupted pumpkins" + empty_name = "\proper corrupted vines" + pumpkin_type = /obj/item/clothing/head/pumpkin/corrupted diff --git a/code/modules/holidays/halloween/pumpkins/wearable.dm b/code/modules/holidays/halloween/pumpkins/wearable.dm new file mode 100644 index 000000000000..74db2b4c85ef --- /dev/null +++ b/code/modules/holidays/halloween/pumpkins/wearable.dm @@ -0,0 +1,72 @@ +/// Carved Pumpkin from the Halloween event +/obj/item/clothing/head/pumpkin + name = "pumpkin" + icon = 'icons/misc/events/pumpkins.dmi' + item_icons = list( + WEAR_HEAD = 'icons/misc/events/pumpkins.dmi', + ) + desc = "An ominous looking pumpkin. Would look pretty spooky if worn on your head..." + w_class = SIZE_MEDIUM + flags_inv_hide = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR + flags_armor_protection = BODY_FLAG_HEAD|BODY_FLAG_EYES + flags_inventory = COVEREYES|BLOCKSHARPOBJ|COVERMOUTH + flags_cold_protection = BODY_FLAG_HEAD + flags_heat_protection = BODY_FLAG_HEAD + min_cold_protection_temperature = HELMET_MIN_COLD_PROT + max_heat_protection_temperature = HELMET_MAX_HEAT_PROT + armor_melee = CLOTHING_ARMOR_MEDIUM + armor_bullet = CLOTHING_ARMOR_MEDIUM + armor_laser = CLOTHING_ARMOR_MEDIUMLOW + armor_energy = CLOTHING_ARMOR_NONE + armor_bomb = CLOTHING_ARMOR_LOW + armor_bio = CLOTHING_ARMOR_MEDIUM + armor_rad = CLOTHING_ARMOR_LOW + armor_internaldamage = CLOTHING_ARMOR_MEDIUM + health = 5 + force = 15 + var/prefix = "" //! Icon state prefix for corrupted pumpkin variants + var/carved_icon = "" //! Currently carved pumpkin overlay + var/carvable_icons = list("smile", "cheeky", "bugeyes", "upside_down_smile", "skelly", "ff") + +/obj/item/clothing/head/pumpkin/Initialize(mapload, ...) + . = ..() + update_icon() + +/obj/item/clothing/head/pumpkin/update_icon() + . = ..() + if(carved_icon) + icon_state = "[prefix]pumpkin_carved" + else + icon_state = "[prefix]pumpkin" + item_state_slots = list( + WEAR_HEAD = "[prefix]pumpkin_onmob", + ) + +/obj/item/clothing/head/pumpkin/mob_can_equip(mob/user, slot, disable_warning) + if(slot == WEAR_HEAD && !carved_icon) + to_chat(user, SPAN_WARNING("You can't put on a full pumpkin! Empty and carve it with a sharp object first.")) + return FALSE + . = ..() + +/obj/item/clothing/head/pumpkin/attackby(obj/item/tool, mob/user) + if(!carved_icon && (tool.sharp == IS_SHARP_ITEM_ACCURATE || tool.sharp == IS_SHARP_ITEM_BIG)) + var/choice = tgui_input_list(user, "Select the pattern to carve on your pumpkin!", "Pumpkin Carving", carvable_icons) + if(choice) + playsound(loc, 'sound/effects/vegetation_hit.ogg', 25, 1) + carved_icon = choice + name = "carved pumpkin" + update_icon() + else + return ..() + +/obj/item/clothing/head/pumpkin/get_mob_overlay(mob/user_mob, slot) + var/image/pumpkin = ..() + if(carved_icon && slot == WEAR_HEAD) + var/image/overlay = overlay_image(icon, "[prefix]pumpkin_[carved_icon]") + pumpkin.overlays += overlay + return pumpkin + +/obj/item/clothing/head/pumpkin/corrupted + name = "corrupted pumpkin" + prefix = "cor_" + carvable_icons = list("cry", "sob", "sad", "why", "spooky", "ff") diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 4d06d1e07142..ee8b69415003 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -1200,10 +1200,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp else . += "Hijack Over" - if(EvacuationAuthority) - var/eta_status = EvacuationAuthority.get_status_panel_eta() + if(SShijack) + var/eta_status = SShijack.get_evac_eta() if(eta_status) - . += "Evacuation: [eta_status]" + . += "Evacuation Goal: [eta_status]" + + if(SShijack.sd_unlocked) + . += "Self Destruct Goal: [SShijack.get_sd_eta()]" if(client.prefs?.be_special & BE_ALIEN_AFTER_DEATH) if(larva_queue_cached_message) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index c9092ed479b9..6bceb994a2a1 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -123,10 +123,12 @@ if(marksman_aura) . += "Active Order: FOCUS" - if(EvacuationAuthority) - var/eta_status = EvacuationAuthority.get_status_panel_eta() + if(SShijack) + var/eta_status = SShijack.get_evac_eta() if(eta_status) - . += "Evacuation: [eta_status]" + . += "Evacuation Goals: [eta_status]" + if(SShijack.sd_unlocked) + . += "Self Destruct Status: [SShijack.get_sd_eta()]" /mob/living/carbon/human/ex_act(severity, direction, datum/cause_data/cause_data) if(lying) diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm index a74fa7413804..f1fff4fb765e 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm @@ -279,7 +279,6 @@ var/allowed_nest_distance = 15 //How far away do we allow nests from an ovied Queen. Default 15 tiles. var/obj/effect/alien/resin/special/pylon/core/hive_location = null //Set to ref every time a core is built, for defining the hive location var/crystal_stored = 0 //How much stockpiled material is stored for the hive to use. - var/xenocon_points = 0 //Xeno version of DEFCON var/datum/mutator_set/hive_mutators/mutators = new var/tier_slot_multiplier = 1 diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index b0f08acc33fa..bccd74036658 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -83,10 +83,10 @@ // this function displays the shuttles ETA in the status panel if the shuttle has been called /mob/living/silicon/proc/show_emergency_shuttle_eta() - if(EvacuationAuthority) - var/eta_status = EvacuationAuthority.get_status_panel_eta() + if(SShijack) + var/eta_status = SShijack.get_evac_eta() if(eta_status) - stat(null, "Evacuation: [eta_status]") + stat(null, "Evacuation Goal: [eta_status]") // this function displays the stations manifest in a separate window diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index dda2487c24d9..a6b654ba2da1 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -248,8 +248,8 @@ RoleAuthority.equip_role(character, player_rank, late_join = TRUE) EquipCustomItems(character) - if((security_level > SEC_LEVEL_BLUE || EvacuationAuthority.evac_status) && player_rank.gets_emergency_kit) - to_chat(character, SPAN_HIGHDANGER("As you stagger out of hypersleep, the sleep bay blares: '[EvacuationAuthority.evac_status ? "VESSEL UNDERGOING EVACUATION PROCEDURES, SELF DEFENSE KIT PROVIDED" : "VESSEL IN HEIGHTENED ALERT STATUS, SELF DEFENSE KIT PROVIDED"]'.")) + if((security_level > SEC_LEVEL_BLUE || SShijack.hijack_status) && player_rank.gets_emergency_kit) + to_chat(character, SPAN_HIGHDANGER("As you stagger out of hypersleep, the sleep bay blares: '[SShijack.evac_status ? "VESSEL UNDERGOING EVACUATION PROCEDURES, SELF DEFENSE KIT PROVIDED" : "VESSEL IN HEIGHTENED ALERT STATUS, SELF DEFENSE KIT PROVIDED"]'.")) character.put_in_hands(new /obj/item/storage/box/kit/cryo_self_defense(character.loc)) GLOB.data_core.manifest_inject(character) @@ -295,10 +295,10 @@ var/dat = "
" dat += "Round Duration: [round(hours)]h [round(mins)]m
" - if(EvacuationAuthority) - switch(EvacuationAuthority.evac_status) - if(EVACUATION_STATUS_INITIATING) dat += "The [MAIN_SHIP_NAME] is being evacuated.
" - if(EVACUATION_STATUS_COMPLETE) dat += "The [MAIN_SHIP_NAME] has undergone evacuation.
" + if(SShijack) + switch(SShijack.evac_status) + if(EVACUATION_STATUS_INITIATED) + dat += "The [MAIN_SHIP_NAME] is being evacuated.
" dat += "Choose from the following open positions:
" var/roles_show = FLAG_SHOW_ALL_JOBS diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 643130559e94..2c08e9f4e693 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -713,5 +713,6 @@ // Convenience proc to create a reagents holder for an atom // Max vol is maximum volume of holder /atom/proc/create_reagents(max_vol) + QDEL_NULL(reagents) reagents = new/datum/reagents(max_vol) reagents.my_atom = src diff --git a/code/modules/reagents/chemistry_machinery/pandemic.dm b/code/modules/reagents/chemistry_machinery/pandemic.dm index aef4823effda..c9e34f79609e 100644 --- a/code/modules/reagents/chemistry_machinery/pandemic.dm +++ b/code/modules/reagents/chemistry_machinery/pandemic.dm @@ -132,7 +132,7 @@ if(archive_diseases[id]) var/datum/disease/advance/A = archive_diseases[id] A.AssignName(new_name) - for(var/datum/disease/advance/AD in active_diseases) + for(var/datum/disease/advance/AD in SSdisease.all_diseases) AD.Refresh() updateUsrDialog() diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm index ba842fb0bfb9..8221b8771c88 100644 --- a/code/modules/security_levels/security_levels.dm +++ b/code/modules/security_levels/security_levels.dm @@ -43,7 +43,6 @@ var/input = "DANGER, THE EMERGENCY DESTRUCT SYSTEM IS NOW ACTIVATED. PROCEED TO THE SELF-DESTRUCT CHAMBER FOR CONTROL ROD INSERTION." marine_announcement(input, name, 'sound/AI/selfdestruct_short.ogg', logging = log) security_level = SEC_LEVEL_DELTA - EvacuationAuthority.enable_self_destruct() /proc/get_security_level() switch(security_level) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 26869cfcf448..3d0c8fca142d 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -297,10 +297,14 @@ return var/mob/living/carbon/human/human_user = user - if(!(ACCESS_MARINE_SENIOR in human_user.wear_id?.access)) + if(!(ACCESS_MARINE_COMMAND in human_user.wear_id?.access)) to_chat(user, SPAN_NOTICE("[src]'s screen says \"Awaiting confirmation of the evacuation order\".")) return + if(SShijack.current_progress < SShijack.early_launch_required_progress) + to_chat(user, SPAN_NOTICE("[src]'s screen says \"Unable to launch, fuel insufficient\".")) + return + if(tgui_alert(user, "Early launch the lifeboat?", "Confirm", list("Yes", "No"), 10 SECONDS) == "Yes") to_chat(user, SPAN_NOTICE("[src]'s screen blinks and says \"Early launch accepted\".")) lifeboat.evac_launch() diff --git a/code/modules/shuttle/computers/dropship_computer.dm b/code/modules/shuttle/computers/dropship_computer.dm index 4540588ca628..4fe102270537 100644 --- a/code/modules/shuttle/computers/dropship_computer.dm +++ b/code/modules/shuttle/computers/dropship_computer.dm @@ -214,19 +214,19 @@ // door controls being overriden if(!dropship_control_lost) - to_chat(xeno, SPAN_XENONOTICE("You override the doors.")) - xeno_message(SPAN_XENOANNOUNCE("The doors of the metal bird have been overridden! Rejoice!"), 3, xeno.hivenumber) dropship.control_doors("unlock", "all", TRUE) dropship_control_lost = TRUE door_control_cooldown = addtimer(CALLBACK(src, PROC_REF(remove_door_lock)), SHUTTLE_LOCK_COOLDOWN, TIMER_STOPPABLE) - notify_ghosts(header = "Dropship Locked", message = "[xeno] has locked [dropship]!", source = xeno, action = NOTIFY_ORBIT) - if(almayer_orbital_cannon) almayer_orbital_cannon.is_disabled = TRUE addtimer(CALLBACK(almayer_orbital_cannon, TYPE_PROC_REF(/obj/structure/orbital_cannon, enable)), 10 MINUTES, TIMER_UNIQUE) - if(!GLOB.resin_lz_allowed) set_lz_resin_allowed(TRUE) + + to_chat(xeno, SPAN_XENONOTICE("You override the doors.")) + xeno_message(SPAN_XENOANNOUNCE("The doors of the metal bird have been overridden! Rejoice!"), 3, xeno.hivenumber) + message_admins("[key_name(xeno)] has locked the dropship '[dropship]'", xeno.x, xeno.y, xeno.z) + notify_ghosts(header = "Dropship Locked", message = "[xeno] has locked [dropship]!", source = xeno, action = NOTIFY_ORBIT) return if(dropship_control_lost) diff --git a/code/modules/shuttle/computers/escape_pod_computer.dm b/code/modules/shuttle/computers/escape_pod_computer.dm index 6f9292cfc048..eb81a4a98a8a 100644 --- a/code/modules/shuttle/computers/escape_pod_computer.dm +++ b/code/modules/shuttle/computers/escape_pod_computer.dm @@ -12,6 +12,7 @@ unslashable = TRUE unacidable = TRUE var/pod_state = STATE_IDLE + var/launch_without_evac = FALSE /obj/structure/machinery/computer/shuttle/escape_pod_panel/ex_act(severity) return FALSE @@ -56,6 +57,7 @@ .["door_state"] = door.density .["door_lock"] = shuttle.door_handler.is_locked .["can_delay"] = TRUE//launch_status[2] + .["launch_without_evac"] = launch_without_evac /obj/structure/machinery/computer/shuttle/escape_pod_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) @@ -66,7 +68,7 @@ var/obj/docking_port/mobile/crashable/escape_shuttle/shuttle = SSshuttle.getShuttle(shuttleId) switch(action) if("force_launch") - if(pod_state != STATE_READY && pod_state != STATE_DELAYED) + if(!launch_without_evac && pod_state != STATE_READY && pod_state != STATE_DELAYED) return shuttle.evac_launch() @@ -83,6 +85,9 @@ shuttle.door_handler.control_doors("force-lock-launch") . = TRUE +/obj/structure/machinery/computer/shuttle/escape_pod_panel/liaison + launch_without_evac = TRUE + //========================================================================================= //================================Evacuation Sleeper======================================= //========================================================================================= @@ -208,10 +213,12 @@ unslashable = TRUE unacidable = TRUE var/obj/docking_port/mobile/crashable/escape_shuttle/linked_shuttle + var/start_locked = TRUE /obj/structure/machinery/door/airlock/evacuation/Initialize() . = ..() - INVOKE_ASYNC(src, PROC_REF(lock)) + if(start_locked) + INVOKE_ASYNC(src, PROC_REF(lock)) /obj/structure/machinery/door/airlock/evacuation/Destroy() if(linked_shuttle) @@ -250,3 +257,6 @@ if(!density) return -1 return ..() + +/obj/structure/machinery/door/airlock/evacuation/liaison + start_locked = FALSE diff --git a/code/modules/shuttle/dropship_hijack.dm b/code/modules/shuttle/dropship_hijack.dm index 7796ed0510c8..36bc879ace46 100644 --- a/code/modules/shuttle/dropship_hijack.dm +++ b/code/modules/shuttle/dropship_hijack.dm @@ -72,6 +72,7 @@ break sleep(10) + SShijack.announce_status_on_crash() SSticker.hijack_ocurred() /datum/dropship_hijack/almayer/proc/fire() diff --git a/code/modules/shuttle/shuttles/crashable/escape_shuttle.dm b/code/modules/shuttle/shuttles/crashable/escape_shuttle.dm index 6029d345b6d7..1f0a8fd502cf 100644 --- a/code/modules/shuttle/shuttles/crashable/escape_shuttle.dm +++ b/code/modules/shuttle/shuttles/crashable/escape_shuttle.dm @@ -11,7 +11,7 @@ /// The % chance of the escape pod crashing into the groundmap before lifeboats leaving var/early_crash_land_chance = 75 /// The % chance of the escape pod crashing into the groundmap - var/crash_land_chance = 25 + var/crash_land_chance = 0 /// How many people can be in the escape pod before it crashes var/max_capacity = 3 @@ -103,7 +103,7 @@ /obj/docking_port/mobile/crashable/escape_shuttle/crash_check() . = ..() - if(prob((EvacuationAuthority.evac_status >= EVACUATION_STATUS_IN_PROGRESS ? crash_land_chance : early_crash_land_chance))) + if(prob((SShijack.hijack_status >= HIJACK_OBJECTIVES_COMPLETE ? crash_land_chance : early_crash_land_chance))) return TRUE /obj/docking_port/mobile/crashable/escape_shuttle/open_doors() @@ -124,8 +124,8 @@ id = ESCAPE_SHUTTLE_EAST_CL width = 4 height = 5 - early_crash_land_chance = 25 - crash_land_chance = 5 + early_crash_land_chance = 0 + crash_land_chance = 0 /obj/docking_port/mobile/crashable/escape_shuttle/w id = ESCAPE_SHUTTLE_WEST diff --git a/code/modules/shuttle/shuttles/crashable/lifeboats.dm b/code/modules/shuttle/shuttles/crashable/lifeboats.dm index 93489ee4a359..11b376563d64 100644 --- a/code/modules/shuttle/shuttles/crashable/lifeboats.dm +++ b/code/modules/shuttle/shuttles/crashable/lifeboats.dm @@ -51,10 +51,10 @@ /obj/docking_port/mobile/crashable/lifeboat/crash_check() . = ..() - if(EvacuationAuthority.evac_status >= EVACUATION_STATUS_IN_PROGRESS) + if(SShijack.hijack_status >= HIJACK_OBJECTIVES_COMPLETE) return FALSE - if(prob(abs(((world.time - EvacuationAuthority.evac_time) / EVACUATION_AUTOMATIC_DEPARTURE) - 1) * 100)) + if(prob(abs((SShijack.current_progress - SShijack.required_progress) / SShijack.required_progress) * 100)) return TRUE /obj/docking_port/mobile/crashable/lifeboat/open_doors() diff --git a/code/modules/shuttles/marine_ferry.dm b/code/modules/shuttles/marine_ferry.dm index 6d84881fe9bf..032294a45b39 100644 --- a/code/modules/shuttles/marine_ferry.dm +++ b/code/modules/shuttles/marine_ferry.dm @@ -267,17 +267,11 @@ in_transit_time_left = 0 - if(EvacuationAuthority.dest_status >= NUKE_EXPLOSION_IN_PROGRESS) - return FALSE //If a nuke is in progress, don't attempt a landing. - playsound_area(get_area(turfs_int[sound_target]), sound_landing, 100) playsound(turfs_trg[sound_target], sound_landing, 100) playsound_area(get_area(turfs_int[sound_target]), channel = SOUND_CHANNEL_AMBIENCE, status = SOUND_UPDATE) sleep(100) //Wait for it to finish. - if(EvacuationAuthority.dest_status == NUKE_EXPLOSION_FINISHED) - return FALSE //If a nuke finished, don't land. - target_turf = T_trg target_rotation = trg_rot shuttle_turfs = turfs_int @@ -434,9 +428,6 @@ in_transit_time_left = 0 - if(EvacuationAuthority.dest_status >= NUKE_EXPLOSION_IN_PROGRESS) - return FALSE //If a nuke is in progress, don't attempt a landing. - //This is where things change and shit gets real marine_announcement("DROPSHIP ON COLLISION COURSE. CRASH IMMINENT." , "EMERGENCY", 'sound/AI/dropship_emergency.ogg', logging = ARES_LOG_SECURITY) @@ -449,9 +440,6 @@ sleep(85) - if(EvacuationAuthority.dest_status == NUKE_EXPLOSION_FINISHED) - return FALSE //If a nuke finished, don't land. - if(security_level < SEC_LEVEL_RED) //automatically set security level to red. set_security_level(SEC_LEVEL_RED, TRUE) diff --git a/code/modules/teleporters/teleporter_admin_verbs.dm b/code/modules/teleporters/teleporter_admin_verbs.dm index 930f9209d481..61f21fdb34ee 100644 --- a/code/modules/teleporters/teleporter_admin_verbs.dm +++ b/code/modules/teleporters/teleporter_admin_verbs.dm @@ -3,7 +3,7 @@ set desc = "Force a teleporter to teleport" set category = "Admin.Game" - var/available_teleporters = SSteleporter.teleporters + var/list/datum/teleporter/available_teleporters = GLOB.teleporters var/datum/teleporter/teleporter = tgui_input_list(usr, "Which teleporter do you want to use?", "Select a teleporter:", available_teleporters) if(!teleporter) diff --git a/code/modules/teleporters/teleporter_console.dm b/code/modules/teleporters/teleporter_console.dm index b9a3629c881d..88384578a939 100644 --- a/code/modules/teleporters/teleporter_console.dm +++ b/code/modules/teleporters/teleporter_console.dm @@ -40,19 +40,13 @@ if(linked_teleporter) // Maybe should debug log this because it's indicative of bad logic, but I'll leave it out for the sake of (potential) spam return TRUE - if(SSteleporter) - - var/datum/teleporter/found_teleporter = SSteleporter.teleporters_by_id[teleporter_id] - if(found_teleporter) - linked_teleporter = found_teleporter - linked_teleporter.linked_consoles += src - else - log_debug("Couldn't find teleporter matching ID [linked_teleporter]. Code: TELEPORTER_CONSOLE_2") - log_admin("Couldn't find teleporter matching ID [linked_teleporter]. Tell the devs. Code: TELEPORTER_CONSOLE_2") - return FALSE + var/datum/teleporter/found_teleporter = GLOB.teleporters_by_id[teleporter_id] + if(found_teleporter) + linked_teleporter = found_teleporter + linked_teleporter.linked_consoles += src else - log_debug("Couldn't find teleporter SS to pull teleporter from. Code: TELEPORTER_CONSOLE_3") - log_admin("Couldn't find teleporter SS to pull teleporter from. Tell the devs. Code: TELEPORTER_CONSOLE_3") + log_debug("Couldn't find teleporter matching ID [linked_teleporter]. Code: TELEPORTER_CONSOLE_2") + log_admin("Couldn't find teleporter matching ID [linked_teleporter]. Tell the devs. Code: TELEPORTER_CONSOLE_2") return FALSE return TRUE @@ -181,9 +175,9 @@ if(SSmapping.configs[GROUND_MAP].map_name != MAP_CORSAT) // Bad style, but I'm leaving it here for now until someone wants to add a teleporter to another map return - if(SSteleporter.teleporters.len) // already made the damn thing + if(GLOB.teleporters.len) // already made the damn thing return var/datum/teleporter/corsat/teleporter = new - SSteleporter.teleporters_by_id[teleporter.id] = teleporter - SSteleporter.teleporters += teleporter + GLOB.teleporters_by_id[teleporter.id] = teleporter + GLOB.teleporters += teleporter diff --git a/code/modules/teleporters/teleporter_landmarks.dm b/code/modules/teleporters/teleporter_landmarks.dm index 75ce77550f52..fe0ab4648903 100644 --- a/code/modules/teleporters/teleporter_landmarks.dm +++ b/code/modules/teleporters/teleporter_landmarks.dm @@ -41,30 +41,24 @@ /obj/effect/landmark/teleporter_loc/LateInitialize() . = ..() - if (SSteleporter) - var/datum/teleporter/T = SSteleporter.teleporters_by_id[linked_teleporter] - if (T) - if (!T.locations[location_id]) - T.locations[location_id] = list() + var/datum/teleporter/T = GLOB.teleporters_by_id[linked_teleporter] + if (T) + if (!T.locations[location_id]) + T.locations[location_id] = list() - var/list/location = T.locations[location_id] + var/list/location = T.locations[location_id] - if (!location) - log_debug("Teleporter locations turf list not properly instantiated. Code: TELEPORTER_LANDMARK_1") - log_admin("Teleporter locations turf list not properly instantiated. Tell the devs. Code: TELEPORTER_LANDMARK_1") - qdel(src) - return - - location[index] = get_turf(src) - - else - log_debug("Couldn't find teleporter matching ID [linked_teleporter]. Code: TELEPORTER_LANDMARK_2") - log_admin("Couldn't find teleporter matching ID [linked_teleporter]. Tell the devs. Code: TELEPORTER_LANDMARK_2") + if (!location) + log_debug("Teleporter locations turf list not properly instantiated. Code: TELEPORTER_LANDMARK_1") + log_admin("Teleporter locations turf list not properly instantiated. Tell the devs. Code: TELEPORTER_LANDMARK_1") qdel(src) return + + location[index] = get_turf(src) + else - log_debug("Couldn't find teleporter SS to register with. Code: TELEPORTER_LANDMARK_3") - log_admin("Couldn't find teleporter SS to register with. Tell the devs. Code: TELEPORTER_LANDMARK_3") + log_debug("Couldn't find teleporter matching ID [linked_teleporter]. Code: TELEPORTER_LANDMARK_2") + log_admin("Couldn't find teleporter matching ID [linked_teleporter]. Tell the devs. Code: TELEPORTER_LANDMARK_2") qdel(src) return diff --git a/code/modules/tents/folded_tents.dm b/code/modules/tents/folded_tents.dm index 08b8142ab358..2bed879a0a99 100644 --- a/code/modules/tents/folded_tents.dm +++ b/code/modules/tents/folded_tents.dm @@ -1,20 +1,34 @@ /obj/item/folded_tent name = "Folded Abstract Tent" icon = 'icons/obj/structures/tents_folded.dmi' + icon_state = "tent" w_class = SIZE_LARGE /// Required cleared area along X axis var/dim_x = 1 /// Required cleared area along Y axis var/dim_y = 1 - /// Deployment X offset - var/off_x = 0 - /// Deployment Y offset - var/off_y = 0 - /// Map Template to use for the tent - var/template + /// Tents map template typepath + var/template_preset = "abstract" + ///Map template datum used for tent + var/datum/map_template/template /// If this tent can be deployed anywhere var/unrestricted_deployment = FALSE +/obj/item/folded_tent/Initialize(mapload, ...) + . = ..() + if(template_preset == "abstract") //So spawning an abstract tent wont fail create and destroy + return + set_template(SSmapping.tent_type_templates[template_preset]) + if(!template) + CRASH("[src] initialized with template preset, \"[template_preset]\", that does not exist.") + +/obj/item/folded_tent/proc/set_template(datum/map_template/new_template) + if(!istype(new_template)) + return + template = new_template + dim_x = template.width + dim_y = template.height + /// Check an area is clear for deployment of the tent /obj/item/folded_tent/proc/check_area(turf/ref_turf, mob/message_receiver, display_error = FALSE) SHOULD_NOT_SLEEP(TRUE) @@ -47,9 +61,11 @@ return FALSE return TRUE -/obj/item/folded_tent/proc/unfold(turf/ref_turf) - var/datum/map_template/template_instance = new template() - template_instance.load(ref_turf, FALSE, FALSE) +/obj/item/folded_tent/proc/unfold(mob/user, turf/ref_turf) + if(!istype(template)) + to_chat(user, SPAN_BOLDWARNING("[src] does not contain a tent! It is broken!")) + CRASH("[src] attempted to unfold \"[template]\" as a tent.") + template.load(ref_turf, FALSE, FALSE) /obj/item/folded_tent/proc/get_deployment_area(turf/ref_turf) RETURN_TYPE(/list/turf) @@ -58,11 +74,13 @@ /obj/item/folded_tent/attack_self(mob/living/user) . = ..() + var/off_x = -(tgui_input_number(user, "If facing North or South", "Set X Offset", 0, dim_x, 0, 30 SECONDS, TRUE)) + var/off_y = -(tgui_input_number(user, "If facing East or West", "Set Y Offset", 0, dim_y, 0, 30 SECONDS, TRUE)) var/turf/deploy_turf = user.loc if(!istype(deploy_turf)) return // In a locker or something. Get lost you already have a home. - switch(user.dir) // Fix up offset deploy location so tent is better centered + can be deployed under all angles + switch(user.dir) //Handles offsets when deploying if(NORTH) deploy_turf = locate(deploy_turf.x + off_x, deploy_turf.y + 1, deploy_turf.z) if(SOUTH) @@ -103,7 +121,7 @@ QDEL_IN(gfx, 1.5 SECONDS) return - unfold(deploy_turf) + unfold(user, deploy_turf) user.visible_message(SPAN_INFO("[user] finishes deploying the [src]!"), SPAN_INFO("You finish deploying the [src]!")) for(var/gfx in turf_overlay) qdel(gfx) @@ -113,36 +131,25 @@ name = "folded USCM Command Tent" icon_state = "cmd" desc = "A standard USCM Command Tent. This one comes equipped with a self-powered Overwatch Console and a Telephone. Unfold in a suitable location to maximize usefulness. Staff Officer not included. ENTRANCE TO THE SOUTH." - dim_x = 2 - dim_y = 4 - off_x = -1 - template = /datum/map_template/tent/cmd + template_preset = "tent_cmd" /obj/item/folded_tent/med name = "folded USCM Medical Tent" icon_state = "med" desc = "A standard USCM Medical Tent. This one comes equipped with advanced field surgery facilities. Unfold in a suitable location to maximize health gains. Surgical Tray not included. ENTRANCE TO THE SOUTH." - dim_x = 2 - dim_y = 4 - template = /datum/map_template/tent/med + template_preset = "tent_med" /obj/item/folded_tent/reqs name = "folded USCM Requisitions Tent" icon_state = "req" desc = "A standard USCM Requisitions Tent. Now, you can enjoy req line anywhere you go! Unfold in a suitable location to maximize resource distribution. ASRS not included. ENTRANCE TO THE SOUTH." - dim_x = 4 - dim_y = 4 - off_x = -2 - template = /datum/map_template/tent/reqs + template_preset = "tent_reqs" /obj/item/folded_tent/big name = "folded USCM Big Tent" icon_state = "big" desc = "A standard USCM Tent. This one is just a bigger, general purpose version. Unfold in a suitable location for maximum FOB vibes. Mess Tech not included. ENTRANCE TO THE SOUTH." - dim_x = 3 - dim_y = 4 - off_x = -2 - template = /datum/map_template/tent/big + template_preset = "tent_big" /obj/effect/overlay/temp/tent_deployment_error icon = 'icons/effects/effects.dmi' diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index de420a2a325a..07ce3b684584 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -12,8 +12,13 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) src.version = version /datum/tgs_api/proc/TerminateWorld() - del(world) - sleep(1) // https://www.byond.com/forum/post/2894866 + while(TRUE) + TGS_DEBUG_LOG("About to terminate world. Tick: [world.time], sleep_offline: [world.sleep_offline]") + world.sleep_offline = FALSE // https://www.byond.com/forum/post/2894866 + del(world) + world.sleep_offline = FALSE // just in case, this is BYOND after all... + sleep(1) + TGS_DEBUG_LOG("BYOND DIDN'T TERMINATE THE WORLD!!! TICK IS: [world.time], sleep_offline: [world.sleep_offline]") /datum/tgs_api/latest parent_type = /datum/tgs_api/v5 diff --git a/code/modules/vehicles/interior/interior.dm b/code/modules/vehicles/interior/interior.dm index 046b42495ac7..f2afcd5ae5f7 100644 --- a/code/modules/vehicles/interior/interior.dm +++ b/code/modules/vehicles/interior/interior.dm @@ -318,7 +318,7 @@ var/turf/min = reservation.bottom_left_coords var/turf/max = reservation.top_right_coords - return list(Floor(min[1] + (max[1] - min[1])), Floor(min[2] + (max[2] - min[2])), min[3]) + return list(Floor(min[1] + (max[1] - min[1])/2), Floor(min[2] + (max[2] - min[2])/2), min[3]) /datum/interior/proc/get_middle_turf() var/list/turf/bounds = get_bound_turfs() diff --git a/colonialmarines.dme b/colonialmarines.dme index d83585ffe325..82c611c7d230 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -61,6 +61,7 @@ #include "code\__DEFINES\fonts.dm" #include "code\__DEFINES\generators.dm" #include "code\__DEFINES\guns.dm" +#include "code\__DEFINES\hijack.dm" #include "code\__DEFINES\html.dm" #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\human.dm" @@ -227,7 +228,6 @@ #include "code\controllers\mc\master.dm" #include "code\controllers\mc\subsystem.dm" #include "code\controllers\subsystem\acid_pillar.dm" -#include "code\controllers\subsystem\admin.dm" #include "code\controllers\subsystem\assets.dm" #include "code\controllers\subsystem\atoms.dm" #include "code\controllers\subsystem\autofire.dm" @@ -238,11 +238,10 @@ #include "code\controllers\subsystem\decorator.dm" #include "code\controllers\subsystem\disease.dm" #include "code\controllers\subsystem\events.dm" -#include "code\controllers\subsystem\fail_to_topic.dm" -#include "code\controllers\subsystem\fast_machinery.dm" #include "code\controllers\subsystem\fz_transitions.dm" +#include "code\controllers\subsystem\game_decorator.dm" #include "code\controllers\subsystem\garbage.dm" -#include "code\controllers\subsystem\htmlui.dm" +#include "code\controllers\subsystem\hijack.dm" #include "code\controllers\subsystem\human.dm" #include "code\controllers\subsystem\inactivity.dm" #include "code\controllers\subsystem\influxdriver.dm" @@ -254,7 +253,6 @@ #include "code\controllers\subsystem\lighting.dm" #include "code\controllers\subsystem\machinery.dm" #include "code\controllers\subsystem\mapping.dm" -#include "code\controllers\subsystem\midi.dm" #include "code\controllers\subsystem\minimap.dm" #include "code\controllers\subsystem\mob.dm" #include "code\controllers\subsystem\nanoui.dm" @@ -274,15 +272,11 @@ #include "code\controllers\subsystem\round_recording.dm" #include "code\controllers\subsystem\shuttle.dm" #include "code\controllers\subsystem\shuttles.dm" -#include "code\controllers\subsystem\smoke_system.dm" #include "code\controllers\subsystem\sound.dm" #include "code\controllers\subsystem\sound_loops.dm" #include "code\controllers\subsystem\soundscape.dm" -#include "code\controllers\subsystem\stamina.dm" #include "code\controllers\subsystem\statpanel.dm" -#include "code\controllers\subsystem\stats_collector.dm" #include "code\controllers\subsystem\techtree.dm" -#include "code\controllers\subsystem\teleporter.dm" #include "code\controllers\subsystem\tgui.dm" #include "code\controllers\subsystem\ticker.dm" #include "code\controllers\subsystem\time_track.dm" @@ -292,10 +286,10 @@ #include "code\controllers\subsystem\weather.dm" #include "code\controllers\subsystem\x_evolution.dm" #include "code\controllers\subsystem\xeno.dm" -#include "code\controllers\subsystem\xenocon.dm" #include "code\controllers\subsystem\init\landmarks.dm" #include "code\controllers\subsystem\init\law.dm" #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\fastobj.dm" #include "code\controllers\subsystem\processing\hive_status.dm" @@ -707,7 +701,6 @@ #include "code\game\cas_manager\datums\cas_signal.dm" #include "code\game\gamemodes\cm_initialize.dm" #include "code\game\gamemodes\cm_process.dm" -#include "code\game\gamemodes\cm_self_destruct.dm" #include "code\game\gamemodes\events.dm" #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\colonialmarines\colonialmarines.dm" @@ -805,7 +798,6 @@ #include "code\game\machinery\lightswitch.dm" #include "code\game\machinery\line_nexter.dm" #include "code\game\machinery\machinery.dm" -#include "code\game\machinery\magnet.dm" #include "code\game\machinery\mass_driver.dm" #include "code\game\machinery\mining.dm" #include "code\game\machinery\misc.dm" @@ -1637,7 +1629,6 @@ #include "code\modules\decorators\admin_runtime_decorator.dm" #include "code\modules\decorators\cassette_decorator.dm" #include "code\modules\decorators\christmas.dm" -#include "code\modules\decorators\halloween.dm" #include "code\modules\decorators\mass_xeno_decorator.dm" #include "code\modules\decorators\weapon_decorator.dm" #include "code\modules\decorators\weapon_map_decorator.dm" @@ -1734,6 +1725,9 @@ #include "code\modules\gear_presets\survivors\sorokyne_strata\preset_sorokyne_strata.dm" #include "code\modules\gear_presets\survivors\trijent\crashlanding_upp_bar_insert_trijent.dm" #include "code\modules\gear_presets\survivors\trijent\preset_trijent.dm" +#include "code\modules\holidays\halloween\decorators.dm" +#include "code\modules\holidays\halloween\pumpkins\patches.dm" +#include "code\modules\holidays\halloween\pumpkins\wearable.dm" #include "code\modules\hydroponics\botany_disks.dm" #include "code\modules\hydroponics\grown_inedible.dm" #include "code\modules\hydroponics\hydro_tools.dm" diff --git a/config/example/config.txt b/config/example/config.txt index dcce46434404..8e8bb2b754d5 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -132,6 +132,7 @@ FORUMURL https://forum.cm-ss13.com/ ## Wiki address WIKIURL https://cm-ss13.com/w +WIKIARTICLEURL https://cm-ss13.com/wiki ## Rules address RULESURL https://cm-ss13.com/viewtopic.php?f=57&t=5094 diff --git a/html/changelogs/AutoChangeLog-pr-4572.yml b/html/changelogs/AutoChangeLog-pr-4572.yml new file mode 100644 index 000000000000..5dd4e07a3200 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4572.yml @@ -0,0 +1,5 @@ +author: "TopHatPenguin" +delete-after: True +changes: + - rscadd: "Adds a mostly built communications office nightmare insert to Kutjevo which attaches onto the sensor tower." + - rscadd: "Re-adds the Kutjevo blackbox." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4623.yml b/html/changelogs/AutoChangeLog-pr-4623.yml new file mode 100644 index 000000000000..d79a53a45b70 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4623.yml @@ -0,0 +1,4 @@ +author: "Firartix and Frans_Feiffer" +delete-after: True +changes: + - rscadd: "Readded Halloween pumpkin helmets." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4628.yml b/html/changelogs/AutoChangeLog-pr-4628.yml new file mode 100644 index 000000000000..e00fa7383896 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4628.yml @@ -0,0 +1,4 @@ +author: "realforest2001" +delete-after: True +changes: + - rscadd: "Added a big line to Nightmare survivor spawns that indicates hostility." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4699.yml b/html/changelogs/AutoChangeLog-pr-4699.yml new file mode 100644 index 000000000000..691f38c5f4e4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4699.yml @@ -0,0 +1,10 @@ +author: "Morrow, Zonespace" +delete-after: True +changes: + - rscadd: "Added objectives to hijack. You now must hold different sections of the ship to successfully launch lifeboats or pods" + - rscadd: "The areas that contribute to hijack objectives are the lifeboat pumps, astronav, and engineering" + - rscadd: "Fuel pumps now have red alert sentries" + - rscadd: "Corporate liaison evac shuttle now can be launched at any time even if evac has not been called" + - rscadd: "You can now self-destruct the ship by overloading the fusion generators in engineering once lifeboat fuel is at 100%." + - rscdel: "Removed auto launch of lifeboats and pods" + - code_imp: "Refactored EvacuationAuthority into SShijack" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4796.yml b/html/changelogs/AutoChangeLog-pr-4796.yml new file mode 100644 index 000000000000..b314142a6e81 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4796.yml @@ -0,0 +1,5 @@ +author: "BeagleGaming1" +delete-after: True +changes: + - code_imp: "Tents now hold the datum directly, instead of the typepath" + - admin: "Added a proc for staff to change tent dmm's" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4803.yml b/html/changelogs/AutoChangeLog-pr-4803.yml deleted file mode 100644 index 25bed2ce3dd5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4803.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: "fira" -delete-after: True -changes: - - bugfix: "Fixed recyclers (including Whiskey Outposts') and added the possibility to recycle crates with them." - - bugfix: "Standardized \"vend to table\" functionality of vendors, enabling it to work for Whiskey Outpost's Reqs." - - rscadd: "Whiskey Outpost vendors now contain the same items as Almayer's. WO still has spare specialist ammo on top of that." - - rscadd: "Readded delivery chute, wrap and tagger to Whiskey Outpost Reqs, letting you pack and send crates and items via disposals again." - - balance: "Whiskey Outpost supply drops should now be more interesting and impactful." - - rscadd: "Added missing Synth vendors on WO." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4811.yml b/html/changelogs/AutoChangeLog-pr-4811.yml new file mode 100644 index 000000000000..c679e21335ac --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4811.yml @@ -0,0 +1,5 @@ +author: "AndroBetel" +delete-after: True +changes: + - spellcheck: "Fixed a typo in RO rules sign." + - spellcheck: "RO mention is no more, replaced with QM." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4815.yml b/html/changelogs/AutoChangeLog-pr-4815.yml new file mode 100644 index 000000000000..029707a4b807 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4815.yml @@ -0,0 +1,4 @@ +author: "Doubleumc" +delete-after: True +changes: + - bugfix: "vehicle interiors can hear exterior noises" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4819.yml b/html/changelogs/AutoChangeLog-pr-4819.yml new file mode 100644 index 000000000000..48abe6072890 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4819.yml @@ -0,0 +1,4 @@ +author: "IowaPotatoFarmer" +delete-after: True +changes: + - rscadd: "Added new survivor presets for New Varadero to make them more visually distinct and unique to the map." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4823.yml b/html/changelogs/AutoChangeLog-pr-4823.yml new file mode 100644 index 000000000000..75e0f5807495 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4823.yml @@ -0,0 +1,4 @@ +author: "Drathek" +delete-after: True +changes: + - bugfix: "Fixed various job's entry messages having broken links to the wiki" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4825.yml b/html/changelogs/AutoChangeLog-pr-4825.yml new file mode 100644 index 000000000000..a63550514e3b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4825.yml @@ -0,0 +1,4 @@ +author: "Xander3359" +delete-after: True +changes: + - bugfix: "Fixes being able to create ghost tanks from a Broiler-T unit." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4826.yml b/html/changelogs/AutoChangeLog-pr-4826.yml new file mode 100644 index 000000000000..b06b575cb81d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4826.yml @@ -0,0 +1,4 @@ +author: "Steelpoint" +delete-after: True +changes: + - rscadd: "Corpsman can chose to optionally vend a set of armoured sterile gloves as a alternative to regular gloves. They provide full glove protection, but are otherwise an aesthetic choice." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4830.yml b/html/changelogs/AutoChangeLog-pr-4830.yml new file mode 100644 index 000000000000..2eaaf3f2081f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4830.yml @@ -0,0 +1,4 @@ +author: "fira" +delete-after: True +changes: + - admin: "Added better logging for orbital bombardment." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4831.yml b/html/changelogs/AutoChangeLog-pr-4831.yml new file mode 100644 index 000000000000..f405e983a48b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4831.yml @@ -0,0 +1,5 @@ +author: "IowaPotatoFarmer" +delete-after: True +changes: + - rscdel: "Removed the ability to build ground structures or anchor wall girders on top of xeno tunnels." + - bugfix: "Fixed wall girders being anchorable on shuttle tiles." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4832.yml b/html/changelogs/AutoChangeLog-pr-4832.yml new file mode 100644 index 000000000000..9f9570a6cc47 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4832.yml @@ -0,0 +1,4 @@ +author: "blackdragonTOW" +delete-after: True +changes: + - imageadd: "Changed nanotrasen cashcard icon to W-Y" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4834.yml b/html/changelogs/AutoChangeLog-pr-4834.yml new file mode 100644 index 000000000000..7778f38607b4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4834.yml @@ -0,0 +1,4 @@ +author: "Alexguinea" +delete-after: True +changes: + - rscadd: "Added toners to the rec vendor" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4835.yml b/html/changelogs/AutoChangeLog-pr-4835.yml new file mode 100644 index 000000000000..6fcce13e1ece --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4835.yml @@ -0,0 +1,4 @@ +author: "fira" +delete-after: True +changes: + - rscdel: "Removed unused magnet and mass driver legacy SS13 machinery." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4838.yml b/html/changelogs/AutoChangeLog-pr-4838.yml new file mode 100644 index 000000000000..0bde8de19bd9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4838.yml @@ -0,0 +1,4 @@ +author: "SpartanBobby" +delete-after: True +changes: + - maptweak: "Alot of changes to big reds admin area, including new windows, prop placement, room detailing, new doors" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4841.yml b/html/changelogs/AutoChangeLog-pr-4841.yml new file mode 100644 index 000000000000..d6f6b2fae886 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4841.yml @@ -0,0 +1,4 @@ +author: "Releasethesea" +delete-after: True +changes: + - balance: "Makes it so that Pill packets fit in helmets" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4845.yml b/html/changelogs/AutoChangeLog-pr-4845.yml new file mode 100644 index 000000000000..6f72d4bf6272 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4845.yml @@ -0,0 +1,4 @@ +author: "fira" +delete-after: True +changes: + - bugfix: "Fixed being able to put anything in your boots. You're not wizards!" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4847.yml b/html/changelogs/AutoChangeLog-pr-4847.yml new file mode 100644 index 000000000000..492ab7973cb1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4847.yml @@ -0,0 +1,4 @@ +author: "567Turtle" +delete-after: True +changes: + - soundadd: "New whistle sound effect" \ No newline at end of file diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml index 3706601022a2..2d89cade6388 100644 --- a/html/changelogs/archive/2023-11.yml +++ b/html/changelogs/archive/2023-11.yml @@ -36,3 +36,15 @@ - rscadd: Changed the plain glass in Working Joe presets to Reinforced Glass. sleepynecrons: - imagedel: shrinks the type-19 SMG stick magazine to a more reasonable size +2023-11-05: + fira: + - bugfix: Fixed recyclers (including Whiskey Outposts') and added the possibility + to recycle crates with them. + - bugfix: Standardized "vend to table" functionality of vendors, enabling it to + work for Whiskey Outpost's Reqs. + - rscadd: Whiskey Outpost vendors now contain the same items as Almayer's. WO still + has spare specialist ammo on top of that. + - rscadd: Readded delivery chute, wrap and tagger to Whiskey Outpost Reqs, letting + you pack and send crates and items via disposals again. + - balance: Whiskey Outpost supply drops should now be more interesting and impactful. + - rscadd: Added missing Synth vendors on WO. diff --git a/icons/misc/events/pumpkins.dmi b/icons/misc/events/pumpkins.dmi new file mode 100644 index 000000000000..e3087e7c444c Binary files /dev/null and b/icons/misc/events/pumpkins.dmi differ diff --git a/icons/obj/items/items.dmi b/icons/obj/items/items.dmi index 076a93feb544..52b53208e226 100644 Binary files a/icons/obj/items/items.dmi and b/icons/obj/items/items.dmi differ diff --git a/icons/obj/structures/machinery/fusion_eng.dmi b/icons/obj/structures/machinery/fusion_eng.dmi index 038fae342b64..4d42baac7255 100644 Binary files a/icons/obj/structures/machinery/fusion_eng.dmi and b/icons/obj/structures/machinery/fusion_eng.dmi differ diff --git a/icons/obj/structures/tents_folded.dmi b/icons/obj/structures/tents_folded.dmi index e9f4555ae6a1..e93702d7b2f9 100644 Binary files a/icons/obj/structures/tents_folded.dmi and b/icons/obj/structures/tents_folded.dmi differ diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm index bf9fc7771858..b13a1d684262 100644 --- a/maps/map_files/BigRed/BigRed.dmm +++ b/maps/map_files/BigRed/BigRed.dmm @@ -11058,21 +11058,10 @@ /turf/closed/wall/solaris/rock, /area/bigredv2/outside/sw) "aFd" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4; - health = 80 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/turf/open/jungle{ - bushes_spawn = 0; - icon_state = "grass_impenetrable" +/obj/structure/flora/jungle/plantbot1{ + pixel_y = 10 }, +/turf/open/jungle, /area/bigredv2/outside/admin_building) "aFf" = ( /obj/structure/closet/secure_closet/scientist, @@ -12526,10 +12515,7 @@ "aIY" = ( /obj/structure/surface/table, /obj/effect/landmark/objective_landmark/medium, -/turf/open/floor{ - dir = 8; - icon_state = "carpet15-15" - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aIZ" = ( /obj/effect/decal/warning_stripes{ @@ -14231,7 +14217,6 @@ /area/bigredv2/outside/admin_building) "aNC" = ( /obj/structure/machinery/computer/station_alert, -/obj/structure/machinery/camera/autoname, /obj/structure/surface/table, /turf/open/floor{ icon_state = "white" @@ -14286,6 +14271,7 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 10 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ dir = 9; icon_state = "darkred2" @@ -14298,6 +14284,7 @@ }, /area/bigredv2/outside/admin_building) "aNK" = ( +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ dir = 9; icon_state = "darkred2" @@ -14321,6 +14308,7 @@ /area/bigredv2/outside/admin_building) "aNN" = ( /obj/structure/machinery/vending/coffee, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ dir = 1; icon_state = "darkred2" @@ -14342,6 +14330,9 @@ /area/bigredv2/outside/admin_building) "aNQ" = ( /obj/structure/bed, +/obj/item/bedsheet/brown{ + layer = 3.1 + }, /turf/open/floor{ icon_state = "wood" }, @@ -15145,16 +15136,22 @@ }, /area/bigredv2/outside/admin_building) "aPP" = ( -/turf/open/floor{ +/obj/structure/stairs/perspective{ dir = 1; - icon_state = "rampbottom" + icon_state = "p_stair_full" + }, +/turf/open/floor{ + icon_state = "dark" }, /area/bigredv2/outside/admin_building) "aPQ" = ( /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor{ +/obj/structure/stairs/perspective{ dir = 1; - icon_state = "rampbottom" + icon_state = "p_stair_full" + }, +/turf/open/floor{ + icon_state = "dark" }, /area/bigredv2/outside/admin_building) "aPS" = ( @@ -15182,7 +15179,17 @@ }, /area/bigredv2/outside/admin_building) "aPW" = ( -/obj/structure/coatrack, +/obj/structure/coatrack{ + pixel_x = -5; + pixel_y = 13 + }, +/obj/item/clothing/shoes/dress{ + pixel_y = -13 + }, +/obj/item/clothing/under/suit_jacket/trainee{ + pixel_x = -6; + pixel_y = 15 + }, /turf/open/floor{ icon_state = "wood" }, @@ -15653,6 +15660,7 @@ name = "Storm Shutters"; pixel_y = -32 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ icon_state = "darkred2" }, @@ -15987,9 +15995,8 @@ }, /area/bigredv2/outside/admin_building) "aRZ" = ( -/obj/structure/machinery/door/airlock/almayer/command/colony{ - dir = 1; - name = "\improper Operations EVA" +/obj/structure/machinery/door/airlock/almayer/maint{ + dir = 1 }, /turf/open/floor{ icon_state = "delivery" @@ -16309,6 +16316,14 @@ }, /area/bigredv2/outside/general_store) "aSQ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_y = -1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, /obj/structure/machinery/door/airlock/almayer/command/colony{ dir = 1; name = "\improper Operations" @@ -16319,6 +16334,8 @@ /area/bigredv2/outside/admin_building) "aSR" = ( /obj/structure/pipes/vents/pump, +/obj/structure/surface/rack, +/obj/item/weapon/gun/smg/mp27, /turf/open/floor{ dir = 8; icon_state = "redcorner" @@ -16355,6 +16372,7 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, +/obj/item/prop/alien/hugger, /turf/open/floor{ dir = 1; icon_state = "darkred2" @@ -16370,8 +16388,14 @@ }, /area/bigredv2/outside/admin_building) "aSX" = ( -/obj/structure/machinery/suit_storage_unit/carbon_unit, -/turf/open/floor/plating, +/obj/structure/pipes/standard/simple/hidden/green, +/obj/structure/stairs/perspective{ + dir = 1; + icon_state = "p_stair_full" + }, +/turf/open/floor{ + icon_state = "white" + }, /area/bigredv2/outside/admin_building) "aSZ" = ( /obj/structure/machinery/power/apc{ @@ -16384,10 +16408,12 @@ /turf/open/floor/plating, /area/bigredv2/outside/admin_building) "aTb" = ( -/obj/structure/surface/table/woodentable, -/obj/effect/landmark/objective_landmark/close, +/obj/structure/stairs/perspective{ + dir = 1; + icon_state = "p_stair_full" + }, /turf/open/floor{ - icon_state = "wood" + icon_state = "white" }, /area/bigredv2/outside/admin_building) "aTc" = ( @@ -16696,7 +16722,10 @@ }, /area/bigredv2/outside/general_store) "aTU" = ( -/obj/structure/machinery/message_server, +/obj/structure/prop/server_equipment/yutani_server{ + density = 0; + pixel_y = 16 + }, /turf/open/floor{ icon_state = "podhatchfloor" }, @@ -16706,12 +16735,6 @@ icon_state = "podhatchfloor" }, /area/bigredv2/outside/admin_building) -"aTX" = ( -/obj/structure/machinery/computer3/server, -/turf/open/floor{ - icon_state = "dark" - }, -/area/bigredv2/outside/admin_building) "aTY" = ( /obj/structure/pipes/standard/simple/hidden/green, /turf/open/floor{ @@ -16720,8 +16743,6 @@ }, /area/bigredv2/outside/admin_building) "aTZ" = ( -/obj/structure/surface/rack, -/obj/item/weapon/gun/smg/mp27, /obj/structure/machinery/light{ dir = 4 }, @@ -16747,28 +16768,34 @@ }, /area/bigredv2/outside/admin_building) "aUd" = ( -/obj/structure/machinery/alarm{ - dir = 1; - pixel_y = -30 +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 5; + icon_state = "darkred2" }, -/turf/open/floor/plating, /area/bigredv2/outside/admin_building) "aUe" = ( /obj/structure/machinery/light{ dir = 4 }, +/obj/structure/machinery/alarm{ + dir = 1; + pixel_y = -30 + }, +/obj/structure/machinery/suit_storage_unit/carbon_unit, /turf/open/floor/plating, /area/bigredv2/outside/admin_building) "aUf" = ( /obj/effect/landmark/good_item, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ dir = 8; icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "aUg" = ( -/obj/structure/surface/table/woodentable, -/obj/item/device/camera, +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/effect/landmark/objective_landmark/close, /turf/open/floor{ icon_state = "wood" }, @@ -17148,12 +17175,10 @@ dir = 4 }, /turf/open/floor{ - icon_state = "dark" + icon_state = "podhatchfloor" }, /area/bigredv2/outside/admin_building) "aVk" = ( -/obj/structure/surface/rack, -/obj/item/weapon/gun/pistol/mod88, /turf/open/floor{ dir = 8; icon_state = "redcorner" @@ -17382,13 +17407,11 @@ dir = 1; network = list("interrogation") }, -/obj/structure/machinery/computer3/server, /turf/open/floor{ icon_state = "podhatchfloor" }, /area/bigredv2/outside/admin_building) "aVT" = ( -/obj/structure/machinery/computer3/server, /turf/open/floor{ dir = 9; icon_state = "darkblue2" @@ -17404,7 +17427,6 @@ /obj/structure/machinery/light{ dir = 1 }, -/obj/structure/machinery/photocopier, /turf/open/floor{ dir = 1; icon_state = "darkblue2" @@ -17420,13 +17442,16 @@ phone_id = "Operations"; pixel_y = 24 }, +/obj/item/prop/alien/hugger, /turf/open/floor{ dir = 1; icon_state = "darkblue2" }, /area/bigredv2/outside/admin_building) "aVX" = ( -/obj/structure/machinery/computer/cameras, +/obj/structure/machinery/computer/cameras{ + dir = 8 + }, /obj/structure/surface/table, /turf/open/floor{ dir = 5; @@ -17608,7 +17633,6 @@ }, /area/bigredv2/outside/admin_building) "aWD" = ( -/obj/structure/machinery/computer3/server, /turf/open/floor{ dir = 8; icon_state = "darkblue2" @@ -17628,7 +17652,9 @@ }, /area/bigredv2/outside/admin_building) "aWG" = ( -/obj/structure/machinery/computer/communications, +/obj/structure/machinery/computer/communications{ + dir = 8 + }, /obj/structure/surface/table, /turf/open/floor{ dir = 6; @@ -17636,10 +17662,10 @@ }, /area/bigredv2/outside/admin_building) "aWH" = ( -/obj/structure/surface/table/woodentable, -/obj/item/device/pinpointer, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ - icon_state = "wood" + dir = 1; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "aWI" = ( @@ -17797,6 +17823,10 @@ pixel_y = 32 }, /obj/effect/landmark/good_item, +/obj/structure/stairs/perspective{ + dir = 10; + icon_state = "p_stair_full" + }, /turf/open/floor{ dir = 1; icon_state = "darkred2" @@ -17811,12 +17841,9 @@ }, /area/bigredv2/outside/admin_building) "aXk" = ( -/obj/structure/machinery/light{ - dir = 4 - }, +/obj/item/prop/alien/hugger, /turf/open/floor{ - dir = 4; - icon_state = "darkred2" + icon_state = "white" }, /area/bigredv2/outside/admin_building) "aXl" = ( @@ -17976,16 +18003,17 @@ /turf/open/floor/plating, /area/bigredv2/outside/cargo) "aXL" = ( +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ - dir = 10; + dir = 8; icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "aXM" = ( -/obj/structure/pipes/standard/simple/hidden/green, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ - dir = 8; - icon_state = "darkredcorners2" + dir = 4; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "aXN" = ( @@ -17994,12 +18022,16 @@ density = 0; req_one_access_txt = "200" }, +/obj/structure/machinery/light{ + dir = 8 + }, /turf/open/floor{ dir = 10; icon_state = "darkblue2" }, /area/bigredv2/outside/admin_building) "aXO" = ( +/obj/item/prop/alien/hugger, /turf/open/floor{ icon_state = "darkblue2" }, @@ -18082,22 +18114,23 @@ /area/bigredv2/outside/cargo) "aYh" = ( /obj/structure/pipes/standard/simple/hidden/green, -/obj/structure/machinery/light{ - dir = 8 - }, /turf/open/floor{ dir = 8; - icon_state = "darkred2" + icon_state = "darkredcorners2" }, /area/bigredv2/outside/admin_building) "aYi" = ( /obj/effect/spawner/random/toolbox, +/obj/structure/platform_decoration, /turf/open/floor{ icon_state = "dark" }, /area/bigredv2/outside/admin_building) "aYk" = ( /obj/effect/landmark/survivor_spawner, +/obj/structure/platform_decoration{ + dir = 1 + }, /turf/open/floor{ icon_state = "dark" }, @@ -18119,23 +18152,33 @@ }, /area/bigredv2/outside/admin_building) "aYo" = ( -/obj/structure/machinery/door/airlock/almayer/generic{ - name = "\improper Operations Toilet" +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_y = -1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ - icon_state = "delivery" + dir = 5; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "aYp" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + name = "\improper Operations Toilet" + }, /turf/open/floor{ - icon_state = "freezerfloor" + icon_state = "delivery" }, /area/bigredv2/outside/admin_building) "aYq" = ( -/obj/structure/machinery/light{ - dir = 1 - }, /obj/effect/landmark/objective_landmark/far, +/obj/structure/sink{ + pixel_x = 1; + pixel_y = 20 + }, +/obj/structure/mirror{ + pixel_y = 29 + }, /turf/open/floor{ icon_state = "freezerfloor" }, @@ -18144,6 +18187,10 @@ /obj/structure/toilet{ dir = 8 }, +/obj/item/prop/alien/hugger, +/obj/structure/machinery/light{ + dir = 4 + }, /turf/open/floor{ icon_state = "freezerfloor" }, @@ -18263,21 +18310,25 @@ }, /area/bigredv2/outside/c) "aYL" = ( +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ - dir = 8; - icon_state = "carpet6-2" + icon_state = "dark" }, /area/bigredv2/outside/admin_building) "aYM" = ( +/obj/item/prop/alien/hugger, /turf/open/floor{ - dir = 8; - icon_state = "carpet14-10" + dir = 4; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "aYN" = ( +/obj/structure/machinery/door/airlock/almayer/command/colony{ + dir = 1; + name = "\improper Operations Meeting Room" + }, /turf/open/floor{ - dir = 8; - icon_state = "carpet10-8" + icon_state = "delivery" }, /area/bigredv2/outside/admin_building) "aYO" = ( @@ -18294,6 +18345,7 @@ name = "Weyland-Yutani Automatic Teller Machine"; pixel_y = 30 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ dir = 1; icon_state = "darkred2" @@ -18303,6 +18355,7 @@ /obj/structure/machinery/light{ dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ dir = 1; icon_state = "darkred2" @@ -18479,9 +18532,9 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/item/prop/alien/hugger, /turf/open/floor{ - dir = 8; - icon_state = "carpet7-3" + icon_state = "wood" }, /area/bigredv2/outside/admin_building) "aZA" = ( @@ -18492,16 +18545,10 @@ /area/bigredv2/outside/admin_building) "aZB" = ( /obj/structure/bed/chair/comfy/black, -/turf/open/floor{ - dir = 8; - icon_state = "carpet15-15" - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aZC" = ( -/turf/open/floor{ - dir = 8; - icon_state = "carpet11-12" - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aZE" = ( /turf/open/floor{ @@ -18587,27 +18634,26 @@ /turf/open/floor, /area/bigredv2/outside/cargo) "aZS" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/structure/machinery/camera/autoname{ + dir = 1 + }, /turf/open/floor{ - dir = 8; - icon_state = "carpet7-3" + icon_state = "white" }, /area/bigredv2/outside/admin_building) "aZT" = ( /obj/structure/surface/table, -/obj/structure/machinery/computer3/laptop/secure_data, -/turf/open/floor{ - dir = 8; - icon_state = "carpet15-15" - }, +/obj/structure/prop/server_equipment/laptop/on, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aZU" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/bed/chair/comfy/blue{ dir = 8 }, -/turf/open/floor{ - dir = 8; - icon_state = "carpet15-15" - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aZW" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -18831,13 +18877,10 @@ }, /area/bigredv2/outside/cargo) "baG" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/bed/chair/comfy/blue{ dir = 4 }, -/turf/open/floor{ - dir = 8; - icon_state = "carpet15-15" - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "baI" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/comdoor/colony{ @@ -18849,6 +18892,7 @@ /area/bigredv2/outside/admin_building) "baJ" = ( /obj/structure/pipes/standard/simple/hidden/green, +/obj/effect/decal/cleanable/dirt, /turf/open/floor, /area/bigredv2/outside/admin_building) "baK" = ( @@ -18989,10 +19033,7 @@ "bbj" = ( /obj/structure/surface/table, /obj/item/alienjar, -/turf/open/floor{ - dir = 8; - icon_state = "carpet15-15" - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "bbk" = ( /obj/structure/machinery/light{ @@ -19018,7 +19059,9 @@ /area/bigredv2/outside/admin_building) "bbm" = ( /obj/structure/surface/table, -/obj/structure/machinery/computer/med_data/laptop, +/obj/structure/machinery/computer/med_data/laptop{ + dir = 4 + }, /turf/open/floor{ dir = 8; icon_state = "carpet15-15" @@ -19033,11 +19076,14 @@ }, /area/bigredv2/outside/admin_building) "bbo" = ( -/obj/structure/bed/chair, +/obj/structure/bed/chair/comfy/blue, +/obj/effect/decal/cleanable/dirt, /turf/open/floor, /area/bigredv2/outside/admin_building) "bbp" = ( -/obj/structure/bed/chair, +/obj/structure/bed/sofa/south/grey/left{ + pixel_y = 6 + }, /obj/structure/machinery/atm{ name = "Weyland-Yutani Automatic Teller Machine"; pixel_y = 30 @@ -19045,7 +19091,9 @@ /turf/open/floor, /area/bigredv2/outside/admin_building) "bbq" = ( -/obj/structure/bed/chair, +/obj/structure/bed/sofa/south/grey{ + pixel_y = 6 + }, /obj/structure/machinery/light{ dir = 1 }, @@ -19055,6 +19103,7 @@ /obj/structure/surface/table, /obj/item/storage/photo_album, /obj/item/tool/pen/red, +/obj/effect/decal/cleanable/dirt, /turf/open/floor, /area/bigredv2/outside/admin_building) "bbs" = ( @@ -19276,14 +19325,16 @@ }, /area/bigredv2/outside/admin_building) "bbY" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/bed/chair/comfy/blue, /turf/open/floor{ icon_state = "wood" }, /area/bigredv2/outside/admin_building) "bbZ" = ( /obj/structure/surface/table, -/obj/structure/machinery/computer/cameras/wooden_tv, +/obj/structure/machinery/computer/cameras/wooden_tv{ + dir = 8 + }, /obj/structure/machinery/light{ dir = 4 }, @@ -19494,53 +19545,47 @@ /obj/structure/pipes/vents/pump{ dir = 4 }, -/turf/open/floor{ - dir = 8; - icon_state = "carpet15-15" - }, +/obj/item/prop/alien/hugger, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "bcF" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/bed/chair/comfy/blue{ dir = 8 }, /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor{ - dir = 8; - icon_state = "carpet15-15" - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "bcG" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor{ - dir = 8; - icon_state = "carpet11-12" - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "bcH" = ( /obj/structure/pipes/standard/simple/hidden/green{ - dir = 10 + dir = 4 + }, +/turf/open/floor{ + icon_state = "wood" }, -/turf/open/floor, /area/bigredv2/outside/admin_building) "bcI" = ( /obj/structure/pipes/standard/manifold/hidden/green{ dir = 8 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ dir = 8; icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "bcJ" = ( -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 4 - }, +/obj/structure/pipes/standard/simple/hidden/green, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ - dir = 4; + dir = 8; icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) @@ -19704,45 +19749,38 @@ }, /area/bigredv2/outside/c) "bdl" = ( +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ - dir = 8; - icon_state = "carpet9-4" + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "bdm" = ( -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 5 +/obj/structure/surface/table/woodentable, +/turf/open/floor{ + icon_state = "wood" }, -/turf/open/floor, /area/bigredv2/outside/admin_building) "bdn" = ( -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 4 - }, -/obj/structure/machinery/door/airlock/almayer/command/colony{ - name = "\improper Operations Meeting Room" +/obj/structure/machinery/light{ + dir = 1 }, +/obj/structure/surface/table/woodentable, +/obj/item/device/camera, /turf/open/floor{ - icon_state = "delivery" + icon_state = "wood" }, /area/bigredv2/outside/admin_building) "bdo" = ( -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 9 - }, /turf/open/floor{ - icon_state = "dark" + dir = 10; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "bdp" = ( -/obj/item/device/radio/intercom{ - freerange = 1; - frequency = 1469; - name = "General Listening Channel"; - pixel_x = 30 - }, +/obj/effect/decal/cleanable/dirt, +/obj/item/prop/alien/hugger, /turf/open/floor{ - dir = 4; + dir = 6; icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) @@ -19755,6 +19793,7 @@ /area/bigredv2/outside/admin_building) "bdr" = ( /obj/structure/machinery/vending/snack, +/obj/effect/decal/cleanable/dirt, /turf/open/floor, /area/bigredv2/outside/admin_building) "bds" = ( @@ -19877,7 +19916,9 @@ /area/bigredv2/outside/cargo) "bdO" = ( /obj/structure/machinery/vending/coffee, -/turf/open/floor, +/turf/open/floor{ + icon_state = "wood" + }, /area/bigredv2/outside/admin_building) "bdP" = ( /obj/structure/machinery/photocopier, @@ -27127,6 +27168,15 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves_se) +"bMa" = ( +/obj/structure/surface/rack, +/obj/item/weapon/gun/pistol/mod88, +/obj/item/weapon/gun/pistol/mod88, +/turf/open/floor{ + dir = 8; + icon_state = "redcorner" + }, +/area/bigredv2/outside/admin_building) "bMf" = ( /turf/open/floor{ icon_state = "asteroidwarning" @@ -27166,6 +27216,10 @@ icon_state = "mars_cave_18" }, /area/bigredv2/outside/lz2_west_cas) +"bQe" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/bigredv2/outside/admin_building) "bQi" = ( /turf/open/floor{ icon_state = "darkish" @@ -27278,10 +27332,7 @@ "caN" = ( /obj/structure/surface/table, /obj/effect/landmark/objective_landmark/close, -/turf/open/floor{ - dir = 8; - icon_state = "carpet15-15" - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "ccP" = ( /obj/structure/surface/table, @@ -27489,6 +27540,10 @@ /obj/structure/surface/table/reinforced/prison, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"czS" = ( +/obj/effect/landmark/objective_landmark/medium, +/turf/open/floor/plating, +/area/bigredv2/outside/admin_building) "czV" = ( /obj/item/tool/pickaxe, /turf/open/mars_cave{ @@ -27588,6 +27643,23 @@ /obj/item/paper/bigred/smuggling, /turf/open/floor, /area/bigredv2/outside/cargo) +"cJa" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1 + }, +/obj/structure/machinery/door/airlock/almayer/command/colony{ + dir = 1; + name = "\improper Operations" + }, +/turf/open/floor{ + icon_state = "delivery" + }, +/area/bigredv2/outside/admin_building) "cJh" = ( /obj/structure/bed/chair{ dir = 8; @@ -27701,6 +27773,14 @@ "cVY" = ( /turf/open/mars, /area/bigredv2/outside/space_port_lz2) +"cXG" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor{ + icon_state = "wood" + }, +/area/bigredv2/outside/admin_building) "cYI" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -27770,6 +27850,16 @@ icon_state = "mars_cave_2" }, /area/bigredv2/outside/filtration_cave_cas) +"din" = ( +/obj/structure/machinery/blackbox_recorder, +/obj/item/prop/almayer/flight_recorder/colony{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/open/floor{ + icon_state = "podhatchfloor" + }, +/area/bigredv2/outside/admin_building) "dlr" = ( /obj/effect/landmark/static_comms/net_two, /turf/open/floor, @@ -27921,6 +28011,14 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"dBm" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "dBE" = ( /obj/item/trash/cigbutt/cigarbutt{ pixel_x = 2; @@ -28354,6 +28452,12 @@ }, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"eoU" = ( +/turf/open/floor/almayer{ + dir = 1; + icon_state = "w-y2" + }, +/area/bigredv2/outside/admin_building) "epe" = ( /turf/open/floor{ dir = 1; @@ -28640,6 +28744,15 @@ icon_state = "mars_dirt_7" }, /area/bigredv2/caves/mining) +"eSN" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "eTj" = ( /obj/structure/reagent_dispensers/fueltank/gas, /turf/open/mars{ @@ -28773,6 +28886,15 @@ /obj/effect/landmark/static_comms/net_two, /turf/open/floor, /area/bigredv2/outside/engineering) +"fhy" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/turf/open/floor{ + dir = 8; + icon_state = "carpet15-15" + }, +/area/bigredv2/outside/admin_building) "fhI" = ( /obj/effect/landmark/hunter_secondary, /turf/open/mars_cave{ @@ -29108,6 +29230,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"fPB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/bigredv2/outside/admin_building) "fQv" = ( /obj/structure/prop/invuln/minecart_tracks{ desc = "A heavy duty power cable for high voltage applications"; @@ -29382,8 +29508,8 @@ /area/bigredv2/caves/lambda/breakroom) "gvI" = ( /obj/structure/transmitter/colony_net{ - do_not_disturb = 1; dir = 4; + do_not_disturb = 1; phone_category = "Lambda Labs"; phone_color = "red"; phone_id = "Secure Storage"; @@ -29563,6 +29689,19 @@ icon_state = "darkblue2" }, /area/bigredv2/caves/eta/research) +"gWU" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S"; + pixel_y = -1 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "gXp" = ( /turf/open/mars_cave{ icon_state = "mars_cave_6" @@ -29652,6 +29791,15 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/bigredv2/caves/eta/storage) +"hkY" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkred2" + }, +/area/bigredv2/outside/admin_building) "hmm" = ( /turf/open/floor{ icon_state = "delivery" @@ -29757,6 +29905,13 @@ icon_state = "dark" }, /area/bigredv2/caves/lambda/research) +"hxs" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/effect/landmark/objective_landmark/far, +/turf/open/floor{ + icon_state = "wood" + }, +/area/bigredv2/outside/admin_building) "hyv" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, /obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, @@ -30289,6 +30444,17 @@ icon_state = "darkgreencorners2" }, /area/bigredv2/caves/eta/research) +"iDT" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 1; + icon_state = "darkredcorners2" + }, +/area/bigredv2/outside/admin_building) "iDW" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, /obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, @@ -30455,6 +30621,14 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/filtration_plant) +"iZc" = ( +/obj/structure/stairs/perspective{ + icon_state = "p_stair_full" + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "iZh" = ( /obj/effect/decal/warning_stripes{ icon_state = "E-corner" @@ -30589,6 +30763,12 @@ /obj/structure/reagent_dispensers/fueltank/gas, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"jna" = ( +/obj/item/prop/alien/hugger, +/turf/open/floor{ + icon_state = "darkred2" + }, +/area/bigredv2/outside/admin_building) "jnR" = ( /turf/open/floor{ dir = 9; @@ -30696,8 +30876,13 @@ }, /area/bigredv2/caves/lambda/virology) "jAm" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/effect/landmark/objective_landmark/far, +/obj/structure/coatrack{ + pixel_x = -8; + pixel_y = 16 + }, +/obj/item/clothing/shoes/black{ + pixel_y = -7 + }, /turf/open/floor{ icon_state = "wood" }, @@ -31192,6 +31377,14 @@ icon_state = "mars_dirt_7" }, /area/bigredv2/caves/mining) +"khP" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "khR" = ( /obj/structure/machinery/floodlight, /turf/open/mars_cave{ @@ -31417,6 +31610,13 @@ icon_state = "asteroidfloor" }, /area/bigredv2/outside/space_port_lz2) +"kIv" = ( +/obj/structure/curtain/red, +/obj/item/prop/alien/hugger, +/turf/open/floor{ + icon_state = "wood" + }, +/area/bigredv2/outside/admin_building) "kIW" = ( /obj/structure/fence, /turf/open/floor{ @@ -31510,6 +31710,10 @@ "kRo" = ( /turf/open/floor/plating, /area/bigredv2/outside/telecomm/warehouse) +"kRK" = ( +/obj/structure/window/framed/solaris/reinforced, +/turf/open/floor/plating, +/area/bigredv2/outside/admin_building) "kSm" = ( /obj/item/storage/belt/grenade, /obj/structure/closet/crate, @@ -32141,13 +32345,9 @@ }, /area/bigredv2/caves/mining) "mrH" = ( -/obj/structure/machinery/blackbox_recorder, -/obj/item/prop/almayer/flight_recorder/colony{ - pixel_x = -6; - pixel_y = 10 - }, +/obj/structure/machinery/computer3/server, /turf/open/floor{ - icon_state = "dark" + icon_state = "podhatchfloor" }, /area/bigredv2/outside/admin_building) "mrS" = ( @@ -32263,6 +32463,16 @@ icon_state = "mars_cave_15" }, /area/bigredv2/outside/lz1_north_cas) +"mEH" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 1; + icon_state = "darkred2" + }, +/area/bigredv2/outside/admin_building) "mFT" = ( /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /obj/effect/landmark/corpsespawner/russian, @@ -32280,7 +32490,7 @@ "mGS" = ( /obj/effect/landmark/static_comms/net_one, /turf/open/floor{ - icon_state = "dark" + icon_state = "podhatchfloor" }, /area/bigredv2/outside/admin_building) "mHp" = ( @@ -32371,6 +32581,18 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/c) +"mST" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1; + pixel_y = -1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 8; + icon_state = "darkred2" + }, +/area/bigredv2/outside/admin_building) "mUy" = ( /turf/open/mars_cave{ icon_state = "mars_cave_7" @@ -32482,6 +32704,11 @@ icon_state = "mars_dirt_6" }, /area/bigredv2/outside/lz2_south_cas) +"nky" = ( +/obj/structure/machinery/vending/coffee, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/bigredv2/outside/admin_building) "nkQ" = ( /turf/open/mars_cave{ icon_state = "mars_cave_23" @@ -32584,6 +32811,16 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"nuw" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "nwS" = ( /obj/item/ore{ pixel_x = -7; @@ -32843,6 +33080,14 @@ /obj/item/tool/warning_cone, /turf/open/mars, /area/bigredv2/outside/s) +"nZD" = ( +/obj/structure/platform_decoration{ + dir = 8 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "nZK" = ( /obj/item/ore/diamond, /obj/item/stack/sheet/mineral/diamond{ @@ -32984,6 +33229,12 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"ole" = ( +/turf/open/floor/almayer{ + dir = 1; + icon_state = "w-y0" + }, +/area/bigredv2/outside/admin_building) "olT" = ( /obj/effect/landmark/corpsespawner/engineer, /turf/open/shuttle/escapepod{ @@ -33204,12 +33455,30 @@ icon_state = "vault" }, /area/bigredv2/outside/general_offices) +"oDW" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkred2" + }, +/area/bigredv2/outside/admin_building) "oEJ" = ( /obj/structure/surface/table, /obj/effect/spawner/random/toolbox, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, /turf/open/floor, /area/bigredv2/outside/cargo) +"oFY" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/obj/item/prop/alien/hugger, +/turf/open/floor{ + dir = 8; + icon_state = "darkred2" + }, +/area/bigredv2/outside/admin_building) "oIc" = ( /obj/effect/decal/cleanable/blood{ base_icon = 'icons/obj/items/weapons/grenade.dmi'; @@ -33378,6 +33647,16 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves_sw) +"oWe" = ( +/obj/structure/machinery/photocopier{ + density = 0; + pixel_y = 16 + }, +/turf/open/floor{ + dir = 1; + icon_state = "darkblue2" + }, +/area/bigredv2/outside/admin_building) "oWC" = ( /obj/structure/prop/invuln/minecart_tracks{ desc = "A heavy duty power cable for high voltage applications"; @@ -33500,6 +33779,12 @@ icon_state = "mars_dirt_10" }, /area/bigredv2/outside/filtration_plant) +"pdG" = ( +/obj/item/prop/alien/hugger, +/turf/open/floor{ + icon_state = "wood" + }, +/area/bigredv2/outside/admin_building) "pdN" = ( /obj/effect/landmark/nightmare{ insert_tag = "lz1entrance" @@ -33653,6 +33938,31 @@ icon_state = "mars_cave_14" }, /area/bigredv2/caves/mining) +"pxH" = ( +/obj/structure/platform_decoration{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) +"pyU" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_y = -1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "pBD" = ( /turf/open/floor{ dir = 4; @@ -33756,6 +34066,16 @@ icon_state = "darkred2" }, /area/bigredv2/caves/eta/research) +"pNU" = ( +/obj/structure/bed, +/obj/item/prop/alien/hugger, +/obj/item/bedsheet/brown{ + layer = 3.1 + }, +/turf/open/floor{ + icon_state = "wood" + }, +/area/bigredv2/outside/admin_building) "pOL" = ( /obj/structure/closet/crate/miningcar/yellow, /turf/open/mars_cave{ @@ -34060,6 +34380,12 @@ icon_state = "mars_dirt_7" }, /area/bigredv2/caves/mining) +"qoN" = ( +/obj/structure/pipes/standard/manifold/hidden/green, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "qpn" = ( /obj/item/tool/warning_cone{ pixel_x = -6 @@ -34126,6 +34452,16 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"qyi" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkredcorners2" + }, +/area/bigredv2/outside/admin_building) "qzO" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /obj/structure/machinery/door/poddoor/almayer/closed{ @@ -34332,6 +34668,13 @@ icon_state = "mars_cave_17" }, /area/bigredv2/caves/mining) +"qXi" = ( +/obj/structure/surface/table/woodentable, +/obj/item/device/pinpointer, +/turf/open/floor{ + icon_state = "wood" + }, +/area/bigredv2/outside/admin_building) "qYY" = ( /obj/structure/prop/invuln/minecart_tracks{ dir = 8 @@ -34508,6 +34851,16 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves/mining) +"rpI" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + layer = 2.5 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkred2" + }, +/area/bigredv2/outside/admin_building) "rqa" = ( /obj/structure/tunnel{ id = "hole4" @@ -35229,6 +35582,15 @@ icon_state = "delivery" }, /area/bigredv2/caves_lambda) +"szi" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "darkred2" + }, +/area/bigredv2/outside/admin_building) "szw" = ( /turf/open/mars_cave{ icon_state = "mars_dirt_6" @@ -35351,7 +35713,7 @@ }, /area/bigredv2/caves_sw) "sLS" = ( -/obj/effect/landmark/objective_landmark/medium, +/obj/structure/machinery/suit_storage_unit/carbon_unit, /turf/open/floor/plating, /area/bigredv2/outside/admin_building) "sNQ" = ( @@ -35390,6 +35752,17 @@ icon_state = "mars_cave_23" }, /area/bigredv2/outside/lz1_telecomm_cas) +"sRy" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/structure/machinery/door/airlock/almayer/command/colony{ + name = "\improper Operations Meeting Room" + }, +/turf/open/floor{ + icon_state = "delivery" + }, +/area/bigredv2/outside/admin_building) "sSU" = ( /turf/open/mars_cave{ icon_state = "mars_cave_19" @@ -35460,6 +35833,12 @@ icon_state = "dark" }, /area/bigredv2/caves/eta/xenobiology) +"tap" = ( +/obj/structure/machinery/message_server, +/turf/open/floor{ + icon_state = "podhatchfloor" + }, +/area/bigredv2/outside/admin_building) "tcb" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/pizzabox/meat, @@ -35625,6 +36004,11 @@ icon_state = "mars_dirt_4" }, /area/bigredv2/caves_research) +"toA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/prop/alien/hugger, +/turf/open/floor, +/area/bigredv2/outside/admin_building) "tpR" = ( /obj/structure/bed/chair{ dir = 4; @@ -35778,6 +36162,12 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"tBD" = ( +/turf/open/floor/almayer{ + dir = 1; + icon_state = "w-y1" + }, +/area/bigredv2/outside/admin_building) "tBK" = ( /obj/structure/surface/rack, /obj/item/tool/pickaxe{ @@ -35871,6 +36261,19 @@ }, /turf/open/floor, /area/bigred/ground/garage_workshop) +"tJn" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + layer = 2.5 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "tJv" = ( /obj/structure/tunnel{ id = "hole3" @@ -36173,6 +36576,7 @@ /area/bigred/ground/garage_workshop) "upV" = ( /obj/structure/pipes/standard/simple/hidden/green, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ icon_state = "delivery" }, @@ -36381,6 +36785,16 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves/mining) +"uKH" = ( +/obj/structure/stairs/perspective{ + dir = 6; + icon_state = "p_stair_full" + }, +/turf/open/floor{ + dir = 1; + icon_state = "darkred2" + }, +/area/bigredv2/outside/admin_building) "uNW" = ( /obj/effect/decal/cleanable/blood{ dir = 8; @@ -36659,6 +37073,15 @@ icon_state = "mars_cave_3" }, /area/bigredv2/caves/mining) +"vpx" = ( +/obj/structure/platform, +/obj/structure/flora/jungle/planttop1{ + pixel_y = 10 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "vpY" = ( /obj/structure/machinery/door/poddoor/almayer/closed{ id = "eta"; @@ -36865,6 +37288,19 @@ icon_state = "mars_cave_5" }, /area/bigredv2/caves_virology) +"vOs" = ( +/obj/structure/coatrack{ + pixel_x = 12 + }, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/suit/storage/windbreaker/windbreaker_gray{ + pixel_x = 11; + pixel_y = 4 + }, +/turf/open/floor{ + icon_state = "wood" + }, +/area/bigredv2/outside/admin_building) "vPP" = ( /obj/effect/decal/cleanable/blood/drip{ pixel_x = 6 @@ -37018,6 +37454,22 @@ /obj/effect/decal/cleanable/dirt, /turf/closed/wall/solaris/reinforced, /area/bigredv2/caves/mining) +"wfk" = ( +/obj/structure/filingcabinet/medical{ + density = 0; + pixel_x = -8; + pixel_y = 16 + }, +/obj/structure/filingcabinet/medical{ + density = 0; + pixel_x = 7; + pixel_y = 16 + }, +/obj/effect/landmark/objective_landmark/close, +/turf/open/floor{ + icon_state = "wood" + }, +/area/bigredv2/outside/admin_building) "wfm" = ( /obj/structure/bed/chair{ buckling_y = 5; @@ -37223,6 +37675,12 @@ icon_state = "delivery" }, /area/bigredv2/caves/lambda/virology) +"wxo" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "asteroidwarning" + }, +/area/bigredv2/outside/c) "wBi" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -37288,6 +37746,24 @@ /obj/structure/closet/firecloset/full, /turf/open/mars, /area/bigredv2/outside/c) +"wGD" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S"; + pixel_y = -1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + layer = 2.5 + }, +/obj/item/prop/alien/hugger, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "wGF" = ( /obj/item/tool/warning_cone, /turf/open/floor{ @@ -37301,6 +37777,16 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/c) +"wHx" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S"; + pixel_y = -1 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkredcorners2" + }, +/area/bigredv2/outside/admin_building) "wIw" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, @@ -37503,6 +37989,15 @@ icon_state = "mars_dirt_7" }, /area/bigredv2/caves/mining) +"xej" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S"; + pixel_y = -1 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "xeN" = ( /obj/effect/landmark/lv624/xeno_tunnel, /turf/open/mars_cave{ @@ -37803,6 +38298,14 @@ }, /turf/open/floor, /area/bigredv2/outside/engineering) +"xBn" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) "xBr" = ( /obj/item/ore{ pixel_x = 9 @@ -37889,6 +38392,13 @@ /obj/structure/prop/server_equipment/yutani_server, /turf/open/floor/greengrid, /area/bigredv2/caves/lambda/research) +"xKG" = ( +/obj/structure/bed/sofa/south/grey/right{ + pixel_y = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/bigredv2/outside/admin_building) "xLM" = ( /obj/structure/machinery/light{ dir = 1 @@ -54602,7 +55112,7 @@ aHF aHF apC apC -apC +apJ apJ apJ apC @@ -54612,7 +55122,7 @@ apC apC apJ apJ -apC +apJ apC apC apC @@ -54825,19 +55335,19 @@ aRT aof aTV mGS -aTV +tap aof aNK aXL +bdo aof -aYL -aZz -aZS -aZS -aZS -aZS aZz -bcM +aOO +aOO +aOO +aOO +cXG +aOO apC apC aHD @@ -55038,23 +55548,23 @@ aGD aMf aPL aMf -aMf +aXk aof aTV -aOM aTV +din aof -aNL -aUb +aWH +aOM +jna asT -aYM -aZA -aZA +aZC +aZC baG -aZA +aZC baG -aZA -bcN +aZC +aOO bdO apC aHD @@ -55258,21 +55768,21 @@ aQW aRU aof aTU -aOM +wGD aTV aof aYU +aOM aUb asT -aYM aZB aZT aIY bbj caN bcE -bcN -aYO +aOO +aOO apC aHD aBR @@ -55466,7 +55976,7 @@ awQ aJl aKo aKo -aKo +aSX aMF aNz aKo @@ -55475,21 +55985,21 @@ aQX aRV aof aTV -aOM +gWU aVS aof aXg +aOM aUb -asT -aYM -aZA +aof +aZC aZU -aZA +aZC aZU -aZA +aZC bcF -bcN -aYO +aOO +aOO apD aHD aBR @@ -55683,7 +56193,7 @@ aDN ayN aKp aQW -aMf +aTb kmm aNA aMf @@ -55691,13 +56201,13 @@ aMf aQY aMf aSQ +tJn +pyU +tJn +cJa +iZc aOM aOM -aOM -aSQ -aNL -aUb -asT aYN aZC aZC @@ -55705,8 +56215,8 @@ aZC aZC aZC bcG -bdl -aYO +aOO +aOO apD aHD aBR @@ -55908,22 +56418,22 @@ aPM aQZ aRX aof -aTX +mrH aVj mrH aof -aNL +uKH +aOM aUb -asT -aYO -aYO -aYO -aYO -aYO -aYO +aof +aOO +aOO +aOO +aOO +aOO bcH -bdm -aYO +aOO +aOO apC aHD aBR @@ -56118,7 +56628,7 @@ alu aKq aHF aHF -apC +apD aNC aMf aPN @@ -56130,19 +56640,19 @@ aof aof aof aNL +aOM aUb aof -asT -asT -asT +aof asT asT asT aof -bdn +sRy +aof aof apC -aHD +wxo aBR aBR bhi @@ -56337,9 +56847,9 @@ aHF aHF apD aND +aXk aMf -aMf -aQZ +aZS aof aSR aTY @@ -56347,19 +56857,19 @@ aTY aTY aWC aXj -aXM +aOI aYh -aRd -aRd +oDW +oFY bcI -aRd +bcJ aRd aVl -bcI +qoN bdo -aXL -apC -aHD +apD +bhU +wxo aBR aBR bhi @@ -56561,21 +57071,21 @@ aof aSS aTZ aVk -aVk +bMa aof -aSV +mEH aOM aYi -aOM -aOM +xBn +nZD aPS aOM aOM aOM aPS -aOM -aUb -apC +bdl +apD +bhU aHD aBR aBR @@ -56780,19 +57290,19 @@ aof aof aof aof -aSV -aOM +mEH aOM +vpx aFd -aOM +khP aZW aOK bbk aOK -bcJ +aPS bdp -aUc -apC +apD +aHF aHD aBR aBR @@ -56996,12 +57506,12 @@ aST aRd aVl aRd -aRd +bcJ aSW aOM aYk -aOM -aOM +dBm +pxH aZX aof aof @@ -57211,11 +57721,11 @@ aRc aof aSU aUa +aXM aOK aOK aOK -aXk -aOK +hkY aYl aYS aOM @@ -57427,11 +57937,11 @@ aof aof aof aSV -aUb -aof -aof +bdl aof aof +kRK +kRK aof aof aYT @@ -57641,17 +58151,17 @@ apD aNI aRd bcI -aRd +bcJ aRY aSW -aUb -aof +bdl +kRK aVT aWD aWD aXN -aof -aYU +kRK +aWH aOM aZY aof @@ -57659,7 +58169,7 @@ bbm aJb bcN aof -aJT +wfk apC aHD aIn @@ -57855,27 +58365,27 @@ aBR aBR aMc apD -aNJ -aOK +aUd +aXM aPS aOM aOK aOK aUc -aof +aYm aVU aOM aOM aXO -aof +kRK aNL aOM aZX aof -aZU +fhy aZA bcN -aOO +kIv aOO apC aHD @@ -58290,21 +58800,21 @@ aBR aMc apD aNK -aOL +aXL aPS aOM aof wvK -aSX +wvK aof -aVU +oWe aOM aXl aXP aof aNL aOM -aZX +szi aof aNQ aOO @@ -58512,16 +59022,16 @@ aPS aOM aRZ aTa -aUd -aof +aTa +aRZ aVU aWE aXm aXQ -aof +kRK aYV aOM -aZX +szi aof aOO bbY @@ -58729,12 +59239,12 @@ aPS aUb aof aSZ -aTa +czS aof aVW aWF aof -aof +kRK aof aYU aOM @@ -58943,18 +59453,18 @@ apC aNN aOM aPS -aUb +bdl aof sLS aUe aof aVX aWG -aof +kRK aNK -aOL -aYW -aOM +mST +iDT +nuw aZX aof aof @@ -59157,7 +59667,7 @@ aBR aBR aMc apD -aNL +aWH aOM aPS aRh @@ -59165,20 +59675,20 @@ aof aof aof aof +kRK +kRK aof -aof -aof -aNL -aOM -aOM -aOM +aWH +xej +ole +eSN aPS baI aYO bca bcQ bdr -bdO +nky apC beC aNw @@ -59378,24 +59888,24 @@ aNL aOM aPV aRi -aOL -aOL +aXL +aXL aUf aVm aOL aOL aOL aYW -aOM -aOM -aOM +xej +tBD +eSN aZZ upV baJ bcb bcR bcc -aYO +toA apC aTh aIn @@ -59591,28 +60101,28 @@ aKr aBR aMc apC -aNJ -aOM -aOK +aUd +aYL +aYM aOK aOK aOM aOK aOK aOK -aOM -aOK -aOK -aOM +aYL +aXM aOK -aYS -aUb +wHx +eoU +eSN +bdl aof bbo bcc bcS bcc -aYO +bQe apD aTh aIn @@ -59821,9 +60331,9 @@ aON aof aof aYo -aof -aNL -aUb +rpI +qyi +bdl aof bbp bcc @@ -60029,17 +60539,17 @@ aNO aOO aPW aof -aNO +bdm aOO -aPW +vOs aof jAm aOO -aPW +hxs aof aYp aof -aNL +aWH aUb aof bbq @@ -60246,20 +60756,20 @@ aNP aOO aOO aof -aNP +bdn aOO aOO aof aNP -aOO -aOO +pdG +qXi aof aYq aof -aNL +aWH aUb aof -bbo +xKG aTa bcV bdt @@ -60463,12 +60973,12 @@ aNQ aGG aPX aof -aNQ -aTb +pNU +aOO aUg aof aNQ -aWH +aOO aXn aof aYr @@ -60477,10 +60987,10 @@ aNJ aUc aof bbr +toA aYO -aYO -aTa -aYO +fPB +bQe bek bjZ aMg diff --git a/maps/map_files/BigRed/sprinkles/40.admin_pmc.dmm b/maps/map_files/BigRed/sprinkles/40.admin_pmc.dmm index e2b3e939a2e6..7a66b2422807 100644 --- a/maps/map_files/BigRed/sprinkles/40.admin_pmc.dmm +++ b/maps/map_files/BigRed/sprinkles/40.admin_pmc.dmm @@ -2,10 +2,6 @@ "ab" = ( /turf/closed/wall/solaris/reinforced, /area/bigredv2/outside/admin_building) -"ac" = ( -/obj/effect/acid_hole, -/turf/closed/wall/solaris, -/area/bigredv2/outside/admin_building) "ad" = ( /obj/structure/window/framed/solaris, /turf/open/floor/plating, @@ -15,88 +11,68 @@ /area/bigredv2/outside/admin_building) "af" = ( /obj/structure/pipes/standard/simple/hidden/green, -/obj/structure/machinery/light{ - dir = 8 - }, /obj/effect/decal/cleanable/blood/xeno, /turf/open/floor{ - icon_state = "darkred2"; - dir = 8 + dir = 8; + icon_state = "darkredcorners2" }, /area/bigredv2/outside/admin_building) "ag" = ( /obj/effect/spawner/random/toolbox, +/obj/structure/platform_decoration, /turf/open/floor{ icon_state = "dark" }, /area/bigredv2/outside/admin_building) "ai" = ( /obj/effect/landmark/survivor_spawner, +/obj/structure/platform_decoration{ + dir = 1 + }, /turf/open/floor{ icon_state = "dark" }, /area/bigredv2/outside/admin_building) "aj" = ( +/turf/open/floor{ + icon_state = "darkred2" + }, +/area/bigredv2/outside/admin_building) +"ak" = ( /obj/structure/window_frame/solaris, /obj/item/shard, /turf/open/floor/plating, /area/bigredv2/outside/admin_building) -"ak" = ( -/obj/structure/barricade/metal/wired{ - icon_state = "metal_2"; - dir = 1 - }, -/turf/open/floor{ - icon_state = "carpet14-10"; - dir = 8 - }, -/area/bigredv2/outside/admin_building) "al" = ( -/obj/structure/barricade/metal/wired{ - dir = 1 +/obj/structure/machinery/door/airlock/almayer/command/colony{ + dir = 1; + name = "\improper Operations Meeting Room" }, /turf/open/floor{ - icon_state = "carpet10-8"; - dir = 8 + icon_state = "delivery" }, /area/bigredv2/outside/admin_building) "am" = ( -/obj/structure/barricade/metal/wired{ - dir = 1 - }, -/obj/structure/barricade/metal/wired{ - icon_state = "metal_2"; - dir = 4 +/obj/structure/platform, +/obj/structure/flora/jungle/planttop1{ + pixel_y = 10 }, -/obj/item/ammo_magazine/rifle{ - current_rounds = 0; - pixel_x = -9; - pixel_y = -4 +/turf/open/floor{ + icon_state = "dark" }, -/turf/open/floor, /area/bigredv2/outside/admin_building) "an" = ( /obj/structure/pipes/standard/simple/hidden/green, /turf/open/floor{ - icon_state = "darkred2"; - dir = 8 + dir = 8; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "ap" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/turf/open/jungle{ - bushes_spawn = 0; - icon_state = "grass_impenetrable" +/obj/structure/flora/jungle/plantbot1{ + pixel_y = 10 }, +/turf/open/jungle, /area/bigredv2/outside/admin_building) "ar" = ( /obj/structure/machinery/light{ @@ -106,38 +82,30 @@ icon_state = "gib6" }, /turf/open/floor{ - icon_state = "carpet7-3"; - dir = 8 - }, -/area/bigredv2/outside/admin_building) -"as" = ( -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 + icon_state = "wood" }, /area/bigredv2/outside/admin_building) "at" = ( /obj/structure/bed/chair/comfy/black, -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "au" = ( /obj/effect/landmark/corpsespawner/wygoon, -/turf/open/floor{ - icon_state = "carpet11-12"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "av" = ( /obj/structure/barricade/metal/wired{ - icon_state = "metal_2"; - dir = 4 + dir = 4; + icon_state = "metal_2" + }, +/turf/open/floor{ + icon_state = "wood" }, -/turf/open/floor, /area/bigredv2/outside/admin_building) "aw" = ( +/obj/structure/platform_decoration{ + dir = 8 + }, /obj/effect/decal/cleanable/blood/xeno, /turf/open/floor{ icon_state = "dark" @@ -151,33 +119,23 @@ "aA" = ( /obj/effect/landmark/corpsespawner/wygoon, /turf/open/floor{ - icon_state = "carpet7-3"; - dir = 8 + icon_state = "wood" }, /area/bigredv2/outside/admin_building) "aB" = ( /obj/structure/surface/table, -/obj/structure/machinery/computer3/laptop/secure_data, -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 - }, +/obj/structure/prop/server_equipment/laptop/on, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aC" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/open/floor{ - icon_state = "carpet15-15"; +/obj/structure/bed/chair/comfy/blue{ dir = 8 }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aD" = ( -/obj/item/stack/sheet/metal/small_stack, -/turf/open/floor{ - icon_state = "carpet6-2"; - dir = 8 - }, +/obj/effect/acid_hole, +/turf/closed/wall/solaris, /area/bigredv2/outside/admin_building) "aG" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -196,20 +154,11 @@ icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) -"aI" = ( -/turf/open/floor{ - icon_state = "carpet7-3"; - dir = 8 - }, -/area/bigredv2/outside/admin_building) "aJ" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/bed/chair/comfy/blue{ dir = 4 }, -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aK" = ( /obj/structure/surface/table, @@ -219,54 +168,41 @@ name = "dented M4A3 service pistol" }, /obj/item/ammo_magazine/pistol/rubber, -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aL" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor{ - icon_state = "carpet11-12"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aM" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/structure/barricade/sandbags/wired, /turf/open/floor{ - icon_state = "darkred2"; - dir = 8 + dir = 8; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "aN" = ( /obj/structure/barricade/sandbags/wired, /turf/open/floor{ - icon_state = "darkred2"; - dir = 4 + dir = 4; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "aO" = ( /obj/item/storage/secure/briefcase, -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aP" = ( /obj/structure/barricade/metal/wired{ dir = 4 }, -/turf/open/floor, -/area/bigredv2/outside/admin_building) -"aQ" = ( /turf/open/floor{ - icon_state = "carpet11-12"; - dir = 8 + icon_state = "wood" }, /area/bigredv2/outside/admin_building) -"aR" = ( -/turf/open/floor, +"aQ" = ( +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aS" = ( /obj/item/ammo_magazine/rifle/rubber{ @@ -274,10 +210,7 @@ pixel_x = -3; pixel_y = -6 }, -/turf/open/floor{ - icon_state = "carpet11-12"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aT" = ( /obj/effect/decal/cleanable/blood, @@ -291,38 +224,32 @@ }, /obj/item/storage/toolbox/syndicate, /turf/open/floor{ - icon_state = "darkred2"; - dir = 4 + dir = 4; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "aV" = ( /obj/structure/surface/table, /obj/item/ammo_magazine/rifle/rubber, -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aW" = ( /obj/effect/decal/cleanable/blood, /obj/item/tool/weldingtool, -/turf/open/floor{ - icon_state = "carpet11-12"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "aX" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/landmark/crap_item, /turf/open/floor{ - icon_state = "darkred2"; - dir = 8 + dir = 8; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "aY" = ( /turf/open/floor{ - icon_state = "darkred2"; - dir = 4 + dir = 4; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "aZ" = ( @@ -338,8 +265,7 @@ num_of_magazines = 2 }, /turf/open/floor{ - icon_state = "carpet7-3"; - dir = 8 + icon_state = "wood" }, /area/bigredv2/outside/admin_building) "ba" = ( @@ -348,52 +274,45 @@ dir = 4 }, /obj/item/clothing/head/helmet/marine/veteran/pmc/leader, -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "bb" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/bed/chair/comfy/blue{ dir = 8 }, /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, /obj/effect/landmark/corpsespawner/wygoon, -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "bc" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, /obj/effect/decal/cleanable/blood, -/turf/open/floor{ - icon_state = "carpet11-12"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "bd" = ( -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 10 - }, /obj/item/ammo_magazine/rifle{ current_rounds = 0; pixel_x = -8; pixel_y = 9 }, -/turf/open/floor, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "wood" + }, /area/bigredv2/outside/admin_building) "be" = ( /obj/structure/pipes/standard/manifold/hidden/green{ dir = 8 }, /turf/open/floor{ - icon_state = "darkred2"; - dir = 8 + dir = 8; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "bf" = ( @@ -409,8 +328,8 @@ dir = 4 }, /turf/open/floor{ - icon_state = "darkred2"; - dir = 4 + dir = 4; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "bh" = ( @@ -429,43 +348,28 @@ num_of_magazines = 1 }, /turf/open/floor{ - icon_state = "carpet5-1"; - dir = 8 - }, -/area/bigredv2/outside/admin_building) -"bj" = ( -/turf/open/floor{ - icon_state = "carpet13-5"; - dir = 8 - }, -/area/bigredv2/outside/admin_building) -"bk" = ( -/turf/open/floor{ - icon_state = "carpet9-4"; - dir = 8 + icon_state = "wood" }, /area/bigredv2/outside/admin_building) "bl" = ( -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 5 +/turf/open/floor{ + icon_state = "wood" }, -/turf/open/floor, /area/bigredv2/outside/admin_building) "bm" = ( -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 4 +/obj/structure/pipes/standard/simple/hidden/green, +/obj/structure/machinery/light{ + dir = 8 }, -/obj/structure/machinery/door/airlock/almayer/command/colony{ - name = "\improper Operations Meeting Room" +/turf/open/floor{ + dir = 8; + icon_state = "darkred2" }, -/turf/open/floor, /area/bigredv2/outside/admin_building) "bn" = ( -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 9 - }, /turf/open/floor{ - icon_state = "dark" + dir = 10; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "bo" = ( @@ -476,30 +380,21 @@ pixel_x = 30 }, /turf/open/floor{ - icon_state = "darkred2"; - dir = 4 + dir = 6; + icon_state = "darkred2" }, /area/bigredv2/outside/admin_building) "bp" = ( /obj/structure/machinery/vending/coffee, /turf/open/floor, /area/bigredv2/outside/admin_building) -"bq" = ( -/turf/open/floor{ - icon_state = "darkred2"; - dir = 10 - }, -/area/bigredv2/outside/admin_building) -"br" = ( -/turf/open/floor{ - icon_state = "darkred2" - }, -/area/bigredv2/outside/admin_building) "bs" = ( -/turf/open/floor{ - icon_state = "darkred2"; - dir = 6 +/obj/structure/window/framed/solaris/reinforced, +/obj/structure/machinery/door/poddoor/shutters/almayer{ + id = "Operations"; + name = "\improper Operations Shutters" }, +/turf/open/floor/plating, /area/bigredv2/outside/admin_building) "dp" = ( /obj/item/ammo_magazine/rifle/rubber{ @@ -507,28 +402,24 @@ pixel_x = -6; pixel_y = -4 }, -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "is" = ( /obj/item/ammo_magazine/pistol/rubber{ current_rounds = 0 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "wood" + }, /area/bigredv2/outside/admin_building) "jq" = ( /obj/item/weapon/gun/rifle/m41a/corporate{ current_mag = /obj/item/ammo_magazine/rifle/rubber; + desc = "A Weyland-Yutani creation, this M41A MK2 comes equipped in corporate white. Uses 10x24mm caseless ammunition. It seems to be pretty battered and broken up."; name = "battered M41A pulse rifle MK2"; - pixel_x = 4; - desc = "A Weyland-Yutani creation, this M41A MK2 comes equipped in corporate white. Uses 10x24mm caseless ammunition. It seems to be pretty battered and broken up." - }, -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 + pixel_x = 4 }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "lz" = ( /obj/item/ammo_magazine/rifle/rubber{ @@ -536,8 +427,7 @@ pixel_y = 11 }, /turf/open/floor{ - icon_state = "carpet7-3"; - dir = 8 + icon_state = "wood" }, /area/bigredv2/outside/admin_building) "rv" = ( @@ -545,8 +435,7 @@ current_rounds = 0 }, /turf/open/floor{ - icon_state = "carpet7-3"; - dir = 8 + icon_state = "wood" }, /area/bigredv2/outside/admin_building) "si" = ( @@ -564,15 +453,52 @@ pixel_y = 17 }, /turf/open/floor{ - icon_state = "carpet13-5"; - dir = 8 + icon_state = "wood" }, /area/bigredv2/outside/admin_building) "uv" = ( /obj/item/ammo_magazine/rifle{ current_rounds = 0; - pixel_y = 7; - pixel_x = -9 + pixel_x = -9; + pixel_y = 7 + }, +/turf/open/floor{ + icon_state = "wood" + }, +/area/bigredv2/outside/admin_building) +"vH" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) +"vO" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) +"yf" = ( +/obj/structure/platform_decoration{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) +"za" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/structure/machinery/door/airlock/almayer/command/colony{ + name = "\improper Operations Meeting Room" + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 }, /turf/open/floor, /area/bigredv2/outside/admin_building) @@ -580,17 +506,25 @@ /obj/item/ammo_magazine/pistol/rubber{ current_rounds = 0 }, -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) "Br" = ( /obj/structure/surface/table, /obj/item/storage/firstaid/regular/empty, +/turf/open/floor/carpet, +/area/bigredv2/outside/admin_building) +"ND" = ( +/obj/structure/pipes/standard/manifold/hidden/green, /turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 + icon_state = "dark" + }, +/area/bigredv2/outside/admin_building) +"Pk" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/open/floor{ + icon_state = "dark" }, /area/bigredv2/outside/admin_building) "QR" = ( @@ -600,7 +534,9 @@ /obj/item/ammo_magazine/pistol/rubber{ current_rounds = 0 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "wood" + }, /area/bigredv2/outside/admin_building) "Sz" = ( /obj/item/ammo_magazine/rifle/rubber{ @@ -608,14 +544,11 @@ pixel_x = 5; pixel_y = -5 }, -/turf/open/floor{ - icon_state = "carpet15-15"; - dir = 8 - }, +/turf/open/floor/carpet, /area/bigredv2/outside/admin_building) (1,1,1) = {" -ab +aj ab ab ab @@ -627,12 +560,12 @@ ab ab "} (2,1,1) = {" -ac +aj aD ar aA lz -aI +bl rv aZ bi @@ -646,7 +579,7 @@ AC aJ aO aJ -as +aQ si bp "} @@ -659,23 +592,23 @@ aK Br aV ba -bj +bl uv "} (5,1,1) = {" aj -ak +ae jq aC -as +aQ aC Sz bb -bj -aR +bl +bl "} (6,1,1) = {" -ad +ay al au aW @@ -683,12 +616,12 @@ aL aS aQ bc -bk +bl is "} (7,1,1) = {" -ad -am +aj +ae av aP aP @@ -696,35 +629,35 @@ QR aP bd bl -aR +bl "} (8,1,1) = {" -ae -aj aj -ad +ae +ae ad ad ad ae -bm +za +ae ae "} (9,1,1) = {" af -an +bm an be aM an aX -be +ND bn -bq +bs "} (10,1,1) = {" ag -ay +vO aw bf ay @@ -732,12 +665,12 @@ aT ay bf ay -br +bs "} (11,1,1) = {" -ay +am ap -ay +Pk aG aN aU @@ -748,8 +681,8 @@ bs "} (12,1,1) = {" ai -ay -ay +vH +yf aH ae ae diff --git a/maps/map_files/BigRed/standalone/medbay-passage.dmm b/maps/map_files/BigRed/standalone/medbay-passage.dmm index 75d323f0116d..d5b7db11d82b 100644 --- a/maps/map_files/BigRed/standalone/medbay-passage.dmm +++ b/maps/map_files/BigRed/standalone/medbay-passage.dmm @@ -61,6 +61,31 @@ "m" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/oil, +/obj/structure/stairs/perspective{ + dir = 5; + icon_state = "p_stair_full" + }, +/turf/open/floor{ + dir = 1; + icon_state = "asteroidfloor" + }, +/area/bigredv2/outside/c) +"n" = ( +/obj/structure/stairs/perspective{ + dir = 9; + icon_state = "p_stair_full" + }, +/turf/open/floor{ + dir = 1; + icon_state = "asteroidfloor" + }, +/area/bigredv2/outside/c) +"w" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/obj/structure/stairs/perspective{ + dir = 1; + icon_state = "p_stair_full" + }, /turf/open/floor{ dir = 1; icon_state = "asteroidfloor" @@ -83,6 +108,16 @@ icon_state = "white" }, /area/bigredv2/outside/admin_building) +"X" = ( +/obj/structure/stairs/perspective{ + dir = 1; + icon_state = "p_stair_full" + }, +/turf/open/floor{ + dir = 1; + icon_state = "asteroidfloor" + }, +/area/bigredv2/outside/c) (1,1,1) = {" a @@ -97,7 +132,7 @@ a a c h -l +n R "} (3,1,1) = {" @@ -105,7 +140,7 @@ a a d i -d +w S "} (4,1,1) = {" @@ -113,7 +148,7 @@ a a e l -l +X T "} (5,1,1) = {" diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm index 981cccbbeb60..6a902208f9e8 100644 --- a/maps/map_files/Kutjevo/Kutjevo.dmm +++ b/maps/map_files/Kutjevo/Kutjevo.dmm @@ -2534,6 +2534,14 @@ icon = 'icons/turf/floors/desert_water_toxic.dmi' }, /area/kutjevo/interior/oob) +"dtV" = ( +/obj/structure/machinery/blackbox_recorder, +/obj/item/prop/almayer/flight_recorder/colony{ + pixel_x = 10; + pixel_y = 10 + }, +/turf/open/floor/kutjevo/grey/plate, +/area/kutjevo/interior/complex/botany/east_tech) "duu" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ name = "\improper South Power Shutters" @@ -17223,6 +17231,12 @@ /obj/structure/barricade/wooden, /turf/open/floor/kutjevo/colors/red/tile, /area/kutjevo/interior/complex/botany) +"xPU" = ( +/obj/effect/landmark/nightmare{ + insert_tag = "communications" + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/construction) "xQz" = ( /turf/open/floor/kutjevo/colors/cyan/inner_corner{ dir = 1 @@ -39700,7 +39714,7 @@ xWK bKH xWK xWK -xWK +xPU xWK jhx bKH @@ -40564,7 +40578,7 @@ hws qwg vcY jhS -htT +dtV dkE tfx dkE diff --git a/maps/map_files/Kutjevo/sprinkles/35.communications.dmm b/maps/map_files/Kutjevo/sprinkles/35.communications.dmm new file mode 100644 index 000000000000..235f370b4321 --- /dev/null +++ b/maps/map_files/Kutjevo/sprinkles/35.communications.dmm @@ -0,0 +1,549 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aA" = ( +/obj/structure/girder/displaced, +/obj/effect/decal/cleanable/blood/oil, +/turf/open/auto_turf/sand/layer0, +/area/template_noop) +"cm" = ( +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 8 + }, +/area/template_noop) +"cL" = ( +/obj/item/clothing/suit/storage/hazardvest/yellow, +/turf/open/floor/kutjevo/tan, +/area/template_noop) +"cW" = ( +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"di" = ( +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 1 + }, +/area/template_noop) +"dl" = ( +/obj/structure/girder/displaced, +/obj/item/stack/sheet/metal, +/turf/open/auto_turf/sand/layer0, +/area/template_noop) +"gD" = ( +/obj/item/stack/rods, +/obj/item/tool/warning_cone, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"ix" = ( +/obj/item/tool/warning_cone, +/obj/item/paper/crumpled{ + pixel_x = 5; + pixel_y = -8 + }, +/obj/item/paper/crumpled{ + pixel_x = -4; + pixel_y = 14 + }, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"lD" = ( +/obj/structure/machinery/door_display{ + desc = "A work schedule monitor. It appears to be broken."; + name = "Schedule Monitor" + }, +/turf/closed/wall/kutjevo/colony, +/area/template_noop) +"lZ" = ( +/obj/structure/bed/chair{ + dir = 4; + pixel_x = 4; + pixel_y = 5 + }, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"mv" = ( +/obj/structure/girder, +/turf/open/floor/plating/kutjevo, +/area/template_noop) +"nn" = ( +/obj/structure/machinery/constructable_frame, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"oB" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/prop/almayer/computer/PC{ + dir = 8; + layer = 2.8 + }, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"oK" = ( +/obj/structure/machinery/photocopier, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"oU" = ( +/obj/structure/machinery/light, +/obj/structure/machinery/message_server, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"pP" = ( +/obj/structure/largecrate/random{ + pixel_y = 19; + layer = 3.02 + }, +/obj/structure/largecrate/random{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/structure/barricade/handrail/kutjevo{ + layer = 3.1 + }, +/obj/structure/barricade/handrail/kutjevo{ + dir = 4 + }, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"qp" = ( +/obj/structure/machinery/door/airlock/almayer/maint/colony/autoname{ + req_one_access = null + }, +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 1 + }, +/area/template_noop) +"qI" = ( +/obj/structure/window/framed/kutjevo, +/turf/open/space/basic, +/area/template_noop) +"qM" = ( +/obj/structure/machinery/light, +/obj/effect/decal/cleanable/blood/oil, +/obj/item/tool/warning_cone, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"rm" = ( +/obj/structure/surface/rack, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"ry" = ( +/obj/item/stack/rods, +/obj/structure/fence, +/turf/open/auto_turf/sand/layer1, +/area/template_noop) +"rG" = ( +/obj/item/stack/rods, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"rP" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"sQ" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 1 + }, +/area/template_noop) +"uS" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp/on{ + pixel_x = 9; + pixel_y = 15; + layer = 3.04 + }, +/obj/item/clipboard{ + pixel_x = -6 + }, +/obj/item/tool/pen/blue/clicky{ + pixel_x = 9 + }, +/obj/item/paper_bin{ + pixel_x = 9; + pixel_y = 3 + }, +/obj/item/paper{ + info = "It has been three weeks since I was relocated to the 'finished' comms office. Me and Paul have been trying to work with this infernal racket going on, but by all that's holy I can't think- let alone recalibrate the new computers. Speaking of, these new computers are all fine and dandy but the sensor uplink tower still hasn't been setup properly after the accident with the apprentice, you know, the one that piled up those debris filled trash bags by Paul's 'desk' and then left. Anyway, like you said the builders didn't lay down the protective matting for the new flooring so there's dirt everywhere. For your sake Jeff, I hope your holiday doesn't end too soon, you still don't even have a desk yet."; + pixel_x = -5; + icon_state = "paper_words"; + name = "I should have gone on holiday" + }, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"wh" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/auto_turf/sand/layer0, +/area/template_noop) +"wC" = ( +/obj/structure/surface/rack, +/obj/item/notepad/blue, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"wO" = ( +/obj/structure/filingcabinet{ + density = 0; + layer = 3.0; + pixel_x = 8; + pixel_y = 18 + }, +/obj/structure/filingcabinet/chestdrawer{ + density = 0; + pixel_x = -8; + pixel_y = 18 + }, +/obj/structure/prop/rock{ + pixel_x = -8; + pixel_y = -5 + }, +/obj/structure/prop/rock{ + layer = 3.1; + pixel_y = 3 + }, +/obj/structure/prop/rock{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/structure/flora/pottedplant/random/unanchored{ + pixel_y = 16; + layer = 3.3 + }, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"yQ" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/machinery/power/apc/weak{ + dir = 1 + }, +/obj/structure/surface/rack, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"zb" = ( +/turf/open/floor/kutjevo/tan/grey_edge, +/area/template_noop) +"zh" = ( +/obj/structure/surface/table/almayer, +/obj/effect/spawner/random/tool, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"Af" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 4 + }, +/area/template_noop) +"Ca" = ( +/obj/structure/window/framed/kutjevo, +/obj/structure/barricade/handrail/kutjevo{ + layer = 3.1 + }, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"Ci" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 1 + }, +/area/template_noop) +"DY" = ( +/obj/structure/machinery/door/airlock/almayer/maint/colony/autoname{ + dir = 1; + req_one_access = null + }, +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 4 + }, +/area/template_noop) +"EK" = ( +/obj/structure/window/framed/kutjevo, +/turf/open/floor/plating/kutjevo, +/area/template_noop) +"GH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/paper/crumpled{ + pixel_x = -4; + pixel_y = 14 + }, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"IR" = ( +/obj/item/paper/crumpled, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"Jg" = ( +/obj/effect/spawner/random/toolbox, +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 4 + }, +/area/template_noop) +"Jz" = ( +/obj/item/stack/sheet/metal, +/obj/item/stack/rods, +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 4 + }, +/area/template_noop) +"Ks" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"KC" = ( +/obj/structure/bed/chair/comfy{ + dir = 1; + pixel_y = 11 + }, +/obj/item/paper/crumpled{ + pixel_x = -12; + pixel_y = 14 + }, +/obj/item/paper/crumpled{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/paper/crumpled{ + pixel_x = 5; + pixel_y = -8 + }, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"KD" = ( +/obj/structure/machinery/door/airlock/almayer/maint/colony/autoname{ + dir = 1; + req_one_access = null + }, +/turf/closed/wall/kutjevo/colony, +/area/template_noop) +"LG" = ( +/obj/structure/fence, +/turf/open/auto_turf/sand/layer0, +/area/template_noop) +"LO" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/item/prop/alien/hugger, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"LR" = ( +/obj/structure/prop/almayer/computers/sensor_computer2, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"MV" = ( +/obj/structure/largecrate/random{ + pixel_y = 1 + }, +/obj/structure/largecrate/random{ + pixel_y = 19; + layer = 3.02; + pixel_x = -3 + }, +/obj/structure/barricade/handrail/kutjevo{ + layer = 3.1 + }, +/obj/structure/barricade/handrail/kutjevo{ + dir = 4 + }, +/obj/structure/barricade/handrail/kutjevo{ + dir = 8 + }, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"Nr" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"Or" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"Pp" = ( +/obj/structure/prop/almayer/computers/sensor_computer1, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"Re" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/tool/warning_cone, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"Rj" = ( +/obj/item/stack/rods, +/obj/effect/decal/cleanable/blood/oil, +/obj/item/tool/warning_cone, +/turf/open/auto_turf/sand/layer0, +/area/template_noop) +"RK" = ( +/turf/closed/wall/kutjevo/colony, +/area/template_noop) +"SZ" = ( +/turf/closed/wall/kutjevo/colony/reinforced, +/area/template_noop) +"Ul" = ( +/obj/structure/machinery/door/airlock/almayer/maint/colony/autoname{ + req_one_access = null + }, +/turf/open/floor/kutjevo/tan/grey_edge, +/area/template_noop) +"Um" = ( +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 4 + }, +/area/template_noop) +"Vc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/tool/warning_cone, +/turf/open/auto_turf/sand/layer0, +/area/template_noop) +"Xi" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/kutjevo/tan/grey_edge, +/area/template_noop) +"Xq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 8 + }, +/area/template_noop) +"XS" = ( +/obj/structure/fence{ + desc = "A large metal mesh strewn between two poles. A 'Keep Out! Under Construction' sign dangles from one of the fence posts." + }, +/turf/open/auto_turf/sand/layer1, +/area/template_noop) +"Yo" = ( +/obj/item/clothing/head/hardhat/orange, +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 1 + }, +/area/template_noop) +"YG" = ( +/obj/structure/machinery/power/port_gen/pacman, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) +"YO" = ( +/obj/structure/machinery/door/airlock/almayer/maint/colony/autoname{ + dir = 1; + req_one_access = null + }, +/turf/open/floor/kutjevo/tan/grey_edge{ + dir = 8 + }, +/area/template_noop) +"Zf" = ( +/obj/structure/window/framed/kutjevo, +/obj/structure/barricade/handrail/kutjevo{ + layer = 3 + }, +/turf/open/floor/kutjevo/grey/plate, +/area/template_noop) + +(1,1,1) = {" +SZ +RK +RK +RK +qp +Ul +RK +RK +RK +RK +RK +RK +"} +(2,1,1) = {" +RK +pP +cW +cW +Ci +zb +Ca +Pp +oK +nn +oU +RK +"} +(3,1,1) = {" +KD +Nr +Ks +cW +di +Xi +Zf +uS +KC +IR +Or +RK +"} +(4,1,1) = {" +SZ +MV +Or +rP +Yo +zb +lD +LR +ix +GH +Re +EK +"} +(5,1,1) = {" +qI +wC +rG +LO +sQ +cL +cm +Xq +Xq +cm +cm +YO +"} +(6,1,1) = {" +qI +rm +lZ +nn +Or +Af +Um +Jg +Um +Jz +wh +DY +"} +(7,1,1) = {" +SZ +yQ +oB +wO +gD +zh +Rj +dl +YG +Vc +qM +RK +"} +(8,1,1) = {" +SZ +mv +RK +RK +aA +RK +LG +LG +mv +ry +XS +mv +"} diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 1f61d2d99a78..95352008b2ae 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -529,17 +529,6 @@ icon_state = "red" }, /area/almayer/hallways/aft_hallway) -"abQ" = ( -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_y = 28 - }, -/obj/structure/machinery/cm_vending/clothing/staff_officer_armory, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) "abR" = ( /obj/item/tank/phoron, /turf/open/floor/almayer{ @@ -1650,10 +1639,6 @@ icon_state = "outerhull_dir" }, /area/space) -"afo" = ( -/obj/structure/safe/co_office, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "afq" = ( /obj/effect/step_trigger/clone_cleaner, /obj/effect/decal/warning_stripes{ @@ -2761,12 +2746,6 @@ "ajl" = ( /turf/closed/wall/almayer/white, /area/almayer/medical/upper_medical) -"ajm" = ( -/obj/structure/closet/secure_closet/securecom, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) "ajp" = ( /obj/structure/surface/table/almayer, /obj/structure/dropship_equipment/fuel/cooling_system{ @@ -3706,15 +3685,6 @@ icon_state = "blue" }, /area/almayer/hallways/aft_hallway) -"amE" = ( -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/structure/surface/rack, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/engineering/upper_engineering) "amF" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/plating/plating_catwalk, @@ -3937,47 +3907,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_s) -"anp" = ( -/obj/structure/sign/safety/hazard{ - pixel_x = 15; - pixel_y = 32 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_m4a3_pistol, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/medical/upper_medical) -"anq" = ( -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_y = 28 - }, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/structure/surface/rack, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/medical/upper_medical) -"anr" = ( -/obj/structure/sign/safety/intercom{ - pixel_x = 8; - pixel_y = 32 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/medical/upper_medical) "ans" = ( /turf/open/floor/almayer{ dir = 8; @@ -5613,16 +5542,6 @@ /obj/structure/surface/table/almayer, /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) -"asu" = ( -/obj/structure/sign/safety/hazard{ - pixel_x = 32; - pixel_y = -8 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/medical/upper_medical) "asv" = ( /obj/effect/decal/cleanable/blood/oil, /obj/structure/machinery/light{ @@ -6040,12 +5959,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) -"atx" = ( -/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) "aty" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/almayer{ @@ -6645,12 +6558,6 @@ /obj/structure/window/framed/almayer, /turf/open/floor/plating, /area/almayer/command/cic) -"auR" = ( -/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_mk1_rifle_ap, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) "auS" = ( /obj/item/tool/warning_cone, /obj/item/tool/warning_cone, @@ -8022,12 +7929,6 @@ icon_state = "plating" }, /area/almayer/engineering/upper_engineering) -"azp" = ( -/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/engineering/upper_engineering) "azq" = ( /obj/effect/decal/warning_stripes{ icon_state = "SE-out"; @@ -9831,6 +9732,12 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/operating_room_four) +"aGi" = ( +/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_mk1_rifle_ap, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "aGj" = ( /obj/structure/machinery/door/poddoor/almayer/open{ dir = 2; @@ -10181,6 +10088,12 @@ }, /turf/open/floor/engine, /area/almayer/engineering/airmix) +"aHT" = ( +/obj/structure/bed/chair/wood/normal, +/obj/item/bedsheet/brown, +/obj/item/toy/plush/farwa, +/turf/open/floor/wood/ship, +/area/almayer/shipboard/brig/cells) "aHU" = ( /obj/structure/platform{ dir = 1 @@ -10407,12 +10320,6 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering) -"aIV" = ( -/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/engineering/upper_engineering) "aIX" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -12770,11 +12677,6 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/north1) -"aUb" = ( -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "aUd" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ @@ -15417,10 +15319,6 @@ icon_state = "bluefull" }, /area/almayer/living/bridgebunks) -"bhM" = ( -/obj/structure/safe/cl_office, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliason) "bhT" = ( /obj/structure/cargo_container/lockmart/mid{ layer = 3.1; @@ -17195,28 +17093,6 @@ /obj/structure/surface/table/woodentable/fancy, /turf/open/floor/carpet, /area/almayer/command/corporateliason) -"bsd" = ( -/obj/item/device/flashlight/lamp/green{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/structure/machinery/door_control{ - id = "cl_shutters"; - name = "Privacy Shutters"; - pixel_x = -5; - pixel_y = 6; - req_access_txt = "200" - }, -/obj/structure/machinery/door_control{ - id = "RoomDivider"; - name = "Room Divider"; - pixel_x = -5; - pixel_y = -3; - req_access_txt = "200" - }, -/obj/structure/surface/table/woodentable/fancy, -/turf/open/floor/carpet, -/area/almayer/command/corporateliason) "bse" = ( /obj/structure/machinery/computer/arcade, /turf/open/floor/wood/ship, @@ -20184,16 +20060,6 @@ icon_state = "green" }, /area/almayer/squads/req) -"bGz" = ( -/obj/structure/window/framed/almayer, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 1 - }, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "green" - }, -/area/almayer/squads/req) "bGF" = ( /obj/structure/machinery/landinglight/ds2{ dir = 1 @@ -21054,52 +20920,6 @@ icon_state = "red" }, /area/almayer/shipboard/navigation) -"bKg" = ( -/obj/item/bedsheet/blue{ - layer = 3.2 - }, -/obj/item/bedsheet/blue{ - pixel_y = 13 - }, -/obj/item/toy/plush/therapy/red{ - desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; - force = 15; - layer = 4.1; - name = "Sergeant Huggs"; - pixel_y = 15; - throwforce = 15 - }, -/obj/item/clothing/head/cmcap{ - layer = 4.1; - pixel_x = -1; - pixel_y = 22 - }, -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = -2; - pixel_y = 4 - }, -/obj/structure/window/reinforced{ - dir = 8; - layer = 3.3; - pixel_y = 4 - }, -/obj/structure/bed{ - can_buckle = 0 - }, -/obj/structure/bed{ - buckling_y = 13; - layer = 3.5; - pixel_y = 13 - }, -/obj{ - name = "---Merge conflict marker---" - }, -/obj/structure/bed/chair/comfy/charlie, -/turf/open/floor/almayer{ - icon_state = "emeraldfull" - }, -/area/almayer/living/briefing) "bKh" = ( /turf/open/floor/almayer, /area/almayer/hallways/vehiclehangar) @@ -22185,14 +22005,6 @@ icon_state = "emeraldcorner" }, /area/almayer/hallways/port_hallway) -"bOw" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "bOx" = ( /obj/structure/machinery/door/airlock/almayer/marine/charlie/tl, /turf/open/floor/almayer{ @@ -22728,12 +22540,6 @@ }, /turf/closed/wall/almayer, /area/almayer/squads/req) -"bQS" = ( -/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend, -/turf/open/floor/almayer{ - icon_state = "green" - }, -/area/almayer/squads/req) "bQU" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 @@ -23503,19 +23309,6 @@ icon_state = "blue" }, /area/almayer/squads/charlie_delta_shared) -"bUo" = ( -/obj/structure/sign/safety/ammunition{ - pixel_x = 15; - pixel_y = -32 - }, -/obj/structure/sign/safety/hazard{ - pixel_y = -32 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/squads/req) "bUp" = ( /obj/structure/surface/table/almayer, /obj/structure/pipes/standard/simple/hidden/supply{ @@ -24337,13 +24130,6 @@ /obj/structure/machinery/light, /turf/open/floor/almayer, /area/almayer/hallways/vehiclehangar) -"bYa" = ( -/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend, -/turf/open/floor/almayer{ - dir = 10; - icon_state = "green" - }, -/area/almayer/squads/req) "bYc" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/plating/plating_catwalk, @@ -26314,6 +26100,12 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/alpha) +"cij" = ( +/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/engineering/upper_engineering) "cil" = ( /obj/structure/machinery/light, /obj/structure/sign/safety/waterhazard{ @@ -26700,6 +26492,42 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_a_s) +"ckE" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/obj/item/bedsheet/yellow{ + layer = 3.2 + }, +/obj/item/bedsheet/yellow{ + pixel_y = 13 + }, +/obj/structure/sign/safety/bathunisex{ + pixel_x = -16; + pixel_y = 8 + }, +/obj/item/toy/plush/barricade, +/obj{ + name = "---Merge conflict marker---" + }, +/obj/structure/pipes/standard/simple/hidden/supply, +/turf/open/floor/almayer, +/area/almayer/living/briefing) "ckI" = ( /obj/structure/disposalpipe/segment, /obj/item/device/radio/intercom{ @@ -29057,15 +28885,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) -"cVu" = ( -/obj/structure/pipes/vents/pump{ - dir = 1 - }, -/obj/structure/machinery/light/small, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "cVw" = ( /obj/structure/machinery/light/small{ dir = 4 @@ -29527,6 +29346,12 @@ icon_state = "plating" }, /area/almayer/engineering/engine_core) +"ddN" = ( +/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/squads/req) "deb" = ( /obj/structure/bed, /obj/structure/machinery/flasher{ @@ -29765,6 +29590,14 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/alpha_bravo_shared) +"diM" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "djm" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -31066,19 +30899,6 @@ icon_state = "red" }, /area/almayer/shipboard/brig/processing) -"dGS" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/emails{ - pixel_x = 2; - pixel_y = 5 - }, -/obj/structure/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "dHd" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -31416,28 +31236,6 @@ icon_state = "dark_sterile" }, /area/almayer/shipboard/brig/surgery) -"dQx" = ( -/obj/structure/surface/table/almayer, -/obj/item/device/camera{ - pixel_x = -8; - pixel_y = 12 - }, -/obj/item/paper_bin/uscm{ - pixel_y = 6; - pixel_x = 6 - }, -/obj/item/tool/pen{ - pixel_x = 4; - pixel_y = -4 - }, -/obj/item/storage/box/donkpockets{ - pixel_x = -8; - pixel_y = -1 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "dQE" = ( /obj/structure/machinery/light{ dir = 1 @@ -31790,16 +31588,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) -"dXs" = ( -/obj/structure/sign/safety/terminal{ - pixel_x = 7; - pixel_y = 29 - }, -/obj/structure/filingcabinet, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "dXy" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, @@ -31961,6 +31749,26 @@ icon_state = "plate" }, /area/almayer/command/lifeboat) +"ebt" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/machinery/camera/autoname/almayer{ + name = "ship-grade camera" + }, +/obj/structure/closet/secure_closet/guncabinet/blue/riot_control, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) +"ebz" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/obj/structure/closet/secure_closet/guncabinet/blue/riot_control, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "ebD" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -32167,12 +31975,6 @@ icon_state = "kitchen" }, /area/almayer/living/grunt_rnr) -"eeB" = ( -/obj/structure/bed/chair/wood/normal, -/obj/item/bedsheet/brown, -/obj/item/toy/plush/farwa, -/turf/open/floor/wood/ship, -/area/almayer/shipboard/brig/cells) "eeN" = ( /obj/structure/bed/chair, /turf/open/floor/almayer{ @@ -33187,6 +32989,12 @@ icon_state = "cargo" }, /area/almayer/shipboard/brig/cryo) +"eyv" = ( +/obj/structure/machinery/sentry_holder/almayer, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south1) "eyG" = ( /obj/structure/platform, /turf/open/floor/almayer{ @@ -33339,24 +33147,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/starboard_umbilical) -"eBE" = ( -/obj/structure/surface/table/almayer, -/obj/effect/landmark/map_item{ - pixel_x = -8 - }, -/obj/item/toy/plush/therapy/red{ - desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; - force = 15; - layer = 4.1; - name = "Sergeant Huggs"; - pixel_x = 7; - pixel_y = -1; - throwforce = 15 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/briefing) "eBO" = ( /obj/structure/bed, /turf/open/floor/almayer{ @@ -34002,6 +33792,19 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) +"eRt" = ( +/obj/structure/sign/safety/ammunition{ + pixel_x = 15; + pixel_y = 32 + }, +/obj/structure/sign/safety/hazard{ + pixel_y = 32 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/hull/lower_hull/l_f_s) "eRu" = ( /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -34079,6 +33882,27 @@ /obj/effect/landmark/crap_item, /turf/open/floor/almayer, /area/almayer/living/briefing) +"eTh" = ( +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = 28 + }, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/structure/surface/rack, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/medical/upper_medical) "eTo" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -34092,6 +33916,13 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cells) +"eTx" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "eTO" = ( /obj/structure/sign/safety/maint{ pixel_x = -17 @@ -35141,20 +34972,6 @@ icon_state = "red" }, /area/almayer/shipboard/starboard_missiles) -"frJ" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/sign/safety/ammunition{ - pixel_x = 15; - pixel_y = 32 - }, -/obj/structure/sign/safety/hazard{ - pixel_y = 32 - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "frM" = ( /obj/effect/decal/warning_stripes{ icon_state = "S"; @@ -35265,42 +35082,6 @@ icon_state = "plating_striped" }, /area/almayer/living/cryo_cells) -"ftg" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = -2; - pixel_y = 4 - }, -/obj/structure/window/reinforced{ - dir = 8; - layer = 3.3; - pixel_y = 4 - }, -/obj/structure/bed{ - can_buckle = 0 - }, -/obj/structure/bed{ - buckling_y = 13; - layer = 3.5; - pixel_y = 13 - }, -/obj/item/bedsheet/yellow{ - layer = 3.2 - }, -/obj/item/bedsheet/yellow{ - pixel_y = 13 - }, -/obj/structure/sign/safety/bathunisex{ - pixel_x = -16; - pixel_y = 8 - }, -/obj/item/toy/plush/barricade, -/obj{ - name = "---Merge conflict marker---" - }, -/obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, -/area/almayer/living/briefing) "fti" = ( /obj/structure/machinery/door/poddoor/railing{ dir = 2; @@ -35791,6 +35572,16 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/morgue) +"fFq" = ( +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "fFD" = ( /obj/structure/window/reinforced{ dir = 4; @@ -36243,6 +36034,13 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/aft_hallway) +"fOh" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4; + icon_state = "exposed01-supply" + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/command/combat_correspondent) "fOk" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 @@ -36400,14 +36198,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/starboard_hallway) -"fTh" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 10 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "fTi" = ( /obj/structure/largecrate/supply/floodlights, /turf/open/floor/almayer{ @@ -36531,6 +36321,16 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/medical/morgue) +"fXt" = ( +/obj/structure/window/framed/almayer, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "green" + }, +/area/almayer/squads/req) "fXx" = ( /obj/structure/surface/rack, /turf/open/floor/almayer{ @@ -37187,23 +36987,10 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_s) -"gka" = ( -/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/hull/lower_hull/l_f_s) "gks" = ( /obj/structure/largecrate/random/secure, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) -"gkv" = ( -/obj/structure/surface/table/almayer, -/obj/item/device/taperecorder, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "gkJ" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 @@ -37419,6 +37206,15 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_s) +"gqF" = ( +/obj/structure/machinery/photocopier, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "gqK" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -38120,6 +37916,36 @@ icon_state = "plate" }, /area/almayer/engineering/upper_engineering/port) +"gEI" = ( +/obj/item/device/flashlight/lamp/green{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/structure/machinery/door_control{ + id = "cl_shutters"; + name = "Privacy Shutters"; + pixel_x = -5; + pixel_y = 8; + req_access_txt = "200" + }, +/obj/structure/machinery/door_control{ + id = "RoomDivider"; + name = "Room Divider"; + pixel_x = -5; + pixel_y = -4; + req_access_txt = "200" + }, +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/door_control{ + pixel_x = -5; + pixel_y = 2; + req_access_txt = "200"; + name = "Evac Pod Door Control"; + id = "cl_evac"; + normaldoorcontrol = 1 + }, +/turf/open/floor/carpet, +/area/almayer/command/corporateliason) "gEK" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -38167,6 +37993,31 @@ icon_state = "plate" }, /area/almayer/squads/delta) +"gGl" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/taperecorder, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) +"gGo" = ( +/obj/structure/surface/table/almayer, +/obj/effect/landmark/map_item{ + pixel_x = -8 + }, +/obj/item/toy/plush/therapy/red{ + desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; + force = 15; + layer = 4.1; + name = "Sergeant Huggs"; + pixel_x = 7; + pixel_y = -1; + throwforce = 15 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "gGr" = ( /obj/structure/machinery/vending/cigarette, /turf/open/floor/almayer{ @@ -38299,6 +38150,12 @@ icon_state = "orange" }, /area/almayer/engineering/lower_engineering) +"gJs" = ( +/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend, +/turf/open/floor/almayer{ + icon_state = "green" + }, +/area/almayer/squads/req) "gJP" = ( /obj/structure/machinery/light, /obj/structure/disposalpipe/segment{ @@ -38754,6 +38611,14 @@ icon_state = "green" }, /area/almayer/living/grunt_rnr) +"gUr" = ( +/obj/item/stack/folding_barricade/three, +/obj/item/stack/folding_barricade/three, +/obj/structure/surface/rack, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/hull/lower_hull/l_f_s) "gUv" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -39094,16 +38959,6 @@ icon_state = "silver" }, /area/almayer/living/auxiliary_officer_office) -"hbI" = ( -/obj/structure/sign/safety/ammunition{ - pixel_x = 32; - pixel_y = 7 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/medical/upper_medical) "hbZ" = ( /obj/structure/surface/table/almayer, /obj/structure/sign/safety/terminal{ @@ -39269,6 +39124,13 @@ icon_state = "plate" }, /area/almayer/engineering/engine_core) +"hey" = ( +/obj/effect/decal/cleanable/blood/oil/streak, +/obj/structure/machinery/sentry_holder/almayer, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south1) "heH" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -39737,19 +39599,6 @@ icon_state = "sterile_green" }, /area/almayer/medical/hydroponics) -"hnI" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/obj/structure/machinery/door/airlock/multi_tile/almayer/generic2{ - access_modified = 1; - name = "\improper Flight Crew Quarters"; - req_one_access_txt = "19;22" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/living/pilotbunks) "hnV" = ( /obj/structure/machinery/light, /turf/open/floor/almayer, @@ -40495,6 +40344,14 @@ /obj/structure/largecrate/random/barrel/red, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) +"hGa" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "hGB" = ( /obj/structure/machinery/light, /turf/open/floor/wood/ship, @@ -40620,6 +40477,19 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_s) +"hJh" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/emails{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "hJk" = ( /obj/structure/stairs/perspective{ dir = 4; @@ -41611,6 +41481,15 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/north1) +"ift" = ( +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/structure/surface/rack, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/engineering/upper_engineering) "ifR" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -41713,6 +41592,19 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_m_p) +"iii" = ( +/obj/structure/sign/safety/ammunition{ + pixel_x = 15; + pixel_y = -32 + }, +/obj/structure/sign/safety/hazard{ + pixel_y = -32 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/squads/req) "iit" = ( /obj/effect/decal/warning_stripes{ icon_state = "W"; @@ -41917,6 +41809,14 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/living/offices/flight) +"imW" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 10 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "ina" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/emails{ @@ -43432,6 +43332,14 @@ icon_state = "mono" }, /area/almayer/medical/hydroponics) +"iUC" = ( +/obj/structure/machinery/faxmachine, +/obj/structure/surface/table/almayer, +/obj/structure/machinery/light/small, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "iUW" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -43494,6 +43402,16 @@ }, /turf/open/floor/carpet, /area/almayer/living/commandbunks) +"iWb" = ( +/obj/structure/sign/safety/hazard{ + pixel_x = 32; + pixel_y = -8 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/medical/upper_medical) "iWc" = ( /obj/structure/surface/table/almayer, /obj/structure/pipes/standard/simple/hidden/supply{ @@ -44553,6 +44471,20 @@ /obj/structure/machinery/door/firedoor/border_only/almayer, /turf/open/floor/plating, /area/almayer/command/cic) +"jog" = ( +/obj/structure/surface/table/almayer, +/obj/item/storage/photo_album{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/folder/black{ + pixel_y = -3; + pixel_x = 7 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "jox" = ( /obj/structure/machinery/brig_cell/cell_3{ pixel_x = -32 @@ -44717,6 +44649,12 @@ icon_state = "greencorner" }, /area/almayer/hallways/starboard_hallway) +"juf" = ( +/obj/structure/machinery/sentry_holder/almayer, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north1) "jup" = ( /obj/effect/decal/warning_stripes{ icon_state = "NW-out"; @@ -45634,6 +45572,15 @@ icon_state = "plate" }, /area/almayer/hallways/hangar) +"jRZ" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_m4a3_pistol, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/engineering/upper_engineering) "jSo" = ( /obj/item/tool/warning_cone, /turf/open/floor/almayer{ @@ -46128,6 +46075,14 @@ icon_state = "bluefull" }, /area/almayer/squads/charlie_delta_shared) +"kaJ" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "kaN" = ( /obj/structure/platform{ dir = 1 @@ -46594,6 +46549,10 @@ /obj/structure/machinery/light, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/grunt_rnr) +"knT" = ( +/obj/structure/safe/cl_office, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliason) "koc" = ( /obj/structure/machinery/status_display{ pixel_y = -30 @@ -46847,6 +46806,12 @@ icon_state = "cargo" }, /area/almayer/squads/bravo) +"ksv" = ( +/obj/structure/closet/secure_closet/securecom, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "ksA" = ( /obj/structure/closet/secure_closet/freezer/fridge/groceries, /obj/structure/machinery/light{ @@ -46892,17 +46857,6 @@ icon_state = "red" }, /area/almayer/shipboard/brig/evidence_storage) -"ktn" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m4ra_rifle, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "plating" - }, -/area/almayer/shipboard/brig/armory) "ktB" = ( /obj/structure/largecrate/random/barrel/white, /turf/open/floor/almayer{ @@ -48089,16 +48043,6 @@ icon_state = "plating" }, /area/almayer/squads/req) -"kTc" = ( -/obj/structure/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "kTq" = ( /obj/structure/largecrate/supply/supplies/mre, /turf/open/floor/almayer{ @@ -48154,18 +48098,23 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/hangar) -"kUh" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/airlock/multi_tile/almayer/generic2{ - access_modified = 1; - dir = 1; - name = "\improper Flight Crew Quarters"; - req_one_access_txt = "19;22" - }, +"kUb" = ( +/obj/structure/closet/secure_closet, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/obj/item/storage/box/tapes, +/obj/item/clothing/head/fedora, +/obj/item/clothing/suit/storage/marine/light/reporter, +/obj/item/clothing/head/helmet/marine/reporter, +/obj/item/clothing/head/cmcap/reporter, +/obj/item/device/flashlight, +/obj/item/device/toner, +/obj/item/device/toner, /turf/open/floor/almayer{ - icon_state = "test_floor4" + icon_state = "plate" }, -/area/almayer/living/pilotbunks) +/area/almayer/command/combat_correspondent) "kUt" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -48952,6 +48901,22 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) +"llt" = ( +/obj/structure/machinery/conveyor{ + id = "req_belt" + }, +/obj/structure/plasticflaps, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/turf/open/floor/almayer, +/area/almayer/squads/req) +"llD" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 5 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/command/combat_correspondent) "llM" = ( /obj/structure/pipes/vents/scrubber, /turf/open/floor/almayer, @@ -49795,6 +49760,20 @@ icon_state = "plate" }, /area/almayer/engineering/engineering_workshop/hangar) +"lCn" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/sign/safety/ammunition{ + pixel_x = 15; + pixel_y = 32 + }, +/obj/structure/sign/safety/hazard{ + pixel_y = 32 + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "lCt" = ( /turf/open/floor/almayer{ dir = 10; @@ -50267,6 +50246,20 @@ /obj/structure/surface/table/almayer, /turf/open/floor/almayer, /area/almayer/squads/charlie) +"lLN" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = -30 + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m4ra_rifle, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/almayer/shipboard/brig/armory) "lLS" = ( /obj/structure/sign/safety/galley{ pixel_x = 32 @@ -50431,15 +50424,6 @@ icon_state = "test_floor4" }, /area/almayer/medical/medical_science) -"lOR" = ( -/obj/structure/machinery/photocopier, -/obj/structure/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "lPB" = ( /obj/structure/surface/table/almayer, /obj/item/device/lightreplacer, @@ -50618,6 +50602,12 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) +"lUv" = ( +/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/hull/lower_hull/l_f_s) "lVl" = ( /obj/structure/machinery/cm_vending/sorted/tech/electronics_storage, /turf/open/floor/almayer, @@ -51642,13 +51632,6 @@ icon_state = "silver" }, /area/almayer/command/cichallway) -"mtX" = ( -/obj/structure/machinery/light, -/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_mk1_rifle_ap, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) "mub" = ( /obj/structure/barricade/handrail{ dir = 4 @@ -51664,6 +51647,48 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) +"mus" = ( +/obj/item/bedsheet/blue{ + layer = 3.2 + }, +/obj/item/bedsheet/blue{ + pixel_y = 13 + }, +/obj/item/toy/plush/therapy/red{ + desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; + force = 15; + layer = 4.1; + name = "Sergeant Huggs"; + pixel_y = 15; + throwforce = 15 + }, +/obj/item/clothing/head/cmcap{ + layer = 4.1; + pixel_x = -1; + pixel_y = 22 + }, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/turf/open/floor/almayer{ + icon_state = "blue" + }, +/area/almayer/living/port_emb) "mux" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -51883,13 +51908,6 @@ /obj/effect/spawner/random/tool, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south1) -"mAr" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/closet/secure_closet/guncabinet/blue/riot_control, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "mAT" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ dir = 8; @@ -53169,6 +53187,15 @@ icon_state = "test_floor4" }, /area/almayer/living/gym) +"nbr" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "nbB" = ( /obj/structure/closet/secure_closet/freezer/fridge/full, /turf/open/floor/almayer{ @@ -54086,14 +54113,6 @@ icon_state = "bluefull" }, /area/almayer/living/briefing) -"nuL" = ( -/obj/structure/machinery/faxmachine, -/obj/structure/surface/table/almayer, -/obj/structure/machinery/light/small, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "nuN" = ( /obj/effect/landmark/start/marine/medic/alpha, /obj/effect/landmark/late_join/alpha, @@ -54161,6 +54180,17 @@ /obj/item/tool/lighter/zippo/gold, /turf/open/floor/carpet, /area/almayer/living/commandbunks) +"nww" = ( +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = 28 + }, +/obj/structure/machinery/cm_vending/clothing/staff_officer_armory, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "nwx" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ @@ -54442,19 +54472,6 @@ icon_state = "plate" }, /area/almayer/command/lifeboat) -"nDd" = ( -/obj/structure/sign/safety/ammunition{ - pixel_x = 15; - pixel_y = 32 - }, -/obj/structure/sign/safety/hazard{ - pixel_y = 32 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/hull/lower_hull/l_f_s) "nDh" = ( /obj/structure/transmitter/rotary{ name = "CL Office Telephone"; @@ -54927,6 +54944,52 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_s) +"nMM" = ( +/obj/item/bedsheet/blue{ + layer = 3.2 + }, +/obj/item/bedsheet/blue{ + pixel_y = 13 + }, +/obj/item/toy/plush/therapy/red{ + desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; + force = 15; + layer = 4.1; + name = "Sergeant Huggs"; + pixel_y = 15; + throwforce = 15 + }, +/obj/item/clothing/head/cmcap{ + layer = 4.1; + pixel_x = -1; + pixel_y = 22 + }, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/obj{ + name = "---Merge conflict marker---" + }, +/obj/structure/bed/chair/comfy/charlie, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "nMV" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = 25 @@ -55148,6 +55211,13 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/engineering/upper_engineering) +"nSj" = ( +/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "green" + }, +/area/almayer/squads/req) "nSG" = ( /obj/structure/machinery/door_control{ id = "tcomms"; @@ -55747,54 +55817,22 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_p) -"ogZ" = ( -/obj/item/bedsheet/blue{ - layer = 3.2 - }, -/obj/item/bedsheet/blue{ - pixel_y = 13 - }, -/obj/item/toy/plush/therapy/red{ - desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; - force = 15; - layer = 4.1; - name = "Sergeant Huggs"; - pixel_y = 15; - throwforce = 15 - }, -/obj/item/clothing/head/cmcap{ - layer = 4.1; - pixel_x = -1; - pixel_y = 22 - }, -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = -2; - pixel_y = 4 - }, -/obj/structure/window/reinforced{ - dir = 8; - layer = 3.3; - pixel_y = 4 - }, -/obj/structure/bed{ - can_buckle = 0 - }, -/obj/structure/bed{ - buckling_y = 13; - layer = 3.5; - pixel_y = 13 - }, -/turf/open/floor/almayer{ - icon_state = "blue" - }, -/area/almayer/living/port_emb) "ohj" = ( /obj/structure/machinery/cryopod, /turf/open/floor/almayer{ icon_state = "cargo" }, /area/almayer/squads/charlie) +"ohl" = ( +/obj/structure/window/framed/almayer, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "green" + }, +/area/almayer/squads/req) "ohA" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -56112,13 +56150,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/wood/ship, /area/almayer/shipboard/brig/cells) -"omu" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "omy" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -56332,16 +56363,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/port_emb) -"oqY" = ( -/obj/structure/machinery/conveyor{ - id = "req_belt" - }, -/obj/structure/plasticflaps, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 1 - }, -/turf/open/floor/almayer, -/area/almayer/squads/req) "oqZ" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/microwave{ @@ -56492,6 +56513,18 @@ "otu" = ( /turf/closed/wall/almayer/research/containment/wall/connect_w, /area/almayer/medical/containment/cell) +"otK" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic2{ + access_modified = 1; + dir = 1; + name = "\improper Flight Crew Quarters"; + req_one_access_txt = "19;22" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/living/pilotbunks) "otX" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -56895,22 +56928,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/medical_science) -"oDk" = ( -/obj/structure/surface/table/almayer, -/obj/item/clothing/mask/cigarette/pipe{ - pixel_x = 8 - }, -/obj/structure/transmitter/rotary{ - name = "Reporter Telephone"; - phone_category = "Almayer"; - phone_id = "Reporter"; - pixel_x = -4; - pixel_y = 6 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "oDv" = ( /turf/open/floor/almayer{ dir = 9; @@ -56953,6 +56970,12 @@ icon_state = "mono" }, /area/almayer/medical/medical_science) +"oDO" = ( +/obj/structure/machinery/sentry_holder/almayer, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south2) "oDR" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 @@ -57378,14 +57401,6 @@ icon_state = "mono" }, /area/almayer/engineering/ce_room) -"oNf" = ( -/obj/item/stack/folding_barricade/three, -/obj/item/stack/folding_barricade/three, -/obj/structure/surface/rack, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/hull/lower_hull/l_f_s) "oNj" = ( /obj/structure/sign/prop1{ pixel_x = -32; @@ -57905,6 +57920,15 @@ icon_state = "red" }, /area/almayer/shipboard/brig/main_office) +"pbl" = ( +/obj/structure/bed, +/obj/item/toy/plush/farwa{ + pixel_x = 5 + }, +/obj/item/clothing/under/redpyjamas, +/obj/item/bedsheet/orange, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliason) "pbp" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/almayer{ @@ -59822,12 +59846,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) -"pVx" = ( -/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/squads/req) "pVA" = ( /obj/item/trash/cigbutt/ucigbutt{ pixel_x = 2; @@ -60151,6 +60169,15 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) +"qbh" = ( +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/obj/structure/machinery/light/small, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "qbt" = ( /obj/structure/pipes/vents/pump, /turf/open/floor/almayer{ @@ -60484,15 +60511,6 @@ icon_state = "plate" }, /area/almayer/hallways/stern_hallway) -"qhl" = ( -/obj/structure/bed, -/obj/item/toy/plush/farwa{ - pixel_x = 5 - }, -/obj/item/clothing/under/redpyjamas, -/obj/item/bedsheet/orange, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliason) "qhx" = ( /obj/structure/flora/pottedplant{ icon_state = "pottedplant_22" @@ -60942,15 +60960,6 @@ }, /turf/open/floor/wood/ship, /area/almayer/living/basketball) -"qqr" = ( -/obj/structure/machinery/light{ - dir = 8 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_m4a3_pistol, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/engineering/upper_engineering) "qqu" = ( /turf/open/floor/almayer{ dir = 1; @@ -61335,6 +61344,28 @@ icon_state = "plating" }, /area/almayer/hallways/vehiclehangar) +"qyJ" = ( +/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) +"qyM" = ( +/obj/structure/surface/table/almayer, +/obj/item/clothing/mask/cigarette/pipe{ + pixel_x = 8 + }, +/obj/structure/transmitter/rotary{ + name = "Reporter Telephone"; + phone_category = "Almayer"; + phone_id = "Reporter"; + pixel_x = -4; + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "qyW" = ( /obj/structure/bed/chair{ dir = 4 @@ -61706,15 +61737,6 @@ icon_state = "mono" }, /area/almayer/medical/medical_science) -"qJf" = ( -/obj/structure/machinery/light{ - dir = 4 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/engineering/upper_engineering) "qJj" = ( /obj/structure/desertdam/decals/road_edge{ icon_state = "road_edge_decal3"; @@ -62163,6 +62185,19 @@ icon_state = "red" }, /area/almayer/shipboard/brig/general_equipment) +"qRL" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic2{ + access_modified = 1; + name = "\improper Flight Crew Quarters"; + req_one_access_txt = "19;22" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/living/pilotbunks) "qRT" = ( /obj/effect/decal/warning_stripes{ icon_state = "SE-out"; @@ -62863,6 +62898,17 @@ icon_state = "emeraldcorner" }, /area/almayer/living/briefing) +"rhD" = ( +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "rhO" = ( /obj/structure/machinery/vending/cola/research{ pixel_x = 4 @@ -63568,6 +63614,12 @@ /obj/structure/largecrate/random/case/double, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) +"rwT" = ( +/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/engineering/upper_engineering) "rwY" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/poddoor/shutters/almayer{ @@ -63628,12 +63680,6 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/north1) -"ryR" = ( -/obj/structure/machinery/cm_vending/clothing/staff_officer_armory, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) "rzf" = ( /obj/effect/landmark/late_join/working_joe, /obj/effect/landmark/start/working_joe, @@ -64236,6 +64282,11 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_s) +"rJg" = ( +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "rJh" = ( /obj/item/storage/backpack/marine/satchel{ desc = "It's the heavy-duty black polymer kind. Time to take out the trash!"; @@ -64360,23 +64411,6 @@ dir = 8 }, /area/almayer/medical/containment/cell/cl) -"rNg" = ( -/obj/structure/closet/secure_closet, -/obj/item/device/camera_film, -/obj/item/device/camera_film, -/obj/item/device/camera_film, -/obj/item/storage/box/tapes, -/obj/item/clothing/head/fedora, -/obj/item/clothing/suit/storage/marine/light/reporter, -/obj/item/clothing/head/helmet/marine/reporter, -/obj/item/clothing/head/cmcap/reporter, -/obj/item/device/flashlight, -/obj/item/device/toner, -/obj/item/device/toner, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "rNF" = ( /obj/structure/machinery/light{ unacidable = 1; @@ -65694,15 +65728,6 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/starboard) -"ssW" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) "ssX" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 6 @@ -66097,14 +66122,6 @@ icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) -"sDm" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "sDu" = ( /obj/item/clothing/under/marine/dress, /turf/open/floor/almayer{ @@ -66614,15 +66631,6 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south1) -"sOZ" = ( -/obj/structure/sign/safety/ammunition{ - pixel_y = 32 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_m4a3_pistol, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/medical/upper_medical) "sPc" = ( /obj/structure/machinery/light{ dir = 1 @@ -67047,14 +67055,6 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/south2) -"sYB" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "sYC" = ( /obj/structure/machinery/door/airlock/almayer/maint, /obj/structure/machinery/door/poddoor/almayer/open{ @@ -67910,6 +67910,12 @@ icon_state = "test_floor4" }, /area/almayer/hull/lower_hull/l_m_s) +"tpt" = ( +/obj/structure/machinery/sentry_holder/almayer, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north2) "tpD" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -69126,6 +69132,10 @@ /obj/structure/machinery/light, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) +"tQM" = ( +/obj/structure/safe/co_office, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "tQV" = ( /turf/closed/wall/almayer/outer, /area/almayer/lifeboat_pumps/south1) @@ -69214,6 +69224,28 @@ icon_state = "orangecorner" }, /area/almayer/living/briefing) +"tSF" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/camera{ + pixel_x = -8; + pixel_y = 12 + }, +/obj/item/paper_bin/uscm{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/tool/pen{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = -8; + pixel_y = -1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "tTp" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/condiment/hotsauce/sriracha{ @@ -69628,14 +69660,6 @@ /obj/item/frame/table, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_a_p) -"ubf" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "ubA" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -69677,6 +69701,15 @@ icon_state = "plate" }, /area/almayer/command/cic) +"udb" = ( +/obj/structure/sign/safety/ammunition{ + pixel_y = 32 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_m4a3_pistol, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/medical/upper_medical) "udi" = ( /turf/open/floor/almayer{ icon_state = "red" @@ -69843,6 +69876,16 @@ icon_state = "cargo" }, /area/almayer/squads/req) +"ufS" = ( +/obj/structure/sign/safety/terminal{ + pixel_x = 7; + pixel_y = 29 + }, +/obj/structure/filingcabinet, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "ugs" = ( /obj/structure/surface/table/almayer, /obj/item/book/manual/marine_law{ @@ -70202,6 +70245,40 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) +"uoh" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/obj/item/bedsheet/yellow{ + layer = 3.2 + }, +/obj/item/bedsheet/yellow{ + pixel_y = 13 + }, +/obj/structure/sign/safety/bathunisex{ + pixel_x = -16; + pixel_y = 8 + }, +/obj/item/toy/plush/barricade, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/port_emb) "uoi" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -71983,13 +72060,6 @@ icon_state = "tcomms" }, /area/almayer/engineering/upper_engineering/starboard) -"uXW" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4; - icon_state = "exposed01-supply" - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/command/combat_correspondent) "uYa" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 4 @@ -72026,16 +72096,6 @@ /obj/structure/window/framed/almayer, /turf/open/floor/plating, /area/almayer/hallways/repair_bay) -"uZY" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/machinery/light/small{ - dir = 1 - }, -/obj/structure/closet/secure_closet/guncabinet/blue/riot_control, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "uZZ" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ name = "\improper Basketball Court" @@ -72083,16 +72143,6 @@ icon_state = "orange" }, /area/almayer/squads/bravo) -"vbR" = ( -/obj/structure/window/framed/almayer, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 1 - }, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "green" - }, -/area/almayer/squads/req) "vbS" = ( /obj/structure/closet/secure_closet/personal/patient{ name = "morgue closet" @@ -73045,16 +73095,6 @@ icon_state = "plate" }, /area/almayer/hallways/hangar) -"vsI" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/machinery/camera/autoname/almayer{ - name = "ship-grade camera" - }, -/obj/structure/closet/secure_closet/guncabinet/blue/riot_control, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "vsJ" = ( /obj/structure/machinery/door/airlock/almayer/maint{ access_modified = 1; @@ -74058,6 +74098,14 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/port_hallway) +"vMC" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "vME" = ( /turf/open/floor/almayer{ dir = 9; @@ -74785,6 +74833,16 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull) +"vZJ" = ( +/obj/structure/sign/safety/intercom{ + pixel_x = 8; + pixel_y = 32 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/medical/upper_medical) "wan" = ( /obj/structure/surface/table/almayer, /obj/item/facepaint/brown, @@ -74997,6 +75055,15 @@ icon_state = "red" }, /area/almayer/shipboard/brig/main_office) +"wdv" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/engineering/upper_engineering) "wdz" = ( /obj/effect/landmark/start/marine/engineer/charlie, /obj/effect/landmark/late_join/charlie, @@ -76071,6 +76138,13 @@ icon_state = "sterile_green" }, /area/almayer/medical/lower_medical_medbay) +"wAd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "wAR" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -76150,12 +76224,6 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) -"wDl" = ( -/obj/effect/decal/cleanable/blood/oil/streak, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/south1) "wDm" = ( /obj/effect/decal/warning_stripes{ icon_state = "NE-out"; @@ -76350,13 +76418,6 @@ /obj/effect/landmark/late_join/delta, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/delta) -"wGI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light{ - dir = 8 - }, -/turf/open/floor/almayer, -/area/almayer/hull/upper_hull/u_f_p) "wGX" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -76757,6 +76818,16 @@ icon_state = "bluefull" }, /area/almayer/command/cichallway) +"wQa" = ( +/obj/structure/sign/safety/hazard{ + pixel_x = 15; + pixel_y = 32 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_m4a3_pistol, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/medical/upper_medical) "wQg" = ( /turf/open/floor/almayer{ dir = 1; @@ -77018,17 +77089,6 @@ "wVb" = ( /turf/closed/wall/almayer/outer, /area/almayer/hull/lower_hull/l_a_s) -"wVw" = ( -/obj/structure/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "wVy" = ( /obj/structure/window/reinforced{ dir = 8 @@ -77957,20 +78017,6 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/port) -"xoS" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 - }, -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = -30 - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m4ra_rifle, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "plating" - }, -/area/almayer/shipboard/brig/armory) "xpd" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/manifold/hidden/supply{ @@ -78149,6 +78195,12 @@ icon_state = "cargo" }, /area/almayer/hallways/vehiclehangar) +"xtg" = ( +/obj/structure/machinery/cm_vending/clothing/staff_officer_armory, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "xtD" = ( /obj/structure/surface/table/almayer, /obj/item/tool/weldpack, @@ -78166,6 +78218,17 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_lobby) +"xub" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m4ra_rifle, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/almayer/shipboard/brig/armory) "xuc" = ( /obj/structure/surface/table/almayer, /obj/item/tool/extinguisher, @@ -78614,12 +78677,6 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/hangar) -"xBb" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 5 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/command/combat_correspondent) "xBe" = ( /turf/closed/wall/almayer/reinforced, /area/almayer/engineering/upper_engineering) @@ -79024,40 +79081,6 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/hangar) -"xKt" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = -2; - pixel_y = 4 - }, -/obj/structure/window/reinforced{ - dir = 8; - layer = 3.3; - pixel_y = 4 - }, -/obj/structure/bed{ - can_buckle = 0 - }, -/obj/structure/bed{ - buckling_y = 13; - layer = 3.5; - pixel_y = 13 - }, -/obj/item/bedsheet/yellow{ - layer = 3.2 - }, -/obj/item/bedsheet/yellow{ - pixel_y = 13 - }, -/obj/structure/sign/safety/bathunisex{ - pixel_x = -16; - pixel_y = 8 - }, -/obj/item/toy/plush/barricade, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/port_emb) "xKM" = ( /obj/structure/machinery/status_display{ pixel_x = 16; @@ -79805,6 +79828,13 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering) +"xZf" = ( +/obj/structure/machinery/light, +/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_mk1_rifle_ap, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "xZz" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/faxmachine/uscm/command/capt, @@ -80126,6 +80156,13 @@ }, /turf/open/floor/wood/ship, /area/almayer/shipboard/brig/chief_mp_office) +"yeX" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/closet/secure_closet/guncabinet/blue/riot_control, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "yfm" = ( /obj/effect/landmark/start/marine/delta, /obj/effect/landmark/late_join/delta, @@ -80209,6 +80246,16 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_s) +"ygM" = ( +/obj/structure/sign/safety/ammunition{ + pixel_x = 32; + pixel_y = 7 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/medical/upper_medical) "yhI" = ( /turf/open/floor/almayer{ dir = 4; @@ -80256,20 +80303,6 @@ }, /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) -"yiL" = ( -/obj/structure/surface/table/almayer, -/obj/item/storage/photo_album{ - pixel_x = -4; - pixel_y = 5 - }, -/obj/item/folder/black{ - pixel_y = -3; - pixel_x = 7 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "yiW" = ( /obj/structure/machinery/cryopod/right{ layer = 3.1; @@ -91259,7 +91292,7 @@ eZH ohJ thL thL -eeB +aHT liZ rUk jVa @@ -91841,9 +91874,9 @@ pCi rPC rwS lrq -kTc +fFq uqo -wVw +rhD cqn gTx eRL @@ -92044,9 +92077,9 @@ ahE rPC nfI lrq -omu +eTx uqo -sYB +hGa cqn ldu eRL @@ -92247,9 +92280,9 @@ ahE rPC heV lrq -frJ +lCn uqo -ktn +xub cqn nBb mdS @@ -92450,9 +92483,9 @@ ahE wcn nBc lrq -vsI +ebt uqo -xoS +lLN lrq mAT lrq @@ -92653,7 +92686,7 @@ pCi wcn wcn lrq -mAr +yeX uqo fsT jnA @@ -92856,7 +92889,7 @@ pCi oCL wcn lrq -uZY +ebz uqo uqo uqo @@ -93059,7 +93092,7 @@ pCi rPC aou lrq -mAr +yeX uqo uvy tfO @@ -97215,7 +97248,7 @@ aaa nXP ndx uNL -nDd +eRt soS sgy nsu @@ -97418,9 +97451,9 @@ aaa nXP hJp uNL -gka +lUv bwQ -oNf +gUr uNL aNw kXJ @@ -97762,7 +97795,7 @@ ukU bfP fvv vcK -wGI +wAd tuA tuA tuA @@ -101187,7 +101220,7 @@ sBF amY vtT wVW -abQ +nww atN cEl sOi @@ -101390,9 +101423,9 @@ agj aic aov wVW -atx +qyJ qEk -ajm +ksv wVW arP alX @@ -101404,7 +101437,7 @@ hkG wVW fvB qEk -auR +aGi wVW aKn aKz @@ -101593,7 +101626,7 @@ agj aic aov wVW -atx +qyJ qEk ato wVW @@ -101607,7 +101640,7 @@ aEB wVW fvB qEk -auR +aGi wVW aKn aKz @@ -101796,7 +101829,7 @@ agj aic aov wVW -ssW +nbr qEk hrm wVW @@ -101810,7 +101843,7 @@ aEC wVW dNZ qEk -mtX +xZf wVW aKn aKz @@ -101988,7 +102021,7 @@ cnX lIh agj mXj -afo +tQM lue ahw aiG @@ -101999,7 +102032,7 @@ agj aic aoA wVW -atx +qyJ jvX ato wVW @@ -102011,9 +102044,9 @@ alX aIf aED wVW -ryR +xtg jvX -auR +aGi wVW aKn aKy @@ -103810,7 +103843,7 @@ awW add add add -add +juf add add add @@ -103856,7 +103889,7 @@ baw aJU aJU aJU -wDl +hey aJU aJU aJU @@ -104440,7 +104473,7 @@ umS yjM qbO aqw -hnI +qRL bYe amO wZM @@ -105231,7 +105264,7 @@ aoC add add add -add +juf add add add @@ -105277,7 +105310,7 @@ baw aJU aJU aJU -aJU +eyv aJU aJU aJU @@ -106060,7 +106093,7 @@ aiX aiX aiX sHM -kUh +otK aiX aiX aiX @@ -108697,7 +108730,7 @@ dtM akU ajC sqf -anp +wQa wjz fnA jZY @@ -108900,7 +108933,7 @@ dtM aii ajC sqf -sOZ +udb oNJ eDo eDo @@ -109103,7 +109136,7 @@ dtM ajt aik sqf -anq +eTh awn xsz jTj @@ -109306,11 +109339,11 @@ dtM aii ajC sqf -anr +vZJ awn tEi -asu -hbI +iWb +ygM sqf ajl vtx @@ -112377,7 +112410,7 @@ awE bqy bYj eUR -bsd +gEI nDh bYj xne @@ -114205,7 +114238,7 @@ rne rne fAo awE -bhM +knT wQv bBi awE @@ -114612,7 +114645,7 @@ rne wft awE hpf -qhl +pbl igp awE hoX @@ -115883,7 +115916,7 @@ wNl nGh fPp lqN -xKt +uoh nsY xCN pOB @@ -115896,7 +115929,7 @@ aLJ eBg dAO cEG -ftg +ckE dYX tBF lBz @@ -116537,7 +116570,7 @@ bJz bdg wLV wLV -bKg +nMM wLV wLV wNT @@ -116550,7 +116583,7 @@ uVh nsY kzK lFh -ogZ +mus pVA mzV pML @@ -116702,7 +116735,7 @@ aLf tRc qEW bdd -eBE +gGo mLb wmz vpt @@ -120783,7 +120816,7 @@ rbY gwD bOK bPD -bYa +nSj bPD jOk bNB @@ -120986,7 +121019,7 @@ rbY bEc bKA bCA -bQS +gJs bCA bKA bEc @@ -121064,7 +121097,7 @@ aeA aeC aeC aeC -aeC +tpt aeC aeC aeC @@ -121112,7 +121145,7 @@ lJY vcE vcE vcE -vcE +oDO vcE vcE vcE @@ -122485,7 +122518,7 @@ amH aeC aeC aeC -aeC +tpt aeC aeC aeC @@ -122533,7 +122566,7 @@ kKR vcE vcE vcE -vcE +oDO vcE vcE vcE @@ -122618,7 +122651,7 @@ bZr bNQ bNQ bNQ -bGz +ohl hMs cbw iEb @@ -122821,7 +122854,7 @@ bZr krN krN krN -oqY +llt can buH iEb @@ -122927,9 +122960,9 @@ alG anG apf oIB -dQx -oDk -yiL +tSF +qyM +jog oIB sFR vuv @@ -123024,7 +123057,7 @@ bZr ibc uly bNN -vbR +fXt pky cbv cbS @@ -123130,9 +123163,9 @@ alG aYD uPI oIB -dGS -bOw -nuL +hJh +vMC +iUC oIB sFR vuv @@ -123333,9 +123366,9 @@ sUF anG apd oIB -dXs +ufS bZw -sDm +kaJ oIB sFR hPo @@ -123430,7 +123463,7 @@ bZr bKA dyx eYr -bUo +iii uys cbz cbU @@ -123537,8 +123570,8 @@ aYD aTS qgK tEB -xBb -gkv +llD +gGl oIB lBR nVu @@ -123633,7 +123666,7 @@ bmD bKA dyx hGN -pVx +ddN uys ttM iEb @@ -123740,8 +123773,8 @@ anG mPX oIB wKF -uXW -ubf +fOh +diM oIB fbx cFA @@ -123942,9 +123975,9 @@ aSC aZH iAB oIB -lOR -fTh -cVu +gqF +imW +qbh oIB fbx cxo @@ -124145,8 +124178,8 @@ rFY ctC gPF oIB -rNg -aUb +kUb +rJg pxj oIB fbx @@ -126167,8 +126200,8 @@ auu aoT aFm xBe -aIV -qqr +cij +jRZ arH xBe alG @@ -126575,7 +126608,7 @@ anO nFX atv auV -amE +ift xBe alG aDZ @@ -126778,7 +126811,7 @@ atc nFX atv auV -amE +ift xBe alG aYj @@ -127182,8 +127215,8 @@ atq aDr aFu xBe -azp -qJf +rwT +wdv anV xBe alG diff --git a/maps/shuttles/escape_shuttle_e_cl.dmm b/maps/shuttles/escape_shuttle_e_cl.dmm index df10125c3a3a..490f0abdfa95 100644 --- a/maps/shuttles/escape_shuttle_e_cl.dmm +++ b/maps/shuttles/escape_shuttle_e_cl.dmm @@ -42,7 +42,7 @@ /turf/open/shuttle/escapepod, /area/shuttle/escape_pod) "v" = ( -/obj/structure/machinery/computer/shuttle/escape_pod_panel{ +/obj/structure/machinery/computer/shuttle/escape_pod_panel/liaison{ pixel_y = 30 }, /turf/open/shuttle/escapepod{ @@ -50,8 +50,9 @@ }, /area/shuttle/escape_pod) "y" = ( -/obj/structure/machinery/door/airlock/evacuation{ - name = "\improper Evacuation Airlock CL-1" +/obj/structure/machinery/door/airlock/evacuation/liaison{ + name = "\improper Evacuation Airlock CL-1"; + id_tag = "cl_evac" }, /turf/open/floor/almayer{ icon_state = "test_floor4" diff --git a/sound/effects/creak1.ogg b/sound/effects/creak1.ogg new file mode 100644 index 000000000000..0cad4802ffa9 Binary files /dev/null and b/sound/effects/creak1.ogg differ diff --git a/sound/effects/creak2.ogg b/sound/effects/creak2.ogg new file mode 100644 index 000000000000..707bf39e338e Binary files /dev/null and b/sound/effects/creak2.ogg differ diff --git a/sound/effects/creak3.ogg b/sound/effects/creak3.ogg new file mode 100644 index 000000000000..88ff37a339ed Binary files /dev/null and b/sound/effects/creak3.ogg differ diff --git a/sound/items/whistle.ogg b/sound/items/whistle.ogg index 8e276d522669..3223f52cae36 100644 Binary files a/sound/items/whistle.ogg and b/sound/items/whistle.ogg differ diff --git a/tgui/packages/tgui/interfaces/EscapePodConsole.tsx b/tgui/packages/tgui/interfaces/EscapePodConsole.tsx index b4bc410a433d..8153008adbee 100644 --- a/tgui/packages/tgui/interfaces/EscapePodConsole.tsx +++ b/tgui/packages/tgui/interfaces/EscapePodConsole.tsx @@ -7,6 +7,7 @@ interface EscapePodProps { door_lock: 0 | 1; door_state: 0 | 1; can_delay: 0 | 1; + launch_without_evac: number; } export const EscapePodConsole = (_props, context) => { @@ -21,6 +22,9 @@ export const EscapePodConsole = (_props, context) => { case 4: statusMessage = 'NO EVACUATION'; buttonColor = 'neutral'; + if (data.launch_without_evac) { + operable = 1; + } break; case 5: statusMessage = 'SYSTEMS DOWN';