diff --git a/baystation12.dme b/baystation12.dme index b309d6d0e42..5ecbbed4251 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -454,7 +454,9 @@ #include "code\game\gamemodes\nuclear\nuclear.dm" #include "code\game\gamemodes\nuclear\nuclearbomb.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm" +#include "code\game\gamemodes\revolution\anti_revolution.dm" #include "code\game\gamemodes\revolution\revolution.dm" +#include "code\game\gamemodes\revolution\rp_revolution.dm" #include "code\game\gamemodes\sandbox\h_sandbox.dm" #include "code\game\gamemodes\sandbox\sandbox.dm" #include "code\game\gamemodes\traitor\traitor.dm" @@ -479,6 +481,7 @@ #include "code\game\jobs\job\science.dm" #include "code\game\jobs\job\security.dm" #include "code\game\jobs\job\silicon.dm" +#include "code\game\machinery\adv_med.dm" #include "code\game\machinery\ai_slipper.dm" #include "code\game\machinery\airlock_control.dm" #include "code\game\machinery\alarm.dm" @@ -494,10 +497,12 @@ #include "code\game\machinery\door_control.dm" #include "code\game\machinery\doppler_array.dm" #include "code\game\machinery\flasher.dm" +#include "code\game\machinery\floodlight.dm" #include "code\game\machinery\Freezer.dm" #include "code\game\machinery\hologram.dm" #include "code\game\machinery\hydroponics.dm" #include "code\game\machinery\igniter.dm" +#include "code\game\machinery\iv_drip.dm" #include "code\game\machinery\lightswitch.dm" #include "code\game\machinery\machinery.dm" #include "code\game\machinery\magnet.dm" @@ -519,6 +524,7 @@ #include "code\game\machinery\suit_storage_unit.dm" #include "code\game\machinery\syndicatebeacon.dm" #include "code\game\machinery\teleporter.dm" +#include "code\game\machinery\transformer.dm" #include "code\game\machinery\turrets.dm" #include "code\game\machinery\vending.dm" #include "code\game\machinery\washing_machine.dm" @@ -647,6 +653,7 @@ #include "code\game\objects\effects\decals\misc.dm" #include "code\game\objects\effects\decals\remains.dm" #include "code\game\objects\effects\decals\Cleanable\aliens.dm" +#include "code\game\objects\effects\decals\Cleanable\fuel.dm" #include "code\game\objects\effects\decals\Cleanable\humans.dm" #include "code\game\objects\effects\decals\Cleanable\misc.dm" #include "code\game\objects\effects\decals\Cleanable\robots.dm" @@ -786,6 +793,7 @@ #include "code\game\objects\structures\noticeboard.dm" #include "code\game\objects\structures\shuttle_engines.dm" #include "code\game\objects\structures\tables_racks.dm" +#include "code\game\objects\structures\tank_dispenser.dm" #include "code\game\objects\structures\target_stake.dm" #include "code\game\objects\structures\watercloset.dm" #include "code\game\objects\structures\windoor_assembly.dm" @@ -1235,6 +1243,7 @@ #include "code\modules\reagents\reagent_containers.dm" #include "code\modules\reagents\reagent_dispenser.dm" #include "code\modules\reagents\syringe_gun.dm" +#include "code\modules\reagents\reagent_containers\blood_pack.dm" #include "code\modules\reagents\reagent_containers\borghydro.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" #include "code\modules\reagents\reagent_containers\food.dm" diff --git a/code/datums/disease.dm b/code/datums/disease.dm index 1f70c504e76..ad7fd93e45e 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -43,10 +43,12 @@ to null does not delete the object itself. Thank you. var/severity = null//severity descr var/longevity = 250//time in "ticks" the virus stays in inanimate object (blood stains, corpses, etc). In syringes, bottles and beakers it stays infinitely. var/list/hidden = list(0, 0) - var/can_carry = 1 // If the disease allows "carriers". var/age = 0 // age of the disease in the current mob var/stage_minimum_age = 0 // how old the disease must be to advance per stage // if hidden[1] is true, then virus is hidden from medical scanners + var/can_carry = 1 // If the disease allows "carriers". + var/age = 0 // age of the disease in the current mob + var/stage_minimum_age = 0 // how old the disease must be to advance per stage + // if hidden[1] is true, then virus is hidden from medical scanners // if hidden[2] is true, then virus is hidden from PANDEMIC machine - /datum/disease/proc/stage_act() age++ var/cure_present = has_cure() diff --git a/code/game/algorithm.dm b/code/game/algorithm.dm deleted file mode 100644 index b9f08159b0f..00000000000 --- a/code/game/algorithm.dm +++ /dev/null @@ -1,74 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -#define RECOMMENDED_VERSION 494 - -/world/New() - ..() - if(byond_version < RECOMMENDED_VERSION) - world.log << "Your server's byond version does not meet the recommended requirements for Baystation12. Please update BYOND" - - diary = file("data/logs/[time2text(world.realtime, "YYYY/MM-Month/DD-Day")].log") - diary << {" - -Starting up. [time2text(world.timeofday, "hh:mm.ss")] ---------------------- -"} - - diaryofmeanpeople = file("data/logs/[time2text(world.realtime, "YYYY/MM-Month/DD-Day")] Attack.log") - diaryofmeanpeople << {" - -Starting up. [time2text(world.timeofday, "hh:mm.ss")] ---------------------- -"} - - href_logfile = file("data/logs/[time2text(world.realtime, "YYYY/MM-Month/DD-Day")] hrefs.html") - - jobban_loadbanfile() - jobban_updatelegacybans() - LoadBans() - make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) - process_teleport_locs() //Sets up the wizard teleport locations - process_ghost_teleport_locs() //Sets up ghost teleport locations. - sleep_offline = 1 - - spawn(180) //so we aren't adding to the round-start lag - /*if(config.ToRban) - ToRban_autoupdate()*/ - if(config.kick_inactive) - KickInactiveClients() - -#undef RECOMMENDED_VERSION -#define INACTIVITY_KICK 6000 //10 minutes in ticks (approx.) -/world/proc/KickInactiveClients() - for(var/client/C) - if( !C.holder && (C.inactivity >= INACTIVITY_KICK) ) - if(C.mob) - if(!istype(C.mob, /mob/dead/)) - log_access("AFK: [key_name(C)]") - C << "\red You have been inactive for more than 10 minutes and have been disconnected." - del(C) - spawn(3000) KickInactiveClients()//more or less five minutes -#undef INACTIVITY_KICK - -/// EXPERIMENTAL STUFF - -// This function counts a passed job. -proc/countJob(rank) - var/jobCount = 0 - for(var/mob/H in player_list) - if(H.mind && H.mind.assigned_role == rank) - jobCount++ - return jobCount - -/proc/AutoUpdateAI(obj/subject) - if (subject!=null) - for(var/mob/living/silicon/ai/M in player_list) - if ((M.client && M.machine == subject)) - subject.attack_ai(M) - -/proc/AutoUpdateTK(obj/subject) - if (subject!=null) - for(var/obj/item/tk_grab/T in world) - if (T.host) - var/mob/M = T.host - if(M.client && M.machine == subject) - subject.attack_hand(M) diff --git a/code/game/cellautomata.dm b/code/game/cellautomata.dm deleted file mode 100644 index 86a002b51ca..00000000000 --- a/code/game/cellautomata.dm +++ /dev/null @@ -1,202 +0,0 @@ -/world/proc/load_mode() - var/text = file2text("data/mode.txt") - if (text) - var/list/lines = dd_text2list(text, "\n") - if (lines[1]) - master_mode = lines[1] - diary << "Saved mode is '[master_mode]'" - -/world/proc/save_mode(var/the_mode) - var/F = file("data/mode.txt") - fdel(F) - F << the_mode - -/world/proc/load_motd() - join_motd = file2text("config/motd.txt") - - -/world/proc/load_admins() - var/text = file2text("config/admins.txt") - if (!text) - diary << "Failed to load config/admins.txt\n" - else - var/list/lines = dd_text2list(text, "\n") - for(var/line in lines) - if (!line) - continue - - if (copytext(line, 1, 2) == ";") - continue - - var/pos = findtext(line, " - ", 1, null) - if (pos) - var/m_key = copytext(line, 1, pos) - var/a_lev = copytext(line, pos + 3, length(line) + 1) - admins[m_key] = a_lev - diary << ("ADMIN: [m_key] = [a_lev]") - - // look for moderators in a separate file - text = file2text("config/moderators.txt") - if (!text) - diary << "Failed to load config/moderators.txt\n" - else - var/list/lines = dd_text2list(text, "\n") - for(var/line in lines) - if (!line) - continue - - if (copytext(line, 1, 2) == ";") - continue - - var/m_key = copytext(line, 1, length(line)+1) - var/a_lev = "Moderator" - admins[m_key] = a_lev - -/world/proc/load_testers() - var/text = file2text("config/testers.txt") - if (!text) - diary << "Failed to load config/testers.txt\n" - else - var/list/lines = dd_text2list(text, "\n") - for(var/line in lines) - if (!line) - continue - - if (copytext(line, 1, 2) == ";") - continue - - var/pos = findtext(line, " - ", 1, null) - if (pos) - var/m_key = copytext(line, 1, pos) - var/a_lev = copytext(line, pos + 3, length(line) + 1) - admins[m_key] = a_lev - - -/world/proc/load_configuration() - config = new /datum/configuration() - config.load("config/config.txt") - config.load("config/game_options.txt","game_options") - //config.loadsql("config/dbconfig.txt") - //config.loadforumsql("config/forumdbconfig.txt") - // apply some settings from config.. - abandon_allowed = config.respawn - -/world/New() - src.load_configuration() - - if (config && config.server_name != null && config.server_suffix && world.port > 0) - // dumb and hardcoded but I don't care~ - config.server_name += " #[(world.port % 1000) / 100]" - - src.load_mode() - src.load_motd() - src.load_admins() - investigate_reset() - - if (config.usealienwhitelist) - load_alienwhitelist() - if (config.usewhitelist) - load_whitelist() - - LoadBansjob() - //Get_Holiday() //~Carn, needs to be here when the station is named so :P - src.update_status() - makepowernets() - - sun = new /datum/sun() - vote = new /datum/vote() - radio_controller = new /datum/controller/radio() - data_core = new /obj/effect/datacore() - paiController = new /datum/paiController() - - ..() - - sleep(50) - - plmaster = new /obj/effect/overlay( ) - plmaster.icon = 'icons/effects/tile_effects.dmi' - plmaster.icon_state = "plasma" - plmaster.layer = FLY_LAYER - plmaster.mouse_opacity = 0 - - slmaster = new /obj/effect/overlay( ) - slmaster.icon = 'icons/effects/tile_effects.dmi' - slmaster.icon_state = "sleeping_agent" - slmaster.layer = FLY_LAYER - slmaster.mouse_opacity = 0 - - src.update_status() - - socket_talk = new /datum/socket_talk() - master_controller = new /datum/controller/game_controller() - spawn(-1) - master_controller.setup() - lighting_controller.Initialize() - return - -//Crispy fullban -/world/Reboot(var/reason) - spawn(0) - send2irc(world.url,"Server Rebooting!") - socket_talk.send_raw("type=reboot") - //world << sound(pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg')) // random end sounds!! - LastyBatsy - - for(var/client/C) - if (config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite - C << link("byond://[config.server]") - else - C << link("byond://[world.address]:[world.port]") - -// sleep(10) // wait for sound to play - ..(reason) - -/atom/proc/check_eye(user as mob) - if (istype(user, /mob/living/silicon/ai)) - return 1 - return - -/atom/proc/on_reagent_change() - return - -/atom/proc/Bumped(AM as mob|obj) - return - -/atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes) - spawn( 0 ) - if ((A && yes)) - A.last_bumped = world.time - A.Bumped(src) - return - ..() - return - -// **** Note in 40.93.4, split into obj/mob/turf point verbs, no area - -/atom/verb/point() - set name = "Point To" - set category = "Object" - set src in oview() - var/atom/this = src//detach proc from src - src = null - - if(!usr || !isturf(usr.loc)) - return - if(usr.stat || usr.restrained()) - return - if(usr.status_flags & FAKEDEATH) - return - - var/tile = get_turf(this) - if (!tile) - return - - var/P = new /obj/effect/decal/point(tile) - spawn (20) - if(P) del(P) - - usr.visible_message("[usr] points to [this]") - -/obj/effect/decal/point/point() - set src in oview() - set hidden = 1 - return \ No newline at end of file diff --git a/code/game/machinery/camera_circuit.dm b/code/game/machinery/computer/camera_circuit.dm similarity index 100% rename from code/game/machinery/camera_circuit.dm rename to code/game/machinery/computer/camera_circuit.dm diff --git a/code/game/machinery/gateway.dm b/code/game/machinery/gateway.dm deleted file mode 100644 index f44b663acdc..00000000000 --- a/code/game/machinery/gateway.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/structure/gatewayplaceholder - density = 1 - anchored = 1 - icon = 'icons/obj/machines/gateway.dmi' - -/obj/structure/gatewayplaceholder/one - name = "Gateway" - desc = "A gateway" - icon_state = "off1" - -/obj/structure/gatewayplaceholder/two - name = "Gateway" - desc = "A gateway" - icon_state = "off2" - -/obj/structure/gatewayplaceholder/three - name = "Gateway" - desc = "A gateway" - icon_state = "off3" - -/obj/structure/gatewayplaceholder/four - name = "Gateway" - desc = "A gateway" - icon_state = "off4" - -/obj/structure/gatewayplaceholder/five - name = "Gateway" - desc = "A gateway" - icon_state = "off5" - -/obj/structure/gatewayplaceholder/six - name = "Gateway" - desc = "A gateway" - icon_state = "off6" - -/obj/structure/gatewayplaceholder/seven - name = "Gateway" - desc = "A gateway" - icon_state = "off7" - -/obj/structure/gatewayplaceholder/eight - name = "Gateway" - desc = "A gateway" - icon_state = "off8" - -/obj/structure/gatewayplaceholder/nine - name = "Gateway" - desc = "A gateway" - icon_state = "off9" \ No newline at end of file diff --git a/code/game/machinery/small_constructable_frame.dm b/code/game/machinery/small_constructable_frame.dm deleted file mode 100644 index a85973cf8c7..00000000000 --- a/code/game/machinery/small_constructable_frame.dm +++ /dev/null @@ -1,186 +0,0 @@ -//Copied from the constructable frame code to make this a hell of a lot easier. - -/obj/machinery/small_constructable_frame //Made into a seperate type to make future revisions easier. - name = "small machine frame" - icon = 'stock_parts.dmi' - icon_state = "sbox_0" - density = 1 - anchored = 1 - use_power = 0 - var/obj/item/weapon/circuitboard/circuit = null - var/list/components = null - var/list/req_components = null - var/list/req_component_names = null - var/state = 1 - - proc/update_desc() - var/D - if(req_components) - D = "Requires " - var/first = 1 - for(var/I in req_components) - if(req_components[I] > 0) - D += "[first?"":", "][num2text(req_components[I])] [req_component_names[I]]" - first = 0 - if(first) // nothing needs to be added, then - D += "nothing, use a screwdriver to finish it up." - D += "." - desc = D - -/obj/machinery/small_constructable_frame - attackby(obj/item/P as obj, mob/user as mob) - if(P.crit_fail) - user << "\red This part is faulty, you cannot add this to the machine!" - return - switch(state) - if(1) - if(istype(P, /obj/item/weapon/cable_coil)) - if(P:amount >= 5) - playsound(src.loc, 'Deconstruct.ogg', 50, 1) - user << "\blue You start to add cables to the frame." - if(do_after(user, 20)) - P:amount -= 5 - if(!P:amount) del(P) - user << "\blue You add cables to the frame." - state = 2 - icon_state = "sbox_1" - if(istype(P, /obj/item/weapon/wrench)) - playsound(src.loc, 'Ratchet.ogg', 75, 1) - user << "\blue You dismantle the frame" - new /obj/item/stack/sheet/metal(src.loc, 5) - del(src) - if(2) - if(istype(P, /obj/item/weapon/circuitboard)) - var/obj/item/weapon/circuitboard/B = P - if(B.board_type == "smachine") - playsound(src.loc, 'Deconstruct.ogg', 50, 1) - user << "\blue You add the circuit board to the frame." - circuit = P - user.drop_item() - P.loc = src - icon_state = "sbox_2" - state = 3 - components = list() - req_components = circuit.req_components.Copy() - for(var/A in circuit.req_components) - req_components[A] = circuit.req_components[A] - req_component_names = circuit.req_components.Copy() - for(var/A in req_components) - var/cp = text2path(A) - var/obj/ct = new cp() // have to quickly instantiate it get name - req_component_names[A] = ct.name - if(circuit.frame_desc) - desc = circuit.frame_desc - else - update_desc() - user << desc - else - user << "\red This frame does not accept circuit boards of this type!" - if(istype(P, /obj/item/weapon/wirecutters)) - playsound(src.loc, 'wirecutter.ogg', 50, 1) - user << "\blue You remove the cables." - state = 1 - icon_state = "sbox_0" - var/obj/item/weapon/cable_coil/A = new /obj/item/weapon/cable_coil( src.loc ) - A.amount = 5 - - if(3) - if(istype(P, /obj/item/weapon/crowbar)) - playsound(src.loc, 'Crowbar.ogg', 50, 1) - state = 2 - circuit.loc = src.loc - circuit = null - if(components.len == 0) - user << "\blue You remove the circuit board." - else - user << "\blue You remove the circuit board and other components." - for(var/obj/item/weapon/W in components) - W.loc = src.loc - desc = initial(desc) - req_components = null - components = null - icon_state = "sbox_1" - - if(istype(P, /obj/item/weapon/screwdriver)) - var/component_check = 1 - for(var/R in req_components) - if(req_components[R] > 0) - component_check = 0 - break - if(component_check) - playsound(src.loc, 'Screwdriver.ogg', 50, 1) - var/obj/machinery/new_machine = new src.circuit.build_path(src.loc) - for(var/obj/O in new_machine.component_parts) - del(O) - new_machine.component_parts = list() - for(var/obj/O in src) - if(circuit.contain_parts) // things like disposal don't want their parts in them - O.loc = new_machine - else - O.loc = null - new_machine.component_parts += O - if(circuit.contain_parts) - circuit.loc = new_machine - else - circuit.loc = null - new_machine.RefreshParts() - del(src) - - if(istype(P, /obj/item/weapon)) - for(var/I in req_components) - if(istype(P, text2path(I)) && (req_components[I] > 0)) - playsound(src.loc, 'Deconstruct.ogg', 50, 1) - if(istype(P, /obj/item/weapon/cable_coil)) - var/obj/item/weapon/cable_coil/CP = P - if(CP.amount > 1) - var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided - var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src) - CC.amount = camt - CC.update_icon() - CP.use(camt) - components += CC - req_components[I] -= camt - update_desc() - break - user.drop_item() - P.loc = src - components += P - req_components[I]-- - update_desc() - break - user << desc - if(P.loc != src && !istype(P, /obj/item/weapon/cable_coil)) - user << "\red You cannot add that component to the machine!" - - -//Machine Frame Circuit Boards -/*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit, -micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. -Note: Once everything is added to the public areas, will add m_amt and g_amt to circuit boards since autolathe won't be able -to destroy them and players will be able to make replacements. -*/ - -/obj/item/weapon/circuitboard/recharger - name = "Circuit board (recharger)" - build_path = "/obj/machinery/recharger" - board_type = "smachine" - origin_tech = "engineering=2;powerstorage=3" - frame_desc = "Requires 1 Manipulator, 2 capacitors, and 1 cable coil" - req_components = list( - "/obj/item/weapon/stock_parts/manipulator" = 1, - "/obj/item/weapon/cable_coil" = 1, - "/obj/item/weapon/stock_parts/capacitor" = 2) - -/obj/item/weapon/circuitboard/cellrecharger - name = "Circuit board (cell recharger)" - build_path = "/obj/machinery/cell_charger" - board_type = "smachine" - origin_tech = "engineering=2;powerstorage=2" - frame_desc = "Requires 1 Manipulator, 2 capacitors, and 1 cable coil" - req_components = list( - "/obj/item/weapon/stock_parts/manipulator" = 1, - "/obj/item/weapon/cable_coil" = 1, - "/obj/item/weapon/stock_parts/capacitor" = 2) - - - diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm deleted file mode 100644 index 3048e0fe9b3..00000000000 --- a/code/game/master_controller.dm +++ /dev/null @@ -1,240 +0,0 @@ -var/global/datum/controller/game_controller/master_controller //Set in world.New() -var/global/datum/failsafe/Failsafe -var/global/controllernum = "no" -var/global/controller_iteration = 0 - - -var/global/last_tick_timeofday = world.timeofday -var/global/last_tick_duration = 0 - -datum/controller/game_controller - var/processing = 1 - - var/global/air_master_ready = 0 - var/global/sun_ready = 0 - var/global/mobs_ready = 0 - var/global/diseases_ready = 0 - var/global/machines_ready = 0 - var/global/objects_ready = 0 - var/global/networks_ready = 0 - var/global/powernets_ready = 0 - var/global/ticker_ready = 0 - var/global/next_crew_shuttle_vote = 2 // the next automatic vote to call the crew shuttle - - //Used for MC 'proc break' debugging - var/global/obj/last_obj_processed - var/global/datum/disease/last_disease_processed - var/global/obj/machinery/last_machine_processed - var/global/mob/last_mob_processed - - - proc/setup() - if(master_controller && (master_controller != src)) - del(src) - return - //There can be only one master. - - if(!air_master) - air_master = new /datum/controller/air_system() - air_master.setup() - - if(!job_master) - job_master = new /datum/controller/occupations() - if(job_master.SetupOccupations()) - world << "\red \b Job setup complete" - job_master.LoadJobs("config/jobs.txt") - - world.tick_lag = config.Ticklag - - createRandomZlevel() - - setup_objects() - - setupgenetics() - - - /*for(var/i = 0, i < max_secret_rooms, i++) - make_mining_asteroid_secret()*/ - - syndicate_code_phrase = generate_code_phrase()//Sets up code phrase for traitors, for the round. - syndicate_code_response = generate_code_phrase() - - emergency_shuttle = new /datum/shuttle_controller/emergency_shuttle() - - if(!ticker) - ticker = new /datum/controller/gameticker() - - setupfactions() - - spawn - ticker.pregame() - - proc/setup_objects() - world << "\red \b Initializing objects" - sleep(-1) - - for(var/obj/object in world) - object.initialize() - - world << "\red \b Initializing pipe networks" - sleep(-1) - - for(var/obj/machinery/atmospherics/machine in world) - machine.build_network() - - world << "\red \b Initializing atmos machinery." - sleep(-1) - for(var/obj/machinery/atmospherics/unary/vent_pump/T in world) - T.broadcast_status() - for(var/obj/machinery/atmospherics/unary/vent_scrubber/T in world) - T.broadcast_status() - - world << "\red \b Initializations complete." - - proc/set_debug_state(txt) - // This should describe what is currently being done by the master controller - // Useful for crashlogs and similar, because that way it's easy to tell what - // was going on when the server crashed. - socket_talk.send_raw("type=ticker_state&message=[txt]") - return - - - proc/process() - - var/currenttime = world.timeofday - var/diff = (currenttime - last_tick_timeofday) / 10 - last_tick_timeofday = currenttime - last_tick_duration = diff - - if(!processing) - return 0 - controllernum = "yes" - spawn (100) - controllernum = "no" - - controller_iteration++ - - var/start_time = world.timeofday - - // Start an automatic crew shuttle vote every hour starting with the second hour - if(world.time > 10 * 60 * 60 * next_crew_shuttle_vote) - next_crew_shuttle_vote++ - automatic_crew_shuttle_vote() - - air_master_ready = 0 - sun_ready = 0 - mobs_ready = 0 - diseases_ready = 0 - machines_ready = 0 - objects_ready = 0 - networks_ready = 0 - powernets_ready = 0 - ticker_ready = 0 - - spawn(0) - src.set_debug_state("Air Master") - air_master.tick() - air_master_ready = 1 - - sleep(1) - - spawn(0) - src.set_debug_state("Sun Position Calculations") - sun.calc_position() - sun_ready = 1 - - sleep(-1) - - spawn(0) - src.set_debug_state("Mob Processing") - for(var/mob/M in world) - last_mob_processed = M - M.Life() - mobs_ready = 1 - - - - sleep(-1) - - - spawn(0) - src.set_debug_state("Disease Processing") - for(var/datum/disease/D in active_diseases) - last_disease_processed = D - D.process() - diseases_ready = 1 - - spawn(0) - src.set_debug_state("Machinery Processing") - for(var/obj/machinery/machine in machines) - if(machine) - last_machine_processed = machine - machine.process() - if(machine && machine.use_power) - machine.auto_use_power() - - machines_ready = 1 - - sleep(-1) - sleep(1) - - spawn(0) - src.set_debug_state("Object Processing") - for(var/obj/object in processing_objects) - last_obj_processed = object - object.process() - objects_ready = 1 - - spawn(0) - src.set_debug_state("Pipe Network Processing") - for(var/datum/pipe_network/network in pipe_networks) - network.process() - networks_ready = 1 - - spawn(0) - src.set_debug_state("Powernet Processing") - for(var/datum/powernet/P in powernets) - P.reset() - powernets_ready = 1 - - sleep(-1) - - spawn(0) - ticker.process() - ticker_ready = 1 - - sleep(world.timeofday+12-start_time) - - var/IL_check = 0 //Infinite loop check (To report when the master controller breaks.) - while(!air_master_ready || !sun_ready || !mobs_ready || !diseases_ready || !machines_ready || !objects_ready || !networks_ready || !powernets_ready || !ticker_ready) - IL_check++ - if(IL_check > 600) - var/MC_report = "air_master_ready = [air_master_ready]; sun_ready = [sun_ready]; mobs_ready = [mobs_ready]; diseases_ready = [diseases_ready]; machines_ready = [machines_ready]; objects_ready = [objects_ready]; networks_ready = [networks_ready]; powernets_ready = [powernets_ready]; ticker_ready = [ticker_ready];" - message_admins("PROC BREAKAGE WARNING: The game's master contorller appears to be stuck in one of it's cycles. It has looped through it's delaying loop [IL_check] times.") - message_admins("The master controller reports: [MC_report]") - if(!diseases_ready) - if(last_disease_processed) - message_admins("DISEASE PROCESSING stuck on [last_disease_processed]", 0, 1) - else - message_admins("DISEASE PROCESSING stuck on unknown") - if(!machines_ready) - if(last_machine_processed) - message_admins("MACHINE PROCESSING stuck on [last_machine_processed]", 0, 1) - else - message_admins("MACHINE PROCESSING stuck on unknown") - if(!objects_ready) - if(last_obj_processed) - message_admins("OBJ PROCESSING stuck on [last_obj_processed]", 0, 1) - else - message_admins("OBJ PROCESSING stuck on unknown") - log_admin("PROC BREAKAGE WARNING: infinite_loop_check = [IL_check]; [MC_report];") - message_admins("Master controller breaking out of delaying loop. Restarting the round is advised if problem persists. DO NOT manually restart the master controller.") - break; - sleep(1) - - - spawn - process() - - - return 1 \ No newline at end of file diff --git a/code/game/vote.dm b/code/game/vote.dm deleted file mode 100644 index f0e80082448..00000000000 --- a/code/game/vote.dm +++ /dev/null @@ -1,436 +0,0 @@ -/datum/vote/New() - - nextvotetime = world.timeofday // + 10*config.vote_delay - - -/datum/vote/proc/canvote()//marker1 - var/excess = world.timeofday - vote.nextvotetime - - if(excess < -10000) // handle clock-wrapping problems - very long delay (>20 hrs) if wrapped - vote.nextvotetime = world.timeofday - return 1 - return (excess >= 0) - -/datum/vote/proc/nextwait() - return timetext( round( (nextvotetime - world.timeofday)/10) ) - -/datum/vote/proc/endwait() - return timetext( round( (votetime - world.timeofday)/10) ) - -/datum/vote/proc/timetext(var/interval) - var/minutes = round(interval / 60) - var/seconds = round(interval % 60) - - var/tmin = "[minutes>0?num2text(minutes)+"min":null]" - var/tsec = "[seconds>0?num2text(seconds)+"sec":null]" - - if(tmin && tsec) // hack to skip inter-space if either field is blank - return "[tmin] [tsec]" - else - if(!tmin && !tsec) // return '0sec' if 0 time left - return "0sec" - return "[tmin][tsec]" - -/datum/vote/proc/getvotes() - var/list/L = list() - for(var/mob/M in player_list) - if(M.client && M.client.inactivity < 1200) // clients inactive for 2 minutes don't count - L[M.client.vote] += 1 - - return L - - -/datum/vote/proc/endvote() - - if(!voting) // means that voting was aborted by an admin - return - - world << "\red ***Voting has closed." - - log_vote("Voting closed, result was [winner]") - voting = 0 - nextvotetime = world.timeofday + 10*config.vote_delay - - for(var/mob/M in player_list) // clear vote window from all clients - if(M.client) - M << browse(null, "window=vote") - M.client.showvote = 0 - - calcwin() - - if(mode) - if(!ticker) - if(!going) - world << "The game will start soon." - going = 1 - var/wintext = capitalize(winner) - if(winner=="default") - world << "Result is \red No change." - return - - // otherwise change mode - - - world << "Result is change to \red [wintext]" - world.save_mode(winner) - - if(ticker && ticker.mode) - world <<"\red World will reboot in 10 seconds" - - feedback_set_details("end_error","mode vote - [winner]") - - if(blackbox) - blackbox.save_all_data_to_sql() - - sleep(100) - log_game("Rebooting due to mode vote") - world.Reboot() - else - master_mode = winner - - else - - if(winner=="default") - world << "Result is \red No restart." - return - - world << "Result is \red Restart round." - - world <<"\red World will reboot in 5 seconds" - - feedback_set_details("end_error","restart vote") - - if(blackbox) - blackbox.save_all_data_to_sql() - - sleep(50) - log_game("Rebooting due to restart vote") - world.Reboot() - return - - -/datum/vote/proc/calcwin() - - var/list/votes = getvotes() - - if(vote.mode) - var/best = -1 - - for(var/v in votes) - if(v=="none") - continue - if(best < votes[v]) - best = votes[v] - - - var/list/winners = list() - - for(var/v in votes) - if(votes[v] == best) - winners += v - - var/ret = "" - - - for(var/w in winners) - if(lentext(ret) > 0) - ret += "/" - if(w=="default") - winners = list("default") - ret = "No change" - break - else - ret += capitalize(w) - - - - if(winners.len != 1) - ret = "Tie: " + ret - - - if(winners.len == 0) - vote.winner = "default" - ret = "No change" - else - vote.winner = pick(winners) - - return ret - else - - if(votes["default"] < votes["restart"]) - - vote.winner = "restart" - return "Restart" - else - vote.winner = "default" - return "No restart" - - -/mob/verb/vote() - set category = "OOC" - set name = "Vote" - usr.client.showvote = 1 - - - var/text = "Voting" - - var/footer = "
Close" - - - if(config.vote_no_dead && usr.stat == 2) - text += "Voting while dead has been disallowed." - text += footer - usr << browse(text, "window=vote") - usr.client.showvote = 0 - usr.client.vote = "none" - return - - if(vote.voting) - // vote in progress, do the current - - text += "Vote to [vote.mode?"change mode":"restart round"] in progress.
" - text += "[vote.endwait()] until voting is closed.
" - - var/list/votes = vote.getvotes() - - if(vote.mode) // true if changing mode - - text += "Current game mode is: [master_mode].
Select the mode to change to:" - - text +="

Current winner: [vote.calcwin()]
" - - text += footer - - usr << browse(text, "window=vote") - - else // voting to restart - text += "Vote to call crew transfer shuttle round in progress.
" - text += "[vote.endwait()] until voting is closed.
" - - if(vote.instant_restart) - text += "Restart the world? ONLY PRESS THIS IF THERE'S A ROUND-BREAKING GLITCH.
" - else - text += "Call the Crew Transfer Shuttle?
" - - text += "*** Please make sure to only vote 'no' if you yourself are currently enjoying the round. If you find the round to have gone stale, you should always vote 'yes', regardless of how others are feeling about the round.

" - - text +="

Current winner: [vote.calcwin()]
" - - text += footer - - usr << browse(text, "window=vote") - - - else //no vote in progress - - if(shuttlecoming == 1) - usr << "\blue Cannot start Vote - Shuttle has been called." - return - - if(!config.allow_vote_restart && !config.allow_vote_mode) - text += "

Player voting is disabled." - - usr << browse(text, "window=vote") - usr.client.showvote = 0 - return - - if(!vote.canvote()) // not time to vote yet - if(config.allow_vote_restart) text+="Voting to restart is enabled.
" - if(config.allow_vote_mode) - if(ticker.current_state == 1) text+="Voting to change mode is enabled.
" - else text += "Change mode votes are disabled while a round is in progress, vote to restart first.
" - - text+="

Next vote can begin in [vote.nextwait()]." - text+=footer - - usr << browse(text, "window=vote") - - else // voting can begin - if(config.allow_vote_restart) - text += "Begin restart vote.
" - if(config.allow_vote_mode) - if(!ticker || ticker.current_state == 1) - text += "Begin change mode vote.
" - else - text += "Change mode votes are disabled while a round is in progress, vote to restart first.
" - if(src.client.holder) //Strumpetplaya Add - Custom Votes for Admins - text += "Begin custom vote.
" - text += footer - usr << browse(text, "window=vote") - - spawn(20) - if(usr.client && usr.client.showvote && !vote.enteringchoices) - usr.vote() - else - usr << browse(null, "window=vote") - - return - - -/datum/vote/Topic(href, href_list) - ..() - //world << "[usr] has activated the vote Topic" - - if(href_list["voter"]) - world << "[usr.ckey] has attempted to bypass the voting system." //ckey is easy key - return - - if(href_list["vclose"]) - - if(usr) - usr << browse(null, "window=vote") - usr.client.showvote = 0 - return - - if(href_list["vmode"]) - if(vote.voting) - return - - if(!vote.canvote() ) // double check even though this shouldn't happen - return - - vote.mode = text2num(href_list["vmode"])-1 // hack to yield 0=restart, 1=changemode, 2=admincustom - - if(vote.mode == 2) - vote.enteringchoices = 1 - vote.voting = 1 - vote.customname = input(usr, "What are you voting for?", "Custom Vote") as text - if(!vote.customname) - vote.enteringchoices = 0 - vote.voting = 0 - return - - var/N = input(usr, "How many options does this vote have?", "Custom Vote", 0) as num - if(!N) - vote.enteringchoices = 0 - vote.voting = 0 - return - //world << "You're voting for [N] options!" - var/i - vote.choices = list() - for(i=1; i<=N; i++) - var/addvote = input(usr, "What is option #[i]?", "Enter Option #[i]") as text - vote.choices += addvote - //for(var/O in vote.choices) - //world << "[O]" - vote.enteringchoices = 0 - vote.votetime = world.timeofday + config.vote_period*10 // when the vote will end - - spawn(config.vote_period * 10) - vote.endvote() - - world << "\red*** A custom vote has been initiated by [usr.key]." - world << "\red You have [vote.timetext(config.vote_period)] to vote." - log_vote("A custom vote has been started by [usr.key]") - - //log_vote("Voting to [vote.mode ? "change mode" : "restart round"] started by [M.name]/[M.key]") - - for(var/client/C) - if(config.vote_no_default || (config.vote_no_dead && C.mob.stat == 2)) - C.vote = "none" - else - C.vote = "default" - - if(usr) usr.vote() - return - - - if(!ticker && vote.mode == 1) - if(going) - world << "The game start has been delayed." - going = 0 - vote.voting = 1 // now voting - vote.votetime = world.timeofday + config.vote_period*10 // when the vote will end - - spawn(config.vote_period*10) - vote.endvote() - - - - world << "\red*** A vote to [vote.mode?"change game mode":"restart"] has been initiated by [usr.key]." - world << "\red You have [vote.timetext(config.vote_period)] to vote." - - log_vote("Voting to [vote.mode ? "change mode" : "restart round"] started by [usr.name]/[usr.key]") - - for(var/mob/CM in player_list) - if(CM.client) - if( config.vote_no_default || (config.vote_no_dead && CM.stat == 2) ) - CM.client.vote = "none" - else - CM.client.vote = "default" - - if(usr) usr.vote() - return - - - return - - if(href_list["vote"] && vote.voting) - if(usr) - usr.client.vote = href_list["vote"] - - //world << "Setting client [usr.key]'s vote to: [href_list["vote"]]." - - usr.vote() - return - -proc/automatic_crew_shuttle_vote() - - if(vote.voting) - return - - if(!vote.canvote() ) // double check even though this shouldn't happen - return - - vote.mode = 0 - vote.instant_restart = 0 - - vote.voting = 1 // now voting - vote.votetime = world.timeofday + config.vote_period*10 // when the vote will end - - spawn(config.vote_period*10) - vote.endvote() - - world << "\red*** An *automatic* vote to call the crew transfer shuttle has been initiated." - world << "\red You have [vote.timetext(config.vote_period)] to vote." - - log_vote("Automatic vote to call the crew transfer shuttle.") - - for(var/mob/CM in world) - if(CM.client) - if( !CM.is_player_active() ) - CM.client.vote = "none" - else - CM.client.vote = "none" - - return \ No newline at end of file diff --git a/maps/tgstation.2.0.9.1.dmm b/maps/tgstation.2.0.9.1.dmm index be5be23d351..fd54c98886d 100644 --- a/maps/tgstation.2.0.9.1.dmm +++ b/maps/tgstation.2.0.9.1.dmm @@ -1654,7 +1654,7 @@ "aFP" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva) "aFQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/ai_monitored/storage/eva) "aFR" = (/obj/machinery/camera{c_tag = "EVA South"; dir = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor,/area/ai_monitored/storage/eva) -"aFS" = (/obj/machinery/dispenser{pltanks = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva) +"aFS" = (/obj/structure/dispenser{pltanks = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva) "aFT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/primary/central) "aFU" = (/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/hallway/primary/central) "aFV" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Central Hallway North"; dir = 2},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/hallway/primary/central) @@ -4522,7 +4522,7 @@ "bIX" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/mixing) "bIY" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/toxins/mixing) "bIZ" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/toxins/mixing) -"bJa" = (/obj/machinery/dispenser,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/mixing) +"bJa" = (/obj/structure/dispenser,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/mixing) "bJb" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/toxins/mixing) "bJc" = (/obj/machinery/portable_atmospherics/pump,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/mixing) "bJd" = (/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/mixing) @@ -4750,7 +4750,7 @@ "bNr" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Atmospherics Desk"; req_access_txt = "24"},/turf/simulated/floor,/area/atmos) "bNs" = (/obj/effect/landmark/start{name = "Atmospheric Technician"},/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/atmos) "bNt" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/atmos) -"bNu" = (/obj/effect/sign/securearea{pixel_x = 30; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/dispenser{pixel_x = -1},/turf/simulated/floor,/area/atmos) +"bNu" = (/obj/effect/sign/securearea{pixel_x = 30; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/dispenser{pixel_x = -1},/turf/simulated/floor,/area/atmos) "bNv" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/atmos) "bNw" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor,/area/atmos) "bNx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/atmos) @@ -5744,7 +5744,7 @@ "cgx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/turf/simulated/floor,/area/engine/engineering) "cgy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor,/area/engine/engineering) "cgz" = (/turf/simulated/floor,/area/engine/engineering) -"cgA" = (/obj/machinery/dispenser,/turf/simulated/floor,/area/engine/engineering) +"cgA" = (/obj/structure/dispenser,/turf/simulated/floor,/area/engine/engineering) "cgB" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/engine/engineering) "cgC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{dir = 8; icon_state = "yellow"},/area/engine/engineering) "cgD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/engine/engineering) @@ -6518,7 +6518,7 @@ "cvr" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "cvs" = (/obj/machinery/robotic_fabricator,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "cvt" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Thunderdome Autolathe"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) -"cvu" = (/obj/machinery/dispenser,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"cvu" = (/obj/structure/dispenser,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "cvv" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living) "cvw" = (/obj/machinery/door/airlock/centcom{name = "Living Quarters"; opacity = 1; req_access_txt = "105"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living) "cvx" = (/turf/unsimulated/floor{tag = "icon-redyellowfull"; icon_state = "redyellowfull"},/area/centcom/living) @@ -8488,7 +8488,7 @@ "dhl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned) "dhm" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "white"},/area/anomaly/outpost) "dhn" = (/obj/machinery/recharge_station,/turf/simulated/floor{icon_state = "white"},/area/anomaly/outpost) -"dho" = (/obj/machinery/dispenser{pltanks = 0},/turf/simulated/floor{icon_state = "white"},/area/anomaly/outpost) +"dho" = (/obj/structure/dispenser{pltanks = 0},/turf/simulated/floor{icon_state = "white"},/area/anomaly/outpost) "dhp" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor,/area/mine/abandoned) "dhq" = (/obj/item/weapon/table_parts,/turf/simulated/floor,/area/mine/abandoned) "dhr" = (/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) @@ -8622,7 +8622,7 @@ "djP" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor,/area/mine/west_outpost) "djQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/west_outpost) "djR" = (/obj/machinery/recharge_station,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/mine/west_outpost) -"djS" = (/obj/machinery/dispenser{pltanks = 0},/turf/simulated/floor,/area/mine/west_outpost) +"djS" = (/obj/structure/dispenser{pltanks = 0},/turf/simulated/floor,/area/mine/west_outpost) "djT" = (/obj/structure/rack,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/mine/west_outpost) "djU" = (/obj/structure/rack,/turf/simulated/floor,/area/mine/west_outpost) "djV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/west_outpost) @@ -8696,7 +8696,7 @@ "dll" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple{dir = 4; level = 1},/turf/simulated/floor/plating,/area/mine/eva) "dlm" = (/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact-f"},/turf/simulated/floor,/area/mine/eva) "dln" = (/turf/simulated/floor,/area/mine/eva) -"dlo" = (/obj/machinery/dispenser{pltanks = 0},/turf/simulated/floor,/area/mine/eva) +"dlo" = (/obj/structure/dispenser{pltanks = 0},/turf/simulated/floor,/area/mine/eva) "dlp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/eva) "dlq" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/eva) "dlr" = (/obj/effect/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/mine/eva)