diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 5c5ff502998..840d2bdf8bd 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -194,7 +194,7 @@ return 1 /obj/machinery/atmospherics/binary/dp_vent_pump/initialize() - ..() + . = ..() if(frequency) set_frequency(frequency) diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 4c1863b1334..b4f25459c1a 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -128,7 +128,7 @@ return 1 /obj/machinery/atmospherics/binary/passive_gate/initialize() - ..() + . = ..() if(frequency) set_frequency(frequency) diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index cddd9f95270..6320ddf8a32 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -148,7 +148,7 @@ Thus, the two variables affect pump operation are set in New(): ui.set_auto_update(1) // auto update every Master Controller tick /obj/machinery/atmospherics/binary/pump/initialize() - ..() + . = ..() if(frequency) set_frequency(frequency) diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 951e5a03de8..10708f4185a 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -129,8 +129,9 @@ return 1 /obj/machinery/atmospherics/trinary/atmos_filter/initialize() - set_frequency(frequency) - ..() + . = ..() + if(frequency) + set_frequency(frequency) /obj/machinery/atmospherics/trinary/atmos_filter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (!istype(W, /obj/item/weapon/wrench)) diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm index 09d2d5e4247..9f7e80f97fd 100644 --- a/code/ATMOSPHERICS/components/tvalve.dm +++ b/code/ATMOSPHERICS/components/tvalve.dm @@ -318,7 +318,7 @@ /obj/machinery/atmospherics/tvalve/digital/initialize() - ..() + . = ..() if(frequency) set_frequency(frequency) @@ -458,7 +458,7 @@ radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/atmospherics/tvalve/mirrored/digital/initialize() - ..() + . = ..() if(frequency) set_frequency(frequency) diff --git a/code/ATMOSPHERICS/components/unary/outlet_injector.dm b/code/ATMOSPHERICS/components/unary/outlet_injector.dm index 84780da4255..7c52cea895e 100644 --- a/code/ATMOSPHERICS/components/unary/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary/outlet_injector.dm @@ -123,9 +123,9 @@ return 1 /obj/machinery/atmospherics/unary/outlet_injector/initialize() - ..() - - set_frequency(frequency) + . = ..() + if(frequency) + set_frequency(frequency) /obj/machinery/atmospherics/unary/outlet_injector/receive_signal(datum/signal/signal) if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index 3cee872f8be..77aedf94e08 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -266,7 +266,7 @@ radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/atmospherics/valve/digital/initialize() - ..() + . = ..() if(frequency) set_frequency(frequency) diff --git a/code/__defines/callbacks.dm b/code/__defines/callbacks.dm new file mode 100644 index 00000000000..126ef1ea1cf --- /dev/null +++ b/code/__defines/callbacks.dm @@ -0,0 +1,4 @@ +#define GLOBAL_PROC "some_magic_bullshit" + +#define CALLBACK new /datum/callback +#define INVOKE_ASYNC world.ImmediateInvokeAsync diff --git a/code/__defines/qdel.dm b/code/__defines/qdel.dm index f50c012ce3f..82ec12a2113 100644 --- a/code/__defines/qdel.dm +++ b/code/__defines/qdel.dm @@ -18,5 +18,6 @@ #define GC_QUEUED_FOR_HARD_DEL -2 #define GC_CURRENTLY_BEING_QDELETED -3 +#define QDELING(X) (X.gc_destroyed) #define QDELETED(X) (!X || X.gc_destroyed) #define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) \ No newline at end of file diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index cf23deb2def..faddb9d9176 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -1,4 +1,12 @@ +#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize +#define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE) +#define INITIALIZATION_INNEW_REGULAR 2 //New should call Initialize(FALSE) + +#define INITIALIZE_HINT_NORMAL 0 //Nothing happens +#define INITIALIZE_HINT_LATELOAD 1 //Call LateInitialize +#define INITIALIZE_HINT_QDEL 2 //Call qdel on the atom + // SS runlevels #define RUNLEVEL_INIT 0 // "Initialize Only" - Used for subsystems that should never be fired (Should also have SS_NO_FIRE set) @@ -15,6 +23,10 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G // Subsystem init_order, from highest priority to lowest priority // Subsystems shutdown in the reverse of the order they initialize in // The numbers just define the ordering, they are meaningless otherwise. +#define INIT_ORDER_DECALS 16 +#define INIT_ORDER_ATOMS 15 #define INIT_ORDER_MACHINES 10 +#define INIT_ORDER_SHUTTLES 3 #define INIT_ORDER_LIGHTING 0 #define INIT_ORDER_AIR -1 +#define INIT_ORDER_XENOARCH -20 diff --git a/code/controllers/Processes/Shuttle.dm b/code/controllers/Processes/Shuttle.dm deleted file mode 100644 index a10586d76d9..00000000000 --- a/code/controllers/Processes/Shuttle.dm +++ /dev/null @@ -1,9 +0,0 @@ -/datum/controller/process/Shuttle/setup() - name = "shuttle controller" - schedule_interval = 20 // every 2 seconds - - if(!shuttle_controller) - shuttle_controller = new - -/datum/controller/process/Shuttle/doWork() - shuttle_controller.process() diff --git a/code/controllers/Processes/inactivity.dm b/code/controllers/Processes/inactivity.dm index b1029e0391b..2a6cd44d2cd 100644 --- a/code/controllers/Processes/inactivity.dm +++ b/code/controllers/Processes/inactivity.dm @@ -7,8 +7,30 @@ for(last_object in clients) var/client/C = last_object if(C.is_afk(config.kick_inactive MINUTES)) - if(!istype(C.mob, /mob/observer/dead)) - log_access("AFK: [key_name(C)]") - C << "You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected." - del(C) // Don't qdel, cannot override finalize_qdel behaviour for clients. + if(!istype(C.mob, /mob/observer/dead) && !istype(C.mob, /mob/new_player)) + to_chat(C,"You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.") + var/information + + if(ishuman(C.mob)) + var/job + var/mob/living/carbon/human/H = C.mob + var/datum/data/record/R = find_general_record("name", H.real_name) + if(R) + job = R.fields["real_rank"] + if(!job && H.mind) + job = H.mind.assigned_role + if(!job && H.job) + job = H.job + if(job) + information = " while [job]." + + else if(issilicon(C.mob)) + information = " while a silicon." + + var/adminlinks + adminlinks = " (JMP|CRYO)" + + log_and_message_admins("being kicked for AFK[information][adminlinks]", C.mob) + + qdel(C) SCHECK diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 6659f47b4a5..98ca642c828 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -36,22 +36,22 @@ datum/controller/game_controller/New() datum/controller/game_controller/proc/setup() setup_objects() - setupgenetics() - SetupXenoarch() + // setupgenetics() Moved to SSatoms + // SetupXenoarch() - Moved to SSxenoarch transfer_controller = new admin_notice("Initializations complete.", R_DEBUG) -#if UNIT_TEST -#define CHECK_SLEEP_MASTER // For unit tests we don't care about a smooth lobby screen experience. We care about speed. -#else -#define CHECK_SLEEP_MASTER if(++initialized_objects > 500) { initialized_objects=0;sleep(world.tick_lag); } -#endif +// #if UNIT_TEST +// #define CHECK_SLEEP_MASTER // For unit tests we don't care about a smooth lobby screen experience. We care about speed. +// #else +// #define CHECK_SLEEP_MASTER if(++initialized_objects > 500) { initialized_objects=0;sleep(world.tick_lag); } +// #endif datum/controller/game_controller/proc/setup_objects() - #if !UNIT_TEST - var/initialized_objects = 0 - #endif + // #if !UNIT_TEST + // var/initialized_objects = 0 + // #endif // Set up antagonists. populate_antag_type_list() @@ -59,6 +59,7 @@ datum/controller/game_controller/proc/setup_objects() //Set up spawn points. populate_spawn_points() +/* admin_notice("Initializing Floor Decals", R_DEBUG) var/list/turfs_with_decals = list() for(var/obj/effect/floor_decal/D in world) @@ -111,3 +112,4 @@ datum/controller/game_controller/proc/setup_objects() if(!QDELETED(lift)) lift.initialize() CHECK_SLEEP_MASTER + */ \ No newline at end of file diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm deleted file mode 100644 index f68957ddb55..00000000000 --- a/code/controllers/shuttle_controller.dm +++ /dev/null @@ -1,39 +0,0 @@ - -var/global/datum/shuttle_controller/shuttle_controller - - -/datum/shuttle_controller - var/list/shuttles //maps shuttle tags to shuttle datums, so that they can be looked up. - var/list/process_shuttles //simple list of shuttles, for processing - -/datum/shuttle_controller/proc/process() - //process ferry shuttles - for (var/datum/shuttle/shuttle in process_shuttles) - if(istype(shuttle, /datum/shuttle/ferry)) - var/datum/shuttle/ferry/F = shuttle - if(F.process_state || F.always_process) - F.process() - else - shuttle.process() - - -//This is called by gameticker after all the machines and radio frequencies have been properly initialized -/datum/shuttle_controller/proc/setup_shuttle_docks() -// for(var/shuttle_tag in shuttles) -// var/datum/shuttle/shuttle = shuttles[shuttle_tag] - for(var/shuttle_type in subtypesof(/datum/shuttle)) - var/datum/shuttle/shuttle = shuttle_type - if(initial(shuttle.category) == shuttle_type) - continue - shuttle = new shuttle() - shuttle.init_docking_controllers() - shuttle.dock() //makes all shuttles docked to something at round start go into the docked state - - for(var/obj/machinery/embedded_controller/C in machines) - if(istype(C.program, /datum/computer/file/embedded_program/docking)) - C.program.tag = null //clear the tags, 'cause we don't need 'em anymore - -/datum/shuttle_controller/New() - shuttles = list() - process_shuttles = list() - diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index bd9a2aeafbd..437c10424b0 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -166,7 +166,7 @@ - if(can_fire && !(SS_NO_FIRE in flags)) + if(can_fire && !(SS_NO_FIRE & flags)) msg = "[round(cost,1)]ms|[round(tick_usage,1)]%|[round(ticks,0.1)]\t[msg]" else msg = "OFFLINE\t[msg]" diff --git a/code/controllers/subsystems/atoms.dm b/code/controllers/subsystems/atoms.dm new file mode 100644 index 00000000000..6b5669878c6 --- /dev/null +++ b/code/controllers/subsystems/atoms.dm @@ -0,0 +1,145 @@ +#define BAD_INIT_QDEL_BEFORE 1 +#define BAD_INIT_DIDNT_INIT 2 +#define BAD_INIT_SLEPT 4 +#define BAD_INIT_NO_HINT 8 + +SUBSYSTEM_DEF(atoms) + name = "Atoms" + init_order = INIT_ORDER_ATOMS + flags = SS_NO_FIRE + + var/initialized = INITIALIZATION_INSSATOMS + // var/list/created_atoms // This is never used, so don't bother. ~Leshana + var/old_initialized + + var/list/late_loaders + var/list/created_atoms + + var/list/BadInitializeCalls = list() + +/datum/controller/subsystem/atoms/Initialize(timeofday) + setupgenetics() //to set the mutations' place in structural enzymes, so initializers know where to put mutations. + initialized = INITIALIZATION_INNEW_MAPLOAD + to_world_log("Initializing objects") + admin_notice("Initializing objects", R_DEBUG) + InitializeAtoms() + return ..() + +/datum/controller/subsystem/atoms/proc/InitializeAtoms(list/atoms) + if(initialized == INITIALIZATION_INSSATOMS) + return + + initialized = INITIALIZATION_INNEW_MAPLOAD + + LAZYINITLIST(late_loaders) + + var/count + var/list/mapload_arg = list(TRUE) + if(atoms) + created_atoms = list() + count = atoms.len + for(var/I in atoms) + var/atom/A = I + if(!A.initialized) + if(InitAtom(I, mapload_arg)) + atoms -= I + CHECK_TICK + else + count = 0 + for(var/atom/A in world) + if(!A.initialized) + InitAtom(A, mapload_arg) + ++count + CHECK_TICK + + log_world("Initialized [count] atoms") + + initialized = INITIALIZATION_INNEW_REGULAR + + if(late_loaders.len) + for(var/I in late_loaders) + var/atom/A = I + A.LateInitialize() + CHECK_TICK + testing("Late initialized [late_loaders.len] atoms") + late_loaders.Cut() + + // Nothing ever checks return value of this proc, so don't bother. If this ever changes fix code in /atom/New() ~Leshana + // if(atoms) + // . = created_atoms + atoms + // created_atoms = null + +/datum/controller/subsystem/atoms/proc/InitAtom(atom/A, list/arguments) + var/the_type = A.type + if(QDELING(A)) + BadInitializeCalls[the_type] |= BAD_INIT_QDEL_BEFORE + return TRUE + + var/start_tick = world.time + + var/result = A.initialize(arglist(arguments)) + + if(start_tick != world.time) + BadInitializeCalls[the_type] |= BAD_INIT_SLEPT + + var/qdeleted = FALSE + + if(result != INITIALIZE_HINT_NORMAL) + switch(result) + if(INITIALIZE_HINT_LATELOAD) + if(arguments[1]) //mapload + late_loaders += A + else + A.LateInitialize() + if(INITIALIZE_HINT_QDEL) + qdel(A) + qdeleted = TRUE + else + BadInitializeCalls[the_type] |= BAD_INIT_NO_HINT + + if(!A) //possible harddel + qdeleted = TRUE + else if(!A.initialized) + BadInitializeCalls[the_type] |= BAD_INIT_DIDNT_INIT + + return qdeleted || QDELING(A) + +/datum/controller/subsystem/atoms/proc/map_loader_begin() + old_initialized = initialized + initialized = INITIALIZATION_INSSATOMS + +/datum/controller/subsystem/atoms/proc/map_loader_stop() + initialized = old_initialized + +/datum/controller/subsystem/atoms/Recover() + initialized = SSatoms.initialized + if(initialized == INITIALIZATION_INNEW_MAPLOAD) + InitializeAtoms() + old_initialized = SSatoms.old_initialized + BadInitializeCalls = SSatoms.BadInitializeCalls + +/datum/controller/subsystem/atoms/proc/InitLog() + . = "" + for(var/path in BadInitializeCalls) + . += "Path : [path] \n" + var/fails = BadInitializeCalls[path] + if(fails & BAD_INIT_DIDNT_INIT) + . += "- Didn't call atom/Initialize()\n" + if(fails & BAD_INIT_NO_HINT) + . += "- Didn't return an Initialize hint\n" + if(fails & BAD_INIT_QDEL_BEFORE) + . += "- Qdel'd in New()\n" + if(fails & BAD_INIT_SLEPT) + . += "- Slept during Initialize()\n" + +/datum/controller/subsystem/atoms/Shutdown() + var/initlog = InitLog() + if(initlog) + //text2file(initlog, "[GLOB.log_directory]/initialize.log") + var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day") + text2file(initlog, "data/logs/[date_string]-initialize.log") + +#undef BAD_INIT_QDEL_BEFORE +#undef BAD_INIT_DIDNT_INIT +#undef BAD_INIT_SLEPT +#undef BAD_INIT_NO_HINT diff --git a/code/controllers/subsystems/floor_decals.dm b/code/controllers/subsystems/floor_decals.dm new file mode 100644 index 00000000000..39e4515d0d7 --- /dev/null +++ b/code/controllers/subsystems/floor_decals.dm @@ -0,0 +1,28 @@ +// +// Floor Decals Initialization Subsystem +// This is part of the giant decal hack that works around a BYOND bug where DreamDaemon will crash if you +// update overlays on turfs too much. +// The master_controller on Polaris used to init decals prior to initializing areas (which initilized turfs) +// Now that we switched to subsystems we still want to do the same thing, so this takes care of it. +// +SUBSYSTEM_DEF(floor_decals) + name = "Floor Decals" + init_order = INIT_ORDER_DECALS + flags = SS_NO_FIRE + +/datum/controller/subsystem/floor_decals/Initialize(timeofday) + if(floor_decals_initialized) + return ..() + to_world_log("Initializing Floor Decals") + admin_notice("Initializing Floor Decals", R_DEBUG) + var/list/turfs_with_decals = list() + for(var/obj/effect/floor_decal/D in world) + var/T = D.add_to_turf_decals() + if(T) turfs_with_decals |= T + CHECK_TICK + for(var/item in turfs_with_decals) + var/turf/T = item + if(T.decals) T.apply_decals() + CHECK_TICK + floor_decals_initialized = TRUE + return ..() diff --git a/code/controllers/subsystems/machines.dm b/code/controllers/subsystems/machines.dm index 77385440247..f8c353c43d1 100644 --- a/code/controllers/subsystems/machines.dm +++ b/code/controllers/subsystems/machines.dm @@ -33,8 +33,9 @@ SUBSYSTEM_DEF(machines) var/list/current_run = list() /datum/controller/subsystem/machines/Initialize(timeofday) - SSmachines.makepowernets() - // TODO - Move world-creation time setup of atmos machinery and pipenets to here + makepowernets() + admin_notice("Initializing atmos machinery.", R_DEBUG) + setup_atmos_machinery(global.machines) fire() ..() @@ -53,13 +54,33 @@ SUBSYSTEM_DEF(machines) for(var/datum/powernet/PN in powernets) qdel(PN) powernets.Cut() + setup_powernets_for_cables(cable_list) - for(var/obj/structure/cable/PC in cable_list) +/datum/controller/subsystem/machines/proc/setup_powernets_for_cables(list/cables) + for(var/obj/structure/cable/PC in cables) if(!PC.powernet) var/datum/powernet/NewPN = new() NewPN.add_cable(PC) propagate_network(PC,PC.powernet) +/datum/controller/subsystem/machines/proc/setup_atmos_machinery(list/atmos_machines) + for(var/obj/machinery/atmospherics/machine in atmos_machines) + machine.atmos_init() + CHECK_TICK + + for(var/obj/machinery/atmospherics/machine in atmos_machines) + machine.build_network() + CHECK_TICK + + for(var/obj/machinery/atmospherics/unary/U in atmos_machines) + if(istype(U, /obj/machinery/atmospherics/unary/vent_pump)) + var/obj/machinery/atmospherics/unary/vent_pump/T = U + T.broadcast_status() + else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber)) + var/obj/machinery/atmospherics/unary/vent_scrubber/T = U + T.broadcast_status() + CHECK_TICK + /datum/controller/subsystem/machines/stat_entry() var/msg = list() msg += "C:{" diff --git a/code/controllers/subsystems/shuttles.dm b/code/controllers/subsystems/shuttles.dm new file mode 100644 index 00000000000..8751e0ffd71 --- /dev/null +++ b/code/controllers/subsystems/shuttles.dm @@ -0,0 +1,83 @@ +// +// SSshuttles subsystem - Handles initialization and processing of shuttles. +// + +// This global variable exists for legacy support so we don't have to rename every shuttle_controller to SSshuttles yet. +var/global/datum/controller/subsystem/shuttles/shuttle_controller + +SUBSYSTEM_DEF(shuttles) + name = "Shuttles" + wait = 2 SECONDS + priority = 5 + init_order = INIT_ORDER_SHUTTLES + flags = SS_KEEP_TIMING|SS_NO_TICK_CHECK + runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME + + var/list/shuttles = list() // Maps shuttle tags to shuttle datums, so that they can be looked up. + var/list/process_shuttles = list() // Simple list of shuttles, for processing + var/list/current_run = list() // Shuttles remaining to process this fire() tick + var/list/docks_init_callbacks // List of callbacks to run when we finish setting up shuttle docks. + var/docks_initialized = FALSE + +/datum/controller/subsystem/shuttles/Initialize(timeofday) + global.shuttle_controller = src + setup_shuttle_docks() + for(var/I in docks_init_callbacks) + var/datum/callback/cb = I + cb.InvokeAsync() + LAZYCLEARLIST(docks_init_callbacks) + docks_init_callbacks = null + return ..() + +/datum/controller/subsystem/shuttles/fire(resumed = 0) + do_process_shuttles(resumed) + +/datum/controller/subsystem/shuttles/stat_entry() + var/msg = list() + msg += "AS:[shuttles.len]|" + msg += "PS:[process_shuttles.len]|" + ..(jointext(msg, null)) + +/datum/controller/subsystem/shuttles/proc/do_process_shuttles(resumed = 0) + if (!resumed) + src.current_run = process_shuttles.Copy() + + var/list/current_run = src.current_run // Cache for sanic speed + while(current_run.len) + var/datum/shuttle/S = current_run[current_run.len] + current_run.len-- + if(istype(S) && !QDELETED(S)) + if(istype(S, /datum/shuttle/ferry)) // Ferry shuttles get special treatment + var/datum/shuttle/ferry/F = S + if(F.process_state || F.always_process) + F.process() + else + S.process() + else + process_shuttles -= S + if(MC_TICK_CHECK) + return + +// This should be called after all the machines and radio frequencies have been properly initialized +/datum/controller/subsystem/shuttles/proc/setup_shuttle_docks() + // Find all declared shuttle datums and initailize them. + for(var/shuttle_type in subtypesof(/datum/shuttle)) + var/datum/shuttle/shuttle = shuttle_type + if(initial(shuttle.category) == shuttle_type) + continue + shuttle = new shuttle() + shuttle.init_docking_controllers() + shuttle.dock() //makes all shuttles docked to something at round start go into the docked state + CHECK_TICK + + for(var/obj/machinery/embedded_controller/C in machines) + if(istype(C.program, /datum/computer/file/embedded_program/docking)) + C.program.tag = null //clear the tags, 'cause we don't need 'em anymore + docks_initialized = TRUE + +// Register a callback that will be invoked once the shuttles have been initialized +/datum/controller/subsystem/shuttles/proc/OnDocksInitialized(datum/callback/cb) + if(!docks_initialized) + LAZYADD(docks_init_callbacks, cb) + else + cb.InvokeAsync() diff --git a/code/modules/xenoarcheaology/master_controller.dm b/code/controllers/subsystems/xenoarch.dm similarity index 79% rename from code/modules/xenoarcheaology/master_controller.dm rename to code/controllers/subsystems/xenoarch.dm index a6689e36b6f..eb6c97ea75f 100644 --- a/code/modules/xenoarcheaology/master_controller.dm +++ b/code/controllers/subsystems/xenoarch.dm @@ -1,14 +1,35 @@ -/datum/controller/game_controller - var/list/artifact_spawning_turfs = list() - var/list/digsite_spawning_turfs = list() - #define XENOARCH_SPAWN_CHANCE 0.5 #define DIGSITESIZE_LOWER 4 #define DIGSITESIZE_UPPER 12 #define ARTIFACTSPAWNNUM_LOWER 6 #define ARTIFACTSPAWNNUM_UPPER 12 -/datum/controller/game_controller/proc/SetupXenoarch() +// +// Xenoarch subsystem handles initialization of Xenoarcheaology artifacts and digsites. +// +SUBSYSTEM_DEF(xenoarch) + name = "Xenoarch" + init_order = INIT_ORDER_XENOARCH + flags = SS_NO_FIRE + var/list/artifact_spawning_turfs = list() + var/list/digsite_spawning_turfs = list() + +/datum/controller/subsystem/xenoarch/Initialize(timeofday) + SetupXenoarch() + ..() + +/datum/controller/subsystem/xenoarch/Recover() + if (istype(SSxenoarch.artifact_spawning_turfs)) + artifact_spawning_turfs = SSxenoarch.artifact_spawning_turfs + if (istype(SSxenoarch.digsite_spawning_turfs)) + digsite_spawning_turfs = SSxenoarch.digsite_spawning_turfs + +/datum/controller/subsystem/xenoarch/stat_entry(msg) + if (!Debug2) + return // Only show up in stat panel if debugging is enabled. + . = ..() + +/datum/controller/subsystem/xenoarch/proc/SetupXenoarch() for(var/turf/simulated/mineral/M in world) if(!M.density) continue diff --git a/code/datums/callback.dm b/code/datums/callback.dm new file mode 100644 index 00000000000..a92a715eced --- /dev/null +++ b/code/datums/callback.dm @@ -0,0 +1,172 @@ +/* + USAGE: + + var/datum/callback/C = new(object|null, /proc/type/path|"procstring", arg1, arg2, ... argn) + var/timerid = addtimer(C, time, timertype) + OR + var/timerid = addtimer(CALLBACK(object|null, /proc/type/path|procstring, arg1, arg2, ... argn), time, timertype) + + Note: proc strings can only be given for datum proc calls, global procs must be proc paths + Also proc strings are strongly advised against because they don't compile error if the proc stops existing + See the note on proc typepath shortcuts + + INVOKING THE CALLBACK: + var/result = C.Invoke(args, to, add) //additional args are added after the ones given when the callback was created + OR + var/result = C.InvokeAsync(args, to, add) //Sleeps will not block, returns . on the first sleep (then continues on in the "background" after the sleep/block ends), otherwise operates normally. + OR + INVOKE_ASYNC() to immediately create and call InvokeAsync + + PROC TYPEPATH SHORTCUTS (these operate on paths, not types, so to these shortcuts, datum is NOT a parent of atom, etc...) + + global proc while in another global proc: + .procname + Example: + CALLBACK(GLOBAL_PROC, .some_proc_here) + + proc defined on current(src) object (when in a /proc/ and not an override) OR overridden at src or any of it's parents: + .procname + Example: + CALLBACK(src, .some_proc_here) + + when the above doesn't apply: + .proc/procname + Example: + CALLBACK(src, .proc/some_proc_here) + + proc defined on a parent of a some type: + Example: /some/type/.proc/some_proc_here + + Other wise you will have to do the full typepath of the proc (/type/of/thing/proc/procname) +*/ + +/datum/callback + var/datum/object = GLOBAL_PROC + var/delegate + var/list/arguments + var/weakref/user + +/datum/callback/New(thingtocall, proctocall, ...) + if (thingtocall) + object = thingtocall + delegate = proctocall + if (length(args) > 2) + arguments = args.Copy(3) + if(usr) + user = weakref(usr) + +/world/proc/ImmediateInvokeAsync(thingtocall, proctocall, ...) + set waitfor = FALSE + + if (!thingtocall) + return + + var/list/calling_arguments = length(args) > 2 ? args.Copy(3) : null + + if (thingtocall == GLOBAL_PROC) + call(proctocall)(arglist(calling_arguments)) + else + call(thingtocall, proctocall)(arglist(calling_arguments)) + +/datum/callback/proc/Invoke(...) + if(!usr) + var/weakref/W = user + if(W) + var/mob/M = W.resolve() + if(M) + return world.PushUsr(M, src) + + if (!object) + return + + var/list/calling_arguments = arguments + if (length(args)) + if (length(arguments)) + calling_arguments = calling_arguments + args //not += so that it creates a new list so the arguments list stays clean + else + calling_arguments = args + if (object == GLOBAL_PROC) + return call(delegate)(arglist(calling_arguments)) + return call(object, delegate)(arglist(calling_arguments)) + +//copy and pasted because fuck proc overhead +/datum/callback/proc/InvokeAsync(...) + set waitfor = FALSE + + if(!usr) + var/weakref/W = user + if(W) + var/mob/M = W.resolve() + if(M) + return world.PushUsr(M, src) + + if (!object) + return + + var/list/calling_arguments = arguments + if (length(args)) + if (length(arguments)) + calling_arguments = calling_arguments + args //not += so that it creates a new list so the arguments list stays clean + else + calling_arguments = args + if (object == GLOBAL_PROC) + return call(delegate)(arglist(calling_arguments)) + return call(object, delegate)(arglist(calling_arguments)) + + +/datum/callback_select + var/list/finished + var/pendingcount + var/total + +/datum/callback_select/New(count, savereturns) + total = count + if (savereturns) + finished = new(count) + +/datum/callback_select/proc/invoke_callback(index, datum/callback/callback, list/callback_args, savereturn = TRUE) + set waitfor = FALSE + if (!callback || !istype(callback)) + //This check only exists because the alternative is callback_select would block forever if given invalid data + CRASH("invalid callback passed to invoke_callback") + if (!length(callback_args)) + callback_args = list() + pendingcount++ + var/rtn = callback.Invoke(arglist(callback_args)) + pendingcount-- + if (savereturn) + finished[index] = rtn + +//runs a list of callbacks asynchronously, returning once all of them return. +//callbacks can be repeated. +//callbacks-args is an optional list of argument lists, in the same order as the callbacks, +// the inner lists will be sent to the callbacks when invoked() as additional args. +//can optionly save and return a list of return values, in the same order as the original list of callbacks +//resolution is the number of byond ticks between checks. +/proc/callback_select(list/callbacks, list/callback_args, savereturns = TRUE, resolution = 1) + if (!callbacks) + return + var/count = length(callbacks) + if (!count) + return + if (!callback_args) + callback_args = list() + + callback_args.len = count + + var/datum/callback_select/CS = new(count, savereturns) + for (var/i in 1 to count) + CS.invoke_callback(i, callbacks[i], callback_args[i], savereturns) + + while(CS.pendingcount) + sleep(resolution*world.tick_lag) + return CS.finished + +// Makes a call in the context of a different usr +// Use sparingly +/world/proc/PushUsr(mob/M, datum/callback/CB) + var/temp = usr + testing("PushUsr() in use") + usr = M + . = CB.Invoke() + usr = temp diff --git a/code/datums/mind.dm b/code/datums/mind.dm index feef09b45e8..1f7685def52 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -503,53 +503,53 @@ //slime /mob/living/simple_animal/slime/mind_initialize() - ..() + . = ..() mind.assigned_role = "slime" /mob/living/carbon/alien/larva/mind_initialize() - ..() + . = ..() mind.special_role = "Larva" //AI /mob/living/silicon/ai/mind_initialize() - ..() + . = ..() mind.assigned_role = "AI" //BORG /mob/living/silicon/robot/mind_initialize() - ..() + . = ..() mind.assigned_role = "Cyborg" //PAI /mob/living/silicon/pai/mind_initialize() - ..() + . = ..() mind.assigned_role = "pAI" mind.special_role = "" //Animals /mob/living/simple_animal/mind_initialize() - ..() + . = ..() mind.assigned_role = "Animal" /mob/living/simple_animal/corgi/mind_initialize() - ..() + . = ..() mind.assigned_role = "Corgi" /mob/living/simple_animal/shade/mind_initialize() - ..() + . = ..() mind.assigned_role = "Shade" /mob/living/simple_animal/construct/builder/mind_initialize() - ..() + . = ..() mind.assigned_role = "Artificer" mind.special_role = "Cultist" /mob/living/simple_animal/construct/wraith/mind_initialize() - ..() + . = ..() mind.assigned_role = "Wraith" mind.special_role = "Cultist" /mob/living/simple_animal/construct/armoured/mind_initialize() - ..() + . = ..() mind.assigned_role = "Juggernaut" mind.special_role = "Cultist" diff --git a/code/datums/repositories/radiation.dm b/code/datums/repositories/radiation.dm index 4755b982ec4..5d06eccc77e 100644 --- a/code/datums/repositories/radiation.dm +++ b/code/datums/repositories/radiation.dm @@ -116,7 +116,7 @@ var/global/repository/radiation/radiation_repository = new() else if(O.density) //So open doors don't get counted var/material/M = O.get_material() if(!M) continue - cached_rad_resistance += M.weight + cached_rad_resistance += M.radiation_resistance // Looks like storing the contents length is meant to be a basic check if the cache is stale due to items enter/exiting. Better than nothing so I'm leaving it as is. ~Leshana radiation_repository.resistance_cache[src] = (length(contents) + 1) diff --git a/code/datums/supplypacks/medical.dm b/code/datums/supplypacks/medical.dm index bfaf2658bf2..2c2e26d97da 100644 --- a/code/datums/supplypacks/medical.dm +++ b/code/datums/supplypacks/medical.dm @@ -330,8 +330,8 @@ access = access_cmo /datum/supply_packs/med/defib - name = "Defibrilator crate" + name = "Defibrillator crate" contains = list(/obj/item/device/defib_kit = 2) cost = 30 containertype = /obj/structure/closet/crate/medical - containername = "Defibrilator crate" \ No newline at end of file + containername = "Defibrillator crate" \ No newline at end of file diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 0c5fe0e7deb..734b09ae4f8 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -25,11 +25,18 @@ ..() -/area/proc/initialize() +/area/initialize() + . = ..() + return INITIALIZE_HINT_LATELOAD // Areas tradiationally are initialized AFTER other atoms. + +/area/LateInitialize() if(!requires_power || !apc) power_light = 0 power_equip = 0 power_environ = 0 + return INITIALIZE_HINT_LATELOAD + +/area/LateInitialize() power_change() // all machines set to current power level, also updates lighting icon /area/proc/get_contents() diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 2e178450a06..d23f53c23a6 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -24,13 +24,53 @@ //Detective Work, used for the duplicate data points kept in the scanners var/list/original_atom + // Track if we are already had initialize() called to prevent double-initialization. + var/initialized = FALSE -//atom creation method that preloads variables at creation -/atom/New() +/atom/New(loc, ...) // Don't call ..() unless /datum/New() ever exists + + // During dynamic mapload (reader.dm) this assigns the var overrides from the .dmm file + // Native BYOND maploading sets those vars before invoking New(), by doing this FIRST we come as close to that behavior as we can. if(use_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New() _preloader.load(src) + // Pass our arguments to InitAtom so they can be passed to initialize(), but replace 1st with if-we're-during-mapload. + var/do_initialize = SSatoms && SSatoms.initialized // Workaround our non-ideal initialization order: SSatoms may not exist yet. + //var/do_initialize = SSatoms.initialized + if(do_initialize > INITIALIZATION_INSSATOMS) + args[1] = (do_initialize == INITIALIZATION_INNEW_MAPLOAD) + if(SSatoms.InitAtom(src, args)) + // We were deleted. No sense continuing + return + + // Uncomment if anything ever uses the return value of SSatoms.InitializeAtoms ~Leshana + // If a map is being loaded, it might want to know about newly created objects so they can be handled. + // var/list/created = SSatoms.created_atoms + // if(created) + // created += src + +// Note: I removed "auto_init" feature (letting types disable auto-init) since it shouldn't be needed anymore. +// You can replicate the same by checking the value of the first parameter to initialize() ~Leshana + +// Called after New if the map is being loaded, with mapload = TRUE +// Called from base of New if the map is not being loaded, with mapload = FALSE +// This base must be called or derivatives must set initialized to TRUE +// Must not sleep! +// Other parameters are passed from New (excluding loc), this does not happen if mapload is TRUE +// Must return an Initialize hint. Defined in code/__defines/subsystems.dm +/atom/proc/initialize(mapload, ...) + if(QDELETED(src)) + crash_with("GC: -- [type] had initialize() called after qdel() --") + if(initialized) + crash_with("Warning: [src]([type]) initialized multiple times!") + initialized = TRUE + return INITIALIZE_HINT_NORMAL + +// Called after all object's normal initialize() if initialize() returns INITIALIZE_HINT_LATELOAD +/atom/proc/LateInitialize() + return + /atom/proc/reveal_blood() return diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 2dba31d5789..0cd09b8a576 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -18,15 +18,6 @@ var/icon_scale = 1 // Used to scale icons up or down in update_transform(). var/old_x = 0 var/old_y = 0 - var/auto_init = 1 - -/atom/movable/New() - ..() - if(auto_init && ticker && ticker.current_state == GAME_STATE_PLAYING) - if(SScreation && SScreation.map_loading) // If a map is being loaded, newly created objects need to wait for it to finish. - SScreation.atoms_needing_initialize += src - else - initialize() /atom/movable/Destroy() . = ..() @@ -47,10 +38,6 @@ pulledby.pulling = null pulledby = null -/atom/movable/proc/initialize() - if(QDELETED(src)) - crash_with("GC: -- [type] had initialize() called after qdel() --") - /atom/movable/Bump(var/atom/A, yes) if(src.throwing) src.throw_impact(A) diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 85ae7329892..15113de8ab5 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -132,8 +132,6 @@ var/global/datum/controller/gameticker/ticker callHook("roundstart") - shuttle_controller.setup_shuttle_docks() - // TODO - Leshana - Dear God Fix This. Fix all of this. Not just this line, this entire proc. This entire file! spawn(0)//Forking here so we dont have to wait for this to finish mode.post_setup() diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 3de29432654..ab7100ce332 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -181,6 +181,7 @@ RefreshParts() /obj/machinery/sleeper/initialize() + . = ..() update_icon() /obj/machinery/sleeper/process() diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 0f75d1efd0c..28557928bed 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -131,6 +131,7 @@ /obj/machinery/alarm/initialize() + . = ..() set_frequency(frequency) if(!master_is_operating()) elect_master() @@ -990,6 +991,7 @@ FIRE ALARM update_icon() /obj/machinery/firealarm/initialize() + . = ..() if(z in using_map.contact_levels) set_security_level(security_level? get_security_level() : "green") diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index ac1e21051ae..cb73da0c321 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -64,12 +64,14 @@ radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/air_sensor/initialize() - set_frequency(frequency) + . = ..() + if(frequency) + set_frequency(frequency) obj/machinery/air_sensor/Destroy() if(radio_controller) radio_controller.remove_object(src,frequency) - ..() + . = ..() /obj/machinery/computer/general_air_control icon_keyboard = "atmos_key" @@ -128,7 +130,9 @@ obj/machinery/computer/general_air_control/Destroy() radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/computer/general_air_control/initialize() - set_frequency(frequency) + . = ..() + if(frequency) + set_frequency(frequency) /obj/machinery/computer/general_air_control/large_tank_control icon = 'icons/obj/computer.dmi' diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index cb149dcc547..71755cc246c 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -12,17 +12,10 @@ use_power = 1 idle_power_usage = 15 -/obj/machinery/meter/New() - ..() - spawn(5) - target = select_target() - return 1 - /obj/machinery/meter/initialize() . = ..() if (!target) - spawn(5) - target = select_target() + target = select_target() /obj/machinery/meter/Destroy() pipes_on_turf.Cut() diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 2f4832047f9..2b8d069f51a 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -224,7 +224,7 @@ var/obj/item/device/radio/radio = null /obj/machinery/computer/security/telescreen/entertainment/initialize() - ..() + . = ..() radio = new(src) radio.listening = TRUE radio.broadcasting = FALSE diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 1e08ea6df24..4935a2a552e 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -17,7 +17,7 @@ /obj/machinery/computer/cloning/initialize() - ..() + . = ..() updatemodules() /obj/machinery/computer/cloning/Destroy() diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 71558867473..92f69a70e1e 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -20,6 +20,7 @@ ..() /obj/machinery/computer/initialize() + . = ..() power_change() update_icon() diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index e50ad8cb923..fd82940b6dc 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -76,7 +76,7 @@ if(!linkedServer) if(message_servers && message_servers.len > 0) linkedServer = message_servers[1] - return + return ..() /obj/machinery/computer/message_monitor/attack_hand(var/mob/living/user as mob) if(stat & (NOPOWER|BROKEN)) diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index d1c66b500d0..d3ab69b869b 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -20,7 +20,7 @@ /obj/machinery/computer/station_alert/initialize() alarm_monitor = new monitor_type(src) alarm_monitor.register_alarm(src, /obj/machinery/computer/station_alert/update_icon) - ..() + . = ..() /obj/machinery/computer/station_alert/Destroy() alarm_monitor.unregister_alarm(src) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index d3936ca7c07..11e9f0f94f3 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -299,7 +299,7 @@ return ..() /obj/machinery/cryopod/initialize() - ..() + . = ..() find_control_computer() @@ -346,8 +346,8 @@ // This function can not be undone; do not call this unless you are sure // Also make sure there is a valid control computer -/obj/machinery/cryopod/robot/despawn_occupant() - var/mob/living/silicon/robot/R = occupant +/obj/machinery/cryopod/robot/despawn_occupant(var/mob/to_despawn) + var/mob/living/silicon/robot/R = to_despawn if(!istype(R)) return ..() qdel(R.mmi) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 1dd74404dcb..7f140b4b7fc 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1177,6 +1177,7 @@ About the new airlock wires panel: if(A.closeOtherId == src.closeOtherId && A != src) src.closeOther = A break + . = ..() /obj/machinery/door/airlock/Destroy() qdel(wires) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 871f42eb7bf..1fd5eb34c63 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -130,18 +130,12 @@ obj/machinery/door/airlock/proc/set_frequency(new_frequency) obj/machinery/door/airlock/initialize() + . = ..() if(frequency) set_frequency(frequency) update_icon() - -obj/machinery/door/airlock/New() - ..() - - if(radio_controller) - set_frequency(frequency) - obj/machinery/door/airlock/Destroy() if(frequency && radio_controller) radio_controller.remove_object(src,frequency) @@ -210,13 +204,9 @@ obj/machinery/airlock_sensor/proc/set_frequency(new_frequency) radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) obj/machinery/airlock_sensor/initialize() + . = ..() set_frequency(frequency) -obj/machinery/airlock_sensor/New() - ..() - if(radio_controller) - set_frequency(frequency) - obj/machinery/airlock_sensor/Destroy() if(radio_controller) radio_controller.remove_object(src,frequency) @@ -280,15 +270,9 @@ obj/machinery/access_button/proc/set_frequency(new_frequency) obj/machinery/access_button/initialize() + . = ..() set_frequency(frequency) - -obj/machinery/access_button/New() - ..() - - if(radio_controller) - set_frequency(frequency) - obj/machinery/access_button/Destroy() if(radio_controller) radio_controller.remove_object(src, frequency) diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm index 8b6ddb58344..1c384a651dc 100644 --- a/code/game/machinery/doors/alarmlock.dm +++ b/code/game/machinery/doors/alarmlock.dm @@ -19,7 +19,7 @@ ..() /obj/machinery/door/airlock/alarmlock/initialize() - ..() + . = ..() radio_controller.remove_object(src, air_frequency) air_connection = radio_controller.add_object(src, air_frequency, RADIO_TO_AIRALARM) open() diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index 870b080c79f..54b5513cce3 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -30,7 +30,7 @@ block_air_zones = 0 /obj/machinery/door/blast/initialize() - ..() + . = ..() implicit_material = get_material_by_name("plasteel") /obj/machinery/door/blast/get_material() diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index fb909dee555..3a79a686b0c 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -13,7 +13,7 @@ var/tag_secure = 0 /obj/machinery/embedded_controller/radio/airlock/initialize() - ..() + . = ..() program = new/datum/computer/file/embedded_program/airlock(src) //Advanced airlock controller for when you want a more versatile airlock controller - useful for turning simple access control rooms into airlocks diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller.dm b/code/game/machinery/embedded_controller/airlock_docking_controller.dm index a78ac2be2d8..a63874235fb 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller.dm @@ -6,7 +6,7 @@ tag_secure = 1 /obj/machinery/embedded_controller/radio/airlock/docking_port/initialize() - ..() + . = ..() airlock_program = new/datum/computer/file/embedded_program/airlock/docking(src) docking_program = new/datum/computer/file/embedded_program/docking/airlock(src, airlock_program) program = docking_program diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm index 0cffb34dc6f..9fb1b34900b 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm @@ -10,7 +10,7 @@ var/datum/computer/file/embedded_program/docking/multi/docking_program /obj/machinery/embedded_controller/radio/docking_port_multi/initialize() - ..() + . = ..() docking_program = new/datum/computer/file/embedded_program/docking/multi(src) program = docking_program @@ -56,7 +56,7 @@ tag_secure = 1 /obj/machinery/embedded_controller/radio/airlock/docking_port_multi/initialize() - ..() + . = ..() airlock_program = new/datum/computer/file/embedded_program/airlock/multi_docking(src) program = airlock_program diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 5a6b77931fd..6833498b5f4 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -58,6 +58,7 @@ obj/machinery/embedded_controller/radio/Destroy() unacidable = 1 /obj/machinery/embedded_controller/radio/initialize() + . = ..() set_frequency(frequency) /obj/machinery/embedded_controller/radio/update_icon() diff --git a/code/game/machinery/embedded_controller/simple_docking_controller.dm b/code/game/machinery/embedded_controller/simple_docking_controller.dm index f1001ada553..ed8b435fb60 100644 --- a/code/game/machinery/embedded_controller/simple_docking_controller.dm +++ b/code/game/machinery/embedded_controller/simple_docking_controller.dm @@ -5,7 +5,7 @@ var/datum/computer/file/embedded_program/docking/simple/docking_program /obj/machinery/embedded_controller/radio/simple_docking_controller/initialize() - ..() + . = ..() docking_program = new/datum/computer/file/embedded_program/docking/simple(src) program = docking_program diff --git a/code/game/machinery/kitchen/icecream.dm b/code/game/machinery/kitchen/icecream.dm index 448b252fd49..fab6319e260 100644 --- a/code/game/machinery/kitchen/icecream.dm +++ b/code/game/machinery/kitchen/icecream.dm @@ -52,7 +52,7 @@ return "vanilla" /obj/machinery/icecream_vat/initialize() - ..() + . = ..() create_reagents(100) while(product_types.len < 6) product_types.Add(5) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 2e881f65834..c616d1ee5b0 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -118,10 +118,13 @@ Class Procs: ..(l) if(d) set_dir(d) - START_MACHINE_PROCESSING(src) if(circuit) circuit = new circuit(src) +/obj/machinery/initialize() + . = ..() + START_MACHINE_PROCESSING(src) + /obj/machinery/Destroy() STOP_MACHINE_PROCESSING(src) if(component_parts) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 527b5f1283f..9a02fddfd21 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -61,7 +61,7 @@ // register for radio system /obj/machinery/status_display/initialize() - ..() + . = ..() if(radio_controller) radio_controller.add_object(src, frequency) diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 7621b1f5487..8f576b5d00e 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -131,6 +131,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() else for(var/obj/machinery/telecomms/T in telecomms_list) add_link(T) + . = ..() /obj/machinery/telecomms/Destroy() telecomms_list -= src diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 9353bb888c0..7544c91bfe5 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -18,7 +18,7 @@ return /obj/machinery/computer/teleporter/initialize() - ..() + . = ..() var/obj/machinery/teleport/station/station var/obj/machinery/teleport/hub/hub diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index 4f33f1703f3..238030e3acd 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -62,7 +62,7 @@ control_area = null power_change() //Checks power and initial settings - return + . = ..() /obj/machinery/turretid/proc/isLocked(mob/user) if(ailock && issilicon(user)) diff --git a/code/game/machinery/vr_console.dm b/code/game/machinery/vr_console.dm index b013fb1dca3..67c8719e8d3 100644 --- a/code/game/machinery/vr_console.dm +++ b/code/game/machinery/vr_console.dm @@ -24,6 +24,7 @@ RefreshParts() /obj/machinery/vr_sleeper/initialize() + . = ..() update_icon() /obj/machinery/vr_sleeper/process() diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 8914631ad0a..3bbb9f34b4b 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -40,6 +40,7 @@ /obj/machinery/mecha_part_fabricator/initialize() update_categories() + . = ..() /obj/machinery/mecha_part_fabricator/process() ..() diff --git a/code/game/mecha/mech_prosthetics.dm b/code/game/mecha/mech_prosthetics.dm index a151d0638f1..45b9853881b 100644 --- a/code/game/mecha/mech_prosthetics.dm +++ b/code/game/mecha/mech_prosthetics.dm @@ -40,6 +40,7 @@ return /obj/machinery/pros_fabricator/initialize() + . = ..() manufacturer = basic_robolimb.company update_categories() diff --git a/code/game/mecha/mech_sensor.dm b/code/game/mecha/mech_sensor.dm index a00e9d6594a..87a9863ee8c 100644 --- a/code/game/mecha/mech_sensor.dm +++ b/code/game/mecha/mech_sensor.dm @@ -70,6 +70,7 @@ icon_state = "airlock_sensor_off" /obj/machinery/mech_sensor/initialize() + . = ..() set_frequency(frequency) /obj/machinery/mech_sensor/proc/set_frequency(new_frequency) diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm index 027c9f84afc..e112f7a232a 100644 --- a/code/game/mecha/medical/medical.dm +++ b/code/game/mecha/medical/medical.dm @@ -1,9 +1,8 @@ /obj/mecha/medical/initialize() - ..() + . = ..() var/turf/T = get_turf(src) if(isPlayerLevel(T.z)) new /obj/item/mecha_parts/mecha_tracking(src) - return /obj/mecha/medical/mechturn(direction) diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm index 8ba99ad1c56..c890746e5b0 100644 --- a/code/game/mecha/working/working.dm +++ b/code/game/mecha/working/working.dm @@ -4,11 +4,10 @@ var/cargo_capacity = 5 /obj/mecha/working/initialize() - ..() + . = ..() var/turf/T = get_turf(src) if(isPlayerLevel(T.z)) new /obj/item/mecha_parts/mecha_tracking(src) - return /obj/mecha/working/Destroy() for(var/mob/M in src) diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index 0d00d328303..695f8d3b792 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -110,6 +110,7 @@ pixel_y = 0 /obj/structure/sign/poster/initialize() + . = ..() if (poster_type) var/path = text2path(poster_type) var/datum/poster/design = new path diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index a3b3ab81cbe..e92268f4da5 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -104,7 +104,7 @@ steam.start() -- spawns the effect T.hotspot_expose(1000,100) /obj/effect/effect/sparks/initialize() - ..() + . = ..() schedule_task_in(5 SECONDS, /proc/qdel, list(src)) /obj/effect/effect/sparks/Destroy() diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index b8cb8006d29..50230eba170 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -84,9 +84,9 @@ delete_me = 1 /obj/effect/landmark/initialize() - ..() + . = ..() if(delete_me) - qdel(src) + return INITIALIZE_HINT_QDEL /obj/effect/landmark/Destroy(var/force = FALSE) if(delete_me || force) diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index 48026296d77..349400226a1 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -34,6 +34,7 @@ pixel_y = -32 /obj/effect/temporary_effect/cleave_attack/initialize() // Makes the slash fade smoothly. When completely transparent it should qdel itself. + . = ..() animate(src, alpha = 0, time = time_to_die - 1) /obj/effect/temporary_effect/shuttle_landing @@ -44,4 +45,4 @@ /obj/effect/temporary_effect/shuttle_landing/initialize() flick("shuttle_warning", src) // flick() forces the animation to always begin at the start. - ..() \ No newline at end of file + . = ..() \ No newline at end of file diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 5fec97b4f03..a58241ada25 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -129,6 +129,7 @@ var/landmark_id = null /obj/effect/step_trigger/teleporter/landmark/initialize() + . = ..() for(var/obj/effect/landmark/teleport_mark/mark in tele_landmarks) if(mark.landmark_id == landmark_id) the_landmark = mark @@ -185,10 +186,11 @@ var/global/list/tele_landmarks = list() // Terrible, but the alternative is loop return A.forceMove(T) - if(isliving(A)) // Someday, implement parachutes. For now, just turbomurder whoever falls. + // Living things should probably be logged when they fall... + if(isliving(A)) message_admins("\The [A] fell out of the sky.") - var/mob/living/L = A - L.fall_impact(T, 42, 90, FALSE, TRUE) //You will not be defibbed from this. + // ... because they're probably going to die from it. + A.fall_impact(T, 42, 90, FALSE, TRUE) //You will not be defibbed from this. else message_admins("ERROR: planetary_fall step trigger lacks a planet to fall onto.") return diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index c53ba712db4..b77d73a262b 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -110,7 +110,7 @@ var/list/civilian_cartridges = list( /obj/item/weapon/cartridge/security/initialize() radio = new /obj/item/radio/integrated/beepsky(src) - ..() + . = ..() /obj/item/weapon/cartridge/detective name = "\improper D.E.T.E.C.T. cartridge" @@ -166,7 +166,7 @@ var/list/civilian_cartridges = list( /obj/item/weapon/cartridge/signal/initialize() radio = new /obj/item/radio/integrated/signal(src) - ..() + . = ..() /obj/item/weapon/cartridge/quartermaster name = "\improper Space Parts & Space Vendors cartridge" @@ -200,7 +200,7 @@ var/list/civilian_cartridges = list( /obj/item/weapon/cartridge/hos/initialize() radio = new /obj/item/radio/integrated/beepsky(src) - ..() + . = ..() /obj/item/weapon/cartridge/ce name = "\improper Power-On DELUXE" @@ -225,7 +225,7 @@ var/list/civilian_cartridges = list( /obj/item/weapon/cartridge/rd/initialize() radio = new /obj/item/radio/integrated/signal(src) - ..() + . = ..() /obj/item/weapon/cartridge/captain name = "\improper Value-PAK cartridge" diff --git a/code/game/objects/items/devices/communicator/phone.dm b/code/game/objects/items/devices/communicator/phone.dm index d120bac21a9..8c93b6187d6 100644 --- a/code/game/objects/items/devices/communicator/phone.dm +++ b/code/game/objects/items/devices/communicator/phone.dm @@ -42,7 +42,7 @@ comm.visible_message("\icon[src] Connecting to [src].") to_chat(user, "\icon[src] Attempting to call [comm].") sleep(10) - to_chat(user, "\icon[src] Dialing internally from [station_name()], Kara Subsystem, [system_name()].") + to_chat(user, "\icon[src] Dialing internally from [station_name()], [system_name()].") sleep(20) //If they don't have an exonet something is very wrong and we want a runtime. to_chat(user, "\icon[src] Connection re-routed to [comm] at [comm.exonet.address].") sleep(40) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 151b762d7cf..6d512981ae0 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -18,7 +18,7 @@ var/power_use = 1 /obj/item/device/flashlight/initialize() - ..() + . = ..() update_icon() /obj/item/device/flashlight/New() diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 4ae0ebc4b0c..e4932ff0d2c 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -18,6 +18,7 @@ var/list/GPS_list = list() var/can_hide_signal = FALSE // If it can toggle the above var. /obj/item/device/gps/initialize() + . = ..() GPS_list += src name = "global positioning system ([gps_tag])" update_icon() diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 2b40faac668..3b703f703b9 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -81,7 +81,7 @@ ks1type = /obj/item/device/encryptionkey/raider /obj/item/device/radio/headset/raider/initialize() - ..() + . = ..() set_frequency(RAID_FREQ) /obj/item/device/radio/headset/binary diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 260c32cd57d..b6f62f27dcc 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -80,7 +80,7 @@ var/global/list/default_medbay_channels = list( /obj/item/device/radio/initialize() - + . = ..() if(frequency < RADIO_LOW_FREQ || frequency > RADIO_HIGH_FREQ) frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) set_frequency(frequency) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 4187cfc422f..ae255d2f7b9 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -266,22 +266,26 @@ REAGENT SCANNER if(0) to_chat(usr, "The scanner will now perform a basic analysis.") -/obj/item/device/healthanalyzer/improved //reports bone fractures, IB, quantity of beneficial reagents in stomach; also regular health analyzer stuff +/obj/item/device/healthanalyzer/advanced //reports bone fractures, IB, quantity of beneficial reagents in stomach; also regular health analyzer stuff name = "advanced health analyzer" desc = "A miracle of medical technology, this handheld scanner can produce an accurate and specific report of a patient's biosigns." advscan = 1 origin_tech = list(TECH_MAGNET = 5, TECH_BIO = 6) - icon_state = "advhealth" + icon_state = "health1" -/obj/item/device/healthanalyzer/advanced //reports all of the above, as well as radiation severity and minor brain damage - name = "advanced health analyzer" +/obj/item/device/healthanalyzer/enhanced //reports all of the above, as well as radiation severity and minor brain damage + name = "enhanced health analyzer" + desc = "An even more advanced handheld health scanner, complete with a full biosign monitor and on-board radiation and neurological analysis suites." advscan = 2 - icon_state = "advhealth" + origin_tech = list(TECH_MAGNET = 6, TECH_BIO = 7) + icon_state = "health2" -/obj/item/device/healthanalyzer/enhanced //reports all of the above, as well as name and quantity of nonmed reagents in stomach +/obj/item/device/healthanalyzer/phasic //reports all of the above, as well as name and quantity of nonmed reagents in stomach name = "phasic health analyzer" + desc = "Possibly the most advanced health analyzer to ever have existed, utilising bluespace technology to determine almost everything worth knowing about a patient." advscan = 3 - icon_state = "advhealth" + origin_tech = list(TECH_MAGNET = 7, TECH_BIO = 8) + icon_state = "health3" /obj/item/device/analyzer name = "analyzer" diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm index b449a6ce3b6..be2b4c18e7f 100644 --- a/code/game/objects/items/devices/tvcamera.dm +++ b/code/game/objects/items/devices/tvcamera.dm @@ -27,7 +27,7 @@ to_chat(usr, "Audio feed is [radio.broadcasting ? "on" : "off"]") /obj/item/device/tvcamera/initialize() - ..() + . = ..() camera = new(src) camera.c_tag = channel camera.status = FALSE diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index 9c6fbd911f1..f2528f57862 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -100,6 +100,7 @@ force_divisor = 0.3 // 18 when hardness 60 (steel) attack_verb = list("slashed", "chopped", "gouged", "ripped", "cut") var/should_cleave = TRUE //Now hatchets inherit from the machete, and thus knives. Tables turned. + slot_flags = SLOT_BELT // This cannot go into afterattack since some mobs delete themselves upon dying. /obj/item/weapon/material/knife/machete/pre_attack(var/mob/living/target, var/mob/living/user) diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index ce0ee6b5e7c..a355be251ae 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -12,7 +12,7 @@ var/apply_tape = FALSE /obj/item/taperoll/initialize() - ..() + . = ..() if(apply_tape) var/turf/T = get_turf(src) if(!T) @@ -20,7 +20,7 @@ var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in T if(airlock) afterattack(airlock, null, TRUE) - qdel(src) + return INITIALIZE_HINT_QDEL var/list/image/hazard_overlays diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 24ba099e8f9..43b7c9e22b9 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -128,6 +128,7 @@ new /obj/item/weapon/storage/pill_bottle/spaceacillin(src) new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting(src) new /obj/item/stack/medical/splint(src) + new /obj/item/device/healthanalyzer/advanced(src) return /obj/item/weapon/storage/firstaid/surgery @@ -149,7 +150,7 @@ new /obj/item/weapon/surgical/bonegel(src) new /obj/item/weapon/surgical/FixOVein(src) new /obj/item/stack/medical/advanced/bruise_pack(src) - new /obj/item/device/healthanalyzer/advanced(src) + new /obj/item/device/healthanalyzer/enhanced(src) return /obj/item/weapon/storage/firstaid/clotting diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index ec3f3e26310..21bebfa399a 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -68,26 +68,29 @@ item_state_slots = list(slot_r_hand_str = "toolbox_syndi", slot_l_hand_str = "toolbox_syndi") origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1) force = 14 + var/powertools = FALSE + +/obj/item/weapon/storage/toolbox/syndicate/powertools + powertools = TRUE /obj/item/weapon/storage/toolbox/syndicate/New() // This is found in maint, so it should have the basics, plus some gloves. - ..() - new /obj/item/clothing/gloves/yellow(src) - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/wrench(src) - new /obj/item/weapon/weldingtool(src) - new /obj/item/weapon/crowbar(src) - new /obj/item/weapon/wirecutters(src) - new /obj/item/device/multitool(src) - -/obj/item/weapon/storage/toolbox/syndicate/powertools/New() // Available in the uplink and is the 'real' syndie toolbox. - // ..() isn't called or else this box would contain the basic tools, power tools, and duplicate gloves. - new /obj/item/clothing/gloves/yellow(src) - new /obj/item/weapon/screwdriver/power(src) - new /obj/item/weapon/weldingtool/experimental(src) - new /obj/item/weapon/crowbar/power(src) - new /obj/item/device/multitool(src) - new /obj/item/stack/cable_coil/random(src,30) - new /obj/item/device/analyzer(src) + ..() //all storage items need this to work properly! + if(powertools) + new /obj/item/clothing/gloves/yellow(src) + new /obj/item/weapon/screwdriver/power(src) + new /obj/item/weapon/weldingtool/experimental(src) + new /obj/item/weapon/crowbar/power(src) + new /obj/item/device/multitool(src) + new /obj/item/stack/cable_coil/random(src,30) + new /obj/item/device/analyzer(src) + else + new /obj/item/clothing/gloves/yellow(src) + new /obj/item/weapon/screwdriver(src) + new /obj/item/weapon/wrench(src) + new /obj/item/weapon/weldingtool(src) + new /obj/item/weapon/crowbar(src) + new /obj/item/weapon/wirecutters(src) + new /obj/item/device/multitool(src) /obj/item/weapon/storage/toolbox/lunchbox max_storage_space = ITEMSIZE_COST_SMALL * 4 //slightly smaller than a toolbox diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 31483b48f0e..d1b30da151d 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -974,7 +974,7 @@ var/list/multi_point_spawns var/weight // Probability weight for this spawn point /obj/random_multi/initialize() - ..() + . = ..() weight = max(1, round(weight)) if(!multi_point_spawns) diff --git a/code/game/objects/structures/alien_props.dm b/code/game/objects/structures/alien_props.dm index cb791ec54b8..eb8ae9d19f3 100644 --- a/code/game/objects/structures/alien_props.dm +++ b/code/game/objects/structures/alien_props.dm @@ -69,7 +69,7 @@ var/static/list/possible_tech = list(TECH_MATERIAL, TECH_ENGINEERING, TECH_PHORON, TECH_POWER, TECH_BIO, TECH_COMBAT, TECH_MAGNET, TECH_DATA) /obj/item/prop/alien/junk/initialize() - ..() + . = ..() icon_state = pick(possible_states) var/list/techs = possible_tech.Copy() origin_tech = list() diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm index 9bceee8f6e3..d9f3340bdd9 100644 --- a/code/game/objects/structures/catwalk.dm +++ b/code/game/objects/structures/catwalk.dm @@ -11,12 +11,13 @@ anchored = 1.0 /obj/structure/catwalk/initialize() + . = ..() for(var/obj/structure/catwalk/O in range(1)) O.update_icon() for(var/obj/structure/catwalk/C in get_turf(src)) if(C != src) warning("Duplicate [type] in [loc] ([x], [y], [z])") - qdel(C) + return INITIALIZE_HINT_QDEL update_icon() /obj/structure/catwalk/Destroy() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 690bba95f89..7e922e97bb1 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -24,7 +24,7 @@ var/list/will_contain /obj/structure/closet/initialize() - ..() + . = ..() if(will_contain) create_objects_in_loc(src, will_contain) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index c0d27cad1cf..c4e9ece866d 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -6,7 +6,7 @@ density = 1 /obj/structure/largecrate/initialize() - ..() + . = ..() for(var/obj/I in src.loc) if(I.density || I.anchored || I == src || !I.simulated) continue diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index e9aa2672762..c95b5af2c93 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -306,7 +306,7 @@ /obj/structure/flora/sif/subterranean/initialize() icon_state = "[initial(icon_state)][rand(1,2)]" - ..() + . = ..() /obj/structure/flora/sif/eyes name = "mysterious bulbs" @@ -315,4 +315,4 @@ /obj/structure/flora/sif/eyes/initialize() icon_state = "[initial(icon_state)][rand(1,3)]" - ..() \ No newline at end of file + . = ..() \ No newline at end of file diff --git a/code/game/objects/structures/ghost_pods/ghost_pods.dm b/code/game/objects/structures/ghost_pods/ghost_pods.dm index 9eeefeee618..02c5f304f36 100644 --- a/code/game/objects/structures/ghost_pods/ghost_pods.dm +++ b/code/game/objects/structures/ghost_pods/ghost_pods.dm @@ -55,7 +55,7 @@ var/delay_to_try_again = 20 MINUTES // How long to wait if first attempt fails. Set to 0 to never try again. /obj/structure/ghost_pod/automatic/initialize() - ..() + . = ..() spawn(delay_to_self_open) if(src) trigger() diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index ac231eb947a..c042b8fc9a6 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -10,15 +10,15 @@ // flags = CONDUCT /obj/structure/lattice/initialize() - ..() + . = ..() if(!(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/open) || istype(src.loc, /turf/simulated/mineral))) - qdel(src) - return + return INITIALIZE_HINT_QDEL for(var/obj/structure/lattice/LAT in src.loc) if(LAT != src) - qdel(LAT) + crash_with("Found multiple lattices at '[log_info_line(loc)]'") + return INITIALIZE_HINT_QDEL icon = 'icons/obj/smoothlattice.dmi' icon_state = "latticeblank" updateOverlays() diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm index de9a8036242..5a655b66738 100644 --- a/code/game/objects/structures/loot_piles.dm +++ b/code/game/objects/structures/loot_piles.dm @@ -119,7 +119,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh /obj/structure/loot_pile/maint/initialize() icon_state = pick(icon_states_to_use) - ..() + . = ..() // Has large amounts of possible items, most of which may or may not be useful. /obj/structure/loot_pile/maint/junk diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 75052f7b86c..0a26e568ecd 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -26,6 +26,7 @@ I.loc = src notices++ icon_state = "nboard0[notices]" + . = ..() //attaching papers!! /obj/structure/noticeboard/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob) diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index 1acafd5726b..27bb902aea8 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -24,7 +24,7 @@ verbs += /obj/structure/proc/climb_on /obj/structure/railing/initialize() - ..() + . = ..() if(src.anchored) update_icon(0) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index b2c5e93cb84..7f78e8f0e71 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -31,13 +31,13 @@ FLOOR SAFES /obj/structure/safe/initialize() + . = ..() for(var/obj/item/I in loc) if(space >= maxspace) return if(I.w_class + space <= maxspace) space += I.w_class - I.loc = src - + I.forceMove(src) /obj/structure/safe/proc/check_unlocked(mob/user as mob, canhear) if(user && canhear) @@ -175,7 +175,7 @@ obj/structure/safe/ex_act(severity) layer = 2.5 /obj/structure/safe/floor/initialize() - ..() + . = ..() var/turf/T = loc if(istype(T) && !T.is_plating()) hide(1) diff --git a/code/game/objects/structures/window_spawner.dm b/code/game/objects/structures/window_spawner.dm index d0db6e7f08b..e2714be7571 100644 --- a/code/game/objects/structures/window_spawner.dm +++ b/code/game/objects/structures/window_spawner.dm @@ -26,7 +26,7 @@ return FALSE /obj/effect/wingrille_spawn/initialize() - ..() + . = ..() if(!win_path) return if(ticker && ticker.current_state < GAME_STATE_PLAYING) diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index 51ec43e32f1..c76967545e4 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -18,7 +18,7 @@ else return ..() /obj/structure/shuttle/window/initialize() - ..() + . = ..() auto_join() /obj/structure/shuttle/window/proc/auto_join() diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index 9c1968fd3cc..7543d4037ac 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -21,8 +21,8 @@ var/list/floor_decals = list() add_to_turf_decals() var/turf/T = get_turf(src) T.apply_decals() - qdel(src) - return + initialized = TRUE + return INITIALIZE_HINT_QDEL /obj/effect/floor_decal/reset name = "reset marker" @@ -32,8 +32,8 @@ var/list/floor_decals = list() if(T.decals && T.decals.len) T.decals.Cut() T.update_icon() - qdel(src) - return + initialized = TRUE + return INITIALIZE_HINT_QDEL /obj/effect/floor_decal/corner icon_state = "corner_white" diff --git a/code/game/turfs/flooring/turf_overlay_holder.dm b/code/game/turfs/flooring/turf_overlay_holder.dm index a0326b8240f..c12f727a0b8 100644 --- a/code/game/turfs/flooring/turf_overlay_holder.dm +++ b/code/game/turfs/flooring/turf_overlay_holder.dm @@ -16,7 +16,12 @@ var/global/floor_decals_initialized = FALSE icon = null icon_state = null mouse_opacity = 0 - auto_init = 0 + // auto_init = 0 + +/atom/movable/turf_overlay_holder/initialize() + // doesn't need special init + initialized = TRUE + return INITIALIZE_HINT_NORMAL /atom/movable/turf_overlay_holder/New(var/atom/newloc) ..() diff --git a/code/game/turfs/initialization/init.dm b/code/game/turfs/initialization/init.dm index c1e8be47d12..6c2d8ead295 100644 --- a/code/game/turfs/initialization/init.dm +++ b/code/game/turfs/initialization/init.dm @@ -1,16 +1,11 @@ -/datum/turf_initializer/proc/initialize(var/turf/T) +/datum/turf_initializer/proc/InitializeTurf(var/turf/T) return /area var/datum/turf_initializer/turf_initializer = null -/area/initialize() - ..() - var/list/minerals = list() - for(var/turf/simulated/T in src) - if(T.initialize()) - minerals += T - if(turf_initializer) - turf_initializer.initialize(T) - for(var/turf/simulated/mineral/M in minerals) - M.MineralSpread() +/area/LateInitialize() + . = ..() + if(turf_initializer) + for(var/turf/simulated/T in src) + turf_initializer.InitializeTurf(T) diff --git a/code/game/turfs/initialization/maintenance.dm b/code/game/turfs/initialization/maintenance.dm index 558f6385882..7347ec47db8 100644 --- a/code/game/turfs/initialization/maintenance.dm +++ b/code/game/turfs/initialization/maintenance.dm @@ -1,4 +1,4 @@ -/datum/turf_initializer/maintenance/initialize(var/turf/simulated/T) +/datum/turf_initializer/maintenance/InitializeTurf(var/turf/simulated/T) if(T.density) return // Quick and dirty check to avoid placing things inside windows diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index aac979ff5c7..789ec20a178 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -59,9 +59,6 @@ holy = 1 levelupdate() -/turf/simulated/proc/initialize() - return - /turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor="#A10808") var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src if(!tracks) diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index 8789ddef80c..07c686df993 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -194,7 +194,7 @@ block_tele = TRUE /turf/simulated/shuttle/floor/alien/initialize() - ..() + . = ..() icon_state = "alienpod[rand(1, 9)]" /turf/simulated/shuttle/floor/alienplating diff --git a/code/game/turfs/simulated/outdoors/grass.dm b/code/game/turfs/simulated/outdoors/grass.dm index d7926b526d2..218291815f2 100644 --- a/code/game/turfs/simulated/outdoors/grass.dm +++ b/code/game/turfs/simulated/outdoors/grass.dm @@ -32,7 +32,7 @@ var/list/grass_types = list( /turf/simulated/floor/outdoors/grass/sif/initialize() if(tree_chance && prob(tree_chance)) new /obj/structure/flora/tree/sif(src) - ..() + . = ..() /turf/simulated/floor/outdoors/grass/initialize() if(prob(50)) @@ -42,7 +42,7 @@ var/list/grass_types = list( if(grass_chance && prob(grass_chance)) var/grass_type = pick(grass_types) new grass_type(src) - ..() + . = ..() /turf/simulated/floor/outdoors/grass/forest name = "thick grass" diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm index 941aa5abc90..86e6b117bba 100644 --- a/code/game/turfs/simulated/outdoors/outdoors.dm +++ b/code/game/turfs/simulated/outdoors/outdoors.dm @@ -22,7 +22,7 @@ var/list/outdoor_turfs = list() /turf/simulated/floor/outdoors/initialize() update_icon() - ..() + . = ..() /turf/simulated/floor/New() if(outdoors) diff --git a/code/game/turfs/simulated/outdoors/sky.dm b/code/game/turfs/simulated/outdoors/sky.dm index c7209f9fb37..c329fc2e4d1 100644 --- a/code/game/turfs/simulated/outdoors/sky.dm +++ b/code/game/turfs/simulated/outdoors/sky.dm @@ -13,6 +13,7 @@ phoron = 0 /turf/simulated/sky/initialize() + . = ..() outdoor_turfs.Add(src) set_light(2, 2, "#FFFFFF") diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index c1378228604..930cfb792bd 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -132,7 +132,7 @@ name = true_name /turf/simulated/shuttle/wall/initialize() - ..() + . = ..() if(join_group) src.auto_join() @@ -213,7 +213,7 @@ stripe_color = "#00FF00" /turf/simulated/shuttle/wall/voidcraft/initialize() - ..() + . = ..() update_icon() /turf/simulated/shuttle/wall/voidcraft/update_icon() diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm index e766b1bba39..a47578f1029 100644 --- a/code/game/turfs/simulated/water.dm +++ b/code/game/turfs/simulated/water.dm @@ -11,11 +11,8 @@ outdoors = TRUE var/depth = 1 // Higher numbers indicates deeper water. -/turf/simulated/floor/water/New() - update_icon() - ..() - /turf/simulated/floor/water/initialize() + . = ..() update_icon() /turf/simulated/floor/water/update_icon() diff --git a/code/game/turfs/unsimulated.dm b/code/game/turfs/unsimulated.dm index bd85fe8be81..cbf492b0814 100644 --- a/code/game/turfs/unsimulated.dm +++ b/code/game/turfs/unsimulated.dm @@ -1,4 +1,5 @@ /turf/unsimulated name = "command" oxygen = MOLES_O2STANDARD - nitrogen = MOLES_N2STANDARD \ No newline at end of file + nitrogen = MOLES_N2STANDARD + initialized = TRUE // Don't call init on unsimulated turfs (at least not yet) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 25325541930..721a959c354 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -101,7 +101,8 @@ var/list/admin_verbs_admin = list( /client/proc/toggle_attack_logs, /datum/admins/proc/paralyze_mob, /client/proc/fixatmos, - /datum/admins/proc/sendFax + /datum/admins/proc/sendFax, + /client/proc/despawn_player ) var/list/admin_verbs_ban = list( diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index c2cf55ab00e..81c709f6d88 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1864,6 +1864,17 @@ show_player_panel(M) + else if(href_list["cryoplayer"]) + if(!check_rights(R_ADMIN)) return + + var/mob/M = locate(href_list["cryoplayer"]) + if(!istype(M)) + to_chat(usr,"Mob doesn't exist!") + return + + var/client/C = usr.client + C.despawn_player(M) + // player info stuff if(href_list["add_player_info"]) diff --git a/code/modules/admin/verbs/map_template_loadverb.dm b/code/modules/admin/verbs/map_template_loadverb.dm index 25fda4bfb35..7fde6c58e13 100644 --- a/code/modules/admin/verbs/map_template_loadverb.dm +++ b/code/modules/admin/verbs/map_template_loadverb.dm @@ -41,7 +41,12 @@ if(!map) return template = map_templates[map] - + + if(template.width > world.maxx || template.height > world.maxy) + if(alert(usr,"This template is larger than the existing z-levels. It will EXPAND ALL Z-LEVELS to match the size of the template. This may cause chaos. Are you sure you want to do this?","DANGER!!!","Cancel","Yes") == "Cancel") + to_chat(usr,"Template placement aborted.") + return + if(alert(usr,"Confirm map load.", "Template Confirm","No","Yes") == "Yes") if(template.load_new_z()) message_admins("[key_name_admin(usr)] has placed a map template ([template.name]) on Z level [world.maxz].") diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 961dbdcdfb0..9536f830fbe 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -935,3 +935,63 @@ Traitors and the like can also be revived with the previous role mostly intact. usr << "Random events disabled" message_admins("Admin [key_name_admin(usr)] has disabled random events.", 1) feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/despawn_player(var/mob/M in living_mob_list) + set name = "Cryo Player" + set category = "Admin" + set desc = "Removes a player from the round as if they'd cryo'd." + set popup_menu = FALSE + + if(!check_rights(R_ADMIN)) + return + + if(!M) + return + + var/confirm = alert("Are you sure you want to cryo [M]?","Confirmation","No","Yes") + if(confirm == "No") + return + + var/list/human_cryopods = list() + var/list/robot_cryopods = list() + + for(var/obj/machinery/cryopod/CP in machines) + if(!CP.control_computer) + continue //Broken pod w/o computer, move on. + + var/listname = "[CP.name] ([CP.x],[CP.y],[CP.z])" + if(istype(CP,/obj/machinery/cryopod/robot)) + robot_cryopods[listname] = CP + else + human_cryopods[listname] = CP + + //Gotta log this up here before they get ghostized and lose their key or anything. + log_and_message_admins("[key_name(src)] admin cryo'd [key_name(M)].") + feedback_add_details("admin_verb","ACRYO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + if(ishuman(M)) + var/obj/machinery/cryopod/CP = human_cryopods[input(usr,"Select a cryopod to use","Cryopod Choice") as null|anything in human_cryopods] + if(!CP) + return + M.ghostize() + CP.despawn_occupant(M) + return + + else if(issilicon(M)) + if(isAI(M)) + var/mob/living/silicon/ai/ai = M + empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(ai.loc) + global_announcer.autosay("[ai] has been moved to intelligence storage.", "Artificial Intelligence Oversight") + ai.clear_client() + return + else + var/obj/machinery/cryopod/robot/CP = robot_cryopods[input(usr,"Select a cryopod to use","Cryopod Choice") as null|anything in robot_cryopods] + if(!CP) + return + M.ghostize() + CP.despawn_occupant(M) + return + + else if(isliving(M)) + M.ghostize() + qdel(M) //Bye diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index e386590ec77..67bac3b7732 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -24,9 +24,12 @@ var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access. var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID var/species = "Human" + delete_me = TRUE /obj/effect/landmark/corpse/initialize() + ..() createCorpse() + return INITIALIZE_HINT_QDEL /obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it. var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc) @@ -76,7 +79,6 @@ W.assignment = corpseidjob M.set_id_info(W) M.equip_to_slot_or_del(W, slot_wear_id) - qdel(src) diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index d1070e5c321..41204baa721 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -10,9 +10,9 @@ /obj/machinery/gateway/initialize() update_icon() - if(dir == 2) + if(dir == SOUTH) density = 0 - + . = ..() /obj/machinery/gateway/update_icon() if(active) @@ -38,7 +38,7 @@ update_icon() wait = world.time + config.gateway_delay //+ thirty minutes default awaygate = locate(/obj/machinery/gateway/centeraway) - + . = ..() /obj/machinery/gateway/centerstation/update_icon() if(active) @@ -152,6 +152,7 @@ obj/machinery/gateway/centerstation/process() /obj/machinery/gateway/centeraway/initialize() update_icon() stationgate = locate(/obj/machinery/gateway/centerstation) + . = ..() /obj/machinery/gateway/centeraway/update_icon() diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm index 5aeb9651d2b..6ca57138b63 100644 --- a/code/modules/awaymissions/loot.dm +++ b/code/modules/awaymissions/loot.dm @@ -6,6 +6,7 @@ var/loot = "" //a list of possible items to spawn- a string of paths /obj/effect/spawner/lootdrop/initialize() + ..() var/list/things = params2list(loot) if(things && things.len) @@ -21,4 +22,4 @@ continue new loot_path(get_turf(src)) - qdel(src) + return INITIALIZE_HINT_QDEL diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 9b884961193..5ecef18d7d6 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -782,7 +782,7 @@ obj/item/clothing/suit/storage/toggle/peacoat hooded = TRUE hoodtype = /obj/item/clothing/head/hood/explorer siemens_coefficient = 0.9 - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50) // Inferior to sec vests in bullet/laser but better for environmental protection. + armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35) // Inferior to sec vests in bullet/laser but better for environmental protection. allowed = list( /obj/item/device/flashlight, /obj/item/weapon/gun, @@ -807,7 +807,7 @@ obj/item/clothing/suit/storage/toggle/peacoat flags_inv = HIDEEARS | BLOCKHAIR min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50) + armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35) /obj/item/clothing/suit/varsity name = "black varsity jacket" diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm index b597837d17b..768628f8fb4 100644 --- a/code/modules/events/rogue_drones.dm +++ b/code/modules/events/rogue_drones.dm @@ -26,13 +26,13 @@ var/rng = rand(1,5) switch(rng) if(1) - msg = "A combat drone wing operating near various asteroids in the Kara subsystem has failed to return from a anti-piracy sweep. If any are sighted, \ + msg = "A combat drone wing operating in close orbit above Sif has failed to return from a anti-piracy sweep. If any are sighted, \ approach with caution." if(2) - msg = "Contact has been lost with a combat drone wing operating out in the asteroid field near Kara. If any are sighted in the area, approach with \ + msg = "Contact has been lost with a combat drone wing in Sif orbit. If any are sighted in the area, approach with \ caution." if(3) - msg = "Unidentified hackers have targeted a combat drone wing deployed in the Kara subsystem. If any are sighted in the area, approach with caution." + msg = "Unidentified hackers have targeted a combat drone wing deployed around Sif. If any are sighted in the area, approach with caution." if(4) msg = "A passing derelict ship's drone defense systems have just activated. If any are sighted in the area, use caution." if(5) diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index 719373f5d36..1b5318868ba 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -13,10 +13,7 @@ var/global/list/plant_seed_sprites = list() /obj/item/seeds/initialize() update_seed() - ..() - -/obj/item/seeds/New() - ..() + . = ..() //Grabs the appropriate seed datum from the global list. /obj/item/seeds/proc/update_seed() @@ -79,7 +76,7 @@ var/global/list/plant_seed_sprites = list() /obj/item/seeds/random/initialize() seed = plant_controller.create_random_seed() seed_type = seed.name - update_seed() + . = ..() /obj/item/seeds/replicapod seed_type = "diona" diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index 9d612f508dd..ea7216dfd3f 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -27,7 +27,7 @@ use_power = 1 idle_power_usage = 100 - var/initialized = 0 // Map-placed ones break if seeds are loaded right at the start of the round, so we do it on the first interaction + var/seeds_initialized = 0 // Map-placed ones break if seeds are loaded right at the start of the round, so we do it on the first interaction var/list/datum/seed_pile/piles = list() var/list/starting_seeds = list() var/list/scanner = list() // What properties we can view @@ -135,7 +135,7 @@ if (..()) return - if (!initialized) + if (!seeds_initialized) for(var/typepath in starting_seeds) var/amount = starting_seeds[typepath] if(isnull(amount)) amount = 1 @@ -143,7 +143,7 @@ for (var/i = 1 to amount) var/O = new typepath add(O) - initialized = 1 + seeds_initialized = 1 var/dat = "

Seed storage contents

" if (piles.len == 0) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 4a924fdca3a..7dc02dedc71 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -165,16 +165,19 @@ nymph.visible_message("[nymph] rolls around in [src] for a bit.","You roll around in [src] for a bit.") return -/obj/machinery/portable_atmospherics/hydroponics/New() - ..() +/obj/machinery/portable_atmospherics/hydroponics/initialize() + . = ..() temp_chem_holder = new() temp_chem_holder.create_reagents(10) create_reagents(200) if(mechanical) connect() update_icon() + return INITIALIZE_HINT_LATELOAD -/obj/machinery/portable_atmospherics/hydroponics/initialize() +// Give the seeds time to initialize itself +/obj/machinery/portable_atmospherics/hydroponics/LateInitialize() + . = ..() var/obj/item/seeds/S = locate() in loc if(S) plant_seeds(S) diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 78deb6cf984..3f83f07ec4a 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -20,7 +20,7 @@ can_clone = TRUE /obj/item/device/integrated_circuit_printer/initialize() - ..() + . = ..() if(!recipe_list.len) // Unfortunately this needed a lot of loops, but it should only be run once at init. diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 8da4fad6d8e..3ef22e0a5c3 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -335,7 +335,7 @@ var/datum/radio_frequency/radio_connection /obj/item/integrated_circuit/input/signaler/initialize() - ..() + . = ..() set_frequency(frequency) // Set the pins so when someone sees them, they won't show as null set_pin_data(IC_INPUT, 1, frequency) diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index a45f5dba2d9..10c1fb2a8e4 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -20,6 +20,7 @@ opacity = 1 /obj/structure/bookcase/initialize() + . = ..() for(var/obj/item/I in loc) if(istype(I, /obj/item/weapon/book)) I.loc = src diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index 094d781cf2b..cade937bfb2 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -10,7 +10,7 @@ //invisibility = INVISIBILITY_LIGHTING color = LIGHTING_BASE_MATRIX icon_state = "light1" - auto_init = 0 // doesn't need special init + //auto_init = 0 // doesn't need special init blend_mode = BLEND_OVERLAY var/lum_r = 0 @@ -19,6 +19,11 @@ var/needs_update = FALSE +/atom/movable/lighting_overlay/initialize() + // doesn't need special init + initialized = TRUE + return INITIALIZE_HINT_NORMAL + /atom/movable/lighting_overlay/New(var/atom/loc, var/no_update = FALSE) . = ..() verbs.Cut() diff --git a/code/modules/lore_codex/codex.dm b/code/modules/lore_codex/codex.dm index ef6ddbe6ea5..b440189021a 100644 --- a/code/modules/lore_codex/codex.dm +++ b/code/modules/lore_codex/codex.dm @@ -9,7 +9,7 @@ /obj/item/weapon/book/codex/initialize() tree = new(src, root_type) - ..() + . = ..() /obj/item/weapon/book/codex/attack_self(mob/user) if(!tree) diff --git a/code/modules/lore_codex/news_data/main.dm b/code/modules/lore_codex/news_data/main.dm index 52ff3821990..fec4ae7c3e5 100644 --- a/code/modules/lore_codex/news_data/main.dm +++ b/code/modules/lore_codex/news_data/main.dm @@ -5,6 +5,7 @@ articles. You are encouraged to check back frequently." children = list( /datum/lore/codex/page/article1, + /datum/lore/codex/page/article2, /datum/lore/codex/page/about_news, ) @@ -31,4 +32,17 @@

\ The bill passed fairly quietly this afternoon, owing to the closed nature of the Bicamarial. A post-facto Occulum poll of voting-age\ VGA citizens suggest that fully 80% of them did not even know what a Promethean was prior to the most recent general election. A\ - follow-up poll indicates that an appreciable number of Sivians do not support the framework's current implementation." \ No newline at end of file + follow-up poll indicates that an appreciable number of Sivians do not support the framework's current implementation." + +/datum/lore/codex/page/article2 + name = "2/3/62-- Corporate Coup on Aetolus" + data = "A recent incident aboard the NRS Prometheus issued in a major change in the leadership of the Promethean homeworld. During \ + a late-night meeting of the Nanotrasen Board of Trustees, several high-ranking personnel, including Head of Research Naomi Harper,\ + announced their intention to assume direct control of Nanotrasen facilities in the system. It is known that several dissenting \ + members of the board were shot to death by Promethean test subjects. Our information comes from a survivor of the coup, who for \ + reasons of security has chosen to remain annonymous. All outbound shipments affiliated with Nanotrasen have ceased.\ +

\ + While neither Grayson Manufacturies nor Nanotrasen have made an official statement, Nanotrasen CEO Albary Moravec has called the \ + incident \"shocking, if the allegations are to be believed\" and has assured shareholders that Nanotrasen will respond to the \ + incident with as much force as it warrents.

Requests for a statement directed to the Board of Trustees or Dr. Harper were \ + not responded to. Free Traders are recommended to stay clear of the region until the situation resolves itself." diff --git a/code/modules/maps/tg/map_template.dm b/code/modules/maps/tg/map_template.dm index f8b96670959..f4446c4cf99 100644 --- a/code/modules/maps/tg/map_template.dm +++ b/code/modules/maps/tg/map_template.dm @@ -44,70 +44,52 @@ var/list/global/map_templates = list() return bounds /datum/map_template/proc/initTemplateBounds(var/list/bounds) - var/list/obj/machinery/atmospherics/atmos_machines = list() + if (SSatoms.initialized == INITIALIZATION_INSSATOMS) + return // let proper initialisation handle it later + var/list/atom/atoms = list() var/list/area/areas = list() -// var/list/turf/turfs = list() - - for(var/L in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), - locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]))) + var/list/obj/structure/cable/cables = list() + var/list/obj/machinery/atmospherics/atmos_machines = list() + var/list/turf/turfs = block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), + locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ])) + for(var/L in turfs) var/turf/B = L atoms += B + areas |= B.loc for(var/A in B) atoms += A -// turfs += B - areas |= get_area(B) - if(istype(A, /obj/machinery/atmospherics)) + if(istype(A, /obj/structure/cable)) + cables += A + else if(istype(A, /obj/machinery/atmospherics)) atmos_machines += A + atoms |= areas - var/i = 0 - -// Apparently when areas get initialize()'d they initialize their turfs as well. -// If this is ever changed, uncomment the block of code below. - -// admin_notice("Initializing newly created simulated turfs in submap.", R_DEBUG) -// for(var/turf/simulated/T in turfs) -// T.initialize() -// i++ -// admin_notice("[i] turf\s initialized.", R_DEBUG) -// i = 0 - - SScreation.initialize_late_atoms() - - admin_notice("Initializing newly created area(s) in submap.", R_DEBUG) - for(var/area/A in areas) - A.initialize() - i++ - admin_notice("[i] area\s initialized.", R_DEBUG) - i = 0 - + admin_notice("Initializing newly created atom(s) in submap.", R_DEBUG) + SSatoms.InitializeAtoms(atoms) + admin_notice("Initializing atmos pipenets and machinery in submap.", R_DEBUG) - for(var/obj/machinery/atmospherics/machine in atmos_machines) - machine.atmos_init() - i++ - - for(var/obj/machinery/atmospherics/machine in atmos_machines) - machine.build_network() - - for(var/obj/machinery/atmospherics/unary/U in machines) - if(istype(U, /obj/machinery/atmospherics/unary/vent_pump)) - var/obj/machinery/atmospherics/unary/vent_pump/T = U - T.broadcast_status() - else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber)) - var/obj/machinery/atmospherics/unary/vent_scrubber/T = U - T.broadcast_status() - admin_notice("[i] pipe\s initialized.", R_DEBUG) + SSmachines.setup_atmos_machinery(atmos_machines) admin_notice("Rebuilding powernets due to submap creation.", R_DEBUG) - SSmachines.makepowernets() + SSmachines.setup_powernets_for_cables(cables) + + // Ensure all machines in loaded areas get notified of power status + for(var/I in areas) + var/area/A = I + A.power_change() admin_notice("Submap initializations finished.", R_DEBUG) -/datum/map_template/proc/load_new_z() - var/x = round(world.maxx/2) - var/y = round(world.maxy/2) +/datum/map_template/proc/load_new_z(var/centered = FALSE) + var/x = 1 + var/y = 1 - var/list/bounds = maploader.load_map(file(mappath), x, y) + if(centered) + x = round((world.maxx - width)/2) + y = round((world.maxy - height)/2) + + var/list/bounds = maploader.load_map(file(mappath), x, y, no_changeturf = TRUE) if(!bounds) return FALSE @@ -118,7 +100,7 @@ var/list/global/map_templates = list() log_game("Z-level [name] loaded at at [x],[y],[world.maxz]") return TRUE -/datum/map_template/proc/load(turf/T, centered = FALSE, dont_init = FALSE) +/datum/map_template/proc/load(turf/T, centered = FALSE) var/old_T = T if(centered) T = locate(T.x - round(width/2) , T.y - round(height/2) , T.z) @@ -140,8 +122,7 @@ var/list/global/map_templates = list() // repopulate_sorted_areas() //initialize things that are normally initialized after map load - if(!dont_init) - initTemplateBounds(bounds) + initTemplateBounds(bounds) log_game("[name] loaded at at [T.x],[T.y],[T.z]") loaded++ @@ -256,7 +237,7 @@ var/list/global/map_templates = list() admin_notice("Submap \"[chosen_template.name]\" placed at ([T.x], [T.y], [T.z])", R_DEBUG) // Do loading here. - chosen_template.load(T, centered = TRUE, dont_init = TRUE) // This is run before the main map's initialization routine, so that can initilize our submaps for us instead. + chosen_template.load(T, centered = TRUE) // This is run before the main map's initialization routine, so that can initilize our submaps for us instead. CHECK_TICK diff --git a/code/modules/maps/tg/reader.dm b/code/modules/maps/tg/reader.dm index 484865ab816..fa730f574ae 100644 --- a/code/modules/maps/tg/reader.dm +++ b/code/modules/maps/tg/reader.dm @@ -304,7 +304,7 @@ var/global/use_preloader = FALSE first_turf_index++ //turn off base new Initialization until the whole thing is loaded - SScreation.StartLoadingMap() + SSatoms.map_loader_begin() //instanciate the first /turf var/turf/T if(members[first_turf_index] != /turf/template_noop) @@ -323,7 +323,7 @@ var/global/use_preloader = FALSE for(index in 1 to first_turf_index-1) instance_atom(members[index],members_attributes[index],crds,no_changeturf) //Restore initialization to the previous value - SScreation.StopLoadingMap() + SSatoms.map_loader_stop() //////////////// //Helpers procs @@ -344,9 +344,9 @@ var/global/use_preloader = FALSE //custom CHECK_TICK here because we don't want things created while we're sleeping to not initialize if(TICK_CHECK) - SScreation.StopLoadingMap() + SSatoms.map_loader_stop() stoplag() - SScreation.StartLoadingMap() + SSatoms.map_loader_begin() /dmm_suite/proc/create_atom(path, crds) set waitfor = FALSE diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index 0f76f6172e5..d212851071e 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -94,6 +94,13 @@ apply_colour = 1 no_variants = FALSE +/obj/item/stack/material/lead + name = "lead" + icon_state = "sheet-adamantine" + default_type = "lead" + apply_colour = 1 + no_variants = TRUE + /obj/item/stack/material/sandstone name = "sandstone brick" icon_state = "sheet-sandstone" diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index af5e1b74750..2fa2b1dbbe4 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -99,6 +99,7 @@ var/list/name_to_material var/conductivity = null // How conductive the material is. Iron acts as the baseline, at 10. var/list/composite_material // If set, object matter var will be a list containing these values. var/luminescence + var/radiation_resistance = 20 // Radiation resistance, used in calculating how much radiation a material absorbs. Equivlent to weight, but does not affect weaponry. // Placeholder vars for the time being, todo properly integrate windows/light tiles/rods. var/created_window @@ -236,6 +237,7 @@ var/list/name_to_material weight = 22 stack_origin_tech = list(TECH_MATERIAL = 5) door_icon_base = "stone" + radiation_resistance = 80 //dense, so it's okay-ish as rad shielding. /material/diamond name = "diamond" @@ -261,6 +263,7 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 4) sheet_singular_name = "ingot" sheet_plural_name = "ingots" + radiation_resistance = 120 //gold is dense. /material/gold/bronze //placeholder for ashtrays name = "bronze" @@ -276,7 +279,7 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 3) sheet_singular_name = "ingot" sheet_plural_name = "ingots" - + radiation_resistance = 22 //R-UST port /material/supermatter name = "supermatter" @@ -337,6 +340,7 @@ var/list/name_to_material door_icon_base = "stone" sheet_singular_name = "brick" sheet_plural_name = "bricks" + radiation_resistance = 22 /material/stone/marble name = "marble" @@ -345,6 +349,7 @@ var/list/name_to_material hardness = 100 integrity = 201 //hack to stop kitchen benches being flippable, todo: refactor into weight system stack_type = /obj/item/stack/material/marble + radiation_resistance = 26 /material/steel name = DEFAULT_WALL_MATERIAL @@ -391,6 +396,7 @@ var/list/name_to_material conductivity = 13 // For the purposes of balance. stack_origin_tech = list(TECH_MATERIAL = 2) composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT, "platinum" = SHEET_MATERIAL_AMOUNT) //todo + radiation_resistance = 60 //Plasteel is presumably dense and is the dominant material used in the engine. Still not great. // Very rare alloy that is reflective, should be used sparingly. /material/durasteel @@ -408,6 +414,7 @@ var/list/name_to_material reflectivity = 0.7 // Not a perfect mirror, but close. stack_origin_tech = list(TECH_MATERIAL = 8) composite_material = list("plasteel" = SHEET_MATERIAL_AMOUNT, "diamond" = SHEET_MATERIAL_AMOUNT) //shrug + radiation_resistance = 120 //it reflects XRAY LASERS. /material/plasteel/titanium name = "titanium" @@ -436,6 +443,7 @@ var/list/name_to_material window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 2) created_window = /obj/structure/window/basic rod_product = /obj/item/stack/material/glass/reinforced + radiation_resistance = 15 /material/glass/build_windows(var/mob/living/user, var/obj/item/stack/used_stack) @@ -527,6 +535,7 @@ var/list/name_to_material created_window = /obj/structure/window/reinforced wire_product = null rod_product = null + radiation_resistance = 30 /material/glass/phoron name = "borosilicate glass" @@ -554,6 +563,7 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 2) composite_material = list() //todo rod_product = null + radiation_resistance = 30 /material/plastic name = "plastic" @@ -568,6 +578,7 @@ var/list/name_to_material conductivity = 2 // For the sake of material armor diversity, we're gonna pretend this plastic is a good insulator. melting_point = T0C+371 //assuming heat resistant plastic stack_origin_tech = list(TECH_MATERIAL = 3) + radiation_resistance = 12 /material/plastic/holographic name = "holoplastic" @@ -618,6 +629,7 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 2) sheet_singular_name = "ingot" sheet_plural_name = "ingots" + radiation_resistance = 27 /material/iron name = "iron" @@ -627,6 +639,17 @@ var/list/name_to_material conductivity = 10 sheet_singular_name = "ingot" sheet_plural_name = "ingots" + radiation_resistance = 22 + +/material/lead + name = "lead" + stack_type = /obj/item/stack/material/lead + icon_colour = "#273956" + weight = 35 + conductivity = 10 + sheet_singular_name = "ingot" + sheet_plural_name = "ingots" + radiation_resistance = 350 //actual radiation shielding, yay... // Adminspawn only, do not let anyone get this. /material/alienalloy @@ -640,6 +663,7 @@ var/list/name_to_material hardness = 500 weight = 500 protectiveness = 80 // 80% + radiation_resistance = 500 // Likewise. /material/alienalloy/elevatorium @@ -697,6 +721,7 @@ var/list/name_to_material destruction_desc = "splinters" sheet_singular_name = "plank" sheet_plural_name = "planks" + radiation_resistance = 18 /material/wood/log name = MAT_LOG @@ -739,7 +764,7 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 1) door_icon_base = "wood" destruction_desc = "crumples" - + radiation_resistance = 1 /material/snow name = MAT_SNOW stack_type = /obj/item/stack/material/snow @@ -756,7 +781,7 @@ var/list/name_to_material destruction_desc = "crumples" sheet_singular_name = "pile" sheet_plural_name = "pile" //Just a bigger pile - + radiation_resistance = 1 /material/cloth //todo name = "cloth" stack_origin_tech = list(TECH_MATERIAL = 2) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index a6a857c43b8..2f81f1568a2 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -97,10 +97,16 @@ var/list/mining_overlay_cache = list() return /turf/simulated/mineral/initialize() + . = ..() if(prob(20)) overlay_detail = "asteroid[rand(0,9)]" update_icon(1) - return density && mineral + if(density && mineral) + . = INITIALIZE_HINT_LATELOAD + +/turf/simulated/mineral/LateInitialize() + if(density && mineral) + MineralSpread() /turf/simulated/mineral/update_icon(var/update_neighbors) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index cc7fe007119..e7f0db6b30a 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -204,8 +204,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return resting = 1 var/turf/location = get_turf(src) - message_admins("[key_name_admin(usr)] has ghosted. (JMP)") - log_game("[key_name_admin(usr)] has ghosted.") + var/special_role = check_special_role() + if(!istype(loc,/obj/machinery/cryopod)) + log_and_message_admins("has ghosted outside cryo[special_role ? " as [special_role]" : ""]. (JMP)",usr) + else if(special_role) + log_and_message_admins("has ghosted in cryo as [special_role]. (JMP)",usr) var/mob/observer/dead/ghost = ghostize(0) // 0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 if(ghost) ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly. diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index e1665738118..6e8805d17a0 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -51,7 +51,7 @@ // Make sure mapped in units start turned on. /mob/living/bot/initialize() - ..() + . = ..() if(on) turn_on() // Update lights and other stuff diff --git a/code/modules/mob/living/simple_animal/aliens/alien.dm b/code/modules/mob/living/simple_animal/aliens/alien.dm index d31efe6df87..3836a6abd29 100644 --- a/code/modules/mob/living/simple_animal/aliens/alien.dm +++ b/code/modules/mob/living/simple_animal/aliens/alien.dm @@ -219,7 +219,7 @@ speak_chance = 5 speak = list("Shuhn","Shrunnph?","Shunpf") - emote_see = list("scratches the ground","shakes out it's mane","tinkles gently") + emote_see = list("scratches the ground","shakes out its mane","clinks gently as it moves") /mob/living/simple_animal/yithian name = "yithian" diff --git a/code/modules/mob/living/simple_animal/aliens/mimic.dm b/code/modules/mob/living/simple_animal/aliens/mimic.dm index b79b5248755..77ba92ff6a6 100644 --- a/code/modules/mob/living/simple_animal/aliens/mimic.dm +++ b/code/modules/mob/living/simple_animal/aliens/mimic.dm @@ -63,7 +63,7 @@ // Pickup loot /mob/living/simple_animal/hostile/mimic/crate/initialize() - ..() + . = ..() for(var/obj/item/I in loc) I.forceMove(src) diff --git a/code/modules/mob/living/simple_animal/animals/slime.dm b/code/modules/mob/living/simple_animal/animals/slime.dm index 7d5fa16dab2..f7d23771a3c 100644 --- a/code/modules/mob/living/simple_animal/animals/slime.dm +++ b/code/modules/mob/living/simple_animal/animals/slime.dm @@ -27,7 +27,7 @@ icon_dead = "rainbow baby slime dead" /mob/living/simple_animal/slime/science/initialize() - ..() + . = ..() overlays.Cut() overlays += "aslime-:33" diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 8e796ca2505..d8044da328b 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -217,8 +217,4 @@ var/seedarkness = 1 //Determines mob's ability to see shadows. 1 = Normal vision, 0 = darkvision - // Falling things - var/hovering = FALSE // Is the mob floating or flying in some way? If so, don't fall normally. //Not implemented yet, idea is to let them ignore terrain slowdown and falling down floors - var/softfall = FALSE // Is the mob able to lessen their impact upon falling? - var/parachuting = FALSE // Is the mob able to jump out of planes and survive? Don't check this directly outside of CanParachute(). var/get_rig_stats = 0 //Moved from computer.dm diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm index ff698675486..34a540ac45b 100644 --- a/code/modules/mob/new_player/login.dm +++ b/code/modules/mob/new_player/login.dm @@ -19,6 +19,7 @@ var/obj/effect/lobby_image = new /obj/effect/lobby_image icon_state = pick(using_map.lobby_screens) else icon_state = known_icon_states[1] + . = ..() /mob/new_player var/client/my_client // Need to keep track of this ourselves, since by the time Logout() is called the client has already been nulled diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index 59b0b2ebe84..ccd00753f85 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -347,9 +347,12 @@ /atom/movable/proc/fall_impact(var/atom/hit_atom, var/damage_min = 0, var/damage_max = 10, var/silent = FALSE, var/planetary = FALSE) if(!silent) visible_message("\The [src] falls from above and slams into \the [hit_atom]!", "You hear something slam into \the [hit_atom].") + for(var/atom/movable/A in src.contents) + A.fall_impact(hit_atom, damage_min, damage_max, silent = TRUE) // Take damage from falling and hitting the ground -/mob/living/fall_impact(var/turf/landing, var/damage_min = 0, var/damage_max = 30, var/silent = FALSE, var/planetary = FALSE) +/mob/living/fall_impact(var/atom/hit_atom, var/damage_min = 0, var/damage_max = 10, var/silent = FALSE, var/planetary = FALSE) + var/turf/landing = get_turf(hit_atom) if(planetary && src.CanParachute()) if(!silent) visible_message("\The [src] glides in from above and lands on \the [landing]!", \ @@ -376,60 +379,32 @@ "You hear something slam into \the [landing].") playsound(loc, "punch", 25, 1, -1) - if(planetary) //Since the planetary fall damage is calibrated for humans, we need to up this a bit - damage_min *= 2 - damage_max *= 2 - - adjustBruteLoss(rand(damage_min, damage_max)) - return - return - -/mob/living/carbon/human/fall_impact(var/turf/landing, var/damage_min = 0, var/damage_max = 10, var/silent = FALSE, var/planetary = FALSE) - if(planetary && src.CanParachute()) - if(!silent) - visible_message("\The [src] glides in from above and lands on \the [landing]!", \ - "You land on \the [landing]!", \ - "You hear something land \the [landing].") - return - else if(!planetary && src.softfall) // Falling one floor and falling one atmosphere are very different things - if(!silent) - visible_message("\The [src] falls from above and lands on \the [landing]!", \ - "You land on \the [landing]!", \ - "You hear something land \the [landing].") - return - else - if(!silent) - if(planetary) - visible_message("\A [src] falls out of the sky and crashes into \the [landing]!", \ - " You fall out of the skiy and crash into \the [landing]!", \ - "You hear something slam into \the [landing].") - var/turf/T = get_turf(landing) - explosion(T, 0, 1, 2) - else - visible_message("\The [src] falls from above and slams into \the [landing]!", \ - "You fall off and hit \the [landing]!", \ - "You hear something slam into \the [landing].") - playsound(loc, "punch", 25, 1, -1) - - // Because wounds heal rather quickly, 10 should be enough to discourage jumping off but not be enough to ruin you, at least for the first time. - apply_damage(rand(damage_min, damage_max), BRUTE, BP_HEAD) - apply_damage(rand(damage_min, damage_max), BRUTE, BP_TORSO) - apply_damage(rand(damage_min, damage_max), BRUTE, BP_GROIN) - apply_damage(rand(damage_min, damage_max), BRUTE, BP_L_LEG) - apply_damage(rand(damage_min, damage_max), BRUTE, BP_R_LEG) - apply_damage(rand(damage_min, damage_max), BRUTE, BP_L_FOOT) - apply_damage(rand(damage_min, damage_max), BRUTE, BP_R_FOOT) - apply_damage(rand(damage_min, damage_max), BRUTE, BP_L_ARM) - apply_damage(rand(damage_min, damage_max), BRUTE, BP_R_ARM) - apply_damage(rand(damage_min, damage_max), BRUTE, BP_L_HAND) - apply_damage(rand(damage_min, damage_max), BRUTE, BP_R_HAND) + // Because wounds heal rather quickly, 10 (the default for this proc) should be enough to discourage jumping off but not be enough to ruin you, at least for the first time. + // Hits 10 times, because apparently targeting individual limbs lets certain species survive the fall from atmosphere + for(var/i = 1 to 10) + adjustBruteLoss(rand(damage_min, damage_max)) Weaken(4) updatehealth() return return -//Checks if the mob is allowed to survive a fall from space -/mob/living/proc/CanParachute() +//Using /atom/movable instead of /obj/item because I'm not sure what all humans can pick up or wear +/atom/movable + var/parachute = FALSE // Is this thing a parachute itself? + var/hovering = FALSE // Is the thing floating or flying in some way? If so, don't fall normally. //Not implemented yet, idea is to let mobs/mechs ignore terrain slowdown and falling down floors + var/softfall = FALSE // Is the thing able to lessen their impact upon falling? + var/parachuting = FALSE // Is the thing able to jump out of planes and survive? Don't check this directly outside of CanParachute(). + +/atom/movable/proc/isParachute() + return parachute + +//This is what makes the parachute items know they've been used. +//I made it /atom/movable so it can be retooled for other things (mobs, mechs, etc), though it's only currently called in human/CanParachute(). +/atom/movable/proc/handleParachute() + return + +//Checks if the thing is allowed to survive a fall from space +/atom/movable/proc/CanParachute() return parachuting //For humans, this needs to be a wee bit more complicated @@ -454,19 +429,6 @@ else return parachuting -//For human falling code -//Using /obj instead of /obj/item because I'm not sure what all humans can pick up or wear -/obj - var/parachute = FALSE - -/obj/proc/isParachute() - return parachute - -//This is what makes the parachute items know they've been used. -//I made it /atom/movable so it can be retooled for other things (mobs, mechs, etc), though it's only currently called in human/CanParachute(). -/atom/movable/proc/handleParachute() - return - //Mech Code /obj/mecha/handle_fall(var/turf/landing) // First things first, break any lattice @@ -480,18 +442,49 @@ return ..() /obj/mecha/fall_impact(var/atom/hit_atom, var/damage_min = 15, var/damage_max = 30, var/silent = FALSE, var/planetary = FALSE) - // Tell the pilot that they just dropped down with a superheavy mecha. - if(occupant) - to_chat(occupant, "\The [src] crashed down onto \the [hit_atom]!") - // Anything on the same tile as the landing tile is gonna have a bad day. for(var/mob/living/L in hit_atom.contents) L.visible_message("\The [src] crushes \the [L] as it lands on them!") L.adjustBruteLoss(rand(70, 100)) L.Weaken(8) - // Now to hurt the mech. - take_damage(rand(damage_min, damage_max)) + var/turf/landing = get_turf(hit_atom) + + if(planetary && src.CanParachute()) + if(!silent) + visible_message("\The [src] glides in from above and lands on \the [landing]!", \ + "You land on \the [landing]!", \ + "You hear something land \the [landing].") + return + else if(!planetary && src.softfall) // Falling one floor and falling one atmosphere are very different things + if(!silent) + visible_message("\The [src] falls from above and lands on \the [landing]!", \ + "You land on \the [landing]!", \ + "You hear something land \the [landing].") + return + else + if(!silent) + if(planetary) + visible_message("\A [src] falls out of the sky and crashes into \the [landing]!", \ + " You fall out of the skiy and crash into \the [landing]!", \ + "You hear something slam into \the [landing].") + var/turf/T = get_turf(landing) + explosion(T, 0, 1, 2) + else + visible_message("\The [src] falls from above and slams into \the [landing]!", \ + "You fall off and hit \the [landing]!", \ + "You hear something slam into \the [landing].") + playsound(loc, "punch", 25, 1, -1) + + // Now to hurt everything in the mech (if the fall is planetary, the mech blows up, so we do this first) + for(var/atom/movable/A in src.contents) + A.fall_impact(hit_atom, damage_min, damage_max, silent = TRUE) + // And now the Mech + + if(!planetary) + take_damage(rand(damage_min, damage_max)) + else + qdel(src) // And hurt the floor. if(istype(hit_atom, /turf/simulated/floor)) diff --git a/code/modules/multiz/open_space_controller.dm b/code/modules/multiz/open_space_controller.dm index fc6c7e54841..e790f476dc0 100644 --- a/code/modules/multiz/open_space_controller.dm +++ b/code/modules/multiz/open_space_controller.dm @@ -61,12 +61,6 @@ add_turf(T) open_space_initialised = TRUE -/turf/simulated/open/initialize() - . = ..() - if(open_space_initialised) - // log_debug("[src] ([x],[y],[z]) queued for update for initialize()") - OS_controller.add_turf(src) - /turf/Entered(atom/movable/AM) . = ..() if(open_space_initialised && !AM.invisibility && isobj(AM)) diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm index 18bb91a9e46..8b97ffdb353 100644 --- a/code/modules/multiz/structures.dm +++ b/code/modules/multiz/structures.dm @@ -18,6 +18,7 @@ var/const/climb_time = 2 SECONDS /obj/structure/ladder/initialize() + . = ..() // the upper will connect to the lower if(allowed_directions & DOWN) //we only want to do the top one, as it will initialize the ones before it. for(var/obj/structure/ladder/L in GetBelow(src)) @@ -131,6 +132,7 @@ anchored = 1 /obj/structure/stairs/initialize() + . = ..() for(var/turf/turf in locs) var/turf/simulated/open/above = GetAbove(turf) if(!above) diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index 9d07df45081..421d5639b2f 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -34,7 +34,7 @@ update() /turf/simulated/open/initialize() - ..() + . = ..() ASSERT(HasBelow(z)) update() diff --git a/code/modules/multiz/zshadow.dm b/code/modules/multiz/zshadow.dm index 9155f193ef7..173aa3ce8fd 100644 --- a/code/modules/multiz/zshadow.dm +++ b/code/modules/multiz/zshadow.dm @@ -10,7 +10,7 @@ unacidable = 1 density = 0 opacity = 0 // Don't trigger lighting recalcs gah! TODO - consider multi-z lighting. - auto_init = FALSE // We do not need to be initialize()d + //auto_init = FALSE // We do not need to be initialize()d var/mob/owner = null // What we are a shadow of. /mob/zshadow/can_fall() diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 5b855d584cf..a28ad195922 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -323,7 +323,8 @@ // sync the organ's damage with its wounds src.update_damages() - owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called + if(owner) + owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called //If limb took enough damage, try to cut or tear it off if(owner && loc == owner && !is_stump()) diff --git a/code/modules/overmap/ships/computers/engine_control.dm b/code/modules/overmap/ships/computers/engine_control.dm index 49b0f190b66..d700e38a81a 100644 --- a/code/modules/overmap/ships/computers/engine_control.dm +++ b/code/modules/overmap/ships/computers/engine_control.dm @@ -9,6 +9,7 @@ var/obj/effect/map/ship/linked /obj/machinery/computer/engines/initialize() + . = ..() linked = map_sectors["[z]"] if (linked) if (!linked.eng_control) diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm index b92eebbc7ea..6c0ee20f1f2 100644 --- a/code/modules/overmap/ships/computers/helm.dm +++ b/code/modules/overmap/ships/computers/helm.dm @@ -11,6 +11,7 @@ var/dy //coordinates /obj/machinery/computer/helm/initialize() + . = ..() linked = map_sectors["[z]"] if (linked) if(!linked.nav_control) diff --git a/code/modules/overmap/ships/computers/shuttle.dm b/code/modules/overmap/ships/computers/shuttle.dm index 05d1a6d8c6f..8ebbbf20d19 100644 --- a/code/modules/overmap/ships/computers/shuttle.dm +++ b/code/modules/overmap/ships/computers/shuttle.dm @@ -9,7 +9,7 @@ var/obj/effect/map/home //current destination /obj/machinery/computer/shuttle_control/explore/initialize() - ..() + . = ..() home = map_sectors["[z]"] shuttle_tag = "[shuttle_tag]-[z]" if(!shuttle_controller.shuttles[shuttle_tag]) diff --git a/code/modules/overmap/ships/engines/thermal.dm b/code/modules/overmap/ships/engines/thermal.dm index b2f537bb963..323bc829062 100644 --- a/code/modules/overmap/ships/engines/thermal.dm +++ b/code/modules/overmap/ships/engines/thermal.dm @@ -54,7 +54,7 @@ var/datum/ship_engine/thermal/controller /obj/machinery/atmospherics/unary/engine/initialize() - ..() + . = ..() controller = new(src) /obj/machinery/atmospherics/unary/engine/Destroy() diff --git a/code/modules/overmap/ships/ship.dm b/code/modules/overmap/ships/ship.dm index 9b8557363da..b7adf7319ac 100644 --- a/code/modules/overmap/ships/ship.dm +++ b/code/modules/overmap/ships/ship.dm @@ -15,6 +15,7 @@ var/obj/machinery/computer/engines/eng_control /obj/effect/map/ship/initialize() + . = ..() for(var/obj/machinery/computer/engines/E in machines) if (E.z == map_z) eng_control = E diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 89a0e5544a7..940dac91e70 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -29,6 +29,7 @@ for(var/obj/item/I in loc) if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/folder) || istype(I, /obj/item/weapon/photo) || istype(I, /obj/item/weapon/paper_bundle)) I.loc = src + . = ..() /obj/structure/filingcabinet/attackby(obj/item/P as obj, mob/user as mob) if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo) || istype(P, /obj/item/weapon/paper_bundle)) diff --git a/code/modules/power/cells/device_cells.dm b/code/modules/power/cells/device_cells.dm index 822370a6b14..9cacf670730 100644 --- a/code/modules/power/cells/device_cells.dm +++ b/code/modules/power/cells/device_cells.dm @@ -21,7 +21,7 @@ charge_amount = 20 /obj/item/weapon/cell/device/weapon/empty/initialize() - ..() + . = ..() charge = 0 update_icon() diff --git a/code/modules/power/fusion/core/_core.dm b/code/modules/power/fusion/core/_core.dm index 760c46ea93b..7f81b70ffd7 100644 --- a/code/modules/power/fusion/core/_core.dm +++ b/code/modules/power/fusion/core/_core.dm @@ -77,7 +77,7 @@ var/list/fusion_cores = list() if(owned_field) icon_state = "core0" if(force_rupture || owned_field.plasma_temperature > 1000) - owned_field.Rupture() + owned_field.MRC() else owned_field.RadiateAll() qdel(owned_field) diff --git a/code/modules/power/fusion/core/core_field.dm b/code/modules/power/fusion/core/core_field.dm index 37351c53afa..ef1c3716fae 100644 --- a/code/modules/power/fusion/core/core_field.dm +++ b/code/modules/power/fusion/core/core_field.dm @@ -1,6 +1,7 @@ #define FUSION_ENERGY_PER_K 20 #define FUSION_MAX_ENVIRO_HEAT 5000 //raise this if you want the reactor to dump more energy into the atmosphere -#define PLASMA_TEMP_RADIATION_DIVISIOR 15 //radiation divisior. plasma temp / divisor = radiation. +#define PLASMA_TEMP_RADIATION_DIVISIOR 20 //radiation divisior. plasma temp / divisor = radiation. + /obj/effect/fusion_em_field name = "electromagnetic field" @@ -19,6 +20,8 @@ var/tick_instability = 0 var/percent_unstable = 0 var/stable = 1 + var/id_tag + var/critical = 0 var/obj/machinery/power/fusion_core/owned_core var/list/dormant_reactant_quantities = list() @@ -31,7 +34,8 @@ /obj/structure/cable, /obj/machinery/atmospherics, /obj/machinery/air_sensor, - /mob/observer/dead + /mob/observer/dead, + /obj/machinery/power/hydromagnetic_trap ) var/light_min_range = 2 @@ -52,7 +56,7 @@ owned_core = new_owned_core if(!owned_core) qdel(src) - + id_tag = owned_core.id_tag //create the gimmicky things to handle field collisions var/obj/effect/fusion_particle_catcher/catcher @@ -194,37 +198,46 @@ if(percent_unstable >= 1) owned_core.Shutdown(force_rupture=1) else - if(percent_unstable > 0.5 && prob(percent_unstable*100)) + if(percent_unstable > 0.1 && prob(percent_unstable*100)) if(plasma_temperature < 2000) visible_message("\The [src] ripples uneasily, like a disturbed pond.") else var/flare var/fuel_loss var/rupture - if(percent_unstable < 0.2) + if(percent_unstable > 0.2) visible_message("\The [src] ripples uneasily, like a disturbed pond.") - fuel_loss = prob(5) - flare = prob(50) - else if(percent_unstable < 0.9) + flare = prob(25) + else if(percent_unstable > 0.5) visible_message("\The [src] undulates violently, shedding plumes of plasma!") flare = prob(50) fuel_loss = prob(20) rupture = prob(5) - else + else if(percent_unstable > 0.8) visible_message("\The [src] is wracked by a series of horrendous distortions, buckling and twisting like a living thing!") flare = 1 fuel_loss = prob(50) rupture = prob(25) if(rupture) - owned_core.Shutdown(force_rupture=1) + if(prob(80)) + MagneticQuench() + return + else if(prob(15)) + MRC() + return + else if(prob(5)) + QuantumFluxCascade() + return + else if(prob(5)) + BluespaceQuenchEvent() + return else var/lost_plasma = (plasma_temperature*percent_unstable) radiation += lost_plasma if(flare) - radiation += plasma_temperature/2 - plasma_temperature -= lost_plasma - + spawn(1) + emflare() if(fuel_loss) for(var/particle in dormant_reactant_quantities) var/lost_fuel = dormant_reactant_quantities[particle]*percent_unstable @@ -234,17 +247,19 @@ dormant_reactant_quantities.Remove(particle) Radiate() return - -/obj/effect/fusion_em_field/proc/Rupture() - visible_message("\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!") - set_light(15, 15, "#CCCCFF") - empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300)) - sleep(5) - global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor") - RadiateAll() - explosion(get_turf(owned_core),-1,-1,8,10) // Blow out all the windows. - return - +/*/obj/effect/fusion_em_field/proc/CheckCriticality() + if (plasma_temperature > 70000) + critical += 0.2 + else if (instability > 0.45) + critical += 0.6 + if(critical >= 25 && prob(percent_unstable*100)) + if (critical >= 90) + visible_message("\The [src] rumbles and quivers violently, threatening to break free!") + else if(critical >= 50) + visible_message("\The [src] rumbles and quivers energetically, the walls distorting slightly.") + else if(critical >= 25) + visible_message("\The [src] rumbles and quivers slightly, vibrating the deck.") +*/ /obj/effect/fusion_em_field/proc/ChangeFieldStrength(var/new_strength) var/calc_size = 1 if(new_strength <= 50) @@ -490,19 +505,19 @@ //All procs below this point are called in _core.dm, starting at line 41. //Stability monitoring. Gives radio annoucements if field stability is below 80% /obj/effect/fusion_em_field/proc/stability_monitor() - var/warnpoint = 0.10 + var/warnpoint = 0.10 //start warning at 10% instability var/warnmessage = "Warning! Field unstable! Instability at [percent_unstable * 100]%, plasma temperature at [plasma_temperature + 295]k." var/stablemessage = "Containment field returning to stable conditions." - if(percent_unstable >= warnpoint) + if(percent_unstable >= warnpoint) //we're unstable, start warning engineering global_announcer.autosay(warnmessage, "Field Stability Monitor", "Engineering") - stable = 0 - sleep(20 SECONDS) - return - if(percent_unstable < warnpoint && stable == 0) + stable = 0 //we know we're not stable, so let's not state the safe message. + sleep(20) + return + if(percent_unstable < warnpoint && stable == 0) //The field is stable again. Let's set our safe variable and state the safe message. global_announcer.autosay(stablemessage, "Field Stability Monitor", "Engineering") stable = 1 - return + return //Reaction radiation is fairly buggy and there's at least three procs dealing with radiation here, this is to ensure constant radiation output. /obj/effect/fusion_em_field/proc/radiation_scale() @@ -513,7 +528,8 @@ if(owned_core && owned_core.loc) var/datum/gas_mixture/environment = owned_core.loc.return_air() if(environment && environment.temperature < (T0C+FUSION_MAX_ENVIRO_HEAT)) - environment.add_thermal_energy(plasma_temperature*20000) + environment.add_thermal_energy(plasma_temperature*5000) + check_instability() //Temperature changes depending on color. /obj/effect/fusion_em_field/proc/temp_color() @@ -538,8 +554,121 @@ light_max_range = 5 light_max_power = 5 return +//moved the flare to a proc for various reasons. Called on line 225. +/obj/effect/fusion_em_field/proc/emflare() + radiation += plasma_temperature/2 + light_color = "#ff0000" + light_max_power = 30 + light_min_power = 30 + light_min_range = 30 + light_max_range = 30 + visible_message("\The [src] flares to eye-searing brightness!") + sleep(60) + temp_color() + //plasma_temperature -= lost_plasma + return +//Rupture() is no longer the end all be all. Fear the magnetic resonance cascade and quantum flux cascade +/obj/effect/fusion_em_field/proc/Rupture() + visible_message("\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!") + set_light(15, 15, "#CCCCFF") + empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300)) + global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor") + RadiateAll() + var/list/things_in_range = range(10, owned_core) + var/list/turfs_in_range = list() + var/turf/T + for (T in things_in_range) + turfs_in_range.Add(T) + + explosion(pick(things_in_range), -1, 5, 5, 5) + empulse(pick(things_in_range), ceil(plasma_temperature/1000), ceil(plasma_temperature/300)) + spawn(25) + explosion(pick(things_in_range), -1, 5, 5, 5) + spawn(25) + explosion(pick(things_in_range), -1, 5, 5, 5) + spawn(25) + explosion(pick(things_in_range), -1, 5, 5, 5) + spawn(10) + explosion(pick(things_in_range), -1, 5, 5, 5) + spawn(10) + explosion(pick(things_in_range), -1, 5, 5, 5) + spawn(10) + explosion(pick(things_in_range), -1, 5, 5, 5) + return + +/obj/effect/fusion_em_field/proc/MRC() //spews electromagnetic pulses in an area around the core. + visible_message("\The [src] glows an extremely bright pink and flares out of existance!") + global_announcer.autosay("Warning! Magnetic Resonance Cascade detected! Brace for electronic system distruption.", "Field Stability Monitor") + set_light(15, 15, "#ff00d8") + var/list/things_in_range = range(15, owned_core) + var/list/turfs_in_range = list() + var/turf/T + for (T in things_in_range) + turfs_in_range.Add(T) + for(var/loopcount = 1 to 10) + spawn(200) + empulse(pick(things_in_range), 10, 15) + Destroy() + return + +/obj/effect/fusion_em_field/proc/QuantumFluxCascade() //spews hot phoron and oxygen in a radius around the RUST. Will probably set fire to things + global_announcer.autosay("Warning! Quantum fluxuation detected! Flammable gas release expected.", "Field Stability Monitor") + var/list/things_in_range = range(15, owned_core) + var/list/turfs_in_range = list() + var/turf/T + for (T in things_in_range) + turfs_in_range.Add(T) + for(var/loopcount = 1 to 10) + var/turf/TT = get_turf(pick(turfs_in_range)) + if(istype(TT)) + var/datum/gas_mixture/plasma = new + plasma.adjust_gas("oxygen", (size*100), 0) + plasma.adjust_gas("phoron", (size*100), 0) + plasma.temperature = (plasma_temperature/2) + plasma.update_values() + TT.assume_air(plasma) + TT.hotspot_expose(plasma_temperature) + plasma = null + Destroy() + return + +/obj/effect/fusion_em_field/proc/MagneticQuench() //standard hard shutdown. dumps hot oxygen/phoron into the core's area and releases an EMP in the area around the core. + global_announcer.autosay("Warning! Magnetic Quench event detected, engaging hard shutdown.", "Field Stability Monitor") + empulse(owned_core, 10, 15) + var/turf/TT = get_turf(owned_core) + if(istype(TT)) + var/datum/gas_mixture/plasma = new + plasma.adjust_gas("oxygen", (size*100), 0) + plasma.adjust_gas("phoron", (size*100), 0) + plasma.temperature = (plasma_temperature/2) + plasma.update_values() + TT.assume_air(plasma) + TT.hotspot_expose(plasma_temperature) + plasma = null + Destroy() + owned_core.Shutdown() + return + +/obj/effect/fusion_em_field/proc/BluespaceQuenchEvent() //!!FUN!! causes a number of explosions in an area around the core. Will likely destory or heavily damage the reactor. + visible_message("\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!") + set_light(15, 15, "#CCCCFF") + empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300)) + global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor") + RadiateAll() + var/list/things_in_range = range(10, owned_core) + var/list/turfs_in_range = list() + var/turf/T + for (T in things_in_range) + turfs_in_range.Add(T) + for(var/loopcount = 1 to 10) + explosion(pick(things_in_range), -1, 5, 5, 5) + empulse(pick(things_in_range), ceil(plasma_temperature/1000), ceil(plasma_temperature/300)) + Destroy() + owned_core.Shutdown() + return + #undef FUSION_HEAT_CAP #undef FUSION_MAX_ENVIRO_HEAT #undef PLASMA_TEMP_RADIATION_DIVISIOR \ No newline at end of file diff --git a/code/modules/power/fusion/fusion_reactions.dm b/code/modules/power/fusion/fusion_reactions.dm index 38f73812f99..623f70bd6bd 100644 --- a/code/modules/power/fusion/fusion_reactions.dm +++ b/code/modules/power/fusion/fusion_reactions.dm @@ -117,7 +117,7 @@ proc/get_fusion_reaction(var/p_react, var/s_react, var/m_energy) var/turf/origin = get_turf(holder) holder.Rupture() qdel(holder) - var/radiation_level = rand(100, 200) + var/radiation_level = 200 // Copied from the SM for proof of concept. //Not any more --Cirra //Use the whole z proc --Leshana radiation_repository.z_radiate(locate(1, 1, holder.z), radiation_level, 1) @@ -141,7 +141,6 @@ proc/get_fusion_reaction(var/p_react, var/s_react, var/m_energy) return 1 - // High end reactions. /decl/fusion_reaction/boron_hydrogen p_react = "boron" diff --git a/code/modules/power/fusion/fusion_reagents.dm b/code/modules/power/fusion/fusion_reagents.dm index 875bf63fee0..80b1cbb3361 100644 --- a/code/modules/power/fusion/fusion_reagents.dm +++ b/code/modules/power/fusion/fusion_reagents.dm @@ -5,4 +5,14 @@ description = "A colorless, odorless, tasteless and generally inert gas used in fusion reactors. Non-radioactive." id = "helium-3" reagent_state = GAS - color = "#808080" \ No newline at end of file + color = "#808080" + +/obj/structure/reagent_dispensers/he3 + name = "fueltank" + desc = "A fueltank." + icon = 'icons/obj/objects.dmi' + icon_state = "weldtank" + amount_per_transfer_from_this = 10 + New() + ..() + reagents.add_reagent("helium-3",1000) \ No newline at end of file diff --git a/code/modules/power/fusion/magpower.dm b/code/modules/power/fusion/magpower.dm new file mode 100644 index 00000000000..c6882c6eb36 --- /dev/null +++ b/code/modules/power/fusion/magpower.dm @@ -0,0 +1,54 @@ +#define ENERGY_PER_K 20 +#define MINIMUM_PLASMA_TEMPERATURE 10000 + +/obj/machinery/power/hydromagnetic_trap + name = "\improper hydromagnetic trap" + desc = "A device for extracting power from high-energy plasma in toroidal fields." + icon = 'icons/obj/machines/power/fusion.dmi' + icon_state = "mag_trap0" + anchored = 1 + var/list/things_in_range = list()//what is in a radius of us? + var/list/fields_in_range = list()//What EM fields are in that radius? + var/list/active_field = list()//Our active field. + var/active = 0 //are we even on? + var/id_tag //needed for !!rasins!! + +/obj/machinery/power/hydromagnetic_trap/process() + if(!powernet && anchored == 1) + return + spawn(1) + Active() + Search() + +/obj/machinery/power/hydromagnetic_trap/proc/Search()//let's not have +100 instances of the same field in active_field. + things_in_range = range(7, src) + var/obj/effect/fusion_em_field/FFF + for (FFF in things_in_range) + fields_in_range.Add(FFF) + for (FFF in fields_in_range) + if (active_field.len > 0) + return + else if (active_field.len == 0) + Link() + return + +/obj/machinery/power/hydromagnetic_trap/proc/Link() //discover our EM field + var/obj/effect/fusion_em_field/FFF + for(FFF in fields_in_range) + if (FFF.id_tag != id_tag) + return + active_field += FFF + active = 1 + return + +/obj/machinery/power/hydromagnetic_trap/proc/Active()//POWERRRRR + var/obj/effect/fusion_em_field/FF + if (active == 0) + return + for (FF in active_field) + if (FF.plasma_temperature >= MINIMUM_PLASMA_TEMPERATURE) + icon_state = "mag_trap1" + add_avail(ENERGY_PER_K * FF.plasma_temperature) + if (FF.plasma_temperature <= MINIMUM_PLASMA_TEMPERATURE) + icon_state = "mag_trap0" + return diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 6a40cf3b8ea..5a20aaeaebf 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -111,7 +111,7 @@ var/overheating = 0 //if this gets high enough the generator explodes /obj/machinery/power/port_gen/pacman/initialize() - ..() + . = ..() if(anchored) connect_to_network() diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index d57c133cd1a..d8712a0e4c1 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -53,7 +53,7 @@ if(isliving(user)) hasShocked = 1 var/shock_damage = min(rand(30,40),rand(30,40)) - user.electrocute_act(shock_damage, src) + user.electrocute_act(shock_damage, src, 1, BP_TORSO) var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src))) user.throw_at(target, 200, 4) @@ -61,7 +61,6 @@ sleep(20) hasShocked = 0 - return /obj/machinery/containment_field/proc/set_master(var/master1,var/master2) if(!master1 || !master2) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index e5dead7ee5a..f4f65794208 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -42,7 +42,7 @@ return 1 /obj/machinery/power/emitter/initialize() - ..() + . = ..() if(state == 2 && anchored) connect_to_network() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index dd5c5336bd2..360cad96bfb 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -348,7 +348,7 @@ var/list/solars_list = list() /obj/machinery/power/solar_control/initialize() - ..() + . = ..() if(!powernet) return set_panels(cdir) connect_to_network() diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 71cb8a35e7c..4327bbf42d1 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -285,7 +285,7 @@ else if(closest_mob) var/shock_damage = Clamp(round(power/400), 10, 90) + rand(-5, 5) - closest_mob.electrocute_act(shock_damage, source, 1/*, tesla_shock = 1, stun = stun_mobs*/) + closest_mob.electrocute_act(shock_damage, source, 1, ran_zone()) if(issilicon(closest_mob)) var/mob/living/silicon/S = closest_mob if(stun_mobs) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 84697e668dd..70138487e37 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -25,6 +25,16 @@ charge_cost = 480 projectile_type = /obj/item/projectile/ion +/obj/item/weapon/gun/energy/phasegun + name = "phase pistol" + desc = "The NT Mk26 EW Apollo is an energy handgun, specifically designed for use against wildlife." + icon_state = "phase" + item_state = "taser" //I don't have an in-hand sprite, taser will be fine + slot_flags = SLOT_BELT|SLOT_HOLSTER + charge_cost = 300 + projectile_type = /obj/item/projectile/energy/phase + + /obj/item/weapon/gun/energy/decloner name = "biological demolecularisor" desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." diff --git a/code/modules/projectiles/guns/modular_guns.dm b/code/modules/projectiles/guns/modular_guns.dm new file mode 100644 index 00000000000..8f81e971c47 --- /dev/null +++ b/code/modules/projectiles/guns/modular_guns.dm @@ -0,0 +1,174 @@ +//This will likely drive me insane, but fuck it. Let's give it a shot. -k22 +//This was heavily assisted by MoondancerPony +/obj/item/weapon/gun/energy/modular + name = "modular weapon" + desc = "You shouldn't be seeing this. Contact your local time-police station." + icon_state = "mod_pistol" + cell_type = /obj/item/weapon/cell/device/weapon + charge_cost = 120 + + var/max_components = 3 //How many components we can hold. + var/capacitor_rating = 0 //How good are the capacitors inside us? + var/laser_rating = 0 //How good are the lasers inside of us? + var/manipulator_rating = 0 //How good are the manipulators inside us? + var/assembled = 1 //Are we closed up? + var/max_burst_size = 5 //Don't let our maximum burst size get too high. + var/list/guncomponents = list() //Generate our list of components. + var/accepted_components = list( + /obj/item/weapon/stock_parts/capacitor/, + /obj/item/weapon/stock_parts/capacitor/adv, + /obj/item/weapon/stock_parts/capacitor/super, + /obj/item/weapon/stock_parts/micro_laser/, + /obj/item/weapon/stock_parts/micro_laser/high, + /obj/item/weapon/stock_parts/micro_laser/ultra, + /obj/item/weapon/stock_parts/manipulator/, + /obj/item/weapon/stock_parts/manipulator/nano, + /obj/item/weapon/stock_parts/manipulator/pico, + ) + //Excessively long because it won't accept subtypes for some reason! + + +/obj/item/weapon/gun/energy/modular/New() //Initialize our components. + ..() + guncomponents = list() + guncomponents += new /obj/item/weapon/stock_parts/capacitor + guncomponents += new /obj/item/weapon/stock_parts/micro_laser + guncomponents += new /obj/item/weapon/stock_parts/manipulator + CheckParts() + FireModeModify() + +/obj/item/weapon/gun/energy/modular/proc/CheckParts() //What parts do we have inside us, and how good are they? + capacitor_rating = 0 + laser_rating = 0 + manipulator_rating = 0 + for(var/obj/item/weapon/stock_parts/capacitor/CA in guncomponents) + capacitor_rating += CA.rating + for(var/obj/item/weapon/stock_parts/micro_laser/ML in guncomponents) + laser_rating += ML.rating + for(var/obj/item/weapon/stock_parts/manipulator/MA in guncomponents) + manipulator_rating += MA.rating + FireModeModify() + +/obj/item/weapon/gun/energy/modular/attackby(obj/item/O, mob/user) + if(istype(O, /obj/item/weapon/screwdriver)) + to_chat(user, "You [assembled ? "disassemble" : "assemble"] the gun.") + assembled = !assembled + playsound(src, O.usesound, 50, 1) + return + if(istype(O, /obj/item/weapon/crowbar)) + if(assembled == 1) + to_chat(user, "Disassemble the [src] first!") + return + for(var/obj/item/I in guncomponents) + to_chat(user, "You remove the gun's components.") + playsound(src, O.usesound, 50, 1) + I.forceMove(get_turf(src)) + guncomponents.Remove(I) + CheckParts() + return + //Someone's attacking us, and it's not anything we have a special case for (i.e. a tool) + ..() + if(assembled) // can't put anything in + return + if(!(O.type in accepted_components))//check if we can accept it + to_chat(user, "You can't add this to [src]!") + return + if(guncomponents.len >= max_components) //We have too many componenets and can't fit more. + to_chat(user, "You can't add any more components!") + return + if(istype(O, /obj/item/weapon/stock_parts/capacitor) && capacitor_rating == 5) + to_chat(user, "You can't add any more capacitors!") + return + user.drop_item() + guncomponents += O + O.forceMove(src) + to_chat(user, "You add a component to the [src]") + CheckParts() + + +/obj/item/weapon/gun/energy/modular/proc/FireModeModify() //Check our laser, manipulator, and capacitor ratings, adjust stun and lethal firemodes depending on laser / manipulator rating and burst size depending on capacitors. + //check our lethal and stun ratings depending on laser and manipulator rating. + var/burstmode = capacitor_rating + var/beammode + var/beammode_lethal + var/chargecost + var/chargecost_lethal + + if(laser_rating >= 15) + beammode_lethal = /obj/item/projectile/beam/sniper + beammode = /obj/item/projectile/beam/stun + chargecost = 300 + chargecost_lethal = 600 + else if(laser_rating >= 10) + beammode_lethal = /obj/item/projectile/beam/xray + beammode = /obj/item/projectile/beam/stun + chargecost = 300 + chargecost_lethal = 200 + else if(laser_rating == 8 && manipulator_rating == 5) //very specific set of combinations. No, you can't make a pulse rifle. Sorry research. + beammode_lethal = /obj/item/projectile/beam/heavylaser + beammode = /obj/item/projectile/beam/stun + chargecost = 300 + chargecost_lethal = 600 + else if(laser_rating >= 5) + beammode_lethal = /obj/item/projectile/beam/midlaser + beammode = /obj/item/projectile/beam/stun/med + chargecost = 180 + chargecost_lethal = 240 + else if(laser_rating < 5) + beammode_lethal = /obj/item/projectile/beam/weaklaser + beammode = /obj/item/projectile/beam/stun/weak + chargecost = 100 + chargecost_lethal = 200 + + firemodes = list( + new /datum/firemode(src, list(mode_name="stun", projectile_type=beammode, fire_sound='sound/weapons/Taser.ogg', charge_cost = chargecost)), + new /datum/firemode(src, list(mode_name="lethal", projectile_type=beammode_lethal, fire_sound='sound/weapons/Laser.ogg', charge_cost = chargecost_lethal)), + new /datum/firemode(src, list(mode_name="[burstmode] shot stun", projectile_type=beammode, fire_sound='sound/weapons/Taser.ogg', charge_cost = chargecost, burst = burstmode)), + new /datum/firemode(src, list(mode_name="[burstmode] shot lethal", projectile_type=beammode_lethal, fire_sound='sound/weapons/Laser.ogg', charge_cost = chargecost_lethal, burst = burstmode)), + ) + +/obj/item/weapon/gun/energy/modular/load_ammo(var/obj/item/C, mob/user) + if(istype(C, cell_type)) + if(self_recharge || battery_lock) + user << "[src] does not have a battery port." + return + var/obj/item/weapon/cell/P = C + if(power_supply) + user << "[src] already has a power cell." + else + user.visible_message("[user] is reloading [src].", "You start to insert [P] into [src].") + if(do_after(user, 10)) + user.remove_from_mob(P) + power_supply = P + P.loc = src + user.visible_message("[user] inserts [P] into [src].", "You insert [P] into [src].") + playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1) + update_icon() + update_held_icon() + return + +/obj/item/weapon/gun/energy/modular/pistol + name = "modular pistol" + icon_state = "mod_pistol" + max_components = 6 + desc = "A bulky modular pistol frame. This only only accepts six parts." + origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 3) + burst_delay = 2 + +/obj/item/weapon/gun/energy/modular/carbine + name = "modular carbine" + icon_state = "mod_carbine" + max_components = 8 + desc = "A modular version of the standard laser carbine. This one can hold 8 components." + origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 3, TECH_MATERIAL = 3) + burst_delay = 2 + +/obj/item/weapon/gun/energy/modular/cannon + name = "modular cannon" + icon_state = "mod_cannon" + max_components = 14 + desc = "Say hello, to my little friend!" + one_handed_penalty = 4 //dual wielding = no. + cell_type = /obj/item/weapon/cell //We're bigger. We can use much larger power cells. + origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 6, TECH_MATERIAL = 5, TECH_BLUESPACE = 4) //its a damn cannon capable of holding a huge amount of parts. + burst_delay = 4 //preventing extreme silliness. \ No newline at end of file diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index d3bc093cacb..81381461630 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -195,4 +195,10 @@ light_color = "#0000FF" embed_chance = 0 - muzzle_type = /obj/effect/projectile/pulse/muzzle \ No newline at end of file + muzzle_type = /obj/effect/projectile/pulse/muzzle + +/obj/item/projectile/energy/phase + kill_count = 4 + damage = 5 + SA_bonus_damage = 55 // 60 total on animals. + SA_vulnerability = SA_ANIMAL \ No newline at end of file diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index dc4401f0bcc..a6e158befad 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -491,6 +491,15 @@ other types of metals and chemistry for reagents). build_path = /obj/item/roller/adv sort_string = "MBBAF" +/datum/design/item/medical/enhanced_analyzer + name = "enhanced health analyzer" + desc = "A prototype version of the regular health analyzer, able to distinguish the location of more serious injuries as well as accurately determine radiation levels." + id = "advanced_analyzer" + req_tech = list(TECH_MAGNET = 5, TECH_BIO = 6) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 1500) + build_path = /obj/item/device/healthanalyzer/advanced + sort_string = "MBBAG" + /datum/design/item/implant materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index db06449d18c..a6f6b89069e 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -110,11 +110,12 @@ won't update every console in existence) but it's more of a hassle to do. Also, files = new /datum/research(src) //Setup the research data holder. if(!id) for(var/obj/machinery/r_n_d/server/centcom/S in machines) - S.initialize() + S.update_connections() break /obj/machinery/computer/rdconsole/initialize() SyncRDevices() + . = ..() /obj/machinery/computer/rdconsole/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) //Loading a disk into it. diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 946910ce23d..f38d2798d3c 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -22,7 +22,6 @@ component_parts += new /obj/item/stack/cable_coil(src) component_parts += new /obj/item/stack/cable_coil(src) RefreshParts() - initialize(); /obj/machinery/r_n_d/server/Destroy() griefProtection() @@ -35,6 +34,7 @@ idle_power_usage /= max(1, tot_rating) /obj/machinery/r_n_d/server/initialize() + . = ..() if(!files) files = new /datum/research(src) var/list/temp_list @@ -123,8 +123,7 @@ name = "Central R&D Database" server_id = -1 -/obj/machinery/r_n_d/server/centcom/initialize() - ..() +/obj/machinery/r_n_d/server/centcom/proc/update_connections() var/list/no_id_servers = list() var/list/server_ids = list() for(var/obj/machinery/r_n_d/server/S in machines) diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm index b832e94dbd5..5555e68fe9a 100644 --- a/code/modules/shuttles/escape_pods.dm +++ b/code/modules/shuttles/escape_pods.dm @@ -84,7 +84,7 @@ name = "escape pod berth controller" /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/initialize() - ..() + . = ..() docking_program = new/datum/computer/file/embedded_program/docking/simple/escape_pod(src) program = docking_program diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index 56fc64c0163..b956f3528d9 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -1,5 +1,5 @@ -//These lists are populated in /datum/shuttle_controller/New() -//Shuttle controller is instantiated in master_controller.dm. +//These lists are populated in /datum/controller/subsystem/shuttles/proc/setup_shuttle_docks() +//Shuttle subsystem is instantiated in shuttles.dm. //shuttle moving state defines are in setup.dm @@ -200,7 +200,7 @@ throwy = T.y for(var/turf/T in dstturfs) - var/turf/D = locate(T.x, throwy - 1, 1) + var/turf/D = locate(T.x, throwy - 1, T.z) for(var/atom/movable/AM as mob|obj in T) AM.Move(D) diff --git a/code/modules/shuttles/shuttles_web.dm b/code/modules/shuttles/shuttles_web.dm index 5034d249ac0..a8ca493470d 100644 --- a/code/modules/shuttles/shuttles_web.dm +++ b/code/modules/shuttles/shuttles_web.dm @@ -128,6 +128,31 @@ icon_state = "flightcomp_center" icon_keyboard = "flight_center_key" icon_screen = "flight_center" + var/list/my_doors //Should be list("id_tag" = "Pretty Door Name", ...) + var/list/my_sensors //Should be list("id_tag" = "Pretty Sensor Name", ...) + +/obj/machinery/computer/shuttle_control/web/initialize() + . = ..() + var/area/my_area = get_area(src) + if(my_doors) + var/list/find_doors = my_doors + my_doors = list() + for(var/obj/machinery/door/airlock/A in my_area) + if(A.id_tag in find_doors) + my_doors[find_doors[A.id_tag]] = A + find_doors -= A.id_tag + for(var/lost in find_doors) + log_debug("[my_area] shuttle computer couldn't find [lost] door!") + + if(my_sensors) + var/list/find_sensors = my_sensors + my_sensors = list() + for(var/obj/machinery/shuttle_sensor/S in my_area) + if(S.id_tag in find_sensors) + my_sensors[find_sensors[S.id_tag]] = S + find_sensors -= S.id_tag + for(var/lost in find_sensors) + log_debug("[my_area] shuttle computer couldn't find [lost] sensor!") // Fairly copypasta-y. /obj/machinery/computer/shuttle_control/web/attack_hand(mob/user) @@ -244,6 +269,21 @@ if(total_time) // Need to check or we might divide by zero. percent_finished = (elapsed_time / total_time) * 100 + + var/list/doors = list() + if(my_doors) + for(var/doorname in my_doors) + var/obj/machinery/door/airlock/A = my_doors[doorname] + if(A) + doors[doorname] = list("bolted" = A.locked, "open" = !A.density) + + var/list/sensors = list() + if(my_sensors) + for(var/sensorname in my_sensors) + var/obj/machinery/shuttle_sensor/S = my_sensors[sensorname] + if(S) + sensors[sensorname] = S.air_list() + data = list( "shuttle_location" = shuttle_location, "future_location" = future_location, @@ -261,13 +301,15 @@ "cloaked" = shuttle.cloaked ? 1 : 0, "can_autopilot" = shuttle.can_autopilot ? 1 : 0, "autopilot" = shuttle.autopilot ? 1 : 0, - "can_rename" = shuttle.can_rename ? 1 : 0 + "can_rename" = shuttle.can_rename ? 1 : 0, + "doors" = doors, + "sensors" = sensors ) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) - ui = new(user, src, ui_key, "flight.tmpl", "[shuttle.visible_name] Flight Computer", 470, 500) + ui = new(user, src, ui_key, "flight.tmpl", "[shuttle.visible_name] Flight Computer", 500, 500) ui.set_initial_data(data) ui.open() ui.set_auto_update(1) @@ -384,18 +426,13 @@ /obj/shuttle_connector name = "shuttle connector" var/shuttle_name //Text name of the shuttle to connect to - var/start_time = 60 SECONDS //After round start (needs to be some time, to let other destinations set up) var/list/destinations //Make sure this STARTS with a destination that builds a route to one that always exists as an anchor. /obj/shuttle_connector/initialize() . = ..() + SSshuttles.OnDocksInitialized(CALLBACK(src, .proc/setup_routes)) - processing_objects += src - -/obj/shuttle_connector/process() - if(world.time < start_time) - return - +/obj/shuttle_connector/proc/setup_routes() if(destinations && shuttle_name) var/datum/shuttle/web_shuttle/ES = shuttle_controller.shuttles[shuttle_name] var/datum/shuttle_web_master/WM = ES.web_master @@ -408,6 +445,46 @@ var/travel_delay = D.routes_to_make[type_to_link] D.link_destinations(WM.get_destination_by_type(type_to_link), D.preferred_interim_area, travel_delay) - processing_objects -= src - qdel(src) + +//A sensor for detecting air outside shuttles! Handy, that. +/obj/machinery/shuttle_sensor + name = "environment sensor" + icon = 'icons/obj/airlock_machines.dmi' + icon_state = "airlock_sensor_standby" + var/id_tag + +/obj/machinery/shuttle_sensor/process() + return PROCESS_KILL //nty + +/obj/machinery/shuttle_sensor/proc/air_list() + . = list("reading" = FALSE) + var/turf/T = get_step(src,dir) + + if(isnull(T)) + return + + var/list/aircontents + var/datum/gas_mixture/environment = T.return_air() + var/pressure = environment.return_pressure() + var/total_moles = environment.total_moles + + if(total_moles) + var/o2_level = environment.gas["oxygen"]/total_moles + var/n2_level = environment.gas["nitrogen"]/total_moles + var/co2_level = environment.gas["carbon_dioxide"]/total_moles + var/phoron_level = environment.gas["phoron"]/total_moles + var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level) + aircontents = list(\ + "pressure" = "[round(pressure,0.1)]",\ + "nitrogen" = "[round(n2_level*100,0.1)]",\ + "oxygen" = "[round(o2_level*100,0.1)]",\ + "carbon_dioxide" = "[round(co2_level*100,0.1)]",\ + "phoron" = "[round(phoron_level*100,0.01)]",\ + "other" = "[round(unknown_level, 0.01)]",\ + "temp" = "[round(environment.temperature-T0C,0.1)]",\ + "reading" = TRUE\ + ) + + if(aircontents) + return aircontents diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index 13fe7557517..003535a5907 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -58,7 +58,7 @@ take_damage(100) /obj/structure/table/initialize() - ..() + . = ..() // One table per turf. for(var/obj/structure/table/T in loc) diff --git a/code/modules/turbolift/turbolift_map.dm b/code/modules/turbolift/turbolift_map.dm index 8930bf34d62..effd03e8a6c 100644 --- a/code/modules/turbolift/turbolift_map.dm +++ b/code/modules/turbolift/turbolift_map.dm @@ -23,7 +23,7 @@ ..() /obj/turbolift_map_holder/initialize() - + . = ..() // Create our system controller. var/datum/turbolift/lift = new() diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index c59ffe7e640..74ef6075fdf 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -22,6 +22,7 @@ // Standard procs //------------------------------------------- /obj/vehicle/train/initialize() + . = ..() for(var/obj/vehicle/train/T in orange(1, src)) latch(T) diff --git a/code/modules/xenoarcheaology/anomaly_container.dm b/code/modules/xenoarcheaology/anomaly_container.dm index 616b04b10d9..6372405300a 100644 --- a/code/modules/xenoarcheaology/anomaly_container.dm +++ b/code/modules/xenoarcheaology/anomaly_container.dm @@ -8,7 +8,7 @@ var/obj/machinery/artifact/contained /obj/structure/anomaly_container/initialize() - ..() + . = ..() var/obj/machinery/artifact/A = locate() in loc if(A) diff --git a/code/modules/xenoarcheaology/sampling.dm b/code/modules/xenoarcheaology/sampling.dm index e79957ba282..ae7c203fa3d 100644 --- a/code/modules/xenoarcheaology/sampling.dm +++ b/code/modules/xenoarcheaology/sampling.dm @@ -70,15 +70,15 @@ artifact_distance = rand() artifact_id = container.artifact_find.artifact_id else - if(master_controller) //Sanity check due to runtimes ~Z - for(var/turf/simulated/mineral/T in master_controller.artifact_spawning_turfs) + if(SSxenoarch) //Sanity check due to runtimes ~Z + for(var/turf/simulated/mineral/T in SSxenoarch.artifact_spawning_turfs) if(T.artifact_find) var/cur_dist = get_dist(container, T) * 2 if( (artifact_distance < 0 || cur_dist < artifact_distance)) artifact_distance = cur_dist + rand() * 2 - 1 artifact_id = T.artifact_find.artifact_id else - master_controller.artifact_spawning_turfs.Remove(T) + SSxenoarch.artifact_spawning_turfs.Remove(T) /obj/item/device/core_sampler name = "core sampler" diff --git a/code/modules/xenoarcheaology/tools/artifact_analyser.dm b/code/modules/xenoarcheaology/tools/artifact_analyser.dm index 553b6674dff..e169a62061a 100644 --- a/code/modules/xenoarcheaology/tools/artifact_analyser.dm +++ b/code/modules/xenoarcheaology/tools/artifact_analyser.dm @@ -15,7 +15,7 @@ var/report_num = 0 /obj/machinery/artifact_analyser/initialize() - ..() + . = ..() reconnect_scanner() /obj/machinery/artifact_analyser/proc/reconnect_scanner() diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm index 1d79a894497..17412b4a8be 100644 --- a/code/modules/xenoarcheaology/tools/tools.dm +++ b/code/modules/xenoarcheaology/tools/tools.dm @@ -57,8 +57,8 @@ var/nearestSimpleTargetDist = -1 var/turf/cur_turf = get_turf(src) - if(master_controller) //Sanity check due to runtimes ~Z - for(var/A in master_controller.artifact_spawning_turfs) + if(SSxenoarch) //Sanity check due to runtimes ~Z + for(var/A in SSxenoarch.artifact_spawning_turfs) var/turf/simulated/mineral/T = A if(T.density && T.artifact_find) if(T.z == cur_turf.z) @@ -67,9 +67,9 @@ nearestTargetDist = cur_dist + rand() * 2 - 1 nearestTargetId = T.artifact_find.artifact_id else - master_controller.artifact_spawning_turfs.Remove(T) + SSxenoarch.artifact_spawning_turfs.Remove(T) - for(var/A in master_controller.digsite_spawning_turfs) + for(var/A in SSxenoarch.digsite_spawning_turfs) var/turf/simulated/mineral/T = A if(T.density && T.finds && T.finds.len) if(T.z == cur_turf.z) @@ -77,7 +77,7 @@ if(nearestSimpleTargetDist < 0 || cur_dist < nearestSimpleTargetDist) nearestSimpleTargetDist = cur_dist + rand() * 2 - 1 else - master_controller.digsite_spawning_turfs.Remove(T) + SSxenoarch.digsite_spawning_turfs.Remove(T) if(nearestTargetDist >= 0) user << "Exotic energy detected on wavelength '[nearestTargetId]' in a radius of [nearestTargetDist]m[nearestSimpleTargetDist > 0 ? "; small anomaly detected in a radius of [nearestSimpleTargetDist]m" : ""]" diff --git a/code/unit_tests/unit_test.dm b/code/unit_tests/unit_test.dm index 605cf8fcac6..7537f14022f 100644 --- a/code/unit_tests/unit_test.dm +++ b/code/unit_tests/unit_test.dm @@ -34,11 +34,11 @@ var/total_unit_tests = 0 world.Del() var/said_msg = 0 - while(ticker.pregame_timeleft && ticker.pregame_timeleft > 160) // Make sure the initial startup is complete. - if(ticker.pregame_timeleft < 175 && !said_msg) + while(!Master.current_runlevel) // Make sure the initial startup is complete. + if(!said_msg) said_msg = 1 - log_unit_test("Pregame Count down has started, giving it 20 seconds to finish.") - sleep(1) + log_unit_test("Waiting for subystems initilization to finish.") + stoplag(10) world.save_mode("extended") diff --git a/code/world.dm b/code/world.dm index c4dbbf72b00..14cc49a3fb9 100644 --- a/code/world.dm +++ b/code/world.dm @@ -40,6 +40,7 @@ var/global/datum/global_init/init = new () #define RECOMMENDED_VERSION 501 /world/New() + world.log << "Map Loading Complete" //logs var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day") href_logfile = file("data/logs/[date_string] hrefs.htm") @@ -115,10 +116,12 @@ var/global/datum/global_init/init = new () processScheduler = new master_controller = new /datum/controller/game_controller() + + processScheduler.deferSetupFor(/datum/controller/process/ticker) + processScheduler.setup() Master.Initialize(10, FALSE) - spawn(1) - processScheduler.deferSetupFor(/datum/controller/process/ticker) - processScheduler.setup() + + spawn(1) master_controller.setup() #if UNIT_TEST initialize_unit_tests() diff --git a/html/changelogs/Anewbe - ExplorerGear.yml b/html/changelogs/Anewbe - ExplorerGear.yml new file mode 100644 index 00000000000..19eba8cbfbb --- /dev/null +++ b/html/changelogs/Anewbe - ExplorerGear.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Anewbe + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Lessens the bomb, bio, and rad protection on the Explorer Suit." + - tweak: "Replaces the Hunting Rifle cabinets with a Phase Pistol cabinet. Same general purpose, shoot animals, kill animals. Shoot people, get laughed at." diff --git a/html/changelogs/Anewbe - MechsFall.yml b/html/changelogs/Anewbe - MechsFall.yml new file mode 100644 index 00000000000..af4d4acedbb --- /dev/null +++ b/html/changelogs/Anewbe - MechsFall.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Anewbe + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "You need a parachute to survive atmospheric reentry, closets, mechs, and other impromptu parachutes will not longer prevent splatting." diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index 6b0397c9e11..54b20e01650 100644 Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index c6d99196272..e0e3305d44f 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index d7a107da940..4bb7b955a0d 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/icons/obj/machines/power/fusion.dmi b/icons/obj/machines/power/fusion.dmi index be236a145e9..4d20f04fcda 100644 Binary files a/icons/obj/machines/power/fusion.dmi and b/icons/obj/machines/power/fusion.dmi differ diff --git a/maps/southern_cross/southern_cross-3.dmm b/maps/southern_cross/southern_cross-3.dmm index fb27f43910c..84dd6a60490 100644 --- a/maps/southern_cross/southern_cross-3.dmm +++ b/maps/southern_cross/southern_cross-3.dmm @@ -110,8 +110,8 @@ "cf" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main) "cg" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main) "ch" = (/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled,/area/surface/outpost/main/security) -"ci" = (/obj/machinery/light{dir = 1},/obj/structure/closet/secure_closet/guncabinet/rifle,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/security) -"cj" = (/obj/structure/closet/secure_closet/guncabinet/rifle,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/security) +"ci" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/closet/secure_closet/guncabinet/phase,/turf/simulated/floor/tiled,/area/surface/outpost/main/security) +"cj" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/structure/closet/secure_closet/guncabinet/phase,/turf/simulated/floor/tiled,/area/surface/outpost/main/security) "ck" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/table/standard,/obj/item/weapon/book/codex/corp_regs,/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/red/border{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main/security) "cl" = (/obj/machinery/status_display,/turf/simulated/wall,/area/surface/outpost/main/gateway) "cm" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway) diff --git a/maps/southern_cross/structures/closets/misc.dm b/maps/southern_cross/structures/closets/misc.dm index d3a8e34f53d..77ecb795f3d 100644 --- a/maps/southern_cross/structures/closets/misc.dm +++ b/maps/southern_cross/structures/closets/misc.dm @@ -26,6 +26,18 @@ new /obj/item/weapon/gun/projectile/shotgun/pump/rifle(src) return +/obj/structure/closet/secure_closet/guncabinet/phase + name = "phase pistol cabinet" + req_one_access = list(access_explorer,access_brig) + +/obj/structure/closet/secure_closet/guncabinet/phase/New() + ..() + new /obj/item/weapon/gun/energy/phasegun(src) + new /obj/item/weapon/gun/energy/phasegun(src) + // One spare cell per gun + new /obj/item/weapon/cell/device/weapon(src) + new /obj/item/weapon/cell/device/weapon(src) + //Explorer Lockers /obj/structure/closet/secure_closet/explorer diff --git a/maps/southern_cross/turfs/outdoors.dm b/maps/southern_cross/turfs/outdoors.dm index 443e2435184..6c0e2b90350 100644 --- a/maps/southern_cross/turfs/outdoors.dm +++ b/maps/southern_cross/turfs/outdoors.dm @@ -162,4 +162,5 @@ // Step trigger to fall down to planet Sif /obj/effect/step_trigger/teleporter/planetary_fall/sif/initialize() - planet = planet_sif \ No newline at end of file + planet = planet_sif + . = ..() diff --git a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm index a12f7998680..9fac74ac0ed 100644 --- a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm +++ b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm @@ -3,37 +3,38 @@ "c" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/CaveTrench) "d" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) "e" = (/turf/simulated/floor/outdoors/rocks,/area/submap/CaveTrench) -"f" = (/turf/simulated/floor/water,/area/submap/CaveTrench) -"g" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"h" = (/mob/living/simple_animal/fish/trout{faction = "malf_drone"},/turf/simulated/floor/water,/area/submap/CaveTrench) +"f" = (/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench) +"g" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"h" = (/mob/living/simple_animal/fish/trout{faction = "malf_drone"},/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench) "i" = (/obj/effect/decal/remains/human,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) "j" = (/turf/simulated/wall,/area/submap/CaveTrench) "k" = (/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) -"l" = (/mob/living/simple_animal/fish/trout,/turf/simulated/floor/water,/area/submap/CaveTrench) +"l" = (/mob/living/simple_animal/fish/trout,/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench) "m" = (/turf/simulated/wall/wood,/area/submap/CaveTrench) -"n" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lantern,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"o" = (/obj/structure/table/woodentable,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) -"p" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) -"q" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) -"r" = (/obj/structure/table/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"s" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "Rellek's telling me that we're in deep shit if the townies found out I'm cooking up drones out here. Like I give a fuck, We're minning our asses off only to dig into some bug nest to get our legs chewed. Well I'm not looking a gift horse in the mouth. Those drone dudes out in the wild hooked us up with these machines so long as they get some of the metal we dig up. Win win for us, Guess we're retiring early after all."; name = "Note"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"t" = (/obj/structure/table/steel,/obj/item/robot_parts/robot_component/actuator,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"u" = (/obj/effect/decal/cleanable/blood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"v" = (/obj/structure/simple_door/wood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"w" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) -"x" = (/obj/structure/table/steel,/obj/item/device/robotanalyzer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"y" = (/obj/structure/table/steel,/obj/item/weapon/storage/toolbox,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"z" = (/obj/structure/table/bench/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"A" = (/obj/effect/decal/remains,/obj/item/clothing/under/rank/miner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"B" = (/turf/simulated/shuttle/plating,/area/submap/CaveTrench) -"C" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) -"D" = (/obj/structure/coatrack,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) -"E" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) -"F" = (/obj/item/weapon/storage/box/shotgunammo,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) -"G" = (/obj/structure/table/steel,/obj/item/robot_parts/l_leg,/obj/item/robot_parts/head,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"H" = (/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) -"I" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/shuttle/plating,/area/submap/CaveTrench) -"J" = (/obj/machinery/drone_fabricator,/turf/simulated/shuttle/plating,/area/submap/CaveTrench) +"n" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"o" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lantern,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"p" = (/obj/structure/table/woodentable,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"q" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"r" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"s" = (/obj/structure/table/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"t" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "Rellek's telling me that we're in deep shit if the townies found out I'm cooking up drones out here. Like I give a fuck, We're minning our asses off only to dig into some bug nest to get our legs chewed. Well I'm not looking a gift horse in the mouth. Those drone dudes out in the wild hooked us up with these machines so long as they get some of the metal we dig up. Win win for us, Guess we're retiring early after all."; name = "Note"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"u" = (/obj/structure/table/steel,/obj/item/robot_parts/robot_component/actuator,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"v" = (/obj/effect/decal/cleanable/blood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"w" = (/obj/structure/simple_door/wood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"x" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"y" = (/obj/structure/table/steel,/obj/item/device/robotanalyzer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"z" = (/obj/structure/table/steel,/obj/item/weapon/storage/toolbox,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"A" = (/obj/structure/table/bench/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"B" = (/obj/effect/decal/remains,/obj/item/clothing/under/rank/miner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"C" = (/turf/simulated/shuttle/plating,/area/submap/CaveTrench) +"D" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"E" = (/obj/structure/coatrack,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"F" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"G" = (/obj/item/weapon/storage/box/shotgunammo,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"H" = (/obj/structure/table/steel,/obj/item/robot_parts/l_leg,/obj/item/robot_parts/head,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"I" = (/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"J" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/shuttle/plating,/area/submap/CaveTrench) +"K" = (/obj/machinery/drone_fabricator,/turf/simulated/shuttle/plating,/area/submap/CaveTrench) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -51,9 +52,9 @@ abeeeeeeeeffkkfffeeeeeeeeeeeddddddeeeedddddda abbbdddddeeekkeeeddddddddddddddddddddddddddca abbcdddddddjkkjddddddddddddddddddddddddddddca abcccdddddddddddddddmmmmmmmmddddddddddddidbca -abbbcidddddddgdddddnmopkkqkmmdddddddddddbbbca -abbbcccccrstudddddddvkkkqwqmmdddddddddddbbbba -abbbbbbccccxyzdABBddmCDEkqFmmdddddddccccbbbba -abbbbbbbccccGHuIJBBdmmmmmmmmdddddccccccbcbbba +abbbcidddddddndddddompqkkrkmmdddddddddddbbbca +abbbcccccstuvdddddddwkkkrxrmmdddddddddddbbbba +abbbbbbccccyzAdBCCddmDEFkrGmmdddddddccccbbbba +abbbbbbbccccHIvJKCCdmmmmmmmmdddddccccccbcbbba aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} diff --git a/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm b/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm index aa331159b79..37b3484d140 100644 --- a/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm +++ b/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm @@ -9,106 +9,143 @@ "ai" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark6"; name = "Unknown Shuttle"; tag = "icon-dark6"},/area/submap/Blackshuttledown) "aj" = (/turf/simulated/shuttle/wall/dark{icon_state = "dark0"; name = "Unknown Shuttle"; tag = "icon-dark0"},/area/submap/Blackshuttledown) "ak" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark10"; name = "Unknown Shuttle"; tag = "icon-dark10"},/area/submap/Blackshuttledown) -"al" = (/obj/machinery/door/airlock/external{density = 1; frequency = 1331; id_tag = "merc_shuttle_outer"; name = "Ship External Access"; req_access = list(150)},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"am" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/shuttle/wall/dark{icon_state = "dark0"; name = "Unknown Shuttle"; tag = "icon-dark0"},/area/submap/Blackshuttledown) -"an" = (/obj/structure/shuttle/engine/propulsion{dir = 4; icon_state = "propulsion_l"},/turf/template_noop,/area/submap/Blackshuttledown) -"ao" = (/obj/machinery/light{dir = 1},/obj/structure/table/rack,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"ap" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aq" = (/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"ar" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"as" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"at" = (/obj/machinery/organ_printer/flesh,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"au" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark5"; name = "Unknown Shuttle"; tag = "icon-dark5"},/area/submap/Blackshuttledown) -"av" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/p90,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aw" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"ax" = (/obj/machinery/optable,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"ay" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"az" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark9"; name = "Unknown Shuttle"; tag = "icon-dark9"},/area/submap/Blackshuttledown) -"aA" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark6"; name = "Unknown Shuttle"; tag = "icon-dark6"},/area/submap/Blackshuttledown) -"aB" = (/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aC" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aD" = (/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Dosen't look friendly in the slightest."; name = "Unknown Individual."; say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!"); speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aE" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aF" = (/obj/structure/table/steel,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aG" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/surgery,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aH" = (/obj/structure/table/standard,/obj/item/weapon/tank/anesthetic,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aI" = (/obj/structure/table/standard,/obj/item/clothing/gloves/sterile,/obj/item/clothing/gloves/sterile,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aJ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/sterilizine,/obj/item/weapon/reagent_containers/spray/sterilizine,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aK" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/masks,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aL" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aM" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aN" = (/obj/machinery/door/airlock/security{locked = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aO" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aP" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark10"; name = "Unknown Shuttle"; tag = "icon-dark10"},/area/submap/Blackshuttledown) -"aQ" = (/obj/machinery/computer/communications,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aR" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aS" = (/obj/structure/table/steel,/obj/item/weapon/material/knife,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aT" = (/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Dosen't look friendly in the slightest."; name = "Unknown Individual"; say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!"); speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aU" = (/obj/structure/table/steel,/obj/random/toolbox,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aV" = (/obj/structure/table/steel,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/Blackshuttledown) -"aX" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"aY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/Blackshuttledown) -"aZ" = (/obj/structure/table/steel,/obj/item/pizzabox,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"ba" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/Blackshuttledown) -"bc" = (/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/hyper; dir = 4; name = "Unknown APC"; pixel_x = 24},/turf/simulated/shuttle/wall/dark{icon_state = "dark0"; name = "Unknown Shuttle"; tag = "icon-dark0"},/area/submap/Blackshuttledown) -"bd" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"be" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "We need to take a short stop. The engine's are in need of minor repairs due to turbulence, should be a week's time. We've got reserve food supplies but pleanty of locale fauna to subsist on too if need be. PCRC is keeping most of there assets near New Reykjavik and locale authorities are more mindful then most to travel in this kind of weather. Our outfit should be at the rendezvous point in less then ten days assuming the upper ecehelon hasn't dropped ties with us yet."; name = "Operation Progress/M-53"},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bf" = (/obj/structure/table/steel,/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bg" = (/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bh" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bi" = (/obj/machinery/portable_atmospherics/canister/empty/oxygen,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bj" = (/obj/machinery/atmospherics/pipe/tank/oxygen,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bk" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bl" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bm" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bn" = (/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bo" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/pistol,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bp" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/bed,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bq" = (/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"br" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/pistol,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bs" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bt" = (/obj/machinery/light,/obj/structure/table/rack,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bu" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bv" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bw" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark5"; name = "Unknown Shuttle"; tag = "icon-dark5"},/area/submap/Blackshuttledown) -"bx" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark9"; name = "Unknown Shuttle"; tag = "icon-dark9"},/area/submap/Blackshuttledown) +"al" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/shuttle/wall/dark{icon_state = "dark0"; name = "Unknown Shuttle"; tag = "icon-dark0"},/area/submap/Blackshuttledown) +"am" = (/obj/structure/shuttle/engine/propulsion{dir = 4; icon_state = "propulsion_l"},/turf/template_noop,/area/submap/Blackshuttledown) +"an" = (/obj/machinery/light{dir = 1},/obj/structure/table/rack,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"ao" = (/obj/structure/dispenser/oxygen,/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"ap" = (/obj/machinery/door/airlock/external{density = 1; frequency = 1331; id_tag = "merc_shuttle_outer"; name = "Ship External Access"; req_access = list(150)},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"aq" = (/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"ar" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"as" = (/obj/machinery/organ_printer/flesh,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"at" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark5"; name = "Unknown Shuttle"; tag = "icon-dark5"},/area/submap/Blackshuttledown) +"au" = (/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown) +"av" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/p90,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown) +"aw" = (/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"ax" = (/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"ay" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"az" = (/obj/machinery/optable,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"aA" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"aB" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark9"; name = "Unknown Shuttle"; tag = "icon-dark9"},/area/submap/Blackshuttledown) +"aC" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark6"; name = "Unknown Shuttle"; tag = "icon-dark6"},/area/submap/Blackshuttledown) +"aD" = (/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown) +"aE" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown) +"aF" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"aG" = (/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"aH" = (/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"aI" = (/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Dosen't look friendly in the slightest."; name = "Unknown Individual"; say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!"); speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"aJ" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"aK" = (/obj/structure/table/steel,/obj/effect/floor_decal/borderfloor/full,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"aL" = (/obj/structure/table/steel,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown) +"aM" = (/obj/effect/floor_decal/borderfloor/corner,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"aN" = (/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"aO" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 6},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"aP" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/surgery,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"aQ" = (/obj/structure/table/standard,/obj/item/weapon/tank/anesthetic,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"aR" = (/obj/structure/table/standard,/obj/item/clothing/gloves/sterile,/obj/item/clothing/gloves/sterile,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"aS" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/sterilizine,/obj/item/weapon/reagent_containers/spray/sterilizine,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"aT" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/masks,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"aU" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"aV" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"aW" = (/obj/machinery/door/airlock/security{locked = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"aX" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown) +"aY" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark10"; name = "Unknown Shuttle"; tag = "icon-dark10"},/area/submap/Blackshuttledown) +"aZ" = (/obj/machinery/computer/communications,/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"ba" = (/obj/effect/floor_decal/borderfloor/corner{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bb" = (/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bc" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bd" = (/obj/structure/table/steel,/obj/item/weapon/material/knife,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"be" = (/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bf" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bg" = (/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Dosen't look friendly in the slightest."; name = "Unknown Individual"; say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!"); speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bh" = (/obj/structure/table/steel,/obj/random/toolbox,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) +"bi" = (/obj/structure/table/steel,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) +"bj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/Blackshuttledown) +"bk" = (/obj/structure/table/steel,/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bl" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bm" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bn" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bo" = (/obj/structure/table/steel,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) +"bp" = (/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) +"bq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/Blackshuttledown) +"br" = (/obj/machinery/door/airlock/glass,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bs" = (/obj/effect/floor_decal/corner/grey,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bt" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bu" = (/obj/structure/table/steel,/obj/item/pizzabox,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bv" = (/obj/structure/table/steel,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bw" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bx" = (/obj/machinery/door/airlock/glass,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"by" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/Blackshuttledown) +"bA" = (/obj/machinery/power/apc{dir = 8; name = "BSD APC"; pixel_x = -24},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) +"bB" = (/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Dosen't look friendly in the slightest."; name = "Unknown Individual"; say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!"); speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) +"bC" = (/obj/machinery/computer/area_atmos,/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bD" = (/obj/effect/floor_decal/borderfloor{dir = 4},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Dosen't look friendly in the slightest."; name = "Unknown Individual"; say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!"); speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bE" = (/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bF" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bG" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "We need to take a short stop. The engine's are in need of minor repairs due to turbulence, should be a week's time. We've got reserve food supplies but pleanty of locale fauna to subsist on too if need be. PCRC is keeping most of there assets near New Reykjavik and locale authorities are more mindful then most to travel in this kind of weather. Our outfit should be at the rendezvous point in less then ten days assuming the upper ecehelon hasn't dropped ties with us yet."; name = "Operation Progress/M-53"},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bH" = (/obj/structure/table/steel,/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bI" = (/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bJ" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) +"bK" = (/obj/machinery/portable_atmospherics/canister/empty/oxygen,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) +"bL" = (/obj/machinery/atmospherics/pipe/tank/oxygen,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) +"bM" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bN" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/borderfloor{dir = 6},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bO" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown) +"bP" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bQ" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bR" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bS" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/hydro,/area/submap/Blackshuttledown) +"bT" = (/turf/simulated/floor/tiled/hydro,/area/submap/Blackshuttledown) +"bU" = (/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown) +"bV" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/pistol,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown) +"bW" = (/obj/effect/floor_decal/borderfloor{dir = 6},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bX" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/bed,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bY" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Blackshuttledown) +"bZ" = (/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown) +"ca" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/pistol,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown) +"cb" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/hydro,/area/submap/Blackshuttledown) +"cc" = (/obj/machinery/light,/obj/structure/table/rack,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"cd" = (/obj/structure/dispenser/oxygen,/obj/effect/floor_decal/borderfloor{dir = 6},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"ce" = (/obj/structure/table/woodentable,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"cf" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"cg" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"ch" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark5"; name = "Unknown Shuttle"; tag = "icon-dark5"},/area/submap/Blackshuttledown) +"ci" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark9"; name = "Unknown Shuttle"; tag = "icon-dark9"},/area/submap/Blackshuttledown) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaabababababacababababababababadadabacabababababacabababababababababaa aaababababababaeabababababababadadababababababababababababadafababacaa -aaabababababababababababababadadababababababababababaeababadadabababaa +aaabababababababababababababadadabababafabababafababaeababadadabababaa aaababafabadadadababababafababababababababababababababababadadabababaa aaabababababadadadabacababababagagagagagagabababababacabafabadabababaa -aaababababababadadababababababagahabababagabababababababababababababaa +aaababababababadadabafababababagahabababagabababababababababababababaa aaabababababababaiajajajakababagabababahagabababafaiajajajajakabababaa -aaabababababababajajajajajajajajajalalajajajajajajajajajajajamanababaa -aaababababafababajajajajajajaoapajaqarajaqaqasaqatajajajajajamanababaa -aaabababababababauajajaqavajaqaqajawawajaqaxaqaqaqaqayajajazababababaa -aaabababababababaAajajaBaCajaqaqaqaqaqajaqaqaqaqaDaqaEajazabababababaa -aaabafababababaAajaFajaqaFajaqaqaqaqaEajaGaHaqaqaIaJaKajababababafabaa -aaabababababaAajaLaMajaNajajaqaqajajajajajajaOajajajajajaPabababababaa -aaabababababajaQaqaqajaqaqaqaqaqajaRaSaqasaqaTaqajaUaUaVajaPababababaa -aaabababababaWaFaqaqajaLaqaqaqaEajaqaqaXaXaXaqaqajaFaqaqaqamanabababaa -aaabababababaYaFaqaqaOaqaqaqaqaqaOaqaqaZaFaFaqaqbaaqaqaqaqamanabababaa -aaabababababaYaFaqaqaOaqaqaqaqaqaOaqaqaFaFaFaqaqbaaqaqaqaqamanabababaa -aaabababababbbaFaqaqajaLaqaqaqaEajaqaqaXaXaXaqaqbcaqaqaqaTamanabababaa -aaabababababajbdaqaTajaqaqaqaqaqajbebfaqbgaTaqaqajbhbibjajazababababaa -aaabababababauajaLbkajaNajajaqaqajajajajajajaOajajajajajazabababababaa -aaababababababauajaFajaqblajaqaqaqaqaEajbmaqaqaqaqbaaqajababababababaa -aaabafabababababauajajbnboajaqaqaqaqaqajbpaqbmaqbmajarajaPabafabababaa -aaabababababababaAajajbqbrajaqaTajawawajbmaqbmaqbmajbsajajaPababababaa -aaabababababababajajajajajajbtapajaqarajbmaqbuaqbvajajajajamanabababaa -aaabababababababajajajajajajajajajalalajajajajajajajajajajamanabababaa -aaababafababababbwajajajbxababagahabababagabababbwajajajajbxababababaa -aaabababadabababababafababababagabababahagababababafabababadadadababaa -aaababadadabacababababababababagagagagagagababababacababadadadadababaa +aaabababababababajajajajajajajajajababajajajajajajajajajajajalamababaa +aaababababafababajajajajajajanaoajapapajaqaqaraqasajajajajajalamababaa +aaabababababababatajajauavajawaxajayayajaqazaqaqaqaqaAajajaBababababaa +aaabababababababaCajajaDaEajawaFaGaGaHajaqaqaqaqaIaqaJajaBabababababaa +aaabafababababaCajaKajauaLajawaMaNaNaOajaPaQaqaqaRaSaTajababababafabaa +aaabababababaCajaUaVajaWajajawaxajajajajajajaXajajajajajaYabababababaa +aaabababababajaZbaaxajbbaGaGbaaxajbcbdbebfbebgbeajbhbhbiajaYababababaa +aaabababababbjbkbeaxajblbebebebmajbebebnbnbnbebeajbobebebpalamabababaa +aaabababababbqbkbeaFbrbabebsbebebtbebebubvbvbebebwbebebebpalamabababaa +aaabababababbqbkbeaMbxbybebebebebtbebebvbvbvbebebwbebebebpalamabababaa +aaabababababbzbkbeaxajblbebebebmajbebebnbnbnbebeajbAbebebBalamabababaa +aaabababababajbCbybDajbEaNaNbybFajbGbHbebIbgbebeajbJbKbLajaBababababaa +aaabababababatajbMbNajaWajajawaxajajajajajajbtajajajajajaBabababababaa +aaababababababatajaKajaubOajawbPaGaGbQajbRbebebebebSbTajababababababaa +aaabafabababababatajajbUbVajawaMaNaNbWajbXbebRbebRajbYajaYabafabababaa +aaabababababababaCajajbZcaajawbDajayayajbRbebRbebRajcbajajaYababababaa +aaabababababababajajajajajajcccdajapapajbRcecfcecgajajajajalamabababaa +aaabababababababajajajajajajajajajababajajajajajajajajajajalamabababaa +aaababafababababchajajajciababagahabababagabababchajajajajciababababaa +aaabababadabababababafababababagabababahagababafabafabababadadadababaa +aaababadadabacababababafabababagagagagagagababababacababadadadadababaa aaabadadadabababababababaeababababababababababadadabababadadadadababaa aaababadadababacabadababababababababababababadadadababababadadabababaa -aaabababababababadadafababababababababacabadadadafabababababababababaa -aaabababafababadadadababababababababababadadadadabababababababafababaa +aaabababababababadadafabababafababababacabadadadafabababababababababaa +aaabababafababadadadababababababababafabadadadadabababababababafababaa aaabababababababadadabacabababababababababababadaeabacafababababababaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} diff --git a/maps/submaps/surface_submaps/wilderness/DoomP.dmm b/maps/submaps/surface_submaps/wilderness/DoomP.dmm index 1ff13f5eaa1..d18916efc0e 100644 --- a/maps/submaps/surface_submaps/wilderness/DoomP.dmm +++ b/maps/submaps/surface_submaps/wilderness/DoomP.dmm @@ -3,126 +3,124 @@ "ac" = (/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP) "ad" = (/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) "ae" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/template_noop,/area/submap/DoomP) -"af" = (/turf/template_noop,/area/space) -"ag" = (/turf/simulated/floor/water,/area/submap/DoomP) -"ah" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/DoomP) -"ai" = (/obj/effect/mine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) -"aj" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) -"ak" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) -"al" = (/turf/simulated/floor/water/deep,/area/submap/DoomP) -"am" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) -"an" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) -"ao" = (/obj/machinery/light/small,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) -"ap" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor/plating,/area/submap/DoomP) -"aq" = (/turf/simulated/wall/r_wall,/area/submap/DoomP) -"ar" = (/turf/simulated/floor/plating,/area/submap/DoomP) -"as" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/submap/DoomP) -"at" = (/turf/simulated/floor/tiled,/area/submap/DoomP) -"au" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/submap/DoomP) -"av" = (/obj/structure/bed/chair,/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aw" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) -"ax" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/tiled,/area/submap/DoomP) -"ay" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP) -"az" = (/obj/machinery/power/smes/buildable/point_of_interest,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aA" = (/obj/machinery/power/apc{dir = 1; name = "PAPC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aB" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aC" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aD" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aE" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aF" = (/obj/structure/lattice,/obj/machinery/porta_turret/stationary,/turf/simulated/floor/plating,/area/submap/DoomP) -"aG" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP) -"aH" = (/obj/structure/bed/chair{dir = 4},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aI" = (/obj/structure/table/standard,/obj/item/pizzabox,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aJ" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aK" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aL" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 32; d2 = 8; icon_state = "32-8"},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aM" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aN" = (/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aO" = (/obj/structure/lattice,/turf/simulated/floor/water,/area/submap/DoomP) -"aP" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aQ" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aR" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aS" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aT" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aU" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aV" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syndie_kit/spy,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aW" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/smokes,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aX" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aY" = (/obj/structure/table/rack,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aZ" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser/mounted,/turf/simulated/floor/tiled,/area/submap/DoomP) -"ba" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/contender,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/turf/simulated/floor/tiled,/area/submap/DoomP) -"bb" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/tiled,/area/submap/DoomP) -"bc" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled,/area/submap/DoomP) -"bd" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled,/area/submap/DoomP) -"be" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/turf/simulated/floor/tiled,/area/submap/DoomP) -"bf" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) -"bg" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/DoomP) -"bh" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled,/area/submap/DoomP) -"bi" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) -"bj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/DoomP) -"bk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP) -"bl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP) -"bm" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"af" = (/turf/simulated/floor/water,/area/submap/DoomP) +"ag" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/DoomP) +"ah" = (/obj/effect/mine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"ai" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"aj" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"ak" = (/turf/simulated/floor/water/deep,/area/submap/DoomP) +"al" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"am" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"an" = (/obj/machinery/light/small,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"ao" = (/obj/machinery/porta_turret,/turf/simulated/floor/plating,/area/submap/DoomP) +"ap" = (/turf/simulated/wall/r_wall,/area/submap/DoomP) +"aq" = (/turf/simulated/floor/plating,/area/submap/DoomP) +"ar" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/submap/DoomP) +"as" = (/turf/simulated/floor/tiled,/area/submap/DoomP) +"at" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/submap/DoomP) +"au" = (/obj/structure/bed/chair,/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP) +"av" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aw" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/tiled,/area/submap/DoomP) +"ax" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP) +"ay" = (/obj/machinery/power/smes/buildable/point_of_interest,/turf/simulated/floor/tiled,/area/submap/DoomP) +"az" = (/obj/machinery/power/apc{dir = 1; name = "PAPC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aA" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aB" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aC" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aD" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aE" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP) +"aF" = (/obj/structure/bed/chair{dir = 4},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aG" = (/obj/structure/table/standard,/obj/item/pizzabox,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aH" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aI" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aJ" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 32; d2 = 8; icon_state = "32-8"},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aK" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aL" = (/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aM" = (/obj/structure/lattice,/turf/simulated/floor/water,/area/submap/DoomP) +"aN" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aO" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aP" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aQ" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aR" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aS" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aT" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syndie_kit/spy,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aU" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/smokes,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aV" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aW" = (/obj/structure/table/rack,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aX" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser/mounted,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aY" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/contender,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aZ" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/tiled,/area/submap/DoomP) +"ba" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled,/area/submap/DoomP) +"bb" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled,/area/submap/DoomP) +"bc" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/turf/simulated/floor/tiled,/area/submap/DoomP) +"bd" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) +"be" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/DoomP) +"bf" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled,/area/submap/DoomP) +"bg" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) +"bh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/DoomP) +"bi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP) +"bj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP) +"bk" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaabababababababababababababababababababababababababababababababababababacacacacacacacacabababababababadadadabababaeabaf -aaaeabababababababababababababababababababababababababababababababababacacagagagagagagacacacacababacadadadadadacacacabaf -aaababacacacacacacacabababababababahababababacacacacacacacacababacacacacagagagagagagagagagagacacacacadadaiadacagagacabaf -aaabacacagagagagagacacacacacacababaeabacacacacagagagagacacacacacagagagagagagagagagagagagagacacadadadadadacacacagagacabaf -aaabacagagagagagagagagagagagacacacacacacagagagagagagagagagagagagagagagagagagagagagagagagacacadajadadakacacagagagagacacaf -aaabacagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagacacacadadadadadadacagagagagagagacaf -aaabacagagagagalalalalalalagagagagagagagagagagagagagalalalalalalalagagagagagagagagacacadakadadaiadadadacagagagagagagacaf -aaabacagagagagagalalalalalagagagagagagagagagalalalalalalalalalalalalalalagagagagagacadaiadadadadadadacacagagagagagagacaf -aaabacacagagagagagalalalalagagagagagagagagagalalalalalalalalalalalalalagagagagagacacamadadadadadaiacacagagagagagagagacaf -aaababacagagagagagagalalalalalagagagalalalalalalalalalalalalalalalalalalalalalagagacacadadadadadacacagagagagagagagagacaf -aaababacagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalagagagagagagacadadadajadacacagagagagagagagacacaf -aaababacacagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalagagagagagacacadaiadadacacagagagagagagagagacabaf -aaabababacagagagagagagagalalalalalalalalalalalalagagalalalalalalalalalagagagagagagacacadadadadacagagagagagagagagagacabaf -aaabababacacagagagagagagagalalalalalalalalalalagagagagalalalalalalalalalagagagagagacacadadamacacagagagagagagagacacacabaf -aaababababacagagagagagagalalalalalalalalalagagagagagagagagagagagagagagagagagagacacacadadadadacagagagagalagagagacacababaf -aaababababacacagagagagagagalalalalalalagagagagagagagagagagagagagagagagagagagacacadadadadadacacagagagalalagagagagacababaf -aaababababacacagagagagagalalalalalagagagagagagagagagagagagagagagagagagagagacacadadadadacacacagagagagalalalagagagacacabaf -aaababababaeacagagagagalalalalalagagagagagagagagagagagagagagagagagagagagacacadadadacacacagagagagagagalalalagagagagacabaf -aaababababacacagagalalalalalalalalagagagagagagagagagacacacacacacacagagacacadadacacacagagagagagagagagalalalagagagagacabaf -aaababababacagagagalalalalalalalalalalagagagagagacacacadadadadadacacacacadadacacagagagagagagagalagalalalagagagagagacabaf -aaabababacacagagagagalalalalalalalagagagagagagacacadadanadadadadadadadadadadacagagagagagagagagalalalalalagagagagagacabaf -aaabababacagagagagagagalalalalalagagagagagagacacadadadadadadanadadadadadadadacagagagagagagagalalalalalalagagagagacacabaf -aaabababacagagagagagagalalalalalagagagagagacacadadadadadadadadadadadadadadacacagagagagagagagalalalalalalalalagagacacabaf -aaabababacagagagagagagagalalalalagagagagacacadadadadadadadadadadadadadadadadacacagagagagagagalalalalalalalalagagagacabaf -aaabababacagagagagagagagalalalagagagagagacadadadadadadadadadadadadadadadadadadacacagagagagagagalalalalalalagagagagacabaf -aaabababacagagagagagagagalalalalalagagagacadadadadadadadaoadadadadadaoadadadadadacacagagagagagagalalalalagagagagagacabaf -aaabababacagagagagagagagalalalalalagagagacadadapadadapadaqaqarararaqaqadapadadapadacagagagagagagalalalalagagagagagacabaf -aaabababacagagagagagagagalalalalalalagagacaqaqaqaqaqaqaqaqaqaqasaqaqaqaqaqaqaqaqaqaqaqagagagagagalalalalagagagagacacabaf -aaabababacacagagagagagagalalalalalalagagacaqatauatavawavataxaqayaqazazazazaAaBaCaDaEaqagagagagagalalalalagagagagacacabaf -aaabababacacacagagagagalalalalalalalagaFaGaqaHaDaIaDaDaDataJaqataqaKaLaLaLaMatataNataqaOaFagagagalalalagagagagagagacabaf -aaabababababacacagagagalalalalalalalagagagaqayaDaDaDaDaDataPaqaQaqaqaqaqaqaqaRaqaqaqaqagagagagagalalalagagagagagagacabaf -aaababababababacagagagalalalalalalalalagagaqatatataNatatatataSatatawatatatatatawatataqagagagagagalalalagagagagagagagacaf -aaabababahabababacagagalalalalalalalalaFaOaqaTaqaqaqaqaqaqaqaqaqaqaqaqaqaqaUaqaqaqaqaqaOaFagagagalalalagagagagagagagacaf -aaababababababacacagagagalalalalalalalalagaqataDaVaWaXaYaZbaaqbbaDbcbdbcbeataUawaUbfaqagagagagagalalalagagagagagagagacaf -aaababababababacagagagagalalalalalalalalagaqatataNatataNatataqayatatatatatbgaqbhaqbiaqagagagagalalalalalagagagagagagacaf -aaababababababacagagagagalalalalalalalalalaqaqaqaqaqaqaqaqaqaqaqaqbjbkbkbkblaqaqaqaqaqagagagagalalalalagagagagagagagacaf -aaabababababacacagagagalalalalalalalalalalagagagagaGacacadadadadbmadadadadadbmacacagagagagagagalalalalagagagagagagagacaf -aaabababababacagagagagalalalalalalalalalalalalagagaFagacacacacacaFadadadadadaFacagagagagagagalalalalalagagagagagagacacaf -aaababababacacagagagagalalalalalalalalalalalalalagagagagagagagacacadadadadadacacagagagagagalalalalalalagagagagagagacabaf -aaababababacagagagagagagalalalalalalalalalalalalagagagagagagagagacacacacacacacagagagagagagagalalalalalagagagagagacacabaf -aaabababacacagagagagagagalalalalalalalalalalalalalagagagagagagagagagagagagagagagagagagagagagagalalalagagagagagagacababaf -aaabababacacagagagagagalalalalalalalalalalalalalalagagagagagagagagagagagagagagagagagagagagagagalalalagagagagagagacababaf -aaabababacacagagagagagalalalalalalalalalalalalalalalalalalagagagagagagagagagagagagagagagagagagalalalagagagagagacacababaf -aaababacacagagagagagagagalalalalalalalalalalalalalalalalalalagagagagagagagagagagagagagagagagalalalalagagagagagacabababaf -aaababacagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalagagalalalalalalagagagagagacacababaf -aaababacagagagagagalalalalalalalalagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalalalalagagagagagacababaf -aaabacacagagagagagalagalalalalalagagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalalalagagagagagacababaf -aaabacagagagagagagagagalalalalalalalagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalalagagagagagacababaf -aaabacagagagagagagagagagagagagalalalagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalalagagagagagacababaf -aaabacagagagagagagagagagagagagagagagagagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalagagagagacacababaf -aaabacagagagagagagagagacacacacacacacacagagagagagagalalalalalalalalalalalalalalalagalalalalalalalalalalagagagagacabababaf -aaabacagagagagagagacacacababababababacacacagagagagagagalalagagagagagagagagagalagagagagagalalalalalalagagagagagacabababaf -aaabacacagagagagacacababababababababababacagagagagagagagagagagagagagagagagagagagagagagagagagagalalalalagagagacacababaeaf -aaababacagagagacacababababababababababacacagagagagagagagagagagagagagagagagagagagagagagagagagagagagalalagagagacababahabaf -aaababacagagacacabababababababababahabacagagagagagagagagagagagagagagacacacacacacagagagagagagagagagagagagagacacababababaf -aaabacacagacacababababababababababababacagagagagagagagagagagacacacacacabacacacacacacagagagagagagagagagagacacabababababaf -aaabacagacacababababaeabababababababacacagagagagagacacacacacacababababababababababacacacacacacacagagagacacacabababababaf -aaabacacacababababababababababababacacacacacacacacacabababababababababababababababababababababacacacacacabababababababaf +aaabababababababababababababababababababababababababababababababababababacacacacacacacacabababababababadadadabababaeabaa +aaaeabababababababababababababababababababababababababababababababababacacafafafafafafacacacacababacadadadadadacacacabaa +aaababacacacacacacacabababababababagababababacacacacacacacacababacacacacafafafafafafafafafafacacacacadadahadacafafacabaa +aaabacacafafafafafacacacacacacababaeabacacacacafafafafacacacacacafafafafafafafafafafafafafacacadadadadadacacacafafacabaa +aaabacafafafafafafafafafafafacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafacacadaiadadajacacafafafafacacaa +aaabacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacadadadadadadacafafafafafafacaa +aaabacafafafafakakakakakakafafafafafafafafafafafafafakakakakakakakafafafafafafafafacacadajadadahadadadacafafafafafafacaa +aaabacafafafafafakakakakakafafafafafafafafafakakakakakakakakakakakakakakafafafafafacadahadadadadadadacacafafafafafafacaa +aaabacacafafafafafakakakakafafafafafafafafafakakakakakakakakakakakakakafafafafafacacaladadadadadahacacafafafafafafafacaa +aaababacafafafafafafakakakakakafafafakakakakakakakakakakakakakakakakakakakakakafafacacadadadadadacacafafafafafafafafacaa +aaababacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafafacadadadaiadacacafafafafafafafacacaa +aaababacacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacacadahadadacacafafafafafafafafacabaa +aaabababacafafafafafafafakakakakakakakakakakakakafafakakakakakakakakakafafafafafafacacadadadadacafafafafafafafafafacabaa +aaabababacacafafafafafafafakakakakakakakakakakafafafafakakakakakakakakakafafafafafacacadadalacacafafafafafafafacacacabaa +aaababababacafafafafafafakakakakakakakakakafafafafafafafafafafafafafafafafafafacacacadadadadacafafafafakafafafacacababaa +aaababababacacafafafafafafakakakakakakafafafafafafafafafafafafafafafafafafafacacadadadadadacacafafafakakafafafafacababaa +aaababababacacafafafafafakakakakakafafafafafafafafafafafafafafafafafafafafacacadadadadacacacafafafafakakakafafafacacabaa +aaababababaeacafafafafakakakakakafafafafafafafafafafafafafafafafafafafafacacadadadacacacafafafafafafakakakafafafafacabaa +aaababababacacafafakakakakakakakakafafafafafafafafafacacacacacacacafafacacadadacacacafafafafafafafafakakakafafafafacabaa +aaababababacafafafakakakakakakakakakakafafafafafacacacadadadadadacacacacadadacacafafafafafafafakafakakakafafafafafacabaa +aaabababacacafafafafakakakakakakakafafafafafafacacadadamadadadadadadadadadadacafafafafafafafafakakakakakafafafafafacabaa +aaabababacafafafafafafakakakakakafafafafafafacacadadadadadadamadadadadadadadacafafafafafafafakakakakakakafafafafacacabaa +aaabababacafafafafafafakakakakakafafafafafacacadadadadadadadadadadadadadadacacafafafafafafafakakakakakakakakafafacacabaa +aaabababacafafafafafafafakakakakafafafafacacadadadadadadadadadadadadadadadadacacafafafafafafakakakakakakakakafafafacabaa +aaabababacafafafafafafafakakakafafafafafacadadadadadadadadadadadadadadadadadadacacafafafafafafakakakakakakafafafafacabaa +aaabababacafafafafafafafakakakakakafafafacadadadadadadadanadadadadadanadadadadadacacafafafafafafakakakakafafafafafacabaa +aaabababacafafafafafafafakakakakakafafafacadadaoadadaoadapapaqaqaqapapadaoadadaoadacafafafafafafakakakakafafafafafacabaa +aaabababacafafafafafafafakakakakakakafafacapapapapapapapapapaparapapapapapapapapapapapafafafafafakakakakafafafafacacabaa +aaabababacacafafafafafafakakakakakakafafacapasatasauavauasawapaxapayayayayazaAaBaCaDapafafafafafakakakakafafafafacacabaa +aaabababacacacafafafafakakakakakakakafaoaEapaFaCaGaCaCaCasaHapasapaIaJaJaJaKasasaLasapaMaoafafafakakakafafafafafafacabaa +aaabababababacacafafafakakakakakakakafafafapaxaCaCaCaCaCasaNapaOapapapapapapaPapapapapafafafafafakakakafafafafafafacabaa +aaababababababacafafafakakakakakakakakafafapasasasaLasasasasaQasasavasasasasasavasasapafafafafafakakakafafafafafafafacaa +aaabababagabababacafafakakakakakakakakaoaMapaRapapapapapapapapapapapapapapaSapapapapapaMaoafafafakakakafafafafafafafacaa +aaababababababacacafafafakakakakakakakakafapasaCaTaUaVaWaXaYapaZaCbabbbabcasaSavaSbdapafafafafafakakakafafafafafafafacaa +aaababababababacafafafafakakakakakakakakafapasasaLasasaLasasapaxasasasasasbeapbfapbgapafafafafakakakakakafafafafafafacaa +aaababababababacafafafafakakakakakakakakakapapapapapapapapapapapapbhbibibibjapapapapapafafafafakakakakafafafafafafafacaa +aaabababababacacafafafakakakakakakakakakakafafafafaEacacadadadadbkadadadadadbkacacafafafafafafakakakakafafafafafafafacaa +aaabababababacafafafafakakakakakakakakakakakakafafaoafacacacacacaoadadadadadaoacafafafafafafakakakakakafafafafafafacacaa +aaababababacacafafafafakakakakakakakakakakakakakafafafafafafafacacadadadadadacacafafafafafakakakakakakafafafafafafacabaa +aaababababacafafafafafafakakakakakakakakakakakakafafafafafafafafacacacacacacacafafafafafafafakakakakakafafafafafacacabaa +aaabababacacafafafafafafakakakakakakakakakakakakakafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafacababaa +aaabababacacafafafafafakakakakakakakakakakakakakakafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafacababaa +aaabababacacafafafafafakakakakakakakakakakakakakakakakakakafafafafafafafafafafafafafafafafafafakakakafafafafafacacababaa +aaababacacafafafafafafafakakakakakakakakakakakakakakakakakakafafafafafafafafafafafafafafafafakakakakafafafafafacabababaa +aaababacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakafafakakakakakakafafafafafacacababaa +aaababacafafafafafakakakakakakakakafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacababaa +aaabacacafafafafafakafakakakakakafafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacababaa +aaabacafafafafafafafafakakakakakakakafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacababaa +aaabacafafafafafafafafafafafafakakakafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacababaa +aaabacafafafafafafafafafafafafafafafafafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafacacababaa +aaabacafafafafafafafafacacacacacacacacafafafafafafakakakakakakakakakakakakakakakafakakakakakakakakakakafafafafacabababaa +aaabacafafafafafafacacacababababababacacacafafafafafafakakafafafafafafafafafakafafafafafakakakakakakafafafafafacabababaa +aaabacacafafafafacacababababababababababacafafafafafafafafafafafafafafafafafafafafafafafafafafakakakakafafafacacababaeaa +aaababacafafafacacababababababababababacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakafafafacababagabaa +aaababacafafacacabababababababababagabacafafafafafafafafafafafafafafacacacacacacafafafafafafafafafafafafafacacababababaa +aaabacacafacacababababababababababababacafafafafafafafafafafacacacacacabacacacacacacafafafafafafafafafafacacabababababaa +aaabacafacacababababaeabababababababacacafafafafafacacacacacacababababababababababacacacacacacacafafafacacacabababababaa +aaabacacacababababababababababababacacacacacacacacacabababababababababababababababababababababacacacacacabababababababaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} diff --git a/maps/submaps/surface_submaps/wilderness/Lab1.dmm b/maps/submaps/surface_submaps/wilderness/Lab1.dmm index 1256e3930ba..724043a9ffa 100644 --- a/maps/submaps/surface_submaps/wilderness/Lab1.dmm +++ b/maps/submaps/surface_submaps/wilderness/Lab1.dmm @@ -23,28 +23,29 @@ "w" = (/obj/machinery/power/smes/buildable/point_of_interest,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) "x" = (/obj/structure/table/standard,/obj/item/weapon/paper{desc = "Gladstone for the last fucking time, We have crowbars for a REASON. Stop breaking in through the goddamn windows! We big red shiny doors for god's sakes!"},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) "y" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"z" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"A" = (/obj/machinery/vending/hydroseeds,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"B" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"C" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"D" = (/obj/structure/table/standard,/obj/fiftyspawner/steel,/obj/fiftyspawner/glass,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"E" = (/obj/structure/table/standard,/obj/item/device/multitool,/obj/item/clothing/glasses/welding,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"F" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"G" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"H" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"I" = (/obj/item/weapon/cell/super,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"J" = (/obj/machinery/pros_fabricator,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"K" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"L" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"M" = (/obj/item/weapon/storage/bag/circuits,/obj/structure/table/standard,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"N" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"O" = (/obj/item/robot_parts/chest,/obj/item/robot_parts/l_arm,/obj/item/robot_parts/r_arm,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"P" = (/obj/structure/closet/crate/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"Q" = (/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"R" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"S" = (/obj/machinery/vending/robotics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"T" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) -"U" = (/obj/machinery/optable,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"z" = (/turf/simulated/floor,/area/submap/Lab1) +"A" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"B" = (/obj/machinery/vending/hydroseeds,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"C" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"D" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"E" = (/obj/structure/table/standard,/obj/fiftyspawner/steel,/obj/fiftyspawner/glass,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"F" = (/obj/structure/table/standard,/obj/item/device/multitool,/obj/item/clothing/glasses/welding,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"G" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"H" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"I" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"J" = (/obj/item/weapon/cell/super,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"K" = (/obj/machinery/pros_fabricator,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"L" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"M" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"N" = (/obj/item/weapon/storage/bag/circuits,/obj/structure/table/standard,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"O" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"P" = (/obj/item/robot_parts/chest,/obj/item/robot_parts/l_arm,/obj/item/robot_parts/r_arm,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"Q" = (/obj/structure/closet/crate/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"R" = (/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"S" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"T" = (/obj/machinery/vending/robotics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"U" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) +"V" = (/obj/machinery/optable,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaa @@ -56,14 +57,14 @@ acmhncbbchhcbbcohpca acqhrcbbcshcbbcthtca acuvwcbbchhcbbcxhyca acdefcbbcllcbbcdefca -abbbbbbbbbbbbbbbbbba -abbbbbbbbbbbbbbbbbba +abbbbbbbbzzbbbbbbbba +abbbbbbbbzzbbbbbbbba acdefcbbcllcbbcdefca -achzAcbbchBcbbcCDEca -acFhGcbbchhcbbcHIJca -acKhLcdfcllcdfchhMca -acFhhihhNhhNhhihhOca -acPQRcdeeeeeefcSTUca +achABcbbchCcbbcDEFca +acGhHcbbchhcbbcIJKca +acLhMcdfcllcdfchhNca +acGhhihhOhhOhhihhPca +acQRScdeeeeeefcTUVca acdefcbbbbbbbbcdefca abbbbbbbbbbbbbbbbbba aaaaaaaaaaaaaaaaaaaa diff --git a/maps/submaps/surface_submaps/wilderness/MCamp1.dmm b/maps/submaps/surface_submaps/wilderness/MCamp1.dmm index 19a9ceeda75..3033ffdf626 100644 --- a/maps/submaps/surface_submaps/wilderness/MCamp1.dmm +++ b/maps/submaps/surface_submaps/wilderness/MCamp1.dmm @@ -1,55 +1,53 @@ "a" = (/turf/template_noop,/area/template_noop) "b" = (/turf/template_noop,/area/submap/MilitaryCamp1) "c" = (/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1) -"d" = (/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1) -"e" = (/obj/effect/mine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1) -"f" = (/obj/structure/flora/bush,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1) -"g" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1) -"h" = (/obj/effect/decal/remains,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1) -"i" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1) -"j" = (/obj/item/stack/rods,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1) -"k" = (/obj/effect/mine,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1) -"l" = (/turf/simulated/wall,/area/submap/MilitaryCamp1) -"m" = (/turf/simulated/floor,/area/submap/MilitaryCamp1) -"n" = (/obj/item/weapon/material/shard,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1) -"o" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) -"p" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"q" = (/obj/machinery/computer/communications,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) -"r" = (/obj/structure/table/standard,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) -"s" = (/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"t" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"u" = (/obj/machinery/computer/security,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) -"v" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) -"w" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"x" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) -"y" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1) -"z" = (/obj/structure/table,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"A" = (/obj/structure/table/standard,/obj/random/firstaid,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"B" = (/obj/machinery/door/airlock,/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"C" = (/obj/structure/flora/tree/dead,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1) -"D" = (/obj/structure/table/standard,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"E" = (/obj/structure/table/standard,/obj/item/weapon/gun/energy/gun,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"F" = (/obj/effect/mine,/turf/template_noop,/area/submap/MilitaryCamp1) +"d" = (/obj/effect/mine,/turf/template_noop,/area/submap/MilitaryCamp1) +"e" = (/obj/structure/flora/bush,/turf/template_noop,/area/submap/MilitaryCamp1) +"f" = (/obj/effect/decal/cleanable/blood,/turf/template_noop,/area/submap/MilitaryCamp1) +"g" = (/obj/effect/decal/remains,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1) +"h" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/MilitaryCamp1) +"i" = (/obj/item/stack/rods,/turf/template_noop,/area/submap/MilitaryCamp1) +"j" = (/obj/effect/mine,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1) +"k" = (/turf/simulated/wall,/area/submap/MilitaryCamp1) +"l" = (/turf/simulated/floor,/area/submap/MilitaryCamp1) +"m" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/MilitaryCamp1) +"n" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) +"o" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"p" = (/obj/machinery/computer/communications,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) +"q" = (/obj/structure/table/standard,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) +"r" = (/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"s" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"t" = (/obj/machinery/computer/security,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) +"u" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) +"v" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"w" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) +"x" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/template_noop,/area/submap/MilitaryCamp1) +"y" = (/obj/structure/table,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"z" = (/obj/structure/table/standard,/obj/random/firstaid,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"A" = (/obj/machinery/door/airlock,/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"B" = (/obj/structure/flora/tree/dead,/turf/template_noop,/area/submap/MilitaryCamp1) +"C" = (/obj/structure/table/standard,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"D" = (/obj/structure/table/standard,/obj/item/weapon/gun/energy/gun,/turf/simulated/floor,/area/submap/MilitaryCamp1) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaa -abbcdedfgedddbbbbbba -achcdddddddgedchbbba -adccddeddijdddcckiba -adiddjllmmllmlncddda -abdddlllmmllllldedea -abbellommplqrolldfda -abbdllopstluvvllddda -abdnllwllxlllwlpyeda -adddmlommtmoxtllddda -agedmlommzAottlldeda -adddplwBllllwwlpdCda -addyllomptttoollddda -aCddllDElmmooollndga -addfdllllwmlllldedda -abedddllltmllldcceda -abcddddlldnlldkcddba -achcedddeedjddchibba -abccfbFdigddeccdbbba +abbcbdbefdbbbbbbbbba +acgcbbbbbbbfdbcgbbba +abccbbdbbhibbbccjhba +abhbbikkllkklkmcbbba +abbbbkkkllkkkkkbdbda +abbdkknllokpqnkkbeba +abbbkknorsktuukkbbba +abbmkkvkkwkkkvkoxdba +abbblknllslnwskkbbba +afdblknllyznsskkbdba +abbbokvAkkkkvvkobBba +abbxkknlosssnnkkbbba +aBbbkkCDkllnnnkkmbfa +abbebkkkkvlkkkkbdbba +abdbbbkkkslkkkbccdba +abcbbbbkkbmkkbjcbbba +acgcdbbbddbibbcghbba +abccebdbhfbbdccbbbba aaaaaaaaaaaaaaaaaaaa "} diff --git a/maps/submaps/surface_submaps/wilderness/Rockybase.dmm b/maps/submaps/surface_submaps/wilderness/Rockybase.dmm index 738b4f8a089..aac376d9994 100644 --- a/maps/submaps/surface_submaps/wilderness/Rockybase.dmm +++ b/maps/submaps/surface_submaps/wilderness/Rockybase.dmm @@ -3,8 +3,8 @@ "ac" = (/obj/effect/decal/remains,/turf/template_noop,/area/submap/Rockybase) "ad" = (/turf/template_noop,/area/submap/Rockybase) "ae" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Rockybase) -"af" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/template_noop,/area/submap/Rockybase) -"ag" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Rockybase) +"af" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Rockybase) +"ag" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/template_noop,/area/submap/Rockybase) "ah" = (/turf/simulated/floor,/area/submap/Rockybase) "ai" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor,/area/submap/Rockybase) "aj" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/submap/Rockybase) @@ -16,102 +16,102 @@ "ap" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) "aq" = (/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) "ar" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/obj/item/weapon/soap,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) -"as" = (/obj/structure/table/woodentable,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) -"at" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) -"au" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) -"av" = (/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) -"aw" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) -"ax" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 1},/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) -"ay" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) -"az" = (/obj/structure/closet/l3closet/janitor,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aA" = (/mob/living/bot/cleanbot{faction = "malf_drone"},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aB" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aC" = (/obj/item/weapon/storage/belt/janitor,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aD" = (/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aE" = (/obj/structure/table/standard,/obj/item/device/laptop,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aF" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aG" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/pistol,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aH" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun/taser,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aI" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aJ" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aK" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aL" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aM" = (/obj/structure/closet/crate/hydroponics,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aN" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) -"aO" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) -"aP" = (/obj/structure/janitorialcart,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aQ" = (/obj/structure/table/standard,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aR" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aS" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "Carl's absolutly fucked in the head. He's trying to squeeze as much drone production out as he can since he's worried we're gonna get found out but he's getting sloppier with each batch. Now's he's telling us he can speed the time on the IFF encoding. I already have a hard enough time getting these damn things not to stare at walls and now he's gonna shortchange the only part of these tincans that tells em not to turn us into paste on a wall. I told Richter to get out while he can, We're counting days before either some Sif task force shows up at our door or these things decide we aren't there friends anymore."; name = "Note"},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aT" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aU" = (/obj/machinery/vending/security,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aV" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aW" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"aX" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) -"aY" = (/obj/item/mecha_parts/part/gygax_left_leg,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) -"aZ" = (/obj/machinery/light,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) -"ba" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/weapon/gun/projectile/pistol,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) -"bb" = (/obj/structure/closet/crate/trashcart,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bc" = (/obj/structure/loot_pile/maint/trash,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bd" = (/obj/structure/table/standard,/obj/item/weapon/storage/bag/trash,/obj/item/weapon/storage/bag/trash,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"be" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bf" = (/obj/machinery/light,/obj/structure/table/standard,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bg" = (/obj/machinery/door/airlock/security{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bh" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bi" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bj" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bk" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bl" = (/mob/living/bot/farmbot{faction = "malf_drone"},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bm" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bn" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bo" = (/obj/structure/door_assembly,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bp" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bq" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"br" = (/obj/effect/decal/remains,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bs" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) -"bt" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bu" = (/obj/item/stack/rods,/obj/structure/girder,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bv" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bw" = (/obj/item/mecha_parts/part/gygax_right_arm,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bx" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) -"by" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bz" = (/turf/simulated/wall,/area/submap/Rockybase) -"bA" = (/obj/structure/table/standard,/obj/item/device/kit/paint/gygax/darkgygax,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bB" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "I've decided to go forward and start some small scale tests of the Vicerator delivery grenades, Might as wall make sure they work like the real ones. There are a few Fauna areas nearbye and we're working to make sure the kinks in the code are worked out. Once we've made sure they stay flying we'll work on the IFF signals."; name = "V-Grenade Notice 2"},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bC" = (/obj/structure/table/standard,/obj/random/toolbox,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bD" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bE" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "We've finally been able to get the Vicerator delivery grenades working, Took awhile to make sure the latching mechanism didn't fail but we're sure we've got it this time. Vel'Shem's worried about the miners having there own drone fab now but I say it's a small price to pay to keep the metal flowing, Especially since there telling us NT's starting to monopolize the metal rich parts."; name = "V-Grenade Notice 1"},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bF" = (/obj/structure/table/standard,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bG" = (/obj/structure/table/standard,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bH" = (/obj/structure/table/standard,/obj/item/stack/material/steel,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bI" = (/obj/structure/table/standard,/obj/machinery/light{dir = 1},/obj/item/weapon/circuitboard/mecha/gygax/main,/obj/item/weapon/circuitboard/mecha/gygax/peripherals,/obj/item/weapon/circuitboard/mecha/gygax/targeting,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bJ" = (/obj/item/weapon/material/shard,/turf/simulated/floor,/area/submap/Rockybase) -"bK" = (/obj/structure/table/standard,/obj/fiftyspawner/rods,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bL" = (/obj/machinery/vending/engivend,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bM" = (/obj/machinery/vending/tool,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bN" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bO" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bP" = (/obj/item/mecha_parts/part/gygax_torso,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bQ" = (/obj/machinery/light{dir = 1},/obj/structure/closet/crate/medical,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bR" = (/obj/structure/table/standard,/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bS" = (/obj/structure/table/standard,/obj/item/clothing/mask/breath/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bT" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bU" = (/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bV" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) -"bW" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) -"bX" = (/obj/structure/table/standard,/obj/item/device/mmi/digital/robot,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bY" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"bZ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/girder,/turf/simulated/floor,/area/submap/Rockybase) -"ca" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/Rockybase) -"cb" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table,/turf/simulated/floor,/area/submap/Rockybase) -"cc" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/Rockybase) -"cd" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"ce" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) -"cf" = (/obj/machinery/drone_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cg" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"ch" = (/obj/machinery/pros_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"ci" = (/obj/structure/table/standard,/obj/item/mecha_parts/mecha_equipment/repair_droid,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cj" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"as" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) +"at" = (/obj/structure/table/woodentable,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) +"au" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) +"av" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) +"aw" = (/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) +"ax" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) +"ay" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 1},/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) +"az" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) +"aA" = (/obj/structure/closet/l3closet/janitor,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aB" = (/mob/living/bot/cleanbot{faction = "malf_drone"},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aC" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aD" = (/obj/item/weapon/storage/belt/janitor,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aE" = (/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aF" = (/obj/structure/table/standard,/obj/item/device/laptop,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aG" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aH" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/pistol,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aI" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun/taser,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aJ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aK" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aL" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aM" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aN" = (/obj/structure/closet/crate/hydroponics,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aO" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) +"aP" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) +"aQ" = (/obj/structure/janitorialcart,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aR" = (/obj/structure/table/standard,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aS" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aT" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "Carl's absolutly fucked in the head. He's trying to squeeze as much drone production out as he can since he's worried we're gonna get found out but he's getting sloppier with each batch. Now's he's telling us he can speed the time on the IFF encoding. I already have a hard enough time getting these damn things not to stare at walls and now he's gonna shortchange the only part of these tincans that tells em not to turn us into paste on a wall. I told Richter to get out while he can, We're counting days before either some Sif task force shows up at our door or these things decide we aren't there friends anymore."; name = "Note"},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aU" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aV" = (/obj/machinery/vending/security,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aW" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aX" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"aY" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) +"aZ" = (/obj/item/mecha_parts/part/gygax_left_leg,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) +"ba" = (/obj/machinery/light,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) +"bb" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/weapon/gun/projectile/pistol,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase) +"bc" = (/obj/structure/closet/crate/trashcart,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bd" = (/obj/structure/loot_pile/maint/trash,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"be" = (/obj/structure/table/standard,/obj/item/weapon/storage/bag/trash,/obj/item/weapon/storage/bag/trash,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bf" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bg" = (/obj/machinery/light,/obj/structure/table/standard,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bh" = (/obj/machinery/door/airlock/security{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bi" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bj" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bk" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bl" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bm" = (/mob/living/bot/farmbot{faction = "malf_drone"},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bn" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bo" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bp" = (/obj/structure/door_assembly,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bq" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"br" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bs" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bt" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bu" = (/obj/effect/decal/remains,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bv" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) +"bw" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bx" = (/obj/item/stack/rods,/obj/structure/girder,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"by" = (/obj/item/mecha_parts/part/gygax_right_arm,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bz" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) +"bA" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bB" = (/turf/simulated/wall,/area/submap/Rockybase) +"bC" = (/obj/structure/table/standard,/obj/item/device/kit/paint/gygax/darkgygax,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bD" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "I've decided to go forward and start some small scale tests of the Vicerator delivery grenades, Might as wall make sure they work like the real ones. There are a few Fauna areas nearbye and we're working to make sure the kinks in the code are worked out. Once we've made sure they stay flying we'll work on the IFF signals."; name = "V-Grenade Notice 2"},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bE" = (/obj/structure/table/standard,/obj/random/toolbox,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bF" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bG" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "We've finally been able to get the Vicerator delivery grenades working, Took awhile to make sure the latching mechanism didn't fail but we're sure we've got it this time. Vel'Shem's worried about the miners having there own drone fab now but I say it's a small price to pay to keep the metal flowing, Especially since there telling us NT's starting to monopolize the metal rich parts."; name = "V-Grenade Notice 1"},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bH" = (/obj/structure/table/standard,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bI" = (/obj/structure/table/standard,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bJ" = (/obj/structure/table/standard,/obj/item/stack/material/steel,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bK" = (/obj/structure/table/standard,/obj/machinery/light{dir = 1},/obj/item/weapon/circuitboard/mecha/gygax/main,/obj/item/weapon/circuitboard/mecha/gygax/peripherals,/obj/item/weapon/circuitboard/mecha/gygax/targeting,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bL" = (/obj/item/weapon/material/shard,/turf/simulated/floor,/area/submap/Rockybase) +"bM" = (/obj/structure/table/standard,/obj/fiftyspawner/rods,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bN" = (/obj/machinery/vending/engivend,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bO" = (/obj/machinery/vending/tool,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bP" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bQ" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bR" = (/obj/item/mecha_parts/part/gygax_torso,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bS" = (/obj/machinery/light{dir = 1},/obj/structure/closet/crate/medical,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bT" = (/obj/structure/table/standard,/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bU" = (/obj/structure/table/standard,/obj/item/clothing/mask/breath/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bV" = (/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bW" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) +"bX" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) +"bY" = (/obj/structure/table/standard,/obj/item/device/mmi/digital/robot,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"bZ" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"ca" = (/obj/effect/decal/cleanable/dirt,/obj/structure/girder,/turf/simulated/floor,/area/submap/Rockybase) +"cb" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/Rockybase) +"cc" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table,/turf/simulated/floor,/area/submap/Rockybase) +"cd" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/Rockybase) +"ce" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cf" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) +"cg" = (/obj/machinery/drone_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"ch" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"ci" = (/obj/machinery/pros_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cj" = (/obj/structure/table/standard,/obj/item/mecha_parts/mecha_equipment/repair_droid,/turf/simulated/floor/tiled,/area/submap/Rockybase) "ck" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/submap/Rockybase) "cl" = (/obj/machinery/power/smes/buildable/point_of_interest,/turf/simulated/floor,/area/submap/Rockybase) "cm" = (/obj/machinery/vending/medical,/turf/simulated/floor/tiled,/area/submap/Rockybase) @@ -126,59 +126,58 @@ "cv" = (/obj/machinery/vending/robotics,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase) "cw" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light{dir = 8},/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "Unknown APC"; pixel_x = -24},/turf/simulated/floor/tiled,/area/submap/Rockybase) "cx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cz" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/power/smes/buildable/point_of_interest,/turf/simulated/floor,/area/submap/Rockybase) -"cA" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/submap/Rockybase) -"cB" = (/obj/item/mecha_parts/part/gygax_right_leg,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cC" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/mecha_parts/part/gygax_left_arm,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) -"cD" = (/obj/machinery/vending,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cE" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cF" = (/obj/machinery/light{dir = 8},/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cG" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cH" = (/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cI" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cJ" = (/obj/structure/table/standard,/obj/item/stack/material/plasteel,/obj/item/stack/material/glass/reinforced,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cK" = (/obj/structure/table/standard,/obj/item/stack/material/glass,/obj/item/stack/material/steel,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cL" = (/obj/structure/table/standard,/obj/item/mecha_parts/part/gygax_head,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cM" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cN" = (/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cO" = (/obj/item/weapon/surgical/surgicaldrill,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cP" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cQ" = (/obj/item/clothing/suit/space/void/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cR" = (/obj/effect/decal/cleanable/dirt,/mob/living/bot/medbot,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cS" = (/obj/machinery/vending/hydroseeds,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cT" = (/obj/structure/closet/crate/secure/hydrosec,/turf/simulated/floor/tiled,/area/submap/Rockybase) -"cU" = (/obj/effect/decal/remains,/turf/template_noop,/area/template_noop) +"cy" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/power/smes/buildable/point_of_interest,/turf/simulated/floor,/area/submap/Rockybase) +"cz" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/submap/Rockybase) +"cA" = (/obj/item/mecha_parts/part/gygax_right_leg,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cB" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/mecha_parts/part/gygax_left_arm,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase) +"cC" = (/obj/machinery/vending,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cD" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cE" = (/obj/machinery/light{dir = 8},/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cF" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cG" = (/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cH" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cI" = (/obj/structure/table/standard,/obj/item/stack/material/plasteel,/obj/item/stack/material/glass/reinforced,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cJ" = (/obj/structure/table/standard,/obj/item/stack/material/glass,/obj/item/stack/material/steel,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cK" = (/obj/structure/table/standard,/obj/item/mecha_parts/part/gygax_head,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cL" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cM" = (/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cN" = (/obj/item/weapon/surgical/surgicaldrill,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cO" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cP" = (/obj/item/clothing/suit/space/void/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cQ" = (/obj/effect/decal/cleanable/dirt,/mob/living/bot/medbot,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cR" = (/obj/machinery/vending/hydroseeds,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cS" = (/obj/structure/closet/crate/secure/hydrosec,/turf/simulated/floor/tiled,/area/submap/Rockybase) +"cT" = (/obj/effect/decal/remains,/turf/template_noop,/area/template_noop) (1,1,1) = {" aaabababababababababababababababababababaaababababababababababababababababababababababababababababaa abacadadadaeadadadadaeadadadadadadadadadadadadadadadadadadadaeadadadadadadadadadadadadacadadadadadab abadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadab -abadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadafadadadadab -abadadadadadadadadadadafadadadadaeadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeadab -abadadagagagagagadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeadadadadadadadadadadab -abadadagagagagagagadadadadagagagagagadadadadadadadadahahahahahahadadadadadadadadadagagagadadadadadab -abadagagagagagagagagagagagagagagagagagadadadadadaiahahajahahahahahaiadadadadadagagagagagagagagagadab -akadagagagagagagagagagagagagagagagagagagagagagahahalahahahahahajalahahagagagagagagagagagagagagagadab -abadagagamamamamamamamamamamamamamamamamamamamamamamamanaoaoanamamamamamamamamamamamamamagagagagadab -abadagamamapaqaramasasatauavavasawaxawasayamamazaAaBaCamaDaDamaEaFaGaHaIaJamaDaKamaLaMamamagagagadab -abagagamamaNaqaOamavavavavavavavavavavavavamamaPaDaDaQamaRaDamaSaTaDaDaDaUamaDaVamaDaWamamagagagadab -abagagamamaNaqaXamavaYavavaZavasbaasawasawamambbaDbcbdamaDaDambebfaDaDaDaDbgbhbiamaDbjamamagagagadab -abagagamamaqaqaqamamambkamamamamamamamamamamamambkamamamaoaoamamamamambkamamamamamblbmamamagagagadab -abagagamamambkamambnaDaDaDaDaIaDaDaDaDboaDaIaDaDaDaDaDaDaDaDaDaDaIaDaDaDaDaDaIaDamaDbjamamagagagadab -abagagamamaRaDaDaDaDaDaDbpaDaDaDbqbraDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDbpaDaDbkaDbjamamagagagadab -abadagamamambsamambtaDaDbhaDaDaDaDaDbuaDahbrbhaDbqaDbvaDaDaDaDaDaDaDbhaDaDaDaDbwamaDbmamamagagagadab -abadagamambxaqaqamamamamamamamamamamamahahamamamambyamamamamaDamamamamamamamamamamaDbjamamagagagadab -abadagamambzbzaqambAbBbCbDbEbFbGbHbIboahbJbKambLbMaDbNbOambPaDaDbQbRbSbTaDaDaDbUamaDbjamamagagagadab -abadagamambVbsbWamaDaDaDaDaDaDaDaDaDaDaDahbXamaDaDaDaDaDamboaDbTbTbYbZcacbccaDcdamaDbmamamagagagaeab -abadagamambzbzceamaDcfaDaDcfaDaDcgaDchaDahciamaDaDcjckclamcmaDbTcncocpcqcocrahaDamaDbjamamagagadadab -abadagamambVbsaqamcsaDaDctaDcuaDaDaDaDaDaDcvamcwcxcyckczamaDaDbTcAcqcqcocbahbJaDamaDcBamamagagadadab -abadagamambzbzcCamaDcfaDaDahahaDaDaDaDaDaDcDamaDaDcEckclamcFaDaDcGcocacacacaahbTamaDcHamamagadadadab -abadagamambVbsaqamaDaDaDaDaDaDbhcIaDcIaDaDbMamcJcKcLcMaDamcNaDcOaDaDcPcccPcQbTcRamcScTamamagagadadab -abadagagamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamagagadadafab -abadagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagadadadab -abadagagagagagagagagagagagagagagagagagagagagagagagagagagagagagadagagagadadadagagagagagagagadadadadab -abadadagagagagagagagagagagagagafadadadagagagagagagadadadadadadadadadadadadadadadadadadadadadadadadab -abadaeadadadadadadagagagagagadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadab -aaabcUababababababababababababababababababaaababababababababababababababababakababababababcUabakabab +abadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadab +abadadadadadadadadadadadadadadadaeadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeadab +abadadafafafafafadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeadadadadadadadadadadab +abadadafafafafafafagadadadafafafafafadadadadadadadadahahahahahahadadadadadadadadadafafafagadadadadab +abadafafafafafafafafafafafafafafafafafadadadadadaiahahajahahahahahaiadadadadadafafafafafafafafafadab +akadafafafafafafafafafafafafafafafafafafafafafahahalahahahahahajalahahafafafafafafafafafafafafafadab +abadafafamamamamamamamamamamamamamamamamamamamamamamamanaoaoanamamamamamamamamamamamamamafafafafadab +abadafamamapaqaramasatauavawawataxayaxatazamamaAaBaCaDamaEaEamaFaGaHaIaJaKamaEaLamaMaNamamafafafadab +abafafamamaOaqaPamawawawawawawawawawawawawamamaQaEaEaRamaSaEamaTaUaEaEaEaVamaEaWamaEaXamamafafafadab +abafafamamaOaqaYamawaZawawbaawatbbataxataxamambcaEbdbeamaEaEambfbgaEaEaEaEbhbibjamaEbkamamafafafadab +abafafamamaqaqaqamamamblamamamamamamamamamamamamblamamamaoaoamamamamamblamamamamambmbnamamafafafadab +abafafamamamblamamboaEaEaEaEaJaEaEaEaEbpaEaJaEaEaEaEaEaEaEaEaEaEaJaEaEaEaEbqbqbramaEbkamamafafafadab +abafafamamaSaEaEaEaEaEaEbsbqbqaEbtbuaEaEaEaEaEaEaEaEaEaEbqaEaEaEaEaEaEaEaEbsbqbqblaEbkamamafafafadab +abadafamamambvamambwaEaEbqbqbqaEaEaEbxaEahbubiaEbtaEbqbqbqaEaEaEaEaEbiaEaEaEaEbyamaEbnamamafafafadab +abadafamambzaqaqamamamamamamamamamamamahahamamamambAamamamamaEamamamamamamamamamamaEbkamamafafafadab +abadafamambBbBaqambCbDbEbFbGbHbIbJbKbpahbLbMambNbOaEbPbQambRaEaEbSbTbUbqaEaEaEbVamaEbkamamafafafadab +abadafamambWbvbXamaEaEaEaEaEaEaEaEaEaEaEahbYamaEaEaEaEaEambpaEbqbqbZcacbcccdaEceamaEbnamamafafafaeab +abadafamambBbBcfamaEcgaEaEcgaEaEchaEciaEahcjamaEbqbqckclamcmaEbqcncocpcqcocrahaEamaEbkamamafafadadab +abadafamambWbvaqamcsaEaEctaEcuaEbqbqaEaEaEcvamcwcxbqckcyamaEaEbqczcqcqcoccahbLaEamaEcAamamafafadadab +abadafamambBbBcBamaEcgaEaEahahbqbqbqbqaEaEcCamaEaEcDckclamcEaEaEcFcocbcbcbcbahbqamaEcGamamafagadadab +abadafamambWbvaqamaEaEaEaEaEaEbicHaEcHaEaEbOamcIcJcKcLaEamcMaEcNaEaEcOcdcOcPbqcQamcRcSamamafafadadab +abadafafamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamafafadadadab +abadafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafadadadab +abadafafafafafafafafafafafafafafafafafafafafafafafafafafafafafadafafafadadadafafafafafafafadadadadab +abadadafafafafafafafafafafafafagadadadafafafafafafadadadadadadadadadadadadadadadadadadadadadadadadab +abadaeadadadadadadafafafafafadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadab +aaabcTababababababababababababababababababaaababababababababababababababababakababababababcTabakabab "} diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index ae40bc129c4..986ade21626 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -38,6 +38,12 @@ var/list/all_maps = list() //This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there. var/list/accessible_z_levels = list() + //List of additional z-levels to load above the existing .dmm file z-levels using the maploader. Must be map template >>> NAMES <<<. + var/list/lateload_z_levels = list() + + //Similar to above, but only pick ONE to load, useful for random away missions and whatnot + var/list/lateload_single_pick = list() + var/list/allowed_jobs = list() //Job datums to use. //Works a lot better so if we get to a point where three-ish maps are used //We don't have to C&P ones that are only common between two of them diff --git a/nano/templates/flight.tmpl b/nano/templates/flight.tmpl index 2ffec337bad..60d4cd605a5 100644 --- a/nano/templates/flight.tmpl +++ b/nano/templates/flight.tmpl @@ -116,7 +116,6 @@ {{if data.is_moving == 0}}

Available Destinations

-

{{for data.routes}} @@ -127,9 +126,7 @@
{{:helper.link(value.travel_time, 'clock', {"traverse" : value.index})}} - -
- +
{{/for}} @@ -150,3 +147,95 @@ {{/if}} + +{{if data.doors}} +

Hatch Status

+
+
+ {{props data.doors}} +
+
{{:key}}
+
+ {{if value.open}} + OPN + {{else}} + CLS + {{/if}} + - + {{if value.bolted}} + BLT + {{else}} + UBLT + {{/if}} +
+
+ {{/props}} +
+{{/if}} + +{{if data.sensors}} +

Air Readout

+
+ {{props data.sensors}} +
+
+ {{:key}} +
+
+ {{if value.reading == 1}} +
+ Pressure: +
+
+ {{:helper.string('{1} kPa', value.pressure < 80 || value.pressure > 120 ? 'bad' : value.pressure < 95 || value.pressure > 110 ? 'average' : 'good' , value.pressure)}} +
+
+ Temperature: +
+
+ {{:helper.string('{1} °C', value.temp < 5 || value.temp > 35 ? 'bad' : value.temp < 15 || value.temp > 25 ? 'average' : 'good' , value.temp)}} +
+
+
+ Oxygen: +
+
+ {{:helper.string('{1}%', value.oxygen < 17 ? 'bad' : value.oxygen < 19 ? 'average' : 'good' , value.oxygen)}} +
+
+ Nitrogen: +
+
+ {{:helper.string('{1}%', value.nitrogen > 82 ? 'bad' : value.nitrogen > 80 ? 'average' : 'good' , value.nitrogen)}} +
+
+ Carbon Dioxide: +
+
+ {{:helper.string('{1}%', value.carbon_dioxide > 5 ? 'bad' : 'good' , value.carbon_dioxide)}} +
+
+ Phoron: +
+
+ {{:helper.string('{1}%', value.phoron > 0 ? 'bad' : 'good' , value.phoron)}} + +
+ {{if value.other > 0}} +
+ Unknown: +
+
+ {{:value.other}}% +
+ {{/if}} + {{else}} +
+ Unable to get air reading +
+ {{/if}} +
+
+ {{/props}} +{{/if}} + diff --git a/polaris.dme b/polaris.dme index 5cc6b381fb1..81502edfc1e 100644 --- a/polaris.dme +++ b/polaris.dme @@ -24,6 +24,7 @@ #include "code\__defines\admin.dm" #include "code\__defines\appearance.dm" #include "code\__defines\atmos.dm" +#include "code\__defines\callbacks.dm" #include "code\__defines\chemistry.dm" #include "code\__defines\construction.dm" #include "code\__defines\damage_organs.dm" @@ -147,7 +148,6 @@ #include "code\controllers\hooks.dm" #include "code\controllers\master.dm" #include "code\controllers\master_controller.dm" -#include "code\controllers\shuttle_controller.dm" #include "code\controllers\subsystem.dm" #include "code\controllers\verbs.dm" #include "code\controllers\voting.dm" @@ -164,7 +164,6 @@ #include "code\controllers\Processes\planet.dm" #include "code\controllers\Processes\radiation.dm" #include "code\controllers\Processes\scheduler.dm" -#include "code\controllers\Processes\Shuttle.dm" #include "code\controllers\Processes\sun.dm" #include "code\controllers\Processes\supply.dm" #include "code\controllers\Processes\ticker.dm" @@ -174,15 +173,19 @@ #include "code\controllers\ProcessScheduler\core\processScheduler.dm" #include "code\controllers\subsystems\air.dm" #include "code\controllers\subsystems\airflow.dm" -#include "code\controllers\subsystems\creation.dm" +#include "code\controllers\subsystems\atoms.dm" +#include "code\controllers\subsystems\floor_decals.dm" #include "code\controllers\subsystems\garbage.dm" #include "code\controllers\subsystems\lighting.dm" #include "code\controllers\subsystems\machines.dm" #include "code\controllers\subsystems\orbits.dm" +#include "code\controllers\subsystems\shuttles.dm" +#include "code\controllers\subsystems\xenoarch.dm" #include "code\datums\ai_law_sets.dm" #include "code\datums\ai_laws.dm" #include "code\datums\beam.dm" #include "code\datums\browser.dm" +#include "code\datums\callback.dm" #include "code\datums\category.dm" #include "code\datums\computerfiles.dm" #include "code\datums\datacore.dm" @@ -2016,6 +2019,7 @@ #include "code\modules\power\fusion\fusion_particle_catcher.dm" #include "code\modules\power\fusion\fusion_reactions.dm" #include "code\modules\power\fusion\fusion_reagents.dm" +#include "code\modules\power\fusion\magpower.dm" #include "code\modules\power\fusion\core\_core.dm" #include "code\modules\power\fusion\core\core_control.dm" #include "code\modules\power\fusion\core\core_field.dm" @@ -2058,6 +2062,7 @@ #include "code\modules\projectiles\ammunition\rounds.dm" #include "code\modules\projectiles\guns\energy.dm" #include "code\modules\projectiles\guns\launcher.dm" +#include "code\modules\projectiles\guns\modular_guns.dm" #include "code\modules\projectiles\guns\projectile.dm" #include "code\modules\projectiles\guns\vox.dm" #include "code\modules\projectiles\guns\energy\laser.dm" @@ -2312,7 +2317,6 @@ #include "code\modules\xenoarcheaology\boulder.dm" #include "code\modules\xenoarcheaology\effect.dm" #include "code\modules\xenoarcheaology\manuals.dm" -#include "code\modules\xenoarcheaology\master_controller.dm" #include "code\modules\xenoarcheaology\misc.dm" #include "code\modules\xenoarcheaology\sampling.dm" #include "code\modules\xenoarcheaology\artifacts\artifact.dm"