diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 5c5ff50299..840d2bdf8b 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 4c1863b133..b4f25459c1 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 cddd9f9527..6320ddf8a3 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 951e5a03de..10708f4185 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 09d2d5e424..9f7e80f97f 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 84780da425..7c52cea895 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 3cee872f8b..77aedf94e0 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 0000000000..126ef1ea1c --- /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 f50c012ce3..82ec12a211 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 cf23deb2de..faddb9d917 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 a10586d76d..0000000000 --- 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 b1029e0391..2a6cd44d2c 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 6659f47b4a..98ca642c82 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 f68957ddb5..0000000000 --- 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 bd9a2aeafb..437c10424b 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 0000000000..6b5669878c --- /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 0000000000..39e4515d0d --- /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 7738544024..f8c353c43d 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 0000000000..8751e0ffd7 --- /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 a6689e36b6..eb6c97ea75 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 0000000000..a92a715ece --- /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 feef09b45e..1f7685def5 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 4755b982ec..5d06eccc77 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 bfaf2658bf..2c2e26d97d 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 0c5fe0e7de..734b09ae4f 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 2e178450a0..d23f53c23a 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 2dba31d578..0cd09b8a57 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 85ae732989..15113de8ab 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 3de2943265..ab7100ce33 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 0f75d1efd0..28557928be 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 ac1e21051a..cb73da0c32 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 cb149dcc54..71755cc246 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 2f4832047f..2b8d069f51 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 1e08ea6df2..4935a2a552 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 7155886747..92f69a70e1 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 e50ad8cb92..fd82940b6d 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 d1c66b500d..d3ab69b869 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 d3936ca7c0..11e9f0f94f 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 1dd74404dc..7f140b4b7f 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 871f42eb7b..1fd5eb34c6 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 8b6ddb5834..1c384a651d 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 870b080c79..54b5513cce 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 fb909dee55..3a79a686b0 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 a78ac2be2d..a63874235f 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 0cffb34dc6..9fb1b34900 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 5a6b77931f..6833498b5f 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 f1001ada55..ed8b435fb6 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 448b252fd4..fab6319e26 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 2e881f6583..c616d1ee5b 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 527b5f1283..9a02fddfd2 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 7621b1f548..8f576b5d00 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 9353bb888c..7544c91bfe 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 4f33f1703f..238030e3ac 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 b013fb1dca..67c8719e8d 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 8914631ad0..3bbb9f34b4 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 a151d0638f..45b9853881 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 a00e9d6594..87a9863ee8 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 027c9f84af..e112f7a232 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 8ba99ad1c5..c890746e5b 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 0d00d32830..695f8d3b79 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 a3b3ab81cb..e92268f4da 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 b8cb8006d2..50230eba17 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 48026296d7..349400226a 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 5fec97b4f0..a58241ada2 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 c53ba712db..b77d73a262 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 d120bac21a..8c93b6187d 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 151b762d7c..6d512981ae 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 4ae0ebc4b0..e4932ff0d2 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 2b40faac66..3b703f703b 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 260c32cd57..b6f62f27dc 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 4187cfc422..ae255d2f7b 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 b449a6ce3b..be2b4c18e7 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 9c6fbd911f..f2528f5786 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 ce0ee6b5e7..a355be251a 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 24ba099e8f..43b7c9e22b 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 ec3f3e2631..21bebfa399 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 31483b48f0..d1b30da151 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 cb791ec54b..eb8ae9d19f 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 9bceee8f6e..d9f3340bdd 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 690bba95f8..7e922e97bb 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 c0d27cad1c..c4e9ece866 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 e9aa267276..c95b5af2c9 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 9eeefeee61..02c5f304f3 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 ac231eb947..c042b8fc9a 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 de9a803624..5a655b6673 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 75052f7b86..0a26e568ec 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 1acafd5726..27bb902aea 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 b2c5e93cb8..7f78e8f0e7 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 d0db6e7f08..e2714be757 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 51ec43e32f..c76967545e 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 9c1968fd3c..7543d4037a 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 a0326b8240..c12f727a0b 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 c1e8be47d1..6c2d8ead29 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 558f638588..7347ec47db 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 aac979ff5c..789ec20a17 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 8789ddef80..07c686df99 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 d7926b526d..218291815f 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 941aa5abc9..86e6b117bb 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 c7209f9fb3..c329fc2e4d 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 c137822860..930cfb792b 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 e766b1bba3..a47578f102 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 bd85fe8be8..cbf492b081 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 2532554193..721a959c35 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 c2cf55ab00..81c709f6d8 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 25fda4bfb3..7fde6c58e1 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 961dbdcdfb..9536f830fb 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 e386590ec7..67bac3b773 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 d1070e5c32..41204baa72 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 5aeb9651d2..6ca57138b6 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 9b88496119..5ecef18d7d 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 b597837d17..768628f8fb 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 719373f5d3..1b5318868b 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 9d612f508d..ea7216dfd3 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 4a924fdca3..7dc02dedc7 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 78deb6cf98..3f83f07ec4 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 8da4fad6d8..3ef22e0a5c 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 a45f5dba2d..10c1fb2a8e 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 094d781cf2..cade937bfb 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 ef6ddbe6ea..b440189021 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 52ff382199..fec4ae7c3e 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 f8b9667095..f4446c4cf9 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 484865ab81..fa730f574a 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 0f76f6172e..d212851071 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 af5e1b7475..2fa2b1dbbe 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 a6a857c43b..2f81f1568a 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 cc7fe00711..e7f0db6b30 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 e166573811..6e8805d17a 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 d31efe6df8..3836a6abd2 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 b79b524875..77ba92ff6a 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 7d5fa16dab..f7d23771a3 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 8e796ca250..d8044da328 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 ff69867548..34a540ac45 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 59b0b2ebe8..ccd00753f8 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 fc6c7e5484..e790f476dc 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 18bb91a9e4..8b97ffdb35 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 9d07df4508..421d5639b2 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 9155f193ef..173aa3ce8f 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 5b855d584c..a28ad19592 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 49b0f190b6..d700e38a81 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 b92eebbc7e..6c0ee20f1f 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 05d1a6d8c6..8ebbbf20d1 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 b2f537bb96..323bc82906 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 9b8557363d..b7adf7319a 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 89a0e5544a..940dac91e7 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 822370a6b1..9cacf67073 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 760c46ea93..7f81b70ffd 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 37351c53af..ef1c3716fa 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 38f73812f9..623f70bd6b 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 875bf63fee..80b1cbb336 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 0000000000..c6882c6eb3 --- /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 6a40cf3b8e..5a20aaeaeb 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 d57c133cd1..d8712a0e4c 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 e5dead7ee5..f4f6579420 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 dd5c5336bd..360cad96bf 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 71cb8a35e7..4327bbf42d 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 84697e668d..70138487e3 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 0000000000..8f81e971c4 --- /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 d3bc093cac..8138146163 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 dc4401f0bc..a6e158befa 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 db06449d18..a6f6b89069 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 946910ce23..f38d2798d3 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 b832e94dbd..5555e68fe9 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 56fc64c016..b956f3528d 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 5034d249ac..a8ca493470 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 13fe755751..003535a590 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 8930bf34d6..effd03e8a6 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 c59ffe7e64..74ef6075fd 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 616b04b10d..6372405300 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 e79957ba28..ae7c203fa3 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 553b6674df..e169a62061 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 1d79a89449..17412b4a8b 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 605cf8fcac..7537f14022 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 c4dbbf72b0..14cc49a3fb 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 0000000000..19eba8cbfb --- /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 0000000000..af4d4acedb --- /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 6b0397c9e1..54b20e0165 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 c6d9919627..e0e3305d44 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 d7a107da94..4bb7b955a0 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 be236a145e..4d20f04fcd 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 fb27f43910..84dd6a6049 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 d3a8e34f53..77ecb795f3 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 443e243518..6c0e2b9035 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 a12f799868..9fac74ac0e 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 aa331159b7..37b3484d14 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 1ff13f5eaa..d18916efc0 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 1256e3930b..724043a9ff 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 19a9ceeda7..3033ffdf62 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 738b4f8a08..aac376d999 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 ae40bc129c..986ade2162 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 2ffec337ba..60d4cd605a 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 5cc6b381fb..81502edfc1 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"