From d34be4c3e764ed6abdb9e3e358c0ad1bb1d70d0a Mon Sep 17 00:00:00 2001 From: harryob Date: Wed, 21 Feb 2024 13:06:57 +0000 Subject: [PATCH 01/23] back burnering this to complete firas pr --- code/__HELPERS/lazy_templates.dm | 15 +++ code/datums/emergency_calls/ert_stations.dm | 14 +++ code/datums/lazy_template.dm | 104 ++++++++++++++++++ colonialmarines.dme | 3 + .../{ => lazy_templates}/clf_ert_station.dmm | 0 .../freelancer_ert_station.dmm | 0 .../{ => lazy_templates}/twe_ert_station.dmm | 0 .../{ => lazy_templates}/upp_ert_station.dmm | 0 .../weyland_ert_station.dmm | 0 9 files changed, 136 insertions(+) create mode 100644 code/__HELPERS/lazy_templates.dm create mode 100644 code/datums/emergency_calls/ert_stations.dm create mode 100644 code/datums/lazy_template.dm rename maps/templates/{ => lazy_templates}/clf_ert_station.dmm (100%) rename maps/templates/{ => lazy_templates}/freelancer_ert_station.dmm (100%) rename maps/templates/{ => lazy_templates}/twe_ert_station.dmm (100%) rename maps/templates/{ => lazy_templates}/upp_ert_station.dmm (100%) rename maps/templates/{ => lazy_templates}/weyland_ert_station.dmm (100%) diff --git a/code/__HELPERS/lazy_templates.dm b/code/__HELPERS/lazy_templates.dm new file mode 100644 index 000000000000..79d0192df9a5 --- /dev/null +++ b/code/__HELPERS/lazy_templates.dm @@ -0,0 +1,15 @@ +GLOBAL_LIST_INIT(lazy_templates, generate_lazy_template_map()) + +/** + * Iterates through all lazy template datums that exist and returns a list of them as an associative list of map_name -> instance. + * + * Screams if more than one key exists, loudly. + */ +/proc/generate_lazy_template_map() + . = list() + for(var/datum/lazy_template/template as anything in subtypesof(/datum/lazy_template)) + var/map_name = initial(template.map_name) + if(map_name in .) + stack_trace("Found multiple lazy templates with the same map name! '[map_name]'") + .[map_name] = new template + return . diff --git a/code/datums/emergency_calls/ert_stations.dm b/code/datums/emergency_calls/ert_stations.dm new file mode 100644 index 000000000000..a677d077dc13 --- /dev/null +++ b/code/datums/emergency_calls/ert_stations.dm @@ -0,0 +1,14 @@ +/datum/lazy_template/clf_ert_station + map_name = "clf_ert_station" + +/datum/lazy_template/freelancer_ert_station + map_name = "freelancer_ert_station" + +/datum/lazy_template/twe_ert_station + map_name = "twe_ert_station" + +/datum/lazy_template/upp_ert_station + map_name = "upp_ert_station" + +/datum/lazy_template/weyland_ert_station + map_name = "weyland_ert_station" diff --git a/code/datums/lazy_template.dm b/code/datums/lazy_template.dm new file mode 100644 index 000000000000..ae89b5e4f808 --- /dev/null +++ b/code/datums/lazy_template.dm @@ -0,0 +1,104 @@ + +/** + * Datum used to designate certain areas that do not need to exist nor be loaded at world start + * but do want to be loaded under certain circumstances. Use this for stuff like the nukie base or wizden, aka stuff that only matters when their antag is rolled. + */ +/datum/lazy_template + var/list/datum/turf_reservation/reservations = list() + + /// If this is true each load will increment an index keyed to the type and it will load [map_name]_[index] + var/uses_multiple_allocations = FALSE + + /// Key to identify this template - used in caching + var/key + + /// Directory of maps to prefix to the filename + var/map_dir = "maps/templates/lazy_templates" + + /// The filename (without extension) of the map to load + var/map_name + +/datum/lazy_template/New() + reservations = list() + ..() + +/datum/lazy_template/Destroy(force) + if(!force) + stack_trace("Something is trying to delete [type]") + return QDEL_HINT_LETMELIVE + + QDEL_LIST(reservations) + GLOB.lazy_templates -= key + return ..() + +/** + * Does the grunt work of loading the template. + */ +/datum/lazy_template/proc/lazy_load() + RETURN_TYPE(/turf) + // This is a static assosciative list that is used to ensure maps that have variations are correctly varied when spawned + // I want to make it to where you can make a range and it'll randomly pick'n'take from the available versions at random + // But that can be done later when I have the time + var/static/list/multiple_allocation_hash = list() + + var/load_path = "[map_dir]/[map_name].dmm" + if(uses_multiple_allocations) + var/times = multiple_allocation_hash[key] || 0 + times += 1 + multiple_allocation_hash[key] = times + load_path = "[map_dir]/[map_name]_[times].dmm" + + if(!load_path || !fexists(load_path)) + CRASH("lazy template [type] has an invalid load_path: '[load_path]', check directory and map name!") + + var/datum/parsed_map/parsed_template = load_map( + file(load_path), + measure_only = TRUE, + ) + if(isnull(parsed_template.parsed_bounds)) + CRASH("Failed to cache lazy template for loading: '[key]'") + + var/width = parsed_template.parsed_bounds[MAP_MAXX] - parsed_template.parsed_bounds[MAP_MINX] + 1 + var/height = parsed_template.parsed_bounds[MAP_MAXY] - parsed_template.parsed_bounds[MAP_MINY] + 1 + var/datum/turf_reservation/reservation = SSmapping.request_turf_block_reservation( + width, + height, + parsed_template.parsed_bounds[MAP_MAXZ], + ) + if(!reservation) + CRASH("Failed to reserve a block for lazy template: '[key]'") + + // lists kept for overall loading + var/list/loaded_atom_movables = list() + var/list/loaded_turfs = list() + var/list/loaded_areas = list() + + var/list/obj/structure/cable/loaded_cables = list() + var/list/obj/machinery/atmospherics/loaded_atmospherics = list() + + for(var/z_idx in parsed_template.parsed_bounds[MAP_MAXZ] to 1 step -1) + var/turf/bottom_left = reservation.bottom_left_turfs[z_idx] + var/turf/top_right = reservation.top_right_turfs[z_idx] + + load_map( + file(load_path), + bottom_left.x, + bottom_left.y, + bottom_left.z, + z_upper = z_idx, + z_lower = z_idx, + ) + for(var/turf/turf as anything in block(bottom_left, top_right)) + loaded_turfs += turf + loaded_areas |= get_area(turf) + + // atoms can actually be in the contents of two or more turfs based on its icon/bound size + // see https://www.byond.com/docs/ref/index.html#/atom/var/contents + for(var/thing in (turf.get_all_contents() - turf)) + loaded_atom_movables |= thing + + SSatoms.InitializeAtoms(loaded_areas + loaded_atom_movables + loaded_turfs) + + SEND_SIGNAL(src, COMSIG_LAZY_TEMPLATE_LOADED, loaded_atom_movables, loaded_turfs, loaded_areas) + reservations += reservation + return reservation diff --git a/colonialmarines.dme b/colonialmarines.dme index 602e4fa9de30..7209c6d5b8ba 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -172,6 +172,7 @@ #include "code\__HELPERS\guid.dm" #include "code\__HELPERS\icons.dm" #include "code\__HELPERS\job.dm" +#include "code\__HELPERS\lazy_templates.dm" #include "code\__HELPERS\level_traits.dm" #include "code\__HELPERS\lighting.dm" #include "code\__HELPERS\lists.dm" @@ -342,6 +343,7 @@ #include "code\datums\fluff_emails.dm" #include "code\datums\global_variables.dm" #include "code\datums\http.dm" +#include "code\datums\lazy_template.dm" #include "code\datums\map_config.dm" #include "code\datums\matrix_editor.dm" #include "code\datums\medal_awards.dm" @@ -506,6 +508,7 @@ #include "code\datums\emergency_calls\deus_vult.dm" #include "code\datums\emergency_calls\dutch.dm" #include "code\datums\emergency_calls\emergency_call.dm" +#include "code\datums\emergency_calls\ert_stations.dm" #include "code\datums\emergency_calls\feral_xenos.dm" #include "code\datums\emergency_calls\forsaken_xenos.dm" #include "code\datums\emergency_calls\goons.dm" diff --git a/maps/templates/clf_ert_station.dmm b/maps/templates/lazy_templates/clf_ert_station.dmm similarity index 100% rename from maps/templates/clf_ert_station.dmm rename to maps/templates/lazy_templates/clf_ert_station.dmm diff --git a/maps/templates/freelancer_ert_station.dmm b/maps/templates/lazy_templates/freelancer_ert_station.dmm similarity index 100% rename from maps/templates/freelancer_ert_station.dmm rename to maps/templates/lazy_templates/freelancer_ert_station.dmm diff --git a/maps/templates/twe_ert_station.dmm b/maps/templates/lazy_templates/twe_ert_station.dmm similarity index 100% rename from maps/templates/twe_ert_station.dmm rename to maps/templates/lazy_templates/twe_ert_station.dmm diff --git a/maps/templates/upp_ert_station.dmm b/maps/templates/lazy_templates/upp_ert_station.dmm similarity index 100% rename from maps/templates/upp_ert_station.dmm rename to maps/templates/lazy_templates/upp_ert_station.dmm diff --git a/maps/templates/weyland_ert_station.dmm b/maps/templates/lazy_templates/weyland_ert_station.dmm similarity index 100% rename from maps/templates/weyland_ert_station.dmm rename to maps/templates/lazy_templates/weyland_ert_station.dmm From cde9766f26dd5c2db2c9920f766ac99d05ac37a4 Mon Sep 17 00:00:00 2001 From: harryob Date: Thu, 22 Feb 2024 18:46:10 +0000 Subject: [PATCH 02/23] compile --- code/__DEFINES/dcs/signals/signals_datum.dm | 3 +++ code/datums/lazy_template.dm | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/dcs/signals/signals_datum.dm b/code/__DEFINES/dcs/signals/signals_datum.dm index 7696d8ad6037..b798d510763e 100644 --- a/code/__DEFINES/dcs/signals/signals_datum.dm +++ b/code/__DEFINES/dcs/signals/signals_datum.dm @@ -64,3 +64,6 @@ // from /proc/update_living_queens() : /mob/living/carbon/xenomorph/queen #define COMSIG_HIVE_NEW_QUEEN "hive_new_queen" + +/// Fired on the lazy template datum when the template is finished loading. (list/loaded_atom_movables, list/loaded_turfs, list/loaded_areas) +#define COMSIG_LAZY_TEMPLATE_LOADED "lazy_template_loaded" diff --git a/code/datums/lazy_template.dm b/code/datums/lazy_template.dm index ae89b5e4f808..aa94a67e2bc5 100644 --- a/code/datums/lazy_template.dm +++ b/code/datums/lazy_template.dm @@ -74,7 +74,6 @@ var/list/loaded_areas = list() var/list/obj/structure/cable/loaded_cables = list() - var/list/obj/machinery/atmospherics/loaded_atmospherics = list() for(var/z_idx in parsed_template.parsed_bounds[MAP_MAXZ] to 1 step -1) var/turf/bottom_left = reservation.bottom_left_turfs[z_idx] From b33b2434f5a049ec269f800c4b06a029689d815d Mon Sep 17 00:00:00 2001 From: harryob <55142896+harryob@users.noreply.github.com> Date: Fri, 23 Feb 2024 16:24:16 +0000 Subject: [PATCH 03/23] the tidying --- code/__DEFINES/shuttles.dm | 8 ++++++ code/_globalvars/global_lists.dm | 9 ++++++ code/controllers/subsystem/mapping.dm | 28 +++++++++++++++++++ code/datums/emergency_calls/clf.dm | 1 + code/datums/emergency_calls/deathsquad.dm | 6 ++-- code/datums/emergency_calls/emergency_call.dm | 26 +++++++++++++---- code/datums/emergency_calls/inspection.dm | 2 +- code/datums/emergency_calls/pizza.dm | 4 +-- code/datums/emergency_calls/pmc.dm | 2 +- code/datums/emergency_calls/upp.dm | 3 +- code/datums/emergency_calls/upp_commando.dm | 2 +- code/datums/lazy_template.dm | 4 +-- code/modules/shuttle/shuttles/ert.dm | 20 ++++--------- 13 files changed, 84 insertions(+), 31 deletions(-) diff --git a/code/__DEFINES/shuttles.dm b/code/__DEFINES/shuttles.dm index dfd470a5dba3..07b412409a77 100644 --- a/code/__DEFINES/shuttles.dm +++ b/code/__DEFINES/shuttles.dm @@ -134,3 +134,11 @@ #define ESCAPE_SHUTTLE_SOUTH_PREFIX "escape_shuttle_s" #define ESCAPE_SHUTTLE_DOCK_PREFIX "almayer-hangar-escape-shuttle-" + +#define ERT_SHUTTLE_DEFAULT_RECHARGE 90 SECONDS + +#define ADMIN_LANDING_PAD_1 "base-ert1" +#define ADMIN_LANDING_PAD_2 "base-ert2" +#define ADMIN_LANDING_PAD_3 "base-ert3" +#define ADMIN_LANDING_PAD_4 "base-ert4" +#define ADMIN_LANDING_PAD_5 "base-ert5" diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm index 4dbf46086f02..2745a87c2be6 100644 --- a/code/_globalvars/global_lists.dm +++ b/code/_globalvars/global_lists.dm @@ -522,3 +522,12 @@ GLOBAL_PROTECT(topic_tokens) GLOBAL_LIST_EMPTY(topic_commands) GLOBAL_PROTECT(topic_commands) + +GLOBAL_LIST_INIT(distress_beacon_hubs, setup_distress_hubs()) + +/proc/setup_distress_hubs() + var/all_hubs = list() + for(var/path in subtypesof(/datum/ert_home)) + all_hubs[path] = new path() + return all_hubs + diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index f4e4b5979618..1d137aa7d8ae 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -37,6 +37,9 @@ SUBSYSTEM_DEF(mapping) /// list of traits and their associated z leves var/list/z_trait_levels = list() + /// list of lazy templates that have been loaded + var/list/loaded_lazy_templates + //dlete dis once #39770 is resolved /datum/controller/subsystem/mapping/proc/HACK_LoadMapConfig() if(!configs) @@ -423,3 +426,28 @@ SUBSYSTEM_DEF(mapping) if(!MC) return MAIN_SHIP_DEFAULT_NAME return MC.map_name + +/datum/controller/subsystem/mapping/proc/lazy_load_template(datum/lazy_template/template_to_load, force = FALSE) + RETURN_TYPE(/datum/turf_reservation) + + UNTIL(initialized) + var/static/lazy_loading = FALSE + UNTIL(!lazy_loading) + + lazy_loading = TRUE + . = _lazy_load_template(template_to_load, force) + lazy_loading = FALSE + return . + +/datum/controller/subsystem/mapping/proc/_lazy_load_template(datum/lazy_template/template_to_load, force = FALSE) + PRIVATE_PROC(TRUE) + + if(LAZYACCESS(loaded_lazy_templates, template_to_load) && !force) + var/datum/lazy_template/template = GLOB.lazy_templates[template_to_load] + return template.reservations[1] + LAZYSET(loaded_lazy_templates, template_to_load, TRUE) + + var/datum/lazy_template/target = GLOB.lazy_templates[template_to_load] + if(!target) + CRASH("Attempted to lazy load a template key that does not exist: '[template_to_load]'") + return target.lazy_load() diff --git a/code/datums/emergency_calls/clf.dm b/code/datums/emergency_calls/clf.dm index 88c95ef31bc4..c11b1a160287 100644 --- a/code/datums/emergency_calls/clf.dm +++ b/code/datums/emergency_calls/clf.dm @@ -8,6 +8,7 @@ objectives = "Assault the USCM, and sabotage as much as you can. Ensure any survivors escape in your custody." probability = 20 hostility = TRUE + home_base = /datum/ert_home/clf var/max_synths = 1 var/synths = 0 diff --git a/code/datums/emergency_calls/deathsquad.dm b/code/datums/emergency_calls/deathsquad.dm index 1cd5bdef6713..f1ba506cf8fb 100644 --- a/code/datums/emergency_calls/deathsquad.dm +++ b/code/datums/emergency_calls/deathsquad.dm @@ -9,7 +9,7 @@ arrival_message = "'!`2*%slau#*jer t*h$em a!l%. le&*ve n(o^ w&*nes%6es.*v$e %#d ou^'" objectives = "Whiteout protocol is in effect for the target. Ensure there are no traces of the infestation or any witnesses." probability = 0 - shuttle_id = "Distress_PMC" + shuttle_id = MOBILE_SHUTTLE_ID_ERT2 name_of_spawn = /obj/effect/landmark/ert_spawns/distress_pmc item_spawn = /obj/effect/landmark/ert_spawns/distress_pmc/item max_medics = 1 @@ -91,7 +91,7 @@ mob_max = 8 mob_min = 5 probability = 0 - shuttle_id = "Distress_PMC" + shuttle_id = MOBILE_SHUTTLE_ID_ERT2 name_of_spawn = /obj/effect/landmark/ert_spawns/distress_pmc /datum/emergency_call/marsoc/create_member(datum/mind/M, turf/override_spawn_loc) @@ -120,7 +120,7 @@ mob_max = 8 mob_min = 5 probability = 0 - shuttle_id = "Distress_PMC" + shuttle_id = MOBILE_SHUTTLE_ID_ERT2 name_of_spawn = /obj/effect/landmark/ert_spawns/distress_pmc /datum/emergency_call/marsoc_covert/create_member(datum/mind/M) diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index 998af015d07c..b971f5d85248 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -57,6 +57,20 @@ var/time_required_for_job = 5 HOURS + /// the [/datum/ert_home] we should attempt to spawn in for the return journey + var/home_base + +/datum/ert_home + /// the lazy template we should spawn in that contains the home base + var/base_template + + /// the dock ID we should attempt to dock home with + var/home_dock + +/datum/ert_home/clf + base_template = /datum/lazy_template/clf_ert_station + home_dock = ADMIN_LANDING_PAD_1 + /datum/game_mode/proc/initialize_emergency_calls() if(all_calls.len) //It's already been set up. return @@ -269,12 +283,14 @@ if(M.client) to_chat(M, SPAN_NOTICE("Distress beacon: [src.name] finalized.")) - var/obj/docking_port/mobile/shuttle = SSshuttle.getShuttle(shuttle_id) + var/obj/docking_port/mobile/shuttle + if(shuttle_id) + if(!SSmapping.shuttle_templates[shuttle_id]) + message_admins("Distress beacon: [name] does not have a valid shuttle_id: [shuttle_id]") + CRASH("ert called with invalid shuttle_id") - if(!istype(shuttle)) - if(shuttle_id) //Cryo distress doesn't have a shuttle - message_admins("Warning: Distress shuttle not found.") - spawn_items() + var/datum/map_template/shuttle/new_shuttle = SSmapping.shuttle_templates[shuttle_id] + shuttle = SSshuttle.load_template_to_transit(new_shuttle) if(shuttle && auto_shuttle_launch) var/obj/structure/machinery/computer/shuttle/ert/comp = shuttle.getControlConsole() diff --git a/code/datums/emergency_calls/inspection.dm b/code/datums/emergency_calls/inspection.dm index d2efcf5fe275..85f6a063346f 100644 --- a/code/datums/emergency_calls/inspection.dm +++ b/code/datums/emergency_calls/inspection.dm @@ -304,7 +304,7 @@ name = "Inspection - Colonial Marshals Ledger Investigation Team" mob_max = 3 //Marshal, Deputy, ICC CL mob_min = 2 - shuttle_id = "Distress_PMC" + shuttle_id = MOBILE_SHUTTLE_ID_ERT2 max_synths = 0 will_spawn_icc_liaison = TRUE diff --git a/code/datums/emergency_calls/pizza.dm b/code/datums/emergency_calls/pizza.dm index d80ea7e21139..a2c312887dc9 100644 --- a/code/datums/emergency_calls/pizza.dm +++ b/code/datums/emergency_calls/pizza.dm @@ -6,7 +6,7 @@ mob_min = 1 arrival_message = "'That'll be... sixteen orders of cheesy fries, eight large double topping pizzas, nine bottles of Four Loko... hello? Is anyone on this ship? Your pizzas are getting cold.'" objectives = "Make sure you get a tip!" - shuttle_id = "Distress_Small" + shuttle_id = MOBILE_SHUTTLE_ID_ERT_SMALL name_of_spawn = /obj/effect/landmark/ert_spawns/distress_pizza probability = 1 @@ -32,7 +32,7 @@ name = "Pizza Delivery (Cryo)" probability = 0 name_of_spawn = /obj/effect/landmark/ert_spawns/distress_cryo - shuttle_id = "" + shuttle_id = MOBILE_SHUTTLE_ID_ERT_SMALL /obj/effect/landmark/ert_spawns/distress_pizza name = "Distress_Pizza" diff --git a/code/datums/emergency_calls/pmc.dm b/code/datums/emergency_calls/pmc.dm index 2f43e94828d6..c356854dcd62 100644 --- a/code/datums/emergency_calls/pmc.dm +++ b/code/datums/emergency_calls/pmc.dm @@ -4,7 +4,7 @@ name = "Weyland-Yutani PMC (Squad)" mob_max = 6 probability = 20 - shuttle_id = "Distress_PMC" + shuttle_id = MOBILE_SHUTTLE_ID_ERT2 name_of_spawn = /obj/effect/landmark/ert_spawns/distress_pmc item_spawn = /obj/effect/landmark/ert_spawns/distress_pmc/item diff --git a/code/datums/emergency_calls/upp.dm b/code/datums/emergency_calls/upp.dm index 036e6f9e8b77..44d8d9d8165d 100644 --- a/code/datums/emergency_calls/upp.dm +++ b/code/datums/emergency_calls/upp.dm @@ -5,7 +5,8 @@ name = "UPP Naval Infantry (Squad)" mob_max = 9 probability = 20 - shuttle_id = "Distress_UPP" + shuttle_id = MOBILE_SHUTTLE_ID_ERT3 + name_of_spawn = /obj/effect/landmark/ert_spawns/distress_upp item_spawn = /obj/effect/landmark/ert_spawns/distress_upp/item //1 leader, 1 engineer, 2 medics, 1 specialist, 5 soldiers diff --git a/code/datums/emergency_calls/upp_commando.dm b/code/datums/emergency_calls/upp_commando.dm index 1bc2b59ba08c..53f117c26127 100644 --- a/code/datums/emergency_calls/upp_commando.dm +++ b/code/datums/emergency_calls/upp_commando.dm @@ -5,7 +5,7 @@ mob_max = 6 probability = 0 objectives = "Stealthily assault the ship. Use your silenced weapons, tranquilizers, and night vision to get the advantage on the enemy. Take out the power systems, comms and engine. Stick together and keep a low profile." - shuttle_id = "Distress_UPP" + shuttle_id = MOBILE_SHUTTLE_ID_ERT3 name_of_spawn = /obj/effect/landmark/ert_spawns/distress_upp item_spawn = /obj/effect/landmark/ert_spawns/distress_upp/item hostility = TRUE diff --git a/code/datums/lazy_template.dm b/code/datums/lazy_template.dm index aa94a67e2bc5..c475f9a7e9c2 100644 --- a/code/datums/lazy_template.dm +++ b/code/datums/lazy_template.dm @@ -35,7 +35,7 @@ * Does the grunt work of loading the template. */ /datum/lazy_template/proc/lazy_load() - RETURN_TYPE(/turf) + RETURN_TYPE(/datum/turf_reservation) // This is a static assosciative list that is used to ensure maps that have variations are correctly varied when spawned // I want to make it to where you can make a range and it'll randomly pick'n'take from the available versions at random // But that can be done later when I have the time @@ -73,8 +73,6 @@ var/list/loaded_turfs = list() var/list/loaded_areas = list() - var/list/obj/structure/cable/loaded_cables = list() - for(var/z_idx in parsed_template.parsed_bounds[MAP_MAXZ] to 1 step -1) var/turf/bottom_left = reservation.bottom_left_turfs[z_idx] var/turf/top_right = reservation.top_right_turfs[z_idx] diff --git a/code/modules/shuttle/shuttles/ert.dm b/code/modules/shuttle/shuttles/ert.dm index 4c078f3fe6d3..3f87fc6a5445 100644 --- a/code/modules/shuttle/shuttles/ert.dm +++ b/code/modules/shuttle/shuttles/ert.dm @@ -2,14 +2,6 @@ ERT Shuttles */ -#define ERT_SHUTTLE_DEFAULT_RECHARGE 90 SECONDS - -#define ADMIN_LANDING_PAD_1 "base-ert1" -#define ADMIN_LANDING_PAD_2 "base-ert2" -#define ADMIN_LANDING_PAD_3 "base-ert3" -#define ADMIN_LANDING_PAD_4 "base-ert4" -#define ADMIN_LANDING_PAD_5 "base-ert5" - // Base ERT Shuttle /obj/docking_port/mobile/emergency_response name = "ERT Shuttle" @@ -310,24 +302,24 @@ /datum/map_template/shuttle/response_ert name = "Response Shuttle" - shuttle_id = "ert_response_shuttle" + shuttle_id = MOBILE_SHUTTLE_ID_ERT1 /datum/map_template/shuttle/pmc_ert name = "PMC Shuttle" - shuttle_id = "ert_pmc_shuttle" + shuttle_id = MOBILE_SHUTTLE_ID_ERT2 /datum/map_template/shuttle/upp_ert name = "UPP Shuttle" - shuttle_id = "ert_upp_shuttle" + shuttle_id = MOBILE_SHUTTLE_ID_ERT3 /datum/map_template/shuttle/twe_ert name = "TWE Shuttle" - shuttle_id = "ert_twe_shuttle" + shuttle_id = MOBILE_SHUTTLE_ID_ERT4 /datum/map_template/shuttle/small_ert name = "Rescue Shuttle" - shuttle_id = "ert_small_shuttle_north" + shuttle_id = MOBILE_SHUTTLE_ID_ERT_SMALL /datum/map_template/shuttle/big_ert name = "Boarding Shuttle" - shuttle_id = "ert_shuttle_big" + shuttle_id = MOBILE_SHUTTLE_ID_ERT_BIG From 92c1eb9e31639ca958dbf26416753f01be21d1d4 Mon Sep 17 00:00:00 2001 From: harryob Date: Fri, 23 Feb 2024 17:08:22 +0000 Subject: [PATCH 04/23] use the correct thingies magies --- code/__DEFINES/shuttles.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/shuttles.dm b/code/__DEFINES/shuttles.dm index 07b412409a77..af3e164deb71 100644 --- a/code/__DEFINES/shuttles.dm +++ b/code/__DEFINES/shuttles.dm @@ -96,8 +96,8 @@ #define MOBILE_SHUTTLE_ID_ERT2 "ert_pmc_shuttle" #define MOBILE_SHUTTLE_ID_ERT3 "ert_upp_shuttle" #define MOBILE_SHUTTLE_ID_ERT4 "ert_twe_shuttle" -#define MOBILE_SHUTTLE_ID_ERT_SMALL "ert_rescue_shuttle" -#define MOBILE_SHUTTLE_ID_ERT_BIG "ert_boarding_shuttle" +#define MOBILE_SHUTTLE_ID_ERT_SMALL "ert_small_shuttle_north" +#define MOBILE_SHUTTLE_ID_ERT_BIG "ert_shuttle_big" #define MOBILE_TRIJENT_ELEVATOR "trijentshuttle2" #define STAT_TRIJENT_EMPTY "trijent_empty" From d7b3336bbcf12d801e711eac31c09e0a79b3fd70 Mon Sep 17 00:00:00 2001 From: harryob Date: Sat, 24 Feb 2024 20:27:51 +0000 Subject: [PATCH 05/23] lets do this --- code/__HELPERS/lazy_templates.dm | 11 ++---- code/_globalvars/global_lists.dm | 9 ----- code/datums/emergency_calls/cbrn.dm | 1 + code/datums/emergency_calls/clf.dm | 3 +- code/datums/emergency_calls/cmb.dm | 1 + code/datums/emergency_calls/deathsquad.dm | 3 ++ code/datums/emergency_calls/emergency_call.dm | 35 ++++++++++++------- code/datums/emergency_calls/ert_stations.dm | 10 +++--- code/datums/emergency_calls/goons.dm | 1 + code/datums/emergency_calls/inspection.dm | 2 ++ code/datums/emergency_calls/pmc.dm | 1 + code/datums/emergency_calls/royal_marines.dm | 1 + code/datums/emergency_calls/upp.dm | 2 +- code/datums/lazy_template.dm | 13 +++---- code/game/area/areas.dm | 6 ---- code/game/turfs/open.dm | 4 +++ code/game/turfs/turf.dm | 5 --- code/game/turfs/walls/wall_icon.dm | 4 +++ code/modules/shuttle/computer.dm | 30 ++++++++++++++++ code/modules/shuttle/shuttles/ert.dm | 29 +++++++++++++++ .../tgui/interfaces/NavigationShuttle.tsx | 18 +++++++++- 21 files changed, 132 insertions(+), 57 deletions(-) diff --git a/code/__HELPERS/lazy_templates.dm b/code/__HELPERS/lazy_templates.dm index 79d0192df9a5..1a5dcf27f996 100644 --- a/code/__HELPERS/lazy_templates.dm +++ b/code/__HELPERS/lazy_templates.dm @@ -1,15 +1,10 @@ GLOBAL_LIST_INIT(lazy_templates, generate_lazy_template_map()) /** - * Iterates through all lazy template datums that exist and returns a list of them as an associative list of map_name -> instance. - * - * Screams if more than one key exists, loudly. - */ + * Iterates through all lazy template datums that exist and returns a list of them as an associative list of type -> instance. + * */ /proc/generate_lazy_template_map() . = list() for(var/datum/lazy_template/template as anything in subtypesof(/datum/lazy_template)) - var/map_name = initial(template.map_name) - if(map_name in .) - stack_trace("Found multiple lazy templates with the same map name! '[map_name]'") - .[map_name] = new template + .[template] = new template return . diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm index 2745a87c2be6..4dbf46086f02 100644 --- a/code/_globalvars/global_lists.dm +++ b/code/_globalvars/global_lists.dm @@ -522,12 +522,3 @@ GLOBAL_PROTECT(topic_tokens) GLOBAL_LIST_EMPTY(topic_commands) GLOBAL_PROTECT(topic_commands) - -GLOBAL_LIST_INIT(distress_beacon_hubs, setup_distress_hubs()) - -/proc/setup_distress_hubs() - var/all_hubs = list() - for(var/path in subtypesof(/datum/ert_home)) - all_hubs[path] = new path() - return all_hubs - diff --git a/code/datums/emergency_calls/cbrn.dm b/code/datums/emergency_calls/cbrn.dm index cee96e10137e..fc20f98f20b3 100644 --- a/code/datums/emergency_calls/cbrn.dm +++ b/code/datums/emergency_calls/cbrn.dm @@ -2,6 +2,7 @@ name = "CBRN (Squad)" arrival_message = "A CBRN squad has been dispatched to your ship. Stand by." objectives = "Handle the chemical, biological, radiological, or nuclear threat. Further orders may be provided." + home_base = /datum/lazy_template/ert/weyland_station mob_min = 3 mob_max = 5 max_heavies = 0 diff --git a/code/datums/emergency_calls/clf.dm b/code/datums/emergency_calls/clf.dm index c11b1a160287..f633311750ff 100644 --- a/code/datums/emergency_calls/clf.dm +++ b/code/datums/emergency_calls/clf.dm @@ -4,11 +4,12 @@ /datum/emergency_call/clf name = "Colonial Liberation Front (Squad)" mob_max = 10 + mob_min = 1 arrival_message = "'Attention, you are tresspassing on our soverign territory. Expect no forgiveness.'" objectives = "Assault the USCM, and sabotage as much as you can. Ensure any survivors escape in your custody." probability = 20 hostility = TRUE - home_base = /datum/ert_home/clf + home_base = /datum/lazy_template/ert/clf_station var/max_synths = 1 var/synths = 0 diff --git a/code/datums/emergency_calls/cmb.dm b/code/datums/emergency_calls/cmb.dm index 56b8b169b313..feb31cf0fe16 100644 --- a/code/datums/emergency_calls/cmb.dm +++ b/code/datums/emergency_calls/cmb.dm @@ -3,6 +3,7 @@ name = "CMB - Colonial Marshals Patrol Team (Friendly)" mob_max = 5 probability = 10 + home_base = /datum/lazy_template/ert/weyland_station var/max_synths = 1 var/synths = 0 diff --git a/code/datums/emergency_calls/deathsquad.dm b/code/datums/emergency_calls/deathsquad.dm index f1ba506cf8fb..66e9a377a8bc 100644 --- a/code/datums/emergency_calls/deathsquad.dm +++ b/code/datums/emergency_calls/deathsquad.dm @@ -10,6 +10,7 @@ objectives = "Whiteout protocol is in effect for the target. Ensure there are no traces of the infestation or any witnesses." probability = 0 shuttle_id = MOBILE_SHUTTLE_ID_ERT2 + home_base = /datum/lazy_template/ert/weyland_station name_of_spawn = /obj/effect/landmark/ert_spawns/distress_pmc item_spawn = /obj/effect/landmark/ert_spawns/distress_pmc/item max_medics = 1 @@ -92,6 +93,7 @@ mob_min = 5 probability = 0 shuttle_id = MOBILE_SHUTTLE_ID_ERT2 + home_base = /datum/lazy_template/ert/weyland_station name_of_spawn = /obj/effect/landmark/ert_spawns/distress_pmc /datum/emergency_call/marsoc/create_member(datum/mind/M, turf/override_spawn_loc) @@ -122,6 +124,7 @@ probability = 0 shuttle_id = MOBILE_SHUTTLE_ID_ERT2 name_of_spawn = /obj/effect/landmark/ert_spawns/distress_pmc + home_base = /datum/lazy_template/ert/weyland_station /datum/emergency_call/marsoc_covert/create_member(datum/mind/M) diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index b971f5d85248..b620b43bd6b8 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -57,19 +57,11 @@ var/time_required_for_job = 5 HOURS - /// the [/datum/ert_home] we should attempt to spawn in for the return journey - var/home_base + /// the shuttle being used by this distress call + var/obj/docking_port/mobile/emergency_response/shuttle -/datum/ert_home - /// the lazy template we should spawn in that contains the home base - var/base_template - - /// the dock ID we should attempt to dock home with - var/home_dock - -/datum/ert_home/clf - base_template = /datum/lazy_template/clf_ert_station - home_dock = ADMIN_LANDING_PAD_1 + /// the [/datum/lazy_template] we should attempt to spawn in for the return journey + var/home_base = /datum/lazy_template/ert/freelancer_station /datum/game_mode/proc/initialize_emergency_calls() if(all_calls.len) //It's already been set up. @@ -283,7 +275,6 @@ if(M.client) to_chat(M, SPAN_NOTICE("Distress beacon: [src.name] finalized.")) - var/obj/docking_port/mobile/shuttle if(shuttle_id) if(!SSmapping.shuttle_templates[shuttle_id]) message_admins("Distress beacon: [name] does not have a valid shuttle_id: [shuttle_id]") @@ -291,6 +282,7 @@ var/datum/map_template/shuttle/new_shuttle = SSmapping.shuttle_templates[shuttle_id] shuttle = SSshuttle.load_template_to_transit(new_shuttle) + shuttle.home_base = home_base if(shuttle && auto_shuttle_launch) var/obj/structure/machinery/computer/shuttle/ert/comp = shuttle.getControlConsole() @@ -351,6 +343,23 @@ /datum/emergency_call/proc/get_spawn_point(is_for_items) var/landmark + + if(shuttle) + if(is_for_items) + landmark = SAFEPICK(shuttle.local_landmarks[item_spawn]) + else + landmark = SAFEPICK(shuttle.local_landmarks[name_of_spawn]) + + if(landmark) + return get_turf(landmark) + + var/list/valid_turfs = list() + for(var/turf/open/floor/valid_turf in shuttle.return_turfs()) + valid_turfs += valid_turf + + if(length(valid_turfs)) + return pick(valid_turfs) + if(is_for_items) landmark = SAFEPICK(GLOB.ert_spawns[item_spawn]) else diff --git a/code/datums/emergency_calls/ert_stations.dm b/code/datums/emergency_calls/ert_stations.dm index a677d077dc13..3e7874572365 100644 --- a/code/datums/emergency_calls/ert_stations.dm +++ b/code/datums/emergency_calls/ert_stations.dm @@ -1,14 +1,14 @@ -/datum/lazy_template/clf_ert_station +/datum/lazy_template/ert/clf_station map_name = "clf_ert_station" -/datum/lazy_template/freelancer_ert_station +/datum/lazy_template/ert/freelancer_station map_name = "freelancer_ert_station" -/datum/lazy_template/twe_ert_station +/datum/lazy_template/ert/twe_station map_name = "twe_ert_station" -/datum/lazy_template/upp_ert_station +/datum/lazy_template/ert/upp_station map_name = "upp_ert_station" -/datum/lazy_template/weyland_ert_station +/datum/lazy_template/ert/weyland_station map_name = "weyland_ert_station" diff --git a/code/datums/emergency_calls/goons.dm b/code/datums/emergency_calls/goons.dm index fb491a2f43c4..edd3d05d1441 100644 --- a/code/datums/emergency_calls/goons.dm +++ b/code/datums/emergency_calls/goons.dm @@ -2,6 +2,7 @@ name = "Weyland-Yutani Corporate Security (Squad)" mob_max = 6 probability = 0 + home_base = /datum/lazy_template/ert/weyland_station /datum/emergency_call/goon/New() ..() diff --git a/code/datums/emergency_calls/inspection.dm b/code/datums/emergency_calls/inspection.dm index 85f6a063346f..031a9f210761 100644 --- a/code/datums/emergency_calls/inspection.dm +++ b/code/datums/emergency_calls/inspection.dm @@ -125,6 +125,7 @@ name = "Inspection - Corporate" mob_max = 2 mob_min = 1 + home_base = /datum/lazy_template/ert/weyland_station name_of_spawn = /obj/effect/landmark/ert_spawns/distress_pmc item_spawn = /obj/effect/landmark/ert_spawns/distress_pmc/item probability = 0 @@ -207,6 +208,7 @@ mob_max = 4 mob_min = 1 probability = 0 + home_base = /datum/lazy_template/ert/weyland_station var/max_synths = 1 var/synths = 0 diff --git a/code/datums/emergency_calls/pmc.dm b/code/datums/emergency_calls/pmc.dm index c356854dcd62..06a51c9869eb 100644 --- a/code/datums/emergency_calls/pmc.dm +++ b/code/datums/emergency_calls/pmc.dm @@ -5,6 +5,7 @@ mob_max = 6 probability = 20 shuttle_id = MOBILE_SHUTTLE_ID_ERT2 + home_base = /datum/lazy_template/ert/weyland_station name_of_spawn = /obj/effect/landmark/ert_spawns/distress_pmc item_spawn = /obj/effect/landmark/ert_spawns/distress_pmc/item diff --git a/code/datums/emergency_calls/royal_marines.dm b/code/datums/emergency_calls/royal_marines.dm index 21f79e7c3026..b8ad7348e1e8 100644 --- a/code/datums/emergency_calls/royal_marines.dm +++ b/code/datums/emergency_calls/royal_marines.dm @@ -2,6 +2,7 @@ name = "Royal Marines Commando (Squad) (Friendly)" mob_max = 7 probability = 15 + home_base = /datum/lazy_template/ert/twe_station name_of_spawn = /obj/effect/landmark/ert_spawns/distress_twe item_spawn = /obj/effect/landmark/ert_spawns/distress_twe/item max_engineers = 0 diff --git a/code/datums/emergency_calls/upp.dm b/code/datums/emergency_calls/upp.dm index 44d8d9d8165d..cb5db1f0e3b9 100644 --- a/code/datums/emergency_calls/upp.dm +++ b/code/datums/emergency_calls/upp.dm @@ -6,7 +6,7 @@ mob_max = 9 probability = 20 shuttle_id = MOBILE_SHUTTLE_ID_ERT3 - + home_base = /datum/lazy_template/ert/upp_station name_of_spawn = /obj/effect/landmark/ert_spawns/distress_upp item_spawn = /obj/effect/landmark/ert_spawns/distress_upp/item //1 leader, 1 engineer, 2 medics, 1 specialist, 5 soldiers diff --git a/code/datums/lazy_template.dm b/code/datums/lazy_template.dm index c475f9a7e9c2..03715cbd80b8 100644 --- a/code/datums/lazy_template.dm +++ b/code/datums/lazy_template.dm @@ -9,9 +9,6 @@ /// If this is true each load will increment an index keyed to the type and it will load [map_name]_[index] var/uses_multiple_allocations = FALSE - /// Key to identify this template - used in caching - var/key - /// Directory of maps to prefix to the filename var/map_dir = "maps/templates/lazy_templates" @@ -28,7 +25,7 @@ return QDEL_HINT_LETMELIVE QDEL_LIST(reservations) - GLOB.lazy_templates -= key + GLOB.lazy_templates -= type return ..() /** @@ -43,9 +40,9 @@ var/load_path = "[map_dir]/[map_name].dmm" if(uses_multiple_allocations) - var/times = multiple_allocation_hash[key] || 0 + var/times = multiple_allocation_hash[type] || 0 times += 1 - multiple_allocation_hash[key] = times + multiple_allocation_hash[type] = times load_path = "[map_dir]/[map_name]_[times].dmm" if(!load_path || !fexists(load_path)) @@ -56,7 +53,7 @@ measure_only = TRUE, ) if(isnull(parsed_template.parsed_bounds)) - CRASH("Failed to cache lazy template for loading: '[key]'") + CRASH("Failed to cache lazy template for loading: '[type]'") var/width = parsed_template.parsed_bounds[MAP_MAXX] - parsed_template.parsed_bounds[MAP_MINX] + 1 var/height = parsed_template.parsed_bounds[MAP_MAXY] - parsed_template.parsed_bounds[MAP_MINY] + 1 @@ -66,7 +63,7 @@ parsed_template.parsed_bounds[MAP_MAXZ], ) if(!reservation) - CRASH("Failed to reserve a block for lazy template: '[key]'") + CRASH("Failed to reserve a block for lazy template: '[type]'") // lists kept for overall loading var/list/loaded_atom_movables = list() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 732bce1fc3ee..be7037295497 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -104,12 +104,6 @@ if(is_mainship_level(z)) GLOB.ship_areas += src - if(base_lighting_alpha) - return INITIALIZE_HINT_ROUNDSTART - -/area/LateInitialize() - . = ..() - update_base_lighting() /area/proc/initialize_power(override_power) diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index e21dd142f931..8d9ded899a70 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -95,6 +95,10 @@ edge_overlay.SwapColor(rgb(255, 0, 255, 255), rgb(0, 0, 0, 0)) overlays += edge_overlay + var/area/my_area = loc + if(my_area.lighting_effect) + overlays += my_area.lighting_effect + /turf/open/proc/scorch(heat_level) // All scorched icons should be in the dmi that their unscorched bases are // "name_scorched#" where # is the scorchedness level 0 - 1 - 2 - 3 diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 3d15a8c46570..9b0f457cf074 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -101,11 +101,6 @@ if(opacity) directional_opacity = ALL_CARDINALS - //Get area light - var/area/A = loc - if(A?.lighting_effect) - overlays += A.lighting_effect - return INITIALIZE_HINT_NORMAL /turf/Destroy(force) diff --git a/code/game/turfs/walls/wall_icon.dm b/code/game/turfs/walls/wall_icon.dm index 2b414ca46af8..218d59305bdc 100644 --- a/code/game/turfs/walls/wall_icon.dm +++ b/code/game/turfs/walls/wall_icon.dm @@ -44,6 +44,10 @@ bullet_overlay = image('icons/effects/bulletholes.dmi', src, "bhole_[bullethole_state]_2") overlays += bullet_overlay + var/area/my_area = loc + if(my_area.lighting_effect) + overlays += my_area.lighting_effect + #undef BULLETHOLE_STATES #undef cur_increment diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index b803a8f66b55..9e21bb4bd595 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -94,6 +94,7 @@ unslashable = TRUE unacidable = TRUE var/disabled = FALSE + var/must_launch_home = TRUE var/compatible_landing_zones = list() /obj/structure/machinery/computer/shuttle/ert/broken @@ -154,6 +155,7 @@ .["shuttle_mode"] = ert.mode .["flight_time"] = ert.timeLeft(0) .["is_disabled"] = disabled + .["must_launch_home"] = must_launch_home var/door_count = length(ert.external_doors) var/locked_count = 0 @@ -188,6 +190,34 @@ return var/obj/docking_port/mobile/emergency_response/ert = SSshuttle.getShuttle(shuttleId) + + if(must_launch_home) + if(action == "launch_home") + var/datum/turf_reservation/loaded = SSmapping.lazy_load_template(ert.home_base) + var/turf/bottom_left = loaded.bottom_left_turfs[1] + var/turf/top_right = loaded.top_right_turfs[1] + + var/obj/docking_port/stationary/emergency_response/target + for(var/obj/docking_port/stationary/emergency_response/shuttle in SSshuttle.stationary) + if(shuttle.z != bottom_left.z) + continue + if(shuttle.x >= top_right.x || shuttle.y >= top_right.y) + continue + if(shuttle.x <= bottom_left.x || shuttle.y <= bottom_left.y) + continue + + target = shuttle + break + + if(!target) + return + + SSshuttle.moveShuttleToDock(ert, target, TRUE) + target.lockdown_on_land = TRUE + must_launch_home = FALSE + + return + switch(action) if("move") if(ert.mode != SHUTTLE_IDLE) diff --git a/code/modules/shuttle/shuttles/ert.dm b/code/modules/shuttle/shuttles/ert.dm index 3f87fc6a5445..4fea9d96bea3 100644 --- a/code/modules/shuttle/shuttles/ert.dm +++ b/code/modules/shuttle/shuttles/ert.dm @@ -13,6 +13,8 @@ rechargeTime = ERT_SHUTTLE_DEFAULT_RECHARGE // 90s cooldown to recharge var/list/doors = list() var/list/external_doors = list() + var/home_base + var/list/local_landmarks = list() /obj/docking_port/mobile/emergency_response/Initialize(mapload) . = ..(mapload) @@ -28,6 +30,27 @@ control_doors("force-lock-launch", force = TRUE, external_only = TRUE) ..() +/obj/docking_port/mobile/emergency_response/register() + . = ..() + + for(var/turf/current_turf as anything in return_turfs()) + for(var/obj/effect/landmark/landmark in current_turf.GetAllContents()) + LAZYADD(local_landmarks[landmark.type], landmark) + +/obj/docking_port/mobile/emergency_response/initiate_docking(obj/docking_port/stationary/new_dock, movement_direction, force) + . = ..() + if(. != DOCKING_SUCCESS) + return + + if(!is_mainship_level(z)) + return + + if(!home_base) + return + + var/obj/structure/machinery/computer/shuttle/ert/console = getControlConsole() + console.must_launch_home = TRUE + /obj/docking_port/mobile/emergency_response/proc/control_doors(action, force = FALSE, external_only = FALSE) var/list/door_list = doors if(external_only) @@ -174,6 +197,7 @@ width = 7 height = 13 var/is_external = FALSE + var/lockdown_on_land = FALSE /obj/docking_port/stationary/emergency_response/on_arrival(obj/docking_port/mobile/arriving_shuttle) . = ..() @@ -181,6 +205,11 @@ var/obj/docking_port/mobile/emergency_response/ert = arriving_shuttle ert.control_doors("unlock", force = FALSE) + if(lockdown_on_land) + var/obj/structure/machinery/computer/shuttle/console = arriving_shuttle.getControlConsole() + console.disable() + lockdown_on_land = FALSE + /obj/docking_port/stationary/emergency_response/port1 name = "Almayer starboard landing pad" dir = NORTH diff --git a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx index 1b81fe6dfa19..bf9c399547a6 100644 --- a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx +++ b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx @@ -1,5 +1,5 @@ import { useBackend, useSharedState } from '../backend'; -import { Box, Button, Icon, Flex, Section, Stack, ProgressBar } from '../components'; +import { Box, Button, Icon, Flex, Section, Stack, ProgressBar, Dimmer } from '../components'; import { Window } from '../layouts'; export interface DockingPort { @@ -19,6 +19,7 @@ export interface NavigationProps { max_refuel_duration: number; max_engine_start_duration: number; max_pre_arrival_duration: number; + must_launch_home: boolean; is_disabled: 0 | 1; locked_down: 0 | 1; } @@ -248,11 +249,26 @@ export const DisabledScreen = (props) => { ); }; +const LaunchHome = (props) => { + const { data, act } = useBackend(); + + return ( + +
+ +
+
+ ); +}; + const RenderScreen = (props) => { const { data } = useBackend(); return ( <> {data.shuttle_mode === 'idle' && } + {!!data.must_launch_home && } {data.shuttle_mode === 'igniting' && } {data.shuttle_mode === 'recharging' && } {data.shuttle_mode === 'called' && } From eefc60cd9865e34351d1f5c150ac5af8e840c275 Mon Sep 17 00:00:00 2001 From: harryob Date: Sat, 24 Feb 2024 20:29:21 +0000 Subject: [PATCH 06/23] always auto launch --- code/datums/emergency_calls/emergency_call.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index b620b43bd6b8..c975834e30e0 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -50,7 +50,7 @@ var/max_heavies = 1 var/max_smartgunners = 1 var/shuttle_id = MOBILE_SHUTTLE_ID_ERT1 //Empty shuttle ID means we're not using shuttles (aka spawn straight into cryo) - var/auto_shuttle_launch = FALSE + var/auto_shuttle_launch = TRUE var/spawn_max_amount = FALSE var/ert_message = "An emergency beacon has been activated" From 7dac02f98b4a742c5230f9df3d97921d0483d005 Mon Sep 17 00:00:00 2001 From: harryob Date: Sat, 24 Feb 2024 20:34:52 +0000 Subject: [PATCH 07/23] only bother with the whole shuttle thing if admins aren't overriding the spawn location --- code/datums/emergency_calls/emergency_call.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index c975834e30e0..579a95c19d8d 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -275,7 +275,7 @@ if(M.client) to_chat(M, SPAN_NOTICE("Distress beacon: [src.name] finalized.")) - if(shuttle_id) + if(shuttle_id && !override_spawn_loc) if(!SSmapping.shuttle_templates[shuttle_id]) message_admins("Distress beacon: [name] does not have a valid shuttle_id: [shuttle_id]") CRASH("ert called with invalid shuttle_id") From b76a233631f6618696af6245689a609de64f295a Mon Sep 17 00:00:00 2001 From: harryob Date: Sat, 24 Feb 2024 21:18:40 +0000 Subject: [PATCH 08/23] adds debug verb --- code/modules/admin/admin_verbs.dm | 1 + .../admin/verbs/map_template_loadverb.dm | 27 +++++++++++++++++++ code/modules/shuttle/computer.dm | 2 +- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index f3eae1447ba0..1d10ed7b4d1d 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -155,6 +155,7 @@ GLOBAL_LIST_INIT(admin_verbs_major_event, list( /client/proc/load_event_level, /client/proc/cmd_fun_fire_ob, /client/proc/map_template_upload, + /client/proc/force_load_lazy_template, /client/proc/enable_podlauncher, /client/proc/change_taskbar_icon, /client/proc/change_weather, diff --git a/code/modules/admin/verbs/map_template_loadverb.dm b/code/modules/admin/verbs/map_template_loadverb.dm index 59cffa7f5eae..aed4fd6b90d7 100644 --- a/code/modules/admin/verbs/map_template_loadverb.dm +++ b/code/modules/admin/verbs/map_template_loadverb.dm @@ -74,3 +74,30 @@ SSmapping.map_templates[M.name] = M message_admins(SPAN_ADMINNOTICE("[key_name_admin(src)] has uploaded a map template '[map]' ([M.width]x[M.height])[report_link].")) to_chat(src, SPAN_NOTICE("Map template '[map]' ready to place ([M.width]x[M.height])"), confidential = TRUE) + +/client/proc/force_load_lazy_template() + set name = "Map Template - Lazy Load/Jump" + set category = "Admin.Events" + if(!check_rights(R_EVENT)) + return + + var/choice = tgui_input_list(usr, "Key?", "Lazy Loader", GLOB.lazy_templates) + if(!choice) + return + + var/already_loaded = LAZYACCESS(SSmapping.loaded_lazy_templates, choice) + var/force_load = FALSE + if(already_loaded && (tgui_alert(usr, "Template already loaded.", "", list("Jump", "Load Again")) == "Load Again")) + force_load = TRUE + + var/datum/turf_reservation/reservation = SSmapping.lazy_load_template(choice, force = force_load) + if(!reservation) + to_chat(usr, SPAN_BOLDWARNING("Failed to load template!")) + return + + if(!isobserver(usr)) + admin_ghost() + usr.forceMove(reservation.bottom_left_turfs[1]) + + message_admins("[key_name_admin(usr)] has loaded lazy template '[choice]'") + to_chat(usr, SPAN_BOLD("Template loaded, you have been moved to the bottom left of the reservation.")) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 9e21bb4bd595..75eb91802e45 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -193,7 +193,7 @@ if(must_launch_home) if(action == "launch_home") - var/datum/turf_reservation/loaded = SSmapping.lazy_load_template(ert.home_base) + var/datum/turf_reservation/loaded = SSmapping.lazy_load_template(ert.home_base, force = TRUE) var/turf/bottom_left = loaded.bottom_left_turfs[1] var/turf/top_right = loaded.top_right_turfs[1] From a6e0efdec9377360f7c81bcc7a5bb42b9c70bfe8 Mon Sep 17 00:00:00 2001 From: harryob Date: Thu, 29 Feb 2024 20:08:34 +0000 Subject: [PATCH 09/23] cleanup --- code/datums/emergency_calls/clf.dm | 1 - code/datums/emergency_calls/emergency_call.dm | 1 + code/modules/shuttle/computer.dm | 2 +- .../lazy_templates/freelancer_ert_station.dmm | 4001 ++++++++++------- 4 files changed, 2348 insertions(+), 1657 deletions(-) diff --git a/code/datums/emergency_calls/clf.dm b/code/datums/emergency_calls/clf.dm index f633311750ff..5441ba3103a7 100644 --- a/code/datums/emergency_calls/clf.dm +++ b/code/datums/emergency_calls/clf.dm @@ -4,7 +4,6 @@ /datum/emergency_call/clf name = "Colonial Liberation Front (Squad)" mob_max = 10 - mob_min = 1 arrival_message = "'Attention, you are tresspassing on our soverign territory. Expect no forgiveness.'" objectives = "Assault the USCM, and sabotage as much as you can. Ensure any survivors escape in your custody." probability = 20 diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index 579a95c19d8d..8ebadff61f74 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -282,6 +282,7 @@ var/datum/map_template/shuttle/new_shuttle = SSmapping.shuttle_templates[shuttle_id] shuttle = SSshuttle.load_template_to_transit(new_shuttle) + shuttle.control_doors("force-lock", force = TRUE, external_only = TRUE) shuttle.home_base = home_base if(shuttle && auto_shuttle_launch) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 75eb91802e45..ee62f0c3d42f 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -94,7 +94,7 @@ unslashable = TRUE unacidable = TRUE var/disabled = FALSE - var/must_launch_home = TRUE + var/must_launch_home = FALSE var/compatible_landing_zones = list() /obj/structure/machinery/computer/shuttle/ert/broken diff --git a/maps/templates/lazy_templates/freelancer_ert_station.dmm b/maps/templates/lazy_templates/freelancer_ert_station.dmm index 44d47c7952ef..7b6fd5ffb2f6 100644 --- a/maps/templates/lazy_templates/freelancer_ert_station.dmm +++ b/maps/templates/lazy_templates/freelancer_ert_station.dmm @@ -1,1722 +1,2413 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/open/space/basic, -/area/space) -"r" = ( -/obj/docking_port/stationary/emergency_response/idle_port1, +"ae" = ( +/obj/structure/machinery/cm_vending/gear/antag{ + hacked = 1; + name = "\improper Response Team Automated Gear Rack"; + use_snowflake_points = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/adminlevel/ert_station) +"aj" = ( +/obj/structure/machinery/cryopod, +/obj/structure/sign/safety/cryo{ + pixel_x = 36 + }, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"aA" = ( +/obj/structure/machinery/autolathe/full, +/turf/open/floor/almayer{ + icon_state = "test_floor5" + }, +/area/adminlevel/ert_station) +"bd" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/reagent_container/food/snacks/pastatomato, +/obj/item/ashtray/bronze{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/reagent_container/food/drinks/bottle/whiskey{ + pixel_x = -7; + pixel_y = 16 + }, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"bk" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/structure/machinery/recharger, +/obj/item/device/defibrillator/upgraded, +/obj/item/clothing/glasses/hud/health, +/obj/item/roller, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "sterile_green_side" + }, +/area/adminlevel/ert_station) +"bT" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/turf/open/floor/plating/almayer, +/area/adminlevel/ert_station) +"cw" = ( +/obj/structure/machinery/chem_dispenser/soda{ + density = 0; + pixel_y = 10 + }, +/obj/structure/surface/table/reinforced, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station) +"cL" = ( +/turf/open/floor/plating/almayer, +/area/adminlevel/ert_station) +"cR" = ( +/turf/open/floor/almayer{ + dir = 8; + icon_state = "orange" + }, +/area/adminlevel/ert_station) +"cS" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -11 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "sterile_green_side" + }, +/area/adminlevel/ert_station) +"de" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"dj" = ( +/obj/structure/machinery/bioprinter{ + stored_metal = 1000 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"dz" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + dir = 1; + name = "\improper Bathroom" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"dI" = ( +/turf/open/floor/almayer{ + dir = 1; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"dJ" = ( +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/adminlevel/ert_station) +"dL" = ( +/obj/structure/sign/safety, +/turf/closed/wall, +/area/adminlevel/ert_station) +"dS" = ( +/obj/structure/machinery/washing_machine, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"ee" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/structure/machinery/computer/emails{ + dir = 8; + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"em" = ( +/obj/structure/machinery/cm_vending/sorted/walkman, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"eG" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/adminlevel/ert_station) +"eH" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + name = "Restroom" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"eN" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/plating_catwalk, +/area/adminlevel/ert_station) +"fy" = ( +/turf/open/floor/almayer{ + dir = 1; + icon_state = "w-y2" + }, +/area/adminlevel/ert_station) +"fX" = ( +/obj/structure/machinery/medical_pod/sleeper, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"fY" = ( +/obj/structure/window/framed/colony/reinforced/hull, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/adminlevel/ert_station) +"gi" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/book/manual/chef_recipes, +/obj/item/clothing/head/chefhat, +/obj/item/storage/box/drinkingglasses, +/obj/item/reagent_container/food/drinks/shaker, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"gm" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/adminlevel/ert_station) +"gI" = ( +/obj/structure/sign/poster/clf, +/turf/closed/wall, +/area/adminlevel/ert_station) +"gS" = ( +/obj/structure/sign/safety/debark_lounge, +/turf/closed/wall/r_wall/unmeltable, +/area/adminlevel/ert_station) +"gU" = ( +/obj/docking_port/stationary/emergency_response/idle_port2, /turf/open/floor/plating, -/area/space) -"t" = ( +/area/adminlevel/ert_station) +"ha" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/structure/machinery/computer/emails{ + dir = 8; + pixel_y = 6 + }, +/obj/item/prop/helmetgarb/prescription_bottle{ + pixel_x = -9; + pixel_y = -4 + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"hl" = ( +/obj/structure/machinery/chem_dispenser, +/obj/item/reagent_container/glass/beaker/bluespace, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"hr" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/adminlevel/ert_station) +"hs" = ( +/obj/structure/sign/safety/maint, +/turf/closed/wall, +/area/adminlevel/ert_station) +"hx" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + dir = 8; + name = "Secure Storage" + }, +/obj/structure/machinery/door/poddoor/almayer{ + dir = 4; + unacidable = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/adminlevel/ert_station) +"hE" = ( +/obj/structure/barricade/handrail, +/turf/open/floor/plating/plating_catwalk, +/area/adminlevel/ert_station) +"ij" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/paper_bin/wy, +/obj/item/tool/pen, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"in" = ( +/turf/open/floor/almayer{ + dir = 4; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"io" = ( +/turf/open/floor/almayer{ + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"ju" = ( +/obj/structure/machinery/cm_vending/sorted/boozeomat/chess, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"jF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"jJ" = ( +/obj/structure/machinery/photocopier, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"jZ" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + damage_cap = 50000; + name = "\improper Hangar"; + no_panel = 1 + }, +/obj/structure/sign/safety/debark_lounge{ + pixel_x = 15; + pixel_y = -32 + }, +/obj/structure/machinery/door/poddoor/almayer{ + dir = 4; + id = "ERT Lock 2"; + unacidable = 1 + }, +/turf/open/floor/almayer{ + icon_state = "tcomms" + }, +/area/adminlevel/ert_station) +"kn" = ( +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"kJ" = ( +/turf/open/floor/almayer{ + dir = 1; + icon_state = "w-y0" + }, +/area/adminlevel/ert_station) +"kZ" = ( +/obj/item/prop/helmetgarb/rosary, +/turf/open/floor/carpet{ + desc = "Plush, waterproof carpet. Apparently it's fire resistant while remaining quite soft."; + name = "\improper carpet" + }, +/area/adminlevel/ert_station) +"lp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/adminlevel/ert_station) +"lx" = ( +/turf/open/floor/almayer{ + dir = 1; + icon_state = "greencorner" + }, +/area/adminlevel/ert_station) +"lP" = ( +/obj/structure/machinery/cm_vending/sorted/medical/blood{ + req_access = null + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"lQ" = ( +/obj/structure/sign/safety/debark_lounge{ + pixel_x = 15; + pixel_y = -32 + }, /turf/closed/wall/r_wall/unmeltable, -/area/space) -"u" = ( +/area/adminlevel/ert_station) +"mw" = ( +/obj/structure/sign/nosmoking_1, +/turf/closed/wall/r_wall/unmeltable, +/area/adminlevel/ert_station) +"mM" = ( +/turf/open/floor/plating/plating_catwalk, +/area/adminlevel/ert_station) +"mR" = ( +/obj/structure/sign/poster{ + pixel_x = -32; + serial_number = 16 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"mX" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"nx" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"nU" = ( +/obj/structure/machinery/door/airlock/almayer/engineering{ + name = "\improper Engineering Storage" + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"oc" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/reagent_container/food/snacks/soylentgreen, +/obj/item/reagent_container/food/drinks/cans/waterbottle{ + pixel_x = 11; + pixel_y = 13 + }, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "red" + }, +/area/adminlevel/ert_station) +"oj" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/almayer{ + icon_state = "test_floor5" + }, +/area/adminlevel/ert_station) +"ou" = ( +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"oE" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"oL" = ( +/turf/open/floor/almayer{ + dir = 5; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"pj" = ( +/obj/structure/machinery/door/airlock/almayer/security/glass{ + dir = 1; + name = "Detention Cell"; + req_access = null + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/adminlevel/ert_station) +"pK" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/reagent_dispensers/beerkeg{ + density = 0 + }, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"pX" = ( +/obj/structure/machinery/cm_vending/sorted/tech/tool_storage, +/obj/effect/spider/stickyweb, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "orange" + }, +/area/adminlevel/ert_station) +"qt" = ( +/obj/structure/machinery/status_display{ + pixel_y = 30 + }, +/turf/open/floor/almayer{ + icon_state = "plating_striped" + }, +/area/adminlevel/ert_station) +"qV" = ( +/obj/structure/sign/poster/music, +/turf/closed/wall, +/area/adminlevel/ert_station) +"qX" = ( +/obj/structure/machinery/iv_drip, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"rN" = ( +/turf/closed/wall/mineral/gold, +/area/adminlevel/ert_station) +"rS" = ( +/obj/structure/sign/goldenplaque{ + pixel_y = 27 + }, +/turf/open/floor/carpet{ + desc = "Plush, waterproof carpet. Apparently it's fire resistant while remaining quite soft."; + name = "\improper carpet" + }, +/area/adminlevel/ert_station) +"su" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/adminlevel/ert_station) +"sy" = ( +/obj/structure/machinery/vending/security, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "red" + }, +/area/adminlevel/ert_station) +"tx" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"tA" = ( +/obj/structure/bed, +/obj/item/bedsheet, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"tD" = ( +/obj/structure/machinery/cm_vending/sorted/boozeomat, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"tW" = ( +/obj/structure/machinery/chem_dispenser/soda/beer{ + density = 0; + pixel_y = 10 + }, +/obj/structure/surface/table/reinforced, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station) +"um" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/storage/surgical_tray, +/obj/item/reagent_container/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner" + }, +/obj/item/storage/box/monkeycubes, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "sterile_green_side" + }, +/area/adminlevel/ert_station) +"uq" = ( +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"vo" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/head/chefhat, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"vM" = ( +/obj/structure/closet/secure_closet/freezer/fridge/full, +/obj/item/reagent_container/food/condiment/enzyme, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station) +"vO" = ( +/obj/structure/sign/poster{ + desc = "You are becoming hysterical."; + icon_state = "poster11"; + name = "YOU ALWAYS KNOW A WORKING JOE."; + pixel_y = 30 + }, +/turf/open/floor/almayer{ + icon_state = "plating_striped" + }, +/area/adminlevel/ert_station) +"vS" = ( +/obj/structure/machinery/chem_master, +/obj/structure/machinery/status_display{ + pixel_y = 30 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"wd" = ( +/obj/structure/window/framed/colony, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"wv" = ( +/obj/structure/surface/table/almayer, +/obj/structure/bedsheetbin{ + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"wF" = ( +/obj/structure/closet{ + name = "boxing attire" + }, +/turf/open/floor/almayer{ + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"xn" = ( +/obj/structure/machinery/cm_vending/sorted/medical/chemistry/no_access{ + req_access = null + }, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "sterile_green_side" + }, +/area/adminlevel/ert_station) +"xN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"xR" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"yq" = ( +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"yw" = ( +/turf/open/floor/almayer{ + icon_state = "sterile_green_side" + }, +/area/adminlevel/ert_station) +"yP" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + dir = 2; + name = "Lounge" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"zy" = ( +/obj/structure/mirror, +/turf/closed/wall/r_wall/unmeltable, +/area/adminlevel/ert_station) +"zz" = ( +/obj/structure/machinery/medical_pod/bodyscanner, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"zR" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station) +"Aw" = ( +/obj/structure/machinery/cm_vending/sorted/medical/wall_med/souto, +/turf/closed/wall, +/area/adminlevel/ert_station) +"AD" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"AJ" = ( +/turf/open/floor/almayer{ + dir = 6; + icon_state = "sterile_green_side" + }, +/area/adminlevel/ert_station) +"AV" = ( +/obj/structure/machinery/newscaster/security_unit, +/turf/closed/wall/r_wall/unmeltable, +/area/adminlevel/ert_station) +"BI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"BL" = ( +/obj/structure/target{ + name = "punching bag" + }, +/turf/open/floor/almayer{ + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"Cm" = ( +/obj/structure/closet/secure_closet/freezer/fridge/groceries, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station) +"CF" = ( +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = 28 + }, +/obj/structure/bed/sofa/south/grey/right, +/obj/item/trash/buritto, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"CJ" = ( +/obj/structure/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"CP" = ( /obj/effect/decal/warning_stripes{ - icon_state = "W" + icon_state = "S" }, /turf/open/floor/plating/almayer, -/area/space) -"x" = ( +/area/adminlevel/ert_station) +"Ea" = ( /obj/effect/decal/warning_stripes{ - icon_state = "E" + icon_state = "W" }, /turf/open/floor/plating/almayer, -/area/space) -"E" = ( +/area/adminlevel/ert_station) +"Ef" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"Es" = ( +/obj/structure/machinery/cm_vending/sorted/cargo_guns/antag_guns{ + hacked = 1; + name = "\improper Response Team Automated Guns Rack"; + use_power = 0; + use_snowflake_points = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/adminlevel/ert_station) +"Ey" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + dir = 1; + name = "\improper Dormitories" + }, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"EK" = ( +/obj/structure/janitorialcart, +/obj/item/reagent_container/glass/bucket/janibucket, +/obj/item/reagent_container/spray/cleaner, +/obj/item/tool/wet_sign, +/obj/item/tool/wet_sign, +/obj/item/tool/mop, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"Fg" = ( +/turf/closed/wall/r_wall/unmeltable, +/area/adminlevel/ert_station) +"Fo" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"FB" = ( +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/adminlevel/ert_station) +"FQ" = ( +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/adminlevel/ert_station) +"FZ" = ( +/turf/open/floor/almayer{ + dir = 6; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"Gh" = ( +/obj/structure/bed/stool, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"Gk" = ( +/obj/structure/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"Gu" = ( +/obj/structure/machinery/vending/dinnerware, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"Hg" = ( +/obj/structure/closet/secure_closet/brig, +/obj/item/book/manual/marine_law, +/obj/item/handcuffs, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "red" + }, +/area/adminlevel/ert_station) +"Hj" = ( +/obj/structure/sign/safety/medical, +/obj/structure/sign/safety/autodoc{ + pixel_x = 15 + }, +/turf/closed/wall/r_wall/unmeltable, +/area/adminlevel/ert_station) +"Hp" = ( /obj/effect/decal/warning_stripes{ - icon_state = "N" + icon_state = "W" + }, +/obj/structure/machinery/door_control{ + id = "ERT Lock 2"; + name = "Hangar Lock"; + pixel_x = 24 }, /turf/open/floor/plating/almayer, +/area/adminlevel/ert_station) +"Hy" = ( +/obj/item/newspaper, +/turf/open/floor/carpet{ + desc = "Plush, waterproof carpet. Apparently it's fire resistant while remaining quite soft."; + name = "\improper carpet" + }, +/area/adminlevel/ert_station) +"HI" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "red" + }, +/area/adminlevel/ert_station) +"HN" = ( +/turf/open/floor/almayer{ + icon_state = "silvercorner" + }, +/area/adminlevel/ert_station) +"HR" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/closed/wall/r_wall/unmeltable, +/area/adminlevel/ert_station) +"HS" = ( +/obj/item/trash/cigbutt/cigarbutt, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"Ih" = ( +/obj/structure/noticeboard{ + pixel_y = 34 + }, +/obj/structure/machinery/computer/arcade, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"Im" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"IG" = ( +/obj/structure/toilet, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"IP" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "red" + }, +/area/adminlevel/ert_station) +"Jg" = ( +/obj/structure/sign/safety/galley{ + pixel_x = -17 + }, +/obj/structure/machinery/door/window/southleft, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station) +"Jn" = ( +/obj/structure/sign/safety/bathunisex{ + pixel_x = -17 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"JD" = ( +/obj/structure/surface/table/gamblingtable, +/obj/item/device/flashlight/lamp/green{ + pixel_y = 10 + }, +/obj/item/storage/fancy/cigar, +/obj/item/storage/box/matches{ + pixel_x = -2; + pixel_y = 9 + }, +/obj/item/coin/uranium, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"JW" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 27 + }, +/obj/structure/bed/sofa/south/grey/left, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"Kp" = ( +/turf/open/floor/almayer{ + dir = 10; + icon_state = "sterile_green_side" + }, +/area/adminlevel/ert_station) +"Kq" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/processor{ + pixel_y = 10 + }, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station) +"Kt" = ( +/turf/open/floor/almayer{ + dir = 8; + icon_state = "greencorner" + }, +/area/adminlevel/ert_station) +"KK" = ( +/obj/structure/surface/table/reinforced, +/obj/item/tool/kitchen/tray, +/obj/item/tool/kitchen/knife{ + pixel_x = 3 + }, +/obj/item/tool/kitchen/knife/butcher{ + pixel_x = -8 + }, +/obj/item/tool/kitchen/rollingpin, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station) +"KN" = ( +/obj/structure/machinery/autodoc_console, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"Lh" = ( +/turf/open/space/basic, /area/space) -"U" = ( -/turf/open/floor/plating/almayer, -/area/space) -"V" = ( +"Li" = ( +/obj/structure/bed, +/obj/item/bedsheet/brown, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "red" + }, +/area/adminlevel/ert_station) +"Lt" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"LN" = ( +/turf/open/floor/almayer{ + icon_state = "plating_striped" + }, +/area/adminlevel/ert_station) +"Mj" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/reagent_container/food/snacks/milosoup{ + pixel_y = 10 + }, +/obj/item/reagent_container/food/snacks/meatsteak{ + pixel_y = -2 + }, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"Ns" = ( +/obj/structure/machinery/optable, +/obj/item/tank/anesthetic, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "sterile_green_side" + }, +/area/adminlevel/ert_station) +"Of" = ( +/turf/open/floor/almayer{ + dir = 4; + icon_state = "red" + }, +/area/adminlevel/ert_station) +"Os" = ( +/obj/structure/machinery/faxmachine, +/obj/structure/surface/table/reinforced/prison, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"Ou" = ( +/turf/open/floor/almayer{ + dir = 1; + icon_state = "w-y1" + }, +/area/adminlevel/ert_station) +"OA" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"Pb" = ( +/turf/open/floor/almayer{ + dir = 1; + icon_state = "sterile_green_side" + }, +/area/adminlevel/ert_station) +"Pd" = ( +/obj/structure/machinery/sleep_console, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"Pn" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + dir = 1; + name = "Restroom" + }, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"PC" = ( +/turf/open/floor/carpet{ + desc = "Plush, waterproof carpet. Apparently it's fire resistant while remaining quite soft."; + name = "\improper carpet" + }, +/area/adminlevel/ert_station) +"PP" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_10" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"Qc" = ( +/turf/open/floor/almayer{ + dir = 4; + icon_state = "orange" + }, +/area/adminlevel/ert_station) +"Qi" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"Qv" = ( +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/adminlevel/ert_station) +"QQ" = ( +/obj/structure/closet/boxinggloves, +/turf/open/floor/almayer{ + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"Rb" = ( +/turf/open/floor/almayer{ + dir = 8; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"Rk" = ( +/obj/structure/sign/poster/art, +/turf/closed/wall/r_wall/unmeltable, +/area/adminlevel/ert_station) +"Rz" = ( +/obj/structure/machinery/medical_pod/autodoc/unskilled, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"RC" = ( +/obj/structure/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"RG" = ( +/obj/structure/machinery/cm_vending/sorted/medical/no_access{ + req_access = null + }, +/turf/open/floor/almayer{ + icon_state = "sterile_green_side" + }, +/area/adminlevel/ert_station) +"RO" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "greencorner" + }, +/area/adminlevel/ert_station) +"RW" = ( +/obj/structure/disposalpipe/junction, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"Sh" = ( +/turf/closed/wall, +/area/adminlevel/ert_station) +"Sk" = ( +/obj/structure/machinery/cm_vending/sorted/tech/comp_storage, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "orange" + }, +/area/adminlevel/ert_station) +"Su" = ( +/obj/structure/closet/cabinet, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"Sy" = ( +/obj/structure/machinery/status_display{ + pixel_y = 30 + }, +/obj/structure/bed/sofa/south/grey, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"SH" = ( +/obj/structure/sign/poster{ + pixel_x = -32; + serial_number = 16 + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"SL" = ( +/obj/structure/machinery/body_scanconsole, +/turf/open/floor/almayer{ + icon_state = "sterile_green" + }, +/area/adminlevel/ert_station) +"SP" = ( +/obj/structure/machinery/gibber{ + pixel_y = 10 + }, +/obj/structure/surface/table/reinforced, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station) +"Ta" = ( +/turf/open/floor/almayer{ + dir = 9; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"Th" = ( +/turf/open/floor/plating, +/area/adminlevel/ert_station) +"TM" = ( +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station) +"TV" = ( +/obj/structure/sign/poster/hunk, +/obj/structure/window/framed/colony/reinforced/hull, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/adminlevel/ert_station) +"Un" = ( +/turf/open/floor/almayer{ + dir = 9; + icon_state = "sterile_green_side" + }, +/area/adminlevel/ert_station) +"Ux" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_21" + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"UT" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_10" + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"Vd" = ( +/obj/structure/surface/table/woodentable, +/obj/item/pizzabox/meat{ + pixel_y = 8 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "silver" + }, +/area/adminlevel/ert_station) +"Vz" = ( +/obj/structure/sign/nosmoking_2, +/turf/closed/wall, +/area/adminlevel/ert_station) +"VF" = ( +/obj/structure/barricade/handrail{ + dir = 1; + pixel_y = 2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/adminlevel/ert_station) +"VJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"VR" = ( /obj/effect/decal/warning_stripes{ - icon_state = "S" + icon_state = "E" }, /turf/open/floor/plating/almayer, -/area/space) -"X" = ( -/turf/open/floor/plating, -/area/space) +/area/adminlevel/ert_station) +"VU" = ( +/obj/item/trash/barcardine, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"VV" = ( +/obj/structure/machinery/cm_vending/clothing/antag{ + name = "\improper Response Team Automated Equipment Rack" + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/adminlevel/ert_station) +"VZ" = ( +/obj/structure/barricade/handrail{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/adminlevel/ert_station) +"Wf" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/almayer{ + icon_state = "test_floor5" + }, +/area/adminlevel/ert_station) +"Wl" = ( +/obj/structure/machinery/cm_vending/sorted/tech/electronics_storage, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "orange" + }, +/area/adminlevel/ert_station) +"Wn" = ( +/turf/open/floor/almayer{ + icon_state = "sterile_green" + }, +/area/adminlevel/ert_station) +"WR" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -11 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"Xb" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/adminlevel/ert_station) +"Xx" = ( +/obj/structure/barricade/handrail{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/adminlevel/ert_station) +"XN" = ( +/obj/structure/transmitter/hidden{ + dir = 8; + name = "Station Telephone"; + phone_id = "Unknown Signal"; + pixel_x = 14 + }, +/turf/open/floor/almayer{ + icon_state = "floor" + }, +/area/adminlevel/ert_station) +"XQ" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_21" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) +"Yk" = ( +/obj/structure/sign/safety/med_life_support, +/turf/closed/wall, +/area/adminlevel/ert_station) +"YD" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/almayer{ + icon_state = "greencorner" + }, +/area/adminlevel/ert_station) +"YM" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/reagent_container/food/snacks/sandwich{ + layer = 4; + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/reagent_container/food/snacks/popcorn{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/reagent_container/food/snacks/appletart, +/obj/item/reagent_container/food/condiment/peppermill, +/obj/item/reagent_container/food/condiment/saltshaker, +/turf/open/floor/carpet, +/area/adminlevel/ert_station) +"YT" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/microwave{ + pixel_y = 10 + }, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station) +"Zp" = ( +/obj/structure/machinery/door/airlock/almayer/medical/glass{ + dir = 1; + name = "\improper Medbay"; + req_access = null; + req_one_access = null + }, +/obj/structure/sign/safety/med_cryo{ + pixel_x = -17 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/adminlevel/ert_station) +"ZS" = ( +/obj/structure/machinery/vending/cigarette/colony, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station) (1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg "} (2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Fg +cL +VR +VR +VR +VR +VR +VR +VR +VR +VR +VR +VR +VR +VR +VR +VR +cL +Fg "} (3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Fg +CP +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +bT +Fg "} (4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Fg +CP +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +gU +Th +bT +Fg "} (5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Fg +CP +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +bT +Fg "} (6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Fg +CP +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +bT +Fg "} (7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Fg +CP +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +bT +Fg "} (8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Fg +CP +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +bT +Fg "} (9,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Fg +CP +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +bT +Fg "} (10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Fg +CP +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +bT +Fg "} (11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Fg +CP +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +Th +bT +Fg "} (12,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Fg +cL +Ea +Hp +Ea +Ea +Ea +Ea +Ea +Ea +Ea +Ea +Ea +Ea +Ea +Ea +Ea +cL +Fg "} (13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Fg +Fg +Fg +Fg +zy +Fg +Fg +Fg +Fg +Fg +Fg +Fg +lQ +Fg +Fg +Fg +Fg +Fg +AV +Fg +lQ +Fg +jZ +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg "} (14,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Fg +IG +dz +kn +WR +wv +dS +Sh +Su +uq +uq +oE +ij +Sh +Ta +Rb +mR +Ux +CJ +UT +Rb +Rb +Rb +yq +yq +SH +yq +yq +yq +yq +SH +BI +Xb +pj +IP +HI +HR "} (15,1,1) = {" -a -a -a -a -a -a -a -a -a -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -a -a -a -a -a -a -a -a -a -a -a -a +Fg +Sh +Sh +kn +kn +kn +jF +Pn +AD +AD +AD +AD +AD +Ey +nx +tx +OA +mM +lp +mM +yq +BI +xR +YD +VZ +VZ +VZ +RO +xR +eG +eG +eN +Qv +fY +dJ +hr +Fg "} (16,1,1) = {" -a -a -a -a -a -a -a -a -a -t -U -x -x -x -x -x -x -x -x -x -x -x -x -x -x -x -U -t -a -a -a -a -a -a -a -a -a -a -a -a +Fg +kn +kn +kn +kn +kn +VJ +Sh +aj +tA +tA +tA +tA +gI +dI +mM +Lt +mX +RW +mX +xR +FQ +yq +hE +FB +kJ +gm +VF +yq +HN +Of +Hg +sy +TV +Li +oc +Fg "} (17,1,1) = {" -a -a -a -a -a -a -a -a -a -t -V -X -X -X -X -X -X -X -X -X -X -X -X -X -X -X -E -t -a -a -a -a -a -a -a -a -a -a -a -a +Fg +Sh +Sh +Sh +Sh +kn +EK +Sh +Sh +Sh +qV +Sh +Sh +Sh +JW +mM +io +Hy +PC +PC +dI +lp +yq +hE +gm +Ou +FB +VF +yq +wF +Sh +Sh +Sh +Fg +Fg +Fg +Fg "} (18,1,1) = {" -a -a -a -a -a -a -a -a -a -t -V -X -X -X -X -X -X -X -X -X -X -X -X -X -r -X -E -t -a -a -a -a -a -a -a -a -a -a -a -a +Fg +Cm +zR +vM +Sh +kn +RC +Sh +Ih +ou +ou +ou +de +Sh +Sy +mM +io +PC +PC +PC +dI +lp +yq +hE +FB +fy +FB +VF +yq +QQ +Sh +xn +cS +kn +AJ +Ns +Fg "} (19,1,1) = {" -a -a -a -a -a -a -a -a -a -t -V -X -X -X -X -X -X -X -X -X -X -X -X -X -X -X -E -t -a -a -a -a -a -a -a -a -a -a -a -a +Fg +KK +TM +TM +Sh +eH +Sh +Aw +XQ +ou +ou +ou +JD +Sh +CF +yq +io +PC +rN +rS +dI +xN +HS +Kt +Xx +Xx +Xx +lx +yq +BL +Yk +RG +Pb +kn +yw +um +Fg "} (20,1,1) = {" -a -a -a -a -a -a -a -a -a -t -V -X -X -X -X -X -X -X -X -X -X -X -X -X -X -X -E -t -a -a -a -a -a -a -a -a -a -a -a -a +Fg +Kq +TM +TM +Jg +ou +Jn +ou +uq +Ef +Ef +uq +Im +wd +Vd +mM +io +PC +PC +kZ +dI +lp +HN +in +in +in +in +in +in +FZ +Zp +Kp +Un +zz +Kp +bk +Fg "} (21,1,1) = {" -a -a -a -a -a -a -a -a -a -t -V -X -X -X -X -X -X -X -X -X -X -X -X -X -X -X -E -t -a -a -a -a -a -a -a -a -a -a -a -a +Fg +SP +TM +TM +gi +Gh +ou +ou +uq +Mj +bd +uq +ou +wd +dI +mM +io +PC +PC +PC +dI +lp +io +Sh +hs +nU +Vz +Fg +hx +Fg +Hj +hl +kn +SL +kn +fX +Fg "} (22,1,1) = {" -a -a -a -a -a -a -a -a -a -t -V -X -X -X -X -X -X -X -X -X -X -X -X -X -X -X -E -t -a -a -a -a -a -a -a -a -a -a -a -a +Fg +YT +TM +TM +vo +Gh +ou +ou +uq +Fo +Fo +uq +ou +yP +dI +mM +yq +Rb +Rb +Rb +yq +lp +io +Sh +pX +cR +Wf +Fg +vO +VV +Fg +vS +Wn +Wn +Wn +Pd +Fg "} (23,1,1) = {" -a -a -a -a -a -a -a -a -a -t -V -X -X -X -X -X -X -X -X -X -X -X -X -X -X -X -E -t -a -a -a -a -a -a -a -a -a -a -a -a +Fg +cw +TM +TM +YM +Gh +ou +VU +ou +ou +ou +ou +ou +wd +dI +yq +yq +su +mM +su +yq +xN +io +Sh +Sk +yq +oj +Fg +qt +ae +mw +Rz +kn +Wn +qX +dj +Fg "} (24,1,1) = {" -a -a -a -a -a -a -a -a -a -t -V -X -X -X -X -X -X -X -X -X -X -X -X -X -X -X -E -t -a -a -a -a -a -a -a -a -a -a -a -a +Fg +tW +TM +TM +pK +Gh +ou +PP +Gu +ZS +em +tD +ju +wd +oL +yq +Os +ee +XN +ha +jJ +Gk +FZ +dL +Wl +Qc +aA +Fg +LN +Es +Fg +KN +kn +Qi +Qi +lP +Fg "} (25,1,1) = {" -a -a -a -a -a -a -a -a -a -t -V -X -X -X -X -X -X -X -X -X -X -X -X -X -X -X -E -t -a -a -a -a -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -t -U -u -u -u -u -u -u -u -u -u -u -u -u -u -u -u -U -t -a -a -a -a -a -a -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -a -a -a -a -a -a -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +gS +Fg +gS +Fg +Fg +Rk +Fg +gS +Fg +gS +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg +Fg "} From d0f7e3aebf329f081c85a9067a34da533ccf4f86 Mon Sep 17 00:00:00 2001 From: harryob Date: Thu, 29 Feb 2024 20:41:55 +0000 Subject: [PATCH 10/23] lets you press other buttons when you musttt launch home --- code/modules/shuttle/computer.dm | 62 ++++++++++--------- .../lazy_templates/freelancer_ert_station.dmm | 22 +------ .../tgui/interfaces/NavigationShuttle.tsx | 18 +++--- 3 files changed, 46 insertions(+), 56 deletions(-) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index ee62f0c3d42f..895057f0bb13 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -219,34 +219,6 @@ return switch(action) - if("move") - if(ert.mode != SHUTTLE_IDLE) - to_chat(usr, SPAN_WARNING("You can't move to a new destination whilst in transit.")) - return TRUE - var/dockId = params["target"] - var/list/local_data = ui_data(usr) - var/found = FALSE - playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) - for(var/destination in local_data["destinations"]) - if(destination["id"] == dockId) - found = TRUE - break - if(!found) - log_admin("[key_name(usr)] may be attempting a href dock exploit on [src] with target location \"[dockId]\"") - to_chat(usr, SPAN_WARNING("The [dockId] dock is not available at this time.")) - return - var/obj/docking_port/stationary/dock = SSshuttle.getDock(dockId) - var/dock_reserved = FALSE - for(var/obj/docking_port/mobile/other_shuttle in SSshuttle.mobile) - if(dock == other_shuttle.destination) - dock_reserved = TRUE - break - if(dock_reserved) - to_chat(usr, SPAN_WARNING("\The [dock] is currently in use.")) - return TRUE - SSshuttle.moveShuttle(ert.id, dock.id, TRUE) - to_chat(usr, SPAN_NOTICE("You begin the launch sequence to [dock].")) - return TRUE if("button-push") playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) return FALSE @@ -271,6 +243,40 @@ return TRUE ert.control_doors("unlock", external_only = TRUE) + if(must_launch_home) + return + + if(action != "move") + return + + if(ert.mode != SHUTTLE_IDLE) + to_chat(usr, SPAN_WARNING("You can't move to a new destination whilst in transit.")) + return TRUE + var/dockId = params["target"] + var/list/local_data = ui_data(usr) + var/found = FALSE + playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) + for(var/destination in local_data["destinations"]) + if(destination["id"] == dockId) + found = TRUE + break + if(!found) + log_admin("[key_name(usr)] may be attempting a href dock exploit on [src] with target location \"[dockId]\"") + to_chat(usr, SPAN_WARNING("The [dockId] dock is not available at this time.")) + return + var/obj/docking_port/stationary/dock = SSshuttle.getDock(dockId) + var/dock_reserved = FALSE + for(var/obj/docking_port/mobile/other_shuttle in SSshuttle.mobile) + if(dock == other_shuttle.destination) + dock_reserved = TRUE + break + if(dock_reserved) + to_chat(usr, SPAN_WARNING("\The [dock] is currently in use.")) + return TRUE + SSshuttle.moveShuttle(ert.id, dock.id, TRUE) + to_chat(usr, SPAN_NOTICE("You begin the launch sequence to [dock].")) + return TRUE + /obj/structure/machinery/computer/shuttle/ert/attack_hand(mob/user) . = ..(user) if(.) diff --git a/maps/templates/lazy_templates/freelancer_ert_station.dmm b/maps/templates/lazy_templates/freelancer_ert_station.dmm index 7b6fd5ffb2f6..2bc12b35dcf4 100644 --- a/maps/templates/lazy_templates/freelancer_ert_station.dmm +++ b/maps/templates/lazy_templates/freelancer_ert_station.dmm @@ -304,11 +304,6 @@ pixel_x = 15; pixel_y = -32 }, -/obj/structure/machinery/door/poddoor/almayer{ - dir = 4; - id = "ERT Lock 2"; - unacidable = 1 - }, /turf/open/floor/almayer{ icon_state = "tcomms" }, @@ -841,17 +836,6 @@ }, /turf/closed/wall/r_wall/unmeltable, /area/adminlevel/ert_station) -"Hp" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "W" - }, -/obj/structure/machinery/door_control{ - id = "ERT Lock 2"; - name = "Hangar Lock"; - pixel_x = 24 - }, -/turf/open/floor/plating/almayer, -/area/adminlevel/ert_station) "Hy" = ( /obj/item/newspaper, /turf/open/floor/carpet{ @@ -1887,7 +1871,7 @@ Lh Fg cL Ea -Hp +Ea Ea Ea Ea @@ -2023,8 +2007,8 @@ Fg "} (16,1,1) = {" Fg -kn -kn +IG +dz kn kn kn diff --git a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx index bf9c399547a6..aaddcc7732f3 100644 --- a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx +++ b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx @@ -1,5 +1,5 @@ import { useBackend, useSharedState } from '../backend'; -import { Box, Button, Icon, Flex, Section, Stack, ProgressBar, Dimmer } from '../components'; +import { Box, Button, Icon, Flex, Section, Stack, ProgressBar } from '../components'; import { Window } from '../layouts'; export interface DockingPort { @@ -253,13 +253,11 @@ const LaunchHome = (props) => { const { data, act } = useBackend(); return ( - -
- -
-
+
+ +
); }; @@ -267,7 +265,9 @@ const RenderScreen = (props) => { const { data } = useBackend(); return ( <> - {data.shuttle_mode === 'idle' && } + {data.shuttle_mode === 'idle' && !data.must_launch_home && ( + + )} {!!data.must_launch_home && } {data.shuttle_mode === 'igniting' && } {data.shuttle_mode === 'recharging' && } From d8667406926928055a7217d64ddd9376cf27168f Mon Sep 17 00:00:00 2001 From: harryob Date: Thu, 29 Feb 2024 20:49:21 +0000 Subject: [PATCH 11/23] proper unfucks it --- code/modules/shuttle/computer.dm | 56 ++++++++++--------- .../tgui/interfaces/NavigationShuttle.tsx | 15 +++-- 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 895057f0bb13..01f2f1db4e21 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -191,33 +191,6 @@ var/obj/docking_port/mobile/emergency_response/ert = SSshuttle.getShuttle(shuttleId) - if(must_launch_home) - if(action == "launch_home") - var/datum/turf_reservation/loaded = SSmapping.lazy_load_template(ert.home_base, force = TRUE) - var/turf/bottom_left = loaded.bottom_left_turfs[1] - var/turf/top_right = loaded.top_right_turfs[1] - - var/obj/docking_port/stationary/emergency_response/target - for(var/obj/docking_port/stationary/emergency_response/shuttle in SSshuttle.stationary) - if(shuttle.z != bottom_left.z) - continue - if(shuttle.x >= top_right.x || shuttle.y >= top_right.y) - continue - if(shuttle.x <= bottom_left.x || shuttle.y <= bottom_left.y) - continue - - target = shuttle - break - - if(!target) - return - - SSshuttle.moveShuttleToDock(ert, target, TRUE) - target.lockdown_on_land = TRUE - must_launch_home = FALSE - - return - switch(action) if("button-push") playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) @@ -244,6 +217,35 @@ ert.control_doors("unlock", external_only = TRUE) if(must_launch_home) + if(action == "launch_home") + + if(ert.mode != SHUTTLE_IDLE) + to_chat(ui.user, SPAN_WARNING("Unable to return home.")) + return + + var/datum/turf_reservation/loaded = SSmapping.lazy_load_template(ert.home_base, force = TRUE) + var/turf/bottom_left = loaded.bottom_left_turfs[1] + var/turf/top_right = loaded.top_right_turfs[1] + + var/obj/docking_port/stationary/emergency_response/target + for(var/obj/docking_port/stationary/emergency_response/shuttle in SSshuttle.stationary) + if(shuttle.z != bottom_left.z) + continue + if(shuttle.x >= top_right.x || shuttle.y >= top_right.y) + continue + if(shuttle.x <= bottom_left.x || shuttle.y <= bottom_left.y) + continue + + target = shuttle + break + + if(!target) + return + + SSshuttle.moveShuttleToDock(ert, target, TRUE) + target.lockdown_on_land = TRUE + must_launch_home = FALSE + return if(action != "move") diff --git a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx index aaddcc7732f3..0cb1c8fa80b0 100644 --- a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx +++ b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx @@ -261,14 +261,21 @@ const LaunchHome = (props) => { ); }; +const DestinationOptions = (props) => { + const { data, act } = useBackend(); + + if (data.must_launch_home) { + return ; + } else { + return ; + } +}; + const RenderScreen = (props) => { const { data } = useBackend(); return ( <> - {data.shuttle_mode === 'idle' && !data.must_launch_home && ( - - )} - {!!data.must_launch_home && } + {data.shuttle_mode === 'idle' && } {data.shuttle_mode === 'igniting' && } {data.shuttle_mode === 'recharging' && } {data.shuttle_mode === 'called' && } From bca4312568621d678148b131882f77f9b38edc1b Mon Sep 17 00:00:00 2001 From: harryob <55142896+harryob@users.noreply.github.com> Date: Fri, 1 Mar 2024 12:10:37 +0000 Subject: [PATCH 12/23] remove wy branding from freelancer station --- .../lazy_templates/freelancer_ert_station.dmm | 24 +++---------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/maps/templates/lazy_templates/freelancer_ert_station.dmm b/maps/templates/lazy_templates/freelancer_ert_station.dmm index 2bc12b35dcf4..bf9709e2150d 100644 --- a/maps/templates/lazy_templates/freelancer_ert_station.dmm +++ b/maps/templates/lazy_templates/freelancer_ert_station.dmm @@ -162,12 +162,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/adminlevel/ert_station) -"fy" = ( -/turf/open/floor/almayer{ - dir = 1; - icon_state = "w-y2" - }, -/area/adminlevel/ert_station) "fX" = ( /obj/structure/machinery/medical_pod/sleeper, /turf/open/floor/almayer{ @@ -313,12 +307,6 @@ icon_state = "dark_sterile" }, /area/adminlevel/ert_station) -"kJ" = ( -/turf/open/floor/almayer{ - dir = 1; - icon_state = "w-y0" - }, -/area/adminlevel/ert_station) "kZ" = ( /obj/item/prop/helmetgarb/rosary, /turf/open/floor/carpet{ @@ -1032,12 +1020,6 @@ icon_state = "floor" }, /area/adminlevel/ert_station) -"Ou" = ( -/turf/open/floor/almayer{ - dir = 1; - icon_state = "w-y1" - }, -/area/adminlevel/ert_station) "OA" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -2031,7 +2013,7 @@ FQ yq hE FB -kJ +FB gm VF yq @@ -2070,7 +2052,7 @@ lp yq hE gm -Ou +FB FB VF yq @@ -2109,7 +2091,7 @@ lp yq hE FB -fy +FB FB VF yq From c8ed3bcc8be5db2f20f690915f4a55413cd5789a Mon Sep 17 00:00:00 2001 From: harryob <55142896+harryob@users.noreply.github.com> Date: Fri, 1 Mar 2024 15:01:27 +0000 Subject: [PATCH 13/23] forsakens obviously do not need a shuttle --- code/datums/emergency_calls/forsaken_xenos.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/datums/emergency_calls/forsaken_xenos.dm b/code/datums/emergency_calls/forsaken_xenos.dm index d089830658d9..1c876d4d4d44 100644 --- a/code/datums/emergency_calls/forsaken_xenos.dm +++ b/code/datums/emergency_calls/forsaken_xenos.dm @@ -3,6 +3,7 @@ mob_min = 1 mob_max = 4 hostility = TRUE + shuttle_id = "" name_of_spawn = /obj/effect/landmark/ert_spawns/groundside_xeno objectives = "You have been left behind to safeguard the abandoned colony. Do not allow trespassers." From 784836b50e70db857ccdf68b0bfe7f4a04d0f591 Mon Sep 17 00:00:00 2001 From: harryob Date: Fri, 1 Mar 2024 16:29:51 +0000 Subject: [PATCH 14/23] you've gotta steal an ert dudes id to use their shuttle now. obviously --- code/__DEFINES/traits.dm | 3 +++ code/datums/emergency_calls/emergency_call.dm | 9 ++++++++- code/modules/shuttle/computer.dm | 16 +++++++++++++--- code/modules/shuttle/shuttles/ert.dm | 4 ++-- .../tgui/interfaces/NavigationShuttle.tsx | 9 ++++++--- 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 039536491f9d..010c74c404c4 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -267,6 +267,9 @@ #define TRAIT_GUN_LIGHT_DEACTIVATED "t_gun_light_deactivated" +/// If this ID belongs to an ERT member +#define TRAIT_ERT_ID "ert_id" + // Miscellaneous item traits. // Do NOT bloat this category, if needed make a new category (like shoe traits, xeno item traits...) diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index 8ebadff61f74..a803a7f06c78 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -283,7 +283,7 @@ var/datum/map_template/shuttle/new_shuttle = SSmapping.shuttle_templates[shuttle_id] shuttle = SSshuttle.load_template_to_transit(new_shuttle) shuttle.control_doors("force-lock", force = TRUE, external_only = TRUE) - shuttle.home_base = home_base + shuttle.distress_beacon = src if(shuttle && auto_shuttle_launch) var/obj/structure/machinery/computer/shuttle/ert/comp = shuttle.getControlConsole() @@ -330,6 +330,13 @@ else marine_announcement(arrival_message, "Intercepted Transmission:") + for(var/datum/mind/spawned as anything in members) + if(ishuman(spawned.current)) + var/mob/living/carbon/human/spawned_human = spawned.current + var/obj/item/card/id/id = spawned_human.get_idcard() + if(id) + ADD_TRAIT(id, TRAIT_ERT_ID, src) + /datum/emergency_call/proc/add_candidate(mob/M) if(!M.client || (M.mind && (M.mind in candidates)) || istype(M, /mob/living/carbon/xenomorph)) return FALSE //Not connected or already there or something went wrong. diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 01f2f1db4e21..25bac325e564 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -123,10 +123,20 @@ disabled = FALSE /obj/structure/machinery/computer/shuttle/ert/tgui_interact(mob/user, datum/tgui/ui) + var/obj/docking_port/mobile/emergency_response/ert = SSshuttle.getShuttle(shuttleId) + + if(ert.distress_beacon && ishuman(user)) + var/mob/living/carbon/human/human_user = user + var/obj/item/card/id/id = human_user.get_idcard() + + if(!id || !HAS_TRAIT_FROM_ONLY(id, TRAIT_ERT_ID, ert.distress_beacon)) + to_chat(user, SPAN_WARNING("Your ID is not authorized to interact with this terminal.")) + balloon_alert(user, "unauthorized!") + return + ui = SStgui.try_update_ui(user, src, ui) if (!ui) - var/obj/docking_port/mobile/shuttle = SSshuttle.getShuttle(shuttleId) - ui = new(user, src, "NavigationShuttle", "[shuttle.name] Navigation Computer") + ui = new(user, src, "NavigationShuttle", "[ert.name] Navigation Computer") ui.open() @@ -223,7 +233,7 @@ to_chat(ui.user, SPAN_WARNING("Unable to return home.")) return - var/datum/turf_reservation/loaded = SSmapping.lazy_load_template(ert.home_base, force = TRUE) + var/datum/turf_reservation/loaded = SSmapping.lazy_load_template(ert.distress_beacon.home_base, force = TRUE) var/turf/bottom_left = loaded.bottom_left_turfs[1] var/turf/top_right = loaded.top_right_turfs[1] diff --git a/code/modules/shuttle/shuttles/ert.dm b/code/modules/shuttle/shuttles/ert.dm index 4fea9d96bea3..444fb5e782d5 100644 --- a/code/modules/shuttle/shuttles/ert.dm +++ b/code/modules/shuttle/shuttles/ert.dm @@ -13,7 +13,7 @@ rechargeTime = ERT_SHUTTLE_DEFAULT_RECHARGE // 90s cooldown to recharge var/list/doors = list() var/list/external_doors = list() - var/home_base + var/datum/emergency_call/distress_beacon var/list/local_landmarks = list() /obj/docking_port/mobile/emergency_response/Initialize(mapload) @@ -45,7 +45,7 @@ if(!is_mainship_level(z)) return - if(!home_base) + if(!distress_beacon || !distress_beacon.home_base) return var/obj/structure/machinery/computer/shuttle/ert/console = getControlConsole() diff --git a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx index 0cb1c8fa80b0..3790476704f5 100644 --- a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx +++ b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx @@ -254,9 +254,12 @@ const LaunchHome = (props) => { return (
- + act('launch_home')} + />
); }; From 595390811cf88503850bc4ff637deda70c148450 Mon Sep 17 00:00:00 2001 From: harryob Date: Fri, 1 Mar 2024 19:24:31 +0000 Subject: [PATCH 15/23] don't mash this button --- code/modules/shuttle/computer.dm | 67 ++++++++++++------- .../tgui/interfaces/NavigationShuttle.tsx | 16 ++++- 2 files changed, 58 insertions(+), 25 deletions(-) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 25bac325e564..1a7fbd9ebf1a 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -94,9 +94,14 @@ unslashable = TRUE unacidable = TRUE var/disabled = FALSE - var/must_launch_home = FALSE var/compatible_landing_zones = list() + /// this interface is busy - used in [/obj/structure/machinery/computer/shuttle/ert/proc/launch_home] as this can take a second + var/spooling + + /// if this shuttle only has the option to return home + var/must_launch_home = FALSE + /obj/structure/machinery/computer/shuttle/ert/broken name = "nonfunctional shuttle control console" disabled = TRUE @@ -112,6 +117,40 @@ if(!dock.is_external) . += list(dock) +/obj/structure/machinery/computer/shuttle/ert/proc/launch_home() + if(spooling) + return + + var/obj/docking_port/mobile/emergency_response/ert = SSshuttle.getShuttle(shuttleId) + + spooling = TRUE + + var/datum/turf_reservation/loaded = SSmapping.lazy_load_template(ert.distress_beacon.home_base, force = TRUE) + var/turf/bottom_left = loaded.bottom_left_turfs[1] + var/turf/top_right = loaded.top_right_turfs[1] + + var/obj/docking_port/stationary/emergency_response/target + for(var/obj/docking_port/stationary/emergency_response/shuttle in SSshuttle.stationary) + if(shuttle.z != bottom_left.z) + continue + if(shuttle.x >= top_right.x || shuttle.y >= top_right.y) + continue + if(shuttle.x <= bottom_left.x || shuttle.y <= bottom_left.y) + continue + + target = shuttle + break + + if(!target) + spooling = FALSE + return + + SSshuttle.moveShuttleToDock(ert, target, TRUE) + target.lockdown_on_land = TRUE + + spooling = FALSE + must_launch_home = FALSE + /obj/structure/machinery/computer/shuttle/ert/is_disabled() return disabled @@ -165,6 +204,7 @@ .["shuttle_mode"] = ert.mode .["flight_time"] = ert.timeLeft(0) .["is_disabled"] = disabled + .["spooling"] = spooling .["must_launch_home"] = must_launch_home var/door_count = length(ert.external_doors) @@ -228,33 +268,12 @@ if(must_launch_home) if(action == "launch_home") - if(ert.mode != SHUTTLE_IDLE) to_chat(ui.user, SPAN_WARNING("Unable to return home.")) + balloon_alert(ui.user, "can't go home!") return - var/datum/turf_reservation/loaded = SSmapping.lazy_load_template(ert.distress_beacon.home_base, force = TRUE) - var/turf/bottom_left = loaded.bottom_left_turfs[1] - var/turf/top_right = loaded.top_right_turfs[1] - - var/obj/docking_port/stationary/emergency_response/target - for(var/obj/docking_port/stationary/emergency_response/shuttle in SSshuttle.stationary) - if(shuttle.z != bottom_left.z) - continue - if(shuttle.x >= top_right.x || shuttle.y >= top_right.y) - continue - if(shuttle.x <= bottom_left.x || shuttle.y <= bottom_left.y) - continue - - target = shuttle - break - - if(!target) - return - - SSshuttle.moveShuttleToDock(ert, target, TRUE) - target.lockdown_on_land = TRUE - must_launch_home = FALSE + launch_home() return diff --git a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx index 3790476704f5..4d44aee8db4f 100644 --- a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx +++ b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx @@ -1,5 +1,5 @@ import { useBackend, useSharedState } from '../backend'; -import { Box, Button, Icon, Flex, Section, Stack, ProgressBar } from '../components'; +import { Box, Button, Icon, Flex, Section, Stack, ProgressBar, Dimmer } from '../components'; import { Window } from '../layouts'; export interface DockingPort { @@ -20,6 +20,7 @@ export interface NavigationProps { max_engine_start_duration: number; max_pre_arrival_duration: number; must_launch_home: boolean; + spooling: boolean; is_disabled: 0 | 1; locked_down: 0 | 1; } @@ -264,6 +265,18 @@ const LaunchHome = (props) => { ); }; +const SpoolingDimmer = (props) => { + const { data, act } = useBackend(); + + return ( + +
+ +
+
+ ); +}; + const DestinationOptions = (props) => { const { data, act } = useBackend(); @@ -278,6 +291,7 @@ const RenderScreen = (props) => { const { data } = useBackend(); return ( <> + {!!data.spooling && } {data.shuttle_mode === 'idle' && } {data.shuttle_mode === 'igniting' && } {data.shuttle_mode === 'recharging' && } From d74f8c0759e65d27931fee62cf1f285961e4524a Mon Sep 17 00:00:00 2001 From: harryob Date: Fri, 1 Mar 2024 20:12:26 +0000 Subject: [PATCH 16/23] no weather here --- code/game/area/admin_level.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/area/admin_level.dm b/code/game/area/admin_level.dm index bfca1481155e..1724f2fdeea3 100644 --- a/code/game/area/admin_level.dm +++ b/code/game/area/admin_level.dm @@ -141,6 +141,9 @@ requires_power = 0 flags_area = AREA_NOTUNNEL +/area/misc + weather_enabled = FALSE + /area/misc/testroom requires_power = FALSE name = "Test Room" From 162f5a192e17dc34b342037e637b9d8c5705fe37 Mon Sep 17 00:00:00 2001 From: harryob Date: Fri, 1 Mar 2024 21:11:26 +0000 Subject: [PATCH 17/23] allows you to hop between the ships landing zones --- code/modules/shuttle/computer.dm | 75 ++++++++++--------- .../tgui/interfaces/NavigationShuttle.tsx | 9 ++- 2 files changed, 45 insertions(+), 39 deletions(-) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 1a7fbd9ebf1a..d3a902448606 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -114,8 +114,13 @@ /obj/structure/machinery/computer/shuttle/ert/proc/get_landing_zones() . = list() for(var/obj/docking_port/stationary/emergency_response/dock in SSshuttle.stationary) - if(!dock.is_external) - . += list(dock) + if(!is_mainship_level(dock.z)) + continue + + if(dock.is_external) + continue + + . += list(dock) /obj/structure/machinery/computer/shuttle/ert/proc/launch_home() if(spooling) @@ -265,9 +270,38 @@ if(ert.mode == SHUTTLE_CALL || ert.mode == SHUTTLE_RECALL) return TRUE ert.control_doors("unlock", external_only = TRUE) + if("move") + if(ert.mode != SHUTTLE_IDLE) + to_chat(usr, SPAN_WARNING("You can't move to a new destination whilst in transit.")) + return TRUE + var/dockId = params["target"] + var/list/local_data = ui_data(usr) + var/found = FALSE + playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) + for(var/destination in local_data["destinations"]) + if(destination["id"] == dockId) + found = TRUE + break + if(!found) + log_admin("[key_name(usr)] may be attempting a href dock exploit on [src] with target location \"[dockId]\"") + to_chat(usr, SPAN_WARNING("The [dockId] dock is not available at this time.")) + return + var/obj/docking_port/stationary/dock = SSshuttle.getDock(dockId) + var/dock_reserved = FALSE + for(var/obj/docking_port/mobile/other_shuttle in SSshuttle.mobile) + if(dock == other_shuttle.destination) + dock_reserved = TRUE + break + if(dock_reserved) + to_chat(usr, SPAN_WARNING("\The [dock] is currently in use.")) + return TRUE + SSshuttle.moveShuttle(ert.id, dock.id, TRUE) + to_chat(usr, SPAN_NOTICE("You begin the launch sequence to [dock].")) + return TRUE + if("launch_home") + if(!must_launch_home) + return - if(must_launch_home) - if(action == "launch_home") if(ert.mode != SHUTTLE_IDLE) to_chat(ui.user, SPAN_WARNING("Unable to return home.")) balloon_alert(ui.user, "can't go home!") @@ -275,39 +309,6 @@ launch_home() - return - - if(action != "move") - return - - if(ert.mode != SHUTTLE_IDLE) - to_chat(usr, SPAN_WARNING("You can't move to a new destination whilst in transit.")) - return TRUE - var/dockId = params["target"] - var/list/local_data = ui_data(usr) - var/found = FALSE - playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) - for(var/destination in local_data["destinations"]) - if(destination["id"] == dockId) - found = TRUE - break - if(!found) - log_admin("[key_name(usr)] may be attempting a href dock exploit on [src] with target location \"[dockId]\"") - to_chat(usr, SPAN_WARNING("The [dockId] dock is not available at this time.")) - return - var/obj/docking_port/stationary/dock = SSshuttle.getDock(dockId) - var/dock_reserved = FALSE - for(var/obj/docking_port/mobile/other_shuttle in SSshuttle.mobile) - if(dock == other_shuttle.destination) - dock_reserved = TRUE - break - if(dock_reserved) - to_chat(usr, SPAN_WARNING("\The [dock] is currently in use.")) - return TRUE - SSshuttle.moveShuttle(ert.id, dock.id, TRUE) - to_chat(usr, SPAN_NOTICE("You begin the launch sequence to [dock].")) - return TRUE - /obj/structure/machinery/computer/shuttle/ert/attack_hand(mob/user) . = ..(user) if(.) diff --git a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx index 4d44aee8db4f..f18de1d17af1 100644 --- a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx +++ b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx @@ -281,7 +281,12 @@ const DestinationOptions = (props) => { const { data, act } = useBackend(); if (data.must_launch_home) { - return ; + return ( + <> + + + + ); } else { return ; } @@ -304,7 +309,7 @@ const RenderScreen = (props) => { export const NavigationShuttle = (props) => { const { data } = useBackend(); return ( - + {data.is_disabled === 1 && } {data.is_disabled === 0 && } From 4317384a0e228f8f6e0feecc81ab15ff87725617 Mon Sep 17 00:00:00 2001 From: harryob Date: Fri, 1 Mar 2024 21:31:19 +0000 Subject: [PATCH 18/23] use ids in the hand --- code/modules/shuttle/computer.dm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index d3a902448606..8bddb9b61ce6 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -171,7 +171,12 @@ if(ert.distress_beacon && ishuman(user)) var/mob/living/carbon/human/human_user = user - var/obj/item/card/id/id = human_user.get_idcard() + var/obj/item/card/id/id = human_user.get_active_hand() + if(!istype(id)) + id = human_user.get_inactive_hand() + + if(!istype(id)) + id = human_user.get_idcard() if(!id || !HAS_TRAIT_FROM_ONLY(id, TRAIT_ERT_ID, ert.distress_beacon)) to_chat(user, SPAN_WARNING("Your ID is not authorized to interact with this terminal.")) From 66c9c883b5f3cececf639d23dab49e2ad461c5a9 Mon Sep 17 00:00:00 2001 From: harryob Date: Mon, 4 Mar 2024 08:01:00 +0000 Subject: [PATCH 19/23] Update code/datums/emergency_calls/royal_marines.dm Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> --- code/datums/emergency_calls/royal_marines.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/datums/emergency_calls/royal_marines.dm b/code/datums/emergency_calls/royal_marines.dm index b8ad7348e1e8..a614d5a0c1c7 100644 --- a/code/datums/emergency_calls/royal_marines.dm +++ b/code/datums/emergency_calls/royal_marines.dm @@ -3,6 +3,7 @@ mob_max = 7 probability = 15 home_base = /datum/lazy_template/ert/twe_station + shuttle_id = MOBILE_SHUTTLE_ID_ERT4 name_of_spawn = /obj/effect/landmark/ert_spawns/distress_twe item_spawn = /obj/effect/landmark/ert_spawns/distress_twe/item max_engineers = 0 From 256867010eb783ae30a935142070a2f6ee844dd6 Mon Sep 17 00:00:00 2001 From: harryob Date: Mon, 4 Mar 2024 08:01:35 +0000 Subject: [PATCH 20/23] Update code/modules/shuttle/computer.dm Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> --- code/modules/shuttle/computer.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 8bddb9b61ce6..977108e38680 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -313,6 +313,7 @@ return launch_home() + return TRUE /obj/structure/machinery/computer/shuttle/ert/attack_hand(mob/user) . = ..(user) From a3837bbf22f4dc63a1ae08d426f452f6efb87a2c Mon Sep 17 00:00:00 2001 From: harryob <55142896+harryob@users.noreply.github.com> Date: Mon, 4 Mar 2024 10:31:50 +0000 Subject: [PATCH 21/23] addresses spooling screen --- code/modules/shuttle/computer.dm | 5 +++++ tgui/packages/tgui/interfaces/NavigationShuttle.tsx | 11 ++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 977108e38680..e9f4eb54d9e3 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -129,6 +129,7 @@ var/obj/docking_port/mobile/emergency_response/ert = SSshuttle.getShuttle(shuttleId) spooling = TRUE + SStgui.update_uis(src) var/datum/turf_reservation/loaded = SSmapping.lazy_load_template(ert.distress_beacon.home_base, force = TRUE) var/turf/bottom_left = loaded.bottom_left_turfs[1] @@ -331,6 +332,8 @@ /obj/structure/machinery/computer/shuttle/ert/small/get_landing_zones() . = list() for(var/obj/docking_port/stationary/emergency_response/dock in SSshuttle.stationary) + if(!is_mainship_level(dock.z)) + continue if(istype(dock, /obj/docking_port/stationary/emergency_response/external/hangar_port)) continue if(istype(dock, /obj/docking_port/stationary/emergency_response/external/hangar_starboard)) @@ -347,6 +350,8 @@ /obj/structure/machinery/computer/shuttle/ert/big/get_landing_zones() . = list() for(var/obj/docking_port/stationary/emergency_response/dock in SSshuttle.stationary) + if(!is_mainship_level(dock.z)) + continue . += list(dock) /obj/structure/machinery/computer/shuttle/lifeboat diff --git a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx index f18de1d17af1..6333cb85d59a 100644 --- a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx +++ b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx @@ -270,9 +270,14 @@ const SpoolingDimmer = (props) => { return ( -
- -
+ + + Spooling... + + + + +
); }; From 9b622e6cf63d0884ac07ee42ae59f51d6cf05a2d Mon Sep 17 00:00:00 2001 From: harryob <55142896+harryob@users.noreply.github.com> Date: Mon, 4 Mar 2024 10:49:53 +0000 Subject: [PATCH 22/23] addresses formatting --- tgui/packages/tgui/interfaces/NavigationShuttle.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx index 6333cb85d59a..67249dad958f 100644 --- a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx +++ b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx @@ -254,7 +254,7 @@ const LaunchHome = (props) => { const { data, act } = useBackend(); return ( -
+
Date: Mon, 4 Mar 2024 11:20:26 +0000 Subject: [PATCH 23/23] mission accomplished --- code/modules/shuttle/computer.dm | 4 ++++ code/modules/shuttle/shuttles/ert.dm | 3 ++- tgui/packages/tgui/interfaces/NavigationShuttle.tsx | 12 ++++++++---- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index e9f4eb54d9e3..5f96de812819 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -102,6 +102,9 @@ /// if this shuttle only has the option to return home var/must_launch_home = FALSE + /// if the ERT that used this shuttle has returned home + var/mission_accomplished = FALSE + /obj/structure/machinery/computer/shuttle/ert/broken name = "nonfunctional shuttle control console" disabled = TRUE @@ -217,6 +220,7 @@ .["is_disabled"] = disabled .["spooling"] = spooling .["must_launch_home"] = must_launch_home + .["mission_accomplished"] = mission_accomplished var/door_count = length(ert.external_doors) var/locked_count = 0 diff --git a/code/modules/shuttle/shuttles/ert.dm b/code/modules/shuttle/shuttles/ert.dm index 444fb5e782d5..1aca286088ea 100644 --- a/code/modules/shuttle/shuttles/ert.dm +++ b/code/modules/shuttle/shuttles/ert.dm @@ -206,8 +206,9 @@ ert.control_doors("unlock", force = FALSE) if(lockdown_on_land) - var/obj/structure/machinery/computer/shuttle/console = arriving_shuttle.getControlConsole() + var/obj/structure/machinery/computer/shuttle/ert/console = arriving_shuttle.getControlConsole() console.disable() + console.mission_accomplished = TRUE lockdown_on_land = FALSE /obj/docking_port/stationary/emergency_response/port1 diff --git a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx index 67249dad958f..adcf42b244fe 100644 --- a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx +++ b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx @@ -21,6 +21,7 @@ export interface NavigationProps { max_pre_arrival_duration: number; must_launch_home: boolean; spooling: boolean; + mission_accomplished: boolean; is_disabled: 0 | 1; locked_down: 0 | 1; } @@ -238,13 +239,16 @@ const DoorControls = () => { }; export const DisabledScreen = (props) => { + const { data, act } = useBackend(); + + const disabled_text = data.mission_accomplished + ? 'Auto-navigation protocol completed - return home complete. Shuttle disabled.' + : 'The shuttle has had an error. Contact your nearest system administrator to resolve the issue.'; + return (
- - The shuttle has had an error. Contact your nearest system - administrator to resolve the issue. - + {disabled_text}
);