mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into ghettoChutes
This commit is contained in:
@@ -7,8 +7,30 @@
|
||||
for(last_object in clients)
|
||||
var/client/C = last_object
|
||||
if(C.is_afk(config.kick_inactive MINUTES))
|
||||
if(!istype(C.mob, /mob/observer/dead))
|
||||
log_access("AFK: [key_name(C)]")
|
||||
C << "<SPAN CLASS='warning'>You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.</SPAN>"
|
||||
del(C) // Don't qdel, cannot override finalize_qdel behaviour for clients.
|
||||
if(!istype(C.mob, /mob/observer/dead) && !istype(C.mob, /mob/new_player))
|
||||
to_chat(C,"<span class='warning'>You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.</span>")
|
||||
var/information
|
||||
|
||||
if(ishuman(C.mob))
|
||||
var/job
|
||||
var/mob/living/carbon/human/H = C.mob
|
||||
var/datum/data/record/R = find_general_record("name", H.real_name)
|
||||
if(R)
|
||||
job = R.fields["real_rank"]
|
||||
if(!job && H.mind)
|
||||
job = H.mind.assigned_role
|
||||
if(!job && H.job)
|
||||
job = H.job
|
||||
if(job)
|
||||
information = " while [job]."
|
||||
|
||||
else if(issilicon(C.mob))
|
||||
information = " while a silicon."
|
||||
|
||||
var/adminlinks
|
||||
adminlinks = " (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[C.mob.x];Y=[C.mob.y];Z=[C.mob.z]'>JMP</a>|<A HREF='?_src_=holder;cryoplayer=\ref[C.mob]'>CRYO</a>)"
|
||||
|
||||
log_and_message_admins("being kicked for AFK[information][adminlinks]", C.mob)
|
||||
|
||||
qdel(C)
|
||||
SCHECK
|
||||
|
||||
@@ -116,7 +116,7 @@ var/global/repository/radiation/radiation_repository = new()
|
||||
else if(O.density) //So open doors don't get counted
|
||||
var/material/M = O.get_material()
|
||||
if(!M) continue
|
||||
cached_rad_resistance += M.weight
|
||||
cached_rad_resistance += M.radiation_resistance
|
||||
// Looks like storing the contents length is meant to be a basic check if the cache is stale due to items enter/exiting. Better than nothing so I'm leaving it as is. ~Leshana
|
||||
radiation_repository.resistance_cache[src] = (length(contents) + 1)
|
||||
|
||||
|
||||
@@ -330,8 +330,8 @@
|
||||
access = access_cmo
|
||||
|
||||
/datum/supply_packs/med/defib
|
||||
name = "Defibrilator crate"
|
||||
name = "Defibrillator crate"
|
||||
contains = list(/obj/item/device/defib_kit = 2)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/medical
|
||||
containername = "Defibrilator crate"
|
||||
containername = "Defibrillator crate"
|
||||
@@ -38,7 +38,7 @@
|
||||
for(var/limb in H.organs_by_name)
|
||||
var/obj/item/organ/external/current_limb = H.organs_by_name[limb]
|
||||
if(current_limb)
|
||||
current_limb.undislocate()
|
||||
current_limb.relocate()
|
||||
current_limb.open = 0
|
||||
|
||||
BITSET(H.hud_updateflag, HEALTH_HUD)
|
||||
@@ -60,4 +60,4 @@
|
||||
|
||||
|
||||
|
||||
return 1
|
||||
return 1
|
||||
|
||||
@@ -39,10 +39,8 @@
|
||||
|
||||
if(!sleeper)
|
||||
findsleeper()
|
||||
if(sleeper)
|
||||
return sleeper.ui_interact(user)
|
||||
else if(sleeper)
|
||||
return sleeper.ui_interact(user)
|
||||
if(sleeper)
|
||||
return ui_interact(user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Sleeper not found!</span>")
|
||||
|
||||
@@ -59,6 +57,94 @@
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/obj/machinery/sleep_console/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = outside_state)
|
||||
var/data[0]
|
||||
|
||||
var/obj/machinery/sleeper/S = sleeper
|
||||
var/mob/living/carbon/human/occupant = sleeper.occupant
|
||||
|
||||
data["power"] = S.stat & (NOPOWER|BROKEN) ? 0 : 1
|
||||
|
||||
var/list/reagents = list()
|
||||
for(var/T in S.available_chemicals)
|
||||
var/list/reagent = list()
|
||||
reagent["id"] = T
|
||||
reagent["name"] = S.available_chemicals[T]
|
||||
if(occupant)
|
||||
reagent["amount"] = occupant.reagents.get_reagent_amount(T)
|
||||
reagents += list(reagent)
|
||||
data["reagents"] = reagents.Copy()
|
||||
|
||||
if(occupant)
|
||||
data["occupant"] = 1
|
||||
switch(occupant.stat)
|
||||
if(CONSCIOUS)
|
||||
data["stat"] = "Conscious"
|
||||
if(UNCONSCIOUS)
|
||||
data["stat"] = "Unconscious"
|
||||
if(DEAD)
|
||||
data["stat"] = "<font color='red'>Dead</font>"
|
||||
data["health"] = occupant.health
|
||||
data["maxHealth"] = occupant.getMaxHealth()
|
||||
if(iscarbon(occupant))
|
||||
var/mob/living/carbon/C = occupant
|
||||
data["pulse"] = C.get_pulse(GETPULSE_TOOL)
|
||||
data["brute"] = occupant.getBruteLoss()
|
||||
data["burn"] = occupant.getFireLoss()
|
||||
data["oxy"] = occupant.getOxyLoss()
|
||||
data["tox"] = occupant.getToxLoss()
|
||||
else
|
||||
data["occupant"] = 0
|
||||
if(S.beaker)
|
||||
data["beaker"] = S.beaker.reagents.get_free_space()
|
||||
else
|
||||
data["beaker"] = -1
|
||||
data["filtering"] = S.filtering
|
||||
|
||||
var/stasis_level_name = "Error!"
|
||||
for(var/N in S.stasis_choices)
|
||||
if(S.stasis_choices[N] == S.stasis_level)
|
||||
stasis_level_name = N
|
||||
break
|
||||
data["stasis"] = stasis_level_name
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "sleeper.tmpl", "Sleeper UI", 600, 600, state = state)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/machinery/sleep_console/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
var/obj/machinery/sleeper/S = sleeper
|
||||
|
||||
if(usr == S.occupant)
|
||||
to_chat(usr, "<span class='warning'>You can't reach the controls from the inside.</span>")
|
||||
return
|
||||
|
||||
add_fingerprint(usr)
|
||||
|
||||
if(href_list["eject"])
|
||||
S.go_out()
|
||||
if(href_list["beaker"])
|
||||
S.remove_beaker()
|
||||
if(href_list["sleeper_filter"])
|
||||
if(S.filtering != text2num(href_list["sleeper_filter"]))
|
||||
S.toggle_filter()
|
||||
if(href_list["chemical"] && href_list["amount"])
|
||||
if(S.occupant && S.occupant.stat != DEAD)
|
||||
if(href_list["chemical"] in S.available_chemicals) // Your hacks are bad and you should feel bad
|
||||
S.inject_chemical(usr, href_list["chemical"], text2num(href_list["amount"]))
|
||||
if(href_list["change_stasis"])
|
||||
var/new_stasis = input("Levels deeper than 50% stasis level will render the patient unconscious.","Stasis Level") as null|anything in S.stasis_choices
|
||||
if(new_stasis && CanUseTopic(usr, default_state) == STATUS_INTERACTIVE)
|
||||
S.stasis_level = S.stasis_choices[new_stasis]
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/sleeper
|
||||
name = "sleeper"
|
||||
desc = "A stasis pod with built-in injectors, a dialysis machine, and a limited health scanner."
|
||||
@@ -121,89 +207,6 @@
|
||||
/obj/machinery/sleeper/update_icon()
|
||||
icon_state = "sleeper_[occupant ? "1" : "0"]"
|
||||
|
||||
/obj/machinery/sleeper/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = outside_state)
|
||||
var/data[0]
|
||||
|
||||
data["power"] = stat & (NOPOWER|BROKEN) ? 0 : 1
|
||||
|
||||
var/list/reagents = list()
|
||||
for(var/T in available_chemicals)
|
||||
var/list/reagent = list()
|
||||
reagent["id"] = T
|
||||
reagent["name"] = available_chemicals[T]
|
||||
if(occupant)
|
||||
reagent["amount"] = occupant.reagents.get_reagent_amount(T)
|
||||
reagents += list(reagent)
|
||||
data["reagents"] = reagents.Copy()
|
||||
|
||||
if(occupant)
|
||||
data["occupant"] = 1
|
||||
switch(occupant.stat)
|
||||
if(CONSCIOUS)
|
||||
data["stat"] = "Conscious"
|
||||
if(UNCONSCIOUS)
|
||||
data["stat"] = "Unconscious"
|
||||
if(DEAD)
|
||||
data["stat"] = "<font color='red'>Dead</font>"
|
||||
data["health"] = occupant.health
|
||||
data["maxHealth"] = occupant.getMaxHealth()
|
||||
if(iscarbon(occupant))
|
||||
var/mob/living/carbon/C = occupant
|
||||
data["pulse"] = C.get_pulse(GETPULSE_TOOL)
|
||||
data["brute"] = occupant.getBruteLoss()
|
||||
data["burn"] = occupant.getFireLoss()
|
||||
data["oxy"] = occupant.getOxyLoss()
|
||||
data["tox"] = occupant.getToxLoss()
|
||||
else
|
||||
data["occupant"] = 0
|
||||
if(beaker)
|
||||
data["beaker"] = beaker.reagents.get_free_space()
|
||||
else
|
||||
data["beaker"] = -1
|
||||
data["filtering"] = filtering
|
||||
|
||||
var/stasis_level_name = "Error!"
|
||||
for(var/N in stasis_choices)
|
||||
if(stasis_choices[N] == stasis_level)
|
||||
stasis_level_name = N
|
||||
break
|
||||
data["stasis"] = stasis_level_name
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "sleeper.tmpl", "Sleeper UI", 600, 600, state = state)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/machinery/sleeper/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(usr == occupant)
|
||||
to_chat(usr, "<span class='warning'>You can't reach the controls from the inside.</span>")
|
||||
return
|
||||
|
||||
add_fingerprint(usr)
|
||||
|
||||
if(href_list["eject"])
|
||||
go_out()
|
||||
if(href_list["beaker"])
|
||||
remove_beaker()
|
||||
if(href_list["sleeper_filter"])
|
||||
if(filtering != text2num(href_list["sleeper_filter"]))
|
||||
toggle_filter()
|
||||
if(href_list["chemical"] && href_list["amount"])
|
||||
if(occupant && occupant.stat != DEAD)
|
||||
if(href_list["chemical"] in available_chemicals) // Your hacks are bad and you should feel bad
|
||||
inject_chemical(usr, href_list["chemical"], text2num(href_list["amount"]))
|
||||
if(href_list["change_stasis"])
|
||||
var/new_stasis = input("Levels deeper than 50% stasis level will render the patient unconscious.","Stasis Level") as null|anything in stasis_choices
|
||||
if(new_stasis && CanUseTopic(usr, default_state) == STATUS_INTERACTIVE)
|
||||
stasis_level = stasis_choices[new_stasis]
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/sleeper/attackby(var/obj/item/I, var/mob/user)
|
||||
add_fingerprint(user)
|
||||
if(istype(I, /obj/item/weapon/grab))
|
||||
|
||||
@@ -346,8 +346,8 @@
|
||||
|
||||
// This function can not be undone; do not call this unless you are sure
|
||||
// Also make sure there is a valid control computer
|
||||
/obj/machinery/cryopod/robot/despawn_occupant()
|
||||
var/mob/living/silicon/robot/R = occupant
|
||||
/obj/machinery/cryopod/robot/despawn_occupant(var/mob/to_despawn)
|
||||
var/mob/living/silicon/robot/R = to_despawn
|
||||
if(!istype(R)) return ..()
|
||||
|
||||
qdel(R.mmi)
|
||||
|
||||
@@ -314,7 +314,25 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
circuitboard = "/obj/item/weapon/circuitboard/telecomms/hub"
|
||||
long_range_link = 1
|
||||
netspeed = 40
|
||||
var/list/telecomms_map
|
||||
|
||||
/obj/machinery/telecomms/hub/initialize()
|
||||
. = ..()
|
||||
LAZYINITLIST(telecomms_map)
|
||||
|
||||
/obj/machinery/telecomms/hub/process()
|
||||
. = ..()
|
||||
telecomms_map.Cut()
|
||||
|
||||
if(!on)
|
||||
return
|
||||
|
||||
for(var/M in links)
|
||||
if(istype(M,/obj/machinery/telecomms/receiver) || istype(M,/obj/machinery/telecomms/relay))
|
||||
var/obj/machinery/telecomms/R = M
|
||||
if(!R.on)
|
||||
continue
|
||||
telecomms_map |= R.listening_level
|
||||
|
||||
/obj/machinery/telecomms/hub/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from)
|
||||
if(is_freq_listening(signal))
|
||||
@@ -633,9 +651,40 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
var/garbage_collector = 1 // if set to 0, will not be garbage collected
|
||||
var/input_type = "Speech File"
|
||||
|
||||
//Generic telecomm connectivity test proc
|
||||
/proc/can_telecomm(var/atom/A, var/atom/B, var/ad_hoc = FALSE)
|
||||
if(!A || !B)
|
||||
log_debug("can_telecomm(): Undefined endpoints!")
|
||||
return FALSE
|
||||
|
||||
//Can't in this case, obviously!
|
||||
if(is_jammed(A) || is_jammed(B))
|
||||
return FALSE
|
||||
|
||||
//Items don't have a Z when inside an object or mob
|
||||
var/turf/src_turf = get_turf(A)
|
||||
var/turf/dst_turf = get_turf(B)
|
||||
|
||||
//Nullspace, probably.
|
||||
if(!src_turf || !dst_turf)
|
||||
return FALSE
|
||||
|
||||
var/src_z = src_turf.z
|
||||
var/dst_z = dst_turf.z
|
||||
|
||||
//Mysterious!
|
||||
if(!src_z || !dst_z)
|
||||
return FALSE
|
||||
|
||||
//We can do the simple check first, if you have ad_hoc radios.
|
||||
if(ad_hoc && src_z == dst_z)
|
||||
return TRUE
|
||||
|
||||
//Let's look at hubs and see what we got.
|
||||
var/can_comm = FALSE
|
||||
for(var/obj/machinery/telecomms/hub/H in telecomms_list)
|
||||
if((src_z in H.telecomms_map) && (dst_z in H.telecomms_map))
|
||||
can_comm = TRUE
|
||||
break
|
||||
|
||||
return can_comm
|
||||
|
||||
@@ -173,8 +173,8 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
// Parameters: None
|
||||
// Description: Simple check to see if the exonet node is active.
|
||||
/obj/item/device/communicator/proc/get_connection_to_tcomms()
|
||||
if(node && node.on && node.allow_external_communicators && !is_jammed(src))
|
||||
return 1
|
||||
if(node && node.on && node.allow_external_communicators)
|
||||
return can_telecomm(src,node)
|
||||
return 0
|
||||
|
||||
// Proc: process()
|
||||
|
||||
@@ -266,22 +266,26 @@ REAGENT SCANNER
|
||||
if(0)
|
||||
to_chat(usr, "The scanner will now perform a basic analysis.")
|
||||
|
||||
/obj/item/device/healthanalyzer/improved //reports bone fractures, IB, quantity of beneficial reagents in stomach; also regular health analyzer stuff
|
||||
/obj/item/device/healthanalyzer/advanced //reports bone fractures, IB, quantity of beneficial reagents in stomach; also regular health analyzer stuff
|
||||
name = "advanced health analyzer"
|
||||
desc = "A miracle of medical technology, this handheld scanner can produce an accurate and specific report of a patient's biosigns."
|
||||
advscan = 1
|
||||
origin_tech = list(TECH_MAGNET = 5, TECH_BIO = 6)
|
||||
icon_state = "advhealth"
|
||||
icon_state = "health1"
|
||||
|
||||
/obj/item/device/healthanalyzer/advanced //reports all of the above, as well as radiation severity and minor brain damage
|
||||
name = "advanced health analyzer"
|
||||
/obj/item/device/healthanalyzer/enhanced //reports all of the above, as well as radiation severity and minor brain damage
|
||||
name = "enhanced health analyzer"
|
||||
desc = "An even more advanced handheld health scanner, complete with a full biosign monitor and on-board radiation and neurological analysis suites."
|
||||
advscan = 2
|
||||
icon_state = "advhealth"
|
||||
origin_tech = list(TECH_MAGNET = 6, TECH_BIO = 7)
|
||||
icon_state = "health2"
|
||||
|
||||
/obj/item/device/healthanalyzer/enhanced //reports all of the above, as well as name and quantity of nonmed reagents in stomach
|
||||
/obj/item/device/healthanalyzer/phasic //reports all of the above, as well as name and quantity of nonmed reagents in stomach
|
||||
name = "phasic health analyzer"
|
||||
desc = "Possibly the most advanced health analyzer to ever have existed, utilising bluespace technology to determine almost everything worth knowing about a patient."
|
||||
advscan = 3
|
||||
icon_state = "advhealth"
|
||||
origin_tech = list(TECH_MAGNET = 7, TECH_BIO = 8)
|
||||
icon_state = "health3"
|
||||
|
||||
/obj/item/device/analyzer
|
||||
name = "analyzer"
|
||||
|
||||
28
code/game/objects/items/devices/text_to_speech.dm
Normal file
28
code/game/objects/items/devices/text_to_speech.dm
Normal file
@@ -0,0 +1,28 @@
|
||||
/obj/item/device/text_to_speech
|
||||
name = "TTS device"
|
||||
desc = "A device that speaks an inputted message. Given to crew which can not speak properly or at all."
|
||||
icon = 'icons/obj/electronic_assemblies.dmi'
|
||||
icon_state = "setup_small"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/named
|
||||
|
||||
/obj/item/device/text_to_speech/attack_self(mob/user as mob)
|
||||
if(user.incapacitated(INCAPACITATION_ALL)) //Are you in a state to actual use the device?
|
||||
to_chat(user, "You cannot activate the device in your state.")
|
||||
return
|
||||
|
||||
if(!named)
|
||||
to_chat(user, "You input your name into the device.")
|
||||
name = "[initial(name)] ([user.real_name])"
|
||||
desc = "[initial(desc)] This one is assigned to [user.real_name]."
|
||||
named = 1
|
||||
/* //Another way of naming the device. Gives more freedom, but could lead to issues.
|
||||
device_name = copytext(sanitize(input(user, "What would you like to name your device? You must input a name before the device can be used.", "Name your device", "") as null|text),1,MAX_NAME_LEN)
|
||||
name = "[initial(name)] - [device_name]"
|
||||
named = 1
|
||||
*/
|
||||
|
||||
var/message = sanitize(input(user,"Choose a message to relay to those around you.") as text|null)
|
||||
if(message)
|
||||
var/obj/item/device/text_to_speech/O = src
|
||||
audible_message("\icon[O] \The [O.name] states, \"[message]\"")
|
||||
@@ -128,6 +128,7 @@
|
||||
new /obj/item/weapon/storage/pill_bottle/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting(src)
|
||||
new /obj/item/stack/medical/splint(src)
|
||||
new /obj/item/device/healthanalyzer/advanced(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/firstaid/surgery
|
||||
@@ -149,7 +150,7 @@
|
||||
new /obj/item/weapon/surgical/bonegel(src)
|
||||
new /obj/item/weapon/surgical/FixOVein(src)
|
||||
new /obj/item/stack/medical/advanced/bruise_pack(src)
|
||||
new /obj/item/device/healthanalyzer/advanced(src)
|
||||
new /obj/item/device/healthanalyzer/enhanced(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/firstaid/clotting
|
||||
|
||||
@@ -101,7 +101,8 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/toggle_attack_logs,
|
||||
/datum/admins/proc/paralyze_mob,
|
||||
/client/proc/fixatmos,
|
||||
/datum/admins/proc/sendFax
|
||||
/datum/admins/proc/sendFax,
|
||||
/client/proc/despawn_player
|
||||
)
|
||||
|
||||
var/list/admin_verbs_ban = list(
|
||||
|
||||
@@ -1864,6 +1864,17 @@
|
||||
|
||||
show_player_panel(M)
|
||||
|
||||
else if(href_list["cryoplayer"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
|
||||
var/mob/M = locate(href_list["cryoplayer"])
|
||||
if(!istype(M))
|
||||
to_chat(usr,"<span class='warning'>Mob doesn't exist!</span>")
|
||||
return
|
||||
|
||||
var/client/C = usr.client
|
||||
C.despawn_player(M)
|
||||
|
||||
// player info stuff
|
||||
|
||||
if(href_list["add_player_info"])
|
||||
|
||||
@@ -41,7 +41,12 @@
|
||||
if(!map)
|
||||
return
|
||||
template = map_templates[map]
|
||||
|
||||
|
||||
if(template.width > world.maxx || template.height > world.maxy)
|
||||
if(alert(usr,"This template is larger than the existing z-levels. It will EXPAND ALL Z-LEVELS to match the size of the template. This may cause chaos. Are you sure you want to do this?","DANGER!!!","Cancel","Yes") == "Cancel")
|
||||
to_chat(usr,"Template placement aborted.")
|
||||
return
|
||||
|
||||
if(alert(usr,"Confirm map load.", "Template Confirm","No","Yes") == "Yes")
|
||||
if(template.load_new_z())
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has placed a map template ([template.name]) on Z level [world.maxz].</span>")
|
||||
|
||||
@@ -935,3 +935,63 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
usr << "Random events disabled"
|
||||
message_admins("Admin [key_name_admin(usr)] has disabled random events.", 1)
|
||||
feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/despawn_player(var/mob/M in living_mob_list)
|
||||
set name = "Cryo Player"
|
||||
set category = "Admin"
|
||||
set desc = "Removes a player from the round as if they'd cryo'd."
|
||||
set popup_menu = FALSE
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(!M)
|
||||
return
|
||||
|
||||
var/confirm = alert("Are you sure you want to cryo [M]?","Confirmation","No","Yes")
|
||||
if(confirm == "No")
|
||||
return
|
||||
|
||||
var/list/human_cryopods = list()
|
||||
var/list/robot_cryopods = list()
|
||||
|
||||
for(var/obj/machinery/cryopod/CP in machines)
|
||||
if(!CP.control_computer)
|
||||
continue //Broken pod w/o computer, move on.
|
||||
|
||||
var/listname = "[CP.name] ([CP.x],[CP.y],[CP.z])"
|
||||
if(istype(CP,/obj/machinery/cryopod/robot))
|
||||
robot_cryopods[listname] = CP
|
||||
else
|
||||
human_cryopods[listname] = CP
|
||||
|
||||
//Gotta log this up here before they get ghostized and lose their key or anything.
|
||||
log_and_message_admins("[key_name(src)] admin cryo'd [key_name(M)].")
|
||||
feedback_add_details("admin_verb","ACRYO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
if(ishuman(M))
|
||||
var/obj/machinery/cryopod/CP = human_cryopods[input(usr,"Select a cryopod to use","Cryopod Choice") as null|anything in human_cryopods]
|
||||
if(!CP)
|
||||
return
|
||||
M.ghostize()
|
||||
CP.despawn_occupant(M)
|
||||
return
|
||||
|
||||
else if(issilicon(M))
|
||||
if(isAI(M))
|
||||
var/mob/living/silicon/ai/ai = M
|
||||
empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(ai.loc)
|
||||
global_announcer.autosay("[ai] has been moved to intelligence storage.", "Artificial Intelligence Oversight")
|
||||
ai.clear_client()
|
||||
return
|
||||
else
|
||||
var/obj/machinery/cryopod/robot/CP = robot_cryopods[input(usr,"Select a cryopod to use","Cryopod Choice") as null|anything in robot_cryopods]
|
||||
if(!CP)
|
||||
return
|
||||
M.ghostize()
|
||||
CP.despawn_occupant(M)
|
||||
return
|
||||
|
||||
else if(isliving(M))
|
||||
M.ghostize()
|
||||
qdel(M) //Bye
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
display_name = "clipboard"
|
||||
path = /obj/item/weapon/clipboard
|
||||
|
||||
/datum/gear/utility/tts_device
|
||||
display_name = "text to speech device"
|
||||
path = /obj/item/device/text_to_speech
|
||||
cost = 3 //Not extremely expensive, but it's useful for mute chracters.
|
||||
|
||||
/datum/gear/utility/communicator
|
||||
display_name = "communicator selection"
|
||||
path = /obj/item/device/communicator
|
||||
@@ -29,7 +34,7 @@
|
||||
display_name = "the traveler's guide to vir"
|
||||
path = /obj/item/weapon/book/codex/lore/vir
|
||||
cost = 0
|
||||
|
||||
|
||||
/datum/gear/utility/news
|
||||
display_name = "daedalus pocket newscaster"
|
||||
path = /obj/item/weapon/book/codex/lore/news
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
articles. You are encouraged to check back frequently."
|
||||
children = list(
|
||||
/datum/lore/codex/page/article1,
|
||||
/datum/lore/codex/page/article2,
|
||||
/datum/lore/codex/page/about_news,
|
||||
)
|
||||
|
||||
@@ -31,4 +32,17 @@
|
||||
<br></br>\
|
||||
The bill passed fairly quietly this afternoon, owing to the closed nature of the Bicamarial. A post-facto Occulum poll of voting-age\
|
||||
VGA citizens suggest that fully 80% of them did not even know what a Promethean was prior to the most recent general election. A\
|
||||
follow-up poll indicates that an appreciable number of Sivians do not support the framework's current implementation."
|
||||
follow-up poll indicates that an appreciable number of Sivians do not support the framework's current implementation."
|
||||
|
||||
/datum/lore/codex/page/article2
|
||||
name = "2/3/62-- Corporate Coup on Aetolus"
|
||||
data = "A recent incident aboard the NRS Prometheus issued in a major change in the leadership of the Promethean homeworld. During \
|
||||
a late-night meeting of the Nanotrasen Board of Trustees, several high-ranking personnel, including Head of Research Naomi Harper,\
|
||||
announced their intention to assume direct control of Nanotrasen facilities in the system. It is known that several dissenting \
|
||||
members of the board were shot to death by Promethean test subjects. Our information comes from a survivor of the coup, who for \
|
||||
reasons of security has chosen to remain annonymous. All outbound shipments affiliated with Nanotrasen have ceased.\
|
||||
<br><br>\
|
||||
While neither Grayson Manufacturies nor Nanotrasen have made an official statement, Nanotrasen CEO Albary Moravec has called the \
|
||||
incident \"shocking, if the allegations are to be believed\" and has assured shareholders that Nanotrasen will respond to the \
|
||||
incident with as much force as it warrents.<br><br>Requests for a statement directed to the Board of Trustees or Dr. Harper were \
|
||||
not responded to. Free Traders are recommended to stay clear of the region until the situation resolves itself."
|
||||
|
||||
@@ -103,18 +103,23 @@ var/list/global/map_templates = list()
|
||||
|
||||
admin_notice("<span class='danger'>Submap initializations finished.</span>", R_DEBUG)
|
||||
|
||||
/datum/map_template/proc/load_new_z()
|
||||
var/x = round(world.maxx/2)
|
||||
var/y = round(world.maxy/2)
|
||||
/datum/map_template/proc/load_new_z(var/centered = FALSE, var/dont_init = FALSE)
|
||||
var/x = 1
|
||||
var/y = 1
|
||||
|
||||
var/list/bounds = maploader.load_map(file(mappath), x, y)
|
||||
if(centered)
|
||||
x = round((world.maxx - width)/2)
|
||||
y = round((world.maxy - height)/2)
|
||||
|
||||
var/list/bounds = maploader.load_map(file(mappath), x, y, no_changeturf = TRUE)
|
||||
if(!bounds)
|
||||
return FALSE
|
||||
|
||||
// repopulate_sorted_areas()
|
||||
|
||||
//initialize things that are normally initialized after map load
|
||||
initTemplateBounds(bounds)
|
||||
if(!dont_init)
|
||||
initTemplateBounds(bounds)
|
||||
log_game("Z-level [name] loaded at at [x],[y],[world.maxz]")
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -94,6 +94,13 @@
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/lead
|
||||
name = "lead"
|
||||
icon_state = "sheet-adamantine"
|
||||
default_type = "lead"
|
||||
apply_colour = 1
|
||||
no_variants = TRUE
|
||||
|
||||
/obj/item/stack/material/sandstone
|
||||
name = "sandstone brick"
|
||||
icon_state = "sheet-sandstone"
|
||||
|
||||
@@ -99,6 +99,7 @@ var/list/name_to_material
|
||||
var/conductivity = null // How conductive the material is. Iron acts as the baseline, at 10.
|
||||
var/list/composite_material // If set, object matter var will be a list containing these values.
|
||||
var/luminescence
|
||||
var/radiation_resistance = 20 // Radiation resistance, used in calculating how much radiation a material absorbs. Equivlent to weight, but does not affect weaponry.
|
||||
|
||||
// Placeholder vars for the time being, todo properly integrate windows/light tiles/rods.
|
||||
var/created_window
|
||||
@@ -236,6 +237,7 @@ var/list/name_to_material
|
||||
weight = 22
|
||||
stack_origin_tech = list(TECH_MATERIAL = 5)
|
||||
door_icon_base = "stone"
|
||||
radiation_resistance = 80 //dense, so it's okay-ish as rad shielding.
|
||||
|
||||
/material/diamond
|
||||
name = "diamond"
|
||||
@@ -261,6 +263,7 @@ var/list/name_to_material
|
||||
stack_origin_tech = list(TECH_MATERIAL = 4)
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
radiation_resistance = 120 //gold is dense.
|
||||
|
||||
/material/gold/bronze //placeholder for ashtrays
|
||||
name = "bronze"
|
||||
@@ -276,7 +279,7 @@ var/list/name_to_material
|
||||
stack_origin_tech = list(TECH_MATERIAL = 3)
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
|
||||
radiation_resistance = 22
|
||||
//R-UST port
|
||||
/material/supermatter
|
||||
name = "supermatter"
|
||||
@@ -337,6 +340,7 @@ var/list/name_to_material
|
||||
door_icon_base = "stone"
|
||||
sheet_singular_name = "brick"
|
||||
sheet_plural_name = "bricks"
|
||||
radiation_resistance = 22
|
||||
|
||||
/material/stone/marble
|
||||
name = "marble"
|
||||
@@ -345,6 +349,7 @@ var/list/name_to_material
|
||||
hardness = 100
|
||||
integrity = 201 //hack to stop kitchen benches being flippable, todo: refactor into weight system
|
||||
stack_type = /obj/item/stack/material/marble
|
||||
radiation_resistance = 26
|
||||
|
||||
/material/steel
|
||||
name = DEFAULT_WALL_MATERIAL
|
||||
@@ -391,6 +396,7 @@ var/list/name_to_material
|
||||
conductivity = 13 // For the purposes of balance.
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT, "platinum" = SHEET_MATERIAL_AMOUNT) //todo
|
||||
radiation_resistance = 60 //Plasteel is presumably dense and is the dominant material used in the engine. Still not great.
|
||||
|
||||
// Very rare alloy that is reflective, should be used sparingly.
|
||||
/material/durasteel
|
||||
@@ -408,6 +414,7 @@ var/list/name_to_material
|
||||
reflectivity = 0.7 // Not a perfect mirror, but close.
|
||||
stack_origin_tech = list(TECH_MATERIAL = 8)
|
||||
composite_material = list("plasteel" = SHEET_MATERIAL_AMOUNT, "diamond" = SHEET_MATERIAL_AMOUNT) //shrug
|
||||
radiation_resistance = 120 //it reflects XRAY LASERS.
|
||||
|
||||
/material/plasteel/titanium
|
||||
name = "titanium"
|
||||
@@ -436,6 +443,7 @@ var/list/name_to_material
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 2)
|
||||
created_window = /obj/structure/window/basic
|
||||
rod_product = /obj/item/stack/material/glass/reinforced
|
||||
radiation_resistance = 15
|
||||
|
||||
/material/glass/build_windows(var/mob/living/user, var/obj/item/stack/used_stack)
|
||||
|
||||
@@ -527,6 +535,7 @@ var/list/name_to_material
|
||||
created_window = /obj/structure/window/reinforced
|
||||
wire_product = null
|
||||
rod_product = null
|
||||
radiation_resistance = 30
|
||||
|
||||
/material/glass/phoron
|
||||
name = "borosilicate glass"
|
||||
@@ -554,6 +563,7 @@ var/list/name_to_material
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
composite_material = list() //todo
|
||||
rod_product = null
|
||||
radiation_resistance = 30
|
||||
|
||||
/material/plastic
|
||||
name = "plastic"
|
||||
@@ -568,6 +578,7 @@ var/list/name_to_material
|
||||
conductivity = 2 // For the sake of material armor diversity, we're gonna pretend this plastic is a good insulator.
|
||||
melting_point = T0C+371 //assuming heat resistant plastic
|
||||
stack_origin_tech = list(TECH_MATERIAL = 3)
|
||||
radiation_resistance = 12
|
||||
|
||||
/material/plastic/holographic
|
||||
name = "holoplastic"
|
||||
@@ -618,6 +629,7 @@ var/list/name_to_material
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
radiation_resistance = 27
|
||||
|
||||
/material/iron
|
||||
name = "iron"
|
||||
@@ -627,6 +639,17 @@ var/list/name_to_material
|
||||
conductivity = 10
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
radiation_resistance = 22
|
||||
|
||||
/material/lead
|
||||
name = "lead"
|
||||
stack_type = /obj/item/stack/material/lead
|
||||
icon_colour = "#273956"
|
||||
weight = 35
|
||||
conductivity = 10
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
radiation_resistance = 350 //actual radiation shielding, yay...
|
||||
|
||||
// Adminspawn only, do not let anyone get this.
|
||||
/material/alienalloy
|
||||
@@ -640,6 +663,7 @@ var/list/name_to_material
|
||||
hardness = 500
|
||||
weight = 500
|
||||
protectiveness = 80 // 80%
|
||||
radiation_resistance = 500
|
||||
|
||||
// Likewise.
|
||||
/material/alienalloy/elevatorium
|
||||
@@ -697,6 +721,7 @@ var/list/name_to_material
|
||||
destruction_desc = "splinters"
|
||||
sheet_singular_name = "plank"
|
||||
sheet_plural_name = "planks"
|
||||
radiation_resistance = 18
|
||||
|
||||
/material/wood/log
|
||||
name = MAT_LOG
|
||||
@@ -739,7 +764,7 @@ var/list/name_to_material
|
||||
stack_origin_tech = list(TECH_MATERIAL = 1)
|
||||
door_icon_base = "wood"
|
||||
destruction_desc = "crumples"
|
||||
|
||||
radiation_resistance = 1
|
||||
/material/snow
|
||||
name = MAT_SNOW
|
||||
stack_type = /obj/item/stack/material/snow
|
||||
@@ -756,7 +781,7 @@ var/list/name_to_material
|
||||
destruction_desc = "crumples"
|
||||
sheet_singular_name = "pile"
|
||||
sheet_plural_name = "pile" //Just a bigger pile
|
||||
|
||||
radiation_resistance = 1
|
||||
/material/cloth //todo
|
||||
name = "cloth"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
|
||||
@@ -204,8 +204,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
return
|
||||
resting = 1
|
||||
var/turf/location = get_turf(src)
|
||||
message_admins("[key_name_admin(usr)] has ghosted. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[location.x];Y=[location.y];Z=[location.z]'>JMP</a>)")
|
||||
log_game("[key_name_admin(usr)] has ghosted.")
|
||||
var/special_role = check_special_role()
|
||||
if(!istype(loc,/obj/machinery/cryopod))
|
||||
log_and_message_admins("has ghosted outside cryo[special_role ? " as [special_role]" : ""]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[location.x];Y=[location.y];Z=[location.z]'>JMP</a>)",usr)
|
||||
else if(special_role)
|
||||
log_and_message_admins("has ghosted in cryo as [special_role]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[location.x];Y=[location.y];Z=[location.z]'>JMP</a>)",usr)
|
||||
var/mob/observer/dead/ghost = ghostize(0) // 0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
|
||||
if(ghost)
|
||||
ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly.
|
||||
|
||||
@@ -1347,9 +1347,9 @@
|
||||
if(..(slipped_on,stun_duration))
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/undislocate()
|
||||
/mob/living/carbon/human/proc/relocate()
|
||||
set category = "Object"
|
||||
set name = "Undislocate Joint"
|
||||
set name = "Relocate Joint"
|
||||
set desc = "Pop a joint back into place. Extremely painful."
|
||||
set src in view(1)
|
||||
|
||||
@@ -1397,7 +1397,7 @@
|
||||
else
|
||||
U << "<span class='danger'>You pop [S]'s [current_limb.joint] back in!</span>"
|
||||
S << "<span class='danger'>[U] pops your [current_limb.joint] back in!</span>"
|
||||
current_limb.undislocate()
|
||||
current_limb.relocate()
|
||||
|
||||
/mob/living/carbon/human/drop_from_inventory(var/obj/item/W, var/atom/Target = null)
|
||||
if(W in organs)
|
||||
|
||||
@@ -193,9 +193,9 @@
|
||||
|
||||
dislocated = 1
|
||||
if(owner)
|
||||
owner.verbs |= /mob/living/carbon/human/proc/undislocate
|
||||
owner.verbs |= /mob/living/carbon/human/proc/relocate
|
||||
|
||||
/obj/item/organ/external/proc/undislocate()
|
||||
/obj/item/organ/external/proc/relocate()
|
||||
if(dislocated == -1)
|
||||
return
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
for(var/obj/item/organ/external/limb in owner.organs)
|
||||
if(limb.dislocated == 1)
|
||||
return
|
||||
owner.verbs -= /mob/living/carbon/human/proc/undislocate
|
||||
owner.verbs -= /mob/living/carbon/human/proc/relocate
|
||||
|
||||
/obj/item/organ/external/update_health()
|
||||
damage = min(max_damage, (brute_dam + burn_dam))
|
||||
|
||||
@@ -77,7 +77,7 @@ var/list/fusion_cores = list()
|
||||
if(owned_field)
|
||||
icon_state = "core0"
|
||||
if(force_rupture || owned_field.plasma_temperature > 1000)
|
||||
owned_field.Rupture()
|
||||
owned_field.MRC()
|
||||
else
|
||||
owned_field.RadiateAll()
|
||||
qdel(owned_field)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#define FUSION_ENERGY_PER_K 20
|
||||
#define FUSION_MAX_ENVIRO_HEAT 5000 //raise this if you want the reactor to dump more energy into the atmosphere
|
||||
#define PLASMA_TEMP_RADIATION_DIVISIOR 15 //radiation divisior. plasma temp / divisor = radiation.
|
||||
#define PLASMA_TEMP_RADIATION_DIVISIOR 20 //radiation divisior. plasma temp / divisor = radiation.
|
||||
|
||||
|
||||
/obj/effect/fusion_em_field
|
||||
name = "electromagnetic field"
|
||||
@@ -19,6 +20,8 @@
|
||||
var/tick_instability = 0
|
||||
var/percent_unstable = 0
|
||||
var/stable = 1
|
||||
var/id_tag
|
||||
var/critical = 0
|
||||
|
||||
var/obj/machinery/power/fusion_core/owned_core
|
||||
var/list/dormant_reactant_quantities = list()
|
||||
@@ -31,7 +34,8 @@
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics,
|
||||
/obj/machinery/air_sensor,
|
||||
/mob/observer/dead
|
||||
/mob/observer/dead,
|
||||
/obj/machinery/power/hydromagnetic_trap
|
||||
)
|
||||
|
||||
var/light_min_range = 2
|
||||
@@ -52,7 +56,7 @@
|
||||
owned_core = new_owned_core
|
||||
if(!owned_core)
|
||||
qdel(src)
|
||||
|
||||
id_tag = owned_core.id_tag
|
||||
//create the gimmicky things to handle field collisions
|
||||
var/obj/effect/fusion_particle_catcher/catcher
|
||||
|
||||
@@ -194,37 +198,46 @@
|
||||
if(percent_unstable >= 1)
|
||||
owned_core.Shutdown(force_rupture=1)
|
||||
else
|
||||
if(percent_unstable > 0.5 && prob(percent_unstable*100))
|
||||
if(percent_unstable > 0.1 && prob(percent_unstable*100))
|
||||
if(plasma_temperature < 2000)
|
||||
visible_message("<span class='danger'>\The [src] ripples uneasily, like a disturbed pond.</span>")
|
||||
else
|
||||
var/flare
|
||||
var/fuel_loss
|
||||
var/rupture
|
||||
if(percent_unstable < 0.2)
|
||||
if(percent_unstable > 0.2)
|
||||
visible_message("<span class='danger'>\The [src] ripples uneasily, like a disturbed pond.</span>")
|
||||
fuel_loss = prob(5)
|
||||
flare = prob(50)
|
||||
else if(percent_unstable < 0.9)
|
||||
flare = prob(25)
|
||||
else if(percent_unstable > 0.5)
|
||||
visible_message("<span class='danger'>\The [src] undulates violently, shedding plumes of plasma!</span>")
|
||||
flare = prob(50)
|
||||
fuel_loss = prob(20)
|
||||
rupture = prob(5)
|
||||
else
|
||||
else if(percent_unstable > 0.8)
|
||||
visible_message("<span class='danger'>\The [src] is wracked by a series of horrendous distortions, buckling and twisting like a living thing!</span>")
|
||||
flare = 1
|
||||
fuel_loss = prob(50)
|
||||
rupture = prob(25)
|
||||
|
||||
if(rupture)
|
||||
owned_core.Shutdown(force_rupture=1)
|
||||
if(prob(80))
|
||||
MagneticQuench()
|
||||
return
|
||||
else if(prob(15))
|
||||
MRC()
|
||||
return
|
||||
else if(prob(5))
|
||||
QuantumFluxCascade()
|
||||
return
|
||||
else if(prob(5))
|
||||
BluespaceQuenchEvent()
|
||||
return
|
||||
else
|
||||
var/lost_plasma = (plasma_temperature*percent_unstable)
|
||||
radiation += lost_plasma
|
||||
if(flare)
|
||||
radiation += plasma_temperature/2
|
||||
plasma_temperature -= lost_plasma
|
||||
|
||||
spawn(1)
|
||||
emflare()
|
||||
if(fuel_loss)
|
||||
for(var/particle in dormant_reactant_quantities)
|
||||
var/lost_fuel = dormant_reactant_quantities[particle]*percent_unstable
|
||||
@@ -234,17 +247,19 @@
|
||||
dormant_reactant_quantities.Remove(particle)
|
||||
Radiate()
|
||||
return
|
||||
|
||||
/obj/effect/fusion_em_field/proc/Rupture()
|
||||
visible_message("<span class='danger'>\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!</span>")
|
||||
set_light(15, 15, "#CCCCFF")
|
||||
empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300))
|
||||
sleep(5)
|
||||
global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor")
|
||||
RadiateAll()
|
||||
explosion(get_turf(owned_core),-1,-1,8,10) // Blow out all the windows.
|
||||
return
|
||||
|
||||
/*/obj/effect/fusion_em_field/proc/CheckCriticality()
|
||||
if (plasma_temperature > 70000)
|
||||
critical += 0.2
|
||||
else if (instability > 0.45)
|
||||
critical += 0.6
|
||||
if(critical >= 25 && prob(percent_unstable*100))
|
||||
if (critical >= 90)
|
||||
visible_message("<span class='danger'>\The [src] rumbles and quivers violently, threatening to break free!</span>")
|
||||
else if(critical >= 50)
|
||||
visible_message("<span class='danger'>\The [src] rumbles and quivers energetically, the walls distorting slightly.</span>")
|
||||
else if(critical >= 25)
|
||||
visible_message("<span class='danger'>\The [src] rumbles and quivers slightly, vibrating the deck.</span>")
|
||||
*/
|
||||
/obj/effect/fusion_em_field/proc/ChangeFieldStrength(var/new_strength)
|
||||
var/calc_size = 1
|
||||
if(new_strength <= 50)
|
||||
@@ -490,19 +505,19 @@
|
||||
//All procs below this point are called in _core.dm, starting at line 41.
|
||||
//Stability monitoring. Gives radio annoucements if field stability is below 80%
|
||||
/obj/effect/fusion_em_field/proc/stability_monitor()
|
||||
var/warnpoint = 0.10
|
||||
var/warnpoint = 0.10 //start warning at 10% instability
|
||||
var/warnmessage = "Warning! Field unstable! Instability at [percent_unstable * 100]%, plasma temperature at [plasma_temperature + 295]k."
|
||||
var/stablemessage = "Containment field returning to stable conditions."
|
||||
|
||||
if(percent_unstable >= warnpoint)
|
||||
if(percent_unstable >= warnpoint) //we're unstable, start warning engineering
|
||||
global_announcer.autosay(warnmessage, "Field Stability Monitor", "Engineering")
|
||||
stable = 0
|
||||
sleep(20 SECONDS)
|
||||
return
|
||||
if(percent_unstable < warnpoint && stable == 0)
|
||||
stable = 0 //we know we're not stable, so let's not state the safe message.
|
||||
sleep(20)
|
||||
return
|
||||
if(percent_unstable < warnpoint && stable == 0) //The field is stable again. Let's set our safe variable and state the safe message.
|
||||
global_announcer.autosay(stablemessage, "Field Stability Monitor", "Engineering")
|
||||
stable = 1
|
||||
return
|
||||
return
|
||||
|
||||
//Reaction radiation is fairly buggy and there's at least three procs dealing with radiation here, this is to ensure constant radiation output.
|
||||
/obj/effect/fusion_em_field/proc/radiation_scale()
|
||||
@@ -513,7 +528,8 @@
|
||||
if(owned_core && owned_core.loc)
|
||||
var/datum/gas_mixture/environment = owned_core.loc.return_air()
|
||||
if(environment && environment.temperature < (T0C+FUSION_MAX_ENVIRO_HEAT))
|
||||
environment.add_thermal_energy(plasma_temperature*20000)
|
||||
environment.add_thermal_energy(plasma_temperature*5000)
|
||||
check_instability()
|
||||
|
||||
//Temperature changes depending on color.
|
||||
/obj/effect/fusion_em_field/proc/temp_color()
|
||||
@@ -538,8 +554,121 @@
|
||||
light_max_range = 5
|
||||
light_max_power = 5
|
||||
return
|
||||
//moved the flare to a proc for various reasons. Called on line 225.
|
||||
/obj/effect/fusion_em_field/proc/emflare()
|
||||
radiation += plasma_temperature/2
|
||||
light_color = "#ff0000"
|
||||
light_max_power = 30
|
||||
light_min_power = 30
|
||||
light_min_range = 30
|
||||
light_max_range = 30
|
||||
visible_message("<span class='danger'>\The [src] flares to eye-searing brightness!</span>")
|
||||
sleep(60)
|
||||
temp_color()
|
||||
//plasma_temperature -= lost_plasma
|
||||
return
|
||||
//Rupture() is no longer the end all be all. Fear the magnetic resonance cascade and quantum flux cascade
|
||||
|
||||
|
||||
/obj/effect/fusion_em_field/proc/Rupture()
|
||||
visible_message("<span class='danger'>\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!</span>")
|
||||
set_light(15, 15, "#CCCCFF")
|
||||
empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300))
|
||||
global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor")
|
||||
RadiateAll()
|
||||
var/list/things_in_range = range(10, owned_core)
|
||||
var/list/turfs_in_range = list()
|
||||
var/turf/T
|
||||
for (T in things_in_range)
|
||||
turfs_in_range.Add(T)
|
||||
|
||||
explosion(pick(things_in_range), -1, 5, 5, 5)
|
||||
empulse(pick(things_in_range), ceil(plasma_temperature/1000), ceil(plasma_temperature/300))
|
||||
spawn(25)
|
||||
explosion(pick(things_in_range), -1, 5, 5, 5)
|
||||
spawn(25)
|
||||
explosion(pick(things_in_range), -1, 5, 5, 5)
|
||||
spawn(25)
|
||||
explosion(pick(things_in_range), -1, 5, 5, 5)
|
||||
spawn(10)
|
||||
explosion(pick(things_in_range), -1, 5, 5, 5)
|
||||
spawn(10)
|
||||
explosion(pick(things_in_range), -1, 5, 5, 5)
|
||||
spawn(10)
|
||||
explosion(pick(things_in_range), -1, 5, 5, 5)
|
||||
return
|
||||
|
||||
/obj/effect/fusion_em_field/proc/MRC() //spews electromagnetic pulses in an area around the core.
|
||||
visible_message("<span class='danger'>\The [src] glows an extremely bright pink and flares out of existance!</span>")
|
||||
global_announcer.autosay("Warning! Magnetic Resonance Cascade detected! Brace for electronic system distruption.", "Field Stability Monitor")
|
||||
set_light(15, 15, "#ff00d8")
|
||||
var/list/things_in_range = range(15, owned_core)
|
||||
var/list/turfs_in_range = list()
|
||||
var/turf/T
|
||||
for (T in things_in_range)
|
||||
turfs_in_range.Add(T)
|
||||
for(var/loopcount = 1 to 10)
|
||||
spawn(200)
|
||||
empulse(pick(things_in_range), 10, 15)
|
||||
Destroy()
|
||||
return
|
||||
|
||||
/obj/effect/fusion_em_field/proc/QuantumFluxCascade() //spews hot phoron and oxygen in a radius around the RUST. Will probably set fire to things
|
||||
global_announcer.autosay("Warning! Quantum fluxuation detected! Flammable gas release expected.", "Field Stability Monitor")
|
||||
var/list/things_in_range = range(15, owned_core)
|
||||
var/list/turfs_in_range = list()
|
||||
var/turf/T
|
||||
for (T in things_in_range)
|
||||
turfs_in_range.Add(T)
|
||||
for(var/loopcount = 1 to 10)
|
||||
var/turf/TT = get_turf(pick(turfs_in_range))
|
||||
if(istype(TT))
|
||||
var/datum/gas_mixture/plasma = new
|
||||
plasma.adjust_gas("oxygen", (size*100), 0)
|
||||
plasma.adjust_gas("phoron", (size*100), 0)
|
||||
plasma.temperature = (plasma_temperature/2)
|
||||
plasma.update_values()
|
||||
TT.assume_air(plasma)
|
||||
TT.hotspot_expose(plasma_temperature)
|
||||
plasma = null
|
||||
Destroy()
|
||||
return
|
||||
|
||||
/obj/effect/fusion_em_field/proc/MagneticQuench() //standard hard shutdown. dumps hot oxygen/phoron into the core's area and releases an EMP in the area around the core.
|
||||
global_announcer.autosay("Warning! Magnetic Quench event detected, engaging hard shutdown.", "Field Stability Monitor")
|
||||
empulse(owned_core, 10, 15)
|
||||
var/turf/TT = get_turf(owned_core)
|
||||
if(istype(TT))
|
||||
var/datum/gas_mixture/plasma = new
|
||||
plasma.adjust_gas("oxygen", (size*100), 0)
|
||||
plasma.adjust_gas("phoron", (size*100), 0)
|
||||
plasma.temperature = (plasma_temperature/2)
|
||||
plasma.update_values()
|
||||
TT.assume_air(plasma)
|
||||
TT.hotspot_expose(plasma_temperature)
|
||||
plasma = null
|
||||
Destroy()
|
||||
owned_core.Shutdown()
|
||||
return
|
||||
|
||||
/obj/effect/fusion_em_field/proc/BluespaceQuenchEvent() //!!FUN!! causes a number of explosions in an area around the core. Will likely destory or heavily damage the reactor.
|
||||
visible_message("<span class='danger'>\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!</span>")
|
||||
set_light(15, 15, "#CCCCFF")
|
||||
empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300))
|
||||
global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor")
|
||||
RadiateAll()
|
||||
var/list/things_in_range = range(10, owned_core)
|
||||
var/list/turfs_in_range = list()
|
||||
var/turf/T
|
||||
for (T in things_in_range)
|
||||
turfs_in_range.Add(T)
|
||||
for(var/loopcount = 1 to 10)
|
||||
explosion(pick(things_in_range), -1, 5, 5, 5)
|
||||
empulse(pick(things_in_range), ceil(plasma_temperature/1000), ceil(plasma_temperature/300))
|
||||
Destroy()
|
||||
owned_core.Shutdown()
|
||||
return
|
||||
|
||||
#undef FUSION_HEAT_CAP
|
||||
#undef FUSION_MAX_ENVIRO_HEAT
|
||||
#undef PLASMA_TEMP_RADIATION_DIVISIOR
|
||||
@@ -117,7 +117,7 @@ proc/get_fusion_reaction(var/p_react, var/s_react, var/m_energy)
|
||||
var/turf/origin = get_turf(holder)
|
||||
holder.Rupture()
|
||||
qdel(holder)
|
||||
var/radiation_level = rand(100, 200)
|
||||
var/radiation_level = 200
|
||||
|
||||
// Copied from the SM for proof of concept. //Not any more --Cirra //Use the whole z proc --Leshana
|
||||
radiation_repository.z_radiate(locate(1, 1, holder.z), radiation_level, 1)
|
||||
@@ -141,7 +141,6 @@ proc/get_fusion_reaction(var/p_react, var/s_react, var/m_energy)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
// High end reactions.
|
||||
/decl/fusion_reaction/boron_hydrogen
|
||||
p_react = "boron"
|
||||
|
||||
@@ -5,4 +5,14 @@
|
||||
description = "A colorless, odorless, tasteless and generally inert gas used in fusion reactors. Non-radioactive."
|
||||
id = "helium-3"
|
||||
reagent_state = GAS
|
||||
color = "#808080"
|
||||
color = "#808080"
|
||||
|
||||
/obj/structure/reagent_dispensers/he3
|
||||
name = "fueltank"
|
||||
desc = "A fueltank."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "weldtank"
|
||||
amount_per_transfer_from_this = 10
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("helium-3",1000)
|
||||
54
code/modules/power/fusion/magpower.dm
Normal file
54
code/modules/power/fusion/magpower.dm
Normal file
@@ -0,0 +1,54 @@
|
||||
#define ENERGY_PER_K 20
|
||||
#define MINIMUM_PLASMA_TEMPERATURE 10000
|
||||
|
||||
/obj/machinery/power/hydromagnetic_trap
|
||||
name = "\improper hydromagnetic trap"
|
||||
desc = "A device for extracting power from high-energy plasma in toroidal fields."
|
||||
icon = 'icons/obj/machines/power/fusion.dmi'
|
||||
icon_state = "mag_trap0"
|
||||
anchored = 1
|
||||
var/list/things_in_range = list()//what is in a radius of us?
|
||||
var/list/fields_in_range = list()//What EM fields are in that radius?
|
||||
var/list/active_field = list()//Our active field.
|
||||
var/active = 0 //are we even on?
|
||||
var/id_tag //needed for !!rasins!!
|
||||
|
||||
/obj/machinery/power/hydromagnetic_trap/process()
|
||||
if(!powernet && anchored == 1)
|
||||
return
|
||||
spawn(1)
|
||||
Active()
|
||||
Search()
|
||||
|
||||
/obj/machinery/power/hydromagnetic_trap/proc/Search()//let's not have +100 instances of the same field in active_field.
|
||||
things_in_range = range(7, src)
|
||||
var/obj/effect/fusion_em_field/FFF
|
||||
for (FFF in things_in_range)
|
||||
fields_in_range.Add(FFF)
|
||||
for (FFF in fields_in_range)
|
||||
if (active_field.len > 0)
|
||||
return
|
||||
else if (active_field.len == 0)
|
||||
Link()
|
||||
return
|
||||
|
||||
/obj/machinery/power/hydromagnetic_trap/proc/Link() //discover our EM field
|
||||
var/obj/effect/fusion_em_field/FFF
|
||||
for(FFF in fields_in_range)
|
||||
if (FFF.id_tag != id_tag)
|
||||
return
|
||||
active_field += FFF
|
||||
active = 1
|
||||
return
|
||||
|
||||
/obj/machinery/power/hydromagnetic_trap/proc/Active()//POWERRRRR
|
||||
var/obj/effect/fusion_em_field/FF
|
||||
if (active == 0)
|
||||
return
|
||||
for (FF in active_field)
|
||||
if (FF.plasma_temperature >= MINIMUM_PLASMA_TEMPERATURE)
|
||||
icon_state = "mag_trap1"
|
||||
add_avail(ENERGY_PER_K * FF.plasma_temperature)
|
||||
if (FF.plasma_temperature <= MINIMUM_PLASMA_TEMPERATURE)
|
||||
icon_state = "mag_trap0"
|
||||
return
|
||||
@@ -53,7 +53,7 @@
|
||||
if(isliving(user))
|
||||
hasShocked = 1
|
||||
var/shock_damage = min(rand(30,40),rand(30,40))
|
||||
user.electrocute_act(shock_damage, src)
|
||||
user.electrocute_act(shock_damage, src, 1, BP_TORSO)
|
||||
|
||||
var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src)))
|
||||
user.throw_at(target, 200, 4)
|
||||
@@ -61,7 +61,6 @@
|
||||
sleep(20)
|
||||
|
||||
hasShocked = 0
|
||||
return
|
||||
|
||||
/obj/machinery/containment_field/proc/set_master(var/master1,var/master2)
|
||||
if(!master1 || !master2)
|
||||
|
||||
@@ -285,7 +285,7 @@
|
||||
|
||||
else if(closest_mob)
|
||||
var/shock_damage = Clamp(round(power/400), 10, 90) + rand(-5, 5)
|
||||
closest_mob.electrocute_act(shock_damage, source, 1/*, tesla_shock = 1, stun = stun_mobs*/)
|
||||
closest_mob.electrocute_act(shock_damage, source, 1, ran_zone())
|
||||
if(issilicon(closest_mob))
|
||||
var/mob/living/silicon/S = closest_mob
|
||||
if(stun_mobs)
|
||||
|
||||
174
code/modules/projectiles/guns/modular_guns.dm
Normal file
174
code/modules/projectiles/guns/modular_guns.dm
Normal file
@@ -0,0 +1,174 @@
|
||||
//This will likely drive me insane, but fuck it. Let's give it a shot. -k22
|
||||
//This was heavily assisted by MoondancerPony
|
||||
/obj/item/weapon/gun/energy/modular
|
||||
name = "modular weapon"
|
||||
desc = "You shouldn't be seeing this. Contact your local time-police station."
|
||||
icon_state = "mod_pistol"
|
||||
cell_type = /obj/item/weapon/cell/device/weapon
|
||||
charge_cost = 120
|
||||
|
||||
var/max_components = 3 //How many components we can hold.
|
||||
var/capacitor_rating = 0 //How good are the capacitors inside us?
|
||||
var/laser_rating = 0 //How good are the lasers inside of us?
|
||||
var/manipulator_rating = 0 //How good are the manipulators inside us?
|
||||
var/assembled = 1 //Are we closed up?
|
||||
var/max_burst_size = 5 //Don't let our maximum burst size get too high.
|
||||
var/list/guncomponents = list() //Generate our list of components.
|
||||
var/accepted_components = list(
|
||||
/obj/item/weapon/stock_parts/capacitor/,
|
||||
/obj/item/weapon/stock_parts/capacitor/adv,
|
||||
/obj/item/weapon/stock_parts/capacitor/super,
|
||||
/obj/item/weapon/stock_parts/micro_laser/,
|
||||
/obj/item/weapon/stock_parts/micro_laser/high,
|
||||
/obj/item/weapon/stock_parts/micro_laser/ultra,
|
||||
/obj/item/weapon/stock_parts/manipulator/,
|
||||
/obj/item/weapon/stock_parts/manipulator/nano,
|
||||
/obj/item/weapon/stock_parts/manipulator/pico,
|
||||
)
|
||||
//Excessively long because it won't accept subtypes for some reason!
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/modular/New() //Initialize our components.
|
||||
..()
|
||||
guncomponents = list()
|
||||
guncomponents += new /obj/item/weapon/stock_parts/capacitor
|
||||
guncomponents += new /obj/item/weapon/stock_parts/micro_laser
|
||||
guncomponents += new /obj/item/weapon/stock_parts/manipulator
|
||||
CheckParts()
|
||||
FireModeModify()
|
||||
|
||||
/obj/item/weapon/gun/energy/modular/proc/CheckParts() //What parts do we have inside us, and how good are they?
|
||||
capacitor_rating = 0
|
||||
laser_rating = 0
|
||||
manipulator_rating = 0
|
||||
for(var/obj/item/weapon/stock_parts/capacitor/CA in guncomponents)
|
||||
capacitor_rating += CA.rating
|
||||
for(var/obj/item/weapon/stock_parts/micro_laser/ML in guncomponents)
|
||||
laser_rating += ML.rating
|
||||
for(var/obj/item/weapon/stock_parts/manipulator/MA in guncomponents)
|
||||
manipulator_rating += MA.rating
|
||||
FireModeModify()
|
||||
|
||||
/obj/item/weapon/gun/energy/modular/attackby(obj/item/O, mob/user)
|
||||
if(istype(O, /obj/item/weapon/screwdriver))
|
||||
to_chat(user, "<span class='notice'>You [assembled ? "disassemble" : "assemble"] the gun.</span>")
|
||||
assembled = !assembled
|
||||
playsound(src, O.usesound, 50, 1)
|
||||
return
|
||||
if(istype(O, /obj/item/weapon/crowbar))
|
||||
if(assembled == 1)
|
||||
to_chat(user, "<span class='warning'>Disassemble the [src] first!</span>")
|
||||
return
|
||||
for(var/obj/item/I in guncomponents)
|
||||
to_chat(user, "<span class='notice'>You remove the gun's components.</span>")
|
||||
playsound(src, O.usesound, 50, 1)
|
||||
I.forceMove(get_turf(src))
|
||||
guncomponents.Remove(I)
|
||||
CheckParts()
|
||||
return
|
||||
//Someone's attacking us, and it's not anything we have a special case for (i.e. a tool)
|
||||
..()
|
||||
if(assembled) // can't put anything in
|
||||
return
|
||||
if(!(O.type in accepted_components))//check if we can accept it
|
||||
to_chat(user, "<span class='warning'>You can't add this to [src]!</span>")
|
||||
return
|
||||
if(guncomponents.len >= max_components) //We have too many componenets and can't fit more.
|
||||
to_chat(user, "<span class='warning'>You can't add any more components!</span>")
|
||||
return
|
||||
if(istype(O, /obj/item/weapon/stock_parts/capacitor) && capacitor_rating == 5)
|
||||
to_chat(user, "<span class='warning'>You can't add any more capacitors!</span>")
|
||||
return
|
||||
user.drop_item()
|
||||
guncomponents += O
|
||||
O.forceMove(src)
|
||||
to_chat(user, "<span class='notice'>You add a component to the [src]</span>")
|
||||
CheckParts()
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/modular/proc/FireModeModify() //Check our laser, manipulator, and capacitor ratings, adjust stun and lethal firemodes depending on laser / manipulator rating and burst size depending on capacitors.
|
||||
//check our lethal and stun ratings depending on laser and manipulator rating.
|
||||
var/burstmode = capacitor_rating
|
||||
var/beammode
|
||||
var/beammode_lethal
|
||||
var/chargecost
|
||||
var/chargecost_lethal
|
||||
|
||||
if(laser_rating >= 15)
|
||||
beammode_lethal = /obj/item/projectile/beam/sniper
|
||||
beammode = /obj/item/projectile/beam/stun
|
||||
chargecost = 300
|
||||
chargecost_lethal = 600
|
||||
else if(laser_rating >= 10)
|
||||
beammode_lethal = /obj/item/projectile/beam/xray
|
||||
beammode = /obj/item/projectile/beam/stun
|
||||
chargecost = 300
|
||||
chargecost_lethal = 200
|
||||
else if(laser_rating == 8 && manipulator_rating == 5) //very specific set of combinations. No, you can't make a pulse rifle. Sorry research.
|
||||
beammode_lethal = /obj/item/projectile/beam/heavylaser
|
||||
beammode = /obj/item/projectile/beam/stun
|
||||
chargecost = 300
|
||||
chargecost_lethal = 600
|
||||
else if(laser_rating >= 5)
|
||||
beammode_lethal = /obj/item/projectile/beam/midlaser
|
||||
beammode = /obj/item/projectile/beam/stun/med
|
||||
chargecost = 180
|
||||
chargecost_lethal = 240
|
||||
else if(laser_rating < 5)
|
||||
beammode_lethal = /obj/item/projectile/beam/weaklaser
|
||||
beammode = /obj/item/projectile/beam/stun/weak
|
||||
chargecost = 100
|
||||
chargecost_lethal = 200
|
||||
|
||||
firemodes = list(
|
||||
new /datum/firemode(src, list(mode_name="stun", projectile_type=beammode, fire_sound='sound/weapons/Taser.ogg', charge_cost = chargecost)),
|
||||
new /datum/firemode(src, list(mode_name="lethal", projectile_type=beammode_lethal, fire_sound='sound/weapons/Laser.ogg', charge_cost = chargecost_lethal)),
|
||||
new /datum/firemode(src, list(mode_name="[burstmode] shot stun", projectile_type=beammode, fire_sound='sound/weapons/Taser.ogg', charge_cost = chargecost, burst = burstmode)),
|
||||
new /datum/firemode(src, list(mode_name="[burstmode] shot lethal", projectile_type=beammode_lethal, fire_sound='sound/weapons/Laser.ogg', charge_cost = chargecost_lethal, burst = burstmode)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/modular/load_ammo(var/obj/item/C, mob/user)
|
||||
if(istype(C, cell_type))
|
||||
if(self_recharge || battery_lock)
|
||||
user << "<span class='notice'>[src] does not have a battery port.</span>"
|
||||
return
|
||||
var/obj/item/weapon/cell/P = C
|
||||
if(power_supply)
|
||||
user << "<span class='notice'>[src] already has a power cell.</span>"
|
||||
else
|
||||
user.visible_message("[user] is reloading [src].", "<span class='notice'>You start to insert [P] into [src].</span>")
|
||||
if(do_after(user, 10))
|
||||
user.remove_from_mob(P)
|
||||
power_supply = P
|
||||
P.loc = src
|
||||
user.visible_message("[user] inserts [P] into [src].", "<span class='notice'>You insert [P] into [src].</span>")
|
||||
playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1)
|
||||
update_icon()
|
||||
update_held_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/energy/modular/pistol
|
||||
name = "modular pistol"
|
||||
icon_state = "mod_pistol"
|
||||
max_components = 6
|
||||
desc = "A bulky modular pistol frame. This only only accepts six parts."
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 3)
|
||||
burst_delay = 2
|
||||
|
||||
/obj/item/weapon/gun/energy/modular/carbine
|
||||
name = "modular carbine"
|
||||
icon_state = "mod_carbine"
|
||||
max_components = 8
|
||||
desc = "A modular version of the standard laser carbine. This one can hold 8 components."
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 3, TECH_MATERIAL = 3)
|
||||
burst_delay = 2
|
||||
|
||||
/obj/item/weapon/gun/energy/modular/cannon
|
||||
name = "modular cannon"
|
||||
icon_state = "mod_cannon"
|
||||
max_components = 14
|
||||
desc = "Say hello, to my little friend!"
|
||||
one_handed_penalty = 4 //dual wielding = no.
|
||||
cell_type = /obj/item/weapon/cell //We're bigger. We can use much larger power cells.
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 6, TECH_MATERIAL = 5, TECH_BLUESPACE = 4) //its a damn cannon capable of holding a huge amount of parts.
|
||||
burst_delay = 4 //preventing extreme silliness.
|
||||
@@ -491,6 +491,15 @@ other types of metals and chemistry for reagents).
|
||||
build_path = /obj/item/roller/adv
|
||||
sort_string = "MBBAF"
|
||||
|
||||
/datum/design/item/medical/enhanced_analyzer
|
||||
name = "enhanced health analyzer"
|
||||
desc = "A prototype version of the regular health analyzer, able to distinguish the location of more serious injuries as well as accurately determine radiation levels."
|
||||
id = "advanced_analyzer"
|
||||
req_tech = list(TECH_MAGNET = 5, TECH_BIO = 6)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 1500)
|
||||
build_path = /obj/item/device/healthanalyzer/advanced
|
||||
sort_string = "MBBAG"
|
||||
|
||||
/datum/design/item/implant
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
|
||||
@@ -128,6 +128,31 @@
|
||||
icon_state = "flightcomp_center"
|
||||
icon_keyboard = "flight_center_key"
|
||||
icon_screen = "flight_center"
|
||||
var/list/my_doors //Should be list("id_tag" = "Pretty Door Name", ...)
|
||||
var/list/my_sensors //Should be list("id_tag" = "Pretty Sensor Name", ...)
|
||||
|
||||
/obj/machinery/computer/shuttle_control/web/initialize()
|
||||
. = ..()
|
||||
var/area/my_area = get_area(src)
|
||||
if(my_doors)
|
||||
var/list/find_doors = my_doors
|
||||
my_doors = list()
|
||||
for(var/obj/machinery/door/airlock/A in my_area)
|
||||
if(A.id_tag in find_doors)
|
||||
my_doors[find_doors[A.id_tag]] = A
|
||||
find_doors -= A.id_tag
|
||||
for(var/lost in find_doors)
|
||||
log_debug("[my_area] shuttle computer couldn't find [lost] door!")
|
||||
|
||||
if(my_sensors)
|
||||
var/list/find_sensors = my_sensors
|
||||
my_sensors = list()
|
||||
for(var/obj/machinery/shuttle_sensor/S in my_area)
|
||||
if(S.id_tag in find_sensors)
|
||||
my_sensors[find_sensors[S.id_tag]] = S
|
||||
find_sensors -= S.id_tag
|
||||
for(var/lost in find_sensors)
|
||||
log_debug("[my_area] shuttle computer couldn't find [lost] sensor!")
|
||||
|
||||
// Fairly copypasta-y.
|
||||
/obj/machinery/computer/shuttle_control/web/attack_hand(mob/user)
|
||||
@@ -244,6 +269,21 @@
|
||||
if(total_time) // Need to check or we might divide by zero.
|
||||
percent_finished = (elapsed_time / total_time) * 100
|
||||
|
||||
|
||||
var/list/doors = list()
|
||||
if(my_doors)
|
||||
for(var/doorname in my_doors)
|
||||
var/obj/machinery/door/airlock/A = my_doors[doorname]
|
||||
if(A)
|
||||
doors[doorname] = list("bolted" = A.locked, "open" = !A.density)
|
||||
|
||||
var/list/sensors = list()
|
||||
if(my_sensors)
|
||||
for(var/sensorname in my_sensors)
|
||||
var/obj/machinery/shuttle_sensor/S = my_sensors[sensorname]
|
||||
if(S)
|
||||
sensors[sensorname] = S.air_list()
|
||||
|
||||
data = list(
|
||||
"shuttle_location" = shuttle_location,
|
||||
"future_location" = future_location,
|
||||
@@ -261,13 +301,15 @@
|
||||
"cloaked" = shuttle.cloaked ? 1 : 0,
|
||||
"can_autopilot" = shuttle.can_autopilot ? 1 : 0,
|
||||
"autopilot" = shuttle.autopilot ? 1 : 0,
|
||||
"can_rename" = shuttle.can_rename ? 1 : 0
|
||||
"can_rename" = shuttle.can_rename ? 1 : 0,
|
||||
"doors" = doors,
|
||||
"sensors" = sensors
|
||||
)
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "flight.tmpl", "[shuttle.visible_name] Flight Computer", 470, 500)
|
||||
ui = new(user, src, ui_key, "flight.tmpl", "[shuttle.visible_name] Flight Computer", 500, 500)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
@@ -411,3 +453,45 @@
|
||||
processing_objects -= src
|
||||
|
||||
qdel(src)
|
||||
|
||||
//A sensor for detecting air outside shuttles! Handy, that.
|
||||
/obj/machinery/shuttle_sensor
|
||||
name = "environment sensor"
|
||||
icon = 'icons/obj/airlock_machines.dmi'
|
||||
icon_state = "airlock_sensor_standby"
|
||||
var/id_tag
|
||||
|
||||
/obj/machinery/shuttle_sensor/process()
|
||||
return PROCESS_KILL //nty
|
||||
|
||||
/obj/machinery/shuttle_sensor/proc/air_list()
|
||||
. = list("reading" = FALSE)
|
||||
var/turf/T = get_step(src,dir)
|
||||
|
||||
if(isnull(T))
|
||||
return
|
||||
|
||||
var/list/aircontents
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
var/pressure = environment.return_pressure()
|
||||
var/total_moles = environment.total_moles
|
||||
|
||||
if(total_moles)
|
||||
var/o2_level = environment.gas["oxygen"]/total_moles
|
||||
var/n2_level = environment.gas["nitrogen"]/total_moles
|
||||
var/co2_level = environment.gas["carbon_dioxide"]/total_moles
|
||||
var/phoron_level = environment.gas["phoron"]/total_moles
|
||||
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level)
|
||||
aircontents = list(\
|
||||
"pressure" = "[round(pressure,0.1)]",\
|
||||
"nitrogen" = "[round(n2_level*100,0.1)]",\
|
||||
"oxygen" = "[round(o2_level*100,0.1)]",\
|
||||
"carbon_dioxide" = "[round(co2_level*100,0.1)]",\
|
||||
"phoron" = "[round(phoron_level*100,0.01)]",\
|
||||
"other" = "[round(unknown_level, 0.01)]",\
|
||||
"temp" = "[round(environment.temperature-T0C,0.1)]",\
|
||||
"reading" = TRUE\
|
||||
)
|
||||
|
||||
if(aircontents)
|
||||
return aircontents
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 60 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 82 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 43 KiB |
@@ -80,10 +80,10 @@
|
||||
"bB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
|
||||
"bC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
|
||||
"bD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "mining_airlock_control2"; name = "Mining Access Console"; pixel_x = 26; pixel_y = 26; tag_exterior_door = "mining_airlock_exterior2"; tag_interior_door = "mining_airlock_interior2"},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
|
||||
"bE" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining_airlock_control2"; name = "Mining Access Button"; pixel_x = 6; pixel_y = 26; req_access = null; req_one_access = list(12,47)},/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining_airlock_interior2"; locked = 1; name = "Mining Interior Outpost"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
|
||||
"bE" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining_airlock_control2"; name = "Mining Access Button"; pixel_x = 6; pixel_y = 26; req_access = null; req_one_access = list(12,47,48)},/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining_airlock_interior2"; locked = 1; name = "Mining Interior Outpost"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
|
||||
"bF" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
|
||||
"bG" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
|
||||
"bH" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining_airlock_exterior2"; locked = 1; name = "Mining Exterior Outpost"},/obj/effect/decal/cleanable/dirt,/obj/machinery/access_button/airlock_exterior{master_tag = "mining_airlock_control2"; pixel_y = 24; req_one_access = list(12,47)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
|
||||
"bH" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining_airlock_exterior2"; locked = 1; name = "Mining Exterior Outpost"},/obj/effect/decal/cleanable/dirt,/obj/machinery/access_button/airlock_exterior{master_tag = "mining_airlock_control2"; pixel_y = 24; req_one_access = list(12,47,48)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
|
||||
"bI" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/security)
|
||||
"bJ" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/security)
|
||||
"bK" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/security)
|
||||
@@ -264,10 +264,10 @@
|
||||
"fd" = (/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire{pixel_x = 0; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
|
||||
"fe" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
|
||||
"ff" = (/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
|
||||
"fg" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining1_airlock_exterior"; locked = 1; name = "Mining Exterior Outpost"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining1_airlock_control"; name = "Mining Access Button"; pixel_x = 0; pixel_y = -24; req_access = null; req_one_access = list(12,47)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
|
||||
"fg" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining1_airlock_exterior"; locked = 1; name = "Mining Exterior Outpost"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining1_airlock_control"; name = "Mining Access Button"; pixel_x = 0; pixel_y = -24; req_access = null; req_one_access = list(12,47,48)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
|
||||
"fh" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
|
||||
"fi" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
|
||||
"fj" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining1_airlock_interior"; locked = 1; name = "Mining Interior Outpost"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining1_airlock_control"; name = "Mining Access Button"; pixel_x = -6; pixel_y = -26; req_access = null; req_one_access = list(12,47)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
|
||||
"fj" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining1_airlock_interior"; locked = 1; name = "Mining Interior Outpost"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining1_airlock_control"; name = "Mining Access Button"; pixel_x = -6; pixel_y = -26; req_access = null; req_one_access = list(12,47,48)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
|
||||
"fk" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "mining1_airlock_control"; name = "Mining Access Console"; pixel_x = -26; pixel_y = -26; tag_exterior_door = "mining1_airlock_exterior"; tag_interior_door = "mining1_airlock_interior"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
|
||||
"fl" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
|
||||
"fm" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
|
||||
@@ -700,6 +700,7 @@
|
||||
"nx" = (/obj/structure/table/standard,/obj/item/device/paicard,/obj/item/weapon/book/codex/lore/vir,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
|
||||
"ny" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Bar"},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
|
||||
"nz" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
|
||||
"nA" = (/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty{outdoors = 1},/area/surface/outpost/main/dorms)
|
||||
"nB" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
|
||||
"nC" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
|
||||
"nD" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
|
||||
@@ -708,6 +709,7 @@
|
||||
"nG" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
|
||||
"nH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
|
||||
"nI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
|
||||
"nJ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty{outdoors = 1},/area/surface/outpost/main/dorms)
|
||||
"nK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
|
||||
"nL" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
|
||||
"nM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
|
||||
@@ -721,6 +723,8 @@
|
||||
"nU" = (/turf/simulated/wall,/area/surface/outpost/main/construction_area)
|
||||
"nV" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
|
||||
"nW" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
|
||||
"nX" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 4},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty{outdoors = 1},/area/surface/outpost/main/dorms)
|
||||
"nY" = (/turf/simulated/floor/wood{outdoors = 1},/area/surface/outside/path/plains)
|
||||
"ob" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main4_airlock_interior"; locked = 1; name = "Main Outpost Interior"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "main4_airlock_control"; name = "Main Access Button"; pixel_x = 32; pixel_y = 6; req_access = null},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/corridor)
|
||||
"oc" = (/obj/structure/closet/athletic_mixed,/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
|
||||
"od" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
|
||||
@@ -751,7 +755,6 @@
|
||||
"oD" = (/obj/structure/table/bench/marble,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
|
||||
"oE" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
|
||||
"oF" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
|
||||
"oG" = (/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
|
||||
"oH" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/dorms)
|
||||
"oI" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
|
||||
"oJ" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Dorms Access"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
|
||||
@@ -793,7 +796,6 @@
|
||||
"pt" = (/obj/structure/disposalpipe/junction/yjunction{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
|
||||
"pu" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
|
||||
"pv" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
|
||||
"pw" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
|
||||
"px" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main1_airlock_exterior"; locked = 1; name = "Main Outpost Exterior"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "main1_airlock_control"; name = "Main Access Button"; pixel_x = 0; pixel_y = -24; req_access = null},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
|
||||
"py" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
|
||||
"pz" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
|
||||
@@ -829,7 +831,6 @@
|
||||
"qd" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
|
||||
"qe" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
|
||||
"qf" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
|
||||
"qg" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 4},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
|
||||
"qh" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/surface/outpost/main/dorms)
|
||||
"qi" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
|
||||
"qj" = (/obj/structure/closet/wardrobe/mixed,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/machinery/light,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
|
||||
@@ -1463,7 +1464,6 @@
|
||||
"Cn" = (/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
|
||||
"Co" = (/turf/simulated/floor/water/deep,/area/surface/outside/river/indalsalven)
|
||||
"Cp" = (/turf/simulated/wall,/area/surface/outside/path/plains)
|
||||
"Cq" = (/turf/simulated/floor/wood,/area/surface/outside/path/plains)
|
||||
"Cr" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
|
||||
"Cs" = (/obj/structure/disposalpipe/segment,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
|
||||
"Ct" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/brigdoor/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
|
||||
@@ -1608,9 +1608,9 @@ aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaj
|
||||
aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajajkVnmlynnnonpnqlAnrnslDlHmVmUmXmWmXmXntmYkZajajajajajajajajmZnBnCnDmwajajajajajajajajkNnEnFnGnHnIndnukNkCjJnKkEnjnjnLnMnNnOnPnjajajajazajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
|
||||
aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiazajkVnQnRlylynSnTnUnVnWlDlHlHlHlHnvlHlHlHnwkZajajajajajajajmymvmwobmymymyajajajajajajajkNocodoeofogndohkOoifXiAojokolnNomonnknknjajajajajajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
|
||||
aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajookVkVkVkWkWopoqnUnxoslDlalalalDnylDlalaotkZmymymwmwmymwmwmyovowoxoyozmymwmwmymwmwmymykNkOmzoAmzkOmzmzkOoBfXnhkSnkoCnNoDnNoEoFnjajajajajajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
|
||||
aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaioGoHoIoJoKoLoMoNoOoPoQoRoSnzoUoUoVoWoXoUoYoToUoZpapbpbpcpbpdpbpepfpgphpipjpbpbpkpdpbpboZplpmlipnpopmpppmpqprprpsptnkpunNoDpvnknknjnjnjajajajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
|
||||
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaipwpxpypzpApBorpCpDpEpFpGpHpEpEpIpEpJpEpEpKpEpLpMpNpOpPpPpPpQpPpRpSpTpUpPpPpPpOpPpQpPpVpWgwlXlXpXpYpYpZpYpYpYkbqaqbnkqcnNoDpvnkqdqeqfnjajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
|
||||
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiqgooqhqiooqjqkqlorqmqnqoqpqqqrqsorqlqtquqvqwqxqyqzqAqzqBqzqzqCqDqEqFqGqHqzqzqAqIqzqzqzqyqJqKqKqLqKqKqKqKqMfXqNqOqPnkqQqRqSqTqUqVqWqXnjajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
|
||||
aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiainAoHoIoJoKoLoMoNoOoPoQoRoSnzoUoUoVoWoXoUoYoToUoZpapbpbpcpbpdpbpepfpgphpipjpbpbpkpdpbpboZplpmlipnpopmpppmpqprprpsptnkpunNoDpvnknknjnjnjajajajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
|
||||
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiainJpxpypzpApBorpCpDpEpFpGpHpEpEpIpEpJpEpEpKpEpLpMpNpOpPpPpPpQpPpRpSpTpUpPpPpPpOpPpQpPpVpWgwlXlXpXpYpYpZpYpYpYkbqaqbnkqcnNoDpvnkqdqeqfnjajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
|
||||
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiainXooqhqiooqjqkqlorqmqnqoqpqqqrqsorqlqtquqvqwqxqyqzqAqzqBqzqzqCqDqEqFqGqHqzqzqAqIqzqzqzqyqJqKqKqLqKqKqKqKqMfXqNqOqPnkqQqRqSqTqUqVqWqXnjajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
|
||||
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajooooooooqYqYqlorqYqYqYqYqYqYqYorqlqYqYoooooomymymwmwmymwmwmyqZranCrbrcmymwmwmymwmwmymykCrdrerfrgrhrirjrkfXrlrmrnrorpnNrqrrnkqdrsqfnjajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
|
||||
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiazajoortrurvrwrxryrzrArBqYrCrDrEryrxrFrGrHrIooajajajajajajajmyrJmyrKmwmymyajajajajajajajkCrLrMrMrMrMrMrMrMrMrNrOrPnknknkrQnknknkrRnjnjajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
|
||||
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajajoHrSrTrUqYqlrVqYrWrXqYrYrZqYsaqlqYsbscsdoHajajajajajajajajsesfnbncmwajajajajajajajajajrLsgshsisisjskslsmsnsospsqsrssstsusvswsxrLajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
|
||||
@@ -1655,15 +1655,15 @@ AOAPaetRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtR
|
||||
AOAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiaiaiaiajajajajajajajajajajajajajwYBoBpyXBqBryjzaykykykykykzazUBsBtyXBpBuxiBvBwyCAqyCBxByBzAJyCxGBABBBCyCxCxGBDBExCususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvlvJutututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
AOAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiaiaiajajajajajajajajajajajajajajajwYwYwYwYwYEaykyjykyjyjyjykyjAYEcwYwYwYwYxixixiBHBIyCBJAsBKBLBMyPBNyNBOBPytBQxixixiususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvJutututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
AOAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiaiajajajajajajajajajajajajajajajajajajwYBRyjykBSBTBUBVEdBXBUBYBZCaCbCcCdCeCfCfxiCgChCiCjyCyyAJCkxGyzyCyCClCmCnxiususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlBmBnutututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
AOCoCoAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajCpCqCqCpajajajajajajajajajajajajajajajajajajwYwYCryjwYCsCtCuAeCvCwCxwYyjCywYwYCfCfbpxixiCzCAytxCxCCBytCCxCxCytCmCDxixiususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
AOAPCoCoAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajCECqCqCFAPAPAPajajajajajajajajajajajajajajajajwYwYCGwYCHzrzrAezrzrCHwYCIwYwYCJbhbhbpCKxixiCLytCMxGCNCOCPCQxGBQCnxixiusususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
AOAPAPAPAPCoAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPCECqCqCRCoAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPajwYwYwYCSzrzrAezrAQCTwYwYwYajCKCKCKCKCKajxixixiCUxGCVAzCWxGCXxixixiususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlBmBnututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeAPAPAPCoCoCoAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPCYCqCqCRCoCoCoCoAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPajajwYCZzrzrAezrzrDawYajajajajajajajajajajajxixGzQzQDbzQzQDcxiususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeAPAPAPAPCoCoAPAPAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPCoCYCqCqCRAPAPCoCoCoCoCoCoCoCoCoCoCoCoCoCoCoCoCoAPAPAPwYDdDdDdwYwYwYwYwYajajajajajajajajajajusxixCxDxCxixCxDxCxiususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaetRAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPCoCoCoCoCECqCqCFAPAPAPAPAPAPAPAPAPCoCoCoAPCoCoCoCoCoCoCoAPAPAPajajajajajajajajajajajajajusususususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaetRtRtRtRAPAPAPAPAPAPAPAPAPCoCoAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPCoCoAPAPAPCECqCqCFAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPCoCoCoCoAPAPAPAPAPAPajajajajajajajususususususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvmvnututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaetRtRtRtRtRtRtRtRAPAPAPAPAPAPCoCoCoAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPAPAPAPAPAPAPAPCECqCqCFAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPCoCoCoCoCoAPAPAPAPAPAPAPAPusususususususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaetRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPCoCoCoAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPAPAPAPAPAPAPAPtRCpCqCqCptRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPCoCoCoCoAPAPAPAPAPAPAPAPAPAPAPususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvlvmvnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
AOCoCoAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajCpnYnYCpajajajajajajajajajajajajajajajajajajwYwYCryjwYCsCtCuAeCvCwCxwYyjCywYwYCfCfbpxixiCzCAytxCxCCBytCCxCxCytCmCDxixiususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
AOAPCoCoAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajCEnYnYCFAPAPAPajajajajajajajajajajajajajajajajwYwYCGwYCHzrzrAezrzrCHwYCIwYwYCJbhbhbpCKxixiCLytCMxGCNCOCPCQxGBQCnxixiusususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
AOAPAPAPAPCoAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPCEnYnYCRCoAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPajwYwYwYCSzrzrAezrAQCTwYwYwYajCKCKCKCKCKajxixixiCUxGCVAzCWxGCXxixixiususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlBmBnututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeAPAPAPCoCoCoAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPCYnYnYCRCoCoCoCoAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPajajwYCZzrzrAezrzrDawYajajajajajajajajajajajxixGzQzQDbzQzQDcxiususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeAPAPAPAPCoCoAPAPAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPCoCYnYnYCRAPAPCoCoCoCoCoCoCoCoCoCoCoCoCoCoCoCoCoAPAPAPwYDdDdDdwYwYwYwYwYajajajajajajajajajajusxixCxDxCxixCxDxCxiususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaetRAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPCoCoCoCoCEnYnYCFAPAPAPAPAPAPAPAPAPCoCoCoAPCoCoCoCoCoCoCoAPAPAPajajajajajajajajajajajajajusususususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaetRtRtRtRAPAPAPAPAPAPAPAPAPCoCoAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPCoCoAPAPAPCEnYnYCFAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPCoCoCoCoAPAPAPAPAPAPajajajajajajajususususususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvmvnututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaetRtRtRtRtRtRtRtRAPAPAPAPAPAPCoCoCoAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPAPAPAPAPAPAPAPCEnYnYCFAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPCoCoCoCoCoAPAPAPAPAPAPAPAPusususususususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaetRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPCoCoCoAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPAPAPAPAPAPAPAPtRCpnYnYCptRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPCoCoCoCoAPAPAPAPAPAPAPAPAPAPAPususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvlvmvnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaetRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPAPAPAPAPAPAPtRtRtRtRtRaiaitRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPAPCoCoCoCoCoCoAPAPAPAPAPAPAPAPusususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvlvlvJutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaetRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPAPCoCoCoAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPCoCoAPAPAPAPAPtRtRtRtRtRtRtRaiaiaitRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRvkvkvkvkAPAPAPAPAPAPAPCoCoCoCoCoCoCoAPAPAPAPAPAPusususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvlvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaetRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPAPCoCoAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPCoCoAPAPAPAPtRtRtRtRtRtRtRtRtRtRaiaitRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRvkvkvkvkvkvkvkvkvkvkvkAPAPAPAPAPAPAPAPCoCoCoCoAPAPAPAPAPAPususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvlvlvmvnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
@@ -1689,8 +1689,8 @@ aaaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvktRtRtRtRtR
|
||||
aaaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvktRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRDgtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkAPAPAPCoCoAPAPAPvkvkvkvkvkvkaiaiaiaiaiaiaiaiaitCaiaiaivkvkvkvkvkvkvkvkvkvkaiaivIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvktRtRtRtRtRtRtRtRtRtRtRtRtRDgtRtRtRtRtRtRtRtRtRtRtRtRtRvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaivkvkvkvkaiaiaiaiaiaiaiaiaivkvkvkvkvkvkvkvkvkvkAPAPCoCoCoAPAPvkvkvkvkaiaiaiaiaiaivkvkvkvkvkDevIDhDhDhDhDhDhDhDhDhDhDhvkaiaivIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvktRtRtRDgtRtRtRtRtRtRtRtRtRvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaivkvkvkvkvkvkCpDiDiDjDjDjDiDiDkCpaiaiaiaivkvkvkvkvkvkvkvkDevIDhDhDhDhDhDhDhDhDhDhDhDhaiaivIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkaiaiaiCqCqCqCqCqCqCqCqCqCqaiaivkvkvkvkvkvkvkvkvkvkDevIDhDhDhDhDhDhDhDhDhDhDhDhvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvmvnututututwUwUwUwUwUwUututututututututwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaiCqCqCqCqCqCqCqCqCqCqaivkvkvkvkvkvkvkvkvkvkvkDevkDhDhDhDhDhDhDhDhDhDhDhDhvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututwUwUwUwUwUututututututututututwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkaiaiainYnYnYnYnYnYnYnYnYnYaiaivkvkvkvkvkvkvkvkvkvkDevIDhDhDhDhDhDhDhDhDhDhDhDhvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvmvnututututwUwUwUwUwUwUututututututututwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiainYnYnYnYnYnYnYnYnYnYaivkvkvkvkvkvkvkvkvkvkvkDevkDhDhDhDhDhDhDhDhDhDhDhDhvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututwUwUwUwUwUututututututututututwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkvkCpDlDmDmDnDnDnDmDmCpvkvkvkvkvkvkvkvkvkvkvkvkDevkDhDhDhDhDhDhDhDhDhDhDhvIvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututwUwUwUwUwUutututDoDpDpDpvnututututwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkvkvkvkvkvkAPAPAPCoCoAPAPvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvIvIvIvIvIvkvkvkvIvIvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvmvnututututwUwUwUwUututDoDqvlvlvlvmDpvnututututwUwUwUwUwUwUuu
|
||||
aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaivkvkvkvkvkvkvkvkvkvkAPAPAPCoAPAPvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututwUwUwUwUututDrvlvIvIvlvlvlvmDpvnututututwUwUwUwUuu
|
||||
@@ -1718,12 +1718,12 @@ aaaeaevIvIvIvIvIvIvIvIvIvIvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDx
|
||||
aaaeaevIvIvIvIvIvIvIvIvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIAPAPAPAPAPAPDsDuvlvlvlvlvlvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaevIvIvIvIvIvIvIvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIAPAPAPAPutDtDuvlvlvlvlBmBnututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeDyDyvIvIvIvIvIvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlAPAPAPututDtDsDsDuvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyvIvIvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDzvkDzvkCpCqCqCpvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlAPAPutututututDtDsBnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDACqCqDBDvDvDvDvDvDvDvvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvmDpDpvnutututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyDyDyvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDACqCqDBDvDvDvDvDvDvDvDvvkvkvkvkDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvmvnututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyDyDyDyvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDvDvDACqCqDBDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvmDpvnututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyDyDyDyDyvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDvDvDvDACqCqDBDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyDyDyDyDyDyvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvIvIvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDvDzvkDzvkCpCqCqCpvkvkvkDvDvDvDvDvDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvmvnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyvIvIvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDzvkDzvkCpnYnYCpvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlAPAPutututututDtDsBnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDAnYnYDBDvDvDvDvDvDvDvvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvmDpDpvnutututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyDyDyvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDAnYnYDBDvDvDvDvDvDvDvDvvkvkvkvkDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvmvnututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyDyDyDyvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDvDvDAnYnYDBDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvmDpvnututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyDyDyDyDyvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDvDvDvDAnYnYDBDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyDyDyDyDyDyvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvIvIvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDvDzvkDzvkCpnYnYCpvkvkvkDvDvDvDvDvDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvmvnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyDyDyDyDyDyDyDyvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvIvIvIvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvmvnututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyDyDyDyDyDyDyDyDyDyDyDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvIvIvIvIvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvJututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
aaaeaeaeDyDyDyDyDyDyDyDyDyDyDyDyDyDyDyDyDyDyvIvIDxDxDxDxvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvIvIvIvIvIDyvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvJututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
|
||||
|
||||
@@ -38,6 +38,12 @@ var/list/all_maps = list()
|
||||
//This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there.
|
||||
var/list/accessible_z_levels = list()
|
||||
|
||||
//List of additional z-levels to load above the existing .dmm file z-levels using the maploader. Must be map template >>> NAMES <<<.
|
||||
var/list/lateload_z_levels = list()
|
||||
|
||||
//Similar to above, but only pick ONE to load, useful for random away missions and whatnot
|
||||
var/list/lateload_single_pick = list()
|
||||
|
||||
var/list/allowed_jobs = list() //Job datums to use.
|
||||
//Works a lot better so if we get to a point where three-ish maps are used
|
||||
//We don't have to C&P ones that are only common between two of them
|
||||
|
||||
@@ -116,7 +116,6 @@
|
||||
|
||||
{{if data.is_moving == 0}}
|
||||
<h3>Available Destinations</h3>
|
||||
|
||||
<HR>
|
||||
<div class="itemContent" style="width: 100%;"></div><BR>
|
||||
{{for data.routes}}
|
||||
@@ -127,9 +126,7 @@
|
||||
<div class="itemContent">
|
||||
<div style="float: left; width: 100%;">
|
||||
{{:helper.link(value.travel_time, 'clock', {"traverse" : value.index})}}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/for}}
|
||||
@@ -150,3 +147,95 @@
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{if data.doors}}
|
||||
<h3>Hatch Status</h3>
|
||||
<HR>
|
||||
<div class="item">
|
||||
{{props data.doors}}
|
||||
<div class="item">
|
||||
<div class="itemLabel">{{:key}}</div>
|
||||
<div class="itemContent">
|
||||
{{if value.open}}
|
||||
<span class="bad">OPN</span>
|
||||
{{else}}
|
||||
<span class="good">CLS</span>
|
||||
{{/if}}
|
||||
-
|
||||
{{if value.bolted}}
|
||||
<span class="good">BLT</span>
|
||||
{{else}}
|
||||
<span class="bad">UBLT</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{/props}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{if data.sensors}}
|
||||
<h3>Air Readout</h3>
|
||||
<hr>
|
||||
{{props data.sensors}}
|
||||
<div class="item" style="position: relative; overflow: hidden;">
|
||||
<div class="itemLabel" style="padding-right: 2px; height: 100%; position:absolute;">
|
||||
<span style="position: relative;display: inline-block; top: 50%;left: 50%;transform: translate(-50%, -50%);">{{:key}}</span>
|
||||
</div>
|
||||
<div class="itemContentMedium statusDisplay floatRight" style="overflow: hidden;">
|
||||
{{if value.reading == 1}}
|
||||
<div class="itemLabelWide">
|
||||
Pressure:
|
||||
</div>
|
||||
<div class = "itemContentSmall">
|
||||
{{:helper.string('<span class="{0}">{1} kPa</span>', value.pressure < 80 || value.pressure > 120 ? 'bad' : value.pressure < 95 || value.pressure > 110 ? 'average' : 'good' , value.pressure)}}
|
||||
</div>
|
||||
<div class="itemLabelWide">
|
||||
Temperature:
|
||||
</div>
|
||||
<div class = "itemContentSmall">
|
||||
{{:helper.string('<span class="{0}">{1} °C</span>', value.temp < 5 || value.temp > 35 ? 'bad' : value.temp < 15 || value.temp > 25 ? 'average' : 'good' , value.temp)}}
|
||||
</div>
|
||||
<br>
|
||||
<div class="itemLabelWide">
|
||||
Oxygen:
|
||||
</div>
|
||||
<div class = "itemContentSmall">
|
||||
{{:helper.string('<span class="{0}">{1}%</span>', value.oxygen < 17 ? 'bad' : value.oxygen < 19 ? 'average' : 'good' , value.oxygen)}}
|
||||
</div>
|
||||
<div class="itemLabelWide">
|
||||
Nitrogen:
|
||||
</div>
|
||||
<div class = "itemContentSmall">
|
||||
{{:helper.string('<span class="{0}">{1}%</span>', value.nitrogen > 82 ? 'bad' : value.nitrogen > 80 ? 'average' : 'good' , value.nitrogen)}}
|
||||
</div>
|
||||
<div class="itemLabelWide">
|
||||
Carbon Dioxide:
|
||||
</div>
|
||||
<div class = "itemContentSmall">
|
||||
{{:helper.string('<span class="{0}">{1}%</span>', value.carbon_dioxide > 5 ? 'bad' : 'good' , value.carbon_dioxide)}}
|
||||
</div>
|
||||
<div class="itemLabelWide">
|
||||
Phoron:
|
||||
</div>
|
||||
<div class = "itemContentSmall">
|
||||
{{:helper.string('<span class="{0}">{1}%</span>', value.phoron > 0 ? 'bad' : 'good' , value.phoron)}}
|
||||
|
||||
</div>
|
||||
{{if value.other > 0}}
|
||||
<div class="itemLabelWide">
|
||||
Unknown:
|
||||
</div>
|
||||
<div class = "itemContentSmall">
|
||||
<span class="bad">{{:value.other}}%</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<div class="itemContent" style="width: 100%;">
|
||||
<span class="average"><b>Unable to get air reading</b></span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{/props}}
|
||||
{{/if}}
|
||||
|
||||
|
||||
@@ -851,6 +851,7 @@
|
||||
#include "code\game\objects\items\devices\suit_cooling.dm"
|
||||
#include "code\game\objects\items\devices\t_scanner.dm"
|
||||
#include "code\game\objects\items\devices\taperecorder.dm"
|
||||
#include "code\game\objects\items\devices\text_to_speech.dm"
|
||||
#include "code\game\objects\items\devices\traitordevices.dm"
|
||||
#include "code\game\objects\items\devices\transfer_valve.dm"
|
||||
#include "code\game\objects\items\devices\translator.dm"
|
||||
@@ -2015,6 +2016,7 @@
|
||||
#include "code\modules\power\fusion\fusion_particle_catcher.dm"
|
||||
#include "code\modules\power\fusion\fusion_reactions.dm"
|
||||
#include "code\modules\power\fusion\fusion_reagents.dm"
|
||||
#include "code\modules\power\fusion\magpower.dm"
|
||||
#include "code\modules\power\fusion\core\_core.dm"
|
||||
#include "code\modules\power\fusion\core\core_control.dm"
|
||||
#include "code\modules\power\fusion\core\core_field.dm"
|
||||
@@ -2057,6 +2059,7 @@
|
||||
#include "code\modules\projectiles\ammunition\rounds.dm"
|
||||
#include "code\modules\projectiles\guns\energy.dm"
|
||||
#include "code\modules\projectiles\guns\launcher.dm"
|
||||
#include "code\modules\projectiles\guns\modular_guns.dm"
|
||||
#include "code\modules\projectiles\guns\projectile.dm"
|
||||
#include "code\modules\projectiles\guns\vox.dm"
|
||||
#include "code\modules\projectiles\guns\energy\laser.dm"
|
||||
|
||||
Reference in New Issue
Block a user