diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index 8c546c9135..85eeeae876 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -11,3 +11,5 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_GAME, RUNLEVEL_POSTGAME) #define RUNLEVEL_FLAG_TO_INDEX(flag) (log(2, flag) + 1) // Convert from the runlevel bitfield constants to index in runlevel_flags list + +#define INIT_ORDER_LIGHTING 0 \ No newline at end of file diff --git a/code/controllers/Processes/lighting.dm b/code/controllers/Processes/lighting.dm deleted file mode 100644 index d46cab1d19..0000000000 --- a/code/controllers/Processes/lighting.dm +++ /dev/null @@ -1,98 +0,0 @@ -/var/lighting_overlays_initialised = FALSE - -/var/list/lighting_update_lights = list() // List of lighting sources queued for update. -/var/list/lighting_update_corners = list() // List of lighting corners queued for update. -/var/list/lighting_update_overlays = list() // List of lighting overlays queued for update. - -/var/list/lighting_update_lights_old = list() // List of lighting sources currently being updated. -/var/list/lighting_update_corners_old = list() // List of lighting corners currently being updated. -/var/list/lighting_update_overlays_old = list() // List of lighting overlays currently being updated. - - -/datum/controller/process/lighting - // Queues of update counts, waiting to be rolled into stats lists - var/list/stats_queues = list( - "Source" = list(), "Corner" = list(), "Overlay" = list()) - // Stats lists - var/list/stats_lists = list( - "Source" = list(), "Corner" = list(), "Overlay" = list()) - var/update_stats_every = (1 SECONDS) - var/next_stats_update = 0 - var/stat_updates_to_keep = 5 - -/datum/controller/process/lighting/setup() - name = "lighting" - - schedule_interval = 0 // run as fast as you possibly can - sleep_interval = 10 // Yield every 10% of a tick - defer_usage = 80 // Defer at 80% of a tick - create_all_lighting_overlays() - lighting_overlays_initialised = TRUE - - // Pre-process lighting once before the round starts. Wait 30 seconds so the away mission has time to load. - spawn(300) - doWork(1) - -/datum/controller/process/lighting/doWork(roundstart) - - lighting_update_lights_old = lighting_update_lights //We use a different list so any additions to the update lists during a delay from scheck() don't cause things to be cut from the list without being updated. - lighting_update_lights = list() - for(var/datum/light_source/L in lighting_update_lights_old) - - if(L.check() || L.destroyed || L.force_update) - L.remove_lum() - if(!L.destroyed) - L.apply_lum() - - else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. - L.smart_vis_update() - - L.vis_update = FALSE - L.force_update = FALSE - L.needs_update = FALSE - - SCHECK - - lighting_update_corners_old = lighting_update_corners //Same as above. - lighting_update_corners = list() - for(var/A in lighting_update_corners_old) - var/datum/lighting_corner/C = A - - C.update_overlays() - - C.needs_update = FALSE - - SCHECK - - lighting_update_overlays_old = lighting_update_overlays //Same as above. - lighting_update_overlays = list() - - for(var/A in lighting_update_overlays_old) - var/atom/movable/lighting_overlay/O = A - O.update_overlay() - O.needs_update = 0 - SCHECK - - stats_queues["Source"] += lighting_update_lights_old.len - stats_queues["Corner"] += lighting_update_corners_old.len - stats_queues["Overlay"] += lighting_update_overlays_old.len - - if(next_stats_update <= world.time) - next_stats_update = world.time + update_stats_every - for(var/stat_name in stats_queues) - var/stat_sum = 0 - var/list/stats_queue = stats_queues[stat_name] - for(var/count in stats_queue) - stat_sum += count - stats_queue.Cut() - - var/list/stats_list = stats_lists[stat_name] - stats_list.Insert(1, stat_sum) - if(stats_list.len > stat_updates_to_keep) - stats_list.Cut(stats_list.len) - -/datum/controller/process/lighting/statProcess() - ..() - stat(null, "[total_lighting_sources] sources, [total_lighting_corners] corners, [total_lighting_overlays] overlays") - for(var/stat_type in stats_lists) - stat(null, "[stat_type] updates: [jointext(stats_lists[stat_type], " | ")]") diff --git a/code/controllers/subsystems/lighting.dm b/code/controllers/subsystems/lighting.dm new file mode 100644 index 0000000000..01875cc397 --- /dev/null +++ b/code/controllers/subsystems/lighting.dm @@ -0,0 +1,166 @@ +/* +** Lighting Subsystem - Process the lighting! Do it! +*/ + +#define SSLIGHTING_STAGE_LIGHTS 1 +#define SSLIGHTING_STAGE_CORNERS 2 +#define SSLIGHTING_STAGE_OVERLAYS 3 +#define SSLIGHTING_STAGE_DONE 4 +// This subsystem's fire() method also gets called once during Master.Initialize(). +// During this fire we need to use CHECK_TICK to sleep and continue, but in all other fires we need to use MC_CHECK_TICK to pause and return. +// This leads us to a rather annoying little tidbit of code that I have stuffed into this macro so I don't have to see it. +#define DUAL_TICK_CHECK if (init_tick_checks) { CHECK_TICK; } else if (MC_TICK_CHECK) { return; } + +// Globals +/var/lighting_overlays_initialised = FALSE +/var/list/lighting_update_lights = list() // List of lighting sources queued for update. +/var/list/lighting_update_corners = list() // List of lighting corners queued for update. +/var/list/lighting_update_overlays = list() // List of lighting overlays queued for update. + +SUBSYSTEM_DEF(lighting) + name = "Lighting" + wait = 2 // Ticks, not deciseconds + init_order = INIT_ORDER_LIGHTING + flags = SS_TICKER + + var/list/currentrun = list() + var/stage = null + + var/cost_lights = 0 + var/cost_corners = 0 + var/cost_overlays = 0 + +/datum/controller/subsystem/lighting/Initialize(timeofday) + if(!lighting_overlays_initialised) + // TODO - TG initializes starlight here. + create_all_lighting_overlays() + lighting_overlays_initialised = TRUE + + // Pre-process lighting once before the round starts. + internal_process_lights(FALSE, TRUE) + internal_process_corners(FALSE, TRUE) + internal_process_overlays(FALSE, TRUE) + return ..() + +/datum/controller/subsystem/lighting/fire(resumed = FALSE) + var/timer + if(!resumed) + ASSERT(LAZYLEN(currentrun) == 0) // Santity checks to make sure we don't somehow have items left over from last cycle + ASSERT(stage == null) // Or somehow didn't finish all the steps from last cycle + stage = SSLIGHTING_STAGE_LIGHTS // Start with Step 1 of course + + if(stage == SSLIGHTING_STAGE_LIGHTS) + timer = world.tick_usage + internal_process_lights(resumed) + cost_lights = MC_AVERAGE(cost_lights, TICK_DELTA_TO_MS(world.tick_usage - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + stage = SSLIGHTING_STAGE_CORNERS + + if(stage == SSLIGHTING_STAGE_CORNERS) + timer = world.tick_usage + internal_process_corners(resumed) + cost_corners = MC_AVERAGE(cost_corners, TICK_DELTA_TO_MS(world.tick_usage - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + stage = SSLIGHTING_STAGE_OVERLAYS + + if(stage == SSLIGHTING_STAGE_OVERLAYS) + timer = world.tick_usage + internal_process_overlays(resumed) + cost_overlays = MC_AVERAGE(cost_overlays, TICK_DELTA_TO_MS(world.tick_usage - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + stage = SSLIGHTING_STAGE_DONE + + // Okay, we're done! Woo! Got thru a whole air_master cycle! + ASSERT(LAZYLEN(currentrun) == 0) // Sanity checks to make sure there are really none left + ASSERT(stage == SSLIGHTING_STAGE_DONE) // And that we didn't somehow skip past the last step + currentrun = null + stage = null + +/datum/controller/subsystem/lighting/proc/internal_process_lights(resumed = FALSE, init_tick_checks = FALSE) + if (!resumed) + // We swap out the lists so any additions to the global list during a pause don't make things wierd. + src.currentrun = global.lighting_update_lights + global.lighting_update_lights = list() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/datum/light_source/L = currentrun[currentrun.len] + currentrun.len-- + + if(!L) continue + if(L.check() || L.destroyed || L.force_update) + L.remove_lum() + if(!L.destroyed) + L.apply_lum() + + else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. + L.smart_vis_update() + + L.vis_update = FALSE + L.force_update = FALSE + L.needs_update = FALSE + + DUAL_TICK_CHECK + +/datum/controller/subsystem/lighting/proc/internal_process_corners(resumed = FALSE, init_tick_checks = FALSE) + if (!resumed) + // We swap out the lists so any additions to the global list during a pause don't make things wierd. + src.currentrun = global.lighting_update_corners + global.lighting_update_corners = list() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/datum/lighting_corner/C = currentrun[currentrun.len] + currentrun.len-- + + if(!C) continue + C.update_overlays() + C.needs_update = FALSE + + DUAL_TICK_CHECK + +/datum/controller/subsystem/lighting/proc/internal_process_overlays(resumed = FALSE, init_tick_checks = FALSE) + if (!resumed) + // We swap out the lists so any additions to the global list during a pause don't make things wierd. + src.currentrun = global.lighting_update_overlays + global.lighting_update_overlays = list() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/atom/movable/lighting_overlay/O = currentrun[currentrun.len] + currentrun.len-- + + if(!O) continue + O.update_overlay() + O.needs_update = FALSE + + DUAL_TICK_CHECK + +/datum/controller/subsystem/lighting/stat_entry(msg_prefix) + var/list/msg = list(msg_prefix) + msg += "T:{" + msg += "S [total_lighting_sources] | " + msg += "C [total_lighting_corners] | " + msg += "O [total_lighting_overlays]" + msg += "}" + msg += "C:{" + msg += "S [round(cost_lights, 1)] | " + msg += "C [round(cost_corners, 1)] | " + msg += "O [round(cost_overlays, 1)]" + msg += "}" + ..(msg.Join()) + +#undef DUAL_TICK_CHECK +#undef SSLIGHTING_STAGE_LIGHTS +#undef SSLIGHTING_STAGE_CORNERS +#undef SSLIGHTING_STAGE_OVERLAYS +#undef SSLIGHTING_STAGE_STATS \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/cryo_sting.dm b/code/game/gamemodes/changeling/powers/cryo_sting.dm index e3e401e2ff..4bb92a543e 100644 --- a/code/game/gamemodes/changeling/powers/cryo_sting.dm +++ b/code/game/gamemodes/changeling/powers/cryo_sting.dm @@ -30,20 +30,4 @@ spawn(3 MINUTES) src << "Our cryogenic string is ready to be used once more." src.verbs |= /mob/proc/changeling_cryo_sting - return 1 - -/datum/reagent/cryotoxin //A much more potent version of frost oil. - name = "Cryotoxin" - id = "cryotoxin" - description = "Rapidly lowers the body's internal temperature." - reagent_state = LIQUID - color = "#B31008" - -/datum/reagent/cryotoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - M.bodytemperature = max(M.bodytemperature - 30 * TEMPERATURE_DAMAGE_COEFFICIENT, 0) - if(prob(3)) - M.emote("shiver") - ..() - return \ No newline at end of file + return 1 \ No newline at end of file diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index d903499ee0..ccbbb5fea7 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -353,8 +353,8 @@ REAGENT SCANNER /obj/item/device/slime_scanner name = "slime scanner" - icon_state = "adv_spectrometer" - item_state = "analyzer" + icon_state = "xenobio" + item_state = "xenobio" origin_tech = list(TECH_BIO = 1) w_class = ITEMSIZE_SMALL flags = CONDUCT diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 9364f1b859..58c5d18ea0 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -8,10 +8,6 @@ * Circular Saw */ -/* - * Retractor - */ - /obj/item/weapon/surgical name = "Surgical tool" desc = "This shouldn't be here, ahelp it." @@ -25,10 +21,13 @@ return 0 ..() +/* + * Retractor + */ + /obj/item/weapon/surgical/retractor name = "retractor" desc = "Retracts stuff." - icon = 'icons/obj/surgery.dmi' icon_state = "retractor" matter = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 5000) origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) @@ -173,3 +172,33 @@ throw_speed = 3 throw_range = 5 attack_verb = list("attacked", "hit", "bludgeoned") + + +// Cyborg Tools + +/obj/item/weapon/surgical/retractor/cyborg + toolspeed = 0.5 + +/obj/item/weapon/surgical/hemostat/cyborg + toolspeed = 0.5 + +/obj/item/weapon/surgical/cautery/cyborg + toolspeed = 0.5 + +/obj/item/weapon/surgical/surgicaldrill/cyborg + toolspeed = 0.5 + +/obj/item/weapon/surgical/scalpel/cyborg + toolspeed = 0.5 + +/obj/item/weapon/surgical/circular_saw/cyborg + toolspeed = 0.5 + +/obj/item/weapon/surgical/bonegel/cyborg + toolspeed = 0.5 + +/obj/item/weapon/surgical/FixOVein/cyborg + toolspeed = 0.5 + +/obj/item/weapon/surgical/bonesetter/cyborg + toolspeed = 0.5 \ No newline at end of file diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 92b05760b6..6ff7ff8f72 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -312,19 +312,19 @@ /obj/item/weapon/weldingtool/examine(mob/user) if(..(user, 0)) if(max_fuel) - user << text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel ) + to_chat(user, text("\icon[] The [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel )) /obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/living/user as mob) if(istype(W,/obj/item/weapon/screwdriver)) if(welding) - user << "Stop welding first!" + to_chat(user, "Stop welding first!") return status = !status if(status) - user << "You secure the welder." + to_chat(user, "You secure the welder.") else - user << "The welder can now be attached and modified." + to_chat(user, "The welder can now be attached and modified.") src.add_fingerprint(user) return @@ -380,16 +380,16 @@ if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1) if(!welding && max_fuel) O.reagents.trans_to_obj(src, max_fuel) - user << "Welder refueled" + to_chat(user, "Welder refueled") playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) return else if(!welding) - user << "[src] doesn't use fuel." + to_chat(user, "[src] doesn't use fuel.") return else message_admins("[key_name_admin(user)] triggered a fueltank explosion with a welding tool.") log_game("[key_name(user)] triggered a fueltank explosion with a welding tool.") - user << "You begin welding on the fueltank and with a moment of lucidity you realize, this might not have been the smartest thing you've ever done." + to_chat(user, "You begin welding on the fueltank and with a moment of lucidity you realize, this might not have been the smartest thing you've ever done.") var/obj/structure/reagent_dispensers/fueltank/tank = O tank.explode() return @@ -429,7 +429,7 @@ return 1 else if(M) - M << "You need more welding fuel to complete this task." + to_chat(M, "You need more welding fuel to complete this task.") update_icon() return 0 @@ -509,7 +509,7 @@ if(set_welding && !welding) if (get_fuel() > 0) if(M) - M << "You switch the [src] on." + to_chat(M, "You switch the [src] on.") else if(T) T.visible_message("\The [src] turns on.") playsound(loc, acti_sound, 50, 1) @@ -524,14 +524,14 @@ else if(M) var/msg = max_fuel ? "welding fuel" : "charge" - M << "You need more [msg] to complete this task." + to_chat(M, "You need more [msg] to complete this task.") return //Otherwise else if(!set_welding && welding) if(!always_process) processing_objects -= src if(M) - M << "You switch \the [src] off." + to_chat(M, "You switch \the [src] off.") else if(T) T.visible_message("\The [src] turns off.") playsound(loc, deac_sound, 50, 1) @@ -556,29 +556,29 @@ return switch(safety) if(1) - usr << "Your eyes sting a little." + to_chat(usr, "Your eyes sting a little.") E.damage += rand(1, 2) if(E.damage > 12) user.eye_blurry += rand(3,6) if(0) - usr << "Your eyes burn." + to_chat(usr, "Your eyes burn.") E.damage += rand(2, 4) if(E.damage > 10) E.damage += rand(4,10) if(-1) - usr << "Your thermals intensify the welder's glow. Your eyes itch and burn severely." + to_chat(usr, "Your thermals intensify the welder's glow. Your eyes itch and burn severely.") user.eye_blurry += rand(12,20) E.damage += rand(12, 16) if(safety<2) if(E.damage > 10) - user << "Your eyes are really starting to hurt. This can't be good for you!" + to_chat(user, "Your eyes are really starting to hurt. This can't be good for you!") if (E.damage >= E.min_broken_damage) - user << "You go blind!" + to_chat(user, "You go blind!") user.sdisabilities |= BLIND else if (E.damage >= E.min_bruised_damage) - user << "You go blind!" + to_chat(user, "You go blind!") user.Blind(5) user.eye_blurry = 5 user.disabilities |= NEARSIGHTED @@ -688,16 +688,19 @@ cell_type = null /obj/item/weapon/weldingtool/electric/examine(mob/user) - ..() - if(power_supply) - user << text("\icon[] [] has [] charge left.", src, src.name, get_fuel()) - else - user << text("\icon[] [] has power for no power cell!", src, src.name) + if(get_dist(src, user) > 1) + to_chat(user, desc) + else // The << need to stay, for some reason + if(power_supply) + user << text("\icon[] The [] has [] charge left.", src, src.name, get_fuel()) + else + user << text("\icon[] The [] has no power cell!", src, src.name) /obj/item/weapon/weldingtool/electric/get_fuel() if(use_external_power) var/obj/item/weapon/cell/external = get_external_power_supply() - return external.charge + if(external) + return external.charge else if(power_supply) return power_supply.charge else @@ -727,7 +730,7 @@ return 1 else if(M) - M << "You need more energy to complete this task." + to_chat(M, "You need more energy to complete this task.") update_icon() return 0 @@ -737,7 +740,7 @@ power_supply.update_icon() user.put_in_hands(power_supply) power_supply = null - user << "You remove the cell from the [src]." + to_chat(user, "You remove the cell from the [src].") setWelding(0) update_icon() return @@ -752,12 +755,12 @@ user.drop_item() W.loc = src power_supply = W - user << "You install a cell in \the [src]." + to_chat(user, "You install a cell in \the [src].") update_icon() else - user << "\The [src] already has a cell." + to_chat(user, "\The [src] already has a cell.") else - user << "\The [src] cannot use that type of cell." + to_chat(user, "\The [src] cannot use that type of cell.") else ..() @@ -778,6 +781,8 @@ /obj/item/weapon/weldingtool/electric/mounted use_external_power = 1 +/obj/item/weapon/weldingtool/electric/mounted/cyborg + toolspeed = 0.5 /* * Crowbar */ @@ -814,7 +819,7 @@ return ..() if(!welding) - user << "You'll need to turn [src] on to patch the damage on [H]'s [S.name]!" + to_chat(user, "You'll need to turn [src] on to patch the damage on [H]'s [S.name]!") return 1 if(S.robo_repair(15, BRUTE, "some dents", src, user)) @@ -878,9 +883,9 @@ /obj/item/weapon/combitool/examine() ..() if(loc == usr && tools.len) - usr << "It has the following fittings:" + to_chat(usr, "It has the following fittings:") for(var/obj/item/tool in tools) - usr << "\icon[tool] - [tool.name][tools[current_tool]==tool?" (selected)":""]" + to_chat(usr, "\icon[tool] - [tool.name][tools[current_tool]==tool?" (selected)":""]") /obj/item/weapon/combitool/New() ..() @@ -891,9 +896,9 @@ if(++current_tool > tools.len) current_tool = 1 var/obj/item/tool = tools[current_tool] if(!tool) - user << "You can't seem to find any fittings in \the [src]." + to_chat(user, "You can't seem to find any fittings in \the [src].") else - user << "You switch \the [src] to the [tool.name] fitting." + to_chat(user, "You switch \the [src] to the [tool.name] fitting.") return 1 /obj/item/weapon/combitool/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 5738d75779..8ef63e765c 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -159,7 +159,7 @@ var/list/debug_verbs = list ( ,/client/proc/hide_debug_verbs ,/client/proc/testZAScolors ,/client/proc/testZAScolors_remove - ,/client/proc/setup_supermatter_engine + ,/datum/admins/proc/setup_supermatter ,/client/proc/atmos_toggle_debug ,/client/proc/spawn_tanktransferbomb ) diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index 690eba9326..e02f976281 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -125,7 +125,7 @@ if (force) total_lighting_overlays-- global.lighting_update_overlays -= src - global.lighting_update_overlays_old -= src + LAZYREMOVE(SSlighting.currentrun, src) var/turf/T = loc if(istype(T)) diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index 981de65864..b3e3cf7aa2 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -1,6 +1,14 @@ +// Create lighting overlays on all turfs with dynamic lighting in areas with dynamic lighting. /proc/create_all_lighting_overlays() - for(var/zlevel = 1 to world.maxz) - create_lighting_overlays_zlevel(zlevel) + for(var/area/A in world) + if(!A.dynamic_lighting) + continue + for(var/turf/T in A) + if(!T.dynamic_lighting) + continue + new /atom/movable/lighting_overlay(T, TRUE) + CHECK_TICK + CHECK_TICK /proc/create_lighting_overlays_zlevel(var/zlevel) ASSERT(zlevel) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 8d9becaa4b..a92a639661 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -212,19 +212,20 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/borg/sight/hud/med(src) src.modules += new /obj/item/device/healthanalyzer(src) src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src) - src.modules += new /obj/item/weapon/surgical/scalpel(src) - src.modules += new /obj/item/weapon/surgical/hemostat(src) - src.modules += new /obj/item/weapon/surgical/retractor(src) - src.modules += new /obj/item/weapon/surgical/cautery(src) - src.modules += new /obj/item/weapon/surgical/bonegel(src) - src.modules += new /obj/item/weapon/surgical/FixOVein(src) - src.modules += new /obj/item/weapon/surgical/bonesetter(src) - src.modules += new /obj/item/weapon/surgical/circular_saw(src) - src.modules += new /obj/item/weapon/surgical/surgicaldrill(src) + src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) + src.modules += new /obj/item/weapon/surgical/hemostat/cyborg(src) + src.modules += new /obj/item/weapon/surgical/retractor/cyborg(src) + src.modules += new /obj/item/weapon/surgical/cautery/cyborg(src) + src.modules += new /obj/item/weapon/surgical/bonegel/cyborg(src) + src.modules += new /obj/item/weapon/surgical/FixOVein/cyborg(src) + src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src) + src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) + src.modules += new /obj/item/weapon/surgical/surgicaldrill/cyborg(src) src.modules += new /obj/item/weapon/gripper/no_use/organ(src) src.modules += new /obj/item/weapon/gripper/medical(src) src.modules += new /obj/item/weapon/shockpaddles/robot(src) src.modules += new /obj/item/weapon/reagent_containers/dropper(src) // Allows surgeon borg to fix necrosis + src.modules += new /obj/item/weapon/reagent_containers/syringe(src) src.emag = new /obj/item/weapon/reagent_containers/spray(src) src.emag.reagents.add_reagent("pacid", 250) src.emag.name = "Polyacid spray" @@ -356,7 +357,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/rcd/borg(src) src.modules += new /obj/item/weapon/screwdriver/cyborg(src) src.modules += new /obj/item/weapon/wrench/cyborg(src) - src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src) + src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) src.modules += new /obj/item/device/pipe_painter(src) src.modules += new /obj/item/device/floor_painter(src) @@ -394,7 +395,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/robot/engineering/general/New() ..() src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src) + src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) src.modules += new /obj/item/weapon/screwdriver/cyborg(src) src.modules += new /obj/item/weapon/wrench/cyborg(src) src.modules += new /obj/item/weapon/wirecutters/cyborg(src) @@ -708,13 +709,13 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/gripper/no_use/loader(src) src.modules += new /obj/item/device/robotanalyzer(src) src.modules += new /obj/item/weapon/card/robot(src) - src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src) + src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) src.modules += new /obj/item/weapon/screwdriver/cyborg(src) src.modules += new /obj/item/weapon/wrench/cyborg(src) src.modules += new /obj/item/weapon/wirecutters/cyborg(src) src.modules += new /obj/item/device/multitool(src) - src.modules += new /obj/item/weapon/surgical/scalpel(src) - src.modules += new /obj/item/weapon/surgical/circular_saw(src) + src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) + src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) src.modules += new /obj/item/weapon/reagent_containers/syringe(src) src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) src.modules += new /obj/item/weapon/storage/part_replacer(src) @@ -849,7 +850,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/drone/New(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src) + src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) src.modules += new /obj/item/weapon/screwdriver/cyborg(src) src.modules += new /obj/item/weapon/wrench/cyborg(src) src.modules += new /obj/item/weapon/crowbar/cyborg(src) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index bc64f3e764..ef1d854ad3 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1020,11 +1020,18 @@ icon_state = "teshari_mushroom" species_allowed = list("Teshari") + + vox_quills_long + name = "Long Vox Quills" + icon_state = "vox_longquills" + species_allowed = list("Vox") + vox_quills_short name = "Short Vox Quills" icon_state = "vox_shortquills" species_allowed = list("Vox") +/* vox_quills_kingly name = "Kingly Vox Quills" icon_state = "vox_kingly" @@ -1034,7 +1041,7 @@ name = "Quill Mohawk" icon_state = "vox_mohawk" species_allowed = list("Vox") - +*/ /datum/sprite_accessory/facial_hair taj_sideburns diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 7e0ee4ffb4..3f660ca164 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -284,13 +284,21 @@ /datum/reagent/frostoil/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) return - M.bodytemperature = max(M.bodytemperature - 10 * TEMPERATURE_DAMAGE_COEFFICIENT, 0) + M.bodytemperature = max(M.bodytemperature - 10 * TEMPERATURE_DAMAGE_COEFFICIENT, 215) if(prob(1)) M.emote("shiver") if(istype(M, /mob/living/simple_animal/slime)) M.bodytemperature = max(M.bodytemperature - rand(10,20), 0) holder.remove_reagent("capsaicin", 5) +/datum/reagent/frostoil/cryotoxin //A longer lasting version of frost oil. + name = "Cryotoxin" + id = "cryotoxin" + description = "Lowers the body's internal temperature." + reagent_state = LIQUID + color = "#B31008" + metabolism = REM * 0.5 + /datum/reagent/capsaicin name = "Capsaicin Oil" id = "capsaicin" diff --git a/code/modules/supermatter/setup_supermatter.dm b/code/modules/supermatter/setup_supermatter.dm index 01aaeb0a21..559f035cb2 100644 --- a/code/modules/supermatter/setup_supermatter.dm +++ b/code/modules/supermatter/setup_supermatter.dm @@ -187,9 +187,15 @@ -// Tries to enable the SMES on max input/output settings. With load balancing it should be fine as long as engine outputs at least ~500kW +// Tries to enable the SMES on max input/output settings, unless the vars are changed. THIS SHOULD NOT BE PLACED ON THE MAIN SMES OR THE ENGINE WILL OVERHEAT /obj/effect/engine_setup/smes/ name = "SMES Marker" + var/target_input_level //These are in watts, the display is in kilowatts. Add three zeros to the value you want. + var/target_output_level //These are in watts, the display is in kilowatts. Add three zeros to the value you want. + +/obj/effect/engine_setup/smes/main + target_input_level = 750000 + target_output_level = 750000 /obj/effect/engine_setup/smes/activate() ..() @@ -199,8 +205,22 @@ return SETUP_WARNING S.input_attempt = 1 S.output_attempt = 1 - S.input_level = S.input_level_max - S.output_level = S.output_level_max + if(target_input_level) + if(target_input_level > S.input_level_max) + S.input_level = S.input_level_max + else + S.input_level = target_input_level + else + S.input_level = S.input_level_max + + if(target_output_level) + if(target_output_level > S.input_level_max) + S.output_level = S.output_level_max + else + S.output_level = target_output_level + else + S.output_level = S.output_level_max + S.update_icon() return SETUP_OK diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 19007addae..8aab6a0a46 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -127,7 +127,8 @@ // Not staying still fails you too. if(success) - if(!do_mob(user, M, rand(S.min_duration, S.max_duration))) + var/calc_duration = rand(S.min_duration, S.max_duration) + if(!do_mob(user, M, calc_duration * toolspeed)) success = FALSE to_chat(user, "You must remain close to your patient to conduct surgery.") diff --git a/html/changelogs/Belsima-Vox.yml b/html/changelogs/Belsima-Vox.yml new file mode 100644 index 0000000000..1fd839c650 --- /dev/null +++ b/html/changelogs/Belsima-Vox.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: Belsima + +# 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: + - imageadd: "Vox have been entirely resprited." diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index c19e27ca9d..40e848a1f6 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/human_races/r_def_vox.dmi b/icons/mob/human_races/r_def_vox.dmi index 2024f52583..037056eef5 100644 Binary files a/icons/mob/human_races/r_def_vox.dmi and b/icons/mob/human_races/r_def_vox.dmi differ diff --git a/icons/mob/human_races/r_def_vox_old.dmi b/icons/mob/human_races/r_def_vox_old.dmi new file mode 100644 index 0000000000..2024f52583 Binary files /dev/null and b/icons/mob/human_races/r_def_vox_old.dmi differ diff --git a/icons/mob/human_races/r_vox.dmi b/icons/mob/human_races/r_vox.dmi index f212822aaf..ce5a869100 100644 Binary files a/icons/mob/human_races/r_vox.dmi and b/icons/mob/human_races/r_vox.dmi differ diff --git a/icons/mob/human_races/r_vox_old.dmi b/icons/mob/human_races/r_vox_old.dmi new file mode 100644 index 0000000000..f212822aaf Binary files /dev/null and b/icons/mob/human_races/r_vox_old.dmi differ diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index d03cdfca7c..578418352b 100644 Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi index 4a833d744c..5728f1ddf7 100644 Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ diff --git a/icons/mob/species/vox/eyes.dmi b/icons/mob/species/vox/eyes.dmi index c81f6217a2..384fc15d99 100644 Binary files a/icons/mob/species/vox/eyes.dmi and b/icons/mob/species/vox/eyes.dmi differ diff --git a/icons/mob/species/vox/head.dmi b/icons/mob/species/vox/head.dmi index 6f272f4d1d..884dfea1f7 100644 Binary files a/icons/mob/species/vox/head.dmi and b/icons/mob/species/vox/head.dmi differ diff --git a/icons/mob/species/vox/masks.dmi b/icons/mob/species/vox/masks.dmi index 58bb8f7f20..6afaa10c22 100644 Binary files a/icons/mob/species/vox/masks.dmi and b/icons/mob/species/vox/masks.dmi differ diff --git a/icons/mob/species/vox/shoes.dmi b/icons/mob/species/vox/shoes.dmi index a5a271f7cb..5bdbcefc54 100644 Binary files a/icons/mob/species/vox/shoes.dmi and b/icons/mob/species/vox/shoes.dmi differ diff --git a/icons/mob/species/vox/suit.dmi b/icons/mob/species/vox/suit.dmi index 9692c5d111..abca19cc65 100644 Binary files a/icons/mob/species/vox/suit.dmi and b/icons/mob/species/vox/suit.dmi differ diff --git a/icons/mob/species/vox/uniform.dmi b/icons/mob/species/vox/uniform.dmi index 515595633f..46fe74d39c 100644 Binary files a/icons/mob/species/vox/uniform.dmi and b/icons/mob/species/vox/uniform.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 9d6aee99c4..db0bb55a1f 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm index 1fbe315f26..b60a19ee63 100644 --- a/maps/northern_star/polaris-1.dmm +++ b/maps/northern_star/polaris-1.dmm @@ -9557,7 +9557,7 @@ "dBO" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/engineering/engine_waste) "dBP" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/engineering/engine_waste) "dBQ" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/engineering/engine_waste) -"dBR" = (/obj/machinery/power/smes/buildable{charge = 1e+007; cur_coils = 4; input_attempt = 1; input_level = 500000; output_level = 500000; RCon_tag = "Engine - Main"},/obj/structure/cable,/turf/simulated/floor/plating,/area/engineering/engine_smes) +"dBR" = (/obj/machinery/power/smes/buildable{charge = 1e+007; cur_coils = 4; input_attempt = 1; input_level = 500000; output_level = 500000; RCon_tag = "Engine - Main"},/obj/structure/cable,/obj/effect/engine_setup/smes/main,/turf/simulated/floor/plating,/area/engineering/engine_smes) "dBS" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/power/terminal{dir = 8},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/button/remote/airlock{id = "engine_electrical_maintenance"; name = "Door Bolt Control"; pixel_x = 26; pixel_y = 0; req_access = list(10); specialfunctions = 4},/turf/simulated/floor/tiled,/area/engineering/engine_smes) "dBT" = (/obj/machinery/computer/general_air_control/supermatter_core{frequency = 1438; input_tag = "cooling_in"; name = "Engine Cooling Control"; output_tag = "cooling_out"; pressure_setting = 100; sensors = list("engine_sensor" = "Engine Core")},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) "dBU" = (/obj/machinery/computer/rcon,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) @@ -9624,7 +9624,7 @@ "dDd" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) "dDe" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/obj/machinery/alarm/nobreach{dir = 2; pixel_y = 22},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) "dDf" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable/yellow,/obj/machinery/power/sensor{name = "Powernet Sensor - Engine Output"; name_tag = "Engine Output"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) -"dDg" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 2e+006; input_attempt = 1; input_level = 100000; output_level = 200000; RCon_tag = "Engine - Core"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) +"dDg" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 2e+006; input_attempt = 1; input_level = 100000; output_level = 200000; RCon_tag = "Engine - Core"},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/engine_setup/smes,/turf/simulated/floor/plating,/area/engineering/engine_room) "dDh" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) "dDi" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) "dDj" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9696,22 +9696,22 @@ "dEx" = (/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/engineering/aft_hallway) "dEy" = (/turf/simulated/floor,/area/shuttle/constructionsite/station) "dEz" = (/obj/structure/closet/crate,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/shuttle/constructionsite/station) -"dEA" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 4; tag_south = 2; tag_west = 0; use_power = 0},/turf/simulated/floor/plating,/area/engineering/engine_room) +"dEA" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 4; tag_south = 2; tag_west = 0; use_power = 0},/obj/effect/engine_setup/filter,/turf/simulated/floor/plating,/area/engineering/engine_room) "dEB" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor,/area/engineering/engine_room) -"dEC" = (/obj/machinery/atmospherics/omni/filter{tag_east = 0; tag_north = 4; tag_south = 2; tag_west = 1; use_power = 0},/turf/simulated/floor/plating,/area/engineering/engine_room) +"dEC" = (/obj/machinery/atmospherics/omni/filter{tag_east = 0; tag_north = 4; tag_south = 2; tag_west = 1; use_power = 0},/obj/effect/engine_setup/filter,/turf/simulated/floor/plating,/area/engineering/engine_room) "dED" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor,/area/engineering/engine_room) "dEE" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor,/area/engineering/engine_room) "dEF" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) "dEG" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_room) "dEH" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) -"dEI" = (/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor,/area/engineering/engine_room) -"dEJ" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor,/area/engineering/engine_room) +"dEI" = (/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/engine_setup/coolant_canister,/turf/simulated/floor,/area/engineering/engine_room) +"dEJ" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/effect/engine_setup/pump_max,/turf/simulated/floor,/area/engineering/engine_room) "dEK" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor,/area/engineering/engine_room) "dEL" = (/obj/machinery/atmospherics/valve/digital{dir = 4; name = "Emergency Cooling Valve 1"},/turf/simulated/floor/plating,/area/engineering/engine_room) "dEM" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) "dEN" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 1},/turf/simulated/floor,/area/engineering/engine_room) -"dEO" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor,/area/engineering/engine_room) -"dEP" = (/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor,/area/engineering/engine_room) +"dEO" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/effect/engine_setup/pump_max,/turf/simulated/floor,/area/engineering/engine_room) +"dEP" = (/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/engine_setup/coolant_canister,/turf/simulated/floor,/area/engineering/engine_room) "dEQ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/space,/area/space) "dER" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/space,/area/space) "dES" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) @@ -9745,7 +9745,7 @@ "dFu" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_room) "dFv" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 8},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_room) "dFw" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 1},/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) -"dFx" = (/obj/machinery/atmospherics/binary/pump/high_power{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) +"dFx" = (/obj/machinery/atmospherics/binary/pump/high_power{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/engine_setup/pump_max,/turf/simulated/floor/plating,/area/engineering/engine_room) "dFy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering/engine_room) "dFz" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/space,/area/space) "dFA" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Dock 1 End"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "trade_shuttle_dock_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) @@ -9762,8 +9762,8 @@ "dFL" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/cee,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "dFM" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/aft_hallway) "dFN" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor,/area/engineering/engine_room) -"dFO" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/portable_atmospherics/canister/empty,/turf/simulated/floor,/area/engineering/engine_room) -"dFP" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor,/area/engineering/engine_room) +"dFO" = (/obj/machinery/atmospherics/binary/pump,/obj/effect/engine_setup/pump_max,/turf/simulated/floor,/area/engineering/engine_room) +"dFP" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/portable_atmospherics/canister/empty,/obj/effect/engine_setup/empty_canister,/turf/simulated/floor,/area/engineering/engine_room) "dFQ" = (/obj/machinery/atmospherics/pipe/cap/visible,/turf/simulated/floor,/area/engineering/engine_room) "dFR" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/plating,/area/engineering/engine_room) "dFS" = (/obj/machinery/light,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9812,7 +9812,7 @@ "dGJ" = (/turf/space,/area/shuttle/administration/station) "dGK" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_xeno_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/starboard) "dGL" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor,/area/engineering/engine_room) -"dGM" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor,/area/engineering/engine_room) +"dGM" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/engine_setup/coolant_canister,/turf/simulated/floor,/area/engineering/engine_room) "dGN" = (/obj/machinery/atmospherics/unary/heat_exchanger{dir = 1},/turf/simulated/floor,/area/engineering/engine_room) "dGO" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) "dGP" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)"; icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (NORTH)"; icon_state = "phoronrwindow"; dir = 1},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)"; icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 1; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9828,7 +9828,7 @@ "dGZ" = (/obj/machinery/atmospherics/unary/heat_exchanger,/turf/simulated/floor,/area/engineering/engine_room) "dHa" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)"; icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)"; icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 1; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room) "dHb" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room) -"dHc" = (/obj/machinery/power/supermatter{layer = 4},/obj/machinery/mass_driver{id = "enginecore"},/turf/simulated/floor/greengrid/nitrogen,/area/engineering/engine_room) +"dHc" = (/obj/machinery/power/supermatter{layer = 4},/obj/machinery/mass_driver{id = "enginecore"},/obj/effect/engine_setup/core,/turf/simulated/floor/greengrid/nitrogen,/area/engineering/engine_room) "dHd" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room) "dHe" = (/obj/machinery/power/generator{anchored = 1; dir = 4},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) "dHf" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 6},/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -10111,10 +10111,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndz aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndzndzndzndzndznaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxdAXdDUdDUdDUdAXdADdDVdDWdDXdDYdDZdEadEbdEcdEddEedEddEddEddEddEddEfdEgdDrdDrdADdCGdCHdDvdDsdCHdCJaccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadprdiQdpsdptdpudiRdiRdiRdiRdiRdiQdiQdEhdEidEidiQdiQaaaaaaaaaaaaaaaaaadkbdkbdkbdkbdkbaaaaaaaaaaaaaaaaaadiWdiWdEjdEjdEkdiWdiWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjddjddEldEmdEmdjddjdaaaaaadwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdjidjidEndEodEpdjiaafaaidAPdCQdEqdCQdAPdCSdErdCSdAPaaiaaiaafaafaafaafdEsdEtdEudEvdEwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadvedvedvedvedvedvedvedvedvedvedvedvedvedvedveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndzndzndzndzndznaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaidExdBJdEydEydEzdBJdADdDVdDWdEAdEBdECdEDdEEdEEdEFdEGdEHdEIdEJdEKdELdEMdENdEOdEPdADdEQdCHdDtdDudCHdERaccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaadjVdESdETdEUdjVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkcdEVdEWdEXdkcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkidEYdEZdFadkiaaaaaaaaadwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdFbdFcdFddFedFfdkoaaiaaiaaidCQdFgdCQaaadCSdFhdCSaaiaaiaaiaaiaaiaaiabxabxdFidFjdFiaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadvedvedvedvedvedvedvedvedvedvedvedvedvedvedveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndzndzndzndzndzndzndznaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFkaaaaaadFkaaaaaaaaadFkaaaaaaaaaaaaaaadFkaaaaaaaaadFkaaaaaadFkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiduodAWdAXdBJdAXdAWdADdDVdDWdFldFmdFndDVdDVdDVdFodFpdFqdFrdFrdFsdFtdFudFvdFwdFxdFydFzdCIdDvdDsdCIdDtaccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadledFAdDAdFBdleaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnQdFCdDDdFDdnQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnVdFEdDKdFFdnVaaaaaaaaadwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdFGdFHdFIdFJdFKdnZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaaaaaaaaaaeaaeaaadFidFLdFiaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadvedvedvedvedvedvedvedvedvedvedvedvedvedvedveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndzndzndzndzndzndzndzndzndzndzndzndzndznaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFkdFkdFkdFkaaaaaaaaadFkdFkdFkdFkdFkdFkdFkaaaaaaaaadFkdFkdFkdFkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFMduodExabxdExduodADdFNdDWdFOdFPdFQdDVdFRdFSdFTdFUdFVdFWdFXdFYdFZdGadGbdGcdGddGedFzdCHdDtdDudCHdERaccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadGfdmbdGgdGhdljaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdGidGjdrrdGkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadGldrwdGmdGndlpaaaaaaaaadwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdrCdrDdGodrDdrDdGpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaadGqdGrdGqaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadvedvedvedvedvedvedvedvedvedvedvedvedvedvedveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndzndzndzndzndzndzndzndzndzndzndzndzndznaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFkdFkdFkdFkaaaaaaaaadFkdFkdFkdFkdFkdFkdFkaaaaaaaaadFkdFkdFkdFkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFMduodExabxdExduodADdFNdDWdFPdFOdFQdDVdFRdFSdFTdFUdFVdFWdFXdFYdFZdGadGbdGcdGddGedFzdCHdDtdDudCHdERaccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadGfdmbdGgdGhdljaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdGidGjdrrdGkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadGldrwdGmdGndlpaaaaaaaaadwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdrCdrDdGodrDdrDdGpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaadGqdGrdGqaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadvedvedvedvedvedvedvedvedvedvedvedvedvedvedveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndzndzndzndzndzndzndzndzndzndzndzndzndznaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFkdFkdFkdFkaaaaaadFkdFkdFkdFkdFkdFkdFkdFkdFkaaaaaadFkdFkdFkdFkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaidGsaaiaaidADdGtdFldGudGvdGwdDVdGxdADdGydGzdGAdADdGBdGCdGDdGEdGFdGGdGHdADdCGdCHdDvdDsdCHdCJaccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadGIdGIdGIdGIaaaaaaaaaaaadGIdGIdGIdGIdGIaaaaaaaaaaaaaaaaaadGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaeaaaaaaaaaaaadGKaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaadvedvedvedvedvedvedvedvedvedvedvedvedvedvedveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndzndzndzndzndzndzndzndzndzndzndzndzndznaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFkdFkdFkdFkaaaaaadFkdFkdFkdFkdFkdFkdFkdFkdFkaaaaaadFkdFkdFkdFkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccaaaaaidADdGLdDVdGMdGNdGNdDVdGOdGPdGQdGRdGSdGPdGTdGUdFtdFudGVdGWdGXdADdDsdCIdDtdDudCIdDvaccaaaaaaaaaaaaaaaaaaaaaaaadGIdGIdGIdGIdGIdGIdGIdGIdGIdGIaaaaaaaaaaaaaaadGIdGIdGIdGIdGIdGIaaaaaadGIdGIdGIdGIdGIdGIaaaaaaaaaaaaaaadGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaadGYaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaadvedvedvedvedvedvedvedvedvedvedvedvedvedvedvedvedveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndzndzndzndzndzndzndzndzndzndzndzndzndznaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccaaaaaadADdDVdDVdFPdGZdGZdDVdGOdHadHbdHcdHddHadGTdGOdFZdHedGbdHfdHgdADdCGdCHdDvdDsdCHdCJaccaaaaaaaaaaaaaaaaaaaaadGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIaaaaaaaaadGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIaaaaaaaaaaaadGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccaccaccdAGaaeaaeaaeaaedGYaaeaaeaaeaaeaaeaazaccaccaaaaaaaaaaaaaaaaaadvedvedvedvedvedvedvedvedvedvedvedvedvedvedvedvedveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndzndzndzndzndzndzndzndzndzndzndzndzndznaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccaaaaaadADdDVdDVdFOdGZdGZdDVdGOdHadHbdHcdHddHadGTdGOdFZdHedGbdHfdHgdADdCGdCHdDvdDsdCHdCJaccaaaaaaaaaaaaaaaaaaaaadGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIaaaaaaaaadGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIaaaaaaaaaaaadGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccaccaccdAGaaeaaeaaeaaedGYaaeaaeaaeaaeaaeaazaccaccaaaaaaaaaaaaaaaaaadvedvedvedvedvedvedvedvedvedvedvedvedvedvedvedvedveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndzndzndzndzndzndzndzndzndzndzndzndzndznaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccaaaaaadADdADdDVdHhdGvdGvdHidGOdHjdHkdHldHmdHjdHndHodHpdHqdHrdHsdADdADdEQdCHdDtdDudCHdERaccaaaaaaaaaaaaaaaaaaaaadGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIaaaaaaaaadGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccaaaaaeaaaaaeaaaaaaaaadGYaaaaaeaaeaaaaaaaaaaaaaccaaaaaaaaaaaaaaaaaadvedvedvedvedvedvedvedvedvedvedvedvedvedvedvedvedveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndzndzndzndzndzndzndzndzndzndzndzndzndznaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAGaaaaaaaaadADdADdHtdHudHtdHtdADdADdADdHvdADdADdADdADdADdHwdADdADdADaaedDudCIdDvdDsdCIdDtaccaaaaaaaaaaaaaaaaaaaaadGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIaaaaaaaaadGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccaaadHxdHxdHxdHxdHxaaedGYaaedHxdHxdHxdHxdHxaaaaccaaaaaaaaaaaaaaaaaadvedvedvedvedvedvedvedvedvedvedvedvedvedvedvedvedveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzndzndzndzndzndzndzndzndzndzndzndzndzndzndznaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkdFkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccaccaaaaaaaaaaaadHydHydHydHyaaeaaedHzaaadHzaaeaaaaaeaaaaaaaaeaaaaaaaaedEQdCHdDtdDudCHdERaccaaaaaaaaaaaaaaaaaaaaadGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIdGIaaaaaaaaadGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJdGJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXdwXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccaaedHAdHBdHBdHBdHBdHCdHDdHCdHEdHEdHEdHEdHFaaeaccaaaaaaaaaaaaaaaaaadvedvedvedvedvedvedvedvedvedvedvedvedvedvedvedvedveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/southern_cross/southern_cross_defines.dm b/maps/southern_cross/southern_cross_defines.dm index 5650ad5554..40f3d4ef40 100644 --- a/maps/southern_cross/southern_cross_defines.dm +++ b/maps/southern_cross/southern_cross_defines.dm @@ -149,4 +149,11 @@ ..() teleport_x = src.x teleport_y = 2 - teleport_z = Z_LEVEL_SURFACE \ No newline at end of file + teleport_z = Z_LEVEL_SURFACE + +/datum/planet/sif + expected_z_levels = list( + Z_LEVEL_SURFACE, + Z_LEVEL_SURFACE_MINE, + Z_LEVEL_SURFACE_WILD + ) \ No newline at end of file diff --git a/polaris.dme b/polaris.dme index 35278a892c..df0a5c9089 100644 --- a/polaris.dme +++ b/polaris.dme @@ -155,7 +155,6 @@ #include "code\controllers\Processes\event.dm" #include "code\controllers\Processes\game_master.dm" #include "code\controllers\Processes\inactivity.dm" -#include "code\controllers\Processes\lighting.dm" #include "code\controllers\Processes\machinery.dm" #include "code\controllers\Processes\mob.dm" #include "code\controllers\Processes\nanoui.dm" @@ -173,6 +172,7 @@ #include "code\controllers\ProcessScheduler\core\processScheduler.dm" #include "code\controllers\subsystems\creation.dm" #include "code\controllers\subsystems\garbage.dm" +#include "code\controllers\subsystems\lighting.dm" #include "code\datums\ai_law_sets.dm" #include "code\datums\ai_laws.dm" #include "code\datums\browser.dm" @@ -2265,7 +2265,6 @@ #include "interface\interface.dm" #include "interface\skin.dmf" #include "maps\northern_star\northern_star.dm" -#include "maps\northern_star\northern_star_defines.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\cave_submaps\cave.dm" #include "maps\submaps\space_submaps\space.dm"