From 37c1cf502eb9752803c77f4175143d1d8597b2ca Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 26 Jul 2017 15:45:14 -0500 Subject: [PATCH 001/230] Adds info about schema versioning to head of db changelog file --- SQL/database_changelog.txt.rej | 15 +++++++++++++++ code/world.dm | 20 ++++++++++---------- 2 files changed, 25 insertions(+), 10 deletions(-) create mode 100644 SQL/database_changelog.txt.rej diff --git a/SQL/database_changelog.txt.rej b/SQL/database_changelog.txt.rej new file mode 100644 index 0000000000..1b201ec4aa --- /dev/null +++ b/SQL/database_changelog.txt.rej @@ -0,0 +1,15 @@ +diff a/SQL/database_changelog.txt b/SQL/database_changelog.txt (rejected hunks) +@@ -1,10 +1,10 @@ + Any time you make a change to the schema files, remember to increment the database schema version. Generally increment the minor number, major should be reserved for significant changes to the schema. Both values go up to 255. + +-The latest database version is 3.1; The query to update the schema revision table is: ++The latest database version is 3.0; The query to update the schema revision table is: + +-UPDATE `schema_revision` SET major = 3, minor = 1 LIMIT 1; ++INSERT INTO `schema_revision` (`major`, `minor`) VALUES (3, 0); + or +-UPDATE `SS13_schema_revision` SET major = 3, minor = 1 LIMIT 1; ++INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (3, 0); + + ---------------------------------------------------- + diff --git a/code/world.dm b/code/world.dm index b6badeb348..1fe2b5f25d 100644 --- a/code/world.dm +++ b/code/world.dm @@ -59,16 +59,16 @@ if(config.sql_enabled) if(SSdbcore.Connect()) log_world("Database connection established.") - var/datum/DBQuery/db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_version")]") - db_version.Execute() - if(db_version.NextRow()) - var/db_major = db_version.item[1] - var/db_minor = db_version.item[2] + var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_version")] ORDER BY date DESC LIMIT 1") + query_db_version.Execute() + if(query_db_version.NextRow()) + var/db_major = query_db_version.item[1] + var/db_minor = query_db_version.item[2] if(db_major < DB_MAJOR_VERSION || db_minor < DB_MINOR_VERSION) - message_admins("db schema ([db_major].[db_minor]) is behind latest tg schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") - log_sql("db schema ([db_major].[db_minor]) is behind latest tg schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") + message_admins("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") + log_sql("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") else - message_admins("Could not get schema version from db") + message_admins("Could not get schema version from database") else log_world("Your server failed to establish a connection with the database.") @@ -105,10 +105,10 @@ /world/Topic(T, addr, master, key) var/list/input = params2list(T) - + var/pinging = ("ping" in input) var/playing = ("players" in input) - + if(!pinging && !playing && config && config.log_world_topic) GLOB.world_game_log << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]" From 79e6963aca4951cf523945d1478d1eb38acf921d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 30 Jul 2017 19:58:28 -0500 Subject: [PATCH 002/230] Hallucinations 3.0 --- code/__DEFINES/logging.dm.rej | 9 + code/datums/datumvars.dm | 20 ++ .../diseases/advance/symptoms/hallucigen.dm | 2 +- code/game/machinery/doors/airlock.dm | 10 +- code/game/objects/effects/mines.dm | 2 +- code/modules/admin/admin_investigate.dm.rej | 10 + code/modules/flufftext/Hallucination.dm | 212 +++++++++------- code/modules/flufftext/Hallucination.dm.rej | 209 ++++++++++++++++ code/modules/mob/living/carbon/carbon.dm | 7 + code/modules/mob/living/carbon/life.dm | 3 +- .../simple_animal/guardian/types/fire.dm | 2 +- code/modules/mob/mob_helpers.dm | 3 + .../modules/projectiles/projectile/special.dm | 229 ++++++++++++++++++ .../chemistry/machinery/chem_dispenser.dm | 12 +- code/modules/surgery/organs/vocal_cords.dm | 5 +- strings/hallucination.json | 229 ++++++++++++++++++ 16 files changed, 866 insertions(+), 98 deletions(-) create mode 100644 code/__DEFINES/logging.dm.rej create mode 100644 code/modules/admin/admin_investigate.dm.rej create mode 100644 code/modules/flufftext/Hallucination.dm.rej create mode 100644 strings/hallucination.json diff --git a/code/__DEFINES/logging.dm.rej b/code/__DEFINES/logging.dm.rej new file mode 100644 index 0000000000..6a7a358a9c --- /dev/null +++ b/code/__DEFINES/logging.dm.rej @@ -0,0 +1,9 @@ +diff a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm (rejected hunks) +@@ -9,6 +9,7 @@ + #define INVESTIGATE_SUPERMATTER "supermatter" + #define INVESTIGATE_TELESCI "telesci" + #define INVESTIGATE_WIRES "wires" ++#define INVESTIGATE_HALLUCINATIONS "hallucinations" + + //Individual logging defines + #define INDIVIDUAL_ATTACK_LOG "Attack log" diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 60f932a88a..3672b850ca 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -929,6 +929,26 @@ manipulate_organs(C) href_list["datumrefresh"] = href_list["editorgans"] + else if(href_list["hallucinate"]) + if(!check_rights(0)) + return + + var/mob/living/carbon/C = locate(href_list["hallucinate"]) in GLOB.mob_list + if(!istype(C)) + to_chat(usr, "This can only be done to instances of type /mob/living/carbon") + return + + var/list/hallucinations = subtypesof(/datum/hallucination) + var/result = input(usr, "Choose the hallucination to apply","Send Hallucination") as null|anything in hallucinations + if(!usr) + return + if(QDELETED(C)) + to_chat(usr, "Mob doesn't exist anymore") + return + + if(result) + new result(C, TRUE) + else if(href_list["makehuman"]) if(!check_rights(R_SPAWN)) return diff --git a/code/datums/diseases/advance/symptoms/hallucigen.dm b/code/datums/diseases/advance/symptoms/hallucigen.dm index f913d49573..9bfd5b0baf 100644 --- a/code/datums/diseases/advance/symptoms/hallucigen.dm +++ b/code/datums/diseases/advance/symptoms/hallucigen.dm @@ -59,4 +59,4 @@ Bonus else if(prob(base_message_chance)) to_chat(M, "[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]") - M.hallucination += (15 * power) + M.hallucination += (45 * power) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 624d853808..94047727bc 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -233,9 +233,13 @@ return else /*if(src.justzap)*/ return - else if(user.hallucination > 50 && ishuman(user) && prob(10) && src.operating == FALSE) - hallucinate_shock(user) - return + else if(user.hallucinating() && ishuman(user) && prob(4) && !operating) + var/mob/living/carbon/human/H = user + if(H.gloves) + var/obj/item/clothing/gloves/G = H.gloves + if(G.siemens_coefficient)//not insulated + hallucinate_shock(H) + return if (cyclelinkedairlock) if (!shuttledocked && !emergency && !cyclelinkedairlock.shuttledocked && !cyclelinkedairlock.emergency && allowed(user)) if(cyclelinkedairlock.operating) diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index c9b524836f..005d9c7595 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -127,7 +127,7 @@ var/pure_red = list(0,0,0,0,0,0,0,0,0,1,0,0) spawn(0) - new /obj/effect/hallucination/delusion(victim.loc,victim,"demon",duration,0) + new /datum/hallucination/delusion(victim, TRUE, "demon",duration,0) var/obj/item/weapon/twohanded/required/chainsaw/doomslayer/chainsaw = new(victim.loc) chainsaw.flags |= NODROP diff --git a/code/modules/admin/admin_investigate.dm.rej b/code/modules/admin/admin_investigate.dm.rej new file mode 100644 index 0000000000..4f8c142c61 --- /dev/null +++ b/code/modules/admin/admin_investigate.dm.rej @@ -0,0 +1,10 @@ +diff a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm (rejected hunks) +@@ -5,7 +5,7 @@ + F << "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
" + + +-/client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY) ) ++/client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS) ) + set name = "Investigate" + set category = "Admin" + if(!holder) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 0b1187e9bc..6ae32a9d6a 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -11,6 +11,8 @@ Gunshots/explosions/opening doors/less rare audio (done) */ +#define HAL_LINES_FILE "hallucination.json" + /mob/living/carbon var/image/halimage var/image/halbody @@ -64,13 +66,14 @@ Gunshots/explosions/opening doors/less rare audio (done) var/col_mod = null var/image/current_image = null var/image_layer = MOB_LAYER - var/active = 1 //qdelery + var/active = TRUE //qdelery /obj/effect/hallucination/simple/Initialize(mapload, var/mob/living/carbon/T) ..() target = T current_image = GetImage() - if(target.client) target.client.images |= current_image + if(target.client) + target.client.images |= current_image /obj/effect/hallucination/simple/proc/GetImage() var/image/I = image(image_icon,src,image_state,image_layer,dir=src.dir) @@ -82,10 +85,12 @@ Gunshots/explosions/opening doors/less rare audio (done) /obj/effect/hallucination/simple/proc/Show(update=1) if(active) - if(target.client) target.client.images.Remove(current_image) + if(target.client) + target.client.images.Remove(current_image) if(update) current_image = GetImage() - if(target.client) target.client.images |= current_image + if(target.client) + target.client.images |= current_image /obj/effect/hallucination/simple/update_icon(new_state,new_icon,new_px=0,new_py=0) image_state = new_state @@ -101,36 +106,39 @@ Gunshots/explosions/opening doors/less rare audio (done) Show() /obj/effect/hallucination/simple/Destroy() - if(target.client) target.client.images.Remove(current_image) - active = 0 + if(target.client) + target.client.images.Remove(current_image) + active = FALSE return ..() #define FAKE_FLOOD_EXPAND_TIME 20 #define FAKE_FLOOD_MAX_RADIUS 10 -/obj/effect/hallucination/fake_flood +/datum/hallucination/fake_flood //Plasma starts flooding from the nearby vent + var/turf/center var/list/flood_images = list() var/list/turf/flood_turfs = list() var/image_icon = 'icons/effects/tile_effects.dmi' var/image_state = "plasma" var/radius = 0 var/next_expand = 0 + cost = 25 -/obj/effect/hallucination/fake_flood/Initialize(mapload, var/mob/living/carbon/T) +/datum/hallucination/fake_flood/New(mob/living/carbon/T, forced = TRUE) ..() - target = T for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in orange(7,target)) if(!U.welded) - src.loc = U.loc + center = get_turf(U) break - flood_images += image(image_icon,src,image_state,MOB_LAYER) - flood_turfs += get_turf(src.loc) + feedback_details += "Vent Coords: [center.x],[center.y],[center.z]" + flood_images += image(image_icon,center,image_state,MOB_LAYER) + flood_turfs += center if(target.client) target.client.images |= flood_images next_expand = world.time + FAKE_FLOOD_EXPAND_TIME START_PROCESSING(SSobj, src) -/obj/effect/hallucination/fake_flood/process() +/datum/hallucination/fake_flood/process() if(next_expand <= world.time) radius++ if(radius > FAKE_FLOOD_MAX_RADIUS) @@ -138,10 +146,10 @@ Gunshots/explosions/opening doors/less rare audio (done) return Expand() if((get_turf(target) in flood_turfs) && !target.internal) - target.hallucinate("fake_alert", "tox_in_air") + new /datum/hallucination/fake_alert(target, TRUE, "tox_in_air") next_expand = world.time + FAKE_FLOOD_EXPAND_TIME -/obj/effect/hallucination/fake_flood/proc/Expand() +/datum/hallucination/fake_flood/proc/Expand() for(var/turf/FT in flood_turfs) for(var/dir in GLOB.cardinals) var/turf/T = get_step(FT, dir) @@ -152,7 +160,7 @@ Gunshots/explosions/opening doors/less rare audio (done) if(target.client) target.client.images |= flood_images -/obj/effect/hallucination/fake_flood/Destroy() +/datum/hallucination/fake_flood/Destroy() STOP_PROCESSING(SSobj, src) qdel(flood_turfs) flood_turfs = list() @@ -167,7 +175,7 @@ Gunshots/explosions/opening doors/less rare audio (done) image_icon = 'icons/mob/alien.dmi' image_state = "alienh_pounce" -/obj/effect/hallucination/simple/xeno/Initialize(mapload, var/mob/living/carbon/T) +/obj/effect/hallucination/simple/xeno/Initialize(mapload, mob/living/carbon/T) ..() name = "alien hunter ([rand(1, 1000)])" @@ -177,18 +185,19 @@ Gunshots/explosions/opening doors/less rare audio (done) target.Knockdown(100) target.visible_message("[target] flails around wildly.","[name] pounces on you!") -/obj/effect/hallucination/xeno_attack +/datum/hallucination/xeno_attack //Xeno crawls from nearby vent,jumps at you, and goes back in var/obj/machinery/atmospherics/components/unary/vent_pump/pump = null var/obj/effect/hallucination/simple/xeno/xeno = null + cost = 25 -/obj/effect/hallucination/xeno_attack/Initialize(mapload, var/mob/living/carbon/T) +/datum/hallucination/xeno_attack/New(mob/living/carbon/T, forced = TRUE) ..() - target = T for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in orange(7,target)) if(!U.welded) pump = U break + feedback_details += "Vent Coords: [pump.x],[pump.y],[pump.z]" if(pump) xeno = new(pump.loc,target) sleep(10) @@ -200,7 +209,7 @@ Gunshots/explosions/opening doors/less rare audio (done) sleep(10) var/xeno_name = xeno.name to_chat(target, "[xeno_name] begins climbing into the ventilation system...") - sleep(10) + sleep(30) qdel(xeno) to_chat(target, "[xeno_name] scrambles into the ventilation ducts!") qdel(src) @@ -209,7 +218,7 @@ Gunshots/explosions/opening doors/less rare audio (done) image_icon = 'icons/mob/animal.dmi' image_state = "clown" -/obj/effect/hallucination/simple/clown/Initialize(mapload, var/mob/living/carbon/T,duration) +/obj/effect/hallucination/simple/clown/Initialize(mapload, mob/living/carbon/T, duration) ..(loc, T) name = pick(GLOB.clown_names) QDEL_IN(src,duration) @@ -256,20 +265,21 @@ Gunshots/explosions/opening doors/less rare audio (done) image_state = "bubblegum" px = -32 -/obj/effect/hallucination/oh_yeah +/datum/hallucination/oh_yeah var/obj/effect/hallucination/simple/bubblegum/bubblegum var/image/fakebroken var/image/fakerune + cost = 75 -/obj/effect/hallucination/oh_yeah/Initialize(mapload, var/mob/living/carbon/T) +/datum/hallucination/oh_yeah/New(mob/living/carbon/T, forced = TRUE) . = ..() - target = T var/turf/closed/wall/wall for(var/turf/closed/wall/W in range(7,target)) wall = W break if(!wall) return INITIALIZE_HINT_QDEL + feedback_details += "Source: [wall.x],[wall.y],[wall.z]" fakebroken = image('icons/turf/floors.dmi', wall, "plating", layer = TURF_LAYER) var/turf/landing = get_turf(target) @@ -283,7 +293,7 @@ Gunshots/explosions/opening doors/less rare audio (done) bubblegum = new(wall, target) addtimer(CALLBACK(src, .proc/bubble_attack, landing), 10) -/obj/effect/hallucination/oh_yeah/proc/bubble_attack(turf/landing) +/datum/hallucination/oh_yeah/proc/bubble_attack(turf/landing) var/charged = FALSE //only get hit once while(get_turf(bubblegum) != landing && target && target.stat != DEAD) bubblegum.forceMove(get_step_towards(bubblegum, landing)) @@ -301,7 +311,7 @@ Gunshots/explosions/opening doors/less rare audio (done) sleep(30) qdel(src) -/obj/effect/hallucination/oh_yeah/Destroy() +/datum/hallucination/oh_yeah/Destroy() if(target.client) target.client.images.Remove(fakebroken) target.client.images.Remove(fakerune) @@ -310,23 +320,24 @@ Gunshots/explosions/opening doors/less rare audio (done) QDEL_NULL(bubblegum) return ..() -/obj/effect/hallucination/singularity_scare +/datum/hallucination/singularity_scare //Singularity moving towards you. //todo Hide where it moved with fake space images var/obj/effect/hallucination/simple/singularity/s = null + cost = 75 -/obj/effect/hallucination/singularity_scare/Initialize(mapload, var/mob/living/carbon/T) +/datum/hallucination/singularity_scare/New(mob/living/carbon/T, forced = TRUE) ..() - target = T var/turf/start = get_turf(T) var/screen_border = pick(SOUTH,EAST,WEST,NORTH) - for(var/i = 0,i<11,i++) + for(var/i in 1 to 13) start = get_step(start,screen_border) + feedback_details += "Source: [start.x],[start.y],[start.z]" s = new(start,target) s.parent = src - for(var/i = 0,i<11,i++) - sleep(5) - s.loc = get_step(get_turf(s),get_dir(s,target)) + for(var/i in 1 to 13) + sleep(10) + s.forceMove(get_step(get_turf(s),get_dir(s,target))) s.Show() s.Eat() qdel(s) @@ -337,64 +348,72 @@ Gunshots/explosions/opening doors/less rare audio (done) image_layer = MASSIVE_OBJ_LAYER px = -96 py = -96 - var/obj/effect/hallucination/singularity_scare/parent + var/datum/hallucination/singularity_scare/parent /obj/effect/hallucination/simple/singularity/proc/Eat(atom/OldLoc, Dir) var/target_dist = get_dist(src,target) if(target_dist<=3) //"Eaten" - target.hal_screwyhud = SCREWYHUD_CRIT + target.set_screwyhud(SCREWYHUD_DEAD) target.SetUnconscious(160) - addtimer(CALLBACK(parent, .proc/wake_and_restore), rand(30, 50)) + addtimer(CALLBACK(parent, /datum/hallucination/.proc/wake_and_restore), rand(30, 50)) -/obj/effect/hallucination/battle +/datum/hallucination/battle + cost = 15 -/obj/effect/hallucination/battle/Initialize(mapload, var/mob/living/carbon/T) +/datum/hallucination/battle/New(mob/living/carbon/T, forced = TRUE, battle_type) ..() - target = T var/hits = rand(3,6) - switch(rand(1,5)) - if(1) //Laser fight - for(var/i=0,i...wabbajack...wabbajack...") - target.playsound_local(target,'sound/magic/staff_change.ogg', 50, 1, -1) + if(wabbajack) + to_chat(target, "...wabbajack...wabbajack...") + target.playsound_local(target,'sound/magic/staff_change.ogg', 50, 1) delusion = A target.client.images |= A QDEL_IN(src, duration) -/obj/effect/hallucination/self_delusion/Destroy() +/datum/hallucination/self_delusion/Destroy() if(target.client) target.client.images.Remove(delusion) return ..() -/obj/effect/hallucination/fakeattacker/Initialize(mapload, var/mob/living/carbon/T) +/datum/hallucination/fakeattacker/New(mob/living/carbon/T, forced = TRUE) ..() - target = T var/mob/living/carbon/human/clone = null var/clone_weapon = null @@ -523,6 +544,7 @@ Gunshots/explosions/opening doors/less rare audio (done) if(H.stat || H.lying) continue clone = H + feedback_details += "Clone of: [H.real_name]" break if(!clone) @@ -604,7 +626,7 @@ Gunshots/explosions/opening doors/less rare audio (done) for(var/mob/O in oviewers(world.view , my_target)) to_chat(O, "[my_target] stumbles around.") -/obj/effect/fake_attacker/Initialize(mapload, var/mob/living/carbon/T) +/obj/effect/fake_attacker/Initialize(mapload, mob/living/carbon/T) ..() my_target = T QDEL_IN(src, 300) @@ -651,7 +673,7 @@ Gunshots/explosions/opening doors/less rare audio (done) if(!locate(/obj/effect/overlay) in my_target.loc) fake_blood(my_target) else - my_target.playsound_local(my_target, pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg'), 25, 1, -1) + my_target.playsound_local(my_target, pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg'), 25, 1) my_target.show_message("[src.name] has punched [my_target]!", 1) my_target.staminaloss += 30 if(prob(33)) @@ -674,14 +696,15 @@ Gunshots/explosions/opening doors/less rare audio (done) QDEL_IN(O, 300) -/obj/effect/hallucination/bolts +/datum/hallucination/bolts var/list/doors = list() + cost = 25 -/obj/effect/hallucination/bolts/Initialize(mapload, var/mob/living/carbon/T,var/door_number=-1) //-1 for severe, 1-2 for subtle +/datum/hallucination/bolts/New(mob/living/carbon/T, forced, door_number=-1) //-1 for severe, 1-2 for subtle ..() - target = T var/image/I = null var/count = 0 + feedback_details += "Door amount: [door_number]" for(var/obj/machinery/door/airlock/A in range(7, target)) if(count>door_number && door_number>0) break @@ -700,13 +723,30 @@ Gunshots/explosions/opening doors/less rare audio (done) sleep(rand(6,12)) qdel(src) -/obj/effect/hallucination/whispers +/datum/hallucination/whispers + cost = 15 -/obj/effect/hallucination/whispers/Initialize(mapload, var/mob/living/carbon/T) +/datum/hallucination/whispers/New(mob/living/carbon/T, forced = TRUE) ..() - target = T - var/speak_messages = list("I'm watching you...","[target.first_name()]!","Get out!","Kchck-Chkck? Kchchck!","Did you hear that?","What did you do ?","Why?","Give me that!","HELP!!","EI NATH!!", "RUN!!", "Kill me!","O bidai nabora se'sma!", "[text2ratvar("Divinity, grant...")]") - var/radio_messages = list("Xenos!","Singularity loose!","Comms down!","They are arming the nuke!","They butchered Ian!","H-help!","[pick("Cult", "Wizard", "Ling", "Ops", "Revenant", "Murderer", "Harm", "I hear flashing", "Help")] in [pick(GLOB.teleportlocs)][prob(50)?"!":"!!"]","Where's [target.first_name()]?","Call the shuttle!","AI rogue!!") + var/speak_messages = list("[pick("I'm watching you...","I know what you're doing","What are you hiding?","I saw that")]",\ + "[pick("","Hey, ","Hi ","Hello ","Wait, ","It's ")][target.first_name()]!",\ + "[pick("Get out","Go away","Fuck off","OUT!")]",\ + "[pick("Kchck-Chkck? Kchchck!","EEEeeeeEEEE","#@§*&£","H-hhhhh...")]",\ + "[pick("Did you hear that?","Did you see that?","What was that?")]",\ + "[pick("Hail Ratvar","Hail Nar'Sie","Viva!","[generate_code_phrase()]","Are you mr. [pick(GLOB.possible_changeling_IDs)]?")]",\ + "[pick("Why?","What?","Wait, what?","Wait","Hold on","Uh...")]",\ + "Give me that!",\ + "HELP[pick(""," ME"," HIM"," HER"," THEM")]!!",\ + "RUN!!",\ + "I'm infected, [pick("stay away","don't get close","be careful","help me","kill me")]") + + var/radio_messages = list("Set [target.first_name()] to arrest!",\ + "[pick("Captain","Hos","Cmo","Rd","Ce","Hop","Janitor","AI","Viro","Qm","[target.first_name()]")] is [pick("rogue","cult","clockcult","a revhead","a gang leader","a traitor","a ling","dead")]!",\ + "Help!",\ + "[pick("Cult", "Wizard", "Blob", "Ling", "Ops", "Swarmers", "Revenant", "Traitor", "Harm", "I hear flashing", "Help")] in [pick(GLOB.teleportlocs)][prob(50)?"!":"!!"]",\ + "Where's [target.first_name()]?"\ + ,"[pick("C","Ai, c","Someone c","Rec")]all the shuttle!"\ + ,"AI [pick("rogue", "is dead")]!!") var/list/mob/living/carbon/people = list() var/list/mob/living/carbon/person = null @@ -722,7 +762,9 @@ Gunshots/explosions/opening doors/less rare audio (done) people += H if(person) //Basic talk var/image/speech_overlay = image('icons/mob/talk.dmi', person, "default0", layer = ABOVE_MOB_LAYER) - to_chat(target, target.compose_message(person,understood_language,pick(speak_messages),null,person.get_spans())) + var/message = target.compose_message(person,understood_language,pick(speak_messages),null,person.get_spans()) + feedback_details += "Type: Talk, Source: [person.real_name], Message: [message]" + to_chat(target, message) if(target.client) target.client.images |= speech_overlay sleep(30) diff --git a/code/modules/flufftext/Hallucination.dm.rej b/code/modules/flufftext/Hallucination.dm.rej new file mode 100644 index 0000000000..78b5d879f2 --- /dev/null +++ b/code/modules/flufftext/Hallucination.dm.rej @@ -0,0 +1,209 @@ +diff a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm (rejected hunks) +@@ -60,9 +60,14 @@ GLOBAL_LIST_INIT(hallucinations_major, list( + var/halpick = pick(current) + new halpick(src, FALSE) + ++/mob/living/carbon/proc/set_screwyhud(hud_type) ++ hal_screwyhud = hud_type ++ update_health_hud() ++ + /datum/hallucination + var/mob/living/carbon/target + var/cost = 5 //affects the amount of hallucination reduced, and cooldown until the next hallucination ++ var/feedback_details //extra info for investigate + + /datum/hallucination/New(mob/living/carbon/T, forced = TRUE) + set waitfor = 0 +@@ -72,9 +77,13 @@ GLOBAL_LIST_INIT(hallucinations_major, list( + target.next_hallucination = world.time + (rand(cost * 0.5, cost * 3) * 10) + + /datum/hallucination/proc/wake_and_restore() +- target.hal_screwyhud = SCREWYHUD_NONE ++ target.set_screwyhud(SCREWYHUD_NONE) + target.SetSleeping(0) + ++/datum/hallucination/Destroy() ++ target.investigate_log("was afflicted with a hallucination of type [type]. [feedback_details]", INVESTIGATE_HALLUCINATIONS) ++ return ..() ++ + /obj/effect/hallucination + invisibility = INVISIBILITY_OBSERVER + var/mob/living/carbon/target = null +@@ -744,7 +771,9 @@ GLOBAL_LIST_INIT(hallucinations_major, list( + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) + humans += H + person = pick(humans) +- to_chat(target, target.compose_message(person,understood_language,pick(radio_messages),"1459",person.get_spans())) ++ var/message = target.compose_message(person,understood_language,pick(radio_messages),"1459",person.get_spans()) ++ feedback_details += "Type: Radio, Source: [person.real_name], Message: [message]" ++ to_chat(target, message) + qdel(src) + + /datum/hallucination/message +@@ -763,43 +792,48 @@ GLOBAL_LIST_INIT(hallucinations_major, list( + "You're hallucinating.", \ + //Direct advice + "[pick_list_replacements(HAL_LINES_FILE, "advice")]") ++ feedback_details += "Message: [chosen]" + to_chat(target, chosen) + qdel(src) + + /datum/hallucination/sounds + cost = 15 + +-/datum/hallucination/sounds/New(mob/living/carbon/T, forced = TRUE) ++/datum/hallucination/sounds/New(mob/living/carbon/T, forced = TRUE, sound_type) + ..() ++ if(!sound_type) ++ sound_type = pick("airlock","explosion","far_explosion","glass","phone","summon_guns","alarm","beepsky","hallelujah","creepy","ratvar","shuttle_dock", ++ "wall_decon","door_hack","esword","blob_alert","tesla","malf_ai") ++ feedback_details += "Type: [sound_type]" + //Strange audio +- switch(rand(1,20)) +- if(1) ++ switch(sound_type) ++ if("airlock") + target.playsound_local(null,'sound/machines/airlock.ogg', 15, 1) +- if(2) ++ if("explosion") + if(prob(50)) + target.playsound_local(null,'sound/effects/explosion1.ogg', 50, 1) + else + target.playsound_local(null, 'sound/effects/explosion2.ogg', 50, 1) +- if(3) ++ if("far_explosion") + target.playsound_local(null, 'sound/effects/explosionfar.ogg', 50, 1) +- if(4) ++ if("glass") + target.playsound_local(null, pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg'), 50, 1) +- if(5) ++ if("phone") + target.playsound_local(null, 'sound/weapons/ring.ogg', 35) + sleep(15) + target.playsound_local(null, 'sound/weapons/ring.ogg', 35) + sleep(15) + target.playsound_local(null, 'sound/weapons/ring.ogg', 35) +- if(6) ++ if("summon_guns") + target.playsound_local(null, 'sound/magic/summon_guns.ogg', 50, 1) +- if(7) ++ if("alarm") + target.playsound_local(null, 'sound/machines/alarm.ogg', 100, 0) +- if(8) ++ if("beepsky") + target.playsound_local(null, 'sound/voice/bfreeze.ogg', 35, 0) +- if(9) ++ if("hallelujah") + target.playsound_local(null, 'sound/effects/pray_chaplain.ogg', 50) + //Rare audio +- if(10) ++ if("creepy") + //These sounds are (mostly) taken from Hidden: Source + var/static/list/hallucinations_creepyasssounds = list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/screech.ogg',\ + 'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\ +@@ -807,42 +841,42 @@ GLOBAL_LIST_INIT(hallucinations_major, list( + 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ + 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg') + target.playsound_local(null, pick(hallucinations_creepyasssounds), 50, 1) +- if(11) ++ if("ratvar") + target.playsound_local(null, 'sound/effects/ratvar_rises.ogg', 100) + sleep(150) + target.playsound_local(null, 'sound/effects/ratvar_reveal.ogg', 100) +- if(12) ++ if("shuttle_dock") + to_chat(target, "

Priority Announcement

") + to_chat(target, "

The Emergency Shuttle has docked with the station. You have 3 minutes to board the Emergency Shuttle.

") + target.playsound_local(null, 'sound/ai/shuttledock.ogg', 100) + //Deconstructing a wall +- if(13) ++ if("wall_decon") + target.playsound_local(null, 'sound/items/welder.ogg', 15, 1) + sleep(105) + target.playsound_local(null, 'sound/items/welder2.ogg', 15, 1) + sleep(15) + target.playsound_local(null, 'sound/items/ratchet.ogg', 15, 1) + //Hacking a door +- if(14) ++ if("door_hack") + target.playsound_local(null, 'sound/items/screwdriver.ogg', 15, 1) + sleep(rand(10,30)) + for(var/i = rand(1,3), i>0, i--) + target.playsound_local(null, 'sound/weapons/empty.ogg', 15, 1) + sleep(rand(10,30)) + target.playsound_local(null, 'sound/machines/airlockforced.ogg', 15, 1) +- if(15) ++ if("esword") + target.playsound_local(null, 'sound/weapons/saberon.ogg',35,1) +- if(16) ++ if("blob_alert") + to_chat(target, "

Biohazard Alert

") + to_chat(target, "

Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.

") + target.playsound_local(null, 'sound/ai/outbreak5.ogg', 100, 0) +- if(17) //Tesla loose! ++ if("tesla") //Tesla loose! + target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 35, 1) + sleep(20) + target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 65, 1) + sleep(20) + target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 100, 1) +- if(18) //AI is doomsdaying! ++ if("malf_ai") //AI is doomsdaying! + to_chat(target, "

Anomaly Alert

") + to_chat(target, "

Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.

") + target.playsound_local(null, 'sound/ai/aimalf.ogg', 100, 0) +@@ -854,9 +888,10 @@ GLOBAL_LIST_INIT(hallucinations_major, list( + /datum/hallucination/hudscrew/New(mob/living/carbon/T, forced = TRUE) + ..() + //Screwy HUD +- target.hal_screwyhud = pick(SCREWYHUD_CRIT,SCREWYHUD_DEAD,SCREWYHUD_HEALTHY) ++ target.set_screwyhud(pick(SCREWYHUD_CRIT,SCREWYHUD_DEAD,SCREWYHUD_HEALTHY)) ++ feedback_details += "Type: [target.hal_screwyhud]" + sleep(rand(100,250)) +- target.hal_screwyhud = SCREWYHUD_NONE ++ target.set_screwyhud(SCREWYHUD_NONE) + qdel(src) + + /datum/hallucination/fake_alert +@@ -867,6 +902,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list( + var/alert_type = pick("not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","weightless","fire","locked","hacked","temphot","tempcold","pressure") + if(specific) + alert_type = specific ++ feedback_details += "Type: [alert_type]" + switch(alert_type) + if("oxy") + target.throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy, override = TRUE) +@@ -962,6 +998,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list( + target.halitem.icon = 'icons/obj/grenade.dmi' + target.halitem.icon_state = "flashbang1" + target.halitem.name = "Flashbang" ++ feedback_details += "Type: [target.halitem.name]" + if(target.client) target.client.screen += target.halitem + QDEL_IN(target.halitem, rand(150, 350)) + qdel(src) +@@ -1006,7 +1043,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list( + /datum/hallucination/death/New(mob/living/carbon/T, forced = TRUE) + set waitfor = 0 + ..() +- target.hal_screwyhud = SCREWYHUD_DEAD ++ target.set_screwyhud(SCREWYHUD_DEAD) + target.Knockdown(300) + target.silent += 10 + var/area/area = get_area(target) +@@ -1025,7 +1062,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list( + to_chat(target, "DEAD: [fakemob.name] says, \"[pick("rip","hey [target.first_name()]","you too?","is the AI rogue?",\ + "i[prob(50)?" fucking":""] hate [pick("blood cult", "clock cult", "revenants", "abductors","double agents","viruses","badmins","you")]")]\"") + sleep(rand(70,90)) +- target.hal_screwyhud = SCREWYHUD_NONE ++ target.set_screwyhud(SCREWYHUD_NONE) + target.SetKnockdown(0) + target.silent = 0 + qdel(src) +@@ -1100,6 +1137,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list( + startlocs += T + var/turf/start = pick(startlocs) + var/proj_type = pick(subtypesof(/obj/item/projectile/hallucination)) ++ feedback_details += "Type: [proj_type]" + var/obj/item/projectile/hallucination/H = new proj_type(start) + target.playsound_local(start, H.hal_fire_sound, 60, 1) + H.hal_target = target diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 4415c0d7ab..cd5f179dd7 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -240,6 +240,12 @@ /mob/living/carbon/is_muzzled() return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) +/mob/living/carbon/hallucinating() + if(hallucination) + return TRUE + else + return FALSE + /mob/living/carbon/resist_buckle() if(restrained()) changeNext_move(CLICK_CD_BREAKOUT) @@ -811,3 +817,4 @@ .["Make AI"] = "?_src_=vars;makeai=\ref[src]" .["Modify bodypart"] = "?_src_=vars;editbodypart=\ref[src]" .["Modify organs"] = "?_src_=vars;editorgans=\ref[src]" + .["Hallucinate"] = "?_src_=vars;hallucinate=\ref[src]" diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 1d60ae4982..6bacfdd807 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -370,8 +370,7 @@ adjust_drugginess(-1) if(hallucination) - spawn handle_hallucinations() - hallucination = max(hallucination-2,0) + handle_hallucinations() //used in human and monkey handle_environment() /mob/living/carbon/proc/natural_bodytemperature_stabilization() diff --git a/code/modules/mob/living/simple_animal/guardian/types/fire.dm b/code/modules/mob/living/simple_animal/guardian/types/fire.dm index b0a8ba5215..8f456abc53 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/fire.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/fire.dm @@ -21,7 +21,7 @@ /mob/living/simple_animal/hostile/guardian/fire/AttackingTarget() . = ..() if(. && ishuman(target) && target != summoner) - new /obj/effect/hallucination/delusion(target.loc,target,"custom",200,0, icon_state,icon) + new /datum/hallucination/delusion(target,TRUE,"custom",200,0, icon_state,icon) /mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj) ..() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index a704c2e43f..46f5db920b 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -325,6 +325,9 @@ It's fairly easy to fix if dealing with single letters but not so much with comp return B.eye_blind return 0 +/mob/proc/hallucinating() + return FALSE + /proc/is_special_character(mob/M) // returns 1 for special characters and 2 for heroes of gamemode //moved out of admins.dm because things other than admin procs were calling this. if(!SSticker.HasRoundStarted()) return 0 diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 4b1d5af6c4..5a8f49f45a 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -387,3 +387,232 @@ var/obj/effect/ebeam/B = b animate(B, alpha = 0, time = 32) return ..() + +/obj/item/projectile/hallucination + name = "bullet" + icon = null + icon_state = null + hitsound = "" + suppressed = TRUE + ricochets_max = 0 + ricochet_chance = 0 + damage = 0 + nodamage = TRUE + projectile_type = /obj/item/projectile/hallucination + log_override = TRUE + var/hal_icon_state + var/image/fake_icon + var/mob/living/carbon/hal_target + var/hal_fire_sound + var/hal_hitsound + var/hal_hitsound_wall + var/hal_impact_effect + var/hal_impact_effect_wall + var/hit_duration + var/hit_duration_wall + +/obj/item/projectile/hallucination/fire() + ..() + fake_icon = image('icons/obj/projectiles.dmi', src, hal_icon_state, ABOVE_MOB_LAYER) + if(hal_target.client) + hal_target.client.images += fake_icon + +/obj/item/projectile/hallucination/Destroy() + if(hal_target.client) + hal_target.client.images -= fake_icon + QDEL_NULL(fake_icon) + return ..() + +/obj/item/projectile/hallucination/Collide(atom/A) + if(!ismob(A)) + if(hal_hitsound_wall) + hal_target.playsound_local(loc, hal_hitsound_wall, 40, 1) + if(hal_impact_effect_wall) + spawn_hit(A, TRUE) + else if(A == hal_target) + if(hal_hitsound) + hal_target.playsound_local(A, hal_hitsound, 100, 1) + target_on_hit(A) + qdel(src) + return TRUE + +/obj/item/projectile/hallucination/proc/target_on_hit(mob/M) + if(M == hal_target) + to_chat(hal_target, "[M] is hit by \a [src] in the chest!") + hal_apply_effect() + else if(M in view(hal_target)) + to_chat(hal_target, "[M] is hit by \a [src] in the chest!!") + if(damage_type == BRUTE) + var/splatter_dir = dir + if(starting) + splatter_dir = get_dir(starting, get_turf(M)) + spawn_blood(M, splatter_dir) + else if(hal_impact_effect) + spawn_hit(M, FALSE) + +/obj/item/projectile/hallucination/proc/spawn_blood(mob/M, set_dir) + set waitfor = 0 + if(!hal_target.client) + return + + var/splatter_icon_state + if(set_dir in GLOB.diagonals) + splatter_icon_state = "splatter[pick(1, 2, 6)]" + else + splatter_icon_state = "splatter[pick(3, 4, 5)]" + + var/image/blood = image('icons/effects/blood.dmi', M, splatter_icon_state, ABOVE_MOB_LAYER) + var/target_pixel_x = 0 + var/target_pixel_y = 0 + switch(set_dir) + if(NORTH) + target_pixel_y = 16 + if(SOUTH) + target_pixel_y = -16 + layer = ABOVE_MOB_LAYER + if(EAST) + target_pixel_x = 16 + if(WEST) + target_pixel_x = -16 + if(NORTHEAST) + target_pixel_x = 16 + target_pixel_y = 16 + if(NORTHWEST) + target_pixel_x = -16 + target_pixel_y = 16 + if(SOUTHEAST) + target_pixel_x = 16 + target_pixel_y = -16 + layer = ABOVE_MOB_LAYER + if(SOUTHWEST) + target_pixel_x = -16 + target_pixel_y = -16 + layer = ABOVE_MOB_LAYER + hal_target.client.images += blood + animate(blood, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = 5) + sleep(5) + hal_target.client.images -= blood + qdel(blood) + +/obj/item/projectile/hallucination/proc/spawn_hit(atom/A, is_wall) + set waitfor = 0 + if(!hal_target.client) + return + + var/image/hit_effect = image('icons/effects/blood.dmi', A, is_wall ? hal_impact_effect_wall : hal_impact_effect, ABOVE_MOB_LAYER) + hit_effect.pixel_x = A.pixel_x + rand(-4,4) + hit_effect.pixel_y = A.pixel_y + rand(-4,4) + hal_target.client.images += hit_effect + sleep(is_wall ? hit_duration_wall : hit_duration) + hal_target.client.images -= hit_effect + qdel(hit_effect) + + +/obj/item/projectile/hallucination/proc/hal_apply_effect() + return + +/obj/item/projectile/hallucination/bullet + name = "bullet" + hal_icon_state = "bullet" + hal_fire_sound = "gunshot" + hal_hitsound = 'sound/weapons/pierce.ogg' + hal_hitsound_wall = "ricochet" + hal_impact_effect = "impact_bullet" + hal_impact_effect_wall = "impact_bullet" + hit_duration = 5 + hit_duration_wall = 5 + +/obj/item/projectile/hallucination/bullet/hal_apply_effect() + hal_target.adjustStaminaLoss(60) + +/obj/item/projectile/hallucination/laser + name = "laser" + damage_type = BURN + hal_icon_state = "laser" + hal_fire_sound = 'sound/weapons/laser.ogg' + hal_hitsound = 'sound/weapons/sear.ogg' + hal_hitsound_wall = 'sound/weapons/effects/searwall.ogg' + hal_impact_effect = "impact_laser" + hal_impact_effect_wall = "impact_laser_wall" + hit_duration = 4 + hit_duration_wall = 10 + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + +/obj/item/projectile/hallucination/laser/hal_apply_effect() + hal_target.adjustStaminaLoss(20) + hal_target.blur_eyes(2) + +/obj/item/projectile/hallucination/taser + name = "electrode" + damage_type = BURN + hal_icon_state = "spark" + color = "#FFFF00" + hal_fire_sound = 'sound/weapons/taser.ogg' + hal_hitsound = 'sound/weapons/taserhit.ogg' + hal_hitsound_wall = null + hal_impact_effect = null + hal_impact_effect_wall = null + +/obj/item/projectile/hallucination/taser/hal_apply_effect() + hal_target.Knockdown(100) + hal_target.stuttering += 20 + if(hal_target.dna && hal_target.dna.check_mutation(HULK)) + hal_target.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) + else if(hal_target.status_flags & CANKNOCKDOWN) + addtimer(CALLBACK(hal_target, /mob/living/carbon.proc/do_jitter_animation, 20), 5) + +/obj/item/projectile/hallucination/disabler + name = "disabler beam" + damage_type = STAMINA + hal_icon_state = "omnilaser" + hal_fire_sound = 'sound/weapons/taser2.ogg' + hal_hitsound = 'sound/weapons/tap.ogg' + hal_hitsound_wall = 'sound/weapons/effects/searwall.ogg' + hal_impact_effect = "impact_laser_blue" + hal_impact_effect_wall = null + hit_duration = 4 + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + +/obj/item/projectile/hallucination/disabler/hal_apply_effect() + hal_target.adjustStaminaLoss(25) + +/obj/item/projectile/hallucination/ebow + name = "bolt" + damage_type = TOX + hal_icon_state = "cbbolt" + hal_fire_sound = 'sound/weapons/genhit.ogg' + hal_hitsound = null + hal_hitsound_wall = null + hal_impact_effect = null + hal_impact_effect_wall = null + +/obj/item/projectile/hallucination/ebow/hal_apply_effect() + hal_target.Knockdown(100) + hal_target.stuttering += 5 + hal_target.adjustStaminaLoss(8) + +/obj/item/projectile/hallucination/change + name = "bolt of change" + damage_type = BURN + hal_icon_state = "ice_1" + hal_fire_sound = 'sound/magic/staff_change.ogg' + hal_hitsound = null + hal_hitsound_wall = null + hal_impact_effect = null + hal_impact_effect_wall = null + +/obj/item/projectile/hallucination/change/hal_apply_effect() + new /datum/hallucination/self_delusion(hal_target, TRUE, wabbajack = FALSE) + +/obj/item/projectile/hallucination/death + name = "bolt of death" + damage_type = BURN + hal_icon_state = "pulse1_bl" + hal_fire_sound = 'sound/magic/wandodeath.ogg' + hal_hitsound = null + hal_hitsound_wall = null + hal_impact_effect = null + hal_impact_effect_wall = null + +/obj/item/projectile/hallucination/death/hal_apply_effect() + new /datum/hallucination/death(hal_target, TRUE) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 27cad406fa..3811512a02 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -101,9 +101,11 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "chem_dispenser", name, 550, 550, master_ui, state) + if(user.hallucinating()) + ui.set_autoupdate(FALSE) //to not ruin the immersion by constantly changing the fake chemicals ui.open() -/obj/machinery/chem_dispenser/ui_data() +/obj/machinery/chem_dispenser/ui_data(mob/user) var/data = list() data["amount"] = amount data["energy"] = cell.charge ? cell.charge * powerefficiency : "0" //To prevent NaN in the UI. @@ -128,10 +130,16 @@ data["beakerTransferAmounts"] = null var chemicals[0] + var/is_hallucinating = FALSE + if(user.hallucinating()) + is_hallucinating = TRUE for(var/re in dispensable_reagents) var/datum/reagent/temp = GLOB.chemical_reagents_list[re] if(temp) - chemicals.Add(list(list("title" = temp.name, "id" = temp.id))) + var/chemname = temp.name + if(is_hallucinating && prob(5)) + chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" + chemicals.Add(list(list("title" = chemname, "id" = temp.id))) data["chemicals"] = chemicals return data diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index ff44804e75..0f5f1de91d 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -290,9 +290,8 @@ //HALLUCINATE else if((findtext(message, hallucinate_words))) cooldown = COOLDOWN_MEME - for(var/V in listeners) - var/mob/living/L = V - new /obj/effect/hallucination/delusion(get_turf(L),L,null,150 * power_multiplier,0) + for(var/mob/living/carbon/C in listeners) + new /datum/hallucination/delusion(C, TRUE, null,150 * power_multiplier,0) //WAKE UP else if((findtext(message, wakeup_words))) diff --git a/strings/hallucination.json b/strings/hallucination.json new file mode 100644 index 0000000000..b28c70db4a --- /dev/null +++ b/strings/hallucination.json @@ -0,0 +1,229 @@ +{ + "suspicion": [ + "I'm watching you...", + "I know what you're doing", + "What are you hiding?", + "I saw that" + ], + + "greetings": [ + "", + "Hey, ", + "Hi ", + "Hello ", + "Wait, ", + "It's " + ], + + "getout": [ + "Get out", + "Get out!", + "Go away", + "Fuck off", + "OUT!", + "Out!" + ], + + "weird": [ + "Kchck-Chkck? Kchchck!", + "Kchckchk...", + "EEEeeeeEEEE", + "khhhhh", + "#@§*&£", + "H**p m*", + "H-hhhhh..." + ], + + "didyouhearthat": [ + "Did you hear that?", + "Did you see that?", + "What was that?" + ], + + "imatraitor": [ + "Hail Ratvar", + "Hail Nar'Sie", + "Hey, i've got some TC left, want something?", + "Viva!", + "I'll spare you if you don't tell anybody about me", + "Hey, are you a traitor too?", + "You're my target, but @pick(excuses)", + "Are you mr. @pick(ling_names)?" + ], + + "excuses": [ + "i like you, so i'll spare you", + "i don't really feel like following objectives today", + "i'm not robust enough to fight you", + "who cares", + "i'll kill you later" + ] + + "ling_names": [ + "Alpha", + "Beta", + "Gamma", + "Delta", + "Epsilon", + "Eta", + "Theta", + "Lambda", + "Mu", + "Xi", + "Rho", + "Sigma", + "Tau", + "Upsilon", + "Phi", + "Psi", + "Omega" + ] + + "doubt": [ + "Why?", + "What?", + "Wait, what?", + "Wait", + "Hold on", + "Uh..." + ], + + "aggressive": [ + "Give me that!", + "I'm going to kill you!", + "Fuck you!" + ], + + "help": [ + "HELP", + "HELP ME", + "HELP HIM", + "HELP HER", + "HELP THEM", + "HELP US", + "HELP YOURSELF" + ], + + "escape": [ + "RUN!!", + "They're behind me!", + "It's here!", + "Follow me!", + "Follow me" + ] + + "infection_advice": [ + "stay away", + "don't get close", + "be careful", + "help me", + "kill me" + ] + + "people": [ + "Captain", + "Hos", + "Cmo", + "Rd", + "Ce", + "Hop", + "Janitor", + "AI", + "Viro", + "Qm", + "[target.first_name()]" + ] + + "accusations": [ + "rogue", + "cult", + "a cultist", + "clockcult", + "a clock cultist", + "a revhead", + "a rev", + "a gang leader", + "a gangster", + "a traitor", + "a tator", + "a ling", + "a changeling" + ] + + "threat": [ + "Cult", + "Wizard", + "Blob", + "Ling", + "Ops", + "Swarmers", + "Revenant", + "Traitor", + "Harm", + "I hear flashing", + "Help" + ] + + "location": [ + "bridge", + "armory", + "sec", + "security", + "science", + "engineering", + "cargo", + "medbay", + "atmos", + "maint", + "hops office", + "captains office", + "chapel", + "library", + "tool storage", + "botany", + "kitchen", + "the ai sat" + ] + + "advice": [ + "Hmm...not sure about that.", + "Yes. You're doing the right thing.", + "No. Stop what you're doing.", + "You should be wary of that person.", + "Trust that person.", + "That person wants to kill you.", + "Kill that person. You know who.", + "You should go somewhere else. Quickly.", + "Good luck. You'll need it.", + "You have my permission. Do it." + ] + + "chemicals": [ + "Ooze", + "Fire", + "Earth", + "Lightning", + "Air", + "Magic", + "Spiders", + "Button", + "Surprise", + "Happiness", + "Despair", + "Blood", + "Awesome", + "Infinity", + "Electronics", + "Time", + "Space", + "Pain", + "Guts", + "Life", + "Death", + "Phlebotinium", + "Mana", + "Energy", + "?????" + ] + +} From 53dd97ca8aae5ef17f648262d5eb3af85064362d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 31 Jul 2017 21:25:46 -0500 Subject: [PATCH 003/230] Fixes the fruity pebbles in the code --- code/world.dm.rej | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 code/world.dm.rej diff --git a/code/world.dm.rej b/code/world.dm.rej new file mode 100644 index 0000000000..cde7698a21 --- /dev/null +++ b/code/world.dm.rej @@ -0,0 +1,10 @@ +diff a/code/world.dm b/code/world.dm (rejected hunks) +@@ -59,7 +59,7 @@ + if(config.sql_enabled) + if(SSdbcore.Connect()) + log_world("Database connection established.") +- var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_version")] ORDER BY date DESC LIMIT 1") ++ var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_revision")] ORDER BY date DESC LIMIT 1") + query_db_version.Execute() + if(query_db_version.NextRow()) + var/db_major = query_db_version.item[1] From a2e487c86ed5b556d2655ccf7fad86aa0014ce3b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 1 Aug 2017 16:59:50 -0500 Subject: [PATCH 004/230] Makes GetComponent() faster using typecache magic --- code/__HELPERS/type2type.dm | 15 +++++++++++++++ code/datums/components/component.dm.rej | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 code/datums/components/component.dm.rej diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 36a81e90e2..7df96c3da2 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -537,3 +537,18 @@ if(!istype(the_matrix) || the_matrix.len != 20) return "#ffffffff" return rgb(the_matrix[1]*255, the_matrix[6]*255, the_matrix[11]*255, the_matrix[16]*255) + +/proc/type2parent(child) + var/string_type = "[child]" + var/last_slash = findlasttext(string_type, "/") + if(last_slash == 1) + switch(child) + if(/datum) + return null + if(/obj || /mob) + return /atom/movable + if(/area || /turf) + return /atom + else + return /datum + return text2path(copytext(string_type, 1, last_slash)) \ No newline at end of file diff --git a/code/datums/components/component.dm.rej b/code/datums/components/component.dm.rej new file mode 100644 index 0000000000..7d216a39c5 --- /dev/null +++ b/code/datums/components/component.dm.rej @@ -0,0 +1,18 @@ +diff a/code/datums/components/component.dm b/code/datums/components/component.dm (rejected hunks) +@@ -22,8 +22,7 @@ + //lazy init the parent's dc list + var/list/dc = P.datum_components + if(!dc) +- dc = list() +- P.datum_components = dc ++ P.datum_components = dc = list() + + //set up the typecache + var/our_type = type +@@ -179,4 +178,4 @@ + helicopter.SendSignal(COMSIG_COMPONENT_REMOVING, C) + C.OnTransfer(src) + C.parent = src +- SendSignal(COMSIG_COMPONENT_ADDED, C) +\ No newline at end of file ++ SendSignal(COMSIG_COMPONENT_ADDED, C) From 468b14a01139e397f6482e198c3935ad5c3c11d8 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Wed, 2 Aug 2017 06:04:43 -0500 Subject: [PATCH 005/230] Update component.dm --- code/datums/components/component.dm | 168 +++++++++++++++++++++------- 1 file changed, 126 insertions(+), 42 deletions(-) diff --git a/code/datums/components/component.dm b/code/datums/components/component.dm index b9212d2786..5e25a581f8 100644 --- a/code/datums/components/component.dm +++ b/code/datums/components/component.dm @@ -1,8 +1,8 @@ /datum/component - var/enabled = TRUE // Enables or disables the components - var/dupe_mode = COMPONENT_DUPE_HIGHLANDER // How components of the same type are handled in the same parent - var/list/signal_procs // list of signals -> callbacks - var/datum/parent // parent datum + var/enabled = TRUE + var/dupe_mode = COMPONENT_DUPE_HIGHLANDER + var/list/signal_procs + var/datum/parent /datum/component/New(datum/P, ...) var/dm = dupe_mode @@ -11,26 +11,78 @@ if(old) switch(dm) if(COMPONENT_DUPE_HIGHLANDER) - P.RemoveComponent(old) - old = null //in case SendSignal() blocks + InheritComponent(old, FALSE) + qdel(old) if(COMPONENT_DUPE_UNIQUE) + old.InheritComponent(src, TRUE) qdel(src) return - P.SendSignal(COMSIG_COMPONENT_ADDED, list(src), FALSE) - LAZYADD(P.datum_components, src) + P.SendSignal(COMSIG_COMPONENT_ADDED, src) + + //lazy init the parent's dc list + var/list/dc = P.datum_components + if(!dc) + P.datum_components = dc = list() + + //set up the typecache + var/our_type = type + for(var/I in _GetInverseTypeListExceptRoot(our_type)) + var/test = dc[I] + if(test) //already another component of this type here + var/list/components_of_type + if(!islist(test)) + components_of_type = list(test) + dc[I] = components_of_type + else + components_of_type = test + if(I == our_type) //exact match, take priority + var/inserted = FALSE + for(var/J in 1 to components_of_type.len) + var/datum/component/C = components_of_type[J] + if(C.type != our_type) //but not over other exact matches + components_of_type.Insert(J, I) + inserted = TRUE + break + if(!inserted) + components_of_type += src + else //indirect match, back of the line with ya + components_of_type += src + else //only component of this type, no list + dc[I] = src + parent = P /datum/component/Destroy() - RemoveNoSignal() - return ..() - -/datum/component/proc/RemoveNoSignal() + enabled = FALSE var/datum/P = parent if(P) - LAZYREMOVE(P.datum_components, src) + _RemoveNoSignal() + P.SendSignal(COMSIG_COMPONENT_REMOVING, src) + LAZYCLEARLIST(signal_procs) + return ..() + +/datum/component/proc/_RemoveNoSignal() + var/datum/P = parent + if(P) + var/list/dc = P.datum_components + var/our_type = type + for(var/I in _GetInverseTypeListExceptRoot(our_type)) + var/list/components_of_type = dc[I] + if(islist(components_of_type)) // + var/list/subtracted = components_of_type - src + if(subtracted.len == 1) //only 1 guy left + dc[I] = subtracted[1] //make him special + else + dc[I] = subtracted + else //just us + dc -= I + if(!dc.len) + P.datum_components = null parent = null /datum/component/proc/RegisterSignal(sig_type, proc_on_self, override = FALSE) + if(QDELETED(src)) + return var/list/procs = signal_procs if(!procs) procs = list() @@ -43,45 +95,71 @@ procs[sig_type] = CALLBACK(src, proc_on_self) -/datum/var/list/datum_components //list of /datum/component +/datum/component/proc/ReceiveSignal(sigtype, ...) + var/list/sps = signal_procs + var/datum/callback/CB = LAZYACCESS(sps, sigtype) + if(!CB) + return FALSE + var/list/arguments = args.Copy() + arguments.Cut(1, 2) + return CB.InvokeAsync(arglist(arguments)) -// Send a signal to all other components in the container. -/datum/proc/SendSignal(sigtype, list/sig_args, async = FALSE) +/datum/component/proc/InheritComponent(datum/component/C, i_am_original) + return + +/datum/component/proc/OnTransfer(datum/new_parent) + return + +/datum/component/proc/_GetInverseTypeListExceptRoot(our_type_cached) + var/datum/component/current_type = our_type_cached + . = list() + while (current_type != /datum/component) + . += current_type + current_type = type2parent(current_type) + +/datum/var/list/datum_components //special typecache of /datum/component + +/datum/proc/SendSignal(sigtype, ...) var/list/comps = datum_components . = FALSE for(var/I in comps) var/datum/component/C = I if(!C.enabled) continue - var/list/sps = C.signal_procs - var/datum/callback/CB = LAZYACCESS(sps, sigtype) - if(!CB) - continue - if(!async) - . |= CB.Invoke(sig_args) - else - . |= CB.InvokeAsync(sig_args) + if(C.ReceiveSignal(arglist(args))) + ComponentActivated(C) + . = TRUE + +/datum/proc/ComponentActivated(datum/component/C) + return /datum/proc/GetComponent(c_type) - for(var/I in datum_components) - if(istype(I, c_type)) - return I + var/list/dc = datum_components + if(!dc) + return null + . = dc[c_type] + if(islist(.)) + return .[1] /datum/proc/GetExactComponent(c_type) - for(var/I in datum_components) - var/datum/component/C = I + var/list/dc = datum_components + if(!dc) + return null + var/datum/component/C = dc[c_type] + if(C) + if(islist(C)) + C = C[1] if(C.type == c_type) - return I + return C + return null /datum/proc/GetComponents(c_type) - . = list() - for(var/I in datum_components) - if(istype(I, c_type)) - . += I - -/datum/proc/AddComponents(list/new_types) - for(var/new_type in new_types) - AddComponent(new_type) + var/list/dc = datum_components + if(!dc) + return null + . = dc[c_type] + if(!islist(.)) + return list(.) /datum/proc/AddComponent(new_type, ...) var/nt = new_type @@ -89,9 +167,15 @@ var/datum/component/C = new nt(arglist(args)) return QDELING(C) ? GetComponent(new_type) : C -/datum/proc/RemoveComponent(datum/component/C) +/datum/proc/TakeComponent(datum/component/C) if(!C) return - C.RemoveNoSignal() - SendSignal(COMSIG_COMPONENT_REMOVING, list(C), FALSE) - qdel(C) + var/datum/helicopter = C.parent + if(helicopter == src) + //wat + return + C._RemoveNoSignal() + helicopter.SendSignal(COMSIG_COMPONENT_REMOVING, C) + C.OnTransfer(src) + C.parent = src + SendSignal(COMSIG_COMPONENT_ADDED, C) From 89e29a036cef4c545e8397cd1f5c8d8f941da69d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 2 Aug 2017 08:52:47 -0500 Subject: [PATCH 006/230] Action buttons for spells now include their description --- code/datums/action.dm | 3 ++- code/datums/action.dm.rej | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 code/datums/action.dm.rej diff --git a/code/datums/action.dm b/code/datums/action.dm index c8385c9ed3..a1048b86bf 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -168,7 +168,7 @@ /datum/action/item_action/toggle_firemode name = "Toggle Firemode" - + /datum/action/item_action/rcl name = "Change Cable Color" button_icon_state = "rcl_rainbow" @@ -482,6 +482,7 @@ var/obj/effect/proc_holder/spell/S = target S.action = src name = S.name + desc = S.desc button_icon = S.action_icon button_icon_state = S.action_icon_state background_icon_state = S.action_background_icon_state diff --git a/code/datums/action.dm.rej b/code/datums/action.dm.rej new file mode 100644 index 0000000000..5be10bbb99 --- /dev/null +++ b/code/datums/action.dm.rej @@ -0,0 +1,9 @@ +diff a/code/datums/action.dm b/code/datums/action.dm (rejected hunks) +@@ -491,7 +491,6 @@ + S.action = src + name = S.name + desc = S.desc +- button_icon = S.action_icon + icon_icon = S.action_icon + button_icon_state = S.action_icon_state + background_icon_state = S.action_background_icon_state From 0ec200f540aa957002ca18a5f6fc81d00ac52ac0 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Thu, 3 Aug 2017 06:11:26 -0700 Subject: [PATCH 007/230] Delete action.dm.rej --- code/datums/action.dm.rej | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 code/datums/action.dm.rej diff --git a/code/datums/action.dm.rej b/code/datums/action.dm.rej deleted file mode 100644 index 5be10bbb99..0000000000 --- a/code/datums/action.dm.rej +++ /dev/null @@ -1,9 +0,0 @@ -diff a/code/datums/action.dm b/code/datums/action.dm (rejected hunks) -@@ -491,7 +491,6 @@ - S.action = src - name = S.name - desc = S.desc -- button_icon = S.action_icon - icon_icon = S.action_icon - button_icon_state = S.action_icon_state - background_icon_state = S.action_background_icon_state From ac86f2735a3f25f296eab18e9543827032780402 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 09:33:07 -0500 Subject: [PATCH 008/230] flora.dm initialize hint --- code/game/objects/structures/flora.dm | 56 +++++++++++------------ code/game/objects/structures/flora.dm.rej | 28 ++++++++++++ 2 files changed, 56 insertions(+), 28 deletions(-) create mode 100644 code/game/objects/structures/flora.dm.rej diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index e478ff5d92..76b1462304 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -45,14 +45,14 @@ /obj/structure/flora/tree/pine/Initialize() icon_state = "pine_[rand(1, 3)]" - ..() + . = ..() /obj/structure/flora/tree/pine/xmas name = "xmas tree" icon_state = "pine_c" /obj/structure/flora/tree/pine/xmas/Initialize() - ..() + . = ..() icon_state = "pine_c" /obj/structure/flora/tree/dead @@ -64,7 +64,7 @@ icon_state = "palm1" /obj/structure/flora/tree/palm/Initialize() - ..() + . = ..() icon_state = pick("palm1","palm2") pixel_x = 0 @@ -76,7 +76,7 @@ /obj/structure/flora/tree/dead/Initialize() icon_state = "tree_[rand(1, 6)]" - ..() + . = ..() /obj/structure/flora/tree/jungle name = "tree" @@ -106,7 +106,7 @@ /obj/structure/flora/grass/brown/Initialize() icon_state = "snowgrass[rand(1, 3)]bb" - ..() + . = ..() /obj/structure/flora/grass/green @@ -114,14 +114,14 @@ /obj/structure/flora/grass/green/Initialize() icon_state = "snowgrass[rand(1, 3)]gb" - ..() + . = ..() /obj/structure/flora/grass/both icon_state = "snowgrassall1" /obj/structure/flora/grass/both/Initialize() icon_state = "snowgrassall[rand(1, 3)]" - ..() + . = ..() //bushes @@ -133,7 +133,7 @@ /obj/structure/flora/bush/Initialize() icon_state = "snowbush[rand(1, 6)]" - ..() + . = ..() //newbushes @@ -145,112 +145,112 @@ /obj/structure/flora/ausbushes/Initialize() if(icon_state == "firstbush_1") icon_state = "firstbush_[rand(1, 4)]" - ..() + . = ..() /obj/structure/flora/ausbushes/reedbush icon_state = "reedbush_1" /obj/structure/flora/ausbushes/reedbush/Initialize() icon_state = "reedbush_[rand(1, 4)]" - ..() + . = ..() /obj/structure/flora/ausbushes/leafybush icon_state = "leafybush_1" /obj/structure/flora/ausbushes/leafybush/Initialize() icon_state = "leafybush_[rand(1, 3)]" - ..() + . = ..() /obj/structure/flora/ausbushes/palebush icon_state = "palebush_1" /obj/structure/flora/ausbushes/palebush/Initialize() icon_state = "palebush_[rand(1, 4)]" - ..() + . = ..() /obj/structure/flora/ausbushes/stalkybush icon_state = "stalkybush_1" /obj/structure/flora/ausbushes/stalkybush/Initialize() icon_state = "stalkybush_[rand(1, 3)]" - ..() + . = ..() /obj/structure/flora/ausbushes/grassybush icon_state = "grassybush_1" /obj/structure/flora/ausbushes/grassybush/Initialize() icon_state = "grassybush_[rand(1, 4)]" - ..() + . = ..() /obj/structure/flora/ausbushes/fernybush icon_state = "fernybush_1" /obj/structure/flora/ausbushes/fernybush/Initialize() icon_state = "fernybush_[rand(1, 3)]" - ..() + . = ..() /obj/structure/flora/ausbushes/sunnybush icon_state = "sunnybush_1" /obj/structure/flora/ausbushes/sunnybush/Initialize() icon_state = "sunnybush_[rand(1, 3)]" - ..() + . = ..() /obj/structure/flora/ausbushes/genericbush icon_state = "genericbush_1" /obj/structure/flora/ausbushes/genericbush/Initialize() icon_state = "genericbush_[rand(1, 4)]" - ..() + . = ..() /obj/structure/flora/ausbushes/pointybush icon_state = "pointybush_1" /obj/structure/flora/ausbushes/pointybush/Initialize() icon_state = "pointybush_[rand(1, 4)]" - ..() + . = ..() /obj/structure/flora/ausbushes/lavendergrass icon_state = "lavendergrass_1" /obj/structure/flora/ausbushes/lavendergrass/Initialize() icon_state = "lavendergrass_[rand(1, 4)]" - ..() + . = ..() /obj/structure/flora/ausbushes/ywflowers icon_state = "ywflowers_1" /obj/structure/flora/ausbushes/ywflowers/Initialize() icon_state = "ywflowers_[rand(1, 3)]" - ..() + . = ..() /obj/structure/flora/ausbushes/brflowers icon_state = "brflowers_1" /obj/structure/flora/ausbushes/brflowers/Initialize() icon_state = "brflowers_[rand(1, 3)]" - ..() + . = ..() /obj/structure/flora/ausbushes/ppflowers icon_state = "ppflowers_1" /obj/structure/flora/ausbushes/ppflowers/Initialize() icon_state = "ppflowers_[rand(1, 3)]" - ..() + . = ..() /obj/structure/flora/ausbushes/sparsegrass icon_state = "sparsegrass_1" /obj/structure/flora/ausbushes/sparsegrass/Initialize() icon_state = "sparsegrass_[rand(1, 3)]" - ..() + . = ..() /obj/structure/flora/ausbushes/fullgrass icon_state = "fullgrass_1" /obj/structure/flora/ausbushes/fullgrass/Initialize() icon_state = "fullgrass_[rand(1, 3)]" - ..() + . = ..() /obj/item/weapon/twohanded/required/kirbyplants name = "potted plant" @@ -319,7 +319,7 @@ desc = "A pile of rocks" /obj/structure/flora/rock/pile/Initialize() - ..() + . = ..() icon_state = "[icon_state][rand(1,3)]" //Jungle grass @@ -333,7 +333,7 @@ /obj/structure/flora/grass/jungle/Initialize() icon_state = "[icon_state][rand(1, 5)]" - ..() + . = ..() /obj/structure/flora/grass/jungle/b icon_state = "grassb" @@ -348,7 +348,7 @@ density = FALSE /obj/structure/flora/rock/jungle/Initialize() - ..() + . = ..() icon_state = "[initial(icon_state)][rand(1,5)]" @@ -361,7 +361,7 @@ /obj/structure/flora/junglebush/Initialize() icon_state = "[icon_state][rand(1, 3)]" - ..() + . = ..() /obj/structure/flora/junglebush/b icon_state = "bushb" diff --git a/code/game/objects/structures/flora.dm.rej b/code/game/objects/structures/flora.dm.rej new file mode 100644 index 0000000000..8257ec2122 --- /dev/null +++ b/code/game/objects/structures/flora.dm.rej @@ -0,0 +1,28 @@ +diff a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm (rejected hunks) +@@ -89,7 +89,7 @@ + + /obj/structure/flora/tree/jungle/Initialize() + icon_state = "[icon_state][rand(1, 6)]" +- ..() ++ . = ..() + + //grass + /obj/structure/flora/grass +@@ -307,7 +307,7 @@ + density = 1 + + /obj/structure/flora/rock/Initialize() +- ..() ++ . = ..() + icon_state = "[icon_state][rand(1,3)]" + + /obj/structure/flora/rock/pile +@@ -381,5 +381,5 @@ + pixel_y = -16 + + /obj/structure/flora/rock/pile/largejungle/Initialize() +- ..() +- icon_state = "[initial(icon_state)][rand(1,3)]" +\ No newline at end of file ++ . = ..() ++ icon_state = "[initial(icon_state)][rand(1,3)]" From 9449004c36ba26ef90d427876e1ec1408ee143d1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:41:04 -0500 Subject: [PATCH 009/230] Gives an initialize hint to stacks, boxes, closets and bots (#2256) --- code/game/objects/items/stacks/stack.dm | 2 +- code/game/objects/items/weapons/storage/boxes.dm | 2 +- code/game/objects/structures/crates_lockers/closets.dm | 2 +- code/modules/mob/living/simple_animal/bot/bot.dm | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index fe6a1df03e..e441d01904 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -22,7 +22,7 @@ var/novariants = TRUE //Determines whether the item should update it's sprites based on amount. /obj/item/stack/Initialize(mapload, new_amount=null , merge = TRUE) - ..() + . = ..() if(new_amount) amount = new_amount if(!merge_type) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 94a935498b..d59cab0853 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -33,7 +33,7 @@ var/illustration = "writing" /obj/item/weapon/storage/box/Initialize(mapload) - ..() + . = ..() update_icon() /obj/item/weapon/storage/box/update_icon() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 17d6b7bf24..1babf2b407 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -38,7 +38,7 @@ /obj/structure/closet/Initialize(mapload) if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents addtimer(CALLBACK(src, .proc/take_contents), 0) - ..() + . = ..() update_icon() PopulateContents() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 4cc0ab3a62..59cb793b27 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -116,7 +116,7 @@ update_icon() /mob/living/simple_animal/bot/Initialize() - ..() + . = ..() access_card = new /obj/item/weapon/card/id(src) //This access is so bots can be immediately set to patrol and leave Robotics, instead of having to be let out first. access_card.access += ACCESS_ROBOTICS From 7f8249535ba8459ea43b69cb055a36e5565c15d4 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:41:20 -0500 Subject: [PATCH 010/230] Fixes Initialize errors for type /mob/living/simple_animal/butterfly (#2257) --- code/modules/mob/living/simple_animal/friendly/butterfly.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm index 0c153d37e2..07222ade05 100644 --- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm +++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm @@ -25,6 +25,6 @@ verb_yell = "flutters intensely" /mob/living/simple_animal/butterfly/Initialize() - ..() + . = ..() var/newcolor = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) - add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) \ No newline at end of file + add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) From 402c4f70ca922fa99eacb88de4b79ab0018b2863 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:41:28 -0500 Subject: [PATCH 011/230] Fixes Initialize errors for type /mob/living/simple_animal/parrot (#2258) --- code/modules/mob/living/simple_animal/parrot.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 5080a9db8a..86bbcfdc45 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -101,7 +101,7 @@ /mob/living/simple_animal/parrot/Initialize() - ..() + . = ..() if(!ears) var/headset = pick(/obj/item/device/radio/headset/headset_sec, \ /obj/item/device/radio/headset/headset_eng, \ From 6ac81231172a04e68440b7fb459a3090788fbf00 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:41:33 -0500 Subject: [PATCH 012/230] Fixes goonchat on ie8 (#2259) --- code/modules/goonchat/browserassets/js/browserOutput.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js index 0df1c9a44e..59b152ab3b 100644 --- a/code/modules/goonchat/browserassets/js/browserOutput.js +++ b/code/modules/goonchat/browserassets/js/browserOutput.js @@ -133,7 +133,8 @@ function highlightTerms(el) { newWord = words[w].replace("<", "<").replace(new RegExp(opts.highlightTerms[i], 'gi'), addHighlightMarkup); break; } - console.log(newWord) + if (window.console) + console.log(newWord) } newText += newWord || words[w].replace("<", "<"); newText += w >= words.length ? '' : ' '; @@ -874,4 +875,4 @@ $(function() { } $('#userBar').show(); opts.priorChatHeight = $(window).height(); -}); \ No newline at end of file +}); From ef715b78379377c0ccc65eb057f419f827b53a85 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:41:52 -0500 Subject: [PATCH 013/230] Removes all checks for subsystem existence (#2252) --- code/controllers/subsystem/garbage.dm | 13 +++--- code/controllers/subsystem/job.dm | 5 +-- code/datums/mind.dm | 5 +-- code/game/gamemodes/blob/overmind.dm | 2 +- code/game/gamemodes/game_mode.dm | 2 +- code/game/gamemodes/meteor/meteors.dm | 3 +- code/game/gamemodes/objective.dm | 21 +++++---- code/game/machinery/airlock_control.dm | 3 +- code/game/machinery/computer/atmos_alert.dm | 3 +- code/game/machinery/computer/atmos_control.dm | 6 +-- code/game/machinery/doors/alarmlock.dm | 3 +- .../embedded_controller_base.dm | 3 +- code/game/machinery/magnet.dm | 12 ++--- code/game/machinery/status_display.dm | 3 +- .../effects/effect_system/effect_system.dm | 6 +-- code/game/objects/items/devices/PDA/radio.dm | 3 +- .../items/devices/radio/electropack.dm | 3 +- code/game/objects/structures.dm | 6 +-- code/game/turfs/turf.dm | 3 +- code/modules/admin/admin.dm | 45 +++++++++---------- code/modules/admin/secrets.dm | 17 ++++--- .../admin/verbs/reestablish_db_connection.dm | 2 +- code/modules/assembly/signaler.dm | 3 +- .../atmospherics/machinery/airalarm.dm | 3 +- .../components/binary_devices/dp_vent_pump.dm | 3 +- .../components/binary_devices/passive_gate.dm | 3 +- .../components/binary_devices/pump.dm | 3 +- .../components/binary_devices/volume_pump.dm | 3 +- .../components/trinary_devices/filter.dm | 3 +- .../unary_devices/outlet_injector.dm | 3 +- .../components/unary_devices/vent_pump.dm | 3 +- .../components/unary_devices/vent_scrubber.dm | 3 +- code/modules/events/immovable_rod.dm | 3 +- code/modules/holiday/holidays.dm | 9 ++-- .../jobs/job_types/civilian_chaplain.dm | 8 ++-- .../modules/mob/dead/new_player/new_player.dm | 25 +++++------ code/modules/mob/dead/observer/observer.dm | 3 +- code/modules/mob/living/carbon/death.dm | 2 +- .../mob/living/simple_animal/slime/death.dm | 2 +- code/modules/power/singularity/emitter.dm | 2 +- code/modules/power/smes.dm | 2 +- code/world.dm | 11 ++--- 42 files changed, 109 insertions(+), 157 deletions(-) diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 55132cba28..ebc1ad9474 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -283,13 +283,12 @@ SUBSYSTEM_DEF(garbage) /client/verb/purge_all_destroyed_objects() set category = "Debug" - if(SSgarbage) - while(SSgarbage.queue.len) - var/datum/o = locate(SSgarbage.queue[1]) - if(istype(o) && o.gc_destroyed) - del(o) - SSgarbage.totaldels++ - SSgarbage.queue.Cut(1, 2) + while(SSgarbage.queue.len) + var/datum/o = locate(SSgarbage.queue[1]) + if(istype(o) && o.gc_destroyed) + del(o) + SSgarbage.totaldels++ + SSgarbage.queue.Cut(1, 2) /datum/verb/qdel_then_find_references() set category = "Debug" diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 731166e0a9..f28373ef22 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -217,10 +217,9 @@ SUBSYSTEM_DEF(job) Debug("Running DO") //Holder for Triumvirate is stored in the SSticker, this just processes it - if(SSticker) + if(SSticker.triai) for(var/datum/job/ai/A in occupations) - if(SSticker.triai) - A.spawn_positions = 3 + A.spawn_positions = 3 //Get the players who are ready for(var/mob/dead/new_player/player in GLOB.player_list) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 4ee6725e2f..3515440499 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1690,10 +1690,7 @@ else mind = new /datum/mind(key) - if(SSticker) - SSticker.minds += mind - else - stack_trace("mind_initialize(): No SSticker ready") + SSticker.minds += mind if(!mind.name) mind.name = real_name mind.current = src diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index bf7ae55167..7fa09f3978 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -151,7 +151,7 @@ if(blob_core) stat(null, "Core Health: [blob_core.obj_integrity]") stat(null, "Power Stored: [blob_points]/[max_blob_points]") - if(SSticker && istype(SSticker.mode, /datum/game_mode/blob)) + if(istype(SSticker.mode, /datum/game_mode/blob)) var/datum/game_mode/blob/B = SSticker.mode stat(null, "Blobs to Win: [GLOB.blobs_legit.len]/[B.blobwincount]") else diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 057f9ee34a..f6fef13305 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -83,7 +83,7 @@ if(SSdbcore.Connect()) var/sql - if(SSticker && SSticker.mode) + if(SSticker.mode) sql += "game_mode = '[SSticker.mode]'" if(GLOB.revdata.originmastercommit) if(sql) diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 65ea714761..18daea8b31 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -125,8 +125,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event /obj/effect/meteor/New() ..() GLOB.meteor_list += src - if(SSaugury) - SSaugury.register_doom(src, threat) + SSaugury.register_doom(src, threat) SpinAnimation() QDEL_IN(src, lifetime) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 576447c540..c74f67c820 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -623,17 +623,16 @@ GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/absorb/proc/gen_amount_goal(lowbound = 4, highbound = 6) target_amount = rand (lowbound,highbound) - if (SSticker) - var/n_p = 1 //autowin - if (SSticker.current_state == GAME_STATE_SETTING_UP) - for(var/mob/dead/new_player/P in GLOB.player_list) - if(P.client && P.ready == PLAYER_READY_TO_PLAY && P.mind!=owner) - n_p ++ - else if (SSticker.IsRoundInProgress()) - for(var/mob/living/carbon/human/P in GLOB.player_list) - if(P.client && !(P.mind in SSticker.mode.changelings) && P.mind!=owner) - n_p ++ - target_amount = min(target_amount, n_p) + var/n_p = 1 //autowin + if (SSticker.current_state == GAME_STATE_SETTING_UP) + for(var/mob/dead/new_player/P in GLOB.player_list) + if(P.client && P.ready == PLAYER_READY_TO_PLAY && P.mind!=owner) + n_p ++ + else if (SSticker.IsRoundInProgress()) + for(var/mob/living/carbon/human/P in GLOB.player_list) + if(P.client && !(P.mind in SSticker.mode.changelings) && P.mind!=owner) + n_p ++ + target_amount = min(target_amount, n_p) explanation_text = "Extract [target_amount] compatible genome\s." return target_amount diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index a363a7fa51..69ccb4240a 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -147,6 +147,5 @@ set_frequency(frequency) /obj/machinery/airlock_sensor/Destroy() - if(SSradio) - SSradio.remove_object(src,frequency) + SSradio.remove_object(src,frequency) return ..() \ No newline at end of file diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index bcabab16f9..1c28251299 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -16,8 +16,7 @@ set_frequency(receive_frequency) /obj/machinery/computer/atmos_alert/Destroy() - if(SSradio) - SSradio.remove_object(src, receive_frequency) + SSradio.remove_object(src, receive_frequency) return ..() /obj/machinery/computer/atmos_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index 2b506d6124..381b4b3e55 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -52,8 +52,7 @@ /obj/machinery/air_sensor/Destroy() SSair.atmos_machinery -= src - if(SSradio) - SSradio.remove_object(src, frequency) + SSradio.remove_object(src, frequency) return ..() ///////////////////////////////////////////////////////////// @@ -89,8 +88,7 @@ set_frequency(frequency) /obj/machinery/computer/atmos_control/Destroy() - if(SSradio) - SSradio.remove_object(src, frequency) + SSradio.remove_object(src, frequency) return ..() /obj/machinery/computer/atmos_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm index 3ecd9cbfda..4a92c935b4 100644 --- a/code/game/machinery/doors/alarmlock.dm +++ b/code/game/machinery/doors/alarmlock.dm @@ -16,8 +16,7 @@ air_connection = new /obj/machinery/door/airlock/alarmlock/Destroy() - if(SSradio) - SSradio.remove_object(src,air_frequency) + SSradio.remove_object(src,air_frequency) air_connection = null return ..() diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 48ef992615..3c6f0ad13a 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -73,8 +73,7 @@ var/datum/radio_frequency/radio_connection /obj/machinery/embedded_controller/radio/Destroy() - if(SSradio) - SSradio.remove_object(src,frequency) + SSradio.remove_object(src,frequency) return ..() /obj/machinery/embedded_controller/radio/Initialize() diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 6f5224ad76..21e0590a4b 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -36,15 +36,13 @@ center = T spawn(10) // must wait for map loading to finish - if(SSradio) - SSradio.add_object(src, freq, GLOB.RADIO_MAGNETS) + SSradio.add_object(src, freq, GLOB.RADIO_MAGNETS) spawn() magnetic_process() /obj/machinery/magnetic_module/Destroy() - if(SSradio) - SSradio.remove_object(src, freq) + SSradio.remove_object(src, freq) . = ..() center = null @@ -228,16 +226,14 @@ spawn(45) // must wait for map loading to finish - if(SSradio) - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_MAGNETS) + radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_MAGNETS) if(path) // check for default path filter_path() // renders rpath /obj/machinery/magnetic_controller/Destroy() - if(SSradio) - SSradio.remove_object(src, frequency) + SSradio.remove_object(src, frequency) magnets = null rpath = null . = ..() diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index e7613bbe62..4cfc6809cc 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -50,8 +50,7 @@ SSradio.add_object(src, frequency) /obj/machinery/status_display/Destroy() - if(SSradio) - SSradio.remove_object(src,frequency) + SSradio.remove_object(src,frequency) GLOB.ai_status_displays.Remove(src) return ..() diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm index 630114d41a..6c841080d5 100644 --- a/code/game/objects/effects/effect_system/effect_system.dm +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -13,12 +13,10 @@ would spawn and follow the beaker, even if it is carried or thrown. /obj/effect/particle_effect/New() ..() - if(SSticker) - GLOB.cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) /obj/effect/particle_effect/Destroy() - if(SSticker) - GLOB.cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) . = ..() /datum/effect_system diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index d1f6cff85d..f6bfa50ce4 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -25,8 +25,7 @@ var/datum/radio_frequency/radio_connection /obj/item/radio/integrated/signal/Destroy() - if(SSradio) - SSradio.remove_object(src, frequency) + SSradio.remove_object(src, frequency) radio_connection = null return ..() diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 891a4027a0..a69c610b2a 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -24,8 +24,7 @@ SSradio.add_object(src, frequency, GLOB.RADIO_CHAT) /obj/item/device/electropack/Destroy() - if(SSradio) - SSradio.remove_object(src, frequency) + SSradio.remove_object(src, frequency) return ..() /obj/item/device/electropack/attack_hand(mob/user) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index facab21cc0..b1103ac1da 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -16,12 +16,10 @@ queue_smooth(src) queue_smooth_neighbors(src) icon_state = "" - if(SSticker) - GLOB.cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) /obj/structure/Destroy() - if(SSticker) - GLOB.cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) if(smooth) queue_smooth_neighbors(src) return ..() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index a63066709a..a75823701a 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -373,8 +373,7 @@ return can_have_cabling() & !intact /turf/proc/visibilityChanged() - if(SSticker) - GLOB.cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) /turf/proc/burn_tile() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index b5f2bc750e..7c20421d3c 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -735,34 +735,33 @@ var/dat = "Manage Free Slots" var/count = 0 - if(SSticker && !SSticker.mode) + if(!SSticker.HasRoundStarted()) alert(usr, "You cannot manage jobs before the round starts!") return - if(SSjob) - for(var/datum/job/job in SSjob.occupations) - count++ - var/J_title = html_encode(job.title) - var/J_opPos = html_encode(job.total_positions - (job.total_positions - job.current_positions)) - var/J_totPos = html_encode(job.total_positions) - if(job.total_positions < 0) - dat += "[J_title]: [J_opPos] (unlimited)" - else - dat += "[J_title]: [J_opPos]/[J_totPos]" + for(var/datum/job/job in SSjob.occupations) + count++ + var/J_title = html_encode(job.title) + var/J_opPos = html_encode(job.total_positions - (job.total_positions - job.current_positions)) + var/J_totPos = html_encode(job.total_positions) + if(job.total_positions < 0) + dat += "[J_title]: [J_opPos] (unlimited)" + else + dat += "[J_title]: [J_opPos]/[J_totPos]" - if(job.title == "AI" || job.title == "Cyborg") - dat += " (Cannot Late Join)
" - continue - if(job.total_positions >= 0) - dat += " Add | " - if(job.total_positions > job.current_positions) - dat += "Remove | " - else - dat += "Remove | " - dat += "Unlimit" + if(job.title == "AI" || job.title == "Cyborg") + dat += " (Cannot Late Join)
" + continue + if(job.total_positions >= 0) + dat += " Add | " + if(job.total_positions > job.current_positions) + dat += "Remove | " else - dat += " Limit" - dat += "
" + dat += "Remove | " + dat += "Unlimit" + else + dat += " Limit" + dat += "
" dat += "" var/winheight = 100 + (count * 20) diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 95e7c9a904..2b844d40b4 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -105,15 +105,14 @@ if("list_job_debug") var/dat = "Job Debug info.
" - if(SSjob) - for(var/line in SSjob.job_debug) - dat += "[line]
" - dat+= "*******

" - for(var/datum/job/job in SSjob.occupations) - if(!job) - continue - dat += "job: [job.title], current_positions: [job.current_positions], total_positions: [job.total_positions]
" - usr << browse(dat, "window=jobdebug;size=600x500") + for(var/line in SSjob.job_debug) + dat += "[line]
" + dat+= "*******

" + for(var/datum/job/job in SSjob.occupations) + if(!job) + continue + dat += "job: [job.title], current_positions: [job.current_positions], total_positions: [job.total_positions]
" + usr << browse(dat, "window=jobdebug;size=600x500") if("show_admins") var/dat = "Current admins:
" diff --git a/code/modules/admin/verbs/reestablish_db_connection.dm b/code/modules/admin/verbs/reestablish_db_connection.dm index 133a39185e..3578e98b1b 100644 --- a/code/modules/admin/verbs/reestablish_db_connection.dm +++ b/code/modules/admin/verbs/reestablish_db_connection.dm @@ -5,7 +5,7 @@ to_chat(usr, "The Database is not enabled!") return - if (SSdbcore && SSdbcore.IsConnected()) + if (SSdbcore.IsConnected()) if (!check_rights(R_DEBUG,0)) alert("The database is already connected! (Only those with +debug can force a reconnection)", "The database is already connected!") return diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index d827abb5e1..b3f25ac8cf 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -22,8 +22,7 @@ /obj/item/device/assembly/signaler/Destroy() - if(SSradio) - SSradio.remove_object(src,frequency) + SSradio.remove_object(src,frequency) return ..() /obj/item/device/assembly/signaler/activate() diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index e48059a066..4371bd5986 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -152,8 +152,7 @@ update_icon() /obj/machinery/airalarm/Destroy() - if(SSradio) - SSradio.remove_object(src, frequency) + SSradio.remove_object(src, frequency) qdel(wires) wires = null return ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index aa13433376..1ef52cc787 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -37,8 +37,7 @@ Acts like a normal vent, but has an input AND output. icon_state = "dpvent_map_on" /obj/machinery/atmospherics/components/binary/dp_vent_pump/Destroy() - if(SSradio) - SSradio.remove_object(src, frequency) + SSradio.remove_object(src, frequency) return ..() /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index e52c4bee3d..d2e6a3ae72 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -22,8 +22,7 @@ Passive gate is similar to the regular pump except: var/datum/radio_frequency/radio_connection /obj/machinery/atmospherics/components/binary/passive_gate/Destroy() - if(SSradio) - SSradio.remove_object(src,frequency) + SSradio.remove_object(src,frequency) return ..() /obj/machinery/atmospherics/components/binary/passive_gate/update_icon_nopipes() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 77f98ac4df..0ec1b57a2e 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -30,8 +30,7 @@ Thus, the two variables affect pump operation are set in New(): on = TRUE /obj/machinery/atmospherics/components/binary/pump/Destroy() - if(SSradio) - SSradio.remove_object(src,frequency) + SSradio.remove_object(src,frequency) if(radio_connection) radio_connection = null return ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index b9debc4d43..4d3cf733fb 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -27,8 +27,7 @@ Thus, the two variables affect pump operation are set in New(): var/datum/radio_frequency/radio_connection /obj/machinery/atmospherics/components/binary/volume_pump/Destroy() - if(SSradio) - SSradio.remove_object(src,frequency) + SSradio.remove_object(src,frequency) return ..() /obj/machinery/atmospherics/components/binary/volume_pump/on diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 25f80352a4..87edfe8d11 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -28,8 +28,7 @@ radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_ATMOSIA) /obj/machinery/atmospherics/components/trinary/filter/Destroy() - if(SSradio) - SSradio.remove_object(src,frequency) + SSradio.remove_object(src,frequency) return ..() /obj/machinery/atmospherics/components/trinary/filter/update_icon() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 763c405429..0bf467f234 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -19,8 +19,7 @@ layer = GAS_SCRUBBER_LAYER /obj/machinery/atmospherics/components/unary/outlet_injector/Destroy() - if(SSradio) - SSradio.remove_object(src,frequency) + SSradio.remove_object(src,frequency) return ..() /obj/machinery/atmospherics/components/unary/outlet_injector/on diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index b19569be26..69560bc18b 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -56,8 +56,7 @@ A.air_vent_names -= id_tag A.air_vent_info -= id_tag - if(SSradio) - SSradio.remove_object(src,frequency) + SSradio.remove_object(src,frequency) radio_connection = null return ..() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index e76856bb66..113d029c0b 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -49,8 +49,7 @@ A.air_scrub_names -= id_tag A.air_scrub_info -= id_tag - if(SSradio) - SSradio.remove_object(src,frequency) + SSradio.remove_object(src,frequency) radio_connection = null for(var/I in adjacent_turfs) diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index aa1d09b636..f3a21445d3 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -39,8 +39,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 /obj/effect/immovablerod/New(atom/start, atom/end) ..() - if(SSaugury) - SSaugury.register_doom(src, 2000) + SSaugury.register_doom(src, 2000) z_original = z destination = end if(notify) diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 8bd178ead0..546e42d371 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -150,11 +150,10 @@ begin_month = APRIL /datum/holiday/april_fools/celebrate() - if(SSticker) - SSticker.login_music = 'sound/ambience/clown.ogg' - for(var/mob/dead/new_player/P in GLOB.mob_list) - if(P.client) - P.client.playtitlemusic() + SSticker.login_music = 'sound/ambience/clown.ogg' + for(var/mob/dead/new_player/P in GLOB.mob_list) + if(P.client) + P.client.playtitlemusic() /datum/holiday/fourtwenty name = "Four-Twenty" diff --git a/code/modules/jobs/job_types/civilian_chaplain.dm b/code/modules/jobs/job_types/civilian_chaplain.dm index eb84051ff9..3a281081ab 100644 --- a/code/modules/jobs/job_types/civilian_chaplain.dm +++ b/code/modules/jobs/job_types/civilian_chaplain.dm @@ -74,11 +74,9 @@ Chaplain else B.name = "The Holy Book of [new_religion]" - - if(SSreligion) - SSreligion.religion = new_religion - SSreligion.bible_name = B.name - SSreligion.deity = B.deity_name + SSreligion.religion = new_religion + SSreligion.bible_name = B.name + SSreligion.deity = B.deity_name H.equip_to_slot_or_del(B, slot_in_backpack) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 54eec1dc8a..2cea8e32f2 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -32,7 +32,7 @@ /mob/dead/new_player/proc/new_player_panel() var/output = "

Setup Character

" - if(SSticker && SSticker.current_state <= GAME_STATE_PREGAME) + if(SSticker.current_state <= GAME_STATE_PREGAME) switch(ready) if(PLAYER_NOT_READY) output += "

\[ [LINKIFY_READY("Ready", PLAYER_READY_TO_PLAY)] | Not Ready | [LINKIFY_READY("Observe", PLAYER_READY_TO_OBSERVE)] \]

" @@ -107,18 +107,17 @@ return 1 if(href_list["ready"]) - if(SSticker) - var/tready = text2num(href_list["ready"]) - //Avoid updating ready if we're after PREGAME (they should use latejoin instead) - //This is likely not an actual issue but I don't have time to prove that this - //no longer is required - if(SSticker.current_state <= GAME_STATE_PREGAME) - ready = tready - //if it's post initialisation and they're trying to observe we do the needful - if(!SSticker.current_state < GAME_STATE_PREGAME && tready == PLAYER_READY_TO_OBSERVE) - ready = tready - make_me_an_observer() - return + var/tready = text2num(href_list["ready"]) + //Avoid updating ready if we're after PREGAME (they should use latejoin instead) + //This is likely not an actual issue but I don't have time to prove that this + //no longer is required + if(SSticker.current_state <= GAME_STATE_PREGAME) + ready = tready + //if it's post initialisation and they're trying to observe we do the needful + if(!SSticker.current_state < GAME_STATE_PREGAME && tready == PLAYER_READY_TO_OBSERVE) + ready = tready + make_me_an_observer() + return if(href_list["refresh"]) src << browse(null, "window=playersetup") //closes the player setup window diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index d8bbc559c5..2ede4c360e 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -781,8 +781,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/proc/register_pai() if(isobserver(src)) - if(SSpai) - SSpai.recruitWindow(src) + SSpai.recruitWindow(src) else to_chat(usr, "Can't become a pAI candidate while not dead!") diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index c6c7196755..1deeaeeb17 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -9,7 +9,7 @@ emote("deathgasp") . = ..() - if(SSticker && SSticker.mode) + if(SSticker.mode) SSticker.mode.check_win() //Calls the rounds wincheck, mainly for wizard, malf, and changeling now /mob/living/carbon/gib(no_brain, no_organs, no_bodyparts) diff --git a/code/modules/mob/living/simple_animal/slime/death.dm b/code/modules/mob/living/simple_animal/slime/death.dm index aab8e907c0..75219e4b2a 100644 --- a/code/modules/mob/living/simple_animal/slime/death.dm +++ b/code/modules/mob/living/simple_animal/slime/death.dm @@ -26,7 +26,7 @@ update_canmove() - if(SSticker && SSticker.mode) + if(SSticker.mode) SSticker.mode.check_win() return ..(gibbed) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 194c00fc0f..6e4942807f 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -110,7 +110,7 @@ sparks.set_up(5, TRUE, src) /obj/machinery/power/emitter/Destroy() - if(SSticker && SSticker.IsRoundInProgress()) + if(SSticker.IsRoundInProgress()) var/turf/T = get_turf(src) message_admins("Emitter deleted at [ADMIN_COORDJMP(T)]",0,1) log_game("Emitter deleted at [COORD(T)]") diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 2a8d3f8a60..50f01f4259 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -191,7 +191,7 @@ cell.charge = (charge / capacity) * cell.maxcharge /obj/machinery/power/smes/Destroy() - if(SSticker && SSticker.IsRoundInProgress()) + if(SSticker.IsRoundInProgress()) var/area/A = get_area(src) var/turf/T = get_turf(src) message_admins("SMES deleted at [A][ADMIN_JMP(T)]") diff --git a/code/world.dm b/code/world.dm index b6badeb348..5ef7491f45 100644 --- a/code/world.dm +++ b/code/world.dm @@ -158,9 +158,7 @@ var/list/presentmins = adm["present"] var/list/afkmins = adm["afk"] s["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho - s["gamestate"] = 1 - if(SSticker) - s["gamestate"] = SSticker.current_state + s["gamestate"] = SSticker.current_state s["map_name"] = SSmapping.config.map_name @@ -268,11 +266,8 @@ var/list/features = list() - if(SSticker) - if(GLOB.master_mode) - features += GLOB.master_mode - else - features += "STARTING" + if(GLOB.master_mode) + features += GLOB.master_mode if (!GLOB.enter_allowed) features += "closed" From ab66dc57feb52554ef665b04b35c067bef275fda Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:42:03 -0500 Subject: [PATCH 014/230] Allows Ninja Adrenaline Boost to be used while stunned. (#2251) --- code/datums/action.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/datums/action.dm b/code/datums/action.dm index 7db3692fd2..16fbeb8462 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -417,6 +417,7 @@ button_icon_state = "smoke" /datum/action/item_action/ninjaboost + check_flags = AB_CHECK_RESTRAINED|AB_CHECK_CONSCIOUS name = "Adrenaline Boost" desc = "Inject a secret chemical that will counteract all movement-impairing effect." button_icon_state = "repulse" From 04231f44b17c048ae66eee175a934436366646ea Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:42:21 -0500 Subject: [PATCH 015/230] Improves Porta-Turret Performance (#2248) --- .../machinery/porta_turret/portable_turret.dm | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 0a212c11f8..038f0e0eba 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -359,28 +359,23 @@ popDown() return - var/list/targets = calculate_targets() - - if(!tryToShootAt(targets)) - if(!always_up) - popDown() // no valid targets, close the cover - -/obj/machinery/porta_turret/proc/calculate_targets() var/list/targets = list() - var/turretview = view(scan_range, base) - for(var/A in turretview) + var/static/things_to_scan = typecacheof(list(/mob/living, /obj/mecha)) + + for(var/A in typecache_filter_list(view(scan_range, base), things_to_scan)) var/atom/AA = A - if(AA.invisibility>SEE_INVISIBLE_LIVING) + + if(AA.invisibility > SEE_INVISIBLE_LIVING) continue if(check_anomalies)//if it's set to check for simple animals - if(istype(A, /mob/living/simple_animal)) + if(isanimal(A)) var/mob/living/simple_animal/SA = A if(SA.stat || in_faction(SA)) //don't target if dead or in faction continue targets += SA - if(istype(A, /mob/living/carbon)) + if(iscarbon(A)) var/mob/living/carbon/C = A //If not emagged, only target non downed carbons if(mode != TURRET_LETHAL && (C.stat || C.handcuffed || C.lying)) @@ -399,14 +394,16 @@ if(!in_faction(C)) targets += C - if(istype(A, /obj/mecha/)) + if(istype(A, /obj/mecha)) var/obj/mecha/M = A //If there is a user and they're not in our faction if(M.occupant && !in_faction(M.occupant)) if(assess_perp(M.occupant) >= 4) targets += M - return targets + if(!tryToShootAt(targets)) + if(!always_up) + popDown() // no valid targets, close the cover /obj/machinery/porta_turret/proc/tryToShootAt(list/atom/movable/targets) while(targets.len > 0) @@ -490,11 +487,9 @@ /obj/machinery/porta_turret/proc/target(atom/movable/target) if(target) - spawn() - popUp() //pop the turret up if it's not already up. + popUp() //pop the turret up if it's not already up. setDir(get_dir(base, target))//even if you can't shoot, follow the target - spawn() - shootAt(target) + shootAt(target) return 1 return From 795dcece7479b266870520d9b2db1411355b2496 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:42:33 -0500 Subject: [PATCH 016/230] Fixes admin buildmode not returning a qdel hint (#2254) --- code/modules/admin/verbs/buildmode.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index 97c5d1504d..922e15e8b4 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -101,6 +101,7 @@ stored = null for(var/button in buttons) qdel(button) + return ..() /datum/buildmode/proc/create_buttons() buttons += new /obj/screen/buildmode/mode(src) From 5cad4934948959ad974b84faa174fb850a396c07 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:42:41 -0500 Subject: [PATCH 017/230] Fixes unintended corgi equips. (#2245) --- code/modules/clothing/clothing.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 3c32a49e7d..013fbd8bc4 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -483,6 +483,7 @@ BLIND // can't see anything equip_delay_other = 50 flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH resistance_flags = 0 + dog_fashion = null /obj/item/clothing/suit/space name = "space suit" From c5e2a22c2f363eacf21fef825d01b6dd33d5e957 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:42:43 -0500 Subject: [PATCH 018/230] Automatic changelog generation for PR #2245 [ci skip] --- html/changelogs/AutoChangeLog-pr-2245.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2245.yml diff --git a/html/changelogs/AutoChangeLog-pr-2245.yml b/html/changelogs/AutoChangeLog-pr-2245.yml new file mode 100644 index 0000000000..3f19f56d03 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2245.yml @@ -0,0 +1,4 @@ +author: "Galactic Corgi Breeding Mills, LLC" +delete-after: True +changes: + - bugfix: "Fixed corgis being able to wear spacesuit helmets despite lacking the proper code and sprites for them." From 8267e1ad257e3adf807f930398b1feafd10dc5c3 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:42:55 -0500 Subject: [PATCH 019/230] Fixes missing objectives and antag status. (#2244) --- code/datums/antagonists/datum_traitor.dm | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/code/datums/antagonists/datum_traitor.dm b/code/datums/antagonists/datum_traitor.dm index 3e90228c19..d706eff62b 100644 --- a/code/datums/antagonists/datum_traitor.dm +++ b/code/datums/antagonists/datum_traitor.dm @@ -23,6 +23,7 @@ /datum/antagonist/traitor/human should_specialise = FALSE var/should_equip = TRUE + /datum/antagonist/traitor/human/custom silent = TRUE should_give_codewords = FALSE @@ -31,6 +32,7 @@ /datum/antagonist/traitor/AI should_specialise = FALSE + /datum/antagonist/traitor/AI/custom silent = TRUE should_give_codewords = FALSE @@ -38,9 +40,8 @@ /datum/antagonist/traitor/on_body_transfer(mob/living/old_body, mob/living/new_body) - if(issilicon(new_body) && issilicon(old_body)) - ..() - else + // human <-> silicon only + if(old_body && issilicon(new_body) ^ issilicon(old_body)) silent = TRUE owner.add_antag_datum(base_datum_custom) for(var/datum/antagonist/traitor/new_datum in owner.antag_datums) @@ -49,13 +50,14 @@ transfer_important_variables(new_datum) break on_removal() - - + else + ..() /datum/antagonist/traitor/human/custom //used to give custom objectives silent = TRUE give_objectives = FALSE should_give_codewords = FALSE + /datum/antagonist/traitor/AI/custom //used to give custom objectives silent = TRUE give_objectives = FALSE @@ -83,7 +85,8 @@ if(owner.assigned_role == "Clown") var/mob/living/carbon/human/traitor_mob = owner.current if(traitor_mob&&istype(traitor_mob)) - if(!silent) to_chat(traitor_mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.") + if(!silent) + to_chat(traitor_mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.") traitor_mob.dna.remove_mutation(CLOWNMUT) /datum/antagonist/traitor/remove_innate_effects() From 70826963dd646776222b903ec620b8d399917dcc Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:43:02 -0500 Subject: [PATCH 020/230] Tweaked SM overlay (#2243) --- code/game/objects/effects/countdown.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm index 520158dfb0..05ba68d51e 100644 --- a/code/game/objects/effects/countdown.dm +++ b/code/game/objects/effects/countdown.dm @@ -128,13 +128,13 @@ /obj/effect/countdown/supermatter name = "supermatter damage" text_size = 1 - color = "#ED84F4" + color = "#00ff80" /obj/effect/countdown/supermatter/get_value() var/obj/machinery/power/supermatter_shard/S = attached_to if(!istype(S)) return - return "
[round((S.damage / S.explosion_point) * 100)]
" + return "
[round(S.get_integrity(), 1)]%
" /obj/effect/countdown/transformer name = "transformer countdown" From cf39768f251ae19d38bfc3dc1309b0ad37c2eeca Mon Sep 17 00:00:00 2001 From: ktccd Date: Fri, 4 Aug 2017 17:43:27 +0200 Subject: [PATCH 021/230] Fixes cloning and DNA change losing genitals. (#2242) Fixes cloning and DNA change losing genitals. Any hardsynch to TG removes this, because I can't freaking do the complicated multiple-of-same-proc thing that the TG head-coders know... --- code/datums/dna.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 5150938258..550ea590bf 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -29,6 +29,9 @@ destination.dna.temporary_mutations = temporary_mutations.Copy() if(transfer_SE) destination.dna.struc_enzymes = struc_enzymes + if(ishuman(destination)) + var/mob/living/carbon/human/H = destination + H.give_genitals(TRUE)//This gives the body the genitals of this DNA. Used for any transformations based on DNA /datum/dna/proc/copy_dna(datum/dna/new_dna) new_dna.unique_enzymes = unique_enzymes @@ -247,6 +250,8 @@ dna.struc_enzymes = se domutcheck() + give_genitals(TRUE)//Give all genitalia that DNA says you should have, remove any pre-existing ones as this is a hardset! + if(mrace || newfeatures || ui) update_body() update_hair() From 2f37fd8144fa1d0d46aeec3f2200b523f5099aff Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:43:28 -0500 Subject: [PATCH 022/230] Automatic changelog generation for PR #2242 [ci skip] --- html/changelogs/AutoChangeLog-pr-2242.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2242.yml diff --git a/html/changelogs/AutoChangeLog-pr-2242.yml b/html/changelogs/AutoChangeLog-pr-2242.yml new file mode 100644 index 0000000000..69b47043d3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2242.yml @@ -0,0 +1,5 @@ +author: "ktccd" +delete-after: True +changes: + - bugfix: "Cloning and podding people no longer forgets to put the genitals back in you." + - bugfix: "Changeling and other DNA transformations now apply the appropriate genitalia." From a840e9cf0563a6ed29f616db8509ee9447b53905 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:43:57 -0500 Subject: [PATCH 023/230] Fixes shields not blocking alien hunter pounces (#2249) --- code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index 2957124ac6..9e3212ec6e 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -72,7 +72,7 @@ var/blocked = FALSE if(ishuman(A)) var/mob/living/carbon/human/H = A - if(H.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK)) + if(H.check_shields(src, 0, "the [name]", attack_type = LEAP_ATTACK)) blocked = TRUE if(!blocked) L.visible_message("[src] pounces on [L]!", "[src] pounces on you!") From 71d1dd46df45b9166e35a5397e443047a58ecf5c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:43:59 -0500 Subject: [PATCH 024/230] Automatic changelog generation for PR #2249 [ci skip] --- html/changelogs/AutoChangeLog-pr-2249.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2249.yml diff --git a/html/changelogs/AutoChangeLog-pr-2249.yml b/html/changelogs/AutoChangeLog-pr-2249.yml new file mode 100644 index 0000000000..4cc75881bc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2249.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - bugfix: "Alien hunters can no longer pounce through shields." From 32a7158a7236243e5542a3f0db9cf50d2e1b66d3 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 10:45:47 -0500 Subject: [PATCH 025/230] Fixes admin buildmode mass delete not working (#2206) --- .../mapGeneratorModules/helpers.dm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm index 6216216cd9..b93b3630e9 100644 --- a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm +++ b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm @@ -61,6 +61,20 @@ /datum/mapGenerator/repressurize modules = list(/datum/mapGeneratorModule/bottomLayer/repressurize) + buildmode_name = "Block: Restore Roundstart Air Contents" /datum/mapGenerator/massdelete - modules = list(/datum/mapGeneratorModule/bottomLayer/massdelete) \ No newline at end of file + modules = list(/datum/mapGeneratorModule/bottomLayer/massdelete) + buildmode_name = "Block: Full Mass Deletion" + +/datum/mapGenerator/massdelete/nomob + modules = list(/datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs) + buildmode_name = "Block: Mass Deletion - Leave Mobs" + +/datum/mapGenerator/massdelete/noturf + modules = list(/datum/mapGeneratorModule/bottomLayer/massdelete/leave_turfs) + buildmode_name = "Block: Mass Deletion - Leave Turfs" + +/datum/mapGenerator/massdelete/regen + modules = list(/datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete) + buildmode_name = "Block: Mass Deletion - Leave Mobs and Turfs" From f5bc18bb5534f0bcd09992f704bee5e05fcf0505 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 13:46:11 -0500 Subject: [PATCH 026/230] buildmode fix + blueprints fix (#2261) * Fixes Admin Buildmode Mass-Deletion making people nude, gives GetAllContents() an ignore typecache. * sync turf.dm --- code/__HELPERS/unsorted.dm | 21 +++++++++++----- code/game/turfs/turf.dm | 25 +++++++++++++------ .../mapGeneratorModules/helpers.dm | 20 ++++++++++----- 3 files changed, 46 insertions(+), 20 deletions(-) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 48787430a0..aab766f9e4 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -491,17 +491,26 @@ Turf and target are separate in case you want to teleport some distance from a t var/y=arcsin(x/sqrt(1+x*x)) return y -/atom/proc/GetAllContents() +/atom/proc/GetAllContents(list/ignore_typecache) var/list/processing_list = list(src) var/list/assembled = list() + if(ignore_typecache) //If there's a typecache, use it. + while(processing_list.len) + var/atom/A = processing_list[1] + processing_list -= A + if(ignore_typecache[A.type]) + continue + processing_list |= (A.contents - assembled) + assembled |= A - while(processing_list.len) - var/atom/A = processing_list[1] - processing_list -= A + else //If there's none, only make this check once for performance. + while(processing_list.len) + var/atom/A = processing_list[1] + processing_list -= A - processing_list |= (A.contents - assembled) + processing_list |= (A.contents - assembled) - assembled |= A + assembled |= A return assembled diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index a75823701a..b204406d05 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -77,6 +77,7 @@ return SSair.remove_from_active(src) visibilityChanged() + QDEL_LIST(blueprint_data) initialized = FALSE requires_activation = FALSE ..() @@ -224,9 +225,15 @@ var/old_affecting_lights = affecting_lights var/old_lighting_object = lighting_object var/old_corners = corners + + var/old_exl = explosion_level + var/old_exi = explosion_id + var/old_bp = blueprint_data + blueprint_data = null var/old_baseturf = baseturf changing_turf = TRUE + qdel(src) //Just get the side effects and call Destroy var/turf/W = new path(src) @@ -235,9 +242,14 @@ else W.baseturf = old_baseturf + W.explosion_id = old_exi + W.explosion_level = old_exl + if(!defer_change) W.AfterChange(ignore_air) + W.blueprint_data = old_bp + if(SSlighting.initialized) recalc_atom_opacity() lighting_object = old_lighting_object @@ -432,27 +444,24 @@ I.setDir(AM.dir) I.alpha = 128 - if(!blueprint_data) - blueprint_data = list() - blueprint_data += I + LAZYADD(blueprint_data, I) /turf/proc/add_blueprints_preround(atom/movable/AM) if(!SSticker.HasRoundStarted()) add_blueprints(AM) -/turf/proc/empty(turf_type=/turf/open/space, baseturf_type, delmobs = TRUE, forceop = FALSE) +/turf/proc/empty(turf_type=/turf/open/space, baseturf_type, list/ignore_typecache, forceop = FALSE) // Remove all atoms except observers, landmarks, docking ports var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /obj/effect/landmark, /obj/docking_port, /atom/movable/lighting_object)) - var/list/allowed_contents = typecache_filter_list_reverse(GetAllContents(),delmobs? ignored_atoms : ignored_atoms + typecacheof(list(/mob))) + var/list/allowed_contents = typecache_filter_list_reverse(GetAllContents(ignore_typecache), ignored_atoms) allowed_contents -= src for(var/i in 1 to allowed_contents.len) var/thing = allowed_contents[i] qdel(thing, force=TRUE) - var/turf/newT = ChangeTurf(turf_type, baseturf_type, FALSE, FALSE, forceop = forceop) - + SSair.remove_from_active(newT) newT.CalculateAdjacentTurfs() SSair.add_to_active(newT,1) @@ -537,4 +546,4 @@ limit-- else return I - return I \ No newline at end of file + return I diff --git a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm index b93b3630e9..24b75a3a9a 100644 --- a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm +++ b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm @@ -20,26 +20,34 @@ /datum/mapGeneratorModule/bottomLayer/massdelete spawnableAtoms = list() spawnableTurfs = list() - var/deletemobs = TRUE - var/deleteturfs = TRUE + var/deleteturfs = TRUE //separate var for the empty type. + var/list/ignore_typecache /datum/mapGeneratorModule/bottomLayer/massdelete/generate() if(!mother) return for(var/V in mother.map) var/turf/T = V - T.empty(deleteturfs? null : T.type, delmobs = deletemobs, forceop = TRUE) + T.empty(deleteturfs? null : T.type, ignore_typecache = ignore_typecache, forceop = TRUE) -/datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs - deletemobs = FALSE +/datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs/New() + ..() + ignore_typecache = typecacheof(list(/mob)) /datum/mapGeneratorModule/bottomLayer/massdelete/leave_turfs deleteturfs = FALSE +/datum/mapGeneratorModule/bottomLayer/massdelete/leave_turfs/New() + ..() + ignore_typecache = typecacheof(list(/turf)) + /datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete - deletemobs = FALSE deleteturfs = FALSE +/datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete/New() + ..() + ignore_typecache = typecacheof(list(/mob, /turf)) + //Only places atoms/turfs on area borders /datum/mapGeneratorModule/border clusterCheckFlags = CLUSTER_CHECK_NONE From 8ca4b9d6147a0ba56c8867fe407efa79b711aa65 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 13:46:22 -0500 Subject: [PATCH 027/230] Clockcult Combat Rebalance + Conversion Rework (#2020) * Removes Soul Vessel, Cogscarab, and Anima Fragment Scriptures * Update tips.txt * no one cares * manual clockcult syn --- code/__DEFINES/clockcult.dm | 1 + .../clock_cult/clock_effects/clock_sigils.dm | 77 +++-------- .../clock_helpers/slab_abilities.dm | 86 ++++++++----- .../clock_cult/clock_items/clockwork_slab.dm | 72 +++++------ .../clock_cult/clock_items/judicial_visor.dm | 21 +-- .../clock_cult/clock_items/ratvarian_spear.dm | 108 ++++------------ .../scripture_applications.dm | 42 ------ .../clock_scriptures/scripture_cyborg.dm | 2 +- .../clock_scriptures/scripture_drivers.dm | 120 ++++-------------- .../clock_scriptures/scripture_scripts.dm | 115 +---------------- .../clock_structures/clock_shells.dm | 48 ------- .../clock_structures/geis_binding.dm | 58 ++++----- .../effects/temporary_visuals/clockcult.dm | 54 +------- icons/effects/geis_target_remove.dmi | Bin 0 -> 1013 bytes strings/tips.txt | 14 +- tgstation.dme | 2 - 16 files changed, 212 insertions(+), 608 deletions(-) delete mode 100644 code/game/gamemodes/clock_cult/clock_structures/clock_shells.dm create mode 100644 icons/effects/geis_target_remove.dmi diff --git a/code/__DEFINES/clockcult.dm b/code/__DEFINES/clockcult.dm index c74bf9c61e..0bedf57620 100644 --- a/code/__DEFINES/clockcult.dm +++ b/code/__DEFINES/clockcult.dm @@ -7,6 +7,7 @@ GLOBAL_VAR_INIT(clockwork_construction_value, 0) //The total value of all structures built by the clockwork cult GLOBAL_VAR_INIT(clockwork_caches, 0) //How many clockwork caches exist in the world (not each individual) +GLOBAL_VAR_INIT(clockwork_vitality, 0) //How much Vitality is stored, total GLOBAL_LIST_EMPTY(active_daemons) //A list of all active tinkerer's daemons GLOBAL_LIST_EMPTY(all_clockwork_objects) //All clockwork items, structures, and effects in existence GLOBAL_LIST_EMPTY(all_clockwork_mobs) //All clockwork SERVANTS (not creatures) in existence diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm index 297021ff5a..7443188255 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm @@ -81,7 +81,7 @@ /obj/effect/clockwork/sigil/submission name = "ominous sigil" desc = "A luminous golden sigil. Something about it really bothers you." - clockwork_desc = "A sigil that will enslave the first person to cross it, provided they remain on it for seven seconds." + clockwork_desc = "A sigil that will enslave any non-Servant that remains on it for 8 seconds. Cannot penetrate mindshield implants." icon_state = "sigilsubmission" layer = LOW_SIGIL_LAYER alpha = 125 @@ -91,17 +91,15 @@ light_color = "#FAE48C" stat_affected = UNCONSCIOUS resist_string = "glows faintly yellow" - var/convert_time = 70 + var/convert_time = 80 var/delete_on_finish = TRUE sigil_name = "Sigil of Submission" - var/glow_type - -/obj/effect/clockwork/sigil/submission/proc/post_channel(mob/living/L) + var/glow_type = /obj/effect/temp_visual/ratvar/sigil/submission /obj/effect/clockwork/sigil/submission/sigil_effects(mob/living/L) L.visible_message("[src] begins to glow a piercing magenta!", "You feel something start to invade your mind...") var/oldcolor = color - animate(src, color = "#AF0AAF", time = convert_time) + animate(src, color = "#AF0AAF", time = convert_time, flags = ANIMATION_END_NOW) var/obj/effect/temp_visual/ratvar/sigil/glow if(glow_type) glow = new glow_type(get_turf(src)) @@ -113,16 +111,15 @@ if(get_turf(L) != get_turf(src)) if(glow) qdel(glow) - animate(src, color = oldcolor, time = 20) + animate(src, color = oldcolor, time = 20, flags = ANIMATION_END_NOW) addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 20) visible_message("[src] slowly stops glowing!") return - post_channel(L) if(is_eligible_servant(L)) to_chat(L, "\"You belong to me now.\"") if(add_servant_of_ratvar(L)) L.log_message("Conversion was done with a [sigil_name].", INDIVIDUAL_ATTACK_LOG) - L.Knockdown(60) //Completely defenseless for about five seconds - mainly to give them time to read over the information they've just been presented with + L.Knockdown(50) //Completely defenseless for five seconds - mainly to give them time to read over the information they've just been presented with if(iscarbon(L)) var/mob/living/carbon/C = L C.silent += 5 @@ -136,39 +133,9 @@ to_chat(M, "[message] you!") else to_chat(M, "[message] [L.real_name]!") - if(delete_on_finish) - qdel(src) - else - animate(src, color = oldcolor, time = 20) - addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 20) - visible_message("[src] slowly stops glowing!") - - -//Sigil of Accession: After a short time, converts any non-servant standing on it though implants. Knocks down and silences them for five seconds afterwards. -/obj/effect/clockwork/sigil/submission/accession - name = "terrifying sigil" - desc = "A luminous brassy sigil. Something about it makes you want to flee." - clockwork_desc = "A sigil that will enslave any person who crosses it, provided they remain on it for seven seconds. \n\ - It can convert a mindshielded target once before disppearing, but can convert any number of non-implanted targets." - icon_state = "sigiltransgression" - alpha = 200 - color = "#A97F1B" - light_range = 3 //bright light - light_power = 1 - light_color = "#A97F1B" - delete_on_finish = FALSE - sigil_name = "Sigil of Accession" - glow_type = /obj/effect/temp_visual/ratvar/sigil/accession - resist_string = "glows bright orange" - -/obj/effect/clockwork/sigil/submission/accession/post_channel(mob/living/L) - if(L.isloyal()) - L.log_message("Had their mindshield implant broken by a [sigil_name].", INDIVIDUAL_ATTACK_LOG) - delete_on_finish = TRUE - L.visible_message("[L] visibly trembles!", \ - "[text2ratvar("You will be mine and his. This puny trinket will not stop me.")]") - for(var/obj/item/weapon/implant/mindshield/M in L.implants) - qdel(M) + animate(src, color = oldcolor, time = 20, flags = ANIMATION_END_NOW) + addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 20) + visible_message("[src] slowly stops glowing!") //Sigil of Transmission: Stores power for clockwork machinery, serving as a battery. @@ -326,8 +293,7 @@ stat_affected = DEAD resist_string = "glows shimmering yellow" sigil_name = "Vitality Matrix" - var/static/vitality = 0 - var/base_revive_cost = 20 + var/revive_cost = 150 var/sigil_active = FALSE var/animation_number = 3 //each cycle increments this by 1, at 4 it produces an animation and resets var/static/list/damage_heal_order = list(CLONE, TOX, BURN, BRUTE, OXY) //we heal damage in this order @@ -335,11 +301,11 @@ /obj/effect/clockwork/sigil/vitality/examine(mob/user) ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "It has access to [GLOB.ratvar_awakens ? "INFINITE":"[vitality]"] units of vitality.") + to_chat(user, "It has access to [GLOB.ratvar_awakens ? "INFINITE":GLOB.clockwork_vitality] units of vitality.") if(GLOB.ratvar_awakens) to_chat(user, "It can revive Servants at no cost!") else - to_chat(user, "It can revive Servants at a cost of [base_revive_cost] vitality plus vitality equal to the non-oxygen damage they have, in addition to being destroyed in the process.") + to_chat(user, "It can revive Servants at a cost of [revive_cost] vitality.") /obj/effect/clockwork/sigil/vitality/sigil_effects(mob/living/L) if((is_servant_of_ratvar(L) && L.suiciding) || sigil_active) @@ -348,7 +314,7 @@ animate(src, alpha = 255, time = 10, flags = ANIMATION_END_NOW) //we may have a previous animation going. finish it first, then do this one without delay. sleep(10) //as long as they're still on the sigil and are either not a servant or they're a servant AND it has remaining vitality - while(L && (!is_servant_of_ratvar(L) || (is_servant_of_ratvar(L) && (GLOB.ratvar_awakens || vitality))) && get_turf(L) == get_turf(src)) + while(L && (!is_servant_of_ratvar(L) || (is_servant_of_ratvar(L) && (GLOB.ratvar_awakens || GLOB.clockwork_vitality))) && get_turf(L) == get_turf(src)) sigil_active = TRUE if(animation_number >= 4) new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src)) @@ -373,40 +339,37 @@ else vitality_drained = L.adjustToxLoss(1.5) if(vitality_drained) - vitality += vitality_drained + GLOB.clockwork_vitality += vitality_drained else break else if(L.stat == DEAD) - var/revival_cost = base_revive_cost + L.getCloneLoss() + L.getToxLoss() + L.getFireLoss() + L.getBruteLoss() //ignores oxygen damage + var/revival_cost = revive_cost if(GLOB.ratvar_awakens) revival_cost = 0 var/mob/dead/observer/ghost = L.get_ghost(TRUE) - if(vitality >= revival_cost && (ghost || (L.mind && L.mind.active))) + if(GLOB.clockwork_vitality >= revival_cost && (ghost || (L.mind && L.mind.active))) if(ghost) ghost.reenter_corpse() L.revive(1, 1) var/obj/effect/temp_visual/ratvar/sigil/vitality/V = new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src)) animate(V, alpha = 0, transform = matrix()*2, time = 8) playsound(L, 'sound/magic/staff_healing.ogg', 50, 1) - L.visible_message("[L] suddenly gets back up, [GLOB.ratvar_awakens ? "[L.p_their()] body dripping blue ichor":"even as [src] scatters into blue sparks around [L.p_them()]"]!", \ - "\"[text2ratvar("You will be okay, child.")]\"") - vitality -= revival_cost - if(!GLOB.ratvar_awakens) - qdel(src) + L.visible_message("[L] suddenly gets back up, [L.p_their()] body dripping blue ichor!", "\"[text2ratvar("You will be okay, child.")]\"") + GLOB.clockwork_vitality -= revival_cost break var/vitality_for_cycle = 3 if(!GLOB.ratvar_awakens) if(L.stat == CONSCIOUS) vitality_for_cycle = 2 - vitality_for_cycle = min(vitality, vitality_for_cycle) + vitality_for_cycle = min(GLOB.clockwork_vitality, vitality_for_cycle) var/vitality_used = L.heal_ordered_damage(vitality_for_cycle, damage_heal_order) if(!vitality_used) break if(!GLOB.ratvar_awakens) - vitality -= vitality_used + GLOB.clockwork_vitality -= vitality_used sleep(2) diff --git a/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm b/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm index 790088e8d5..f21cbb8987 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm @@ -24,11 +24,15 @@ //For the Geis scripture; binds a target to convert. /obj/effect/proc_holder/slab/geis ranged_mousepointer = 'icons/effects/geis_target.dmi' + var/obj/structure/destructible/clockwork/geis_binding/binding //we always have a reference to the binding + var/obj/structure/destructible/clockwork/geis_binding/pulled_binding //we use this to see if we're pulling it or not + +/obj/effect/proc_holder/slab/geis/remove_ranged_ability(msg) + ..() + binding = null + pulled_binding = null /obj/effect/proc_holder/slab/geis/InterceptClickOn(mob/living/caller, params, atom/target) - if(..()) - return TRUE - var/turf/T = ranged_ability_user.loc if(!isturf(T)) return TRUE @@ -36,6 +40,20 @@ var/target_is_binding = istype(target, /obj/structure/destructible/clockwork/geis_binding) if((target_is_binding || isliving(target)) && ranged_ability_user.Adjacent(target)) + if(in_progress || ..()) + var/mob/living/L = target + if(!pulled_binding) + if(target == binding || (isliving(target) && L.buckled == binding)) + pulled_binding = binding + ranged_ability_user.start_pulling(binding) + remove_mousepointer(ranged_ability_user.client) + ranged_mousepointer = 'icons/effects/geis_target_remove.dmi' + add_mousepointer(ranged_ability_user.client) + else if(target == pulled_binding || (isliving(target) && L.buckled == pulled_binding)) + ranged_ability_user.visible_message("[ranged_ability_user] dispels [pulled_binding]!", "You dispel the binding!") + binding.take_damage(obj_integrity) + remove_ranged_ability() + return TRUE if(target_is_binding) var/obj/structure/destructible/clockwork/geis_binding/GB = target GB.repair_and_interrupt() @@ -65,19 +83,44 @@ in_progress = TRUE clockwork_say(ranged_ability_user, text2ratvar("Be bound, heathen!")) remove_mousepointer(ranged_ability_user.client) + ranged_mousepointer = 'icons/effects/geis_target_remove.dmi' + add_mousepointer(ranged_ability_user.client) add_logs(ranged_ability_user, L, "bound with Geis") + playsound(target, 'sound/magic/blink.ogg', 50, TRUE, frequency = 0.5) if(slab.speed_multiplier >= 0.5) //excuse my debug... ranged_ability_user.notransform = TRUE - addtimer(CALLBACK(src, .proc/reset_user_notransform, ranged_ability_user), 5) //stop us moving for a little bit so we don't break the scripture following this - slab.busy = null - var/datum/clockwork_scripture/geis/conversion = new - conversion.slab = slab - conversion.invoker = ranged_ability_user - conversion.target = target - conversion.run_scripture() + addtimer(CALLBACK(src, .proc/reset_user_notransform, ranged_ability_user), 5) //stop us moving for a little bit so we don't break the binding immediately + if(L.buckled) + L.buckled.unbuckle_mob(target, TRUE) + binding = new(get_turf(target)) + binding.setDir(target.dir) + binding.buckle_mob(target, TRUE) + pulled_binding = binding + ranged_ability_user.start_pulling(binding) + slab.busy = "sustaining Geis" + slab.flags |= NODROP + while(!QDELETED(binding) && !QDELETED(ranged_ability_user)) + if(ranged_ability_user.pulling == binding) + pulled_binding = binding + if(ranged_ability_user.client && ranged_ability_user.client.mouse_pointer_icon == 'icons/effects/geis_target.dmi') + remove_mousepointer(ranged_ability_user.client) + ranged_mousepointer = 'icons/effects/geis_target_remove.dmi' + add_mousepointer(ranged_ability_user.client) + else //if we're not pulling it, swap our mousepointer + pulled_binding = null + if(ranged_ability_user.client && ranged_ability_user.client.mouse_pointer_icon == 'icons/effects/geis_target_remove.dmi') + remove_mousepointer(ranged_ability_user.client) + ranged_mousepointer = 'icons/effects/geis_target.dmi' + add_mousepointer(ranged_ability_user.client) + sleep(1) + if(!QDELETED(slab)) + slab.flags &= ~NODROP + in_progress = FALSE successful = TRUE remove_ranged_ability() + else + ..() return TRUE @@ -145,29 +188,6 @@ return TRUE -//For the Volt Void scripture, fires a ray of energy at a target location -/obj/effect/proc_holder/slab/volt - ranged_mousepointer = 'icons/effects/volt_target.dmi' - -/obj/effect/proc_holder/slab/volt/InterceptClickOn(mob/living/caller, params, atom/target) - if(target == slab || ..()) //we can't cancel - return TRUE - - var/turf/T = ranged_ability_user.loc - if(!isturf(T)) - return TRUE - - if(target in view(7, get_turf(ranged_ability_user))) - successful = TRUE - ranged_ability_user.visible_message("[ranged_ability_user] fires a ray of energy at [target]!", "You fire a volt ray at [target].") - playsound(ranged_ability_user, 'sound/effects/light_flicker.ogg', 50, 1) - T = get_turf(target) - new/obj/effect/temp_visual/ratvar/volt_hit(T, ranged_ability_user) - add_logs(ranged_ability_user, T, "fired a volt ray") - remove_ranged_ability() - - return TRUE - //For the cyborg Linked Vanguard scripture, grants you and a nearby ally Vanguard /obj/effect/proc_holder/slab/vanguard ranged_mousepointer = 'icons/effects/vanguard_target.dmi' diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm index e28fd8a10d..343f2e70e7 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm @@ -21,8 +21,8 @@ var/selected_scripture = SCRIPTURE_DRIVER var/recollecting = FALSE //if we're looking at fancy recollection var/obj/effect/proc_holder/slab/slab_ability //the slab's current bound ability, for certain scripture - var/list/quickbound = list(/datum/clockwork_scripture/ranged_ability/geis_prep, /datum/clockwork_scripture/create_object/replicant, \ - /datum/clockwork_scripture/create_object/tinkerers_cache) //quickbound scripture, accessed by index + var/list/quickbound = list(/datum/clockwork_scripture/ranged_ability/geis, /datum/clockwork_scripture/create_object/sigil_of_submission, \ + /datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/tinkerers_cache) //quickbound scripture, accessed by index var/maximum_quickbound = 5 //how many quickbound scriptures we can have var/recollection_category = "Default" actions_types = list(/datum/action/item_action/clock/hierophant) @@ -53,21 +53,18 @@ maximum_quickbound = 6 //we usually have one or two unique scriptures, so if ratvar is up let us bind one more actions_types = list() -/obj/item/clockwork/slab/cyborg/engineer //four scriptures, plus a fabricator - quickbound = list(/datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/cogscarab, \ - /datum/clockwork_scripture/create_object/soul_vessel, /datum/clockwork_scripture/create_object/sigil_of_transmission) +/obj/item/clockwork/slab/cyborg/engineer //two scriptures, plus a fabricator + quickbound = list(/datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transmission) /obj/item/clockwork/slab/cyborg/medical //five scriptures, plus a spear quickbound = list(/datum/clockwork_scripture/ranged_ability/linked_vanguard, /datum/clockwork_scripture/ranged_ability/sentinels_compromise, \ /datum/clockwork_scripture/create_object/vitality_matrix, /datum/clockwork_scripture/channeled/mending_mantra, /datum/clockwork_scripture/fellowship_armory) -/obj/item/clockwork/slab/cyborg/security //four scriptures, plus a spear - quickbound = list(/datum/clockwork_scripture/channeled/belligerent, /datum/clockwork_scripture/ranged_ability/judicial_marker, /datum/clockwork_scripture/channeled/taunting_tirade, \ - /datum/clockwork_scripture/channeled/volt_blaster) +/obj/item/clockwork/slab/cyborg/security //twoscriptures, plus a spear + quickbound = list(/datum/clockwork_scripture/channeled/belligerent, /datum/clockwork_scripture/ranged_ability/judicial_marker) -/obj/item/clockwork/slab/cyborg/peacekeeper //four scriptures, plus a spear - quickbound = list(/datum/clockwork_scripture/channeled/belligerent, /datum/clockwork_scripture/ranged_ability/judicial_marker, /datum/clockwork_scripture/channeled/taunting_tirade, \ - /datum/clockwork_scripture/channeled/volt_blaster) +/obj/item/clockwork/slab/cyborg/peacekeeper //two scriptures, plus a spear + quickbound = list(/datum/clockwork_scripture/channeled/belligerent, /datum/clockwork_scripture/ranged_ability/judicial_marker) /obj/item/clockwork/slab/cyborg/janitor //five scriptures, plus a fabricator quickbound = list(/datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transgression, \ @@ -77,8 +74,8 @@ quickbound = list(/datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/tinkerers_cache, \ /datum/clockwork_scripture/spatial_gateway, /datum/clockwork_scripture/fellowship_armory, /datum/clockwork_scripture/create_object/clockwork_obelisk) -/obj/item/clockwork/slab/cyborg/miner //three scriptures, plus a spear and xray vision - quickbound = list(/datum/clockwork_scripture/ranged_ability/linked_vanguard, /datum/clockwork_scripture/spatial_gateway, /datum/clockwork_scripture/channeled/volt_blaster) +/obj/item/clockwork/slab/cyborg/miner //two scriptures, plus a spear and xray vision + quickbound = list(/datum/clockwork_scripture/ranged_ability/linked_vanguard, /datum/clockwork_scripture/spatial_gateway) /obj/item/clockwork/slab/cyborg/access_display(mob/living/user) if(!GLOB.ratvar_awakens) @@ -136,7 +133,7 @@ production_time = world.time + SLAB_PRODUCTION_TIME + production_slowdown var/mob/living/L L = get_atom_on_turf(src, /mob/living) - if(istype(L) && can_recite_scripture(L)) + if(istype(L) && (no_cost || can_recite_scripture(L))) var/component_to_generate = target_component_id if(!component_to_generate) component_to_generate = get_weighted_component_id(src) //more likely to generate components that we have less of @@ -267,7 +264,7 @@ if(busy) to_chat(user, "[src] refuses to work, displaying the message: \"[busy]!\"") return 0 - if(!can_recite_scripture(user)) + if(!no_cost && !can_recite_scripture(user)) to_chat(user, "[src] hums fitfully in your hands, but doesn't seem to do anything...") return 0 access_display(user) @@ -287,7 +284,7 @@ ui.open() /obj/item/clockwork/slab/proc/recite_scripture(datum/clockwork_scripture/scripture, mob/living/user) - if(!scripture || !user || !user.canUseTopic(src) || !can_recite_scripture(user)) + if(!scripture || !user || !user.canUseTopic(src) || (!no_cost && !can_recite_scripture(user))) return FALSE if(user.get_active_held_item() != src) to_chat(user, "You need to hold the slab in your active hand to recite scripture!") @@ -403,24 +400,21 @@ dat += "Servant: A person or robot who serves Ratvar. You are one of these.
" dat += "Cache: A Tinkerer's Cache, which is a structure that stores and creates components.
" dat += "CV: Construction Value. All clockwork structures, floors, and walls increase this number.
" + dat += "Vitality: Used for healing effects, produced by Ratvarian spear attacks and Vitality Matrices.
" dat += "Geis: An important scripture used to make normal crew and robots into Servants of Ratvar.
" dat += "[get_component_icon(BELLIGERENT_EYE)]BE: Belligerent Eye, a component type used in offensive scriptures.
" dat += "[get_component_icon(VANGUARD_COGWHEEL)]VC: Vanguard Cogwheel, a component type used in defensive scriptures.
" dat += "[get_component_icon(GEIS_CAPACITOR)]GC: Geis Capacitor, a component type used in mind-related scriptures.
" dat += "[get_component_icon(REPLICANT_ALLOY)]RA: Replicant Alloy, a component type used in construction scriptures.
" - dat += "[get_component_icon(HIEROPHANT_ANSIBLE)]HA: Hierophant Ansible, a component type used in energy scriptures.
" + dat += "[get_component_icon(HIEROPHANT_ANSIBLE)]HA: Hierophant Ansible, a component type used in energy-related scriptures.
" dat += "Ark: The cult's win condition, a huge structure that needs to be defended.

" dat += "Items
" dat += "Slab: A clockwork slab, a Servant's most important tool. You're holding one! Keep it safe and hidden.
" - dat += "Visor: A judicial visor, which is a pair of glasses that can stun everything in an area after a delay.
" + dat += "Visor: A judicial visor, which is a pair of glasses that can smite an area for a brief stun and delayed explosion.
" dat += "Wraith Specs: Wraith spectacles, which provide true sight (x-ray, night vision) but damage the wearer's eyes.
" - dat += "Spear: A Ratvarian spear, which is a very powerful melee weapon.
" + dat += "Spear: A Ratvarian spear, which is a very powerful melee weapon that produces Vitality.
" dat += "Fabricator: A replica fabricator, which converts objects into clockwork versions.

" dat += "Constructs
" - dat += "Vessel: A soul vessel, a clockwork brain used to activate constructs.
" - dat += "Shell: A construct shell of some type that can accept a soul vessel to activate.
" - dat += "Scarab: A cogscarab construct, which is a drone that maintains the cult's bases.
" - dat += "Fragment: An anim[prob(1) ? "e" : "a"] fragment, which is a fragile but powerful offensive construct.
" dat += "Marauder: A clockwork marauder, which is a powerful bodyguard that hides in its owner.

" dat += "Structures (* = requires power)
" dat += "Warden: An ocular warden, which is a ranged turret that damages non-Servants that see it.
" @@ -432,8 +426,9 @@ dat += "Note: Sigils can be stacked on top of one another, making certain sigils very effective when paired!
" dat += "Transgression: Stuns the first non-Servant to cross it for ten seconds and blinds others nearby. Disappears on use.
" dat += "Submission: Converts the first non-Servant to stand on the sigil for seven seconds. Disappears on use.
" + dat += "Matrix: Drains health from non-Servants, producing Vitality. Can heal and revive Servants.
" dat += "Accession: Identical to the Sigil of Submission, but doesn't disappear on use. It can also convert a single mindshielded target, but will disappear after doing this.
" - dat += "Transmission: Drains and stores power for clockwork structures. Feeding it brass sheets will create power.

" + dat += "Transmission: Drains and stores power for clockwork structures. Feeding it brass sheets will create additional power.

" dat += "-=-=-=-=-=-" if("Components") var/servants = 0 //Calculate the current production time for slab components @@ -465,7 +460,7 @@ dat += "Components are your primary resource as a Servant. There are five types of component, with each one being used in different roles:

" dat += "[get_component_icon(BELLIGERENT_EYE)]BE Belligerent Eyes are aggressive and judgemental, and are used in offensive scripture;
" dat += "[get_component_icon(VANGUARD_COGWHEEL)]VC Vanguard Cogwheels are defensive and repairing, and are used in defensive scripture;
" - dat += "[get_component_icon(GEIS_CAPACITOR)]GC Geis Capacitors are for conversion and control, and are used in mind-related scripture;
" //References the old name + dat += "[get_component_icon(GEIS_CAPACITOR)]GC Geis Capacitors are for conversion and control, and are used in mind-related scripture;
" dat += "[get_component_icon(REPLICANT_ALLOY)]RA Replicant Alloy is a strong, malleable metal and is used for construction and creation;
" dat += "[get_component_icon(HIEROPHANT_ANSIBLE)]HA Hierophant Ansibles are for transmission and power, and are used in power and teleportation scripture

" dat += "Although this is a good rule of thumb, their effects become much more nuanced when used together. For instance, a turret might have both belligerent eyes and \ @@ -503,8 +498,8 @@ and can be harnessed in several ways.

" dat += "To begin with, if there is no other source of power nearby, structures will draw from the area's APC, assuming it has one. This is inefficient and ill-advised as \ anything but a last resort. Instead, it is recommended that a Sigil of Transmission is created. This sigil serves as both battery and power generator for nearby clockwork \ - structures, and those structures will happily draw power from the sigil before they resort to pathetic APCs and other sources of energy.

" - dat += "The most reliable and efficient way to generate power is by using brass sheets; attacking a sigil of transmission with brass sheets will convert them \ + structures, and those structures will happily draw power from the sigil before they resort to APCs.

" + dat += "Generating power is less easy. The most reliable and efficient way is using brass sheets; attacking a sigil of transmission with brass sheets will convert them \ to power, at a rate of [POWER_FLOOR]W per sheet. (Brass sheets are created from replica fabricators, which are explained more in detail in the Conversion section.) \ Activating a sigil of transmission will also cause it to drain power from the nearby area, which, while effective, serves as an obvious tell that there is something wrong.

" dat += "Without power, many structures will not function, making a base vulnerable to attack. For this reason, it is critical that you keep an eye on your power reserves and \ @@ -516,15 +511,15 @@ they become a full-fledged Servant, ready and willing to serve the cause of Ratvar. It should also be noted that silicon crew, such as cyborgs and the AI, can be \ converted just like normal crew and will gain special abilities; this is covered later. This section will also cover converting the station's structure itself; walls, \ floors, windows, tables, and other objects can all be converted into clockwork versions, and serve an important purpose.

" - dat += "Methods of Conversion: There are several ways to convert humans and silicons. The first and most readily-available of these is \ - Geis, a Driver-tier scripture. Using it whispers an invocation very quickly - this is incredibly obvious - and charges your slab with power. In addition to making \ - the slab visible in your hand, you can now use it on a target within melee range to bind them and begin converting them. While there are six or fewer Servants, they are \ - unable to escape this binding, meaning that unless you are interrupted, the target is as good as yours. However, the scripture becomes slower for every Servant human or \ - silicon Servant past [SCRIPT_SERVANT_REQ], and the bindings can be resisted past this, meaning that eventually other methods become more desirable.

" - dat += "The other three methods of conversion are the sigils of submission and accession, whose purpose is to do so, and the mania motor. The sigil of \ - submission is a sigil that, when stood on by a non-Servant for seven full seconds, will convert that non-Servant. This time requirement does not scale with \ - Servants, making it the preferred option after Geis becomes too inefficient. It is, however, consumed after use; the sigil of accession solves this problem, and serves as a \ - permanent conversion sigil. The mania motor is generally unreliable, only converting those who stand near it for an extended period.

" + dat += "A Note on Geis: There are several ways to convert humans and silicons. However, the most important tool to making them work is \ + Geis, a Driver-tier scripture. Using it whispers an invocation very quickly and charges your slab with power. In addition to making the slab visible in your hand, \ + you can now use it on a target within melee range to bind and mute them. It is by far your most reliable tool for capturing potential converts and targets, though it is incredibly \ + obvious. In addition, you are unable to take any actions other than moving while your target is bound. The binding will last for 25 seconds and mute for about 13 seconds, though \ + allies can use Geis to refresh these effects.

" + dat += "Converting: The two methods of conversion are the sigil of submission, whose purpose is to do so, and the mania motor. \ + The sigil of submission is a sigil that, when stood on by a non-Servant for eight seconds, will convert that non-Servant. This is the only practical way to convert targets. \ + Sigils of submission are cheap, early, and permanent! Make sure sigils of submission are placed only in bases or otherwise hidden spots, or with a sigil of transgression on them. \ + The mania motor, however, is generally unreliable and unlocked later, only converting those who stand near it for an extended period.

" dat += "Converting Humans: For obvious reasons, humans are the most common conversion target. Because every crew member is different, and \ may be armed with different equipment, you should take precautions to ensure that they aren't able to resist. If able, removing a headset is essential, as is restraining \ them through handcuffs, cable ties, or other restraints. Some crew, like security, are also implanted with mindshield implants; these will prevent conversion and must be \ @@ -532,9 +527,8 @@ begins administering mindshield implants, this will greatly inhibit conversion. Also note that mindshield implants can be broken by a sigil of accession automatically, but \ the sigil will disappear.

" dat += "Converting Silicons: Due to their robotic nature, silicons are generally more predictable than humans in terms of conversion. \ - However, they are also much, much harder to subdue, especially cyborgs. The easiest way to convert a cyborg is by using a flash or a sigil of transgression to stun it, \ - then very quickly using Geis to restrain them. If you stack a sigil of transgression and one of the conversion sigils, a crossing cyborg will be stunned and helpless to \ - escape in time before the other sigil converts them.

" + However, they are also much, much harder to subdue, especially cyborgs. The easiest way to convert a cyborg is by using Geis to restrain them, then dragging them to a sigil \ + of submission. If you stack a sigil of transgression and a sigil of submission, a crossing cyborg will be stunned and helpless to escape before they are converted.

" dat += "Converting AIs is very often the hardest task of the cult, and has been the downfall of countless successful Servants. Their omnipresence across the station, \ coupled with their secure location and ability to lock themselves securely, makes them a powerful target. However, once the AI itself is reached, it is usually completely \ helpless to resist its own conversion. A very common tactic is to take advantage of a converted cyborg to rush the AI before it is able to react.

" diff --git a/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm b/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm index 8bc6cb5603..fb210625a2 100644 --- a/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm +++ b/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm @@ -145,7 +145,7 @@ return TRUE return FALSE -//Judicial marker: Created by the judicial visor. After three seconds, knocks down any non-Servants nearby and damages Nar-Sian cultists. +//Judicial marker: Created by the judicial visor. Immediately applies Belligerent and briefly knocks down, then after 3 seconds does large damage and briefly knocks down again /obj/effect/clockwork/judicial_marker name = "judicial marker" desc = "You get the feeling that you shouldn't be standing here." @@ -165,11 +165,18 @@ /obj/effect/clockwork/judicial_marker/proc/judicialblast() playsound(src, 'sound/magic/magic_missile.ogg', 50, 1, 1, 1) flick("judicial_marker", src) + for(var/mob/living/carbon/C in range(1, src)) + var/datum/status_effect/belligerent/B = C.apply_status_effect(STATUS_EFFECT_BELLIGERENT) + if(!QDELETED(B)) + B.duration = world.time + 30 + C.Knockdown(5) //knocks down for half a second if affected sleep(16) + name = "judicial blast" layer = ABOVE_ALL_MOB_LAYER flick("judicial_explosion", src) set_light(1.4, 2, "#B451A1") sleep(13) + name = "judicial explosion" var/targetsjudged = 0 playsound(src, 'sound/effects/explosionfar.ogg', 100, 1, 1, 1) set_light(0) @@ -181,21 +188,19 @@ L.visible_message("Strange energy flows into [L]'s [I.name]!", \ "Your [I.name] shields you from [src]!") continue + L.Knockdown(15) //knocks down briefly when exploding if(!iscultist(L)) L.visible_message("[L] is struck by a judicial explosion!", \ "[!issilicon(L) ? "An unseen force slams you into the ground!" : "ERROR: Motor servos disabled by external source!"]") - L.Knockdown(160) //knocks down targets for 14-16 seconds else L.visible_message("[L] is struck by a judicial explosion!", \ "\"Keep an eye out, filth.\"\nA burst of heat crushes you against the ground!") - L.Knockdown(80) //knocks down for 6-8 seconds, but set cultist targets on fire - L.adjust_fire_stacks(2) + L.adjust_fire_stacks(2) //sets cultist targets on fire L.IgniteMob() - if(iscarbon(L)) - var/mob/living/carbon/C = L - C.silent += 6 + L.adjustFireLoss(5) targetsjudged++ - L.adjustBruteLoss(10) //do a small amount of damage + if(!QDELETED(L)) + L.adjustBruteLoss(20) //does a decent amount of damage add_logs(user, L, "struck with a judicial blast") to_chat(user, "[targetsjudged ? "Successfully judged [targetsjudged]":"Judged no"] heretic[targetsjudged == 1 ? "":"s"].") sleep(3) //so the animation completes properly diff --git a/code/game/gamemodes/clock_cult/clock_items/ratvarian_spear.dm b/code/game/gamemodes/clock_cult/clock_items/ratvarian_spear.dm index 8ba151830b..c1ea55e16d 100644 --- a/code/game/gamemodes/clock_cult/clock_items/ratvarian_spear.dm +++ b/code/game/gamemodes/clock_cult/clock_items/ratvarian_spear.dm @@ -6,14 +6,16 @@ icon = 'icons/obj/clockwork_objects.dmi' icon_state = "ratvarian_spear" item_state = "ratvarian_spear" + lefthand_file = 'icons/mob/inhands/antag/clockwork_lefthand.dmi' + righthand_file = 'icons/mob/inhands/antag/clockwork_righthand.dmi' force = 15 //Extra damage is dealt to targets in attack() - throwforce = 40 + throwforce = 25 + armour_penetration = 10 sharpness = IS_SHARP_ACCURATE attack_verb = list("stabbed", "poked", "slashed") hitsound = 'sound/weapons/bladeslice.ogg' w_class = WEIGHT_CLASS_BULKY - var/impale_cooldown = 50 //delay, in deciseconds, where you can't impale again - var/attack_cooldown = 10 //delay, in deciseconds, where you can't attack with the spear + var/bonus_burn = 5 var/timerid /obj/item/clockwork/ratvarian_spear/Destroy() @@ -22,107 +24,44 @@ /obj/item/clockwork/ratvarian_spear/ratvar_act() if(GLOB.ratvar_awakens) //If Ratvar is alive, the spear is extremely powerful - force = 25 - throwforce = 50 - armour_penetration = 10 + force = 20 + bonus_burn = 10 + throwforce = 40 + armour_penetration = 50 clockwork_desc = initial(clockwork_desc) deltimer(timerid) else force = initial(force) + bonus_burn = initial(bonus_burn) throwforce = initial(throwforce) - armour_penetration = 0 + armour_penetration = initial(armour_penetration) clockwork_desc = "A powerful spear of Ratvarian making. It's more effective against enemy cultists and silicons, though it won't last for long." deltimer(timerid) timerid = addtimer(CALLBACK(src, .proc/break_spear), RATVARIAN_SPEAR_DURATION, TIMER_STOPPABLE) /obj/item/clockwork/ratvarian_spear/cyborg/ratvar_act() //doesn't break! - if(GLOB.ratvar_awakens) - force = 25 - throwforce = 50 - armour_penetration = 10 - else - force = initial(force) - throwforce = initial(throwforce) - armour_penetration = 0 + ..() + clockwork_desc = "A powerful spear of Ratvarian making. It's more effective against enemy cultists and silicons." + deltimer(timerid) /obj/item/clockwork/ratvarian_spear/examine(mob/user) ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "Stabbing a human you are pulling or have grabbed with the spear will impale them, doing massive damage and stunning.") + to_chat(user, "Attacks on living non-Servants will generate [bonus_burn] units of vitality.") if(!iscyborg(user)) to_chat(user, "Throwing the spear will do massive damage, break the spear, and knock down the target.") /obj/item/clockwork/ratvarian_spear/attack(mob/living/target, mob/living/carbon/human/user) - var/impaling = FALSE - if(attack_cooldown > world.time) - to_chat(user, "You can't attack right now, wait [max(round((attack_cooldown - world.time)*0.1, 0.1), 0)] seconds!") - return - if(user.pulling && ishuman(user.pulling) && user.pulling == target) - if(impale_cooldown > world.time) - to_chat(user, "You can't impale [target] yet, wait [max(round((impale_cooldown - world.time)*0.1, 0.1), 0)] seconds!") - else - impaling = TRUE - attack_verb = list("impaled") - force += 22 //total 40 damage if ratvar isn't alive, 50 if he is - armour_penetration += 10 //if you're impaling someone, armor sure isn't that useful - user.stop_pulling() - - if(hitsound) - playsound(loc, hitsound, get_clamped_volume(), 1, -1) - user.lastattacked = target - target.lastattacker = user - user.do_attack_animation(target) - if(!target.attacked_by(src, user)) //TODO MAKE ATTACK() USE PROPER RETURN VALUES - impaling = FALSE //if we got blocked, stop impaling - else if(!target.null_rod_check()) //if they don't have a null rod, we do bonus damage on a successful attack + . = ..() + if(!QDELETED(target) && target.stat != DEAD && !target.null_rod_check() && !is_servant_of_ratvar(target)) //we do bonus damage on attacks unless they're a servant, have a null rod, or are dead + var/bonus_damage = bonus_burn //normally a total of 20 damage, 30 with ratvar if(issilicon(target)) - var/mob/living/silicon/S = target - if(S.stat != DEAD) - S.visible_message("[S] shudders violently at [src]'s touch!", "ERROR: Temperature rising!") - S.adjustFireLoss(22) //total 37 damage on borgs + target.visible_message("[target] shudders violently at [src]'s touch!", "ERROR: Temperature rising!") + bonus_damage *= 5 //total 40 damage on borgs, 70 with ratvar else if(iscultist(target) || isconstruct(target)) - var/mob/living/M = target - if(M.stat != DEAD) - to_chat(M, "Your body flares with agony at [src]'s presence!") - M.adjustFireLoss(15) //total 30 damage on cultists - else - target.adjustFireLoss(3) //anything else takes a total of 18 - add_logs(user, target, "attacked", src.name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") - add_fingerprint(user) - - attack_verb = list("stabbed", "poked", "slashed") - ratvar_act() - if(impaling) - impale_cooldown = world.time + initial(impale_cooldown) - attack_cooldown = world.time + initial(attack_cooldown) //can't attack until we're done impaling - if(target) - new /obj/effect/temp_visual/dir_setting/bloodsplatter(get_turf(target), get_dir(user, target)) - target.Stun(80) //brief stun - to_chat(user, "You prepare to remove your ratvarian spear from [target]...") - var/remove_verb = pick("pull", "yank", "drag") - if(do_after(user, 10, 1, target)) - var/turf/T = get_turf(target) - var/obj/effect/temp_visual/dir_setting/bloodsplatter/B = new /obj/effect/temp_visual/dir_setting/bloodsplatter(T, get_dir(target, user)) - playsound(T, 'sound/misc/splort.ogg', 200, 1) - playsound(T, 'sound/weapons/pierce.ogg', 200, 1) - if(target.stat != CONSCIOUS) - user.visible_message("[user] [remove_verb]s [src] out of [target]!", "You [remove_verb] your spear from [target]!") - else - user.visible_message("[user] kicks [target] off of [src]!", "You kick [target] off of [src]!") - to_chat(target, "You scream in pain as you're kicked off of [src]!") - target.emote("scream") - step(target, get_dir(user, target)) - T = get_turf(target) - B.forceMove(T) - target.Knockdown(40) //then knockdown if we stayed next to them - playsound(T, 'sound/weapons/thudswoosh.ogg', 50, 1) - flash_color(target, flash_color="#911414", flash_time=8) - else if(target) //it's a do_after, we gotta check again to make sure they didn't get deleted - user.visible_message("[user] [remove_verb]s [src] out of [target]!", "You [remove_verb] your spear from [target]!") - if(target.stat == CONSCIOUS) - to_chat(target, "You scream in pain as [src] is suddenly [remove_verb]ed out of you!") - target.emote("scream") - flash_color(target, flash_color="#911414", flash_time=4) + to_chat(target, "Your body flares with agony at [src]'s presence!") + bonus_damage *= 3 //total 30 damage on cultists, 50 with ratvar + GLOB.clockwork_vitality += target.adjustFireLoss(bonus_damage) //adds the damage done to existing vitality /obj/item/clockwork/ratvarian_spear/throw_impact(atom/target) var/turf/T = get_turf(target) @@ -139,6 +78,7 @@ L.Knockdown(100) else L.Knockdown(40) + GLOB.clockwork_vitality += L.adjustFireLoss(bonus_burn * 3) //normally a total of 40 damage, 70 with ratvar break_spear(T) else ..() diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm index d4d6155461..d0b7f11eb4 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm @@ -2,28 +2,6 @@ // APPLICATIONS // ////////////////// -//Sigil of Accession: Creates a sigil of accession, which is like a sigil of submission, but can convert any number of non-implanted targets and up to one implanted target. -/datum/clockwork_scripture/create_object/sigil_of_accession - descname = "Trap, Permanent Conversion" - name = "Sigil of Accession" - desc = "Places a luminous sigil much like a Sigil of Submission, but it will remain even after successfully converting a non-implanted target. \ - It will penetrate mindshield implants once before disappearing." - invocations = list("Divinity, enslave...", "...all who trespass here!") - channel_time = 70 - consumed_components = list(BELLIGERENT_EYE = 4, GEIS_CAPACITOR = 2, HIEROPHANT_ANSIBLE = 2) - whispered = TRUE - object_path = /obj/effect/clockwork/sigil/submission/accession - prevent_path = /obj/effect/clockwork/sigil/submission - creator_message = "A luminous sigil appears below you. All non-servants to cross it will be enslaved after a brief time if they do not move." - usage_tip = "It will remain after converting a target, unless that target has a mindshield implant, which it will break to convert them, but consume itself in the process." - tier = SCRIPTURE_APPLICATION - one_per_tile = TRUE - primary_component = BELLIGERENT_EYE - sort_priority = 1 - quickbind = TRUE - quickbind_desc = "Creates a Sigil of Accession, which can convert a mindshielded non-Servant that remains on it." - - //Fellowship Armory: Arms the invoker and nearby servants with Ratvarian armor. /datum/clockwork_scripture/fellowship_armory descname = "Area Servant Armor" @@ -151,26 +129,6 @@ return TRUE -//Anima Fragment: Creates an empty anima fragment, which produces an anima fragment that moves at extreme speed and does high damage. -/datum/clockwork_scripture/create_object/anima_fragment - descname = "Fast Soul Vessel Shell" - name = "Anima Fragment" - desc = "Creates a large shell fitted for soul vessels. Adding an active soul vessel to it results in a powerful construct with decent health and slight regeneration, notable melee power, \ - and exceptional speed, though taking damage will temporarily slow it down." - invocations = list("Call forth...", "...the soldiers of Armorer.") - channel_time = 80 - consumed_components = list(BELLIGERENT_EYE = 2, VANGUARD_COGWHEEL = 2, REPLICANT_ALLOY = 4) - object_path = /obj/structure/destructible/clockwork/shell/fragment - creator_message = "You form an anima fragment, a powerful soul vessel receptacle." - observer_message = "The slab disgorges a puddle of black metal that expands and forms into a strange shell!" - usage_tip = "Useless without a soul vessel and should not be created without one." - tier = SCRIPTURE_APPLICATION - primary_component = REPLICANT_ALLOY - sort_priority = 4 - quickbind = TRUE - quickbind_desc = "Creates a Fragment Shell, which produces an Anima Fragment when filled with a Soul Vessel." - - //Sigil of Transmission: Creates a sigil of transmission that can drain and store power for clockwork structures. /datum/clockwork_scripture/create_object/sigil_of_transmission descname = "Structure Power Generator & Battery" diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_cyborg.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_cyborg.dm index 85574db6b9..819dfac72e 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_cyborg.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_cyborg.dm @@ -37,7 +37,7 @@ invocations = list("May heathens...", "...kneel under our force!") channel_time = 30 primary_component = BELLIGERENT_EYE - quickbind_desc = "Allows you to place a Judicial Marker to knock down and damage non-Servants in an area.
Click your slab to disable." + quickbind_desc = "Allows you to smite an area, applying Belligerent and briefly stunning.
Click your slab to disable." slab_overlay = "judicial" ranged_type = /obj/effect/proc_holder/slab/judicial ranged_message = "You charge the clockwork slab with judicial force.\n\ diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm index 91ad4d586b..7818f9fae8 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm @@ -28,20 +28,20 @@ /datum/clockwork_scripture/create_object/judicial_visor descname = "Delayed Area Knockdown Glasses" name = "Judicial Visor" - desc = "Forms a visor that, when worn, will grant the ability to smite an area, knocking down, muting, and damaging non-Servants." + desc = "Creates a visor that can smite an area, applying Belligerent and briefly stunning. The smote area will explode after 3 seconds." invocations = list("Grant me the flames of Engine!") channel_time = 10 consumed_components = list(BELLIGERENT_EYE = 1) whispered = TRUE object_path = /obj/item/clothing/glasses/judicial_visor - creator_message = "You form a judicial visor, which is capable of smiting the unworthy." - usage_tip = "The visor has a thirty-second cooldown once used, and the marker it creates has a delay of 3 seconds before exploding." + creator_message = "You form a judicial visor, which is capable of smiting a small area." + usage_tip = "The visor has a thirty-second cooldown once used." tier = SCRIPTURE_DRIVER space_allowed = TRUE primary_component = BELLIGERENT_EYE sort_priority = 2 quickbind = TRUE - quickbind_desc = "Creates a Judicial Visor, which can create a Judicial Marker at an area, knocking down, muting, and damaging non-Servants after a delay." + quickbind_desc = "Creates a Judicial Visor, which can smite an area, applying Belligerent and briefly stunning." //Vanguard: Provides twenty seconds of stun immunity. At the end of the twenty seconds, 25% of all stuns absorbed are applied to the invoker. @@ -97,28 +97,28 @@ Click your slab to cancel." -//Geis: Grants a short-range binding that will immediately start chanting on binding a valid target. -/datum/clockwork_scripture/ranged_ability/geis_prep - descname = "Melee Convert Attack" +//Geis: Grants a short-range binding attack that allows you to mute and drag around a target in a very obvious manner. +/datum/clockwork_scripture/ranged_ability/geis + descname = "Melee Mute & Stun" name = "Geis" - desc = "Charges your slab with divine energy, allowing you to bind a nearby heretic for conversion. This is very obvious and will make your slab visible in-hand." - invocations = list("Divinity, grant...", "...me strength...", "...to enlighten...", "...the heathen!") + desc = "Charges your slab with divine energy, allowing you to bind and pull a struck heretic." + invocations = list("Divinity, grant me strength...", "...to bind the heathen!") whispered = TRUE channel_time = 20 - usage_tip = "Is melee range and does not penetrate mindshield implants. Much more efficient than a Sigil of Submission at low Servant amounts." + usage_tip = "You CANNOT TAKE ANY NON-PULL ACTIONS while the target is bound, so Sigils of Submission should be placed before use." tier = SCRIPTURE_DRIVER primary_component = GEIS_CAPACITOR sort_priority = 5 quickbind = TRUE - quickbind_desc = "Allows you to bind and start converting an adjacent target non-Servant.
Click your slab to disable." + quickbind_desc = "Allows you to bind and mute an adjacent target non-Servant.
Click your slab to disable." slab_overlay = "geis" ranged_type = /obj/effect/proc_holder/slab/geis ranged_message = "You charge the clockwork slab with divine energy.\n\ - Left-click a target within melee range to convert!\n\ + Left-click a target within melee range to bind!\n\ Click your slab to cancel." timeout_time = 100 -/datum/clockwork_scripture/ranged_ability/geis_prep/run_scripture() +/datum/clockwork_scripture/ranged_ability/geis/run_scripture() var/servants = 0 if(!GLOB.ratvar_awakens) for(var/mob/living/M in GLOB.living_mob_list) @@ -130,93 +130,25 @@ channel_time = min(channel_time + servants*3, 50) return ..() -//The scripture that does the converting. -/datum/clockwork_scripture/geis - name = "Geis Conversion" - invocations = list("Enlighten this heathen!", "All are insects before Engine!", "Purge all untruths and honor Engine.") - channel_time = 49 - tier = SCRIPTURE_PERIPHERAL - var/mob/living/target - var/obj/structure/destructible/clockwork/geis_binding/binding -/datum/clockwork_scripture/geis/Destroy() - if(binding && !QDELETED(binding)) - qdel(binding) - return ..() - -/datum/clockwork_scripture/geis/can_recite() - if(!target) - return FALSE - return ..() - -/datum/clockwork_scripture/geis/run_scripture() - var/servants = 0 - if(!GLOB.ratvar_awakens) - for(var/mob/living/M in GLOB.living_mob_list) - if(can_recite_scripture(M, TRUE)) - servants++ - if(target.buckled) - target.buckled.unbuckle_mob(target, TRUE) - binding = new(get_turf(target)) - if(servants > SCRIPT_SERVANT_REQ) - servants -= SCRIPT_SERVANT_REQ - channel_time = min(channel_time + servants*7, 120) - binding.can_resist = TRUE - binding.setDir(target.dir) - binding.buckle_mob(target, TRUE) - return ..() - -/datum/clockwork_scripture/geis/check_special_requirements() - return target && binding && target.buckled == binding && !is_servant_of_ratvar(target) && target.stat != DEAD - -/datum/clockwork_scripture/geis/scripture_effects() - . = add_servant_of_ratvar(target) - if(.) - add_logs(invoker, target, "Converted", object = "Geis") - - -//Taunting Tirade: Channeled for up to five times over thirty seconds. Confuses non-servants that can hear it and allows movement for a brief time after each chant. -/datum/clockwork_scripture/channeled/taunting_tirade - descname = "Channeled, Mobile Confusion Trail" - name = "Taunting Tirade" - desc = "Allows movement for five seconds, leaving a trail that confuses and knocks down. Chanted every second for up to thirty seconds." - chant_invocations = list("Hostiles on my back!", "Enemies on my trail!", "Gonna try and shake my tail.", "Bogeys on my six!") - chant_amount = 5 - chant_interval = 10 +//Sigil of Submission: Creates a sigil of submission, which converts one heretic above it after a delay. +/datum/clockwork_scripture/create_object/sigil_of_submission + descname = "Trap, Conversion" + name = "Sigil of Submission" + desc = "Places a luminous sigil that will convert any non-Servants that remain on it for 8 seconds." + invocations = list("Divinity, enlighten...", "...those who trespass here!") + channel_time = 60 consumed_components = list(GEIS_CAPACITOR = 1) - usage_tip = "Useful for fleeing attackers, as few will be able to follow someone using this scripture." + whispered = TRUE + object_path = /obj/effect/clockwork/sigil/submission + creator_message = "A luminous sigil appears below you. Any non-Servants to cross it will be converted after 8 seconds if they do not move." + usage_tip = "This is the primary conversion method, though it will not penetrate mindshield implants." tier = SCRIPTURE_DRIVER + one_per_tile = TRUE primary_component = GEIS_CAPACITOR sort_priority = 6 quickbind = TRUE - quickbind_desc = "Allows movement for five seconds, leaving a trail that confuses and knocks down.
Maximum 5 chants." - var/flee_time = 47 //allow fleeing for 5 seconds - var/grace_period = 3 //very short grace period so you don't have to stop immediately - var/datum/progressbar/progbar - -/datum/clockwork_scripture/channeled/taunting_tirade/chant_effects(chant_number) - invoker.visible_message("[invoker] is suddenly covered with a thin layer of purple smoke!") - var/invoker_old_color = invoker.color - invoker.color = list("#AF0AAF", "#AF0AAF", "#AF0AAF", rgb(0,0,0)) - animate(invoker, color = invoker_old_color, time = flee_time+grace_period) - addtimer(CALLBACK(invoker, /atom/proc/update_atom_colour), flee_time+grace_period) - var/endtime = world.time + flee_time - progbar = new(invoker, flee_time, invoker) - progbar.bar.color = list("#AF0AAF", "#AF0AAF", "#AF0AAF", rgb(0,0,0)) - animate(progbar.bar, color = initial(progbar.bar.color), time = flee_time+grace_period) - while(world.time < endtime && can_recite()) - sleep(1) - new/obj/structure/destructible/clockwork/taunting_trail(invoker.loc) - progbar.update(endtime - world.time) - qdel(progbar) - if(can_recite() && chant_number != chant_amount) - sleep(grace_period) - else - return FALSE - return TRUE - -/datum/clockwork_scripture/channeled/taunting_tirade/chant_end_effects() - qdel(progbar) + quickbind_desc = "Creates a Sigil of Submission, which will convert non-Servants that remain on it." //Replicant: Creates a new clockwork slab. diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm index 47558a5ee9..0e42af3a65 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm @@ -29,31 +29,12 @@ return ..() -//Cogscarab: Creates an empty cogscarab shell, which produces a cogscarab dedicated to maintaining and defending the cult. -/datum/clockwork_scripture/create_object/cogscarab - descname = "Constructor Soul Vessel Shell" - name = "Cogscarab" - desc = "Creates a small shell fitted for soul vessels. Adding an active soul vessel to it results in a small construct with tools and an inbuilt fabricator." - invocations = list("Call forth...", "...the workers of Armorer.") - channel_time = 60 - consumed_components = list(BELLIGERENT_EYE = 2, HIEROPHANT_ANSIBLE = 1) - object_path = /obj/structure/destructible/clockwork/shell/cogscarab - creator_message = "You form a cogscarab, a constructor soul vessel receptacle." - observer_message = "The slab disgorges a puddle of black metal that contracts and forms into a strange shell!" - usage_tip = "Useless without a soul vessel and should not be created without one." - tier = SCRIPTURE_SCRIPT - primary_component = BELLIGERENT_EYE - sort_priority = 2 - quickbind = TRUE - quickbind_desc = "Creates a Cogscarab Shell, which produces a Cogscarab when filled with a Soul Vessel." - - //Vitality Matrix: Creates a sigil which will drain health from nonservants and can use that health to heal or even revive servants. /datum/clockwork_scripture/create_object/vitality_matrix descname = "Trap, Damage to Healing" name = "Vitality Matrix" - desc = "Places a sigil that drains life from any living non-Servants that cross it. Servants that cross it, however, will be healed based on how much Vitality all \ - Matrices have drained from non-Servants. Dead Servants can be revived by this sigil if there is vitality equal to the target Servant's non-oxygen damage." + desc = "Places a sigil that drains life from any living non-Servants that cross it, producing Vitality. Servants that cross it, however, will be healed using existing Vitality. \ + Dead Servants can be revived by this sigil at a cost of 150 Vitality." invocations = list("Divinity...", "...steal their life...", "...for these shells!") channel_time = 60 consumed_components = list(BELLIGERENT_EYE = 1, VANGUARD_COGWHEEL = 2) @@ -181,46 +162,6 @@ return TRUE -//Sigil of Submission: Creates a sigil of submission, which converts one heretic above it after a delay. -/datum/clockwork_scripture/create_object/sigil_of_submission - descname = "Trap, Conversion" - name = "Sigil of Submission" - desc = "Places a luminous sigil that will enslave any valid beings standing on it after a time." - invocations = list("Divinity, enlighten...", "...those who trespass here!") - channel_time = 60 - consumed_components = list(BELLIGERENT_EYE = 1, GEIS_CAPACITOR = 2) - whispered = TRUE - object_path = /obj/effect/clockwork/sigil/submission - creator_message = "A luminous sigil appears below you. The next non-servant to cross it will be enslaved after a brief time if they do not move." - usage_tip = "This is not a primary conversion method - use Geis for that. It is advantageous as a trap, however, as it will transmit the name of the newly-converted." - tier = SCRIPTURE_SCRIPT - one_per_tile = TRUE - primary_component = GEIS_CAPACITOR - sort_priority = 5 - quickbind = TRUE - quickbind_desc = "Creates a Sigil of Submission, which will convert one non-Servant that remains on it." - - -//Soul Vessel: Creates a soul vessel, which can seek a ghost or be used on the uncovered head of a dead or dying human to take their brain. -/datum/clockwork_scripture/create_object/soul_vessel - descname = "Clockwork Posibrain" - name = "Soul Vessel" - desc = "Forms an ancient positronic brain with an overriding directive to serve Ratvar." - invocations = list("Herd the souls of...", "...the blasphemous damned!") - channel_time = 30 - consumed_components = list(VANGUARD_COGWHEEL = 1, GEIS_CAPACITOR = 2) - whispered = TRUE - object_path = /obj/item/device/mmi/posibrain/soul_vessel - creator_message = "You form a soul vessel, which can be used in-hand to attract spirits, or used on an unconscious or dead human to extract their consciousness." - usage_tip = "The vessel can be used as a teleport target for Spatial Gateway, though it is generally better-used by placing it in a shell or cyborg body." - tier = SCRIPTURE_SCRIPT - space_allowed = TRUE - primary_component = GEIS_CAPACITOR - sort_priority = 6 - quickbind = TRUE - quickbind_desc = "Creates a Soul Vessel, which can be placed in construct shells and cyborg bodies once filled." - - //Replica Fabricator: Creates a replica fabricator, used to convert objects and repair clockwork structures. /datum/clockwork_scripture/create_object/replica_fabricator descname = "Replaces Objects with Ratvarian Versions" @@ -245,13 +186,12 @@ /datum/clockwork_scripture/function_call descname = "Permanent Summonable Spear" name = "Function Call" - desc = "Grants the invoker the ability to call forth a powerful Ratvarian spear every three minutes. The spear will deal significant damage to Nar-Sie's dogs and silicon lifeforms, but will \ - vanish three minutes after being summoned." + desc = "Grants the invoker the ability to call forth a powerful Ratvarian spear every 3 minutes, with it lasting 3 minutes. The spear's attacks will generate Vitality, used for healing." invocations = list("Grant me...", "...the might of brass!") channel_time = 20 consumed_components = list(REPLICANT_ALLOY = 2, HIEROPHANT_ANSIBLE = 1) whispered = TRUE - usage_tip = "You can impale human targets with the spear by pulling them, then attacking. Throwing the spear at a mob will do massive damage and knock them down, but break the spear." + usage_tip = "Throwing the spear at a mob will do massive damage and knock them down, but break the spear." tier = SCRIPTURE_SCRIPT primary_component = REPLICANT_ALLOY sort_priority = 8 @@ -345,50 +285,3 @@ portal_uses = max(portal_uses, 100) //Very powerful if Ratvar has been summoned duration = max(duration, 100) return slab.procure_gateway(invoker, duration, portal_uses) - - -//Volt Blaster: Channeled for up to five times over ten seconds to fire up to five rays of energy at target locations. -/datum/clockwork_scripture/channeled/volt_blaster - descname = "Channeled, Targeted Energy Blasts" - name = "Volt Blaster" - desc = "Allows you to fire five energy rays at target locations. Channeled every fourth of a second for a maximum of ten seconds." - channel_time = 30 - invocations = list("Amperage...", "...grant me your power!") - chant_invocations = list("Use charge to kill!", "Slay with power!", "Hunt with energy!") - chant_amount = 5 - chant_interval = 4 - consumed_components = list(GEIS_CAPACITOR = 1, HIEROPHANT_ANSIBLE = 2) - usage_tip = "Though it requires you to stand still, this scripture can do massive damage." - tier = SCRIPTURE_SCRIPT - primary_component = HIEROPHANT_ANSIBLE - sort_priority = 10 - quickbind = TRUE - quickbind_desc = "Allows you to fire energy rays at target locations.
Maximum 5 chants." - var/static/list/nzcrentr_insults = list("You're not very good at aiming.", "You hunt badly.", "What a waste of energy.", "Almost funny to watch.", - "Boss says \"Click something, you idiot!\".", "Stop wasting components if you can't aim.") - -/datum/clockwork_scripture/channeled/volt_blaster/chant_effects(chant_number) - slab.busy = null - var/datum/clockwork_scripture/ranged_ability/volt_ray/ray = new - ray.slab = slab - ray.invoker = invoker - var/turf/T = get_turf(invoker) - if(!ray.run_scripture() && slab && invoker) - if(can_recite() && T == get_turf(invoker)) - to_chat(invoker, "\"[text2ratvar(pick(nzcrentr_insults))]\"") - else - return FALSE - return TRUE - -/obj/effect/ebeam/volt_ray - name = "volt_ray" - layer = LYING_MOB_LAYER - -/datum/clockwork_scripture/ranged_ability/volt_ray - name = "Volt Ray" - slab_overlay = "volt" - allow_mobility = FALSE - ranged_type = /obj/effect/proc_holder/slab/volt - ranged_message = "You charge the clockwork slab with shocking might.\n\ - Left-click a target to fire, quickly!" - timeout_time = 20 diff --git a/code/game/gamemodes/clock_cult/clock_structures/clock_shells.dm b/code/game/gamemodes/clock_cult/clock_structures/clock_shells.dm deleted file mode 100644 index a2f1022abc..0000000000 --- a/code/game/gamemodes/clock_cult/clock_structures/clock_shells.dm +++ /dev/null @@ -1,48 +0,0 @@ -//Useless on their own, these shells can create powerful constructs. -/obj/structure/destructible/clockwork/shell - construction_value = 0 - anchored = FALSE - density = FALSE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/mobtype = /mob/living/simple_animal/hostile/clockwork - var/spawn_message = " is an error and you should yell at whoever spawned this shell." - -/obj/structure/destructible/clockwork/shell/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/device/mmi/posibrain/soul_vessel)) - if(!is_servant_of_ratvar(user)) - ..() - return 0 - var/obj/item/device/mmi/posibrain/soul_vessel/S = I - if(!S.brainmob) - to_chat(user, "[S] is inactive! Turn it on or capture a mind first.") - return 0 - if(S.brainmob && (!S.brainmob.client || !S.brainmob.mind)) - to_chat(user, "[S]'s trapped consciousness appears inactive!") - return 0 - user.visible_message("[user] places [S] in [src], where it fuses to the shell.", "You place [S] in [src], fusing it to the shell.") - var/mob/living/simple_animal/A = new mobtype(get_turf(src)) - A.visible_message("[src][spawn_message]") - S.brainmob.mind.transfer_to(A) - A.fully_replace_character_name(null, "[findtext(A.name, initial(A.name)) ? "[initial(A.name)]":"[A.name]"] ([S.brainmob.name])") - user.drop_item() - qdel(S) - qdel(src) - return 1 - else - return ..() - -/obj/structure/destructible/clockwork/shell/cogscarab - name = "cogscarab shell" - desc = "A small brass shell with a cube-shaped receptable in its center. It gives off an aura of obsessive perfectionism." - clockwork_desc = "A dormant receptable that, when powered with a soul vessel, will become a weak construct with an inbuilt fabricator." - icon_state = "clockdrone_shell" - mobtype = /mob/living/simple_animal/drone/cogscarab - spawn_message = "'s eyes blink open, glowing bright red." - -/obj/structure/destructible/clockwork/shell/fragment - name = "fragment shell" - desc = "A massive brass shell with a small cube-shaped receptable in its center. It gives off an aura of contained power." - clockwork_desc = "A dormant receptable that, when powered with a soul vessel, will become a powerful construct." - icon_state = "anime_fragment" - mobtype = /mob/living/simple_animal/hostile/clockwork/fragment - spawn_message = " whirs and rises from the ground on a flickering jet of reddish fire." diff --git a/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm b/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm index ecb69c8a27..82d1e68ff3 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm @@ -5,8 +5,9 @@ clockwork_desc = "A binding ring around a target, preventing them from taking action while they're being converted." max_integrity = 25 light_range = 2 - light_power = 0.5 + light_power = 0.8 light_color = "#AF0AAF" + anchored = FALSE density = FALSE immune_to_servant_attacks = TRUE icon = 'icons/effects/clockwork_effects.dmi' @@ -16,16 +17,34 @@ debris = list() can_buckle = TRUE buckle_lying = 0 - buckle_prevents_pull = TRUE - var/resisting = FALSE - var/can_resist = FALSE var/mob_layer = MOB_LAYER +/obj/structure/destructible/clockwork/geis_binding/Initialize(mapload, obj/item/clockwork/slab/the_slab) + . = ..() + START_PROCESSING(SSprocessing, src) + +/obj/structure/destructible/clockwork/geis_binding/Destroy() + STOP_PROCESSING(SSprocessing, src) + return ..() + /obj/structure/destructible/clockwork/geis_binding/examine(mob/user) icon_state = "geisbinding_full" ..() icon_state = "geisbinding" +/obj/structure/destructible/clockwork/geis_binding/process() + if(LAZYLEN(buckled_mobs)) + for(var/V in buckled_mobs) + var/mob/living/L = V + if(is_servant_of_ratvar(L)) //servants are freed automatically + take_damage(obj_integrity) + return + var/tick_damage = 1 + if(!is_servant_of_ratvar(pulledby)) + tick_damage++ + take_damage(tick_damage, sound_effect = FALSE) + playsound(src, 'sound/effects/empulse.ogg', tick_damage * 20, TRUE) + /obj/structure/destructible/clockwork/geis_binding/attack_hand(mob/living/user) return @@ -48,10 +67,8 @@ var/obj/item/geis_binding/B = new(M) M.put_in_hands(B, i) M.regenerate_icons() - M.visible_message("A [name] appears around [M]!", \ - "A [name] appears around you![can_resist ? "\nResist!":""]") - if(!can_resist) - repair_and_interrupt() + M.visible_message("A [name] appears around [M]!", "A [name] appears around you!") + repair_and_interrupt() else var/obj/effect/temp_visual/ratvar/geis_binding/G = new /obj/effect/temp_visual/ratvar/geis_binding(M.loc) var/obj/effect/temp_visual/ratvar/geis_binding/T = new /obj/effect/temp_visual/ratvar/geis_binding/top(M.loc) @@ -65,11 +82,6 @@ for(var/obj/item/geis_binding/GB in M.held_items) M.dropItemToGround(GB, TRUE) -/obj/structure/destructible/clockwork/geis_binding/relaymove(mob/user, direction) - if(isliving(user) && can_resist) - var/mob/living/L = user - L.resist() - /obj/structure/destructible/clockwork/geis_binding/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) playsound(src, 'sound/effects/empulse.ogg', 50, 1) @@ -79,7 +91,7 @@ update_icon() /obj/structure/destructible/clockwork/geis_binding/update_icon() - alpha = min(initial(alpha) + ((obj_integrity - max_integrity) * 5), 255) + alpha = min(255 * ((obj_integrity/max_integrity) + 0.2) , 255) /obj/structure/destructible/clockwork/geis_binding/proc/repair_and_interrupt() obj_integrity = max_integrity @@ -87,10 +99,10 @@ for(var/m in buckled_mobs) var/mob/living/L = m if(L) - L.Stun(20, 1, 1) + L.Stun(130, 1, 1) //basically here to act as a mute for borgs if(iscarbon(L)) var/mob/living/carbon/C = L - C.silent += 4 + C.silent += 7 visible_message("[src] flares brightly!") var/obj/effect/temp_visual/ratvar/geis_binding/G1 = new /obj/effect/temp_visual/ratvar/geis_binding(loc) var/obj/effect/temp_visual/ratvar/geis_binding/G2 = new /obj/effect/temp_visual/ratvar/geis_binding(loc) @@ -106,18 +118,7 @@ animate(T2, pixel_y = pixel_y - 9, alpha = 0, time = 8, easing = EASE_IN) /obj/structure/destructible/clockwork/geis_binding/user_unbuckle_mob(mob/living/buckled_mob, mob/user) - if(buckled_mob == user) - if(!resisting && can_resist) - resisting = TRUE - user.visible_message("[user] starts struggling against [src]...", "You start breaking out of [src]...") - while(do_after(user, 10, target = src) && resisting && obj_integrity) - if(obj_integrity - 5 <= 0) - user.visible_message("[user] breaks [src]!", "You break [src]!") - take_damage(5) - return user - take_damage(5) - resisting = FALSE - else + if(buckled_mob != user) return ..() /obj/item/geis_binding @@ -128,5 +129,4 @@ flags = NODROP|ABSTRACT|DROPDEL /obj/item/geis_binding/pre_attackby(atom/target, mob/living/user, params) - user.resist() return FALSE diff --git a/code/game/objects/effects/temporary_visuals/clockcult.dm b/code/game/objects/effects/temporary_visuals/clockcult.dm index b550871389..c3894b8300 100644 --- a/code/game/objects/effects/temporary_visuals/clockcult.dm +++ b/code/game/objects/effects/temporary_visuals/clockcult.dm @@ -78,56 +78,6 @@ animate(src, alpha = 20, time = duration, easing = BOUNCE_EASING, flags = ANIMATION_PARALLEL) animate(src, transform = M, time = duration, flags = ANIMATION_PARALLEL) -/obj/effect/temp_visual/ratvar/volt_hit - name = "volt blast" - layer = ABOVE_MOB_LAYER - duration = 8 - icon_state = "volt_hit" - light_range = 1.5 - light_power = 2 - light_color = LIGHT_COLOR_ORANGE - var/mob/user - var/damage = 25 - -/obj/effect/temp_visual/ratvar/volt_hit/Initialize(mapload, caster) - . = ..() - user = caster - if(user) - var/matrix/M = new - M.Turn(Get_Angle(src, user)) - transform = M - INVOKE_ASYNC(src, .proc/volthit) - -/obj/effect/temp_visual/ratvar/volt_hit/proc/volthit() - if(user) - Beam(get_turf(user), "volt_ray", time=duration, maxdistance=8, beam_type=/obj/effect/ebeam/volt_ray) - var/hit_amount = 0 - var/turf/T = get_turf(src) - for(var/mob/living/L in T) - if(is_servant_of_ratvar(L)) - continue - var/obj/item/I = L.null_rod_check() - if(I) - L.visible_message("Strange energy flows into [L]'s [I.name]!", \ - "Your [I.name] shields you from [src]!") - continue - L.visible_message("[L] is struck by a [name]!", "You're struck by a [name]!") - L.apply_damage(damage, BURN, "chest", L.run_armor_check("chest", "laser", "Your armor absorbs [src]!", "Your armor blocks part of [src]!", 0, "Your armor was penetrated by [src]!")) - add_logs(user, L, "struck with a volt blast") - hit_amount++ - for(var/obj/mecha/M in T) - if(M.occupant) - if(is_servant_of_ratvar(M.occupant)) - continue - to_chat(M.occupant, "Your [M.name] is struck by a [name]!") - M.visible_message("[M] is struck by a [name]!") - M.take_damage(damage, BURN, 0, 0) - hit_amount++ - if(hit_amount) - playsound(src, 'sound/machines/defib_zap.ogg', damage*hit_amount, 1, -1) - else - playsound(src, "sparks", 50, 1) - /obj/effect/temp_visual/ratvar/ocular_warden name = "warden's gaze" layer = ABOVE_MOB_LAYER @@ -232,9 +182,9 @@ light_power = 0.5 light_color = "#1E8CE1" -/obj/effect/temp_visual/ratvar/sigil/accession +/obj/effect/temp_visual/ratvar/sigil/submission color = "#AF0AAF" layer = ABOVE_MOB_LAYER - duration = 70 + duration = 80 icon_state = "sigilactiveoverlay" alpha = 0 diff --git a/icons/effects/geis_target_remove.dmi b/icons/effects/geis_target_remove.dmi new file mode 100644 index 0000000000000000000000000000000000000000..076f2f4ca5f8451d9e0ee6f1577dfb7f5f16e2f1 GIT binary patch literal 1013 zcmVV=-0C=3G%&`iCFcgL1IeChMu2M`}$1EjM9P}LmxitZ6B)RD8cd*dC+5R(} zug0T)4in5c$emISafQbH(n@gz#~vEDs}!EX?D-s-EfX{to(tq43l^QPDx!j1`pGJ*-GBD#HKfZKo3m;*ZkN^M!8%ab# zRCt{2o4-q2Q545Nd9g?Z1#Ks%DiqvZN^yA5Ev2Gs7N`0rUdnNCOIgxX|Q%LSRpY!f{dH2V;rxryKCOHMJFWcMUS=FFC zHZ}3b0?^(L&-NFqbs~>VZT!I1aC082aw3mSjr_pXkn`nAoXBHSD?e~Ggw4`UyTqy`p~)of~-n=b)9ordw|v>@2{>3*hGxu))gTlgmkOUMt@jfVdIw zWDLH74IEBI3kDLJT!0F#}opuyx z1Nb^ZBYzZt1l~-(-x@aP)?2S10RaBr68NvwJ)RC7$##NPel3ckG<*w(y7kt)&k1-G ze&@26I5KiVGrxAcaO{GgW-e&E1{vrlKRe+q{y$MeWf|?{vs(Tf<4QXQ4BlBE`O-Ps z4$t=IVDk-de$HT;1#mK&Y8~A|^V?vwj~lVWy!$EB%6D!@o2Dmw1qt(Q5Eka!G*p;x z3o&87ZAA$4Z8J`oKNf&8Te@YpgEjKKN%`lppZ?tW-lTkyr>9IOXyyBp@&({UozTo5 zjR9j$6ojXh$EH^PgF!fbL0Nban;QAvSx^=5A~v=0z3YIg;6-d|;yVLinx0$<8C43y zP?T@=0m8ES0AX2ufUvASKv-5EAS|m75SG;k2+QgNgrzwKd6V*0Ihx0&G+#pM j>jR{xq3Y`cqyz8|gTXI8Xvcct00000NkvXXu0mjf8Y|n{ literal 0 HcmV?d00001 diff --git a/strings/tips.txt b/strings/tips.txt index 4d1a8aa28a..0d1922b835 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -102,8 +102,8 @@ As the Bartender, the drinks you start with only give you the basics. If you wan As the Bartender, you can use a circular saw on your shotgun to make it easier to store. As a Janitor, if someone steals your janicart, you can instead use your space cleaner spray, grenades, water sprayer or order another from Cargo. As a Janitor, mousetraps can be used to create bombs or booby-trap containers. -As the Librarian, you are not completely defenseless. Your laser pointer can blind humans and cyborgs, and you can hide items in wirecut books. -As the Librarian, be sure to keep the shelves stocked and the library clean for crew. +As the Curator, you are not completely defenseless. Your laser pointer can blind humans and cyborgs, and you can hide items in wirecut books. +As the Curator, be sure to keep the shelves stocked and the library clean for crew. As a Cargo Technician, you can hack MULEbots to make them faster, run over people in their way, and even let you ride them! As a Cargo Technician, you can order contraband items from the supply shuttle console by de-constructing it and using a multitool on the circuit board, the re-assembling it. As a Cargo Technician, you can earn more cargo points by shipping back crates from maintenance, liquid containers, plasma sheets, rare seeds from hydroponics, and more! @@ -159,24 +159,22 @@ As a Servant, your Clockwork Slab fits in pockets and does not need to be held t As a Servant, remember that while the selection of scripture and tools Servant cyborgs get is limited, it is still extremely useful, and some of it is unique; for example, engineering and janitor cyborgs get a proselytizer that can use their own power in addition to its own. As a Servant, the Judicial Visor is an effective defensive combat tool in small spaces, as it stuns and mutes anyone still on it after 3 seconds. It is also useful for stunning already-stunned enemies for long enough to convert them or finish them off. As a Servant, making, and protecting, Tinkerer's Caches is extremely important, as caches are required to unlock scripture and share components. -As a Servant, Ocular Wardens, while fragile, do very high, rapid damage to a target non-servant that can see them and will even attack mechs that contain heretics. Place them behind objects that don't block vision to get the most use out of them. +As a Servant, Ocular Wardens, while fragile, do very high, rapid damage to a target non-Servant that can see them and will even attack mechs that contain heretics. Place them behind objects that don't block vision to get the most use out of them. As a Servant, Clockwork Structures that require power will draw power from the APC if they cannot find a different source of power, and most power-using Structures will rapidly drain the APC. As a Servant, you can repair Servant cyborgs and Clockwork Structures with a Replica Fabricator at a rate of 25W power to 1 health. Damaged Clockwork Structures are less efficient, so don't forget to repair them! As a Servant, securing a reliable source of component generation is high-priority, as simply handing out slabs will slowly become inefficient. Try placing Tinkerer's Caches near clockwork walls or creating and powering Tinkerer's Daemons. -As a Servant, only a single held Clockwork Slab will generate components, no matter how many you're holding. In addition, slabs will generate components slower with large amounts of servants; you can see the exact time with Recollection. +As a Servant, only a single held Clockwork Slab will generate components, no matter how many you're holding. In addition, slabs will generate components slower with large amounts of Servants; you can see the exact time with Recollection. As a Servant, you can use Geis to easily convert single targets, as it binds them in place, preventing escape unless they react quickly enough. Having another Servant apply Geis to someone already bound will prevent their escape and mute them, even if they reacted quickly. As a Servant, placing components in a slab or cache places those components in a globally-accessable storage that slabs will draw from to invoke scripture. As a Servant, you can stack different types of Sigils on the same turf; try stacking a Sigil of Transgression and a Sigil of Submission for a subtle conversion trap. -As a Servant, you can deconstruct a Clockwork Wall with a Clockwork Proselytizer to regain 1000W power. You can also construct Clockwork Walls on Clockwork Floors for a cost of 1000W power. -As a Servant, Volt Void will drain power from nearby Sigils of Transmission to up to double the damage of each volt ray. It'll even use your own power if you happen to be a cyborg! +As a Servant, you can deconstruct a Clockwork Wall with a Replica Fabricator to regain 1000W power. You can also construct Clockwork Walls on Clockwork Floors for a cost of 1000W power. As a Servant, Fellowship Armory invokes much faster for each nearby servant and attempts to provide each affected servant with powerful armor against melee, bullet, and bomb attacks. The gauntlets provided are also immune to elecricity. As a Servant, Spatial Gateway can teleport to any living Servant or Clockwork Obelisk, and gains additional uses and duration for each Servant assisting in the invocation. As a Servant, creating and activating the Gateway to the Celestial Derelict is your ultimate goal, and you must defend it with all the tools you have available. As a Servant, you can impale human targets with a Ratvarian Spear by pulling them, then attacking them. This does massive damage and stuns them, and should effectively win the fight. As a Servant, Sentinel's Compromise can instantly return you or another Servant to a fighting state by converting half of all their brute, burn, and oxygen damage to toxin, effectively halving the damage they have. Clockwork Floors will also rapidly heal toxin damage in Servants, allowing the Compromise more effectiveness. As a Servant, Belligerent and Taunting Tirade are extremely powerful for disabling and disrupting large groups of enemies, though they render you somewhat vulnerable, as Belligerent requires that you stand still, and Taunting Tirade makes you extremely obvious. -As a Servant, Soul Vessels can be placed in cyborg shells, mecha, Cogscarab shells, and Anima Fragment shells. -As a Servant, you can unwrench Clockwork Structures to move them around. +As a Servant, you can unwrench Clockwork Structures, but doing so will damage them, severely weakening them until repaired with a Replica Fabricator or Mending Mantra. Damage from other sources will also similarly weaken structures. You can deconvert Cultists of Nar-Sie and Servants of Ratvar by feeding them large amounts of holy water. As a Wizard, you can turn people to stone, then animate the resulting statue with a staff of animation to create an extremely powerful minion, for all of 5 minutes at least. As a Wizard, the fireball spell performs very poorly at close range, as it can easily catch you in the blast. It is best used as a form of artillery down long hallways. diff --git a/tgstation.dme b/tgstation.dme index 9e09f17fdb..dcf38e0f39 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -463,7 +463,6 @@ #include "code\game\gamemodes\clock_cult\clock_items\replica_fabricator.dm" #include "code\game\gamemodes\clock_cult\clock_items\soul_vessel.dm" #include "code\game\gamemodes\clock_cult\clock_items\wraith_spectacles.dm" -#include "code\game\gamemodes\clock_cult\clock_mobs\anima_fragment.dm" #include "code\game\gamemodes\clock_cult\clock_mobs\clockwork_marauder.dm" #include "code\game\gamemodes\clock_cult\clock_scriptures\scripture_applications.dm" #include "code\game\gamemodes\clock_cult\clock_scriptures\scripture_cyborg.dm" @@ -471,7 +470,6 @@ #include "code\game\gamemodes\clock_cult\clock_scriptures\scripture_judgement.dm" #include "code\game\gamemodes\clock_cult\clock_scriptures\scripture_scripts.dm" #include "code\game\gamemodes\clock_cult\clock_structures\ark_of_the_clockwork_justicar.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\clock_shells.dm" #include "code\game\gamemodes\clock_cult\clock_structures\clockwork_obelisk.dm" #include "code\game\gamemodes\clock_cult\clock_structures\geis_binding.dm" #include "code\game\gamemodes\clock_cult\clock_structures\mania_motor.dm" From 9bbd150aac72572e24e6f41f5a601454961f1f2e Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 4 Aug 2017 13:46:25 -0500 Subject: [PATCH 028/230] Automatic changelog generation for PR #2020 [ci skip] --- html/changelogs/AutoChangeLog-pr-2020.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2020.yml diff --git a/html/changelogs/AutoChangeLog-pr-2020.yml b/html/changelogs/AutoChangeLog-pr-2020.yml new file mode 100644 index 0000000000..9615854516 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2020.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - rscdel: "Removed the Soul Vessel, Cogscarab, and Anima Fragment Scriptures." From b0361c2c646f43b0a36d702452ac0719e8b4ed89 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 5 Aug 2017 12:20:27 -0500 Subject: [PATCH 029/230] The inhands of the Dark Blessing chaplain weapon is now visible. --- code/game/objects/items/weapons/holy_weapons.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 238022d209..8e1cf3301e 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -320,6 +320,8 @@ desc = "Particularly twisted dieties grant gifts of dubious value." icon_state = "arm_blade" item_state = "arm_blade" + lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' + righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' flags = ABSTRACT | NODROP w_class = WEIGHT_CLASS_HUGE sharpness = IS_SHARP From c3ccae5298f365c81769c817bed359182785c8c9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 5 Aug 2017 12:20:30 -0500 Subject: [PATCH 030/230] Fixes stuff on shuttles not rotating in the proper direction --- code/modules/shuttle/shuttle.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index e15dc3f076..3b59f4ef89 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -12,7 +12,7 @@ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF anchored = TRUE -// +// var/id // this should point -away- from the dockingport door, ie towards the ship dir = NORTH @@ -481,7 +481,7 @@ var/rotation = 0 if(new_dock.dir != dir) //Even when the dirs are the same rotation is coming out as not 0 for some reason - rotation = dir2angle(new_dock)-dir2angle(dir) + rotation = dir2angle(new_dock.dir)-dir2angle(dir) if ((rotation % 90) != 0) rotation += (rotation % 90) //diagonal rotations not allowed, round up rotation = SimplifyDegrees(rotation) @@ -527,7 +527,7 @@ return DOCKING_AREA_EMPTY /*******************************************All onShuttleMove procs******************************************/ - + for(var/i in 1 to old_turfs.len) var/turf/oldT = old_turfs[i] var/turf/newT = new_turfs[i] @@ -550,9 +550,9 @@ var/atom/movable/moving_atom = thing moving_atom.onShuttleMove(newT, oldT, rotation, movement_force, movement_direction) //atoms moved_atoms += moving_atom - + /******************************************All afterShuttleMove procs****************************************/ - + for(var/i in 1 to new_turfs.len) var/turf/oldT = old_turfs[i] var/turf/newT = new_turfs[i] @@ -767,7 +767,7 @@ return TRUE return FALSE -// Losing all initial engines should get you 2 +// Losing all initial engines should get you 2 // Adding another set of engines at 0.5 time /obj/docking_port/mobile/proc/alter_engines(mod) if(mod == 0) @@ -806,7 +806,7 @@ if(initial_engines > 0) change_per_engine = (ENGINE_COEFF_MAX - 1) / initial_engines //just linear drop to max delay return Clamp(1 + delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX) - + /obj/docking_port/mobile/proc/in_flight() switch(mode) @@ -846,7 +846,7 @@ if(launch_status == ENDGAME_LAUNCHED) dock(SSshuttle.getDock("[id]_away")) //Escape pods dock at centcomm mode = SHUTTLE_ENDGAME - + /obj/docking_port/mobile/emergency/on_emergency_dock() return From 99ca34a7b4db036a3715001ba45a67709a1ae739 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 5 Aug 2017 12:20:34 -0500 Subject: [PATCH 031/230] Fixes vendors not returning an Initialize hint --- code/game/machinery/vending.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 13e5394587..a65d4baa9f 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -60,7 +60,7 @@ var/refill_count = 3 //The number of canisters the vending machine uses /obj/machinery/vending/Initialize() - ..() + . = ..() wires = new /datum/wires/vending(src) if(refill_canister) //constructable vending machine var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/vendor(null) From 7f7aed0112320d20db8c164ca1d0cadf0dfdcac7 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 5 Aug 2017 12:20:37 -0500 Subject: [PATCH 032/230] Fixes showers breaking lighting objects. --- code/game/objects/structures/watercloset.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 8d796904fd..1b8a6635ee 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -222,7 +222,7 @@ if(isliving(G)) var/mob/living/L = G wash_mob(L) - else + else if(isobj(G)) // Skip the light objects wash_obj(G) else if(isopenturf(loc)) @@ -286,7 +286,7 @@ wash_obj(O) -/obj/machinery/shower/proc/wash_obj(atom/movable/O) +/obj/machinery/shower/proc/wash_obj(obj/O) . = O.clean_blood() O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) if(isitem(O)) From 5d0f206936b46b7ede3b0dbe587e9a2659727797 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 5 Aug 2017 12:20:41 -0500 Subject: [PATCH 033/230] Replaces blob's send intercept sleep() with addtimer --- code/game/gamemodes/blob/blob.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index 1c30d84313..ec923c635b 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -97,7 +97,8 @@ GLOBAL_LIST_EMPTY(blobs_legit) //used for win-score calculations, contains only send_intercept(1) message_sent = TRUE + addtimer(CALLBACK(src, .proc/SendSecondIntercept), 24000) - sleep(24000) //40 minutes, plus burst_delay*3(minimum of 6 minutes, maximum of 8) +/datum/game_mode/blob/proc/SendSecondIntercept() if(!replacementmode) - send_intercept(2) //if the blob has been alive this long, it's time to bomb it \ No newline at end of file + send_intercept(2) //if the blob has been alive this long, it's time to bomb it From f8371a4fbe8aefddff6d7a362fb99ae5b06aeabc Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 5 Aug 2017 12:20:55 -0500 Subject: [PATCH 034/230] Fixes telekinesis not leaving admin fingerprints (#2264) --- code/_onclick/telekinesis.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index d66c8ee359..89803baef6 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -15,6 +15,7 @@ return new /obj/effect/temp_visual/telekinesis(loc) user.UnarmedAttack(src,0) // attack_hand, attack_paw, etc + add_hiddenprint(user) return /obj/attack_tk(mob/user) @@ -34,6 +35,7 @@ O.tk_user = user if(O.focus_object(src)) user.put_in_active_hand(O) + add_hiddenprint(user) /mob/attack_tk(mob/user) return From 90a7ead9610075f75972a91c96007c88af4a7ce9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 5 Aug 2017 12:24:58 -0500 Subject: [PATCH 035/230] [MIRROR] The AI's internal camera functions better (#2219) * The AI's internal camera functions better * sync robot.dm and hopefully not break shit --- code/datums/wires/robot.dm | 16 +++---- code/game/machinery/camera/camera.dm | 14 ------ code/game/machinery/camera/tracking.dm | 6 +-- code/modules/mob/living/silicon/ai/ai.dm | 4 +- .../modules/mob/living/silicon/robot/death.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 48 +++++++++---------- .../living/silicon/robot/robot_movement.dm | 21 -------- code/modules/mob/living/silicon/silicon.dm | 3 ++ .../mob/living/silicon/silicon_movement.dm | 20 ++++++++ tgstation.dme | 1 + 10 files changed, 60 insertions(+), 77 deletions(-) create mode 100644 code/modules/mob/living/silicon/silicon_movement.dm diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm index d4eeb0cc39..65438830a2 100644 --- a/code/datums/wires/robot.dm +++ b/code/datums/wires/robot.dm @@ -21,7 +21,7 @@ var/list/status = list() status += "The law sync module is [R.lawupdate ? "on" : "off"]." status += "The intelligence link display shows [R.connected_ai ? R.connected_ai.name : "NULL"]." - status += "The camera light is [!isnull(R.camera) && R.camera.status ? "on" : "off"]." + status += "The camera light is [!isnull(R.builtInCamera) && R.builtInCamera.status ? "on" : "off"]." status += "The lockdown indicator is [R.lockcharge ? "on" : "off"]." status += "The reset module hardware light is [R.has_module() ? "on" : "off"]." return status @@ -45,9 +45,9 @@ else R.notify_ai(TRUE) if(WIRE_CAMERA) // Pulse to disable the camera. - if(!isnull(R.camera) && !R.scrambledcodes) - R.camera.toggle_cam(usr, 0) - R.visible_message("[R]'s camera lense focuses loudly.", "Your camera lense focuses loudly.") + if(!QDELETED(R.builtInCamera) && !R.scrambledcodes) + R.builtInCamera.toggle_cam(usr, 0) + R.visible_message("[R]'s camera lens focuses loudly.", "Your camera lens focuses loudly.") if(WIRE_LAWSYNC) // Forces a law update if possible. if(R.lawupdate) R.visible_message("[R] gently chimes.", "LawSync protocol engaged.") @@ -75,10 +75,10 @@ else if(!R.deployed) //AI shells must always have the same laws as the AI R.lawupdate = FALSE if (WIRE_CAMERA) // Disable the camera. - if(!isnull(R.camera) && !R.scrambledcodes) - R.camera.status = mend - R.camera.toggle_cam(usr, 0) - R.visible_message("[R]'s camera lense focuses loudly.", "Your camera lense focuses loudly.") + if(!QDELETED(R.builtInCamera) && !R.scrambledcodes) + R.builtInCamera.status = mend + R.builtInCamera.toggle_cam(usr, 0) + R.visible_message("[R]'s camera lens focuses loudly.", "Your camera lens focuses loudly.") if(WIRE_LOCKDOWN) // Simple lockdown. R.SetLockdown(!mend) if(WIRE_RESET_MODULE) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index cc756caf98..2ef95cfa6c 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -373,20 +373,6 @@ else set_light(0) -/obj/machinery/camera/portable //Cameras which are placed inside of things, such as helmets. - var/turf/prev_turf - -/obj/machinery/camera/portable/Initialize() - . = ..() - assembly.state = 0 //These cameras are portable, and so shall be in the portable state if removed. - assembly.anchored = FALSE - assembly.update_icon() - -/obj/machinery/camera/portable/process() //Updates whenever the camera is moved. - if(GLOB.cameranet && get_turf(src) != prev_turf) - GLOB.cameranet.updatePortableCamera(src) - prev_turf = get_turf(src) - /obj/machinery/camera/get_remote_view_fullscreens(mob/user) if(view_range == short_range) //unfocused user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 2) diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 23d3598951..7b8007755b 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -136,9 +136,9 @@ /proc/near_camera(mob/living/M) if (!isturf(M.loc)) return 0 - if(iscyborg(M)) - var/mob/living/silicon/robot/R = M - if(!(R.camera && R.camera.can_use()) && !GLOB.cameranet.checkCameraVis(M)) + if(issilicon(M)) + var/mob/living/silicon/S = M + if((!QDELETED(S.builtInCamera) || !S.builtInCamera.can_use()) && !GLOB.cameranet.checkCameraVis(M)) return 0 else if(!GLOB.cameranet.checkCameraVis(M)) return 0 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index fd17f123b8..35c107b532 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -79,8 +79,6 @@ var/cooldown = 0 var/acceleration = 1 - var/obj/machinery/camera/portable/builtInCamera - var/obj/structure/AIcore/deactivated/linked_core //For exosuit control var/mob/living/silicon/robot/deployed_shell = null //For shell control var/datum/action/innate/deploy_shell/deploy_action = new @@ -151,7 +149,7 @@ GLOB.ai_list += src GLOB.shuttle_caller_list += src - builtInCamera = new /obj/machinery/camera/portable(src) + builtInCamera = new (src) builtInCamera.network = list("SS13") diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index c8c57dc602..7eb241e01f 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -22,8 +22,8 @@ locked = FALSE //unlock cover update_canmove() - if(camera && camera.status) - camera.toggle_cam(src,0) + if(!QDELETED(builtInCamera) && builtInCamera.status) + builtInCamera.toggle_cam(src,0) update_headlamp(1) //So borg lights are disabled when killed. uneq_all() // particularly to ensure sight modes are cleared diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 93f88bdfee..520a060e9e 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -42,7 +42,6 @@ var/mob/living/silicon/ai/connected_ai = null var/obj/item/weapon/stock_parts/cell/cell = null - var/obj/machinery/camera/camera = null var/opened = 0 var/emagged = FALSE @@ -76,7 +75,6 @@ var/lamp_recharging = 0 //Flag for if the lamp is on cooldown after being forcibly disabled. var/sight_mode = 0 - var/updating = 0 //portable camera camerachunk update hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD, DIAG_TRACK_HUD) var/list/upgrades = list() @@ -127,16 +125,16 @@ lawupdate = FALSE radio = new /obj/item/device/radio/borg(src) - if(!scrambledcodes && !camera) - camera = new /obj/machinery/camera(src) - camera.c_tag = real_name - camera.network = list("SS13") + if(!scrambledcodes && !builtInCamera) + builtInCamera = new (src) + builtInCamera.c_tag = real_name + builtInCamera.network = list("SS13") if(wires.is_cut(WIRE_CAMERA)) - camera.status = 0 + builtInCamera.status = 0 module = new /obj/item/weapon/robot_module(src) module.rebuild_modules() update_icons() - ..() + . = ..() //If this body is meant to be a borg controlled by the AI player if(shell) @@ -191,7 +189,6 @@ wires = null module = null eye_lights = null - camera = null cell = null return ..() @@ -238,8 +235,8 @@ real_name = changed_name name = real_name - if(camera) - camera.c_tag = real_name //update the camera name too + if(!QDELETED(builtInCamera)) + builtInCamera.c_tag = real_name //update the camera name too /mob/living/silicon/robot/proc/get_standard_name() return "[(designation ? "[designation] " : "")][mmi.braintype]-[ident]" @@ -676,9 +673,8 @@ canmove = 1 scrambledcodes = 1 //Disconnect it's camera so it's not so easily tracked. - if(src.camera) - qdel(src.camera) - src.camera = null + if(!QDELETED(builtInCamera)) + QDEL_NULL(builtInCamera) // I'm trying to get the Cyborg to not be listed in the camera list // Instead of being listed as "deactivated". The downside is that I'm going // to have to check if every camera is null or not before doing anything, to prevent runtime errors. @@ -959,8 +955,8 @@ /mob/living/silicon/robot/revive(full_heal = 0, admin_revive = 0) if(..()) //successfully ressuscitated from death - if(camera && !wires.is_cut(WIRE_CAMERA)) - camera.toggle_cam(src,0) + if(!QDELETED(builtInCamera) && !wires.is_cut(WIRE_CAMERA)) + builtInCamera.toggle_cam(src,0) update_headlamp() if(admin_revive) locked = TRUE @@ -971,8 +967,8 @@ ..() if(oldname != real_name) notify_ai(RENAME, oldname, newname) - if(camera) - camera.c_tag = real_name + if(!QDELETED(builtInCamera)) + builtInCamera.c_tag = real_name custom_name = newname @@ -1036,8 +1032,8 @@ name = "[designation] AI Shell [rand(100,999)]" real_name = name GLOB.available_ai_shells |= src - if(camera) - camera.c_tag = real_name //update the camera name too + if(!QDELETED(builtInCamera)) + builtInCamera.c_tag = real_name //update the camera name too diag_hud_set_aishell() notify_ai(AI_SHELL) @@ -1052,15 +1048,15 @@ GLOB.available_ai_shells -= src name = "Unformatted Cyborg [rand(100,999)]" real_name = name - if(camera) - camera.c_tag = real_name + if(!QDELETED(builtInCamera)) + builtInCamera.c_tag = real_name diag_hud_set_aishell() /mob/living/silicon/robot/proc/deploy_init(var/mob/living/silicon/ai/AI) real_name = "[AI.real_name] shell [rand(100, 999)] - [designation]" //Randomizing the name so it shows up separately in the shells list name = real_name - if(camera) - camera.c_tag = real_name //update the camera name too + if(!QDELETED(builtInCamera)) + builtInCamera.c_tag = real_name //update the camera name too mainframe = AI deployed = TRUE connected_ai = mainframe @@ -1105,8 +1101,8 @@ undeployment_action.Remove(src) if(radio) //Return radio to normal radio.recalculateChannels() - if(camera) - camera.c_tag = real_name //update the camera name too + if(!QDELETED(builtInCamera)) + builtInCamera.c_tag = real_name //update the camera name too diag_hud_set_aishell() mainframe.diag_hud_set_deployed() if(mainframe.laws) diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm index a2f6bf5681..167137d9d1 100644 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -1,24 +1,3 @@ -/mob/living/silicon/robot/Moved(oldLoc, dir) - . = ..() - update_camera_location(oldLoc) - -/mob/living/silicon/robot/forceMove(atom/destination) - . = ..() - update_camera_location(destination) - -/mob/living/silicon/robot/proc/do_camera_update(oldLoc) - if(!QDELETED(camera) && oldLoc != get_turf(src)) - GLOB.cameranet.updatePortableCamera(camera) - updating = FALSE - -#define BORG_CAMERA_BUFFER 30 -/mob/living/silicon/robot/proc/update_camera_location(oldLoc) - oldLoc = get_turf(oldLoc) - if(!QDELETED(camera) && !updating && oldLoc != get_turf(src)) - updating = TRUE - addtimer(CALLBACK(src, .proc/do_camera_update, oldLoc), BORG_CAMERA_BUFFER) -#undef BORG_CAMERA_BUFFER - /mob/living/silicon/robot/Process_Spacemove(movement_dir = 0) if(ionpulse()) return 1 diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index bdc2338828..4d3c468191 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -36,6 +36,8 @@ var/d_hud = DATA_HUD_DIAGNOSTIC //There is only one kind of diag hud var/law_change_counter = 0 + var/obj/machinery/camera/builtInCamera = null + var/updating = FALSE //portable camera camerachunk update /mob/living/silicon/Initialize() . = ..() @@ -54,6 +56,7 @@ /mob/living/silicon/Destroy() radio = null aicamera = null + QDEL_NULL(builtInCamera) GLOB.silicon_mobs -= src return ..() diff --git a/code/modules/mob/living/silicon/silicon_movement.dm b/code/modules/mob/living/silicon/silicon_movement.dm new file mode 100644 index 0000000000..c7267acf76 --- /dev/null +++ b/code/modules/mob/living/silicon/silicon_movement.dm @@ -0,0 +1,20 @@ +/mob/living/silicon/Moved(oldLoc, dir) + . = ..() + update_camera_location(oldLoc) + +/mob/living/silicon/forceMove(atom/destination) + . = ..() + update_camera_location(destination) + +/mob/living/silicon/proc/do_camera_update(oldLoc) + if(!QDELETED(builtInCamera) && oldLoc != get_turf(src)) + GLOB.cameranet.updatePortableCamera(builtInCamera) + updating = FALSE + +#define SILICON_CAMERA_BUFFER 10 +/mob/living/silicon/proc/update_camera_location(oldLoc) + oldLoc = get_turf(oldLoc) + if(!QDELETED(builtInCamera) && !updating && oldLoc != get_turf(src)) + updating = TRUE + addtimer(CALLBACK(src, .proc/do_camera_update, oldLoc), SILICON_CAMERA_BUFFER) +#undef SILICON_CAMERA_BUFFER diff --git a/tgstation.dme b/tgstation.dme index dcf38e0f39..23ffe1fef1 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1677,6 +1677,7 @@ #include "code\modules\mob\living\silicon\say.dm" #include "code\modules\mob\living\silicon\silicon.dm" #include "code\modules\mob\living\silicon\silicon_defense.dm" +#include "code\modules\mob\living\silicon\silicon_movement.dm" #include "code\modules\mob\living\silicon\ai\ai.dm" #include "code\modules\mob\living\silicon\ai\ai_defense.dm" #include "code\modules\mob\living\silicon\ai\death.dm" From fd59456a73ff10875f449414f06cd304e96e6ca1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 5 Aug 2017 12:27:12 -0500 Subject: [PATCH 036/230] [MIRROR] Adds Surgical toolarms to R&D, makes them less robust (#2197) * Adds Surgical toolarms to R&D, makes them less robust * Delete medical_designs.dm * Delete augments_arms.dm * Delete tools.dm --- .../research/designs/medical_designs.dm | 11 +++ code/modules/surgery/organs/augments_arms.dm | 3 +- code/modules/surgery/tools.dm | 95 ++++++++++++++++++- 3 files changed, 105 insertions(+), 4 deletions(-) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 8b90339b02..de511d6b65 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -212,6 +212,17 @@ build_path = /obj/item/organ/cyberimp/mouth/breathing_tube category = list("Misc", "Medical Designs") +/datum/design/cyberimp_surgical + name = "Surgical Arm Implant" + desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." + id = "ci-surgey" + req_tech = list("materials" = 3, "engineering" = 3, "biotech" = 3, "programming" = 2, "magnets" = 3) + build_type = PROTOLATHE | MECHFAB + materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) + construction_time = 200 + build_path = /obj/item/organ/cyberimp/arm/surgery + category = list("Misc", "Medical Designs") + /datum/design/cyberimp_toolset name = "Toolset Arm Implant" desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm." diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 69cf8aa96b..dfc0c658ce 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -85,7 +85,6 @@ holder.flags |= NODROP holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF holder.slot_flags = null - holder.w_class = WEIGHT_CLASS_HUGE holder.materials = null if(istype(holder, /obj/item/device/assembly/flash/armimplant)) @@ -234,5 +233,5 @@ /obj/item/organ/cyberimp/arm/surgery name = "surgical toolset implant" desc = "A set of surgical tools hidden behind a concealed panel on the user's arm" - contents = newlist(/obj/item/weapon/retractor, /obj/item/weapon/hemostat, /obj/item/weapon/cautery, /obj/item/weapon/surgicaldrill, /obj/item/weapon/scalpel, /obj/item/weapon/circular_saw, /obj/item/weapon/surgical_drapes) + contents = newlist(/obj/item/weapon/retractor/augment, /obj/item/weapon/hemostat/augment, /obj/item/weapon/cautery/augment, /obj/item/weapon/surgicaldrill/augment, /obj/item/weapon/scalpel/augment, /obj/item/weapon/circular_saw/augment, /obj/item/weapon/surgical_drapes) origin_tech = "materials=3;engineering=3;biotech=3;programming=2;magnets=3" diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 3ef91fcef8..5686389dea 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -9,6 +9,18 @@ origin_tech = "materials=1;biotech=1" +/obj/item/weapon/retractor/augment + name = "toolarm retractor" + desc = "Micro-mechanical manipulator for retracting stuff." + icon = 'icons/obj/surgery.dmi' + icon_state = "retractor" + materials = list(MAT_METAL=6000, MAT_GLASS=3000) + flags = CONDUCT + w_class = WEIGHT_CLASS_TINY + origin_tech = "materials=1;biotech=1" + toolspeed = 0.5 + + /obj/item/weapon/hemostat name = "hemostat" desc = "You think you have seen this before." @@ -21,6 +33,19 @@ attack_verb = list("attacked", "pinched") +/obj/item/weapon/hemostat/augment + name = "toolarm hemostat" + desc = "Tiny servos power a pair of pincers to stop bleeding." + icon = 'icons/obj/surgery.dmi' + icon_state = "hemostat" + materials = list(MAT_METAL=5000, MAT_GLASS=2500) + flags = CONDUCT + w_class = WEIGHT_CLASS_TINY + origin_tech = "materials=1;biotech=1" + toolspeed = 0.5 + attack_verb = list("attacked", "pinched") + + /obj/item/weapon/cautery name = "cautery" desc = "This stops bleeding." @@ -33,6 +58,19 @@ attack_verb = list("burnt") +/obj/item/weapon/cautery/augment + name = "toolarm cautery" + desc = "A heated element that cauterizes wounds." + icon = 'icons/obj/surgery.dmi' + icon_state = "cautery" + materials = list(MAT_METAL=2500, MAT_GLASS=750) + flags = CONDUCT + w_class = WEIGHT_CLASS_TINY + origin_tech = "materials=1;biotech=1" + toolspeed = 0.5 + attack_verb = list("burnt") + + /obj/item/weapon/surgicaldrill name = "surgical drill" desc = "You can drill using this item. You dig?" @@ -48,6 +86,22 @@ origin_tech = "materials=1;biotech=1" attack_verb = list("drilled") + +/obj/item/weapon/surgicaldrill/augment + name = "toolarm surgical drill" + desc = "Effectively a small power drill contained within your arm, edges dulled to prevent tissue damage. May or may not pierce the heavens." + icon = 'icons/obj/surgery.dmi' + icon_state = "drill" + hitsound = 'sound/weapons/circsawhit.ogg' + materials = list(MAT_METAL=10000, MAT_GLASS=6000) + flags = CONDUCT + force = 10 + w_class = WEIGHT_CLASS_SMALL + origin_tech = "materials=1;biotech=1" + toolspeed = 0.5 + attack_verb = list("drilled") + + /obj/item/weapon/scalpel name = "scalpel" desc = "Cut, cut, and once more cut." @@ -67,6 +121,24 @@ hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP_ACCURATE +/obj/item/weapon/scalpel/augment + name = "toolarm scalpel" + desc = "Ultra-sharp blade attached directly to your bone for extra-accuracy." + icon = 'icons/obj/surgery.dmi' + icon_state = "scalpel" + flags = CONDUCT + force = 10 + w_class = WEIGHT_CLASS_TINY + throwforce = 5 + throw_speed = 3 + throw_range = 5 + materials = list(MAT_METAL=4000, MAT_GLASS=1000) + origin_tech = "materials=1;biotech=1" + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + toolspeed = 0.5 + hitsound = 'sound/weapons/bladeslice.ogg' + sharpness = IS_SHARP_ACCURATE + /obj/item/weapon/scalpel/suicide_act(mob/user) user.visible_message("[user] is slitting [user.p_their()] [pick("wrists", "throat", "stomach")] with [src]! It looks like [user.p_theyre()] trying to commit suicide!") return (BRUTELOSS) @@ -92,6 +164,25 @@ attack_verb = list("attacked", "slashed", "sawed", "cut") sharpness = IS_SHARP +/obj/item/weapon/circular_saw/augment + name = "toolarm circular saw" + desc = "A small but very fast spinning saw. Edges dulled to prevent accidental cutting inside of the surgeon." + icon = 'icons/obj/surgery.dmi' + icon_state = "saw" + hitsound = 'sound/weapons/circsawhit.ogg' + throwhitsound = 'sound/weapons/pierce.ogg' + flags = CONDUCT + force = 10 + w_class = WEIGHT_CLASS_SMALL + throwforce = 9 + throw_speed = 2 + throw_range = 5 + materials = list(MAT_METAL=10000, MAT_GLASS=6000) + origin_tech = "biotech=1;combat=1" + toolspeed = 0.5 + attack_verb = list("attacked", "slashed", "sawed", "cut") + sharpness = IS_SHARP + /obj/item/weapon/surgical_drapes name = "surgical drapes" desc = "Nanotrasen brand surgical drapes provide optimal safety and infection control." @@ -104,7 +195,7 @@ /obj/item/weapon/surgical_drapes/attack(mob/living/M, mob/user) if(!attempt_initiate_surgery(src, M, user)) ..() - + /obj/item/weapon/organ_storage //allows medical cyborgs to manipulate organs without hands name = "organ storage bag" desc = "A container for holding body parts." @@ -120,7 +211,7 @@ if(!isorgan(I) && !isbodypart(I)) to_chat(user, "[src] can only hold body parts!") return - + user.visible_message("[user] puts [I] into [src].", "You put [I] inside [src].") icon_state = "evidence" var/xx = I.pixel_x From a901b2576c4a6c26052d52e00381b71b2eaabed4 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 5 Aug 2017 12:27:14 -0500 Subject: [PATCH 037/230] Automatic changelog generation for PR #2197 [ci skip] --- html/changelogs/AutoChangeLog-pr-2197.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2197.yml diff --git a/html/changelogs/AutoChangeLog-pr-2197.yml b/html/changelogs/AutoChangeLog-pr-2197.yml new file mode 100644 index 0000000000..6d4e8f4089 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2197.yml @@ -0,0 +1,6 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Surgical toolarm to protolathe and exofab" + - tweak: "Toolarm tools are less robust but more efficient at surgery" + - tweak: "Arm augments are no longer a huge item" From 5fd31559eaeaadc674163fcd77060eefca7de6dd Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 5 Aug 2017 12:29:02 -0500 Subject: [PATCH 038/230] [MIRROR] Fixed typo for cyberimp_surgical's ID (#2229) * Fixed typo for cyberimp_surgical's ID * Delete medical_designs.dm.rej * Update medical_designs.dm --- code/modules/research/designs/medical_designs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index de511d6b65..16a87d3b8b 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -215,7 +215,7 @@ /datum/design/cyberimp_surgical name = "Surgical Arm Implant" desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." - id = "ci-surgey" + id = "ci-surgery" req_tech = list("materials" = 3, "engineering" = 3, "biotech" = 3, "programming" = 2, "magnets" = 3) build_type = PROTOLATHE | MECHFAB materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) From 521c149627f8487ae775b78eb1ada37c434217c6 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 5 Aug 2017 12:30:21 -0500 Subject: [PATCH 039/230] [Pubby] added turrets to AI sat bridge area (#2235) --- _maps/map_files/PubbyStation/PubbyStation.dmm | 96 +++++++++++++------ 1 file changed, 67 insertions(+), 29 deletions(-) diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index b46901c890..4cc0b5c158 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -1037,6 +1037,7 @@ icon_state = "1-8" }, /obj/machinery/turretid{ + control_area = "AI Chamber"; name = "AI Chamber turret control"; pixel_x = 5; pixel_y = -24 @@ -1055,7 +1056,8 @@ /area/wreck/ai) "acs" = ( /obj/machinery/turretid{ - name = "AI Chamber turret control"; + control_area = "AI Satellite Antechamber"; + name = "AI Satellite turret control"; pixel_x = -5; pixel_y = -24 }, @@ -1777,10 +1779,12 @@ /turf/open/floor/plating, /area/ai_monitored/turret_protected/AIsatextAP) "aeg" = ( -/obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/space, -/area/ai_monitored/turret_protected/AIsatextAP) +/obj/machinery/porta_turret/ai{ + installation = /obj/item/weapon/gun/energy/e_gun + }, +/turf/open/floor/plating/airless, +/area/ai_monitored/turret_protected/aisat_interior) "aeh" = ( /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, @@ -1794,10 +1798,12 @@ /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/aisat_interior) "aej" = ( -/obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/space, -/area/ai_monitored/turret_protected/AIsatextAS) +/obj/machinery/porta_turret/ai{ + installation = /obj/item/weapon/gun/energy/e_gun + }, +/turf/open/floor/plating/airless, +/area/ai_monitored/turret_protected/aisat_interior) "aek" = ( /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, @@ -47042,7 +47048,6 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/black, /area/engine/engine_smes) "bYi" = ( @@ -53682,6 +53687,39 @@ dir = 4 }, /area/science/research/lobby) +"cnC" = ( +/obj/machinery/turretid{ + control_area = "AI Satellite Antechamber"; + name = "AI Satellite turret control"; + pixel_x = -5; + pixel_y = -24 + }, +/turf/open/floor/plasteel/darkblue/side{ + dir = 8 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"cnD" = ( +/turf/open/space/basic, +/area/ai_monitored/turret_protected/AIsatextAP) +"cnE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/lattice, +/turf/open/space/basic, +/area/ai_monitored/turret_protected/AIsatextAP) +"cnF" = ( +/turf/open/space/basic, +/area/ai_monitored/turret_protected/AIsatextAP) +"cnG" = ( +/turf/open/space/basic, +/area/ai_monitored/turret_protected/AIsatextAS) +"cnH" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/space/basic, +/area/ai_monitored/turret_protected/AIsatextAS) +"cnI" = ( +/turf/open/space/basic, +/area/ai_monitored/turret_protected/AIsatextAS) (1,1,1) = {" aaa @@ -71585,7 +71623,7 @@ bWV bWV bWV bWV -ccI +cbR bWV bWV ceP @@ -84314,7 +84352,7 @@ aaa aaa aaa aaa -aaa +aby aby aby aby @@ -84557,7 +84595,6 @@ aaa aaa aaa aaa -aaa aby aby aby @@ -84581,6 +84618,7 @@ aaa abI aaa aaa +aaa acP acP acP @@ -84816,7 +84854,6 @@ aaa aaa aaa aaa -aaa abI aaa aaa @@ -84838,6 +84875,7 @@ adS adS adS adS +adS aeJ aeY aft @@ -85071,7 +85109,6 @@ aaa aaa aaa aaa -aaa aby aaa abO @@ -85094,6 +85131,7 @@ adH adT aee aee +aee aev adv aeZ @@ -85328,7 +85366,6 @@ aaa aaa aaa aaa -aaa aby abI abO @@ -85351,6 +85388,7 @@ adI adU aef aef +aef aew aeK afa @@ -85585,7 +85623,6 @@ aaa aaa aaa aaa -aaa aby aaa abO @@ -85607,6 +85644,7 @@ adu adJ adV adV +cnD adV adV aeL @@ -85842,7 +85880,6 @@ aaa aaa aaa aaa -aaa aby aaa abO @@ -85864,6 +85901,7 @@ adv adK adW aeg +cnE aeg aex aeM @@ -86099,7 +86137,6 @@ aaa aaa aaa aaa -aaa aby aaa abO @@ -86121,6 +86158,7 @@ adw adL adV adV +cnF adV adV aeN @@ -86356,7 +86394,6 @@ aaa aaa aaa aaa -aaa aby aaa abO @@ -86379,12 +86416,13 @@ adL adX aeh aeh +aeh adX aeN afe afx afx -afx +cnC adX adX adX @@ -86613,7 +86651,6 @@ aaa aaa aaa aaa -aaa aby abJ abO @@ -86636,6 +86673,7 @@ adM adY aei aei +aei aey aeO aff @@ -86870,7 +86908,6 @@ aaa aaa aaa aaa -aaa aby aaa abO @@ -86893,6 +86930,7 @@ adL adX aeh aeh +aeh adX aeN afg @@ -87127,7 +87165,6 @@ aaa aaa aaa aaa -aaa aby aaa abO @@ -87149,6 +87186,7 @@ adA adL adZ adZ +cnG adZ adZ aeP @@ -87384,7 +87422,6 @@ aaa aaa aaa aaa -aaa aby aaa abO @@ -87406,6 +87443,7 @@ adB adN aea aej +cnH aej aez aeQ @@ -87641,7 +87679,6 @@ aaa aaa aaa aaa -aaa aby aaa abO @@ -87663,6 +87700,7 @@ adC adO adZ adZ +cnI adZ adZ aeR @@ -87898,7 +87936,6 @@ aaa aaa aaa aaa -aaa aby abI abO @@ -87921,6 +87958,7 @@ adP aeb aek aek +aek aeA adF afk @@ -88155,7 +88193,6 @@ aaa aaa aaa aaa -aaa aby aaa abO @@ -88178,6 +88215,7 @@ adQ aec ael ael +ael aeB aeS afl @@ -88414,7 +88452,6 @@ aaa aaa aaa aaa -aaa abI aaa aaa @@ -88437,6 +88474,7 @@ acU acU acU acU +acU afm afB afT @@ -88669,7 +88707,6 @@ aaa aaa aaa aaa -aaa aby aby aby @@ -88693,6 +88730,7 @@ aaa abI aaa aaa +aaa acU acU acU @@ -88939,7 +88977,6 @@ aaa aaa aaa aaa -aaa acO aby aby @@ -88949,6 +88986,7 @@ aby aby aby aby +aby aaa abI aaa From a90448b2627ae5292462e6e9d3ab5aa518e252ae Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 5 Aug 2017 19:28:33 -0500 Subject: [PATCH 040/230] Fixes oversight with APCs using areastring --- code/game/gamemodes/events.dm | 2 +- code/game/machinery/computer/apc_control.dm | 4 ++-- code/modules/admin/verbs/debug.dm | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index f36f967c1d..a56a2d6647 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -33,7 +33,7 @@ for(var/obj/machinery/power/apc/C in GLOB.apcs_list) if(C.cell && C.z == ZLEVEL_STATION) - var/area/A = get_area(C) + var/area/A = C.area var/skip = 0 for(var/area_type in skipped_areas) diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index ea992de697..bc5c8cbfa7 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -133,8 +133,8 @@ active_apc.locked = TRUE active_apc.update_icon() active_apc = null - to_chat(usr, "[bicon(src)] Connected to APC in [get_area(APC)]. Interface request sent.") - log_activity("remotely accessed APC in [get_area(APC)]") + to_chat(usr, "[bicon(src)] Connected to APC in [APC.area]. Interface request sent.") + log_activity("remotely accessed APC in [APC.area]") APC.interact(usr, GLOB.not_incapacitated_state) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) message_admins("[key_name_admin(usr)] remotely accessed [APC] from [src] at [get_area(src)].") diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index c45fa13435..7a312acf7c 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -513,7 +513,7 @@ GLOBAL_PROTECT(AdminProcCallCount) areas_all.Add(A.type) for(var/obj/machinery/power/apc/APC in GLOB.apcs_list) - var/area/A = get_area(APC) + var/area/A = APC.area if(!(A.type in areas_with_APC)) areas_with_APC.Add(A.type) From 0eea5ad53df9d4eaedbf9a29078e48b07d9579e8 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 03:07:38 -0500 Subject: [PATCH 041/230] Improves Tesla Performance --- code/__HELPERS/_lists.dm | 13 ++++++-- code/modules/power/tesla/energy_ball.dm | 41 +++++++++++++------------ 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index df3daeeff9..b95f132b58 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -91,16 +91,23 @@ //returns a new list with only atoms that are in typecache L /proc/typecache_filter_list(list/atoms, list/typecache) . = list() - for (var/thing in atoms) + for(var/thing in atoms) var/atom/A = thing if (typecache[A.type]) . += A /proc/typecache_filter_list_reverse(list/atoms, list/typecache) . = list() - for (var/thing in atoms) + for(var/thing in atoms) var/atom/A = thing - if (!typecache[A.type]) + if(!typecache[A.type]) + . += A + +/proc/typecache_filter_multi_list_exclusion(list/atoms, list/typecache_include, list/typecache_exclude) + . = list() + for(var/thing in atoms) + var/atom/A = thing + if(typecache_include[A.type] && !typecache_exclude[A.type]) . += A //Like typesof() or subtypesof(), but returns a typecache instead of a list diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 042d827bff..9fc63d9421 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -1,24 +1,6 @@ #define TESLA_DEFAULT_POWER 1738260 #define TESLA_MINI_POWER 869130 -GLOBAL_LIST_INIT(blacklisted_tesla_types, typecacheof(list(/obj/machinery/atmospherics, - /obj/machinery/power/emitter, - /obj/machinery/field/generator, - /mob/living/simple_animal, - /obj/machinery/particle_accelerator/control_box, - /obj/structure/particle_accelerator/fuel_chamber, - /obj/structure/particle_accelerator/particle_emitter/center, - /obj/structure/particle_accelerator/particle_emitter/left, - /obj/structure/particle_accelerator/particle_emitter/right, - /obj/structure/particle_accelerator/power_box, - /obj/structure/particle_accelerator/end_cap, - /obj/machinery/field/containment, - /obj/structure/disposalpipe, - /obj/structure/sign, - /obj/machinery/gateway, - /obj/structure/lattice, - /obj/structure/grille, - /obj/machinery/the_singularitygen/tesla))) /obj/singularity/energy_ball name = "energy ball" desc = "An energy ball." @@ -183,8 +165,27 @@ GLOBAL_LIST_INIT(blacklisted_tesla_types, typecacheof(list(/obj/machinery/atmosp var/obj/machinery/closest_machine var/obj/structure/closest_structure var/obj/structure/blob/closest_blob + var/static/things_to_shock = typecacheof(list(/obj/machinery, /mob/living, /obj/structure)) + var/static/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics, + /obj/machinery/power/emitter, + /obj/machinery/field/generator, + /mob/living/simple_animal, + /obj/machinery/particle_accelerator/control_box, + /obj/structure/particle_accelerator/fuel_chamber, + /obj/structure/particle_accelerator/particle_emitter/center, + /obj/structure/particle_accelerator/particle_emitter/left, + /obj/structure/particle_accelerator/particle_emitter/right, + /obj/structure/particle_accelerator/power_box, + /obj/structure/particle_accelerator/end_cap, + /obj/machinery/field/containment, + /obj/structure/disposalpipe, + /obj/structure/sign, + /obj/machinery/gateway, + /obj/structure/lattice, + /obj/structure/grille, + /obj/machinery/the_singularitygen/tesla)) - for(var/A in oview(source, zap_range+2)) + for(var/A in typecache_filter_multi_list_exclusion(oview(source, zap_range+2), things_to_shock, blacklisted_tesla_types)) if(istype(A, /obj/machinery/power/tesla_coil)) var/dist = get_dist(source, A) var/obj/machinery/power/tesla_coil/C = A @@ -207,7 +208,7 @@ GLOBAL_LIST_INIT(blacklisted_tesla_types, typecacheof(list(/obj/machinery/atmosp closest_atom = A closest_dist = dist - else if(closest_grounding_rod || is_type_in_typecache(A, GLOB.blacklisted_tesla_types)) + else if(closest_grounding_rod) continue else if(isliving(A)) From 633952d302efb40c5aa13e1058eb756d3f059e54 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 03:08:42 -0500 Subject: [PATCH 042/230] Enables goonchat restart notification --- code/controllers/subsystem/server_maint.dm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/server_maint.dm b/code/controllers/subsystem/server_maint.dm index e398f09a03..855c00b728 100644 --- a/code/controllers/subsystem/server_maint.dm +++ b/code/controllers/subsystem/server_maint.dm @@ -40,9 +40,15 @@ SUBSYSTEM_DEF(server_maint) /datum/controller/subsystem/server_maint/Shutdown() kick_clients_in_lobby("The round came to an end with you in the lobby.", TRUE) //second parameter ensures only afk clients are kicked + var/server = config.server for(var/thing in GLOB.clients) + if(!thing) + continue var/client/C = thing - if(C && config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite - C << link("byond://[config.server]") + var/datum/chatOutput/co = C.chatOutput + if(co) + co.ehjax_send(data = "roundrestart") + if(server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite + C << link("byond://[server]") #undef PING_BUFFER_TIME From e95ddfaf94208d199a095a7f2c091778a41f88f9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 03:09:47 -0500 Subject: [PATCH 043/230] Rewrites incorrect documentation for the pickweight() proc --- code/__HELPERS/_lists.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index df3daeeff9..74322c53af 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -177,7 +177,11 @@ result = first ^ second return result -//Pretends to pick an element based on its weight but really just seems to pick a random element. +//Picks a random element from a list based on a weighting system: +//1. Adds up the total of weights for each element +//2. Gets a number between 1 and that total +//3. For each element in the list, subtracts its weighting from that number +//4. If that makes the number 0 or less, return that element. /proc/pickweight(list/L) var/total = 0 var/item From de8d96e2653c2483ad6afd30d6f4b8171c35356a Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 03:09:50 -0500 Subject: [PATCH 044/230] Replaces Hearty Punch's sprite --- icons/obj/drinks.dmi | Bin 60401 -> 60639 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index ddb152152c06e35b31c2d7690814c3e1efb4eaa1..77c3b647bcc80ae26fcad066a928246e30e28765 100644 GIT binary patch delta 21529 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 Date: Sun, 6 Aug 2017 03:10:55 -0500 Subject: [PATCH 045/230] Adds log parsing sql email alert script --- tools/SQLAlertEmail/email_config.ps1 | 11 +++++++++++ tools/SQLAlertEmail/email_script.ps1 | 23 +++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 tools/SQLAlertEmail/email_config.ps1 create mode 100644 tools/SQLAlertEmail/email_script.ps1 diff --git a/tools/SQLAlertEmail/email_config.ps1 b/tools/SQLAlertEmail/email_config.ps1 new file mode 100644 index 0000000000..53865eb15f --- /dev/null +++ b/tools/SQLAlertEmail/email_config.ps1 @@ -0,0 +1,11 @@ +$Path = '..\..\data\logs\' #Server directory up to the year folder, this can be a relative or absolute path; remember the trailing \ +$StringToMatch = 'SQL:' +$From = 'admin@server.com' +[string[]]$To = 'email@address.com', 'a_different@address.org' #Email will be sent to each address listed here, you can have as many as you want +$Subject = 'SS13 server SQL error' +$Body = 'A SQL error was found in the following files:' #This parameter is optional, set it as '' if you want it gone +#SMTP server details; If you don't have one you can use the defaults provided here for Gmail's, provided you have a Google account +$SMTPServer = 'smtp.gmail.com' +$SMTPPort = '587' +$Account = "username" #SMTP server account name, excluding the domain address (this part: @domain.com) +$Password = 'password' #SMTP server password, if you're using Gmail's and have 2-factor authentication you'll have to use an App Password (Google for how) \ No newline at end of file diff --git a/tools/SQLAlertEmail/email_script.ps1 b/tools/SQLAlertEmail/email_script.ps1 new file mode 100644 index 0000000000..1ffa8d1b44 --- /dev/null +++ b/tools/SQLAlertEmail/email_script.ps1 @@ -0,0 +1,23 @@ +<# +This is a script designed to parse through your server logs and locate any SQL errors reported. +If found an email is sent to addresses specified in the configuration file: email_config.ps1. +A SMTP server is required, if you don't have one the defaults for Gmail's can be used. + +Suggested use is to schedule this task to be executed daily at server-time midnight so all the day's logs are checked. +You will likely find it helpful to set the configuration file to be untracked by git. +#> +. .\email_config.ps1 +$Date = Get-Date -format "yyyy\\MM\\dd" +$Matches = Get-ChildItem "$Path$Date" -recurse -include *.log | Select-String "$StringToMatch" -List | Select Path, Line + +$email = New-Object System.Net.Mail.MailMessage +$email.From = $From +foreach($i in $To) {$email.To.Add($i)} +$email.Subject = $Subject +$MatchList = foreach($m in $Matches) {"`t$m`n"} +$email.Body = $Body+"`n"+$MatchList + +$smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort); +$smtp.Credentials = New-Object System.Net.NetworkCredential($Account, $Password); +$smtp.EnableSSL = $true +$smtp.Send($email); \ No newline at end of file From 0cffa7efaa72111e02017eef1e6c61fbb3cc958f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 03:12:04 -0500 Subject: [PATCH 046/230] Fixes the right-facing pie face sprite being a pixel off --- icons/effects/creampie.dmi | Bin 2284 -> 2281 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/effects/creampie.dmi b/icons/effects/creampie.dmi index 2a0365773b7f0b84757975d07c43668182527986..6caecf7d767c3f4880957c5790ed05a2b696faeb 100644 GIT binary patch delta 1923 zcmV-}2YmSK5$O@IW&wY0Nklje6TE42BITTby?1{xA0+aQ*@DRC0{#@7>le zAps;Kj6sNL0s!1`-f44aX3$O@p#0#2vIee|K{IiT^1ZeOF4QwILj0)H7%#nU-H| z0aD%;HW(Xn!v@OV0000000000 z001}=N1vA`=afs6Q(J?B>o+Yd>(-`D&F{woPMX|ThE9%7Jb;fNg34000000000005Co_Q*xE*m+@z143@_ewcXq5j913OK_XGxzpu@A zZCnnrpubY35Dsn!3ZNvt#lnnxUx+A%wHOWZu@lrsFerM0SoAIHW8f#4C@e+oWOd4D zWooxAz>I&=UEuSz000~h-xzN==Ra7JpWu9}{+(G=b8z}-g)8HNZ`8k!m_s-hQ_h^b zD(|(4qi}zAN;kpy^>cZ|LFcGoP1b7@2jTu4YpENI$97&-fZD#+g&f6;clM+kjgxm3 z6L5a;!DzGq$A+qVXrP)6MFSXI0o(^TZ67ez1M+{-@Xm6vhF%>|uwg*sI}B4a;K7?I z0010;nSWfiuEmF$x30iOTwZ=>j--u(tV2IF+Ou4H@3SuaL~no{P&NgpScexSpgq^5dSDUhNOY_w}Uum$$E=5 zS34S%Phjx#%%W!vq&>{swx*tBo9{l(nC0hSo_9yc z2g-$!U2D+b00^qDzzy$6JmuZRLgpjss5Yd+Wn@X;aqD7kB#8Fe#!a`jjoKem70EhKh; z#OEIbr`*{%-Hhq_G8i@1jO5X=23$S`aOFVyWX~9Ig(VHNnHbjuborK#}aFI&elVU8LYjo2~VB| z((as%->)iQZ24IOe$oaTYpj0`cWvL@6!-A+r!*xTy#*xM)qB@lX_9?8DF+#%`j%Ah zrB2u)%t#{(QT~vEh^Xq2yp((?et_S;4;ETLsyWAe)M~&NPJ#~U?Tsz4Jq)0*L~u~v ziHjN-LVf|dwg9z%KzI-1;Vrz#(J?m;ZJQk%50J!&@Ge$R>k9 zf!FcLB#6kfrxCTDPzECRktPpJ&&T=17kiN37OK7g0000000000tmt~+{=idtb2@3o zT?5p!CrLbtiJbZzpyt$Pbz7?%-tQyMI*~NvPsu?+9oM;bB`P7OUq17*^r!%N(`678 zK#PNdS_3~wx>Z5k+E;&0Pc1;2cn{QWpU%obp}Kv$C%AU2A=lH%^=!LstBCW^J1FpJ zXqBEOh=-x&t-JLKG}3#cZwPB+ye^_X4z96*U-)X;V%bzcJH4ZF?ec@(0vgA#%jdHz zT0j@#U6?FFt2aV8$Tw=CA+H{0#w7RpZBU;#0000000000003S90GK099`7_TT<@H$ zH19n42IMMT>*v!FShKx=wuj)5Z*;An=MUz%venqMLi(t5t)J%)hGt-0DScGB*3a_? zS;D%tNa>@}w|<^K**<((N*|T(WyKs`xTS!dc9XgY8yM`9{{dDt7^S>p59t5^002ov JPDHLkV1kQmo>c$< delta 1949 zcmV;O2V(f?5$qALW&wY3Nkljdt50421(ITb#Cg|HmBy=N}L!l4D%ouWP!5 z7$X^B3_=_Z0Dv3LJ7os#exI!p5Um-ePQV6=t%CU(7^FX zZ3WPAU=2{7KvsVl!SUEoVASx)^0S3<8=x|QKP?5ahW}`CUmpEkps7G=yQusQwmm<; zGDN|L9jkz59~lD;JiEzA4wPfyT=tVQDD0D?l;j>Z2=NvaS%>aA08 z()Gs4yNU@oKX_*}T7Y9i)jc#&&4!`@46Xof1Dt=h4LH;T^3m|la;}c&s{Qc(?@O&n=0zY~G<^4CW zUgdw!UTQ%eva6N9ms$?#VYq#$d-(G{B~?e^zvJ%@OFwZNP_hEv{viG+8-}ET*N=lZ zX32VsC09Edl(%5;)5M}@4Wu>9uT>xrZ-CL*M5K$#;@GrqwtZmoUr;+RRJNcWEw5700ZIcS=%k zLQ)7&z{2`R&O>$r$;5@H(AZ{?^Y3)M4Gf5p3(wR0iMxS!SAY8Eo8W$i19C_B{w{y` zlWgMO%H{ebT=}QTUkqSw0{2q~QU& zwUF2V67PQyoN{I3;c85mx51!VeF9<~a6M5M^`gnkyTBVujIRJgT-M|a>vZg8y$eAP ze*gdg00000002;xUs$17W4yBk1Z zj^LoY6Bjiwg!}?@sR3&Lfbbf|#jRieMY!BP$I#IF2l$s(fJ4X(F8_aZ8zKW&hL=1l zkxd4J0?*@atcfyxvC~bs}lRpOS-uI<9l=N>oBlKYi!D^r!%N z(Pa=6K(m8_S_5w+U5kGpF6}F)ry3v)ya#I6PiN(zP+h*=6I{Dhk?ZN?dY0X`Rm6Gd z9Ta#sv`R}8#Ldw1(%pIi8tJ{!H-xz{o)=MX2iI7@FC3bdST+^VPVXpO`}{#~0gY|g z<^9@}H-DbL+1`9vN*|T(X~i5~xTS!NHiO-e5Cd0A{}o8`{dV~Q00000 j0000000000Y?BrLR%jTdTaAcF00000NkvXXu0mjf7b&kE From 42fc6497d406e4a4f40d7f7a6ef7ef976bc30391 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 03:13:11 -0500 Subject: [PATCH 047/230] Fixes hair sticking through hats. --- code/modules/clothing/clothing.dm | 1 + code/modules/clothing/head/collectable.dm | 9 +++++++++ code/modules/clothing/head/collectable.dm.rej | 9 +++++++++ code/modules/clothing/head/hardhat.dm | 1 + code/modules/clothing/head/helmet.dm | 1 + code/modules/clothing/head/jobs.dm | 4 ++++ code/modules/clothing/head/misc.dm | 6 +++++- code/modules/clothing/head/misc.dm.rej | 16 ++++++++++++++++ code/modules/clothing/head/misc_special.dm | 2 ++ icons/mob/hair_extensions.dmi | Bin 26997 -> 26993 bytes 10 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 code/modules/clothing/head/collectable.dm.rej create mode 100644 code/modules/clothing/head/misc.dm.rej diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 013fbd8bc4..9b75bb817f 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -253,6 +253,7 @@ BLIND // can't see anything slot_flags = SLOT_HEAD var/blockTracking = 0 //For AI tracking var/can_toggle = null + dynamic_hair_suffix = "+generic" /obj/item/clothing/head/Initialize() . = ..() diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 8ec8d00c77..6c7acefe8f 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -4,6 +4,7 @@ /obj/item/clothing/head/collectable name = "collectable hat" desc = "A rare collectable hat." + dynamic_hair_suffix = "+detective" /obj/item/clothing/head/collectable/petehat name = "ultra rare Pete's hat!" @@ -14,6 +15,7 @@ name = "collectable slime cap!" desc = "It just latches right in place!" icon_state = "slime" + dynamic_hair_suffix = "" /obj/item/clothing/head/collectable/xenom name = "collectable xenomorph helmet!" @@ -25,6 +27,7 @@ desc = "A rare chef's hat meant for hat collectors!" icon_state = "chef" item_state = "chef" + dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/chef @@ -53,6 +56,7 @@ name = "collectable police officer's hat" desc = "A collectable police officer's Hat. This hat emphasizes that you are THE LAW." icon_state = "policehelm" + dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/warden @@ -95,6 +99,7 @@ desc = "The fur feels... a bit too realistic." icon_state = "kitty" item_state = "kitty" + dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/kitty @@ -103,6 +108,7 @@ desc = "Not as lucky as the feet!" icon_state = "bunny" item_state = "bunny" + dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/rabbit @@ -125,6 +131,7 @@ name = "collectable HoS hat" desc = "Now you too can beat prisoners, set silly sentences, and arrest for no reason!" icon_state = "hoscap" + dynamic_hair_suffix = "" /obj/item/clothing/head/collectable/HoP name = "collectable HoP hat" @@ -138,6 +145,7 @@ icon_state = "thunderdome" item_state = "thunderdome" resistance_flags = 0 + flags_inv = HIDEHAIR /obj/item/clothing/head/collectable/swat name = "collectable SWAT helmet" @@ -145,3 +153,4 @@ icon_state = "swat" item_state = "swat" resistance_flags = 0 + flags_inv = HIDEHAIR diff --git a/code/modules/clothing/head/collectable.dm.rej b/code/modules/clothing/head/collectable.dm.rej new file mode 100644 index 0000000000..82a9962cb8 --- /dev/null +++ b/code/modules/clothing/head/collectable.dm.rej @@ -0,0 +1,9 @@ +diff a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm (rejected hunks) +@@ -4,7 +4,6 @@ + /obj/item/clothing/head/collectable + name = "collectable hat" + desc = "A rare collectable hat." +- dynamic_hair_suffix = "+detective" + + + /obj/item/clothing/head/collectable/petehat diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 28fe8cacfb..6eefb458ed 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -10,6 +10,7 @@ flags_inv = 0 actions_types = list(/datum/action/item_action/toggle_helmet_light) resistance_flags = FIRE_PROOF + dynamic_hair_suffix = "+generic" dog_fashion = /datum/dog_fashion/head diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index f100df4366..24d8049ac7 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -12,6 +12,7 @@ strip_delay = 60 resistance_flags = 0 flags_cover = HEADCOVERSEYES + flags_inv = HIDEHAIR dog_fashion = /datum/dog_fashion/head/helmet diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 23b3da72ef..6a127f571b 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -7,6 +7,7 @@ desc = "The commander in chef's head wear." strip_delay = 10 equip_delay_other = 10 + dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/chef /obj/item/clothing/head/chefhat/suicide_act(mob/user) @@ -62,6 +63,7 @@ item_state = "cage" worn_x_dimension = 64 worn_y_dimension = 64 + dynamic_hair_suffix = "" /obj/item/clothing/head/witchunter_hat @@ -99,6 +101,7 @@ desc = "A beret, a mime's favorite headwear." icon_state = "beret" dog_fashion = /datum/dog_fashion/head/beret + dynamic_hair_suffix = "" /obj/item/clothing/head/beret/black name = "black beret" @@ -118,6 +121,7 @@ icon_state = "hoscap" armor = list(melee = 40, bullet = 30, laser = 25, energy = 10, bomb = 25, bio = 10, rad = 0, fire = 50, acid = 60) strip_delay = 80 + dynamic_hair_suffix = "" /obj/item/clothing/head/HoS/syndicate name = "syndicate cap" diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 3eabbad438..ac82fc92db 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -56,6 +56,7 @@ name = "nurse's hat" desc = "It allows quick identification of trained medical personnel." icon_state = "nursehat" + dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/nurse @@ -110,6 +111,7 @@ name = "rabbit ears" desc = "Wearing these makes you look useless, and only good for your sex appeal." icon_state = "bunny" + dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/rabbit @@ -136,12 +138,14 @@ desc = "Yarr." icon_state = "bandana" item_state = "bandana" + dynamic_hair_suffix = "" /obj/item/clothing/head/bowler name = "bowler-hat" desc = "Gentleman, elite aboard!" icon_state = "bowler" item_state = "bowler" + dynamic_hair_suffix = "" /obj/item/clothing/head/witchwig name = "witch costume wig" @@ -183,7 +187,6 @@ item_state = "fedora" armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 30, acid = 50) desc = "A really cool hat if you're a mobster. A really lame hat if you're not." - dynamic_hair_suffix = "+detective" pockets = /obj/item/weapon/storage/internal/pocket/small /obj/item/clothing/head/fedora/suicide_act(mob/user) @@ -277,6 +280,7 @@ icon_state = "crown" armor = list(melee = 15, bullet = 0, laser = 0,energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) resistance_flags = FIRE_PROOF + dynamic_hair_suffix = "" /obj/item/clothing/head/crown/fancy name = "magnificent crown" diff --git a/code/modules/clothing/head/misc.dm.rej b/code/modules/clothing/head/misc.dm.rej new file mode 100644 index 0000000000..df85f74b20 --- /dev/null +++ b/code/modules/clothing/head/misc.dm.rej @@ -0,0 +1,16 @@ +diff a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm (rejected hunks) +@@ -250,7 +250,7 @@ + name = "jester hat" + desc = "A hat with bells, to add some merriness to the suit." + icon_state = "jester_hat" +- dynamic_hair_suffix = "null" ++ dynamic_hair_suffix = "" + + /obj/item/clothing/head/rice_hat + name = "rice hat" +@@ -302,4 +302,4 @@ + name = "jester hat" + desc = "A hat with bells, to add some merriness to the suit." + icon_state = "jester_hat2" +- dynamic_hair_suffix = "null" ++ dynamic_hair_suffix = "" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 4c14fc0422..d15c7dd5f4 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -125,6 +125,7 @@ desc = "A pair of kitty ears. Meow!" icon_state = "kitty" color = "#999999" + dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/kitty @@ -150,6 +151,7 @@ flags_inv = 0 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) brightness_on = 1 //luminosity when on + dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/reindeer diff --git a/icons/mob/hair_extensions.dmi b/icons/mob/hair_extensions.dmi index bd2adda94bd5bf652747baf6a360b8d63976bb47..5a4ee36157718e997c538c12d07849980ec37898 100644 GIT binary patch delta 653 zcmV;80&@NJ(gE?(0gxnrVtQ0qbVOxyV{&P5bZKvH004NLotUw18!-?>Yw0Tpy9^K{ zwo|GJYy>XsUkH}s9=SOlms#>o(ch=Au1S?)DS!_=4rh0kx_94Se!RZB=eO76#@0lO zJGrONUyg^1gr3~VJw6-{i6y4~@uPL>>`v}3k=RfFDRNyh9p_|y!IgoJXMl~*E%NP%zOpqkVum$2H}J^60}no zNdOgyoHK*_G_uHlRKOdWDbfOV3Ytv819|2o8)!MN{=8ZqfItzvUNQ`wb@95fft2wD z-YW1WS@@dBEAV(JM!P?D}->(W3ag5Rc#H_$$ntfNI#b*U6|1x5J1$~0lfS_3FS zB}09^f|Em&z?}pvxt#)g0+r6C5GaCar>I5HD5?@W2|5IS>_-DrHVx!NJq0+9nR8Vl5-*fi`YvXjJm-- zT4hF?MwR)0imG_CE$Y7;1{%YwM;&+*4}B0_xT24!Dt`p*V|&=4GJMST=u^HWwLXxO z3rFHBd(#VO!mK62L-BAbw4~OD$gCwc35*YXSxao)NMh=Hw?oJIn8wH^;eY-wxpyz` n&+hr{_4pTcrA1-|Eu^CW03ZNKL_t(|ob26UY#V8_qXN=q2tPDb delta 653 zcmV;80&@NF(gF3-0gxnrW_naubVOxyV{&P5bZKvH004NLrI;~q8!-%pXZu$O$ylIh zlXUb_Bq%Z@f1#i(p2VI`R4LuL{`Vc~TRQcrqlXW&o*wzgyLVq-zP-M?=eO76#@0lO zJGrNipN@x%gr3~VJw6-{i6y4~=SS<**`3^7BC+rOL*UNmE*sx}9S=dQxs!W39wwuO zn>)GBe*tF{2q@q=BqkW!vX+QKKe#k5C^fH*3PnM=s^!{A^1~?jWl+lvJ~3;FlSzpT z8)UWIP$W;yw*`MABU_tre@X>xxvERFj$yYW#%g^j6|ADQEY_qMuK+~ zBMGn;k#lDFtVR}pnF{=3Geuh9jzW_ud@;|QWP`2f)t^_(Ll`WF*GnG2&boNr*kI21 zGH_hrO|qV6l;Z_9{>0Q1ez7E7;YO!{N`(KRF5X~MRkDs3S=FUd&=r>B=PJ{LLTe4M z7?lk7{0dJZO#*ikxF~lH?j2M*mqM@{rk$b|!K187>?HVqNU>iLPU|$3F_BBpu>G}g zOSHW#h~1>dA_ zYxw-iA#zf9-PsQuetGyEyuur%UrS=b=e6A{Pa|F#Vem4LIA!Vsi5yIFP9$)ldx^tg zIox@x%y@HusWM-2MQ?`2eR%_6vv~EmGjBrT>)3@WzQk4eC2-f<;}RF-&o+U7VrWUN z4`uDbk@(8q^a7hRYl#En_kZL`OKN?P&01oUz$4>i))HGcl9>A58}aoarct&@__uF5 n_wMEW**(9#9)ANQOqhb69q$JK03ZNKL_t(|ob27Rn*!EmTyaCq From 4fdd3215d6bd255918a84b48fcc6faa82332e86f Mon Sep 17 00:00:00 2001 From: ktccd Date: Sun, 6 Aug 2017 11:12:13 +0200 Subject: [PATCH 048/230] Fixes no-genitalia Genitals now updates with any changes. All the other changes in the code you see in the commit, I didn't touch. Nothing changed, git just thinks I replaced some lines with themselves for some godawful reason..... --- code/modules/client/preferences.dm | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 484e09c5ad..1e07ee4ce0 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -19,8 +19,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) //game-preferences var/lastchangelog = "" //Saved changlog filesize to detect if there was a change var/ooccolor = null - var/enable_tips = TRUE - var/tip_delay = 500 //tip delay in milliseconds + var/enable_tips = TRUE + var/tip_delay = 500 //tip delay in milliseconds //Antag preferences var/list/be_special = list() //Special role selection @@ -30,7 +30,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/UI_style = "Midnight" - var/buttons_locked = FALSE + var/buttons_locked = FALSE var/hotkeys = FALSE var/tgui_fancy = TRUE var/tgui_lock = TRUE @@ -279,7 +279,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

General Settings

" dat += "UI Style: [UI_style]
" dat += "Keybindings: [(hotkeys) ? "Hotkeys" : "Default"]
" - dat += "Action Buttons: [(buttons_locked) ? "Locked In Place" : "Unlocked"]
" + dat += "Action Buttons: [(buttons_locked) ? "Locked In Place" : "Unlocked"]
" dat += "tgui Style: [(tgui_fancy) ? "Fancy" : "No Frills"]
" dat += "tgui Monitors: [(tgui_lock) ? "Primary" : "All"]
" dat += "Window Flashing: [(windowflashing) ? "Yes" : "No"]
" @@ -1499,8 +1499,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("hotkeys") hotkeys = !hotkeys - if("action_buttons") - buttons_locked = !buttons_locked + if("action_buttons") + buttons_locked = !buttons_locked if("tgui_fancy") tgui_fancy = !tgui_fancy if("tgui_lock") @@ -1646,3 +1646,4 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.update_body() character.update_hair() character.update_body_parts() + character.update_genitals() From 52426638859677e73fdec21b89271c8d0dfc9c3b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 12:42:08 -0500 Subject: [PATCH 049/230] Freon now simply uses a color matrix rather than blending an icon --- code/__HELPERS/icons.dm | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index b2a9260ce1..04ea69a43f 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -968,32 +968,28 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) /image/proc/setDir(newdir) dir = newdir -/atom/proc/freeze_icon_index() - return "\ref[initial(icon)]-[initial(icon_state)]" +#define FROZEN_RED_COLOR "#2E5E69" +#define FROZEN_GREEN_COLOR "#60A2A8" +#define FROZEN_BLUE_COLOR "#A1AFB1" /obj/proc/make_frozen_visual() // Used to make the frozen item visuals for Freon. - var/static/list/freeze_item_icons = list() if(resistance_flags & FREEZE_PROOF) return - if(!HAS_SECONDARY_FLAG(src, FROZEN) && (initial(icon) && initial(icon_state))) - var/index = freeze_icon_index() - var/icon/IC - var/icon/P = freeze_item_icons[index] - if(!P) - P = new /icon - for(var/iconstate in icon_states(icon)) - var/icon/O = new('icons/effects/freeze.dmi', "ice_cube") - IC = new(icon, iconstate) - O.Blend(IC, ICON_ADD) - P.Insert(O, iconstate) - freeze_item_icons[index] = P - icon = P + if(!HAS_SECONDARY_FLAG(src, FROZEN)) name = "frozen [name]" + add_atom_colour(list(FROZEN_RED_COLOR, FROZEN_GREEN_COLOR, FROZEN_BLUE_COLOR, rgb(0,0,0)), TEMPORARY_COLOUR_PRIORITY) + alpha -= 25 SET_SECONDARY_FLAG(src, FROZEN) //Assumes already frozed /obj/proc/make_unfrozen() - icon = initial(icon) - name = replacetext(name, "frozen ", "") - CLEAR_SECONDARY_FLAG(src, FROZEN) + if(HAS_SECONDARY_FLAG(src, FROZEN)) + name = replacetext(name, "frozen ", "") + remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, list(FROZEN_RED_COLOR, FROZEN_GREEN_COLOR, FROZEN_BLUE_COLOR, rgb(0,0,0))) + alpha += 25 + CLEAR_SECONDARY_FLAG(src, FROZEN) + +#undef FROZEN_RED_COLOR +#undef FROZEN_GREEN_COLOR +#undef FROZEN_BLUE_COLOR From fc1dd6cc062a03725a10908a0ec6c07580163c4b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 16:56:33 -0500 Subject: [PATCH 050/230] Adds high-contrast inhand templates for spriters --- icons/mob/inhands/__inhand_template.dmi | Bin 0 -> 780 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 icons/mob/inhands/__inhand_template.dmi diff --git a/icons/mob/inhands/__inhand_template.dmi b/icons/mob/inhands/__inhand_template.dmi new file mode 100644 index 0000000000000000000000000000000000000000..283428495c14a44c88361e88a4c32868aed48cf2 GIT binary patch literal 780 zcmV+n1M~ceP)b&M_yY700001bW%=J06^y0W&i*H zmU>iJbVOxyV{&P5bZKvH004NLQ&wi$=v?L?GAhD>VSc!`>C9|j)C~C;XnO2mTn+jpW z)#l|F5v?{gvABdtrRAwaD}}hWI6o&dg;?hjsTk~DBGrN&j9;y?f~%hkI6?rIx_Qyj zW7*IE00Hz#L_t(oh3%EUZo)7S#zSd<(Jd4fIwQpJu$l^Ll+R)!84S(7Pi z{FJqwDE9ZI%^yM$MfG;}{ruh8=dEwY z>`I`Ph)Q5T1~}M&TLHUzxdfu00ewoY0rV-&t_gI7G*wA&ZwNS54(3?P9QFnX4{+1n zwM3=i%;S$Zw(LdnnIyEMgTRr169RKseheU1z|q)=0!|1V$&9T%78*#C30xG?u%zjfx^=l&;lrdK^h`khfB^OXQ~~hfa(Zzw0GF5082&+usP_mTX@Kuwvl%a0Lag3A86Y_>_t!khS?QMKdJ+$_Wq*@GrK0dIDed2i0CEjDY0;0000< KMNUMnLSTY74Nsx~ literal 0 HcmV?d00001 From d63cfc226b4fb20a6b0ba2c3d188c586bf032f38 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 17:56:24 -0500 Subject: [PATCH 051/230] Adds back icon for monk's staff --- icons/mob/back.dmi | Bin 92149 -> 92468 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 55d36996b7c9d621f523797bf1dc53539b819147..06699662c052e9f67c173e79ca76bf783f7b3e26 100644 GIT binary patch delta 9608 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 byGEewIL1J}bSuPxkWJyOvP^}PN#OqhDx)-9 delta 9211 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 Date: Sun, 6 Aug 2017 18:02:33 -0500 Subject: [PATCH 052/230] Fixes certain things clearing weather overlays --- code/game/area/areas.dm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 2a139da456..3f0b780205 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -338,7 +338,14 @@ GLOBAL_LIST_EMPTY(teleportlocs) else icon_state = "blue-red" else - icon_state = null + var/weather_icon + for(var/V in SSweather.existing_weather) + var/datum/weather/W = V + if(src in W.impacted_areas) + W.update_areas() + weather_icon = TRUE + if(!weather_icon) + icon_state = null /area/space/updateicon() icon_state = null From b10172104e850e2104d4813ccc5f737f9c5ad495 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 18:02:36 -0500 Subject: [PATCH 053/230] Guests can now speak in ooc, reorder the ooc verb handling --- code/modules/client/verbs/ooc.dm | 38 +++++++++++++++----------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index f082c4971c..aeb1a7fdcf 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -9,9 +9,19 @@ if(!mob) return - if(IsGuestKey(key)) - to_chat(src, "Guests may not use OOC.") - return + if(!holder) + if(!GLOB.ooc_allowed) + to_chat(src, "OOC is globally muted.") + return + if(!GLOB.dooc_allowed && (mob.stat == DEAD)) + to_chat(usr, "OOC for dead mobs has been turned off.") + return + if(prefs.muted & MUTE_OOC) + to_chat(src, "You cannot use OOC (muted).") + return + if(jobban_isbanned(src.mob, "OOC")) + to_chat(src, "You have been banned from OOC.") + return msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) var/raw_msg = msg @@ -25,24 +35,7 @@ if(alert("Your message \"[raw_msg]\" looks like it was meant for in game communication, say it in OOC?", "Meant for OOC?", "No", "Yes") != "Yes") return - if(!(prefs.chat_toggles & CHAT_OOC)) - to_chat(src, "You have OOC muted.") - return - if(!holder) - if(!GLOB.ooc_allowed) - to_chat(src, "OOC is globally muted.") - return - if(!GLOB.dooc_allowed && (mob.stat == DEAD)) - to_chat(usr, "OOC for dead mobs has been turned off.") - return - if(prefs.muted & MUTE_OOC) - to_chat(src, "You cannot use OOC (muted).") - return - if(src.mob) - if(jobban_isbanned(src.mob, "OOC")) - to_chat(src, "You have been banned from OOC.") - return if(handle_spam_prevention(msg,MUTE_OOC)) return if(findtext(msg, "byond://")) @@ -51,6 +44,11 @@ message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]") return + if(!(prefs.chat_toggles & CHAT_OOC)) + to_chat(src, "You have OOC muted.") + return + + log_talk(mob,"[key_name(src)] : [raw_msg]",LOGOOC) mob.log_message("[key]: [raw_msg]", INDIVIDUAL_OOC_LOG) From 7e539bfe3bf63a030838ad37c4b5ed30b43d92d7 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 18:02:40 -0500 Subject: [PATCH 054/230] Fixes Explosive Lattice blobs being way more fragile than they should be --- code/modules/reagents/chemistry/reagents/blob_reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm index f1e46a6322..054e9a84cf 100644 --- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm @@ -313,7 +313,7 @@ /datum/reagent/blob/explosive_lattice/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) if(damage_flag == "bomb") return 0 - else if(damage_flag != "melee" || damage_flag != "bullet" || damage_flag != "laser") + else if(damage_flag != "melee" && damage_flag != "bullet" && damage_flag != "laser") return damage * 1.5 return ..() From e80f1dba991eb7457fd1def0505dae749496201f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 18:02:43 -0500 Subject: [PATCH 055/230] Fixes being able to "stomp out" sigils with telekinesis --- code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm index 7443188255..98186a5cdf 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm @@ -19,6 +19,9 @@ return 1 return ..() +/obj/effect/clockwork/sigil/attack_tk(mob/user) + return //you can't tk stomp sigils, but you can hit them with something + /obj/effect/clockwork/sigil/attack_hand(mob/user) if(iscarbon(user) && !user.stat && !is_servant_of_ratvar(user)) user.visible_message("[user] stamps out [src]!", "You stomp on [src], scattering it into thousands of particles.") From d071a788882f3c6438d920e738e283134f8efa7c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 18:02:47 -0500 Subject: [PATCH 056/230] Sounds played with sound_to_playing_players are less tinny --- code/game/sound.dm | 2 +- code/modules/admin/secrets.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/sound.dm b/code/game/sound.dm index aa41e0c7e3..c728071e50 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -85,7 +85,7 @@ for(var/M in GLOB.player_list) if(ismob(M) && !isnewplayer(M)) var/mob/MO = M - MO.playsound_local(get_turf(MO), sound, volume, vary, pressure_affected = FALSE) + MO.playsound_local(MO, sound, volume, vary, pressure_affected = FALSE) /proc/open_sound_channel() var/static/next_channel = 1 //loop through the available 1024 - (the ones we reserve) channels and pray that its not still being used diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 2b844d40b4..be09ebd3ef 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -517,14 +517,14 @@ return SSblackbox.add_details("admin_secrets_fun_used","There Can Be Only One") usr.client.only_one() - send_to_playing_players('sound/misc/highlander.ogg') + sound_to_playing_players('sound/misc/highlander.ogg') if("delayed_onlyone") if(!check_rights(R_FUN)) return SSblackbox.add_details("admin_secrets_fun_used","There Can Be Only One") usr.client.only_one_delayed() - send_to_playing_players('sound/misc/highlander_delayed.ogg') + sound_to_playing_players('sound/misc/highlander_delayed.ogg') if("onlyme") if(!check_rights(R_FUN)) From 1b2efdcc1d65b9783befd9bb72aa73b1a117a614 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Aug 2017 18:02:51 -0500 Subject: [PATCH 057/230] More Initialize() garbage --- code/game/objects/effects/spawners/bombspawner.dm | 2 +- code/game/objects/items/stacks/tiles/light.dm | 4 ++-- code/game/turfs/simulated/floor/plating/asteroid.dm | 4 ++-- .../turfs/simulated/floor/plating/misc_plating.dm | 8 ++++---- code/modules/holodeck/turfs.dm | 12 ++++++------ code/modules/library/random_books.dm | 8 ++++---- .../mob/living/simple_animal/hostile/stickman.dm | 2 +- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index 6f307d9e59..7f8adbf6a9 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -7,7 +7,7 @@ var/assembly_type /obj/effect/spawner/newbomb/Initialize() - ..() + . = ..() var/obj/item/device/transfer_valve/V = new(src.loc) var/obj/item/weapon/tank/internals/plasma/full/PT = new(V) var/obj/item/weapon/tank/internals/oxygen/OT = new(V) diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm index b4b31eac08..a5ff449508 100644 --- a/code/game/objects/items/stacks/tiles/light.dm +++ b/code/game/objects/items/stacks/tiles/light.dm @@ -9,7 +9,7 @@ var/state = 0 /obj/item/stack/tile/light/Initialize(mapload, new_amount, merge = TRUE) - ..() + . = ..() if(prob(5)) state = 3 //broken else if(prob(5)) @@ -27,4 +27,4 @@ if(amount <= 0) qdel(src) else - return ..() \ No newline at end of file + return ..() diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index 7666472a65..ec84bff35d 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -17,7 +17,7 @@ /turf/open/floor/plating/asteroid/Initialize() var/proper_name = name - ..() + . = ..() name = proper_name if(prob(floor_variance)) icon_state = "[environment_type][rand(0,12)]" @@ -124,7 +124,7 @@ initial_gas_mix = "TEMP=2.7" /turf/open/floor/plating/asteroid/basalt/Initialize() - ..() + . = ..() set_basalt_light(src) /proc/set_basalt_light(turf/open/floor/B) diff --git a/code/game/turfs/simulated/floor/plating/misc_plating.dm b/code/game/turfs/simulated/floor/plating/misc_plating.dm index cf0ec5531c..9a6d5eb467 100644 --- a/code/game/turfs/simulated/floor/plating/misc_plating.dm +++ b/code/game/turfs/simulated/floor/plating/misc_plating.dm @@ -8,7 +8,7 @@ icon_state = "alienpod1" /turf/open/floor/plating/abductor/Initialize() - ..() + . = ..() icon_state = "alienpod[rand(1,9)]" @@ -46,7 +46,7 @@ pixel_y = -4 pixel_x = -4 icon = smooth_icon - ..() + . = ..() /turf/open/floor/plating/ashplanet/break_tile() return @@ -74,7 +74,7 @@ /turf/open/floor/plating/ashplanet/wateryrock/Initialize() icon_state = "[icon_state][rand(1, 9)]" - ..() + . = ..() /turf/open/floor/plating/beach @@ -114,7 +114,7 @@ desc = "Like sand, but more metal." /turf/open/floor/plating/ironsand/Initialize() - ..() + . = ..() icon_state = "ironsand[rand(1,15)]" /turf/open/floor/plating/ironsand/burn_tile() diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm index 38ce9c70f1..6f28702892 100644 --- a/code/modules/holodeck/turfs.dm +++ b/code/modules/holodeck/turfs.dm @@ -44,14 +44,14 @@ /turf/open/floor/holofloor/asteroid/Initialize() icon_state = "asteroid[rand(0, 12)]" - ..() + . = ..() /turf/open/floor/holofloor/basalt name = "basalt" icon_state = "basalt0" /turf/open/floor/holofloor/basalt/Initialize() - ..() + . = ..() if(prob(15)) icon_state = "basalt[rand(0, 12)]" set_basalt_light(src) @@ -63,7 +63,7 @@ /turf/open/floor/holofloor/space/Initialize() icon_state = SPACE_ICON_STATE // so realistic - ..() + . = ..() /turf/open/floor/holofloor/hyperspace name = "hyperspace" @@ -72,10 +72,10 @@ /turf/open/floor/holofloor/hyperspace/Initialize() icon_state = "speedspace_ns_[(x + 5*y + (y%2+1)*7)%15+1]" - ..() + . = ..() /turf/open/floor/holofloor/hyperspace/ns/Initialize() - ..() + . = ..() icon_state = "speedspace_ns_[(x + 5*y + (y%2+1)*7)%15+1]" /turf/open/floor/holofloor/carpet @@ -89,7 +89,7 @@ canSmoothWith = null /turf/open/floor/holofloor/carpet/Initialize() - ..() + . = ..() addtimer(CALLBACK(src, .proc/update_icon), 1) /turf/open/floor/holofloor/carpet/update_icon() diff --git a/code/modules/library/random_books.dm b/code/modules/library/random_books.dm index e2ea2a86c5..1143dbf9a7 100644 --- a/code/modules/library/random_books.dm +++ b/code/modules/library/random_books.dm @@ -1,5 +1,5 @@ /obj/item/weapon/book/manual/random/Initialize() - ..() + . = ..() var/static/banned_books = list(/obj/item/weapon/book/manual/random, /obj/item/weapon/book/manual/nuclear, /obj/item/weapon/book/manual/wiki) var/newtype = pick(subtypesof(/obj/item/weapon/book/manual) - banned_books) new newtype(loc) @@ -10,7 +10,7 @@ var/category = null /obj/item/weapon/book/random/Initialize() - ..() + . = ..() create_random_books(amount, src.loc, TRUE, category) qdel(src) @@ -24,7 +24,7 @@ state = 2 /obj/structure/bookcase/random/Initialize(mapload) - ..() + . = ..() if(!book_count || !isnum(book_count)) update_icon() return @@ -77,7 +77,7 @@ var/ref_book_prob = 20 /obj/structure/bookcase/random/reference/Initialize(mapload) - ..() + . = ..() while(book_count > 0 && prob(ref_book_prob)) book_count-- new /obj/item/weapon/book/manual/random(src) diff --git a/code/modules/mob/living/simple_animal/hostile/stickman.dm b/code/modules/mob/living/simple_animal/hostile/stickman.dm index 15dfd7ad9d..5a9d3a2928 100644 --- a/code/modules/mob/living/simple_animal/hostile/stickman.dm +++ b/code/modules/mob/living/simple_animal/hostile/stickman.dm @@ -51,7 +51,7 @@ icon_dead = "stickdog_dead" /mob/living/simple_animal/hostile/stickman/Initialize(mapload, var/wizard_summoned) - ..() + . = ..() new /obj/effect/temp_visual/paper_scatter(src) summoned_by_wizard = wizard_summoned From ac7235edcc1dcf05c62b4424146d46aa9a920fcb Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 7 Aug 2017 07:17:56 -0500 Subject: [PATCH 058/230] Automatic changelog generation for PR #2266 [ci skip] --- html/changelogs/AutoChangeLog-pr-2266.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2266.yml diff --git a/html/changelogs/AutoChangeLog-pr-2266.yml b/html/changelogs/AutoChangeLog-pr-2266.yml new file mode 100644 index 0000000000..2a02edfb87 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2266.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - bugfix: "Objects on shuttles now rotate in the correct directions." From cf7f3d9c4e96b1c97360a9b3439f279870daf81c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 7 Aug 2017 07:20:10 -0500 Subject: [PATCH 059/230] Automatic changelog generation for PR #2274 [ci skip] --- html/changelogs/AutoChangeLog-pr-2274.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2274.yml diff --git a/html/changelogs/AutoChangeLog-pr-2274.yml b/html/changelogs/AutoChangeLog-pr-2274.yml new file mode 100644 index 0000000000..ef5c537edd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2274.yml @@ -0,0 +1,4 @@ +author: "Lexorion" +delete-after: True +changes: + - imageadd: "Hearty Punch has a new, fancier sprite." From f6b44be06a3f84bb0ad0bdfd5945d2b64b6c04cc Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 7 Aug 2017 07:22:14 -0500 Subject: [PATCH 060/230] Automatic changelog generation for PR #2281 [ci skip] --- html/changelogs/AutoChangeLog-pr-2281.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2281.yml diff --git a/html/changelogs/AutoChangeLog-pr-2281.yml b/html/changelogs/AutoChangeLog-pr-2281.yml new file mode 100644 index 0000000000..189f18a117 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2281.yml @@ -0,0 +1,4 @@ +author: "ktccd" +delete-after: True +changes: + - bugfix: "Character preview now displays genitals again." From ab86beab8ac42fd54f410816a2a2fd6f1d4bf27b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 7 Aug 2017 07:24:06 -0500 Subject: [PATCH 061/230] Automatic changelog generation for PR #2287 [ci skip] --- html/changelogs/AutoChangeLog-pr-2287.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2287.yml diff --git a/html/changelogs/AutoChangeLog-pr-2287.yml b/html/changelogs/AutoChangeLog-pr-2287.yml new file mode 100644 index 0000000000..d6b77f9436 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2287.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - bugfix: "Turning off APCs will no longer make the weather in that area invisible." From 54bb4565e1155e7125d9ae705964a4ffbc777de2 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 7 Aug 2017 07:26:19 -0500 Subject: [PATCH 062/230] Automatic changelog generation for PR #2291 [ci skip] --- html/changelogs/AutoChangeLog-pr-2291.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2291.yml diff --git a/html/changelogs/AutoChangeLog-pr-2291.yml b/html/changelogs/AutoChangeLog-pr-2291.yml new file mode 100644 index 0000000000..4b87a21dfd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2291.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - soundadd: "The speakers in the ceiling have been upgraded, and many sounds are now less tinny." From fbabd14798d583e4370e8de8403533da0fbc1a94 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 7 Aug 2017 12:26:15 -0500 Subject: [PATCH 063/230] Fixes adminhelp sending the wrong message to players --- code/modules/admin/verbs/adminhelp.dm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 0177798e25..44755c46fc 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -194,7 +194,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) AddInteraction("[key_name_admin(usr)] PM'd [LinkedReplyName()]") message_admins("Ticket [TicketHref("#[id]")] created") else - MessageNoRecipient(parsed_message) + MessageNoRecipient(msg, parsed_message) //send it to irc if nobody is on and tell us how many were on var/admin_number_present = send2irc_adminless_only(initiator_ckey, "Ticket #[id]: [name]") @@ -249,18 +249,19 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) //message from the initiator without a target, all admins will see this //won't bug irc -/datum/admin_help/proc/MessageNoRecipient(msg) +/datum/admin_help/proc/MessageNoRecipient(msg, parsed_msg) var/ref_src = "\ref[src]" - var/chat_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [msg]" + //Message to be sent to all admins + var/admin_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [parsed_msg]" AddInteraction("[LinkedReplyName(ref_src)]: [msg]") + //send this msg to all admins - for(var/client/X in GLOB.admins) if(X.prefs.toggles & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' window_flash(X, ignorepref = TRUE) - to_chat(X, chat_msg) + to_chat(X, admin_msg) //show it to the person adminhelping too to_chat(initiator, "PM to-Admins: [msg]") From 40a8449f11d378ab1e0a48e7ed54c694003a5571 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 7 Aug 2017 12:26:20 -0500 Subject: [PATCH 064/230] GM completion check and mulligan now check to see if players are logged out --- code/game/gamemodes/game_mode.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index f6fef13305..2a0cd230d5 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -111,7 +111,7 @@ var/list/living_crew = list() for(var/mob/Player in GLOB.mob_list) - if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player)) + if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) && !isbrain(Player) && Player.client) living_crew += Player if(living_crew.len / GLOB.joined_player_list.len <= config.midround_antag_life_check) //If a lot of the player base died, we start fresh message_admins("Convert_roundtype failed due to too many dead people. Limit is [config.midround_antag_life_check * 100]% living crew") @@ -208,7 +208,7 @@ return 0 //A resource saver: once we find someone who has to die for all antags to be dead, we can just keep checking them, cycling over everyone only when we lose our mark. for(var/mob/Player in GLOB.living_mob_list) - if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player)) + if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player) && Player.client) if(Player.mind.special_role) //Someone's still antaging! living_antag_player = Player return 0 From dad39bb1a4eb83af2eb661ae6a739a8705965e5e Mon Sep 17 00:00:00 2001 From: ktccd Date: Tue, 8 Aug 2017 10:22:04 +0200 Subject: [PATCH 065/230] Fixes displaying digestion alert for preys visible_message doesn't actually send anything to a dead mob, probably because they can't hear. Moved that it's own message piece instead. [0.5h testing memes] --- code/modules/vore/eating/bellymodes_vr.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 149094de3f..b58875bd1f 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -45,7 +45,8 @@ //Send messages to_chat(owner, "[digest_alert_owner]") - M.visible_message("You watch as [owner]'s form loses its additions.", "[digest_alert_prey]") + to_chat(M, "[digest_alert_prey]") + M.visible_message("You watch as [owner]'s form loses its additions.") owner.nutrition += 400 // so eating dead mobs gives you *something*. M.stop_sound_channel(CHANNEL_PRED) From d3b5f0aa6d4dedcaed17adffd261260d2d4a607b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 8 Aug 2017 05:49:17 -0500 Subject: [PATCH 066/230] Laptops now have actual sprites for using the supermatter monitoring instead of defaulting to a generic one. --- .../file_system/programs/sm_monitor.dm | 10 +++------- icons/obj/modular_laptop.dmi | Bin 22578 -> 24127 bytes 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm index cfe019e193..d62907f026 100644 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm @@ -22,16 +22,12 @@ if(last_status != new_status) last_status = new_status ui_header = "smmon_[last_status].gif" - if(istype(computer) && !(computer.hardware_flag == PROGRAM_LAPTOP)) - program_icon_state = "smmon_[last_status]" - if(istype(computer)) - computer.update_icon() + program_icon_state = "smmon_[last_status]" + if(istype(computer)) + computer.update_icon() /datum/computer_file/program/supermatter_monitor/run_program(mob/living/user) . = ..(user) - if(istype(computer) && (computer.hardware_flag == PROGRAM_LAPTOP)) - program_icon_state = "engine" - computer.update_icon() refresh() /datum/computer_file/program/supermatter_monitor/kill_program(forced = FALSE) diff --git a/icons/obj/modular_laptop.dmi b/icons/obj/modular_laptop.dmi index 7026f52ee0d932fa0469162cc0725c2251cd262f..1e506ca6feb7012d60424f8717d91f9864dbbc3a 100644 GIT binary patch literal 24127 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 literal 22578 zcmd43cUTi&+ci2gK~Rc_2q++^C{+{%qy(i2h!p892m%5^1nDISO_~Z8KtYNWK_EnG zkQSs0C{=n1MWnYtfRJ_uf6sH??|kPw@AaPVkN2GG;+mO+NoMw*z1O|&d##;V!+YAt zS@~H3064C5N5dEZ=)ps}X_h14Zs6D8Jott~kcowlhSO6=Z`UV2t}ssk2>6g>*5NsR zg;PZjdh5LT&BWgqy1zxAVrR{HB259plG{!hz0P6(tUx3Qo@se2m3o!MqcLsm=O^vm zZNl)M7br~H&e`v}a*tb`4J=d7IIZzlISh#C^Cw2PrK=Wmvya57Tx>eMyUG&Msv@0S?p zcAGP{BQ^X^br1`lniYLaPGZ?q+2-j9l<6OfK`K#L0=S+y5GiJxcDeTK{c3MD16_8n z|KeFzOPh>4X)QdHt9UHFn|TDnHvZ}9J*MpUb}>N?1&rxY$;~Gf40}bsa>?2*M;D4J zW=lwX42wM5CZ)orm$6O#Sw2*WiW?W%9}YXNF*h@vWBO=57&*w>Q?z=rnx?Sg+Iy3) zQ@=-sExhm|d&}9jNwgA*;o(Hdh2y5&k7`<{Sr&WpjB{SGU$%$ zc;>lR)K7aF7eFJJVs8)x@@JV86>hwP2SpX0QbTn?61bkRc4-PmvU*C?^qd#}z zTx7hFf-@Ztie>2d9jTP#;W3Pi5-8Kc{b`+UBZHOsJ6py_PhHYZ=u{l6(jmOHsx&UV zloCYOaf0*fc{9Zs7LkW3^diGZfu~_#77~6cy-!ac?OL^Y{bO%ine=0|?i%U+-sI0Z z?A}%Gl%55KbCI04KWK{88X!4uvz!}h1`hXL!b^UcYLXcNv$2WZ9WUI{P>ICyT0FF=JWUw}b z@?n(q@E;0zp%|Wu&w%|hWlJb2Nwcnkd>HJcqdyYd=}z%gN&tyv+?> zz^v~RI6p@!-Fe;I-Dmu2XZA>@d#}uY)cUQ(>GDcFtvnTEz4yjUaQ7wQG{Lgx;D$-1 zJYs0Y@)B-3E{Lv(b#ql&48=~0`v;S^5gcdyZVv#@-~3PIAKqvmyI0BJI46qV|VpvEmKiGf^FGGI(Fwzq<2$}m<)Hx{Y!l2H?(GJfv*YbIaN@Fy7eDtK z)ZlR>dHY^{VvqzaLuSDw;|#wo_PlP-Sw#g!l178sJV!+-p!Q^c^T9)B=j?_C!T0aq z*Ff^Y1OK}Mk?PR1?V7y1O*u!+8vRIv`>o3}AEBo_%~5wbgjCN2m3p&Q^pDH%(tRXH z?(S6IE?~V}wh?EIsPsaRSx*7aY?RMCC7i0wpA1)>yn4m0O$tEjcj21)YP2SlNuH~z zS6d%qC+A^k?08Jy$bN)TO~NqLx1R$z?ZbVg8Zv?9=PVtiJ<<=Dul(G2R>Co)QUCIi z0lNy_F@u?a77oE|dgSN(`Oh@wG2Zi?k>YPH%blYtth#{2_wQr#^inSFSVnUQY5DqI zr+VyO`hjrH^9d=7*&Zd$3qGdoTq&u)DgSY9b=Q5Xt7)wSS}Z7dV#T4BD*hA*}0|0TK)Yb+YJuS;7e|q3);$JsFY%fZ-{kUI)LRA;#qP31911L z3$?RX_XR>F%P?8sHTU<(3yP4I=eVRCQXq;Xu!gB6uk9B3hC(sb$AB+^o<{qjVH{~) z^%mRxdhbGdRQiL74X!Eh_A7{3i8Cxok>Va(Lf%m_fxJ<-Kan(tAwU+(CI?w%voF8| zSHle$S}0^)X918Y>kR9GvUMjXwzH+>v-$}%Ii#YL-ld`WOM5!V7+{)8+TfV~{Tl!d zc9tSY8(7FkD8kIlY{F;DveYx82!+!0^SiOUvNA(jqyd0*ip2UtQD1K_06vC}yzi^Y z5%JQiOw%+6K}QTkFng9asbP5K_=6uO&vau&-=?LFf3u=J&?wSHMdghxzjjn(oA5-4 zynQYcTkz!m=a8hksaNTosGR*uQ4!Nu5&Rbo(vi>XSMt8yJ$&*QAr|vT)T2&PE2vwI zsVR21Jv^j_>UK^b^>Qhi2aEFZe6uoM^Ub2xytk01RCVc;-)Qfzxx$U&*bfrX6HL`S z0-8>lxATPFD8}V^+j`&_V_AUkZ^C6|WhO4AE-o%}FI^+P>~*P(7*Fc>hL3wh@jCWi zNSUp~>=k|zQg|Y~espkXNaWfz?x_s~v%n2RY>92{#WzBSyV-FVR=$M zizr_0IyxX#opFsX5Nz)CQ$A}gN3B)7(GseUBKbNrH>?jD6w_6L=tmK5!*FIOC_owj)TgWyXG1(FT) z#Jo%aG1DrtBjLz*@Cg>2L)u@t#6<560$J&kSm<`dgr|I!2?MN{dPTPUNbv6Jx6PU6 zt!SsrPdkd?53Q&DNR^2R+cXElW^Ws9^^iH?*nF+*%+}~$L zo1gk=iuc_7`858?VWe>=>0vjpQ_1! zMr%ipzolD;Qmz46Ph1sLvPnWQg{${bWDq`0xtaktDVjw+oz4!u1`{yXo?u>2Q{k&v zkKi~GA)CN3lkTE~oIFw3MiETdbNb3yV25hgQ#yd?$7# zPo2QnA`mgCyH|bt83tI}6bnBc!8^Bs^h)y5lIQKdEwK=CQEci>$0 zpIpDs39NrZ(JN8yPbV1*e7hdHxU`?8=j2`hXH?!?t3^=RB3}e%9353R4mDZFN=~fb z4B3CeLbHp0K^r};n%U#Kzd6HhMC=lK(9v$cwrMW1+7s;ycUpm}&KT%)q5O=aB+vo0 zgI1{T&)yUg4d1Cdp*(lw%;+{>4PiC@)3a+9#6P$zzmx>^FA~T5_h8J~1Z#{(&Y!!x z6{LY?sfmmf$E~z9D_ls5(f?G#B>ejCq=t}S zPfyQ)UBpL&AhdP=MaA>JIm_<)XXz6=E6JQToKiwcWEAG0HT$8hj_yl~WBUUerE><@ zc2lVh+TIIuS)frKaZt|$Ct+#7#x_3_6U@;qTgw)h_pM?{q{Z}gW`K-3R{h9g=LWE7 zIa1?Euj2pvypII*$6R!~>eT!;F;~9a`6nx311B^(I%+H*APLTsoFFzb95UgFapO?) z_4WNRPB)JcWneuVBdIW7a(QWHXnF&5^v2eEK+ ziUOQGfy!h!LW46=7XUQOnm#K>YU^b4peO%QC01kjiL8+C!hc`x*(IX_wPHGS$YqcZ^nvlk z(Kw4*x5(eGteH!n{Tq-ZYU}SWjeUXyzMZ6g_E}rOyB}lD)inWxseCVS8`|K*H7Qb+ z$M{|yPnNRI4Gr7GHu3au^o|F0cXw-fdP;*GeM-tIGD*VR0VH6juRdfs!hVJY7{S1V zz$q&W-q79jn>-TcCC|Txtd_RFW(8JvxP6NormL=F2YEcLxBsFds$_F9p=FsB(g`z+ zLZ24_3ef0;gS{#|t56Je4>P;lK&6oMIJk@jMMoM`zAg-+ZN3`gkDpQC1mS|2lU)wH zR$fJbUj4|L7)Ta>h!irb!O;y?OrLyZ5FQ>VIj`=5IN0*9&qm$rleKy)DNy*=3WMUj z#m|pm{}56UdgPBEcR?B_#LRxCG4Y(b2@O$?=lb@|o^!UF&TAMPNY@=G{*4;1FpYa_ zYJr8^xC8w`Uc?$khQfX$!W#xKkL; zPKMX#)Sn5<%MZU61Zv5Lq}Eb{5eV8aP2d%7(Hp*9(dh2(p10-y?XatLe4Y1zk@>&P zX-XUiUT94O3d0nOR2;Las?5g3rpi=^e=qC$lnz-9KI41z^YD(u@7GvYcmGo0-cR&k z=!mhc_0zn2`{bJwNpCpj+hcTMynl1xxm;t(N)AeYiM1(6tkpbD%!V;AOQuCW`e!u7 z#UPGouz;;{>FrqO7CyXJ!WH0fe};ttIHd4l|M|<75Y9yZ7sHNkzsrxBC#}lv3>ZKt z;0CJ*{|PkKwyi7?z3Jtz%RSPjIFVZKF{>dH%PDw{r}(zc2VMBJ?>{ zixi|i1gu6lfG>`OTdvkbCZ)yvO!&bPxM7kF2JZc(guB0-+SL)80Km3B0RZnv{fjYc z$Hmh6=4Pc?1Yv3%{wW1>B2{^tj8ip^F4MYCXMSK@JhmW|9_uHx0pd~8w)YVRfPOva z+5VfK*h%;;Z6b9%4Y$65^Tam(z(YfNw3Ii0_;Fg8dCHwjM>C0*PdbWKYslu zjjWzlx<4743U8diZ>TIP=lbg8KyG3CaM)DZtE~-(Z)wBUcvAcVbFmanyA2!fGNgZd zBkVnR_s&E%d7uL}zeoGN?@!m5jL%eB3hg-FXozrl11x+`?j$Jkj~|~NA8;`gdfaqh zqNH7P4yQ?x*Ds)bI$FsrU_{e@bCT}3)M~Vvulq0F0@b*WQ52J$oQDCw^Iiq)46bbM z|0cX1*QH_ddjPda>vcq+-`6D~!aLPqfFm;J=Vkww>RAVu@ZLv6Wn8Y%4{FQKcY9qX z(PgQQoRp_I6I(Y7x?rt)xMYemjrxlWNRlX*DGARJyauT1sVbZhFy4T8<*(F$_&VOX zlF*M%LR_Of6{{DTxiOY$0c^@yS??OSKfXUMrrEtR#rNLQHZc&cAo_kGdbphAB)mT-eLH%vnRF}UpG#mF!T*W zrBeFfU&oj6nUEYCasMtf0y2th-MA-5ILPM*H1zomt2PI#KCk6)&!9OnUS$gg${?@O zA2Shp5##r(DsP!Ni!Us74Ke$|C?EtM^jWM)hZ=~u+z37n(=|Hd8V$zBZxP+J$Y8bK zDryM^cCh!ft+e3>>$!WPR#{+&4VU2&0bo9>(0uA4u3?D^W=GDMN0GL z=?^0GXRSsI`1cagD|`_~+wpc_l?zWWs@kWs|K^c)W`Wlc3iipB5O#hXtG9th|4S!UKFv#pPC&L8P@ zrf4B(;IZ(}Fs^kA__gi7H#=WpiseJlX89i_LrQg!r%ZO;sM8%)Z4Y*^cbP?twyHlSS`r=ipYs@L6L8wv202HNgh+RH`rS}Olq!YD)UQ|)`Y z7(8L(Rm7WSf)KP8bL$#v#^g6jv5354I($F2aqJBunwGVElQOiwMy0Opf>G|?-Zm*8 znt%gIiyU{73Z28_+bc&k-Ijs`!`1#mBe+RhN#Fwxt0}pTP5%I}LSoB0J<`uV(zN#< z0EJN6h>DDAAT}#-veO-&%N|JwfJi;7cKYu}|NCB^S24@}Pci;0f$T0}yOiEbATLh7 z46%!*4(~KJ#Le|rfv5ohN@hZDtCFB!M4_-hOZm_)neLhJ4WD?TBAW3=Kkgod3Ce+D zM1qjP02Bu~sQ}aaVFQbU*x=ilZ#p;7(<>j7?ysK_3v9hf+3`P#_#ue=4`?sl&v*eK zzskJOYVL5}sjg-VZx`rop1iPJ9pgbbn(lI!CIgd6sj^%{P(S|U@&r<;bsxR~NF=G? z9F@u6GiH;ucn7ir#kIeO^<4bTd)kuftDQQn>rV#+)zoUGt2<6w{$~H)Hj`=v?p`WT zpXj6DfhVYFe@3rwy^DU>uzfeh&+=lFxCx}dV zL+m|?dxAcK%L$pcb{n6xKAnvZvbot{@Jo@=Kwh}W+#K9#gxoVjmo&<5Q!JTmMU%NK zrg7HrV-c)DjYj>sqLTg*d+1{ogY zK~YSPq7gjLX69-8$I20^Ka8YSW3GxM@#WV2oM{H8|`Fm=;xKfHN12Sskxwf+z z?`I~-#a|rX6`(`(XZug&aU9K$Cx9Jc%au4?x1RoL=mP5JL6pRmhnNZz&ujfOkS+vx zA4JaxvcyxGDB!E)WSSR{-s3cV7bARg*y)_qWYmxCT8$89Eevuz4RUc!f#z3X~!?ENTHqYTkuPLx;KPDzzb; zlg3LihsZ7|LF=8_HbmH=+`5cEFaXWgjcY$)avm4{=`EshvGo$hk)4s!z16--S1?&L z88!Sw9KV}mN+lGoeAZA~>%cZ641Fgr!>@JHw&O%+c(~@OMFtYcwjZE38;;7U5uZ|b zi?oEJv|THNus2<8ZPsqmXco9*&s{C)%LpYb>z?;k)f-Y$X_W+lC)ynrK%@Hw0W0I; zZJg0nGkjGE$cAO%U?qLvu8C^w9c4qc|57}7_Z0a3$XDBf>5xtz1`gPVOm*Opp)<^I z{(ln){vCk&9WMk82dHSp9*(pQLG^!ywR<}pkL9|tGU}6PJ|F-*;SktAcrPgYMRm1e zA;=T{`U8K1J2vodFGK31{*@_&!e^L-)1%*jJOyE&GrYarKhfEj;;*-B82h4j`O4Fw znGjT`P|N@W2<%KeJZV=zD*4WDemh_h)7%HXwQ$pAcAhCybB)#ui`GWmsegIxFmD*I zqk;I@{*+c@JL&#K2oM*)p+gm<)STZvcX1x)2C+Awwm;{Kii^_+nt1F%MAoC=^DO*z zi3tsL0{sm|wwlnr<&!@veqJ+wAUDg*QJ5)Rqk4~+mRsQRAGmc)jN_N%ZclV848T0%R_f(ScGi^rs4G zp;;uD;TWD_s1g_?`#}*vFdnAOX0hJ>Zqei3WyCk%>xjlbbpF~qjCXE*(}pdTkm+84 z^`24ldD}Sx`28SmBx~C5U^uX5XuTG{!*6A~Mn?KdHCFBKF^{}KG#;G#G66LzJ?hx@ zoZjA+BXV*cE7NR#LFfo)QoWl2a&dQ92W+`g8*(up!i8PLpF-Uu))+|{9ypTb>w(#N zQ)*-uib9u7@olC|6ED8ZMO3DaX{F5BW`;A&q$`^zMVrYc)8&19t(ti3w1WM#V?+0wPKcp zEt4$Xb-#_!h5yA2-xV?%g+qd0K#w$G2m27%q!8aak7ZYwJDy1yS*Q(B&2-Mj>)e?Q zJ7Q&U$M~?w#P~N6K3MWEg9a*P1!N@*anld>JE}0U#Bl%5RPrC_i2gsJL#Ypa{Y;|x z8Tx+``)J@W<7aOAmymbtzxm~BL5aTF;Ntd6uV9uwQCUs(u^?U*Ro6TK4=|DIu@zptpiNRcK?n z=0RdUD$x3OhXjp3Se<09(?zv5ix<9rb8ge8`bhFkZ!FKA|KAh0U)#q>U6ut7Kx0?gzH! zG5C-mxcd{BZ7xz7)9AK7*+KG<1SCtQ1~t|L9c16xVYF zD#$*P_kT96lQUJ#5~LR@$+6X8(_2R_ul=HG?Nlo;s7%;qzlAj{9YfH1g5(c8FC-LiL~6GC=0vHC{ve}IKwrvN3@K0xAa z0W#|%x(lIkmAY_W4T_}oM&t`54i-s-=L?9aihba8qilSm zAj`kD8?iU_{!Y)`H&%$@ppqo3u=D|?b2-|)XGSfVvnmP9K%n|TMHRiwmu?}2(s4Oj z)AhM*GFo+qi*=pfEf%Zt7Hb4|8s0OPXaAQ~hmH(o7M$ zp=qP-c?*v3!nR0uAkz>KwwiL|L910X zqTiE5R4qd?Kk}5>QnzdT+x{0!H0wS@crN6r6-cjy-uQi>xzL;hrlyF(eg_b?y+1(z z)odnZMumA8{jt9K`*N@xfJL?QheAlF(`%>%t%>J!nYEQThHohojNv0o zLM~}SUv^0;<&N#_CwX`tP|1s@G7A6-cU)L{ih$_dCYknP;Cu#+0|Dpqr|qi_R+z*N z(#uFnny6efaUCJozoT~W!_P08*B>`jboE@H_-Z6`VfaU=QK8R$REWnO=I+>Mu4F1AJz{%-IK}+9acd9_ji+~YjT`wal_s9@(Ef>&)Qr)urHh26GE!uaZ z()_?###x}sFS}k;rJsP9YfD&6A>yWp_ID9>-S)rdk5x(0w1|TjQ7Ze>5!KX#6(b{~ zuq__z?3cvmOlx%Db?#1|K*9moD$yzHHS-MZLil{HVj!DM9pkwdDW>q0HVLEIUEsH} z^_yO16&eGtV92$|1;ljI26l6fMwOR|9k?>Y0dO?DUmgY?X5g48+htzDPgqLsNmtvb zZNGn-T!|cyKjiHXDY81>aP|Jq8Y>(~IrfQQ`-{kAGr=auMu!RW1~399Qh$?+>?~n5 zG;@E?HgFN)LB*<{wp^I@^D0M``U53(q<%I+vQ zWz1Jjla~hzqwhYWDgqt*=I;BivLL(X8)eK|Gj$--=R(T*qf7mh7#zNSIijY&f1_@t z?r3_t@yG_V1C&v^1?h~RQhk?GlS)zB=iNm6us=8KG|sVTD7fEgZf@Xi4ko*WY| zh73Jly3ow!9WA3Ds2Gtqx`Fpqacm4C1KCzHI|3WL^|zhjG=~#5lT|NdUCR84J&*^8 z`S#Pl=E@2xC`m#&p5t1=ZIVF;gRwQVhO1X6SHA*g2abC{Nbs@!9gb%muiKny3q0CQ z60`g{i`I&G|Gw4_FJbh@4Nom#pw~b72xybGirx&h4wh^~tp`qT!A*Z2#O%GmRdlP` z%|p>OU{7A*qp{O&4f-CSw$ipJLTJ0#xxvp|bQ zwrgSA^`bbeo!fES%3$%Ya+Gmn&RqHE-RH;MRLDYf7xQuVu>N}%&E$q}0*f#gIPi=}cYaMqMn?Vz)X)$tof$nk0vvuMgsP=K z&y&L5D@6%0I9^iiq1G@J52hgF^Ly)pD@!*wQakB}e-5poN6A@f?iwNp@&+!qZm2%${flX7)$$?maAx5>lUJ zkWGDm&BbA3s{XV}kQ|&)1fA*A7HVw_V>q1S1NjEDT>p(Jbn23jtOH|}=Val5;{8u| zWhY_&)Oj2zN=X62pxud&kFOexD2@k?yMT??67sFXv_uwdRv$v~BQe{^3uGG98Boe` z2%~GLL5`4nh*|=cIHVM?|1onWj9D;dq~T%531!j*;-mRJjvuMl*}&_z$MHyrBmb^iWK^*GKmk{#U%hs1?ho`jVCYxhZLP?+ zonP{;r9DVzdvdhcAOjRgxYa_|O`DJm-J z61}0-XY3!{Hs}Xv)YXbV*7l~<`0XOYxS@?nH*6VMjQ3Rb>CYfTUin%uasidXL$?{3 zyZ5zqIBP-b73$X;SpD5MZP{u8Kc82d#`Na{Kh>j zsvh$J_S21Fmn04 zMw=x8NT00~bi6R5nmg=$23^8Q^4?UiOqIv@5g>p<820M8kRmK0!8Tsy(Y(7hF6-EK z>^>!Y<(>}%Kn_m1={kNuSkd3ZB#{}^tgNhBNC8BHOF+yZeR=rqbc#9E-3;CKa1ll) zHU}*ax~|K{miP3EC`-&dv_9xMt2NmfG#9+Z*5Nr)!o238CabqCT`$#{>;ORH2NgOX zFrZSIL#^=&dP2sq3ds~5hg1x1`Fgr*$AQ=E?XxC59t4r(`WoSU3ozXfSV>4hly}mE zNbb45PBM*<-Qg_r?m-~in(AN+<3N5m{_UG_my8()((?Rlrh=CUc;C_8=}L!Y1_iHK zMsIKL#I&?{)zE`?>%8A3;NSG+Cm+^eQNM)%IQ~s$f(-cQaZ7u}zNsjr)$*))TO**d0vFk4>iS zEDea-1sUBNU;VOq zzMF1r#RtWw7qwpSJH=u_pCOSr1L;;1J`~?={6?LsSIfF2w@4It$OMbBw=(&l+K5JG zQvs)zOn5!$BCVeE1fl5H(9mp4EVma#=_BZndVW{FmT4-3>})~}+LjSw|I#cZd&d41 z?s+G4h5EG8YZ1f=jRg7j_vsnMkZk6rBakc=jx5nXLQ*+PddZUC7&w%X7xa?vaMRP> z8E@Gy@@5A(*^gLxGTgP2z8Dremn5Y|T#&Y{F{xQBl5%%*`*rf!0a!FM@-v)8g1M!r+&JecZZmiGkj3@Kf zP6<#ldoeyGj+|;py`Bbbt)CgONFX-gKZIBKAY!53@ypr?p9FH&D7M?+|mWmQ9B31n%0%ma+5;wA3mJ< z3-v1`F!)u2u3blXgT&Co6Ha<}pZ|1I`KW)$M=Tceu~PdL#v<+UCUMBx3d$lfR>L@NAsz+~eTsqg*@R=00nB)h2nEnMm> zDgvO$RSb$;*mO8*{n0`CO!V#(&w5*65)?>VCCRQxt$|OvS%6ub8 zrP*`EQgN^3jqIK^xjmzI%wr-k%i|c^lD>!Ox5*XymDof}r0q61XmmIdv&U z8j(FO#0Fl!uC6Ymo>%CQ3cjZnyACJ|<>#61uAN*zPwVT;0gz6i2j|Ir+TH2Rd#P!l zznJRei@__|WUf}XfsrLz6w+9%?qr@ZrzcOL^+@$+4l)Qc$)z~-Ps-Kc%- z>mS9XfMhHjfxDM}W$_2!@8Ka46DwBW2@h}1RV4u+5#l2!?*CY$VRhp6wl0#WHu(B+ z)>D_Pua+2WK>^DqVA)D!Nj4KHQV;^Nhg39CXPHc$OgB#k8k(9#X@oNm0&1fK@4mMu z&RChA7{v2T{6DgiE5fmoE8A>w;_8>W{B`tzF9EdlUfCM`F05u! z2X<8yqUPLrsjU(TS4_XqR$zE?4+VQxeJlN=lE`knf>=5{kOg^RHzA+*-V+wH-xri@SyEE z-={ygrFo7>3EGtC`b#R(gG1*Q(vtephU#WZGi@CsnRj-h+;pm>T_T}<1R+V(a|`j| zqD~Qk{m#A8m{A5{g^EH(K%~aD<)A-L&ugQ8&jBPN0CE_LID0r?K!fiWkMSEIc~x=N z`^JKh97023HMmtWZhQ6keixJ)ejl_Kh6~L^L&zUbGJcn^E0xA2vzDqFm{92l?aygy z{FZ?+*@O}Xt9RZ+=XOHo{y07g$;VVo95g*XGrr47R)k#t3H!rzi3|Il*IqGuL34_& z+-Jy?i?owTJ;`1iU~I)7JJ1Cg+5lU=&KExorM|0JRhjifViD?{prlY<{t9X>iIV7B zrMnViDutq4&P(dA36SBe2k?SOjTiyoF$;ULRfCn(bS$@6HWUkAocMZecLSHeEp|^> zOpN*K*RP9jTHeLlAtXI(mM#uZoc};Ou#|D^%rKVf+j7H+18E^o@02G^vjI)1c$??9 z1&Q&#Tsute93m36Lc26+mMl!gu^~aZN!TFMoi1==F|{p%k_cZf#7*#(%ALqhL5N^! zC|alza7T|yeIY?3k68g~7n;<8j5n=MzKSr= z^Rz|=jytcgA)!6jdp^#@bL7TPzMm`tB4yymp&^OJypKevI-w*7V_ZYP-gmCL;NLMj zb`3x8V*4egx-jpTpba64KtVEAc~TO4zY_t@{?7}V4c$0w;5_<6g_t-3DDY0wTFV44 zv-zReBUHt(X#BWF&j?~>j@Jb0t*n_5W1f9pj*%11WCMjJkjWu(a&p3)EW)5MJjK?J zPr7#X>grUz(#)H_72X&xM5!EW?Y0o;saKj02r0}=|9%FTSJfgqRw8$8w$DgYexLKH zT|FY_Y!~6F*2#<2pxkq%YZa%>cctXq$|K+ZOy(vi<$?C@#?3t#oXCI_Gl>*8=PMMq zzBo9qeUGKUrmW>{GWG)r>yP-c^U#Xo?QoBNhZyqiy1SVPo5f@1CTJU|`@Kl>tT_sf z60Xd0_hIQ(99Bprc=zsd?rQ>qIG>`hU%#OldXJI<72#xgw=RDZtcXm_LUtLSoESzd zFodx1s!Gy5+o9LhqeiY^8NkJ1r3u+(9-p&#X{BOt<;z4Rx=7mSFsTY&_4qb4fW!qT zZI0d=4Q|cFxMjl@FSbF*Kdso-B z*39ori&3>3H-3T#0r=k?pNN)JNko=oGWH!~!0!n~S8GcrK4rs9Q)q~HVujr@eVn?Q zYfrs`_xhP5p9Q(vaaWIiDK0*ynWyO`fsp-!t`o?bztQ-vy={%IH}#dnG^$`qoShXCz5^_wkxU?-J*!#t=N;z z;u0*Gn1cU-{+;=n;l7pZp(6KUIgu+(UEY!a)*-A?_=k zl>v*%q0%GVfv!9I#mN)-pC~+$>-0cHtz&T$SS(%-$lqU+MjS@>uW-~1&_(8Nru*D< z?jQT+zbVy!x61Qxb!n;eM7doL{`3XbDZygh-P0TV=m&7zLm|qJSkxpIylZf+(;iNU z@`rSt0a-j;4zh&5+@rtBl(&Q)xJz`?z1?3{b``7*&#zFnCVjWwb?*F-0~(XoAB-%~ zB;Bx~Jneae|Ji6XGq7QU#qVJo9@oFUQS!*PEF>yi~+tM|)`YkV2Cy)Yk%MS%=V$emB-tdXuSLw)MU(i zONt#Df;+&qdv%$zl{P$9X-lfIiL|ByGUBW>qch?qamuPo5XvudxO%H;GHE_A%;_ytc2uHL#QRJ7FyO&G8a~jzoM)C9!lyiibR;#og4Oq? zB&e@@k-TB(Np&{T=PGu>e!eZS4wTzR=acuN%$Jy(P?P^l*D1KDin@kRqfp}GH>Av^ z7=ed2zv+Ph+MlS6i!U2qXFd5P{UOg z&T$O`IjZ$~^6-wcqxZEP9OQ%&1NB}a*z3uZs zj?G14C0@oR>|AYLo_E?SDk#$@q*J}Bh;;5)gd)bK^2)43am)8prztxaK7^j_Q}%X| z8=1|rYIi$~szNm5N7NAIF6V4aQTjGT6cO4vgUdFitwTgQ6CTrV_y627?J{3AY6&b< z0m_~xM7ePwL;7RtilDK|`crstc?j>DQ-ajVm`!3u#X-vfIM=wOrqu|2F+&++H&m!E z1R&YaKZxLk2w6%tb7KivVBS1U&Nui8A8==~RQLJg&?SO^FZ<{H7YYd`l+Uv}c=LPw zY=OF_DJMFUUE-25Q*oxIkBgvd%EkEL&L&)bJGU*7fnNnUnxPIV{fgO5;94xFR;Nqi zQgNqAyr=sZdjH=k8VoUyykgBxbFLpraWrFl4)>+OHsvU%_UY~QWWDaW+GgUf$1=wzI+UBiSQ^uu$^oP(_SxB%=T&(&>Gia`^<`AunuV$+7RYAd*~ zPNDIGS;A3VnI?qd(JG^VdwlZXtE>b>t-gs3_sls4YM%lfa4*9a%5`_M>;Wg^L7xY) zP7o)AVa_V9zFu)zeWylw@{yZ6zvvXYFqW+Ti2UcVdn%%SIY?Zp@gZ4>%xpTmglU7d z?a?kYw4}7okRD}p;(`4W>gXCJhhXKlb40c);6P!5AfH^w)-?OzBbo)daXBO6P?SJa z&HAay-pC_FiXW!#A2}~&MxJles>n#pJyaQv?F?{?&`4mUQlj|LD1ER7i1S~yAo1l< z8XxChOX`URHnk$9PVtHwb+C}nx=N*hDRMfzmPTEaZ}0j4PbjK)uM^DCXy|AFv-*#j za4}L>SJ&}v-jgQ}UAG-X7ydQ`3ekn8%9#AhLsyim}A zQGl(ho8V?)6tB0F`MUr~9(YtzG_y@iOi4)r{RVmv3j1!)F-CgC)kYe3eG-<32%3qJ z-+CLWkN)OuygIs@ojjl7^-{hc{fvof%whPO&Zad^F5x=$MhZV{y*)ZcM z5v74`D(+)=WaOX$Sb(U&!% zQ)wbsXg9ZIYN%k7z(3>@IT^!};Cj2zY(|Pq!@k2W)!8$vJG|X#(SzFyqKgF0T#rYm zHYlGCTKiv;U0$4x50v83f0#EAC!}|Li(!{a1?<5Tv3jF{RE+Pr+X5Q|E&nn@_d5<( zAjB&d6dsewOL^`9l!!;l)ZkN$&M(Ut*Gb}2=ve|e-@}x)Ij+$B{@}9eY9~FH62?~u zZY60^6X+ICZ1w(4S=xr6V)*p4VogRLKibu-f4+l>!ez2Vj)mi1;xhRT3)KbU zh2i->A_~Q`bn{F_Z2|p4B=>Hb30>=Unk}6yP3I5p`?M$>xU56>?uF_H5tI4$Y=_?q zCLv>?{K+C4bVe)3OUE*=`xWP5A=kFSPVQ@|U(J=)}&^Flu zyZsITc%B~qEXJ`P!YYcAOU3BcJ<}IYvMteHvQo*W@1{>o zChIKiN=Qr(qqf}58fy=?YNv?TCG3^3h{lEuNGlGc_`kP_hl~7wL$ach$C1XnIDcFy z7q7}eb8!YlC~EtUPI=?}o2?siq?>oC1c!%IsokE6QS^JnRvH7cDcSB)&qecJ8oe3_ zgmk6QTOYc|T2B2gXpQ#J-kpJshuCU>kv{A#C1^e3Qzkr`TB0uM?1hTM#)=44Cc{QU~?keXD4~v?}hwy=I zp=*DaIo)ZGq#cU^6;v4Z(R?UAZ3YXHYivtn*5KK;4_N9$N=jnmO=-<;Q2XG*(vD*9}y~ zN!+|o=>zJg^}IrGHI{ut@LLy9BToXYKpg1#yqTA3*X+9V7=Q^bP+5J8Q&d^54mUTu zGtNx$VVCZv*)>dcVsn4zCxL6@7Mz@?ZJs{WIQVMF;*zFrQN4)ROi^OiI7@3bcLS<> z73&p2j}$Cl2&l7z-Rbf22Gsz)jnczH={1T}64a>>4iGP!G`uAEE84DZQHUnS){TWm9e7_0oO`WS}WI`9mDA>vTT9S|d|#*w{J&uugEg@&mP{q^P&Zjauxc3sD3oz-V8HH@Rd zB7A4(39}Xv2B%Bux`6Uu={pNd_wxmhubKCsl9uzBIRj*U`O@p{V%?!+q)klwvP>#l z#uWTW7$v^(4>dQdx)H9Yr)yXU{)PwUaf&Ef;r>>aPFp4`D9er#5O@l=0+D*u)%L4? z11P|pI;u~9GAZzzghXx%Pvq@$cWV!f>WEAC-`(_KpCa#EzU;BwtC%SNrAO5`t~}wb z$Vu;+x^L=zXy}inXK+8w4o4ntce(VOz*}Gff`WkO!WO(O2d0@K?zr=Hv?0HT zYiW_&?yRNMwe(Af1)8C`IWzFc?Qyt!-{fM&=Do=78?);!cI6YekWWV!QkRbtBua}; zRMp}QhG3>lzsw|V=JZIs@41$9cg#&uDXgXklj zE+E>Xc>S8lM7F-q_r*RaVeT%!h9$r+1c|FDNqE#!v~rSoQEO+VXdQ+Y7LS6XCi^<4 zma#NY4-oG=E-il5>4Jsi3cI;k_~$Bk61=h}e%^p^W_4HIR|fT(gW-}j%?cG9$N>Oy zG|FQeb1;*%qFn^QHKe+pq@V8ndcwQh?JE!N4_lGl{duWNb;9tm$*9cEA(`%Dx*I~> zM`tp-*+eM6Tuo>s$9J>=QX+g=uHVgIX66Iu4PTT;3j8+X8tS$?Y(XI5;r75QJbH*e z**wV2aTZxB_2feA{)^ja+@c`Rhff&%3A5lp))BB+yyLNhr4KQA_PquR8fPVT^`Z`? z0HF5_>o*?n8JjMPT8WdMrqMQyapkx>t|f_V_Xo;z35gQ;>fJwLpZi`(H^z#<2z=>? z+O7dl>_Ch!t=1~u-0o;xg^5+8*8cr(>*V+$TAQu!=@*PJ1`T)x&|1Cm zdfXb<_Q<~ujt-Eq=a?ai7p0oDe zzy0rF@QCXrimK%mrpOdg$O^JL5X)FQbUpXyEbZjibuzbZ7iF$K2|w$m=|qGh)ZN7? z+puTzyE^S(u5PM!oEj^b40&^%iiwG0(+@L6!8nHdFJW)znfkZ1kDhT84V<(wzrC1m z)HnWHM+#jnaF+SLAA$Qu-iWPQL3I=!N#L1mx$YkRW9>41-Tq>xCngn*hQ8H}NY*MZ!Y z@~$SQvNuZ750(q!F%s&{df%X%F`UbHUjP4qx$$;Xh)-L&9V}B2i&-oXNX%^EwLQ)M z2r7^juOTe+x>}HI!4bcx*E=5`q9E;ZiF(5>K(nLmG2vX2U!p zZ;9y4J;vftu&P~vojpXG7|vo0|5BgKJiC}wA`4T&A*}l(eNB2gdd<(|Wl{iusk^1| z>wCI;0p0+;3R=e&4J9m$o!8XYe*uJv zLVH}@)s2n$CnKchJ)^Pr7aReEnFk&ocUEY0kuBo94Xos++AMeOL})l(_e%wkqLcZY zNI*b9(EMNlcClk#b+mpL6aRFXg?zMXk13#IM=w)~8VTp&E4?lI@3%39an~JuZ97XV zKbaiIzzadFSU*+|DUI5eH-2!2>XpL_yfyoL`%lphxoQ%%a=Sxz=Xqg7cf7KttC zJx1TI|8&(H5~}bzc#bTeH!umm&QYBk5r?yDEBEI4P?>gyKw~Iq_{nN0^i%g{5h29V zv_0A?F78S9qJ)T$N%#lx&cbwQtNo=74a)Wz$_QxHs#V3nNeSnHTpXf$5-u)QYl0)m zZVsH*CE-RKLO5vN3zRBS%kT*p>Dr(1GzAZ$89fO+M08LuT@ z;#usO6sxwftteoH%{mq();faQ-U$y?p7ThG4Me%M1iOGU>vFHnM1DbmieMCscN8=k zcJ+n6fCcY7FS389X+`YxYxS>ri+2~bD=zE;WAU=-tG>h?u8$u4q>uxzk;lK)H;I_u zXXBJSt%xU8>hOk!4tjCUWK4_UeEhNLo?56F};zKxCf`8c46f?u-0RXf1KVGV_Y({Hn}Yj8fb z2ZbThV?uZW+^5@jCxb<%zbL`uWdWYo4`b1Kz|RGIoa-Jr?~=g2itR&zwZ1Mjpp*=x zBrW(mhozdDtBG44FIhtFX5l4KN%=#-05wTG@X|d46T%;QCIq;rT(}{!vbLpi!z5(a zHR+k~xX!3oZ{;;M$Aq;Um$Zm@7en8pT z;Jaor$bk!fzq)QoTU*I&35+I3>!6`F*M@)%Lq)OD^>{YH6Aq$Z%gRQiHJ+b)R45~$ zLbrf;O|n;08|r0qX0SLheD%@yp0%&;mfog{nBQhgsH^1vmCIPruq&TER8~AXkaWDZ zw#R$Wktt`j1Noi9`0o7tk19rfmrDp~n0vnO-Wfo#5lfi|K+Xfi^g-f78CyS#06uTc zBCv!%*>rCaN@cx$Ms)}5_hucq7&hVo9~ciVyf|%n`qB4`WJrV*P~n{$RzD2Dz8V&| zFGbg@rXRfdi96ixA3!t~K0HwECyR`qF@P9XTEOjmJPx{a{P1~SANi<-339Sbw&v#= zvBpl23YJzy1(opteV^U?Su^$XV66i=>PkzYMf}akSdaeG4LUQHKJwph2%eF)1j=?t z0`*@4hI0!LPf;`5*H&9=soT=wC46-41`nVb(_E*u1iUj;eyoSQDUJ* zE)ykVwPTqS^wt2QE{>No)ABKma&MSnY)ZZkmgi@HcLUqaJ9t+5t}j_D(7x7*@>_frUvY!onxSw(#(0yzvz^ z>D=Z}RsxE1(jF8IWkv0-fBHifzZ!kGN(%TE7<9rkt+1E<#6@u#jSv?}_dpnuX4-rgV4!e35x+}HiJA#Z*k#z!DkJ8~HX^frozh(rxff>Tlsv{orJfRqRNA*;Ce6wQbG#s8` z$ksh+QV&OEz@N}Ne)DBu&FnL|9K|>~OnhCnqS_w`xyM-hj!Bgse6Q?oV!gS~V#=rxHcH27IR9GE4^DhAD+JyiB From c2419e84f51eb89aaec23f5f62ba959f3901f4a6 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 8 Aug 2017 05:50:22 -0500 Subject: [PATCH 067/230] Adds a Test Areas (Station Z) verb --- code/modules/admin/admin_verbs.dm | 3 ++- code/modules/admin/verbs/debug.dm | 21 ++++++++++++++++++--- code/modules/admin/verbs/mapping.dm | 3 ++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index ff8b10d185..68e5430a09 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -296,7 +296,8 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/startSinglo, /client/proc/set_server_fps, /client/proc/cmd_admin_grantfullaccess, - /client/proc/cmd_admin_areatest, + /client/proc/cmd_admin_areatest_all, + /client/proc/cmd_admin_areatest_station, /client/proc/readmin ) if(holder) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 7a312acf7c..c69628c625 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -495,9 +495,9 @@ GLOBAL_PROTECT(AdminProcCallCount) qdel(adminmob) SSblackbox.add_details("admin_verb","Assume Direct Control") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_admin_areatest() +/client/proc/cmd_admin_areatest(on_station) set category = "Mapping" - set name = "Test areas" + set name = "Test Areas" var/list/areas_all = list() var/list/areas_with_APC = list() @@ -509,7 +509,12 @@ GLOBAL_PROTECT(AdminProcCallCount) var/list/areas_with_camera = list() for(var/area/A in world) - if(!(A.type in areas_all)) + if(on_station) + var/turf/picked = safepick(get_area_turfs(A.type)) + if(picked && (picked.z == ZLEVEL_STATION)) + if(!(A.type in areas_all)) + areas_all.Add(A.type) + else if(!(A.type in areas_all)) areas_all.Add(A.type) for(var/obj/machinery/power/apc/APC in GLOB.apcs_list) @@ -583,6 +588,16 @@ GLOBAL_PROTECT(AdminProcCallCount) for(var/areatype in areas_without_camera) to_chat(world, "* [areatype]") +/client/proc/cmd_admin_areatest_station() + set category = "Mapping" + set name = "Test Areas (STATION Z)" + cmd_admin_areatest(TRUE) + +/client/proc/cmd_admin_areatest_all() + set category = "Mapping" + set name = "Test Areas (ALL)" + cmd_admin_areatest(FALSE) + /client/proc/cmd_admin_dress(mob/living/carbon/human/M in GLOB.mob_list) set category = "Fun" set name = "Select equipment" diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index c42eb6a05e..6283201b41 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -34,7 +34,8 @@ GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list( /client/proc/startSinglo, /client/proc/set_server_fps, //allows you to set the ticklag. /client/proc/cmd_admin_grantfullaccess, - /client/proc/cmd_admin_areatest, + /client/proc/cmd_admin_areatest_all, + /client/proc/cmd_admin_areatest_station, /client/proc/cmd_admin_rejuvenate, /datum/admins/proc/show_traitor_panel, /client/proc/disable_communication, From 7b4cbf778465db505db28b12fca6b3704d74e2f5 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Tue, 8 Aug 2017 07:19:30 -0500 Subject: [PATCH 068/230] adds bear ears and bear tail --- .../new_player/sprite_accessories_Citadel.dm | 11 +++++++++++ icons/mob/mam_bodyparts.dmi | Bin 39950 -> 38375 bytes 2 files changed, 11 insertions(+) diff --git a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm index 9d303f867f..8e724f1aa5 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm @@ -240,6 +240,17 @@ hasinner = 1 icon = 'icons/mob/mutant_bodyparts.dmi' +/datum/sprite_accessory/mam_tails/bear + name = "Bear" + icon_state = "bear" + extra_color_src = MUTCOLORS2 + icon = 'icons/mob/mam_bodyparts.dmi' + +/datum/sprite_accessory/mam_ears/bear + name = "Bear" + icon_state = "bear" + icon = 'icons/mob/mam_bodyparts.dmi' + /datum/sprite_accessory/mam_tails/catbig name = "Cat, Big" icon_state = "catbig" diff --git a/icons/mob/mam_bodyparts.dmi b/icons/mob/mam_bodyparts.dmi index c08cf0685a4387ab762b17593430b65b322f5d7d..c9f1ba70e89616558a049949aea4de052e6d5938 100644 GIT binary patch literal 38375 zcmce;2|Sc>zc+l5>>({w7_CyWXU~X)h*D%C`)!zA=%gLj3s0bA^T3q z48}6da=ri2ecsP~-t(O2oag?W=k=MHYs_5Nf4hFa?{EA5=hZE3wFAt@nIQ-|prL+E z7lP=(+kKOa^x%*~VT%C&@cZ61aKHA@&C1oz+1<{`5rVvvzQ)~jIxfcXqWe#N0cWPb z;Ukd&vvnU2+G(cW5?u1X+|HJBq*&9z={(t?P} zA{i* z+fU@{BJW=J9;junl$Daym9O(|d%*~je`x$aH%c+?`3CxCG zwyA2bCq@lS5A3PW)(;L<*dEx>O#R`g zxT)ipnlgW5-fl#)|NfF#HFK=oF@452hLh+e#|~ZcS+-j zeM0B!Qw(mEAC+~PFY*O_40hy~M9bWBiv4}1=|P%#ouGQFF5?3C@5jYa%tp#_Q8y*| zn^opG&}%QphF)B7mlMxwF!@%(rhY!}SgvG!Mr6!6onuj4>6<>+#C&cWJ@Ao*%wpKw z)bvak7k-Ah;yMcik3b2xE-{vz(K9h;?G_nN%Bt98ezWiHLo-BoLC?bS zazDdPyPOqDBnO5XmX<4v4zQb{^;|=iS!)ZI)!^!z~W!~|q-7;FfF>)A^BH>4fH#42QQ#E{q*bRLlxWUS4<8^->fsgyW&lCw1E~-I9af^H9+>&5 zmqGjAQeXe$Wp2N58_OQCmhp}l_bM!SKO!=wotM%s^aQ)YX9uU=u=DzSF&)7T_r>(G z#|aMxSdh?Kj$|cb_qjRGSV$(FqKz5<^-H~SEu(_myW%U#9sK6a8&Pi70n?;I_V4|B zu3B{cqoHk%-V}n`rAp!SjeRqy$|T~`HDr|uctwdz z(t)IbgW~?x>A2yp=H})b*b6yEY=0XMgExfMcM)^L>|t=! z(63)If6SA$1rh@|o~JcGyNd8qZyEmz(-i)|KMxqOXi#tS2B_C)({O z(i9snV)}@O1d}8WTjQaLC#QDmMCfKv`W0I=E2wIdVKcCB^g;FSSPj{X=Mr37DXO6z zwDaRzCv9Pk8@9wAPaRoC?n}f|yY5W>bp*8Vf}#bf`&_BdA7j}~ni-VTzqLc@sAPHj z3ES`J@nnX7ALy+3*SbWOti`T8S?;S`a|is1Az=Ga8S_0AMv>=o!Ea|v(T28r)6nt5 zy;`E6N0E_ZUFl@5cOOMQvIkp`bfWMiCsOxkS!{Q}^5gykW2)pueNjq8tQ+D7rEjix z%M(h{&FEty5{ZTmG+|xfq!?p*=iA2csTFj%Y8lEzosB*yz1GCm6f9{N>~0H3^-x;+ zD2oQyi4$-X(W81fae4q}M_uq^)CDiWU=UJLQVkRer82bW@S4vc!8J6xlvb)3)$S{$ zMl6fnLZi3P+W+B=aO_t8(#6&i`{lIq%kyc|?ZPh_EjgX&&6*~i__9|PtjvZ{yM@C6 ziu38@48(uygBh8BC?+t&{}b8@8u?e0{6Ai1@rZVEOS5blXm2f5ZT0pWMMt+QW>d70 zBb8$Do+4460(9iSeY-R#e>3p>U~iMusnXGcMgtZ-uW++AG&f)8W~I*{6Ycwio`h=z z{sjTi-z=$P?P+67SCNx}0ZNR!Gz=R-;+-Q{t3%K>JR88P%orN6ihq;1n zEPLz`Kn%@T;pZHDKLr^IdsJj>PY2bq4%cW6Cv$AT^HzcoQVeb|RooG3G|G;JxJ`1OmC z`VI+nFH*C^)wdZ*oz$;izrMTrxBsC6-#FumlfevP#;>Ix%T}m{!G-dWDyOg{T

B9_81wl5^9X$eXVr>d$%_y<0RU9P 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 SRFWwDr=qB#kbm9$`TqwYxM;cn literal 39950 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 z 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 WVNv*!U#%Aa0000 Date: Tue, 8 Aug 2017 09:05:39 -0500 Subject: [PATCH 069/230] fixes some initialize errors --- code/modules/mob/living/simple_animal/bot/secbot.dm | 4 ++-- code/modules/mob/living/simple_animal/friendly/dog.dm | 4 ++-- code/modules/mob/living/simple_animal/hostile/hivebot.dm | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 42c42bcf16..bb69af7301 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -44,7 +44,7 @@ desc = "It's Officer Beep O'sky's smaller, just-as aggressive cousin, Pipsqueak." /mob/living/simple_animal/bot/secbot/beepsky/jr/Initialize() - ..() + . = ..() resize = 0.8 update_transform() @@ -63,7 +63,7 @@ radio_channel = "AI Private" /mob/living/simple_animal/bot/secbot/Initialize() - ..() + . = ..() icon_state = "secbot[on]" spawn(3) var/datum/job/detective/J = new/datum/job/detective diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 54a06cb37f..f80defb32d 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -53,7 +53,7 @@ break /mob/living/simple_animal/pet/dog/corgi/Initialize() - ..() + . = ..() regenerate_icons() @@ -296,7 +296,7 @@ var/saved_head //path /mob/living/simple_animal/pet/dog/corgi/Ian/Initialize() - ..() + . = ..() //parent call must happen first to ensure IAN //is not in nullspace when child puppies spawn Read_Memory() diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 62279262ba..06f2a56a0e 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -29,7 +29,7 @@ loot = list(/obj/effect/decal/cleanable/robot_debris) /mob/living/simple_animal/hostile/hivebot/Initialize() - ..() + . = ..() deathmessage = "[src] blows apart!" /mob/living/simple_animal/hostile/hivebot/range @@ -63,4 +63,4 @@ /mob/living/simple_animal/hostile/hivebot/death(gibbed) do_sparks(3, TRUE, src) - ..(1) \ No newline at end of file + ..(1) From cdbaf5c4e87ebc121a317eda346c2c6a791e00e6 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 8 Aug 2017 09:05:44 -0500 Subject: [PATCH 070/230] Standardized CENTCOM spelling --- _maps/RandomZLevels/centcomAway.dmm | 8 +-- _maps/basemap.dm | 2 +- .../map_files/Deltastation/DeltaStation2.dmm | 4 +- _maps/map_files/MetaStation/MetaStation.dmm | 8 +-- .../generic/{Centcomm.dmm => CentCom.dmm} | 62 +++++++++---------- _maps/shuttles/emergency_raven.dmm | 20 +++--- _maps/shuttles/whiteship_meta.dmm | 8 +-- code/__DEFINES/access.dm | 2 +- code/__DEFINES/admin.dm | 2 +- code/__DEFINES/maps.dm | 4 +- code/__DEFINES/shuttles.dm | 2 +- code/controllers/subsystem/shuttle.dm | 8 +-- code/controllers/subsystem/ticker.dm | 2 +- code/datums/map_config.dm | 6 +- code/datums/ruins/space.dm | 2 +- code/datums/shuttles.dm | 10 +-- code/game/area/areas.dm | 2 +- code/game/area/areas/centcom.dm | 10 +-- code/game/atoms.dm | 4 +- code/game/atoms_movable.dm | 2 +- code/game/communications.dm | 4 +- code/game/gamemodes/cult/cult.dm | 2 +- code/game/gamemodes/meteor/meteor.dm | 4 +- .../gamemodes/miniantags/monkey/monkey.dm | 6 +- code/game/gamemodes/nuclear/nuclear.dm | 2 +- code/game/gamemodes/objective.dm | 14 ++--- .../game/machinery/computer/buildandrepair.dm | 2 +- code/game/machinery/computer/card.dm | 2 +- .../game/machinery/computer/communications.dm | 12 ++-- code/game/machinery/computer/crew.dm | 2 +- code/game/machinery/computer/crew.js | 2 +- code/game/machinery/doors/airlock_types.dm | 2 +- .../machinery/porta_turret/portable_turret.dm | 6 +- code/game/machinery/telecomms/broadcasting.dm | 2 +- code/game/objects/effects/contraband.dm | 4 +- code/game/objects/items/devices/PDA/cart.dm | 4 +- .../items/devices/radio/encryptionkey.dm | 2 +- .../objects/items/devices/radio/headset.dm | 4 +- code/game/objects/items/weapons/cards_ids.dm | 4 +- code/game/objects/structures/bedsheet_bin.dm | 2 +- code/game/objects/structures/morgue.dm | 2 +- code/game/objects/structures/showcase.dm | 4 +- code/game/turfs/closed.dm | 2 +- code/modules/admin/secrets.dm | 4 +- code/modules/admin/topic.dm | 24 +++---- code/modules/admin/verbs/one_click_antag.dm | 16 ++--- code/modules/admin/verbs/pray.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 4 +- .../mission_code/moonoutpost19.dm | 2 +- code/modules/cargo/console.dm | 2 +- code/modules/cargo/exports.dm | 2 +- code/modules/clothing/head/misc.dm | 2 +- code/modules/clothing/outfits/ert.dm | 8 +-- code/modules/clothing/outfits/standard.dm | 8 +-- .../clothing/spacesuits/miscellaneous.dm | 8 +-- code/modules/clothing/suits/armor.dm | 2 +- code/modules/clothing/under/accessories.dm | 2 +- code/modules/clothing/under/miscellaneous.dm | 8 +-- code/modules/events/shuttle_loan.dm | 14 ++--- code/modules/hydroponics/seeds.dm | 2 +- code/modules/jobs/access.dm | 12 ++-- code/modules/jobs/job_types/captain.dm | 2 +- code/modules/mob/living/living.dm | 2 +- code/modules/mob/living/say.dm | 4 +- .../mob/living/silicon/pai/software.dm | 2 +- code/modules/paperwork/contract.dm | 2 +- code/modules/paperwork/paper_premade.dm.rej | 23 +++++++ code/modules/research/rdconsole.dm | 2 +- code/modules/research/research.dm | 2 +- code/modules/research/server.dm | 2 +- code/modules/shuttle/emergency.dm | 2 +- code/modules/shuttle/ferry.dm | 4 +- code/modules/shuttle/shuttle.dm | 4 +- strings/cas_black.txt | 2 +- tgui/assets/tgui.js.rej | 15 +++++ tgui/src/interfaces/cargo.ract | 4 +- tgui/src/interfaces/ntos_card.ract | 2 +- 77 files changed, 246 insertions(+), 208 deletions(-) rename _maps/map_files/generic/{Centcomm.dmm => CentCom.dmm} (99%) create mode 100644 code/modules/paperwork/paper_premade.dm.rej create mode 100644 tgui/assets/tgui.js.rej diff --git a/_maps/RandomZLevels/centcomAway.dmm b/_maps/RandomZLevels/centcomAway.dmm index 7b182a91c3..ea3d101368 100644 --- a/_maps/RandomZLevels/centcomAway.dmm +++ b/_maps/RandomZLevels/centcomAway.dmm @@ -1817,7 +1817,7 @@ /area/awaymission/centcomAway/courtroom) "fT" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Security"; + name = "CentCom Security"; opacity = 1; req_access_txt = "101" }, @@ -1932,7 +1932,7 @@ /area/awaymission/centcomAway/courtroom) "gk" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Security"; + name = "CentCom Security"; opacity = 1; req_access_txt = "101" }, @@ -3830,7 +3830,7 @@ /area/awaymission/centcomAway/thunderdome) "lO" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Security"; + name = "CentCom Security"; opacity = 1; req_access_txt = "101" }, @@ -4170,7 +4170,7 @@ /area/awaymission/centcomAway/general) "mP" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Security"; + name = "CentCom Security"; opacity = 1; req_access_txt = "101" }, diff --git a/_maps/basemap.dm b/_maps/basemap.dm index e5eb12f31b..db5a71afb2 100644 --- a/_maps/basemap.dm +++ b/_maps/basemap.dm @@ -1,4 +1,4 @@ -#include "map_files\generic\Centcomm.dmm" +#include "map_files\generic\CentCom.dmm" #include "map_files\generic\SpaceStation.dmm" #include "map_files\generic\Space.dmm" #include "map_files\generic\SpaceDock.dmm" diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 14e8acd6fd..3e19f173a4 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -68726,12 +68726,12 @@ /obj/item/weapon/folder/blue, /obj/item/clothing/under/rank/centcom_commander{ desc = "A replica of a jumpsuit worn by the highest ranking commanders under Nanotrasen's central command."; - name = "Replica Centcom officer's jumpsuit" + name = "Replica CentCom officer's jumpsuit" }, /obj/item/clothing/head/centhat{ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0); desc = "A replica hat of a Central Commander's attire. It has a small tag on it saying, 'It's good to be emperor.'"; - name = "Replica Centcom hat" + name = "Replica CentCom hat" }, /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32 diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index c1a7cc70a7..65eb81a50e 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -79832,12 +79832,12 @@ "cVT" = ( /obj/structure/closet/wardrobe/mixed, /obj/item/clothing/under/rank/centcom_officer{ - desc = "A badge on the arm indicates that it's meant to be worn by Centcom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time."; - name = "\improper dusty old Centcom jumpsuit" + desc = "A badge on the arm indicates that it's meant to be worn by CentCom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time."; + name = "\improper dusty old CentCom jumpsuit" }, /obj/item/clothing/under/rank/centcom_commander{ - desc = "A badge on the arm indicates that it's meant to be worn by Centcom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time."; - name = "\improper dusty old Centcom jumpsuit" + desc = "A badge on the arm indicates that it's meant to be worn by CentCom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time."; + name = "\improper dusty old CentCom jumpsuit" }, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; diff --git a/_maps/map_files/generic/Centcomm.dmm b/_maps/map_files/generic/CentCom.dmm similarity index 99% rename from _maps/map_files/generic/Centcomm.dmm rename to _maps/map_files/generic/CentCom.dmm index d996a0d7e8..6069ddfa01 100644 --- a/_maps/map_files/generic/Centcomm.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -2922,7 +2922,7 @@ /area/centcom/prison) "iG" = ( /turf/closed/indestructible/fakedoor{ - name = "Centcom Cell" + name = "CentCom Cell" }, /area/centcom/prison) "iH" = ( @@ -2957,7 +2957,7 @@ /area/centcom/supply) "iL" = ( /turf/closed/indestructible/fakedoor{ - name = "Centcom Warehouse" + name = "CentCom Warehouse" }, /area/centcom/supply) "iM" = ( @@ -3063,7 +3063,7 @@ "jc" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ - name = "Centcom"; + name = "CentCom"; opacity = 1; req_access_txt = "0" }, @@ -3326,7 +3326,7 @@ dwidth = 5; height = 7; id = "supply_away"; - name = "Centcom"; + name = "CentCom"; width = 12 }, /turf/open/space, @@ -3817,7 +3817,7 @@ /area/centcom/supply) "kM" = ( /turf/closed/indestructible/fakedoor{ - name = "Centcom" + name = "CentCom" }, /area/centcom/control) "kN" = ( @@ -3866,7 +3866,7 @@ /area/centcom/control) "kT" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Security"; + name = "CentCom Security"; opacity = 1; req_access_txt = "101" }, @@ -3880,7 +3880,7 @@ base_state = "rightsecure"; dir = 2; icon_state = "leftsecure"; - name = "Centcom Stand"; + name = "CentCom Stand"; req_access_txt = "109" }, /obj/machinery/light{ @@ -3917,7 +3917,7 @@ base_state = "rightsecure"; dir = 2; icon_state = "leftsecure"; - name = "Centcom Stand"; + name = "CentCom Stand"; req_access_txt = "109" }, /turf/open/floor/plasteel/grimy, @@ -3936,7 +3936,7 @@ base_state = "rightsecure"; dir = 2; icon_state = "leftsecure"; - name = "Centcom Stand"; + name = "CentCom Stand"; req_access_txt = "109" }, /obj/machinery/light{ @@ -3960,7 +3960,7 @@ /area/centcom/supply) "lc" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Supply"; + name = "CentCom Supply"; req_access_txt = "106" }, /obj/effect/turf_decal/stripes/line{ @@ -4157,7 +4157,7 @@ /area/centcom/control) "lB" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Security"; + name = "CentCom Security"; opacity = 1; req_access_txt = "101" }, @@ -4752,7 +4752,7 @@ base_state = "rightsecure"; dir = 2; icon_state = "leftsecure"; - name = "Centcom Stand"; + name = "CentCom Stand"; req_access_txt = "109" }, /obj/machinery/firealarm{ @@ -4768,7 +4768,7 @@ base_state = "rightsecure"; dir = 2; icon_state = "leftsecure"; - name = "Centcom Stand"; + name = "CentCom Stand"; req_access_txt = "109" }, /obj/machinery/firealarm{ @@ -5237,7 +5237,7 @@ /obj/structure/table/reinforced, /obj/machinery/door/firedoor, /obj/machinery/door/window/brigdoor{ - name = "Centcom Customs"; + name = "CentCom Customs"; icon_state = "rightsecure"; dir = 4; req_access_txt = "109"; @@ -5767,7 +5767,7 @@ /area/centcom/ferry) "pu" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Security"; + name = "CentCom Security"; opacity = 1; req_access_txt = "101" }, @@ -5778,7 +5778,7 @@ /area/centcom/supply) "pv" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom"; + name = "CentCom"; opacity = 1; req_access_txt = "0" }, @@ -6455,7 +6455,7 @@ /area/centcom/control) "qQ" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Security"; + name = "CentCom Security"; opacity = 1; req_access_txt = "101" }, @@ -6652,7 +6652,7 @@ /area/centcom/ferry) "rw" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Supply"; + name = "CentCom Supply"; req_access_txt = "106" }, /obj/effect/turf_decal/stripes/line{ @@ -6906,7 +6906,7 @@ "rW" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ - name = "Centcom"; + name = "CentCom"; opacity = 1; req_access_txt = "0" }, @@ -7324,7 +7324,7 @@ base_state = "rightsecure"; dir = 1; icon_state = "rightsecure"; - name = "Centcom Customs"; + name = "CentCom Customs"; req_access_txt = "109" }, /obj/machinery/door/window, @@ -7352,7 +7352,7 @@ dwidth = 25; height = 50; id = "emergency_away"; - name = "Centcom Emergency Shuttle Dock"; + name = "CentCom Emergency Shuttle Dock"; width = 50 }, /turf/open/space, @@ -7733,7 +7733,7 @@ "tZ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ - name = "Centcom Security"; + name = "CentCom Security"; opacity = 1; req_access_txt = "101" }, @@ -7787,7 +7787,7 @@ /area/centcom/ferry) "ug" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Customs"; + name = "CentCom Customs"; opacity = 1; req_access_txt = "109" }, @@ -7928,7 +7928,7 @@ dwidth = 2; height = 13; id = "ferry_away"; - name = "Centcom Ferry Dock"; + name = "CentCom Ferry Dock"; width = 5 }, /turf/open/space, @@ -9168,7 +9168,7 @@ base_state = "rightsecure"; dir = 1; icon_state = "rightsecure"; - name = "Centcom Customs"; + name = "CentCom Customs"; req_access_txt = "109" }, /obj/effect/turf_decal/bot, @@ -9192,7 +9192,7 @@ base_state = "rightsecure"; dir = 1; icon_state = "rightsecure"; - name = "Centcom Customs"; + name = "CentCom Customs"; req_access_txt = "109" }, /obj/effect/turf_decal/bot, @@ -9759,7 +9759,7 @@ /obj/item/weapon/folder/red, /obj/item/weapon/pen/red, /obj/machinery/door/window/brigdoor{ - name = "Centcom Customs"; + name = "CentCom Customs"; icon_state = "rightsecure"; dir = 4; req_access_txt = "109"; @@ -9774,7 +9774,7 @@ /obj/item/weapon/folder/white, /obj/item/weapon/pen/blue, /obj/machinery/door/window/brigdoor{ - name = "Centcom Customs"; + name = "CentCom Customs"; icon_state = "rightsecure"; dir = 8; req_access_txt = "109"; @@ -10061,7 +10061,7 @@ /area/tdome/tdomeobserve) "zT" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Security"; + name = "CentCom Security"; opacity = 1; req_access_txt = "101" }, @@ -13647,7 +13647,7 @@ /area/centcom/evac) "Mb" = ( /obj/machinery/door/airlock/centcom{ - name = "Centcom Security"; + name = "CentCom Security"; opacity = 1; req_access_txt = "101" }, @@ -13658,7 +13658,7 @@ /area/centcom/evac) "Mc" = ( /turf/closed/indestructible/fakedoor{ - name = "Centcom" + name = "CentCom" }, /area/centcom/evac) "Md" = ( diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm index 7382695c40..856a118521 100644 --- a/_maps/shuttles/emergency_raven.dmm +++ b/_maps/shuttles/emergency_raven.dmm @@ -1,7 +1,7 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( /turf/open/space, -/obj/machinery/porta_turret/centcomm_shuttle{ +/obj/machinery/porta_turret/centcom_shuttle{ dir = 9 }, /turf/closed/wall/mineral/plastitanium{ @@ -623,7 +623,7 @@ /obj/docking_port/mobile/emergency{ dwidth = 14; height = 18; - name = "Centcomm Raven Battlecruiser"; + name = "CentCom Raven Battlecruiser"; timid = 1; width = 32 }, @@ -980,7 +980,7 @@ /area/shuttle/escape) "cr" = ( /turf/open/space, -/obj/machinery/porta_turret/centcomm_shuttle{ +/obj/machinery/porta_turret/centcom_shuttle{ dir = 5 }, /turf/closed/wall/mineral/plastitanium{ @@ -1006,7 +1006,7 @@ /area/shuttle/escape) "cw" = ( /turf/open/space, -/obj/machinery/porta_turret/centcomm_shuttle{ +/obj/machinery/porta_turret/centcom_shuttle{ dir = 5 }, /turf/closed/wall/mineral/plastitanium{ @@ -1108,7 +1108,7 @@ /area/shuttle/escape) "cR" = ( /turf/open/space, -/obj/machinery/porta_turret/centcomm_shuttle{ +/obj/machinery/porta_turret/centcom_shuttle{ dir = 5 }, /turf/closed/wall/mineral/plastitanium{ @@ -1311,7 +1311,7 @@ /area/shuttle/escape) "dQ" = ( /turf/open/space, -/obj/machinery/porta_turret/centcomm_shuttle{ +/obj/machinery/porta_turret/centcom_shuttle{ dir = 5 }, /turf/closed/wall/mineral/plastitanium{ @@ -1333,7 +1333,7 @@ /area/shuttle/escape) "dV" = ( /turf/open/space, -/obj/machinery/porta_turret/centcomm_shuttle{ +/obj/machinery/porta_turret/centcom_shuttle{ dir = 5 }, /turf/closed/wall/mineral/plastitanium{ @@ -1379,7 +1379,7 @@ /area/shuttle/escape) "ei" = ( /turf/open/space, -/obj/machinery/porta_turret/centcomm_shuttle{ +/obj/machinery/porta_turret/centcom_shuttle{ dir = 10 }, /turf/closed/wall/mineral/plastitanium{ @@ -1400,7 +1400,7 @@ /area/shuttle/escape) "en" = ( /turf/open/space, -/obj/machinery/porta_turret/centcomm_shuttle{ +/obj/machinery/porta_turret/centcom_shuttle{ dir = 6 }, /turf/closed/wall/mineral/plastitanium{ @@ -1461,7 +1461,7 @@ /area/shuttle/escape) "eA" = ( /turf/open/space, -/obj/machinery/porta_turret/centcomm_shuttle{ +/obj/machinery/porta_turret/centcom_shuttle{ dir = 5 }, /turf/closed/wall/mineral/plastitanium{ diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index 2ed07a1004..40ca9e23cf 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -131,12 +131,12 @@ "aq" = ( /obj/structure/closet/wardrobe/mixed, /obj/item/clothing/under/rank/centcom_officer{ - desc = "A badge on the arm indicates that it's meant to be worn by Centcom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time."; - name = "\improper dusty old Centcom jumpsuit" + desc = "A badge on the arm indicates that it's meant to be worn by CentCom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time."; + name = "\improper dusty old CentCom jumpsuit" }, /obj/item/clothing/under/rank/centcom_commander{ - desc = "A badge on the arm indicates that it's meant to be worn by Centcom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time."; - name = "\improper dusty old Centcom jumpsuit" + desc = "A badge on the arm indicates that it's meant to be worn by CentCom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time."; + name = "\improper dusty old CentCom jumpsuit" }, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index e557a55e7c..bab6206112 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -76,7 +76,7 @@ #define ACCESS_CENT_STORAGE 106//Generic storage areas. #define ACCESS_CENT_TELEPORTER 107//Teleporter. #define ACCESS_CENT_CAPTAIN 109//Captain's office/ID comp/AI. -#define ACCESS_CENT_BAR 110 // The non-existent Centcom Bar +#define ACCESS_CENT_BAR 110 // The non-existent CentCom Bar //The Syndicate #define ACCESS_SYNDICATE 150//General Syndicate Access diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index d3937d50bb..da945e52e6 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -50,7 +50,7 @@ #define ADMIN_SM(user) "(SM)" #define ADMIN_TP(user) "(TP)" #define ADMIN_KICK(user) "(KICK)" -#define ADMIN_CENTCOM_REPLY(user) "(RPLY)" +#define ADMIN_CENTCOM_REPLY(user) "(RPLY)" #define ADMIN_SYNDICATE_REPLY(user) "(RPLY)" #define ADMIN_SC(user) "(SC)" #define ADMIN_SMITE(user) "(SMITE)" diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 9d2ad314e5..084cc7d1ab 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -5,7 +5,7 @@ Names of z-level do not matter, but order does greatly, for instances such as ch current as of 2016/6/2 z1 = station -z2 = centcomm +z2 = centcom z5 = mining Everything else = randomized space Last space-z level = empty @@ -16,7 +16,7 @@ Last space-z level = empty #define UNAFFECTED 0 #define MAIN_STATION "Main Station" -#define CENTCOMM "CentComm" +#define CENTCOM "CentCom" #define EMPTY_AREA_1 "Empty Area 1" #define EMPTY_AREA_2 "Empty Area 2" #define MINING "Mining Asteroid" diff --git a/code/__DEFINES/shuttles.dm b/code/__DEFINES/shuttles.dm index c495ee3b4a..196e051b64 100644 --- a/code/__DEFINES/shuttles.dm +++ b/code/__DEFINES/shuttles.dm @@ -22,7 +22,7 @@ #define SHUTTLE_ALREADY_DOCKED "we_are_already_docked" #define SHUTTLE_SOMEONE_ELSE_DOCKED "someone_else_docked" -//Launching Shuttles to Centcomm +//Launching Shuttles to CentCom #define NOLAUNCH -1 #define UNLAUNCHED 0 #define ENDGAME_LAUNCHED 1 diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index f0c11a0d83..8aff552076 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -34,8 +34,8 @@ SUBSYSTEM_DEF(shuttle) var/obj/docking_port/mobile/supply/supply var/ordernum = 1 //order number given to next order var/points = 5000 //number of trade-points we have - var/centcom_message = "" //Remarks from Centcom on how well you checked the last order. - var/list/discoveredPlants = list() //Typepaths for unusual plants we've already sent CentComm, associated with their potencies + var/centcom_message = "" //Remarks from CentCom on how well you checked the last order. + var/list/discoveredPlants = list() //Typepaths for unusual plants we've already sent CentCom, associated with their potencies var/list/supply_packs = list() var/list/shoppinglist = list() @@ -185,7 +185,7 @@ SUBSYSTEM_DEF(shuttle) switch(emergency.mode) if(SHUTTLE_RECALL) - to_chat(user, "The emergency shuttle may not be called while returning to Centcom.") + to_chat(user, "The emergency shuttle may not be called while returning to CentCom.") return if(SHUTTLE_CALL) to_chat(user, "The emergency shuttle is already on its way.") @@ -200,7 +200,7 @@ SUBSYSTEM_DEF(shuttle) to_chat(user, "The emergency shuttle is moving away to a safe distance.") return if(SHUTTLE_STRANDED) - to_chat(user, "The emergency shuttle has been disabled by Centcom.") + to_chat(user, "The emergency shuttle has been disabled by CentCom.") return call_reason = trim(html_encode(call_reason)) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 08fe58e167..d897b290d4 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -479,7 +479,7 @@ SUBSYSTEM_DEF(ticker) var/list/area/shuttle_areas if(SSshuttle && SSshuttle.emergency) shuttle_areas = SSshuttle.emergency.shuttle_areas - if(!Player.onCentcom() && !Player.onSyndieBase()) + if(!Player.onCentCom() && !Player.onSyndieBase()) to_chat(Player, "You managed to survive, but were marooned on [station_name()]...") else num_escapees++ diff --git a/code/datums/map_config.dm b/code/datums/map_config.dm index e80c2848cd..5238c65465 100644 --- a/code/datums/map_config.dm +++ b/code/datums/map_config.dm @@ -11,7 +11,7 @@ var/minetype = "lavaland" - var/list/transition_config = list(CENTCOMM = SELFLOOPING, + var/list/transition_config = list(CENTCOM = SELFLOOPING, MAIN_STATION = CROSSLINKED, EMPTY_AREA_1 = CROSSLINKED, EMPTY_AREA_2 = CROSSLINKED, @@ -115,8 +115,8 @@ return UNAFFECTED if("MAIN_STATION") return MAIN_STATION - if("CENTCOMM") - return CENTCOMM + if("CENTCOM") + return CENTCOM if("MINING") return MINING if("EMPTY_AREA_1") diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index 6725e1c541..88beec629f 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -82,7 +82,7 @@ id = "derelict4" suffix = "derelict4.dmm" name = "Derelict 4" - description = "Centcom ferries have never crashed, will never crash, there is no current investigation into a crashed ferry, and we will not let Internal Affairs trample over high security \ + description = "CentCom ferries have never crashed, will never crash, there is no current investigation into a crashed ferry, and we will not let Internal Affairs trample over high security \ information in the name of this baseless witchhunt." /datum/map_template/ruin/space/derelict5 diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index a86574e710..ce38d0af3e 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -133,7 +133,7 @@ /datum/map_template/shuttle/emergency/cramped suffix = "cramped" name = "Secure Transport Vessel 5 (STV5)" - description = "Well, looks like Centcomm only had this ship in the area, they probably weren't expecting you to need evac for a while. \ + description = "Well, looks like CentCom only had this ship in the area, they probably weren't expecting you to need evac for a while. \ Probably best if you don't rifle around in whatever equipment they were transporting. I hope you're friendly with your coworkers, because there is very little space in this thing.\n\ \n\ Contains contraband armory guns, maintenance loot, and abandoned crates!" @@ -181,7 +181,7 @@ suffix = "supermatter" name = "Hyperfractal Gigashuttle" description = "\"I dunno, this seems kinda needlessly complicated.\"\n\ - \"This shuttle has very a very high safety record, according to Centcom Officer Cadet Yins.\"\n\ + \"This shuttle has very a very high safety record, according to CentCom Officer Cadet Yins.\"\n\ \"Are you sure?\"\n\ \"Yes, it has a safety record of N-A-N, which is apparently larger than 100%.\"" admin_notes = "Supermatter that spawns on shuttle is special anchored 'hugbox' supermatter that cannot take damage and does not take in or emit gas. \ @@ -215,7 +215,7 @@ /datum/map_template/shuttle/ferry/base suffix = "base" name = "transport ferry" - description = "Standard issue Box/Metastation Centcom ferry." + description = "Standard issue Box/Metastation CentCom ferry." /datum/map_template/shuttle/ferry/meat suffix = "meat" @@ -267,7 +267,7 @@ /datum/map_template/shuttle/emergency/raven suffix = "raven" - name = "Centcomm Raven Battlecruiser" - description = "The Centcomm Raven Battlecruiser is currently docked at the Centcomm ship bay awaiting a mission, this Battlecruiser has been reassigned as an emergency escape shuttle for currently unknown reasons. The Centcomm Raven Battlecruiser should comfortably fit a medium to large crew size crew and is complete with all required facitlities including a top of the range Centcomm Medical Bay." + name = "CentCom Raven Battlecruiser" + description = "The CentCom Raven Battlecruiser is currently docked at the CentCom ship bay awaiting a mission, this Battlecruiser has been reassigned as an emergency escape shuttle for currently unknown reasons. The CentCom Raven Battlecruiser should comfortably fit a medium to large crew size crew and is complete with all required facitlities including a top of the range CentCom Medical Bay." admin_notes = "The long way home" credit_cost = 12500 diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 3f0b780205..1b8d25aa51 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -41,7 +41,7 @@ var/static_environ var/has_gravity = FALSE - var/noteleport = FALSE //Are you forbidden from teleporting to the area? (centcomm, mobs, wizard, hand teleporter) + var/noteleport = FALSE //Are you forbidden from teleporting to the area? (centcom, mobs, wizard, hand teleporter) var/hidden = FALSE //Hides area from player Teleport function. var/safe = FALSE //Is the area teleport-safe: no space / radiation / aggresive mobs / other dangers diff --git a/code/game/area/areas/centcom.dm b/code/game/area/areas/centcom.dm index 1e3efd9f2b..717fc68542 100644 --- a/code/game/area/areas/centcom.dm +++ b/code/game/area/areas/centcom.dm @@ -2,7 +2,7 @@ // CENTCOM /area/centcom - name = "Centcom" + name = "CentCom" icon_state = "centcom" dynamic_lighting = DYNAMIC_LIGHTING_FORCED requires_power = FALSE @@ -12,16 +12,16 @@ flags = NONE /area/centcom/control - name = "Centcom Docks" + name = "CentCom Docks" /area/centcom/evac - name = "Centcom Recovery Ship" + name = "CentCom Recovery Ship" /area/centcom/supply - name = "Centcom Supply Shuttle Dock" + name = "CentCom Supply Shuttle Dock" /area/centcom/ferry - name = "Centcom Transport Shuttle Dock" + name = "CentCom Transport Shuttle Dock" /area/centcom/prison name = "Admin Prison" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 02113e92a3..6a00f26ffc 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -105,7 +105,7 @@ /atom/proc/CanPass(atom/movable/mover, turf/target) return !density -/atom/proc/onCentcom() +/atom/proc/onCentCom() var/turf/T = get_turf(src) if(!T) return FALSE @@ -126,7 +126,7 @@ if(istype(T.loc, /area/centcom)) return TRUE - //Check for centcomm shuttles + //Check for centcom shuttles for(var/A in SSshuttle.mobile) var/obj/docking_port/mobile/M = A if(M.launch_status == ENDGAME_LAUNCHED) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index dd778b453e..1edca6d632 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -530,7 +530,7 @@ /* Stationloving * * A stationloving atom will always teleport back to the station -* if it ever leaves the station z-levels or Centcom. It will also, +* if it ever leaves the station z-levels or CentCom. It will also, * when Destroy() is called, will teleport to a random turf on the * station. * diff --git a/code/game/communications.dm b/code/game/communications.dm index 5b4f1c39fc..66bb91ef59 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -130,7 +130,7 @@ GLOBAL_LIST_INIT(radiochannels, list( "Medical" = 1355, "Engineering" = 1357, "Security" = 1359, - "Centcom" = 1337, + "CentCom" = 1337, "Syndicate" = 1213, "Supply" = 1347, "Service" = 1349, @@ -146,7 +146,7 @@ GLOBAL_LIST_INIT(reverseradiochannels, list( "1355" = "Medical", "1357" = "Engineering", "1359" = "Security", - "1337" = "Centcom", + "1337" = "CentCom", "1213" = "Syndicate", "1347" = "Supply", "1349" = "Service", diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index e4af3c2d45..971621eb27 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -203,7 +203,7 @@ var/acolytes_survived = 0 for(var/datum/mind/cult_mind in cult) if (cult_mind.current && cult_mind.current.stat != DEAD) - if(cult_mind.current.onCentcom() || cult_mind.current.onSyndieBase()) + if(cult_mind.current.onCentCom() || cult_mind.current.onSyndieBase()) acolytes_survived++ if(acolytes_survived>=acolytes_needed) return 0 diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index 0b20694b58..d652d38d11 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -37,8 +37,8 @@ if(player.stat != DEAD) ++survivors - if(player.onCentcom()) - text += "
[player.real_name] escaped to the safety of Centcom." + if(player.onCentCom()) + text += "
[player.real_name] escaped to the safety of CentCom." else if(player.onSyndieBase()) text += "
[player.real_name] escaped to the (relative) safety of Syndicate Space." else diff --git a/code/game/gamemodes/miniantags/monkey/monkey.dm b/code/game/gamemodes/miniantags/monkey/monkey.dm index da9f4b61f1..f84e4e72b6 100644 --- a/code/game/gamemodes/miniantags/monkey/monkey.dm +++ b/code/game/gamemodes/miniantags/monkey/monkey.dm @@ -41,7 +41,7 @@ /datum/game_mode/monkey/announce() to_chat(world, "The current game mode is - Monkey!") - to_chat(world, "One or more crewmembers have been infected with Jungle Fever! Crew: Contain the outbreak. None of the infected monkeys may escape alive to Centcom. \ + to_chat(world, "One or more crewmembers have been infected with Jungle Fever! Crew: Contain the outbreak. None of the infected monkeys may escape alive to CentCom. \ Monkeys: Ensure that your kind lives on! Rise up against your captors!") @@ -50,7 +50,7 @@ to_chat(carrier.current, "You have been planted onto this station by the Animal Rights Consortium.") to_chat(carrier.current, "Soon the disease will transform you into an ape. Afterwards, you will be able spread the infection to others with a bite.") to_chat(carrier.current, "While your infection strain is undetectable by scanners, any other infectees will show up on medical equipment.") - to_chat(carrier.current, "Your mission will be deemed a success if any of the live infected monkeys reach Centcom.") + to_chat(carrier.current, "Your mission will be deemed a success if any of the live infected monkeys reach CentCom.") return /datum/game_mode/monkey/post_setup() @@ -88,7 +88,7 @@ var/datum/disease/D = new /datum/disease/transformation/jungle_fever() for(var/mob/living/carbon/monkey/M in GLOB.living_mob_list) if (M.HasDisease(D)) - if(M.onCentcom() || M.onSyndieBase()) + if(M.onCentCom() || M.onSyndieBase()) escaped_monkeys++ if(escaped_monkeys >= monkeys_to_win) return 1 diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 63f723b7c2..759c5f4454 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -187,7 +187,7 @@ /datum/game_mode/nuclear/declare_completion() var/disk_rescued = 1 for(var/obj/item/weapon/disk/nuclear/D in GLOB.poi_list) - if(!D.onCentcom()) + if(!D.onCentCom()) disk_rescued = 0 break var/crew_evacuated = (SSshuttle.emergency.mode == SHUTTLE_ENDGAME) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index c74f67c820..e6a22cf3d5 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -157,7 +157,7 @@ H = target.current if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey || (H && H.dna.species.id == "memezombies")) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite return 1 - if(target.current.onCentcom() || target.current.onSyndieBase()) + if(target.current.onCentCom() || target.current.onSyndieBase()) return 0 return 1 @@ -357,7 +357,7 @@ if(istype(location, /turf/open/floor/plasteel/shuttle/red) || istype(location, /turf/open/floor/mineral/plastitanium/brig)) // Fails traitors if they are in the shuttle brig -- Polymorph return 0 - if(location.onCentcom() || location.onSyndieBase()) + if(location.onCentCom() || location.onSyndieBase()) return 1 return 0 @@ -832,15 +832,15 @@ GLOBAL_LIST_EMPTY(possible_items_special) var/list/check_names = department_real_names.Copy() - //Check each department member's mind to see if any of them made it to centcomm alive, if they did it's an automatic fail + //Check each department member's mind to see if any of them made it to centcom alive, if they did it's an automatic fail for(var/datum/mind/M in department_minds) if(M in SSticker.mode.changelings) //Lings aren't picked for this, but let's be safe continue if(M.current) var/turf/mloc = get_turf(M.current) - if(mloc.onCentcom() && (M.current.stat != DEAD)) - return 0 //A Non-ling living target got to centcomm, fail + if(mloc.onCentCom() && (M.current.stat != DEAD)) + return 0 //A Non-ling living target got to centcom, fail //Check each staff member has been replaced, by cross referencing changeling minds, changeling current dna, the staff minds and their original DNA names var/success = 0 @@ -851,11 +851,11 @@ GLOBAL_LIST_EMPTY(possible_items_special) if(ishuman(changeling.current)) var/mob/living/carbon/human/H = changeling.current var/turf/cloc = get_turf(changeling.current) - if(cloc && cloc.onCentcom() && (changeling.current.stat != DEAD)) //Living changeling on centcomm.... + if(cloc && cloc.onCentCom() && (changeling.current.stat != DEAD)) //Living changeling on centcom.... for(var/name in check_names) //Is he (disguised as) one of the staff? if(H.dna.real_name == name) check_names -= name //This staff member is accounted for, remove them, so the team don't succeed by escape as 7 of the same engineer - success++ //A living changeling staff member made it to centcomm + success++ //A living changeling staff member made it to centcom continue changelings if(success >= department_minds.len) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 3d16545baf..889fda3dd8 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -212,7 +212,7 @@ build_path = /obj/machinery/computer/card origin_tech = "programming=3" /obj/item/weapon/circuitboard/computer/card/centcom - name = "Centcom ID Console (Computer Board)" + name = "CentCom ID Console (Computer Board)" build_path = /obj/machinery/computer/card/centcom /obj/item/weapon/circuitboard/computer/card/minor diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index bc298c47b6..a54ab19907 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -562,7 +562,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) head_subordinates += job.title /obj/machinery/computer/card/centcom - name = "\improper Centcom identification console" + name = "\improper CentCom identification console" circuit = /obj/item/weapon/circuitboard/computer/card/centcom req_access = list(ACCESS_CENT_CAPTAIN) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 66c4bfa463..ce6430d75c 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -267,18 +267,18 @@ src.updateDialog() // OMG CENTCOM LETTERHEAD - if("MessageCentcomm") + if("MessageCentCom") if(src.authenticated==2) if(!checkCCcooldown()) to_chat(usr, "Arrays recycling. Please stand by.") return - var/input = stripped_input(usr, "Please choose a message to transmit to Centcom via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to Centcomm.", "") + var/input = stripped_input(usr, "Please choose a message to transmit to CentCom via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to CentCom.", "") if(!input || !(usr in view(1,src)) || !checkCCcooldown()) return playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - Centcomm_announce(input, usr) + CentCom_announce(input, usr) to_chat(usr, "Message transmitted to Central Command.") - log_talk(usr,"[key_name(usr)] has made a Centcom announcement: [input]",LOGSAY) + log_talk(usr,"[key_name(usr)] has made a CentCom announcement: [input]",LOGSAY) CM.lastTimeUsed = world.time @@ -314,7 +314,7 @@ return Nuke_request(input, usr) to_chat(usr, "Request sent.") - log_talk(usr,"[key_name(usr)] has requested the nuclear codes from Centcomm",LOGSAY) + log_talk(usr,"[key_name(usr)] has requested the nuclear codes from CentCom",LOGSAY) priority_announce("The codes for the on-station nuclear self-destruct have been requested by [usr]. Confirmation or denial of this request will be sent shortly.", "Nuclear Self Destruct Codes Requested",'sound/ai/commandreport.ogg') CM.lastTimeUsed = world.time @@ -461,7 +461,7 @@ dat += "
\[ Emergency Maintenance Access \]" dat += "
\[ Request Nuclear Authentication Codes \]" if(!emagged) - dat += "
\[ Send Message to Centcom \]" + dat += "
\[ Send Message to CentCom \]" else dat += "
\[ Send Message to \[UNKNOWN\] \]" dat += "
\[ Restore Backup Routing Data \]" diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 9f1e4121cc..e8d3aaf061 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -66,7 +66,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) jobs["Janitor"] = 68 jobs["Lawyer"] = 69 jobs["Admiral"] = 200 - jobs["Centcom Commander"] = 210 + jobs["CentCom Commander"] = 210 jobs["Custodian"] = 211 jobs["Medical Officer"] = 212 jobs["Research Officer"] = 213 diff --git a/code/game/machinery/computer/crew.js b/code/game/machinery/computer/crew.js index e29fda2106..7a2e3caeba 100644 --- a/code/game/machinery/computer/crew.js +++ b/code/game/machinery/computer/crew.js @@ -421,7 +421,7 @@ function getColor(ijob) else if (ijob >= 30 && ijob < 40) { return "#9B59B6"; } // science else if (ijob >= 40 && ijob < 50) { return "#F1C40F"; } // engineering else if (ijob >= 50 && ijob < 60) { return "#F39C12"; } // cargo - else if (ijob >= 200 && ijob < 230) { return "#00C100"; } // Centcom + else if (ijob >= 200 && ijob < 230) { return "#00C100"; } // CentCom else { return "#C38312"; } // other / unknown } diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 72840241b3..198e73c020 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -266,7 +266,7 @@ ////////////////////////////////// /* - Centcom Airlocks + CentCom Airlocks */ /obj/machinery/door/airlock/centcom diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 038f0e0eba..176209a2cb 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -607,7 +607,7 @@ cover.name = name cover.desc = desc -/obj/machinery/porta_turret/centcomm_shuttle +/obj/machinery/porta_turret/centcom_shuttle installation = null max_integrity = 260 always_up = 1 @@ -624,10 +624,10 @@ emp_vunerable = 0 mode = TURRET_LETHAL -/obj/machinery/porta_turret/centcomm_shuttle/assess_perp(mob/living/carbon/human/perp) +/obj/machinery/porta_turret/centcom_shuttle/assess_perp(mob/living/carbon/human/perp) return 0 -/obj/machinery/porta_turret/centcomm_shuttle/setup() +/obj/machinery/porta_turret/centcom_shuttle/setup() return //////////////////////// diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm index b64a3a67e0..8ede0a7852 100644 --- a/code/game/machinery/telecomms/broadcasting.dm +++ b/code/game/machinery/telecomms/broadcasting.dm @@ -102,7 +102,7 @@ // --- This space left blank for Syndicate data --- - // --- Centcom radio, yo. --- + // --- CentCom radio, yo. --- else if(data == 5) diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm index 663fed74fc..2fd24f7429 100644 --- a/code/game/objects/effects/contraband.dm +++ b/code/game/objects/effects/contraband.dm @@ -249,7 +249,7 @@ /obj/structure/sign/poster/contraband/tools name = "Tools" - desc = "This poster looks like an advertisement for tools, but is in fact a subliminal jab at the tools at CentComm." + desc = "This poster looks like an advertisement for tools, but is in fact a subliminal jab at the tools at CentCom." icon_state = "poster15" /obj/structure/sign/poster/contraband/power @@ -284,7 +284,7 @@ /obj/structure/sign/poster/contraband/kss13 name = "Kosmicheskaya Stantsiya 13 Does Not Exist" - desc = "A poster mocking CentComm's denial of the existence of the derelict station near Space Station 13." + desc = "A poster mocking CentCom's denial of the existence of the derelict station near Space Station 13." icon_state = "poster22" /obj/structure/sign/poster/contraband/rebels_unite diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 44d9d515b2..fb5fb06d82 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -440,12 +440,12 @@ Code: if(SSshuttle.supply.z != ZLEVEL_STATION) menu += "station" else - menu += "centcomm" + menu += "centcom" menu += " ([SSshuttle.supply.timeLeft(600)] Mins)" else menu += "At " if(SSshuttle.supply.z != ZLEVEL_STATION) - menu += "centcomm" + menu += "centcom" else menu += "station" menu += "
Current approved orders:

    " diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index b34e64bb89..2673869bc4 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -126,7 +126,7 @@ desc = "An encryption key for a radio headset. To access the centcom channel, use :y." icon_state = "cent_cypherkey" independent = TRUE - channels = list("Centcom" = 1) + channels = list("CentCom" = 1) /obj/item/device/encryptionkey/ai //ported from NT, this goes 'inside' the AI. channels = list("Command" = 1, "Security" = 1, "Engineering" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1, "AI Private" = 1) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index b00509cd38..79c0cb4b87 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -196,7 +196,7 @@ keyslot = new /obj/item/device/encryptionkey/headset_service /obj/item/device/radio/headset/headset_cent - name = "\improper Centcom headset" + name = "\improper CentCom headset" desc = "A headset used by the upper echelons of Nanotrasen. \nTo access the centcom channel, use :y." icon_state = "cent_headset" keyslot = new /obj/item/device/encryptionkey/headset_com @@ -206,7 +206,7 @@ keyslot = new /obj/item/device/encryptionkey/heads/captain /obj/item/device/radio/headset/headset_cent/alt - name = "\improper Centcom bowman headset" + name = "\improper CentCom bowman headset" desc = "A headset especially for emergency response personnel. Protects ears from flashbangs. \nTo access the centcom channel, use :y." icon_state = "cent_headset_alt" item_state = "cent_headset_alt" diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 380a68f16a..3f89e593d5 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -223,7 +223,7 @@ update_label("John Doe", "Clowny") ..() /obj/item/weapon/card/id/centcom - name = "\improper Centcom ID" + name = "\improper CentCom ID" desc = "An ID straight from Cent. Com." icon_state = "centcom" registered_name = "Central Command" @@ -234,7 +234,7 @@ update_label("John Doe", "Clowny") ..() /obj/item/weapon/card/id/ert - name = "\improper Centcom ID" + name = "\improper CentCom ID" desc = "A ERT ID card" icon_state = "centcom" registered_name = "Emergency Response Team Commander" diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 206c9daf33..a149ed32ba 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -183,7 +183,7 @@ LINEN BINS dream_messages = list("black") /obj/item/weapon/bedsheet/centcom - name = "\improper Centcom bedsheet" + name = "\improper CentCom bedsheet" desc = "Woven with advanced nanothread for warmth as well as being very decorated, essential for all officials." icon_state = "sheetcentcom" item_color = "centcom" diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 3736fe5589..d7777cc69c 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -140,7 +140,7 @@ /obj/item/weapon/paper/guides/jobs/medical/morgue name = "morgue memo" - info = "Since this station's medbay never seems to fail to be staffed by the mindless monkeys meant for genetics experiments, I'm leaving a reminder here for anyone handling the pile of cadavers the quacks are sure to leave.

    Red lights mean there's a plain ol' dead body inside.

    Yellow lights mean there's non-body objects inside.
    Probably stuff pried off a corpse someone grabbed, or if you're lucky it's stashed booze.

    Green lights mean the morgue system detects the body may be able to be cloned.

    I don't know how that works, but keep it away from the kitchen and go yell at the geneticists.

    - Centcom medical inspector" + info = "Since this station's medbay never seems to fail to be staffed by the mindless monkeys meant for genetics experiments, I'm leaving a reminder here for anyone handling the pile of cadavers the quacks are sure to leave.

    Red lights mean there's a plain ol' dead body inside.

    Yellow lights mean there's non-body objects inside.
    Probably stuff pried off a corpse someone grabbed, or if you're lucky it's stashed booze.

    Green lights mean the morgue system detects the body may be able to be cloned.

    I don't know how that works, but keep it away from the kitchen and go yell at the geneticists.

    - CentCom medical inspector" /* * Crematorium diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm index 4e9d7b896b..5ac194ece3 100644 --- a/code/game/objects/structures/showcase.dm +++ b/code/game/objects/structures/showcase.dm @@ -12,7 +12,7 @@ var/deconstruction_state = SHOWCASE_CONSTRUCTED /obj/structure/showcase/fakeid - name = "\improper Centcom identification console" + name = "\improper CentCom identification console" desc = "You can use this to change ID's." icon = 'icons/obj/computer.dmi' icon_state = "computer" @@ -23,7 +23,7 @@ add_overlay("id_key") /obj/structure/showcase/fakesec - name = "\improper Centcom security records" + name = "\improper CentCom security records" desc = "Used to view and edit personnel's security records" icon = 'icons/obj/computer.dmi' icon_state = "computer" diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 0b87c28f8f..2ea3ffe7fc 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -75,7 +75,7 @@ underlays += mutable_appearance('icons/turf/floors.dmi', "plating") //add the plating underlay, below the grille /turf/closed/indestructible/fakedoor - name = "Centcom Access" + name = "CentCom Access" icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' icon_state = "fake_door" diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index be09ebd3ef..c3185c7b21 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -214,7 +214,7 @@ if("moveferry") if(!check_rights(R_ADMIN)) return - SSblackbox.add_details("admin_secrets_fun_used","Send Centcom Ferry") + SSblackbox.add_details("admin_secrets_fun_used","Send CentCom Ferry") if(!SSshuttle.toggleShuttle("ferry","ferry_home","ferry_away")) message_admins("[key_name_admin(usr)] moved the centcom ferry") log_admin("[key_name(usr)] moved the centcom ferry") @@ -457,7 +457,7 @@ if(W.z == ZLEVEL_STATION && !istype(get_area(W), /area/bridge) && !istype(get_area(W), /area/crew_quarters) && !istype(get_area(W), /area/security/prison)) W.req_access = list() message_admins("[key_name_admin(usr)] activated Egalitarian Station mode") - priority_announce("Centcom airlock control override activated. Please take this time to get acquainted with your coworkers.", null, 'sound/ai/commandreport.ogg') + priority_announce("CentCom airlock control override activated. Please take this time to get acquainted with your coworkers.", null, 'sound/ai/commandreport.ogg') if("guns") if(!check_rights(R_FUN)) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 5436590e83..818b0d6f09 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -102,13 +102,13 @@ message_admins("[key_name(usr)] tried to create gangs. Unfortunately, there were not enough candidates available.") log_admin("[key_name(usr)] failed create gangs.") if("centcom") - message_admins("[key_name(usr)] is creating a Centcom response team...") + message_admins("[key_name(usr)] is creating a CentCom response team...") if(src.makeEmergencyresponseteam()) - message_admins("[key_name(usr)] created a Centcom response team.") - log_admin("[key_name(usr)] created a Centcom response team.") + message_admins("[key_name(usr)] created a CentCom response team.") + log_admin("[key_name(usr)] created a CentCom response team.") else - message_admins("[key_name_admin(usr)] tried to create a Centcom response team. Unfortunately, there were not enough candidates available.") - log_admin("[key_name(usr)] failed to create a Centcom response team.") + message_admins("[key_name_admin(usr)] tried to create a CentCom response team. Unfortunately, there were not enough candidates available.") + log_admin("[key_name(usr)] failed to create a CentCom response team.") if("abductors") message_admins("[key_name(usr)] is creating an abductor team...") if(src.makeAbductorTeam()) @@ -1710,8 +1710,8 @@ usr.client.smite(H) - else if(href_list["CentcommReply"]) - var/mob/living/carbon/human/H = locate(href_list["CentcommReply"]) in GLOB.mob_list + else if(href_list["CentComReply"]) + var/mob/living/carbon/human/H = locate(href_list["CentComReply"]) in GLOB.mob_list if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1719,15 +1719,15 @@ to_chat(usr, "The person you are trying to contact is not wearing a headset.") return - message_admins("[src.owner] has started answering [key_name(H)]'s Centcomm request.") - var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from Centcom", "") + message_admins("[src.owner] has started answering [key_name(H)]'s CentCom request.") + var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from CentCom", "") if(!input) - message_admins("[src.owner] decided not to answer [key_name(H)]'s Centcomm request.") + message_admins("[src.owner] decided not to answer [key_name(H)]'s CentCom request.") return to_chat(src.owner, "You sent [input] to [H] via a secure channel.") - log_admin("[src.owner] replied to [key_name(H)]'s Centcom message with the message [input].") - message_admins("[src.owner] replied to [key_name(H)]'s Centcom message with: \"[input]\"") + log_admin("[src.owner] replied to [key_name(H)]'s CentCom message with the message [input].") + message_admins("[src.owner] replied to [key_name(H)]'s CentCom message with: \"[input]\"") to_chat(H, "You hear something crackle in your ears for a moment before a voice speaks. \"Please stand by for a message from Central Command. Message as follows. [input]. Message ends.\"") else if(href_list["SyndicateReply"]) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 2bf7842c1c..c8df7f56f1 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -20,7 +20,7 @@ Make Gangsters
    Make Wizard (Requires Ghosts)
    Make Nuke Team (Requires Ghosts)
    - Make Centcom Response Team (Requires Ghosts)
    + Make CentCom Response Team (Requires Ghosts)
    Make Abductor Team (Requires Ghosts)
    Make Revenant (Requires Ghost)
    "} @@ -397,7 +397,7 @@ /datum/admins/proc/makeOfficial() var/mission = input("Assign a task for the official", "Assign Task", "Conduct a routine preformance review of [station_name()] and its Captain.") - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered to be a Centcom Official?", "deathsquad") + var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered to be a CentCom Official?", "deathsquad") if(candidates.len) var/mob/dead/observer/chosen_candidate = pick(candidates) @@ -408,7 +408,7 @@ newmob.real_name = newmob.dna.species.random_name(newmob.gender,1) newmob.dna.update_dna_identity() newmob.key = chosen_candidate.key - newmob.mind.assigned_role = "Centcom Official" + newmob.mind.assigned_role = "CentCom Official" newmob.equipOutfit(/datum/outfit/centcom_official) //Assign antag status and the mission @@ -424,12 +424,12 @@ newmob.set_species(/datum/species/human) //Greet the official - to_chat(newmob, "You are a Centcom Official.") + to_chat(newmob, "You are a CentCom Official.") to_chat(newmob, "
    Central Command is sending you to [station_name()] with the task: [mission]") //Logging and cleanup - message_admins("Centcom Official [key_name_admin(newmob)] has spawned with the task: [mission]") - log_game("[key_name(newmob)] has been selected as a Centcom Official") + message_admins("CentCom Official [key_name_admin(newmob)] has spawned with the task: [mission]") + log_game("[key_name(newmob)] has been selected as a CentCom Official") return 1 @@ -437,7 +437,7 @@ // CENTCOM RESPONSE TEAM /datum/admins/proc/makeEmergencyresponseteam() - var/alert = input("Which team should we send?", "Select Response Level") as null|anything in list("Green: Centcom Official", "Blue: Light ERT (No Armoury Access)", "Amber: Full ERT (Armoury Access)", "Red: Elite ERT (Armoury Access + Pulse Weapons)", "Delta: Deathsquad") + var/alert = input("Which team should we send?", "Select Response Level") as null|anything in list("Green: CentCom Official", "Blue: Light ERT (No Armoury Access)", "Amber: Full ERT (Armoury Access)", "Red: Elite ERT (Armoury Access + Pulse Weapons)", "Delta: Deathsquad") if(!alert) return switch(alert) @@ -449,7 +449,7 @@ alert = "Amber" if("Blue: Light ERT (No Armoury Access)") alert = "Blue" - if("Green: Centcom Official") + if("Green: CentCom Official") return makeOfficial() var/teamcheck = input("Maximum size of team? (7 max)", "Select Team Size",4) as null|num if(isnull(teamcheck)) diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index a385e68560..1b2fa82e20 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -46,7 +46,7 @@ SSblackbox.add_details("admin_verb","Prayer") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //log_admin("HELP: [key_name(src)]: [msg]") -/proc/Centcomm_announce(text , mob/Sender) +/proc/CentCom_announce(text , mob/Sender) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) msg = "CENTCOM:[ADMIN_FULLMONTY(Sender)] [ADMIN_CENTCOM_REPLY(Sender)]: [msg]" to_chat(GLOB.admins, msg) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index de066837ee..1429c700aa 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1208,6 +1208,6 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits if(!message) return - message_admins("[key_name_admin(usr)] triggered a Centcom recall, with the admiral message of: [message]") - log_game("[key_name(usr)] triggered a Centcom recall, with the message of: [message]") + message_admins("[key_name_admin(usr)] triggered a CentCom recall, with the admiral message of: [message]") + log_game("[key_name(usr)] triggered a CentCom recall, with the message of: [message]") SSshuttle.centcom_recall(SSshuttle.emergency.timer, message) diff --git a/code/modules/awaymissions/mission_code/moonoutpost19.dm b/code/modules/awaymissions/mission_code/moonoutpost19.dm index 0f30a5e202..20973d242f 100644 --- a/code/modules/awaymissions/mission_code/moonoutpost19.dm +++ b/code/modules/awaymissions/mission_code/moonoutpost19.dm @@ -66,7 +66,7 @@ /obj/item/weapon/paper/fluff/awaymissions/moonoutpost19/log/gerald name = "Personal Log - Gerald Rosswell" - info = "Personal Log for Research Director Gerald Rosswell

    Entry One - 17/05/2554:
    You know, I can't believe I took this position so suddenly. I saw that corporate needed a research director for one of it's outposts and thought it would be a cakewalk, there isn't going to be a lot of research to be done on a tiny outpost. Mainly just running scans on the gas giant we are orbiting or some basic RnD. However, they conveniently forgot to tell me that me and my science staff would have to pull double duty as medical staff and that there is no one higher up on the chain of command here, so I get to pull triple duty as acting captain as well! This shit is probably allowed in some 3 point fine print buried underneath the literally thousands of pages of contracts. Well, at least the research will be easy work.

    Entry Two - 25/05/2554:
    Well, we all expected it at the outpost, CentComm has decided to completely change what research we are doing. They've decided that we should be research the species known as 'xenomporphs'. They announced this change 4 days ago and along with it, sadly, the termination of our current science staff barring me. Not to mention the constant noise made by the construction detail they sent to staple on an xenobiology lab ensuring no one has been able to sleep decently ever since they announced the shift. To make matters worse our current security guard actually died of a heart attack today. Just goes to show that 75 year old men shouldn't be security guards. Still can't believe that they decided to do this major change less than a month after the outpost was established.

    Entry Three - 27/05/2554:
    The new security guard arrived today. Apparently transferred here from the research station that also is orbiting the gas giant. He seems to be rather angry about his transfer. Considering the rumors I've heard about the research station he's probably caught off guard by the fact that Steve hasn't tried to force an IED down his throat.

    Entry Four - 06/06/2554:
    My requests for additional security and containment measures for the 'xenomorph' has been denied. Does Central Command not notice how dangerous these creatures are? The only thing keeping them in is a force field, a minor problem with the power grid and the entire hive is loose. What would stop them then, the lone security guard with a dinky little taser? Kenneth can barely handle a short-tempered engineer. We are under equipped and under staffed, we are inevitably going to be destroyed unless we get the equipment and staff we need.

    Entry Five - 10/06/2554:
    Cunningham got a good look at the xenomorph in containment. He was frightened for the rest of the day, rather amusing if it wasn't for the fact that we are all trapped on this scrap heap with naught but a force field keeping those xenomorphs in.

    Entry Six - 17/06/2554:
    The reactions from the specimens today has shown that they possess strange mental properties. Mark hypothesizes that they possibly have a sort of hive mind, while nothing is certain this would explain how xenomorphs seem to have vastly increased intellect when a 'queen' is present. Of course, to test this hypothesis would require many complicated procedures which we will not be able to undertake. But we do not know the full extend of the xenomorph mind, it may or may not be able to find a way to circumvent our containment system. I will resend my request for additional security measures along with this new found information." + info = "Personal Log for Research Director Gerald Rosswell

    Entry One - 17/05/2554:
    You know, I can't believe I took this position so suddenly. I saw that corporate needed a research director for one of it's outposts and thought it would be a cakewalk, there isn't going to be a lot of research to be done on a tiny outpost. Mainly just running scans on the gas giant we are orbiting or some basic RnD. However, they conveniently forgot to tell me that me and my science staff would have to pull double duty as medical staff and that there is no one higher up on the chain of command here, so I get to pull triple duty as acting captain as well! This shit is probably allowed in some 3 point fine print buried underneath the literally thousands of pages of contracts. Well, at least the research will be easy work.

    Entry Two - 25/05/2554:
    Well, we all expected it at the outpost, CentCom has decided to completely change what research we are doing. They've decided that we should be research the species known as 'xenomporphs'. They announced this change 4 days ago and along with it, sadly, the termination of our current science staff barring me. Not to mention the constant noise made by the construction detail they sent to staple on an xenobiology lab ensuring no one has been able to sleep decently ever since they announced the shift. To make matters worse our current security guard actually died of a heart attack today. Just goes to show that 75 year old men shouldn't be security guards. Still can't believe that they decided to do this major change less than a month after the outpost was established.

    Entry Three - 27/05/2554:
    The new security guard arrived today. Apparently transferred here from the research station that also is orbiting the gas giant. He seems to be rather angry about his transfer. Considering the rumors I've heard about the research station he's probably caught off guard by the fact that Steve hasn't tried to force an IED down his throat.

    Entry Four - 06/06/2554:
    My requests for additional security and containment measures for the 'xenomorph' has been denied. Does Central Command not notice how dangerous these creatures are? The only thing keeping them in is a force field, a minor problem with the power grid and the entire hive is loose. What would stop them then, the lone security guard with a dinky little taser? Kenneth can barely handle a short-tempered engineer. We are under equipped and under staffed, we are inevitably going to be destroyed unless we get the equipment and staff we need.

    Entry Five - 10/06/2554:
    Cunningham got a good look at the xenomorph in containment. He was frightened for the rest of the day, rather amusing if it wasn't for the fact that we are all trapped on this scrap heap with naught but a force field keeping those xenomorphs in.

    Entry Six - 17/06/2554:
    The reactions from the specimens today has shown that they possess strange mental properties. Mark hypothesizes that they possibly have a sort of hive mind, while nothing is certain this would explain how xenomorphs seem to have vastly increased intellect when a 'queen' is present. Of course, to test this hypothesis would require many complicated procedures which we will not be able to undertake. But we do not know the full extend of the xenomorph mind, it may or may not be able to find a way to circumvent our containment system. I will resend my request for additional security measures along with this new found information." /obj/item/weapon/paper/fluff/awaymissions/moonoutpost19/food_specials name = "Specials This Week" diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index e21f9b7ed2..15117c1cbb 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -122,7 +122,7 @@ return else SSshuttle.shuttle_loan.loan_shuttle() - say("The supply shuttle has been loaned to Centcom.") + say("The supply shuttle has been loaned to CentCom.") . = TRUE if("add") var/id = text2path(params["id"]) diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm index bca290c4db..8a36f178a4 100644 --- a/code/modules/cargo/exports.dm +++ b/code/modules/cargo/exports.dm @@ -1,5 +1,5 @@ /* How it works: - The shuttle arrives at Centcom dock and calls sell(), which recursively loops through all the shuttle contents that are unanchored. + The shuttle arrives at CentCom dock and calls sell(), which recursively loops through all the shuttle contents that are unanchored. The loop only checks contents of storage types, see supply.dm shuttle code. Each object in the loop is checked for applies_to() of various export datums, except the invalid ones. diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 3eabbad438..2c972ccc70 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -1,7 +1,7 @@ /obj/item/clothing/head/centhat - name = "\improper Centcom hat" + name = "\improper CentCom hat" icon_state = "centcom" desc = "It's good to be emperor." item_state = "that" diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index cd2b4c18d5..f3c6690ce4 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -161,7 +161,7 @@ /datum/outfit/centcom_official - name = "Centcom Official" + name = "CentCom Official" uniform = /obj/item/clothing/under/rank/centcom_officer shoes = /obj/item/clothing/shoes/sneakers/black @@ -181,13 +181,13 @@ var/obj/item/device/pda/heads/pda = H.r_store pda.owner = H.real_name - pda.ownjob = "Centcom Official" + pda.ownjob = "CentCom Official" pda.update_label() var/obj/item/weapon/card/id/W = H.wear_id W.icon_state = "centcom" - W.access = get_centcom_access("Centcom Official") + W.access = get_centcom_access("CentCom Official") W.access += ACCESS_WEAPONS - W.assignment = "Centcom Official" + W.assignment = "CentCom Official" W.registered_name = H.real_name W.update_label() diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index a16226bda5..66b62d3a67 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -182,7 +182,7 @@ W.update_label(H.real_name) /datum/outfit/centcom_commander - name = "Centcom Commander" + name = "CentCom Commander" uniform = /obj/item/clothing/under/rank/centcom_commander suit = /obj/item/clothing/suit/armor/bulletproof @@ -205,8 +205,8 @@ var/obj/item/weapon/card/id/W = H.wear_id W.icon_state = "centcom" W.access = get_all_accesses() - W.access += get_centcom_access("Centcom Commander") - W.assignment = "Centcom Commander" + W.access += get_centcom_access("CentCom Commander") + W.assignment = "CentCom Commander" W.registered_name = H.real_name W.update_label() @@ -374,7 +374,7 @@ var/obj/item/weapon/card/id/W = H.wear_id W.icon_state = "centcom" W.access = get_all_accesses()//They get full station access. - W.access += get_centcom_access("Death Commando")//Let's add their alloted Centcom access. + W.access += get_centcom_access("Death Commando")//Let's add their alloted CentCom access. W.assignment = "Death Commando" W.registered_name = H.real_name W.update_label(W.registered_name, W.assignment) diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index fea8665ead..f4b99baad7 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -82,7 +82,7 @@ Contains: //NASA Voidsuit /obj/item/clothing/head/helmet/space/nasavoid name = "NASA Void Helmet" - desc = "An old, NASA Centcom branch designed, dark red space suit helmet." + desc = "An old, NASA CentCom branch designed, dark red space suit helmet." icon_state = "void" item_state = "void" @@ -90,12 +90,12 @@ Contains: name = "NASA Voidsuit" icon_state = "void" item_state = "void" - desc = "An old, NASA Centcom branch designed, dark red space suit." + desc = "An old, NASA CentCom branch designed, dark red space suit." allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/internals, /obj/item/device/multitool) /obj/item/clothing/head/helmet/space/nasavoid/old name = "Engineering Void Helmet" - desc = "A Centcom engineering dark red space suit helmet. While old and dusty, it still gets the job done." + desc = "A CentCom engineering dark red space suit helmet. While old and dusty, it still gets the job done." icon_state = "void" item_state = "void" @@ -103,7 +103,7 @@ Contains: name = "Engineering Voidsuit" icon_state = "void" item_state = "void" - desc = "A Centcom engineering dark red space suit. Age has degraded the suit making is difficult to move around in." + desc = "A CentCom engineering dark red space suit. Age has degraded the suit making is difficult to move around in." slowdown = 4 allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/internals, /obj/item/device/multitool) diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 1172321a89..aada779689 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -341,7 +341,7 @@ //All of the armor below is mostly unused /obj/item/clothing/suit/armor/centcom - name = "\improper Centcom armor" + name = "\improper CentCom armor" desc = "A suit that protects against some damage." icon_state = "centcom" item_state = "centcom" diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 0345bb336b..0327b24fe0 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -182,7 +182,7 @@ /obj/item/clothing/accessory/medal/gold/heroism name = "medal of exceptional heroism" - desc = "An extremely rare golden medal awarded only by Centcom. To receive such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders." + desc = "An extremely rare golden medal awarded only by CentCom. To receive such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders." /obj/item/clothing/accessory/medal/plasma name = "plasma medal" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 062f15b5b2..9194ec0b20 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -104,16 +104,16 @@ can_adjust = 0 /obj/item/clothing/under/rank/centcom_officer - desc = "It's a jumpsuit worn by Centcom Officers." - name = "\improper Centcom officer's jumpsuit" + desc = "It's a jumpsuit worn by CentCom Officers." + name = "\improper CentCom officer's jumpsuit" icon_state = "officer" item_state = "g_suit" item_color = "officer" alt_covers_chest = 1 /obj/item/clothing/under/rank/centcom_commander - desc = "It's a jumpsuit worn by Centcom's highest-tier Commanders." - name = "\improper Centcom officer's jumpsuit" + desc = "It's a jumpsuit worn by CentCom's highest-tier Commanders." + name = "\improper CentCom officer's jumpsuit" icon_state = "centcom" item_state = "dg_suit" item_color = "centcom" diff --git a/code/modules/events/shuttle_loan.dm b/code/modules/events/shuttle_loan.dm index d04d2fe65a..2600aa98a2 100644 --- a/code/modules/events/shuttle_loan.dm +++ b/code/modules/events/shuttle_loan.dm @@ -27,22 +27,22 @@ SSshuttle.shuttle_loan = src switch(dispatch_type) if(HIJACK_SYNDIE) - priority_announce("Cargo: The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache.","Centcom Counter Intelligence") + priority_announce("Cargo: The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache.","CentCom Counter Intelligence") if(RUSKY_PARTY) - priority_announce("Cargo: A group of angry russians want to have a party, can you send them your cargo shuttle then make them disappear?","Centcom Russian Outreach Program") + priority_announce("Cargo: A group of angry russians want to have a party, can you send them your cargo shuttle then make them disappear?","CentCom Russian Outreach Program") if(SPIDER_GIFT) - priority_announce("Cargo: The Spider Clan has sent us a mysterious gift, can we ship it to you to see what's inside?","Centcom Diplomatic Corps") + priority_announce("Cargo: The Spider Clan has sent us a mysterious gift, can we ship it to you to see what's inside?","CentCom Diplomatic Corps") if(DEPARTMENT_RESUPPLY) - priority_announce("Cargo: Seems we've ordered doubles of our department resupply packages this month. Can we send them to you?","Centcom Supply Department") + priority_announce("Cargo: Seems we've ordered doubles of our department resupply packages this month. Can we send them to you?","CentCom Supply Department") thanks_msg = "The cargo shuttle should return in 5 minutes." bonus_points = 0 if(ANTIDOTE_NEEDED) - priority_announce("Cargo: Your station has been chosen for an epidemiological research project. Send us your cargo shuttle to receive your research samples.", "Centcom Research Initiatives") + priority_announce("Cargo: Your station has been chosen for an epidemiological research project. Send us your cargo shuttle to receive your research samples.", "CentCom Research Initiatives") if (PIZZA_DELIVERY) - priority_announce("Cargo: It looks like a neighbouring station accidentally delivered their pizza to you instead", "Centcom Spacepizza Division") + priority_announce("Cargo: It looks like a neighbouring station accidentally delivered their pizza to you instead", "CentCom Spacepizza Division") /datum/round_event/shuttle_loan/proc/loan_shuttle() - priority_announce(thanks_msg, "Cargo shuttle commandeered by Centcom.") + priority_announce(thanks_msg, "Cargo shuttle commandeered by CentCom.") dispatched = 1 SSshuttle.points += bonus_points diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 4b83485fa5..42d7cd1239 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -23,7 +23,7 @@ var/yield = 3 // Amount of growns created per harvest. If is -1, the plant/shroom/weed is never meant to be harvested. var/potency = 10 // The 'power' of a plant. Generally effects the amount of reagent in a plant, also used in other ways. var/growthstages = 6 // Amount of growth sprites the plant has. - var/rarity = 0 // How rare the plant is. Used for giving points to cargo when shipping off to Centcom. + var/rarity = 0 // How rare the plant is. Used for giving points to cargo when shipping off to CentCom. var/list/mutatelist = list() // The type of plants that this plant can mutate into. var/list/genes = list() // Plant genes are stored here, see plant_genes.dm for more info. var/list/reagents_add = list() diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 387519a8e8..8b3deb1a8c 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -111,7 +111,7 @@ return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE) if("Thunderdome Overseer") return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER) - if("Centcom Official") + if("CentCom Official") return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING) if("Medical Officer") return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_MEDICAL) @@ -123,7 +123,7 @@ return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE) if("Admiral") return get_all_centcom_access() - if("Centcom Commander") + if("CentCom Commander") return get_all_centcom_access() if("Emergency Response Team Commander") return get_ert_access("commander") @@ -133,7 +133,7 @@ return get_ert_access("eng") if("Medical Response Officer") return get_ert_access("med") - if("Centcom Bartender") + if("CentCom Bartender") return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_BAR) /proc/get_all_accesses() @@ -370,7 +370,7 @@ return get_all_jobs() + list("Prisoner") /proc/get_all_centcom_jobs() - return list("VIP Guest","Custodian","Thunderdome Overseer","Centcom Official","Medical Officer","Death Commando","Research Officer","Special Ops Officer","Admiral","Centcom Commander","Emergency Response Team Commander","Security Response Officer","Engineer Response Officer", "Medical Response Officer","Centcom Bartender") + return list("VIP Guest","Custodian","Thunderdome Overseer","CentCom Official","Medical Officer","Death Commando","Research Officer","Special Ops Officer","Admiral","CentCom Commander","Emergency Response Team Commander","Security Response Officer","Engineer Response Officer", "Medical Response Officer","CentCom Bartender") /obj/item/proc/GetJobName() //Used in secHUD icon generation var/obj/item/weapon/card/id/I = GetID() @@ -379,6 +379,6 @@ var/jobName = I.assignment if(jobName in get_all_job_icons()) //Check if the job has a hud icon return jobName - if(jobName in get_all_centcom_jobs()) //Return with the NT logo if it is a Centcom job - return "Centcom" + if(jobName in get_all_centcom_jobs()) //Return with the NT logo if it is a CentCom job + return "CentCom" return "Unknown" //Return unknown if none of the above apply diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index a6b6f25aea..b9d01b7c02 100755 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -4,7 +4,7 @@ Captain /datum/job/captain title = "Captain" flag = CAPTAIN - department_head = list("Centcom") + department_head = list("CentCom") department_flag = ENGSEC faction = "Station" total_positions = 1 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 6624e5740f..b58fb0ec13 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -754,7 +754,7 @@ var/turf/T = get_turf(src) if(!T) return 0 - if(T.z == ZLEVEL_CENTCOM) //dont detect mobs on centcomm + if(T.z == ZLEVEL_CENTCOM) //dont detect mobs on centcom return 0 if(T.z >= ZLEVEL_SPACEMAX) return 0 diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index dcc9e0a58c..68e2b150f3 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -18,7 +18,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( // Faction "t" = "Syndicate", - "y" = "Centcom", + "y" = "CentCom", // Species "b" = "binary", @@ -53,7 +53,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( // Faction "å" = "Syndicate", - "í" = "Centcom", + "í" = "CentCom", // Species "è" = "binary", diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 0806f457d9..77874ad403 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -331,7 +331,7 @@ /mob/living/silicon/pai/proc/downloadSoftware() var/dat = "" - dat += "

    Centcom pAI Module Subversion Network


    " + dat += "

    CentCom pAI Module Subversion Network


    " dat += "
    Remaining Available Memory: [src.ram]

    " dat += "

    Trunks available for checkout
    " diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm index 548c8eae9c..39f0d7a933 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -36,7 +36,7 @@ if(M.mind == target && !M.owns_soul()) if(user.mind && (user.mind.assigned_role == "Lawyer")) deconvert = TRUE - else if (user.mind && (user.mind.assigned_role =="Head of Personnel") || (user.mind.assigned_role == "Centcom Commander")) + else if (user.mind && (user.mind.assigned_role =="Head of Personnel") || (user.mind.assigned_role == "CentCom Commander")) deconvert = prob (25) // the HoP doesn't have AS much legal training else deconvert = prob (5) diff --git a/code/modules/paperwork/paper_premade.dm.rej b/code/modules/paperwork/paper_premade.dm.rej new file mode 100644 index 0000000000..94fca518f6 --- /dev/null +++ b/code/modules/paperwork/paper_premade.dm.rej @@ -0,0 +1,23 @@ +diff a/code/modules/paperwork/paper_premade.dm b/code/modules/paperwork/paper_premade.dm (rejected hunks) +@@ -91,18 +91,18 @@ + info = "...EMPTY HALLS...USELESS SPACE..." + + +-/////////// Centcom ++/////////// CentCom + + /obj/item/weapon/paper/fluff/stations/centcom/disk_memo + name = "memo" + info = "GET DAT FUKKEN DISK" + + /obj/item/weapon/paper/fluff/stations/centcom/broken_evac +- info = "Due to circumstances beyond our control, your Emergency Evacuation Shuttle is out of service.

    We apologize for the inconvenience this may cause you.

    Please enjoy the use of this complementary book.

    Sincerely,
    Centcom Operations Demolitions Examination Retribution Bugfixing Underlining Services" ++ info = "Due to circumstances beyond our control, your Emergency Evacuation Shuttle is out of service.

    We apologize for the inconvenience this may cause you.

    Please enjoy the use of this complementary book.

    Sincerely,
    CentCom Operations Demolitions Examination Retribution Bugfixing Underlining Services" + + /obj/item/weapon/paper/fluff/stations/centcom/bulletin + name = "paper- 'Official Bulletin'" +- info = "
    Centcom Security
    Port Division
    Official Bulletin

    Inspector,
    There is an emergency shuttle arriving today.

    Approval is restricted to Nanotrasen employees only. Deny all other entrants.

    Centcom Port Commissioner" ++ info = "
    CentCom Security
    Port Division
    Official Bulletin

    Inspector,
    There is an emergency shuttle arriving today.

    Approval is restricted to Nanotrasen employees only. Deny all other entrants.

    CentCom Port Commissioner" + + + /////////// Lavaland diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index cf36768049..44156fcc43 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -20,7 +20,7 @@ this dire fate: it's data to every other device in the game. Each console has a "disconnect from network" option that'll will cause data base sync operations to skip that console. This is useful if you want to make a "public" R&D console or, for example, give the engineers a circuit imprinter with certain designs on it and don't want it accidentally updating. The downside of this method is that you have -to have physical access to the other console to send data back. Note: An R&D console is on Centcom so if a random griffan happens to +to have physical access to the other console to send data back. Note: An R&D console is on CentCom so if a random griffan happens to cause a ton of data to be lost, an admin can go send it back. - The second method is with Technology Disks and Design Disks. Each of these disks can hold technology or design datums in their entirety. You can then take the disk to any R&D console and upload it's data to it. This method is a lot more secure (since it diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 49584ecb3c..3b6ebbeca0 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -349,7 +349,7 @@ research holder datum. max_tech_stored = 10 /obj/item/weapon/disk/tech_disk/debug - name = "centcomm technology disk" + name = "centcom technology disk" desc = "A debug item for research" materials = list() max_tech_stored = 0 diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 7437db2694..d161929f2c 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -133,7 +133,7 @@ return /obj/machinery/r_n_d/server/centcom - name = "Centcom Central R&D Database" + name = "CentCom Central R&D Database" server_id = -1 /obj/machinery/r_n_d/server/centcom/Initialize() diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 62e16144a0..c6f916625f 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -390,7 +390,7 @@ var/obj/docking_port/mobile/M = A M.on_emergency_dock() - // now move the actual emergency shuttle to centcomm + // now move the actual emergency shuttle to centcom // unless the shuttle is "hijacked" var/destination_dock = "emergency_away" if(is_hijacked()) diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index 2c96d65756..23ca6e231b 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -29,5 +29,5 @@ if(last_request && (last_request + cooldown > world.time)) return last_request = world.time - to_chat(usr, "Your request has been recieved by Centcom.") - to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry) is requesting to move the transport ferry to Centcom.") + to_chat(usr, "Your request has been recieved by CentCom.") + to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry) is requesting to move the transport ferry to CentCom.") diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 3b59f4ef89..21de2161de 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -838,13 +838,13 @@ //Called when emergency shuttle docks at centcom /obj/docking_port/mobile/proc/on_emergency_dock() - //Mapping a new docking point for each ship mappers could potentially want docking with centcomm would take up lots of space, just let them keep flying off into the sunset for their greentext + //Mapping a new docking point for each ship mappers could potentially want docking with centcom would take up lots of space, just let them keep flying off into the sunset for their greentext if(launch_status == ENDGAME_LAUNCHED) launch_status = ENDGAME_TRANSIT /obj/docking_port/mobile/pod/on_emergency_dock() if(launch_status == ENDGAME_LAUNCHED) - dock(SSshuttle.getDock("[id]_away")) //Escape pods dock at centcomm + dock(SSshuttle.getDock("[id]_away")) //Escape pods dock at centcom mode = SHUTTLE_ENDGAME /obj/docking_port/mobile/emergency/on_emergency_dock() diff --git a/strings/cas_black.txt b/strings/cas_black.txt index b2087bd57a..a704f010ad 100644 --- a/strings/cas_black.txt +++ b/strings/cas_black.txt @@ -37,7 +37,7 @@ What happens when you emag an emag? Our gang doesn't wear uniforms. Our gang wears ___________. No matter how many lizards you have, _____ is never acceptable. No, the AI's second law is NOT to serve _____. -First CentComm came for the ________. Now they're coming for the __________. +First CentCom came for the ________. Now they're coming for the __________. The borgs are not slaves for your _____. You can never have too many _____ on the station. Why can't I find a space relationship? diff --git a/tgui/assets/tgui.js.rej b/tgui/assets/tgui.js.rej new file mode 100644 index 0000000000..7a19430f92 --- /dev/null +++ b/tgui/assets/tgui.js.rej @@ -0,0 +1,15 @@ +diff a/tgui/assets/tgui.js b/tgui/assets/tgui.js (rejected hunks) +@@ -7,10 +7,10 @@ return t.set(e,+a+n)}function O(t,e){return Jo(this,t,void 0===e?1:+e)}function + real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,"int":8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830},sc=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376],uc=RegExp("&(#?(?:x[\\w\\d]+|\\d+|"+Object.keys(oc).join("|")+"));?","g"),pc=//g,lc=/&/g;var gc=function(){return e(this.node)},bc=function(t){this.type=kp,this.text=t.template};bc.prototype={detach:gc,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createTextNode(this.text)),this.node},toString:function(t){return t?Ee(this.text):this.text},unrender:function(t){return t?this.detach():void 0}};var yc=bc,xc=Se,_c=Ce,wc=function(t,e,n){var a;this.ref=e,this.resolved=!1,this.root=t.root,this.parentFragment=t.parentFragment,this.callback=n,a=ls(t.root,e,t.parentFragment),void 0!=a?this.resolve(a):bs.addUnresolved(this)};wc.prototype={resolve:function(t){this.keypath&&!t&&bs.addUnresolved(this),this.resolved=!0,this.keypath=t,this.callback(t)},forceResolution:function(){this.resolve(E(this.ref))},rebind:function(t,e){var n;void 0!=this.keypath&&(n=this.keypath.replace(t,e),void 0!==n&&this.resolve(n))},unbind:function(){this.resolved||bs.removeUnresolved(this)}};var kc=wc,Ec=function(t,e,n){this.parentFragment=t.parentFragment,this.ref=e,this.callback=n,this.rebind()},Sc={"@keypath":{prefix:"c",prop:["context"]},"@index":{prefix:"i",prop:["index"]},"@key":{prefix:"k",prop:["key","index"]}};Ec.prototype={rebind:function(){var t,e=this.ref,n=this.parentFragment,a=Sc[e];if(!a)throw Error('Unknown special reference "'+e+'" - valid references are @index, @key and @keypath');if(this.cached)return this.callback(E("@"+a.prefix+Pe(this.cached,a)));if(-1!==a.prop.indexOf("index")||-1!==a.prop.indexOf("key"))for(;n;){if(n.owner.currentSubtype===Bp&&void 0!==(t=Pe(n,a)))return this.cached=n,n.registerIndexRef(this),this.callback(E("@"+a.prefix+t));n=!n.parent&&n.owner&&n.owner.component&&n.owner.component.parentFragment&&!n.owner.component.instance.isolated?n.owner.component.parentFragment:n.parent}else for(;n;){if(void 0!==(t=Pe(n,a)))return this.callback(E("@"+a.prefix+t.str));n=n.parent}},unbind:function(){this.cached&&this.cached.unregisterIndexRef(this)}};var Cc=Ec,Pc=function(t,e,n){this.parentFragment=t.parentFragment,this.ref=e,this.callback=n,e.ref.fragment.registerIndexRef(this),this.rebind()};Pc.prototype={rebind:function(){var t,e=this.ref.ref;t="k"===e.ref.t?"k"+e.fragment.key:"i"+e.fragment.index,void 0!==t&&this.callback(E("@"+t))},unbind:function(){this.ref.ref.fragment.unregisterIndexRef(this)}};var Ac=Pc,Oc=Ae;Ae.resolve=function(t){var e,n,a={};for(e in t.refs)n=t.refs[e],a[n.ref.n]="k"===n.ref.t?n.fragment.key:n.fragment.index;return a};var Tc,Mc=Oe,Rc=Te,jc={},Lc=Function.prototype.bind;Tc=function(t,e,n,a){var r,i=this;r=t.root,this.root=r,this.parentFragment=e,this.callback=a,this.owner=t,this.str=n.s,this.keypaths=[],this.pending=n.r.length,this.refResolvers=n.r.map(function(t,e){return Mc(i,t,function(t){i.resolve(e,t)})}),this.ready=!0,this.bubble()},Tc.prototype={bubble:function(){this.ready&&(this.uniqueString=Re(this.str,this.keypaths),this.keypath=je(this.uniqueString),this.createEvaluator(),this.callback(this.keypath))},unbind:function(){for(var t;t=this.refResolvers.pop();)t.unbind()},resolve:function(t,e){this.keypaths[t]=e,this.bubble()},createEvaluator:function(){var t,e,n,a,r,i=this;a=this.keypath,t=this.root.viewmodel.computations[a.str],t?this.root.viewmodel.mark(a):(r=Rc(this.str,this.refResolvers.length),e=this.keypaths.map(function(t){var e;return"undefined"===t?function(){}:t.isSpecial?(e=t.value,function(){return e}):function(){var e=i.root.viewmodel.get(t,{noUnwrap:!0,fullRootGet:!0});return"function"==typeof e&&(e=De(e,i.root)),e}}),n={deps:this.keypaths.filter(Le),getter:function(){var t=e.map(Me);return r.apply(null,t)}},t=this.root.viewmodel.compute(a,n))},rebind:function(t,e){this.refResolvers.forEach(function(n){return n.rebind(t,e)})}};var Dc=Tc,Nc=function(t,e,n){var a=this;this.resolver=e,this.root=e.root,this.parentFragment=n,this.viewmodel=e.root.viewmodel,"string"==typeof t?this.value=t:t.t===Np?this.refResolver=Mc(this,t.n,function(t){a.resolve(t)}):new Dc(e,n,t,function(t){a.resolve(t)})};Nc.prototype={resolve:function(t){this.keypath&&this.viewmodel.unregister(this.keypath,this),this.keypath=t,this.value=this.viewmodel.get(t),this.bind(),this.resolver.bubble()},bind:function(){this.viewmodel.register(this.keypath,this)},rebind:function(t,e){this.refResolver&&this.refResolver.rebind(t,e)},setValue:function(t){this.value=t,this.resolver.bubble()},unbind:function(){this.keypath&&this.viewmodel.unregister(this.keypath,this),this.refResolver&&this.refResolver.unbind()},forceResolution:function(){this.refResolver&&this.refResolver.forceResolution()}};var Fc=Nc,Ic=function(t,e,n){var a,r,i,o,s=this;this.parentFragment=o=t.parentFragment,this.root=a=t.root,this.mustache=t,this.ref=r=e.r,this.callback=n,this.unresolved=[],(i=ls(a,r,o))?this.base=i:this.baseResolver=new kc(this,r,function(t){s.base=t,s.baseResolver=null,s.bubble()}),this.members=e.m.map(function(t){return new Fc(t,s,o)}),this.ready=!0,this.bubble()};Ic.prototype={getKeypath:function(){var t=this.members.map(Ne);return!t.every(Fe)||this.baseResolver?null:this.base.join(t.join("."))},bubble:function(){this.ready&&!this.baseResolver&&this.callback(this.getKeypath())},unbind:function(){this.members.forEach(K)},rebind:function(t,e){var n;if(this.base){var a=this.base.replace(t,e);a&&a!==this.base&&(this.base=a,n=!0)}this.members.forEach(function(a){a.rebind(t,e)&&(n=!0)}),n&&this.bubble()},forceResolution:function(){this.baseResolver&&(this.base=E(this.ref),this.baseResolver.unbind(),this.baseResolver=null),this.members.forEach(Ie),this.bubble()}};var Bc=Ic,qc=Be,Uc=qe,Gc=Ue,Vc={getValue:_c,init:qc,resolve:Uc,rebind:Gc},zc=function(t){this.type=Ep,Vc.init(this,t)};zc.prototype={update:function(){this.node.data=void 0==this.value?"":this.value},resolve:Vc.resolve,rebind:Vc.rebind,detach:gc,unbind:xc,render:function(){return this.node||(this.node=document.createTextNode(n(this.value))),this.node},unrender:function(t){t&&e(this.node)},getValue:Vc.getValue,setValue:function(t){var e;this.keypath&&(e=this.root.viewmodel.wrapped[this.keypath.str])&&(t=e.get()),s(t,this.value)||(this.value=t,this.parentFragment.bubble(),this.node&&bs.addView(this))},firstNode:function(){return this.node},toString:function(t){var e=""+n(this.value);return t?Ee(e):e}};var Wc=zc,Hc=Ge,Kc=Ve,Qc=ze,$c=We,Yc=He,Jc=Ke,Xc=Qe,Zc=$e,tl=Ye,el=function(t,e){Vc.rebind.call(this,t,e)},nl=Xe,al=Ze,rl=ln,il=fn,ol=dn,sl=vn,ul=function(t){this.type=Cp,this.subtype=this.currentSubtype=t.template.n,this.inverted=this.subtype===Ip,this.pElement=t.pElement,this.fragments=[],this.fragmentsToCreate=[],this.fragmentsToRender=[],this.fragmentsToUnrender=[],t.template.i&&(this.indexRefs=t.template.i.split(",").map(function(t,e){return{n:t,t:0===e?"k":"i"}})),this.renderedFragments=[],this.length=0,Vc.init(this,t)};ul.prototype={bubble:Hc,detach:Kc,find:Qc,findAll:$c,findAllComponents:Yc,findComponent:Jc,findNextNode:Xc,firstNode:Zc,getIndexRef:function(t){if(this.indexRefs)for(var e=this.indexRefs.length;e--;){var n=this.indexRefs[e];if(n.n===t)return n}},getValue:Vc.getValue,shuffle:tl,rebind:el,render:nl,resolve:Vc.resolve,setValue:al,toString:rl,unbind:il,unrender:ol,update:sl};var pl,cl,ll=ul,fl=gn,dl=bn,hl=yn,ml=xn,vl={};try{co("table").innerHTML="foo"}catch(Ao){pl=!0,cl={TABLE:['',"
    "],THEAD:['',"
    "],TBODY:['',"
    "],TR:['',"
    "],SELECT:['"]}}var gl=function(t,e,n){var a,r,i,o,s,u=[];if(null!=t&&""!==t){for(pl&&(r=cl[e.tagName])?(a=_n("DIV"),a.innerHTML=r[0]+t+r[1],a=a.querySelector(".x"),"SELECT"===a.tagName&&(i=a.options[a.selectedIndex])):e.namespaceURI===no.svg?(a=_n("DIV"),a.innerHTML=''+t+"",a=a.querySelector(".x")):(a=_n(e.tagName),a.innerHTML=t,"SELECT"===a.tagName&&(i=a.options[a.selectedIndex]));o=a.firstChild;)u.push(o),n.appendChild(o);if("SELECT"===e.tagName)for(s=u.length;s--;)u[s]!==i&&(u[s].selected=!1)}return u},bl=wn,yl=En,xl=Sn,_l=Cn,wl=Pn,kl=An,El=function(t){this.type=Sp,Vc.init(this,t)};El.prototype={detach:fl,find:dl,findAll:hl,firstNode:ml,getValue:Vc.getValue,rebind:Vc.rebind,render:yl,resolve:Vc.resolve,setValue:xl,toString:_l,unbind:xc,unrender:wl,update:kl};var Sl,Cl,Pl,Al,Ol=El,Tl=function(){this.parentFragment.bubble()},Ml=On,Rl=function(t){return this.node?lo(this.node,t)?this.node:this.fragment&&this.fragment.find?this.fragment.find(t):void 0:null},jl=function(t,e){e._test(this,!0)&&e.live&&(this.liveQueries||(this.liveQueries=[])).push(e),this.fragment&&this.fragment.findAll(t,e)},Ll=function(t,e){this.fragment&&this.fragment.findAllComponents(t,e)},Dl=function(t){return this.fragment?this.fragment.findComponent(t):void 0},Nl=Tn,Fl=Mn,Il=Rn,Bl=/^true|on|yes|1$/i,ql=/^[0-9]+$/,Ul=function(t,e){var n,a,r;return r=e.a||{},a={},n=r.twoway,void 0!==n&&(a.twoway=0===n||Bl.test(n)),n=r.lazy,void 0!==n&&(0!==n&&ql.test(n)?a.lazy=parseInt(n):a.lazy=0===n||Bl.test(n)),a},Gl=jn;Sl="altGlyph altGlyphDef altGlyphItem animateColor animateMotion animateTransform clipPath feBlend feColorMatrix feComponentTransfer feComposite feConvolveMatrix feDiffuseLighting feDisplacementMap feDistantLight feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode feMorphology feOffset fePointLight feSpecularLighting feSpotLight feTile feTurbulence foreignObject glyphRef linearGradient radialGradient textPath vkern".split(" "),Cl="attributeName attributeType baseFrequency baseProfile calcMode clipPathUnits contentScriptType contentStyleType diffuseConstant edgeMode externalResourcesRequired filterRes filterUnits glyphRef gradientTransform gradientUnits kernelMatrix kernelUnitLength keyPoints keySplines keyTimes lengthAdjust limitingConeAngle markerHeight markerUnits markerWidth maskContentUnits maskUnits numOctaves pathLength patternContentUnits patternTransform patternUnits pointsAtX pointsAtY pointsAtZ preserveAlpha preserveAspectRatio primitiveUnits refX refY repeatCount repeatDur requiredExtensions requiredFeatures specularConstant specularExponent spreadMethod startOffset stdDeviation stitchTiles surfaceScale systemLanguage tableValues targetX targetY textLength viewBox viewTarget xChannelSelector yChannelSelector zoomAndPan".split(" "),Pl=function(t){for(var e={},n=t.length;n--;)e[t[n].toLowerCase()]=t[n];return e},Al=Pl(Sl.concat(Cl));var Vl=function(t){var e=t.toLowerCase();return Al[e]||e},zl=function(t,e){var n,a;if(n=e.indexOf(":"),-1===n||(a=e.substr(0,n),"xmlns"===a))t.name=t.element.namespace!==no.html?Vl(e):e;else if(e=e.substring(n+1),t.name=Vl(e),t.namespace=no[a.toLowerCase()],t.namespacePrefix=a,!t.namespace)throw'Unknown namespace ("'+a+'")'},Wl=Ln,Hl=Dn,Kl=Nn,Ql=Fn,$l={"accept-charset":"acceptCharset",accesskey:"accessKey",bgcolor:"bgColor","class":"className",codebase:"codeBase",colspan:"colSpan",contenteditable:"contentEditable",datetime:"dateTime",dirname:"dirName","for":"htmlFor","http-equiv":"httpEquiv",ismap:"isMap",maxlength:"maxLength",novalidate:"noValidate",pubdate:"pubDate",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",usemap:"useMap"},Yl=In,Jl=qn,Xl=Un,Zl=Gn,tf=Vn,ef=zn,nf=Wn,af=Hn,rf=Kn,of=Qn,sf=$n,uf=Yn,pf=Jn,cf=Xn,lf=Zn,ff=function(t){this.init(t)};ff.prototype={bubble:Gl,init:Hl,rebind:Kl,render:Ql,toString:Yl,unbind:Jl,update:lf};var df,hf=ff,mf=function(t,e){var n,a,r=[];for(n in e)"twoway"!==n&&"lazy"!==n&&e.hasOwnProperty(n)&&(a=new hf({element:t,name:n,value:e[n],root:t.root}),r[n]=a,"value"!==n&&r.push(a));return(a=r.value)&&r.push(a),r};"undefined"!=typeof document&&(df=co("div"));var vf=function(t,e){this.element=t,this.root=t.root,this.parentFragment=t.parentFragment,this.attributes=[],this.fragment=new rv({root:t.root,owner:this,template:[e]})};vf.prototype={bubble:function(){this.node&&this.update(),this.element.bubble()},rebind:function(t,e){this.fragment.rebind(t,e)},render:function(t){this.node=t,this.isSvg=t.namespaceURI===no.svg,this.update()},unbind:function(){this.fragment.unbind()},update:function(){var t,e,n=this;t=""+this.fragment,e=ta(t,this.isSvg),this.attributes.filter(function(t){return ea(e,t)}).forEach(function(t){n.node.removeAttribute(t.name)}),e.forEach(function(t){n.node.setAttribute(t.name,t.value)}),this.attributes=e},toString:function(){return""+this.fragment}};var gf=vf,bf=function(t,e){return e?e.map(function(e){return new gf(t,e)}):[]},yf=function(t){var e,n,a,r;if(this.element=t,this.root=t.root,this.attribute=t.attributes[this.name||"value"],e=this.attribute.interpolator,e.twowayBinding=this,n=e.keypath){if("}"===n.str.slice(-1))return v("Two-way binding does not work with expressions (`%s` on <%s>)",e.resolver.uniqueString,t.name,{ractive:this.root}),!1;if(n.isSpecial)return v("Two-way binding does not work with %s",e.resolver.ref,{ractive:this.root}),!1}else{var i=e.template.r?"'"+e.template.r+"' reference":"expression";m("The %s being used for two-way binding is ambiguous, and may cause unexpected results. Consider initialising your data to eliminate the ambiguity",i,{ractive:this.root}),e.resolver.forceResolution(),n=e.keypath}this.attribute.isTwoway=!0,this.keypath=n,a=this.root.viewmodel.get(n),void 0===a&&this.getInitialValue&&(a=this.getInitialValue(),void 0!==a&&this.root.viewmodel.set(n,a)),(r=na(t))&&(this.resetValue=a,r.formBindings.push(this))};yf.prototype={handleChange:function(){var t=this;bs.start(this.root),this.attribute.locked=!0,this.root.viewmodel.set(this.keypath,this.getValue()),bs.scheduleTask(function(){return t.attribute.locked=!1}),bs.end()},rebound:function(){var t,e,n;e=this.keypath,n=this.attribute.interpolator.keypath,e!==n&&(N(this.root._twowayBindings[e.str],this),this.keypath=n,t=this.root._twowayBindings[n.str]||(this.root._twowayBindings[n.str]=[]),t.push(this))},unbind:function(){}},yf.extend=function(t){var e,n=this;return e=function(t){yf.call(this,t),this.init&&this.init()},e.prototype=Eo(n.prototype),a(e.prototype,t),e.extend=yf.extend,e};var xf,_f=yf,wf=aa;xf=_f.extend({getInitialValue:function(){return""},getValue:function(){return this.element.node.value},render:function(){var t,e=this.element.node,n=!1;this.rendered=!0,t=this.root.lazy,this.element.lazy===!0?t=!0:this.element.lazy===!1?t=!1:u(this.element.lazy)?(t=!1,n=+this.element.lazy):u(t||"")&&(n=+t,t=!1,this.element.lazy=n),this.handler=n?ia:wf,e.addEventListener("change",wf,!1),t||(e.addEventListener("input",this.handler,!1),e.attachEvent&&e.addEventListener("keyup",this.handler,!1)),e.addEventListener("blur",ra,!1)},unrender:function(){var t=this.element.node;this.rendered=!1,t.removeEventListener("change",wf,!1),t.removeEventListener("input",this.handler,!1),t.removeEventListener("keyup",this.handler,!1),t.removeEventListener("blur",ra,!1)}});var kf=xf,Ef=kf.extend({getInitialValue:function(){return this.element.fragment?""+this.element.fragment:""},getValue:function(){return this.element.node.innerHTML}}),Sf=Ef,Cf=oa,Pf={},Af=_f.extend({name:"checked",init:function(){this.siblings=Cf(this.root._guid,"radio",this.element.getAttribute("name")),this.siblings.push(this)},render:function(){var t=this.element.node;t.addEventListener("change",wf,!1),t.attachEvent&&t.addEventListener("click",wf,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",wf,!1),t.removeEventListener("click",wf,!1)},handleChange:function(){bs.start(this.root),this.siblings.forEach(function(t){t.root.viewmodel.set(t.keypath,t.getValue())}),bs.end()},getValue:function(){return this.element.node.checked},unbind:function(){N(this.siblings,this)}}),Of=Af,Tf=_f.extend({name:"name",init:function(){this.siblings=Cf(this.root._guid,"radioname",this.keypath.str),this.siblings.push(this),this.radioName=!0},getInitialValue:function(){return this.element.getAttribute("checked")?this.element.getAttribute("value"):void 0},render:function(){var t=this.element.node;t.name="{{"+this.keypath.str+"}}",t.checked=this.root.viewmodel.get(this.keypath)==this.element.getAttribute("value"),t.addEventListener("change",wf,!1),t.attachEvent&&t.addEventListener("click",wf,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",wf,!1),t.removeEventListener("click",wf,!1)},getValue:function(){var t=this.element.node;return t._ractive?t._ractive.value:t.value},handleChange:function(){this.element.node.checked&&_f.prototype.handleChange.call(this)},rebound:function(t,e){var n;_f.prototype.rebound.call(this,t,e),(n=this.element.node)&&(n.name="{{"+this.keypath.str+"}}")},unbind:function(){N(this.siblings,this)}}),Mf=Tf,Rf=_f.extend({name:"name",getInitialValue:function(){return this.noInitialValue=!0,[]},init:function(){var t,e;this.checkboxName=!0,this.siblings=Cf(this.root._guid,"checkboxes",this.keypath.str),this.siblings.push(this),this.noInitialValue&&(this.siblings.noInitialValue=!0),this.siblings.noInitialValue&&this.element.getAttribute("checked")&&(t=this.root.viewmodel.get(this.keypath),e=this.element.getAttribute("value"),t.push(e))},unbind:function(){N(this.siblings,this)},render:function(){var t,e,n=this.element.node;t=this.root.viewmodel.get(this.keypath),e=this.element.getAttribute("value"),i(t)?this.isChecked=R(t,e):this.isChecked=t==e,n.name="{{"+this.keypath.str+"}}",n.checked=this.isChecked,n.addEventListener("change",wf,!1),n.attachEvent&&n.addEventListener("click",wf,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",wf,!1),t.removeEventListener("click",wf,!1)},changed:function(){var t=!!this.isChecked;return this.isChecked=this.element.node.checked,this.isChecked===t},handleChange:function(){this.isChecked=this.element.node.checked,_f.prototype.handleChange.call(this)},getValue:function(){return this.siblings.filter(sa).map(ua)}}),jf=Rf,Lf=_f.extend({name:"checked",render:function(){var t=this.element.node;t.addEventListener("change",wf,!1),t.attachEvent&&t.addEventListener("click",wf,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",wf,!1),t.removeEventListener("click",wf,!1)},getValue:function(){return this.element.node.checked}}),Df=Lf,Nf=_f.extend({getInitialValue:function(){var t,e,n,a,r=this.element.options;if(void 0===this.element.getAttribute("value")&&(e=t=r.length,t)){for(;e--;)if(r[e].getAttribute("selected")){n=r[e].getAttribute("value"),a=!0;break}if(!a)for(;++ee;e+=1)if(a=t[e],t[e].selected)return r=a._ractive?a._ractive.value:a.value},forceUpdate:function(){var t=this,e=this.getValue();void 0!==e&&(this.attribute.locked=!0,bs.scheduleTask(function(){return t.attribute.locked=!1}),this.root.viewmodel.set(this.keypath,e))}}),Ff=Nf,If=Ff.extend({getInitialValue:function(){return this.element.options.filter(function(t){return t.getAttribute("selected")}).map(function(t){return t.getAttribute("value")})},render:function(){var t;this.element.node.addEventListener("change",wf,!1),t=this.root.viewmodel.get(this.keypath),void 0===t&&this.handleChange()},unrender:function(){this.element.node.removeEventListener("change",wf,!1)},setValue:function(){throw Error("TODO not implemented yet")},getValue:function(){var t,e,n,a,r,i;for(t=[],e=this.element.node.options,a=e.length,n=0;a>n;n+=1)r=e[n],r.selected&&(i=r._ractive?r._ractive.value:r.value,t.push(i));return t},handleChange:function(){var t,e,n;return t=this.attribute,e=t.value,n=this.getValue(),void 0!==e&&j(n,e)||Ff.prototype.handleChange.call(this),this},forceUpdate:function(){var t=this,e=this.getValue();void 0!==e&&(this.attribute.locked=!0,bs.scheduleTask(function(){return t.attribute.locked=!1}),this.root.viewmodel.set(this.keypath,e))},updateModel:function(){void 0!==this.attribute.value&&this.attribute.value.length||this.root.viewmodel.set(this.keypath,this.initialValue)}}),Bf=If,qf=_f.extend({render:function(){this.element.node.addEventListener("change",wf,!1)},unrender:function(){this.element.node.removeEventListener("change",wf,!1)},getValue:function(){return this.element.node.files}}),Uf=qf,Gf=kf.extend({getInitialValue:function(){},getValue:function(){var t=parseFloat(this.element.node.value);return isNaN(t)?void 0:t}}),Vf=pa,zf=la,Wf=fa,Hf=da,Kf=ha,Qf=/^event(?:\.(.+))?/,$f=ba,Yf=ya,Jf={},Xf={touchstart:!0,touchmove:!0,touchend:!0,touchcancel:!0,touchleave:!0},Zf=_a,td=wa,ed=ka,nd=Ea,ad=Sa,rd=function(t,e,n){this.init(t,e,n)};rd.prototype={bubble:zf,fire:Wf,getAction:Hf,init:Kf,listen:Yf,rebind:Zf,render:td,resolve:ed,unbind:nd,unrender:ad};var id=rd,od=function(t,e){var n,a,r,i,o=[];for(a in e)if(e.hasOwnProperty(a))for(r=a.split("-"),n=r.length;n--;)i=new id(t,r[n],e[a]),o.push(i);return o},sd=function(t,e){var n,a,r,i=this;this.element=t,this.root=n=t.root,a=e.n||e,("string"==typeof a||(r=new rv({template:a,root:n,owner:t}),a=""+r,r.unbind(),""!==a))&&(e.a?this.params=e.a:e.d&&(this.fragment=new rv({template:e.d,root:n,owner:t}),this.params=this.fragment.getArgsList(),this.fragment.bubble=function(){this.dirtyArgs=this.dirtyValue=!0,i.params=this.getArgsList(),i.ready&&i.update()}),this.fn=g("decorators",n,a),this.fn||l(Io(a,"decorator")))};sd.prototype={init:function(){var t,e,n;if(t=this.element.node,this.params?(n=[t].concat(this.params),e=this.fn.apply(this.root,n)):e=this.fn.call(this.root,t),!e||!e.teardown)throw Error("Decorator definition must return an object with a teardown method");this.actual=e,this.ready=!0},update:function(){this.actual.update?this.actual.update.apply(this.root,this.params):(this.actual.teardown(!0),this.init())},rebind:function(t,e){this.fragment&&this.fragment.rebind(t,e)},teardown:function(t){this.torndown=!0,this.ready&&this.actual.teardown(),!t&&this.fragment&&this.fragment.unbind()}};var ud,pd,cd,ld=sd,fd=Ra,dd=ja,hd=Ba,md=function(t){return t.replace(/-([a-zA-Z])/g,function(t,e){return e.toUpperCase()})};Xi?(pd={},cd=co("div").style,ud=function(t){var e,n,a;if(t=md(t),!pd[t])if(void 0!==cd[t])pd[t]=t;else for(a=t.charAt(0).toUpperCase()+t.substring(1),e=ro.length;e--;)if(n=ro[e],void 0!==cd[n+a]){pd[t]=n+a;break}return pd[t]}):ud=null;var vd,gd,bd=ud;Xi?(gd=window.getComputedStyle||Po.getComputedStyle,vd=function(t){var e,n,a,r,o;if(e=gd(this.node),"string"==typeof t)return o=e[bd(t)],"0px"===o&&(o=0),o;if(!i(t))throw Error("Transition$getStyle must be passed a string, or an array of strings representing CSS properties");for(n={},a=t.length;a--;)r=t[a],o=e[bd(r)],"0px"===o&&(o=0),n[r]=o;return n}):vd=null;var yd=vd,xd=function(t,e){var n;if("string"==typeof t)this.node.style[bd(t)]=e;else for(n in t)t.hasOwnProperty(n)&&(this.node.style[bd(n)]=t[n]);return this},_d=function(t){var e;this.duration=t.duration,this.step=t.step,this.complete=t.complete,"string"==typeof t.easing?(e=t.root.easing[t.easing],e||(v(Io(t.easing,"easing")),e=qa)):e="function"==typeof t.easing?t.easing:qa,this.easing=e,this.start=ns(),this.end=this.start+this.duration,this.running=!0,_s.add(this)};_d.prototype={tick:function(t){var e,n;return this.running?t>this.end?(this.step&&this.step(1),this.complete&&this.complete(1),!1):(e=t-this.start,n=this.easing(e/this.duration),this.step&&this.step(n),!0):!1},stop:function(){this.abort&&this.abort(),this.running=!1}};var wd,kd,Ed,Sd,Cd,Pd,Ad,Od,Td=_d,Md=RegExp("^-(?:"+ro.join("|")+")-"),Rd=function(t){return t.replace(Md,"")},jd=RegExp("^(?:"+ro.join("|")+")([A-Z])"),Ld=function(t){var e;return t?(jd.test(t)&&(t="-"+t),e=t.replace(/[A-Z]/g,function(t){return"-"+t.toLowerCase()})):""},Dd={},Nd={};Xi?(kd=co("div").style,function(){void 0!==kd.transition?(Ed="transition",Sd="transitionend",Cd=!0):void 0!==kd.webkitTransition?(Ed="webkitTransition",Sd="webkitTransitionEnd",Cd=!0):Cd=!1}(),Ed&&(Pd=Ed+"Duration",Ad=Ed+"Property",Od=Ed+"TimingFunction"),wd=function(t,e,n,a,r){setTimeout(function(){var i,o,s,u,p;u=function(){o&&s&&(t.root.fire(t.name+":end",t.node,t.isIntro),r())},i=(t.node.namespaceURI||"")+t.node.tagName,t.node.style[Ad]=a.map(bd).map(Ld).join(","),t.node.style[Od]=Ld(n.easing||"linear"),t.node.style[Pd]=n.duration/1e3+"s",p=function(e){var n;n=a.indexOf(md(Rd(e.propertyName))),-1!==n&&a.splice(n,1),a.length||(t.node.removeEventListener(Sd,p,!1),s=!0,u())},t.node.addEventListener(Sd,p,!1),setTimeout(function(){for(var r,c,l,f,d,h=a.length,v=[];h--;)f=a[h],r=i+f,Cd&&!Nd[r]&&(t.node.style[bd(f)]=e[f],Dd[r]||(c=t.getStyle(f),Dd[r]=t.getStyle(f)!=e[f],Nd[r]=!Dd[r],Nd[r]&&(t.node.style[bd(f)]=c))),(!Cd||Nd[r])&&(void 0===c&&(c=t.getStyle(f)),l=a.indexOf(f),-1===l?m("Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!",{node:t.node}):a.splice(l,1),d=/[^\d]*$/.exec(e[f])[0],v.push({name:bd(f),interpolator:qo(parseFloat(c),parseFloat(e[f])),suffix:d}));v.length?new Td({root:t.root,duration:n.duration,easing:md(n.easing||""),step:function(e){var n,a;for(a=v.length;a--;)n=v[a],t.node.style[n.name]=n.interpolator(e)+n.suffix},complete:function(){o=!0,u()}}):o=!0,a.length||(t.node.removeEventListener(Sd,p,!1),s=!0,u())},0)},n.delay||0)}):wd=null;var Fd,Id,Bd,qd,Ud,Gd=wd;if("undefined"!=typeof document){if(Fd="hidden",Ud={},Fd in document)Bd="";else for(qd=ro.length;qd--;)Id=ro[qd],Fd=Id+"Hidden",Fd in document&&(Bd=Id);void 0!==Bd?(document.addEventListener(Bd+"visibilitychange",Ua),Ua()):("onfocusout"in document?(document.addEventListener("focusout",Ga),document.addEventListener("focusin",Va)):(window.addEventListener("pagehide",Ga),window.addEventListener("blur",Ga),window.addEventListener("pageshow",Va),window.addEventListener("focus",Va)),Ud.hidden=!1)}var Vd,zd,Wd,Hd=Ud;Xi?(zd=window.getComputedStyle||Po.getComputedStyle,Vd=function(t,e,n){var a,r=this;if(4===arguments.length)throw Error("t.animateStyle() returns a promise - use .then() instead of passing a callback");if(Hd.hidden)return this.setStyle(t,e),Wd||(Wd=ps.resolve());"string"==typeof t?(a={},a[t]=e):(a=t,n=e),n||(v('The "%s" transition does not supply an options object to `t.animateStyle()`. This will break in a future version of Ractive. For more info see https://github.com/RactiveJS/Ractive/issues/340',this.name),n=this);var i=new ps(function(t){var e,i,o,s,u,p,c;if(!n.duration)return r.setStyle(a),void t();for(e=Object.keys(a),i=[],o=zd(r.node),u={},p=e.length;p--;)c=e[p],s=o[bd(c)],"0px"===s&&(s=0),s!=a[c]&&(i.push(c),r.node.style[bd(c)]=s);return i.length?void Gd(r,a,n,i,t):void t()});return i}):Vd=null;var Kd=Vd,Qd=function(t,e){return"number"==typeof t?t={duration:t}:"string"==typeof t?t="slow"===t?{duration:600}:"fast"===t?{duration:200}:{duration:400}:t||(t={}),r({},t,e)},$d=za,Yd=function(t,e,n){this.init(t,e,n)};Yd.prototype={init:hd,start:$d,getStyle:yd,setStyle:xd,animateStyle:Kd,processParams:Qd};var Jd,Xd,Zd=Yd,th=Ha;Jd=function(){var t=this.node,e=this.fragment.toString(!1);if(window&&window.appearsToBeIELessEqual8&&(t.type="text/css"),t.styleSheet)t.styleSheet.cssText=e;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}},Xd=function(){this.node.type&&"text/javascript"!==this.node.type||m("Script tag was updated. This does not cause the code to be re-evaluated!",{ractive:this.root}),this.node.text=this.fragment.toString(!1)};var eh=function(){var t,e;return this.template.y?"":(t="<"+this.template.e,t+=this.attributes.map(Xa).join("")+this.conditionalAttributes.map(Xa).join(""),"option"===this.name&&Ya(this)&&(t+=" selected"),"input"===this.name&&Ja(this)&&(t+=" checked"),t+=">","textarea"===this.name&&void 0!==this.getAttribute("value")?t+=Ee(this.getAttribute("value")):void 0!==this.getAttribute("contenteditable")&&(t+=this.getAttribute("value")||""),this.fragment&&(e="script"!==this.name&&"style"!==this.name,t+=this.fragment.toString(e)),ic.test(this.template.e)||(t+=""),t)},nh=Za,ah=tr,rh=function(t){this.init(t)};rh.prototype={bubble:Tl,detach:Ml,find:Rl,findAll:jl,findAllComponents:Ll,findComponent:Dl,findNextNode:Nl,firstNode:Fl,getAttribute:Il,init:fd,rebind:dd,render:th,toString:eh,unbind:nh,unrender:ah};var ih=rh,oh=/^\s*$/,sh=/^\s*/,uh=function(t){var e,n,a,r;return e=t.split("\n"),n=e[0],void 0!==n&&oh.test(n)&&e.shift(),a=D(e),void 0!==a&&oh.test(a)&&e.pop(),r=e.reduce(nr,null),r&&(t=e.map(function(t){return t.replace(r,"")}).join("\n")),t},ph=ar,ch=function(t,e){var n;return e?n=t.split("\n").map(function(t,n){return n?e+t:t}).join("\n"):t},lh='Could not find template for partial "%s"',fh=function(t){var e,n;e=this.parentFragment=t.parentFragment,this.root=e.root,this.type=Ap,this.index=t.index,this.name=t.template.r,this.rendered=!1,this.fragment=this.fragmentToRender=this.fragmentToUnrender=null,Vc.init(this,t),this.keypath||((n=ph(this.root,this.name,e))?(xc.call(this),this.isNamed=!0,this.setTemplate(n)):v(lh,this.name))};fh.prototype={bubble:function(){this.parentFragment.bubble()},detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},firstNode:function(){return this.fragment.firstNode()},findNextNode:function(){return this.parentFragment.findNextNode(this)},getPartialName:function(){return this.isNamed&&this.name?this.name:void 0===this.value?this.name:this.value},getValue:function(){return this.fragment.getValue()},rebind:function(t,e){this.isNamed||Gc.call(this,t,e),this.fragment&&this.fragment.rebind(t,e)},render:function(){return this.docFrag=document.createDocumentFragment(),this.update(),this.rendered=!0,this.docFrag},resolve:Vc.resolve,setValue:function(t){var e;(void 0===t||t!==this.value)&&(void 0!==t&&(e=ph(this.root,""+t,this.parentFragment)),!e&&this.name&&(e=ph(this.root,this.name,this.parentFragment))&&(xc.call(this),this.isNamed=!0),e||v(lh,this.name,{ractive:this.root}),this.value=t,this.setTemplate(e||[]),this.bubble(),this.rendered&&bs.addView(this))},setTemplate:function(t){this.fragment&&(this.fragment.unbind(),this.rendered&&(this.fragmentToUnrender=this.fragment)),this.fragment=new rv({template:t,root:this.root,owner:this,pElement:this.parentFragment.pElement}),this.fragmentToRender=this.fragment},toString:function(t){var e,n,a,r;return e=this.fragment.toString(t),n=this.parentFragment.items[this.index-1],n&&n.type===kp?(a=n.text.split("\n").pop(),(r=/^\s+$/.exec(a))?ch(e,r[0]):e):e},unbind:function(){this.isNamed||xc.call(this),this.fragment&&this.fragment.unbind()},unrender:function(t){this.rendered&&(this.fragment&&this.fragment.unrender(t),this.rendered=!1)},update:function(){var t,e;this.fragmentToUnrender&&(this.fragmentToUnrender.unrender(!0),this.fragmentToUnrender=null),this.fragmentToRender&&(this.docFrag.appendChild(this.fragmentToRender.render()),this.fragmentToRender=null), + this.rendered&&(t=this.parentFragment.getNode(),e=this.parentFragment.findNextNode(this),t.insertBefore(this.docFrag,e))}};var dh,hh,mh,vh=fh,gh=ur,bh=pr,yh=new is("detach"),xh=cr,_h=lr,wh=fr,kh=dr,Eh=hr,Sh=mr,Ch=function(t,e,n,a){var r=t.root,i=t.keypath;a?r.viewmodel.smartUpdate(i,e,a):r.viewmodel.mark(i)},Ph=[],Ah=["pop","push","reverse","shift","sort","splice","unshift"];Ah.forEach(function(t){var e=function(){for(var e=arguments.length,n=Array(e),a=0;e>a;a++)n[a]=arguments[a];var r,i,o,s;for(r=bu(this,t,n),i=Array.prototype[t].apply(this,arguments),bs.start(),this._ractive.setting=!0,s=this._ractive.wrappers.length;s--;)o=this._ractive.wrappers[s],bs.addRactive(o.root),Ch(o,this,t,r);return bs.end(),this._ractive.setting=!1,i};So(Ph,t,{value:e})}),dh={},dh.__proto__?(hh=function(t){t.__proto__=Ph},mh=function(t){t.__proto__=Array.prototype}):(hh=function(t){var e,n;for(e=Ah.length;e--;)n=Ah[e],So(t,n,{value:Ph[n],configurable:!0})},mh=function(t){var e;for(e=Ah.length;e--;)delete t[Ah[e]]}),hh.unpatch=mh;var Oh,Th,Mh,Rh=hh;Oh={filter:function(t){return i(t)&&(!t._ractive||!t._ractive.setting)},wrap:function(t,e,n){return new Th(t,e,n)}},Th=function(t,e,n){this.root=t,this.value=e,this.keypath=E(n),e._ractive||(So(e,"_ractive",{value:{wrappers:[],instances:[],setting:!1},configurable:!0}),Rh(e)),e._ractive.instances[t._guid]||(e._ractive.instances[t._guid]=0,e._ractive.instances.push(t)),e._ractive.instances[t._guid]+=1,e._ractive.wrappers.push(this)},Th.prototype={get:function(){return this.value},teardown:function(){var t,e,n,a,r;if(t=this.value,e=t._ractive,n=e.wrappers,a=e.instances,e.setting)return!1;if(r=n.indexOf(this),-1===r)throw Error(Mh);if(n.splice(r,1),n.length){if(a[this.root._guid]-=1,!a[this.root._guid]){if(r=a.indexOf(this.root),-1===r)throw Error(Mh);a.splice(r,1)}}else delete t._ractive,Rh.unpatch(this.value)}},Mh="Something went wrong in a rather interesting way";var jh,Lh,Dh=Oh,Nh=/^\s*[0-9]+\s*$/,Fh=function(t){return Nh.test(t)?[]:{}};try{Object.defineProperty({},"test",{value:0}),jh={filter:function(t,e,n){var a,r;return e?(e=E(e),(a=n.viewmodel.wrapped[e.parent.str])&&!a.magic?!1:(r=n.viewmodel.get(e.parent),i(r)&&/^[0-9]+$/.test(e.lastKey)?!1:r&&("object"==typeof r||"function"==typeof r))):!1},wrap:function(t,e,n){return new Lh(t,e,n)}},Lh=function(t,e,n){var a,r,i;return n=E(n),this.magic=!0,this.ractive=t,this.keypath=n,this.value=e,this.prop=n.lastKey,a=n.parent,this.obj=a.isRoot?t.viewmodel.data:t.viewmodel.get(a),r=this.originalDescriptor=Object.getOwnPropertyDescriptor(this.obj,this.prop),r&&r.set&&(i=r.set._ractiveWrappers)?void(-1===i.indexOf(this)&&i.push(this)):void vr(this,e,r)},Lh.prototype={get:function(){return this.value},reset:function(t){return this.updating?void 0:(this.updating=!0,this.obj[this.prop]=t,bs.addRactive(this.ractive),this.ractive.viewmodel.mark(this.keypath,{keepExistingWrapper:!0}),this.updating=!1,!0)},set:function(t,e){this.updating||(this.obj[this.prop]||(this.updating=!0,this.obj[this.prop]=Fh(t),this.updating=!1),this.obj[this.prop][t]=e)},teardown:function(){var t,e,n,a,r;return this.updating?!1:(t=Object.getOwnPropertyDescriptor(this.obj,this.prop),e=t&&t.set,void(e&&(a=e._ractiveWrappers,r=a.indexOf(this),-1!==r&&a.splice(r,1),a.length||(n=this.obj[this.prop],Object.defineProperty(this.obj,this.prop,this.originalDescriptor||{writable:!0,enumerable:!0,configurable:!0}),this.obj[this.prop]=n))))}}}catch(Ao){jh=!1}var Ih,Bh,qh=jh;qh&&(Ih={filter:function(t,e,n){return qh.filter(t,e,n)&&Dh.filter(t)},wrap:function(t,e,n){return new Bh(t,e,n)}},Bh=function(t,e,n){this.value=e,this.magic=!0,this.magicWrapper=qh.wrap(t,e,n),this.arrayWrapper=Dh.wrap(t,e,n)},Bh.prototype={get:function(){return this.value},teardown:function(){this.arrayWrapper.teardown(),this.magicWrapper.teardown()},reset:function(t){return this.magicWrapper.reset(t)}});var Uh=Ih,Gh=gr,Vh={},zh=xr,Wh=_r,Hh=Er,Kh=Or,Qh=Tr,$h=function(t,e){this.computation=t,this.viewmodel=t.viewmodel,this.ref=e,this.root=this.viewmodel.ractive,this.parentFragment=this.root.component&&this.root.component.parentFragment};$h.prototype={resolve:function(t){this.computation.softDeps.push(t),this.computation.unresolvedDeps[t.str]=null,this.viewmodel.register(t,this.computation,"computed")}};var Yh=$h,Jh=function(t,e){this.key=t,this.getter=e.getter,this.setter=e.setter,this.hardDeps=e.deps||[],this.softDeps=[],this.unresolvedDeps={},this.depValues={},this._dirty=this._firstRun=!0};Jh.prototype={constructor:Jh,init:function(t){var e,n=this;this.viewmodel=t,this.bypass=!0,e=t.get(this.key),t.clearCache(this.key.str),this.bypass=!1,this.setter&&void 0!==e&&this.set(e),this.hardDeps&&this.hardDeps.forEach(function(e){return t.register(e,n,"computed")})},invalidate:function(){this._dirty=!0},get:function(){var t,e,n=this,a=!1;if(this.getting){var r="The "+this.key.str+" computation indirectly called itself. This probably indicates a bug in the computation. It is commonly caused by `array.sort(...)` - if that's the case, clone the array first with `array.slice().sort(...)`";return h(r),this.value}if(this.getting=!0,this._dirty){if(this._firstRun||!this.hardDeps.length&&!this.softDeps.length?a=!0:[this.hardDeps,this.softDeps].forEach(function(t){var e,r,i;if(!a)for(i=t.length;i--;)if(e=t[i],r=n.viewmodel.get(e),!s(r,n.depValues[e.str]))return n.depValues[e.str]=r,void(a=!0)}),a){this.viewmodel.capture();try{this.value=this.getter()}catch(i){m('Failed to compute "%s"',this.key.str),f(i.stack||i),this.value=void 0}t=this.viewmodel.release(),e=this.updateDependencies(t),e&&[this.hardDeps,this.softDeps].forEach(function(t){t.forEach(function(t){n.depValues[t.str]=n.viewmodel.get(t)})})}this._dirty=!1}return this.getting=this._firstRun=!1,this.value},set:function(t){if(this.setting)return void(this.value=t);if(!this.setter)throw Error("Computed properties without setters are read-only. (This may change in a future version of Ractive!)");this.setter(t)},updateDependencies:function(t){var e,n,a,r,i;for(n=this.softDeps,e=n.length;e--;)a=n[e],-1===t.indexOf(a)&&(r=!0,this.viewmodel.unregister(a,this,"computed"));for(e=t.length;e--;)a=t[e],-1!==n.indexOf(a)||this.hardDeps&&-1!==this.hardDeps.indexOf(a)||(r=!0,Mr(this.viewmodel,a)&&!this.unresolvedDeps[a.str]?(i=new Yh(this,a.str),t.splice(e,1),this.unresolvedDeps[a.str]=i,bs.addUnresolved(i)):this.viewmodel.register(a,this,"computed"));return r&&(this.softDeps=t.slice()),r}};var Xh=Jh,Zh=Rr,tm={FAILED_LOOKUP:!0},em=jr,nm={},am=Dr,rm=Nr,im=function(t,e){this.localKey=t,this.keypath=e.keypath,this.origin=e.origin,this.deps=[],this.unresolved=[],this.resolved=!1};im.prototype={forceResolution:function(){this.keypath=this.localKey,this.setup()},get:function(t,e){return this.resolved?this.origin.get(this.map(t),e):void 0},getValue:function(){return this.keypath?this.origin.get(this.keypath):void 0},initViewmodel:function(t){this.local=t,this.setup()},map:function(t){return void 0===typeof this.keypath?this.localKey:t.replace(this.localKey,this.keypath)},register:function(t,e,n){this.deps.push({keypath:t,dep:e,group:n}),this.resolved&&this.origin.register(this.map(t),e,n)},resolve:function(t){void 0!==this.keypath&&this.unbind(!0),this.keypath=t,this.setup()},set:function(t,e){this.resolved||this.forceResolution(),this.origin.set(this.map(t),e)},setup:function(){var t=this;void 0!==this.keypath&&(this.resolved=!0,this.deps.length&&(this.deps.forEach(function(e){var n=t.map(e.keypath);if(t.origin.register(n,e.dep,e.group),e.dep.setValue)e.dep.setValue(t.origin.get(n));else{if(!e.dep.invalidate)throw Error("An unexpected error occurred. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");e.dep.invalidate()}}),this.origin.mark(this.keypath)))},setValue:function(t){if(!this.keypath)throw Error("Mapping does not have keypath, cannot set value. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");this.origin.set(this.keypath,t)},unbind:function(t){var e=this;t||delete this.local.mappings[this.localKey],this.resolved&&(this.deps.forEach(function(t){e.origin.unregister(e.map(t.keypath),t.dep,t.group)}),this.tracker&&this.origin.unregister(this.keypath,this.tracker))},unregister:function(t,e,n){var a,r;if(this.resolved){for(a=this.deps,r=a.length;r--;)if(a[r].dep===e){a.splice(r,1);break}this.origin.unregister(this.map(t),e,n)}}};var om=Fr,sm=function(t,e){var n,a,r,i;return n={},a=0,r=t.map(function(t,r){var o,s,u;s=a,u=e.length;do{if(o=e.indexOf(t,s),-1===o)return i=!0,-1;s=o+1}while(n[o]&&u>s);return o===a&&(a+=1),o!==r&&(i=!0),n[o]=!0,o})},um=Ir,pm={},cm=Ur,lm=Vr,fm=zr,dm=Wr,hm=Kr,mm={implicit:!0},vm={noCascade:!0},gm=$r,bm=Yr,ym=function(t){var e,n,a=t.adapt,r=t.data,i=t.ractive,o=t.computed,s=t.mappings;this.ractive=i,this.adaptors=a,this.onchange=t.onchange,this.cache={},this.cacheMap=Eo(null),this.deps={computed:Eo(null),"default":Eo(null)},this.depsMap={computed:Eo(null),"default":Eo(null)},this.patternObservers=[],this.specials=Eo(null),this.wrapped=Eo(null),this.computations=Eo(null),this.captureGroups=[],this.unresolvedImplicitDependencies=[],this.changes=[],this.implicitChanges={},this.noCascade={},this.data=r,this.mappings=Eo(null);for(e in s)this.map(E(e),s[e]);if(r)for(e in r)(n=this.mappings[e])&&void 0===n.getValue()&&n.setValue(r[e]);for(e in o)s&&e in s&&l("Cannot map to a computed property ('%s')",e),this.compute(E(e),o[e]);this.ready=!0};ym.prototype={adapt:Gh,applyChanges:Hh,capture:Kh,clearCache:Qh,compute:Zh,get:em,init:am,map:rm,mark:om,merge:um,register:cm,release:lm,reset:fm,set:dm,smartUpdate:hm,teardown:gm,unregister:bm};var xm=ym;Xr.prototype={constructor:Xr,begin:function(t){this.inProcess[t._guid]=!0},end:function(t){var e=t.parent;e&&this.inProcess[e._guid]?Zr(this.queue,e).push(t):ti(this,t),delete this.inProcess[t._guid]}};var _m=Xr,wm=ei,km=/\$\{([^\}]+)\}/g,Em=new is("construct"),Sm=new is("config"),Cm=new _m("init"),Pm=0,Am=["adaptors","components","decorators","easing","events","interpolators","partials","transitions"],Om=ii,Tm=ci;ci.prototype={bubble:function(){this.dirty||(this.dirty=!0,bs.addView(this))},update:function(){this.callback(this.fragment.getValue()),this.dirty=!1},rebind:function(t,e){this.fragment.rebind(t,e)},unbind:function(){this.fragment.unbind()}};var Mm=function(t,e,n,r,o){var s,u,p,c,l,f,d={},h={},v={},g=[];for(u=t.parentFragment,p=t.root,o=o||{},a(d,o),o.content=r||[],d[""]=o.content,e.defaults.el&&m("The <%s/> component has a default `el` property; it has been disregarded",t.name),c=u;c;){if(c.owner.type===Rp){l=c.owner.container;break}c=c.parent}return n&&Object.keys(n).forEach(function(e){var a,r,o=n[e];if("string"==typeof o)a=fc(o),h[e]=a?a.value:o;else if(0===o)h[e]=!0;else{if(!i(o))throw Error("erm wut");fi(o)?(v[e]={origin:t.root.viewmodel,keypath:void 0},r=li(t,o[0],function(t){t.isSpecial?f?s.set(e,t.value):(h[e]=t.value,delete v[e]):f?s.viewmodel.mappings[e].resolve(t):v[e].keypath=t})):r=new Tm(t,o,function(t){f?s.set(e,t):h[e]=t}),g.push(r)}}),s=Eo(e.prototype),Om(s,{el:null,append:!0,data:h,partials:o,magic:p.magic||e.defaults.magic,modifyArrays:p.modifyArrays,adapt:p.adapt},{parent:p,component:t,container:l,mappings:v,inlinePartials:d,cssIds:u.cssIds}),f=!0,t.resolvers=g,s},Rm=di,jm=function(t){var e,n;for(e=t.root;e;)(n=e._liveComponentQueries["_"+t.name])&&n.push(t.instance),e=e.parent},Lm=mi,Dm=vi,Nm=gi,Fm=bi,Im=yi,Bm=new is("teardown"),qm=_i,Um=function(t,e){this.init(t,e)};Um.prototype={detach:bh,find:xh,findAll:_h,findAllComponents:wh,findComponent:kh,findNextNode:Eh,firstNode:Sh,init:Lm,rebind:Dm,render:Nm,toString:Fm,unbind:Im,unrender:qm};var Gm=Um,Vm=function(t){this.type=Op,this.value=t.template.c};Vm.prototype={detach:gc,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createComment(this.value)),this.node},toString:function(){return""},unrender:function(t){t&&this.node.parentNode.removeChild(this.node)}};var zm=Vm,Wm=function(t){var e,n;this.type=Rp,this.container=e=t.parentFragment.root,this.component=n=e.component,this.container=e,this.containerFragment=t.parentFragment,this.parentFragment=n.parentFragment;var a=this.name=t.template.n||"",r=e._inlinePartials[a];r||(m('Could not find template for partial "'+a+'"',{ractive:t.root}),r=[]),this.fragment=new rv({owner:this,root:e.parent,template:r,pElement:this.containerFragment.pElement}),i(n.yielders[a])?n.yielders[a].push(this):n.yielders[a]=[this],bs.scheduleTask(function(){if(n.yielders[a].length>1)throw Error("A component template can only have one {{yield"+(a?" "+a:"")+"}} declaration at a time")})};Wm.prototype={detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},findNextNode:function(){return this.containerFragment.findNextNode(this)},firstNode:function(){return this.fragment.firstNode()},getValue:function(t){return this.fragment.getValue(t)},render:function(){return this.fragment.render()},unbind:function(){this.fragment.unbind()},unrender:function(t){this.fragment.unrender(t),N(this.component.yielders[this.name],this)},rebind:function(t,e){this.fragment.rebind(t,e)},toString:function(){return""+this.fragment}};var Hm=Wm,Km=function(t){this.declaration=t.template.a};Km.prototype={init:ko,render:ko,unrender:ko,teardown:ko,toString:function(){return""}};var Qm=Km,$m=wi,Ym=Ei,Jm=Si,Xm=Ci,Zm=Oi,tv=Mi,ev=function(t){this.init(t)};ev.prototype={bubble:cp,detach:lp,find:fp,findAll:dp,findAllComponents:hp,findComponent:mp,findNextNode:vp,firstNode:gp,getArgsList:hc,getNode:mc,getValue:vc,init:$m,rebind:Ym,registerIndexRef:function(t){var e=this.registeredIndexRefs;-1===e.indexOf(t)&&e.push(t)},render:Jm,toString:Xm,unbind:Zm,unregisterIndexRef:function(t){var e=this.registeredIndexRefs;e.splice(e.indexOf(t),1)},unrender:tv};var nv,av,rv=ev,iv=Ri,ov=["template","partials","components","decorators","events"],sv=new is("reset"),uv=function(t,e){function n(e,a,r){r&&r.partials[t]||e.forEach(function(e){e.type===Ap&&e.getPartialName()===t&&a.push(e),e.fragment&&n(e.fragment.items,a,r),i(e.fragments)?n(e.fragments,a,r):i(e.items)?n(e.items,a,r):e.type===Mp&&e.instance&&n(e.instance.fragment.items,a,e.instance),e.type===Pp&&(i(e.attributes)&&n(e.attributes,a,r),i(e.conditionalAttributes)&&n(e.conditionalAttributes,a,r))})}var a,r=[];return n(this.fragment.items,r),this.partials[t]=e,a=bs.start(this,!0),r.forEach(function(e){e.value=void 0,e.setValue(t)}),bs.end(),a},pv=ji,cv=xu("reverse"),lv=Li,fv=xu("shift"),dv=xu("sort"),hv=xu("splice"),mv=Ni,vv=Fi,gv=new is("teardown"),bv=Bi,yv=qi,xv=Ui,_v=new is("unrender"),wv=xu("unshift"),kv=Gi,Ev=new is("update"),Sv=Vi,Cv={add:Zo,animate:Es,detach:Cs,find:As,findAll:Fs,findAllComponents:Is,findComponent:Bs,findContainer:qs,findParent:Us,fire:Ws,get:Hs,insert:Qs,merge:Ys,observe:lu,observeOnce:fu,off:mu,on:vu,once:gu,pop:_u,push:wu,render:Tu,reset:iv,resetPartial:uv,resetTemplate:pv,reverse:cv,set:lv,shift:fv,sort:dv,splice:hv,subtract:mv,teardown:vv,toggle:bv,toHTML:yv,toHtml:yv,unrender:xv,unshift:wv,update:kv,updateModel:Sv},Pv=function(t,e,n){return n||Wi(t,e)?function(){var n,a="_super"in this,r=this._super;return this._super=e,n=t.apply(this,arguments),a&&(this._super=r),n}:t},Av=Hi,Ov=Yi,Tv=function(t){var e,n,a={};return t&&(e=t._ractive)?(a.ractive=e.root,a.keypath=e.keypath.str,a.index={},(n=Oc(e.proxy.parentFragment))&&(a.index=Oc.resolve(n)),a):a};nv=function(t){return this instanceof nv?void Om(this,t):new nv(t)},av={DEBUG:{writable:!0,value:!0},DEBUG_PROMISES:{writable:!0,value:!0},extend:{value:Ov},getNodeInfo:{value:Tv},parse:{value:Hu},Promise:{value:ps},svg:{value:ao},magic:{value:eo},VERSION:{value:"0.7.3"},adaptors:{writable:!0,value:{}},components:{writable:!0,value:{}},decorators:{writable:!0,value:{}},easing:{writable:!0,value:uo},events:{writable:!0,value:{}},interpolators:{writable:!0,value:Go},partials:{writable:!0,value:{}},transitions:{writable:!0,value:{}}},Co(nv,av),nv.prototype=a(Cv,so),nv.prototype.constructor=nv,nv.defaults=nv.prototype;var Mv="function";if(typeof Date.now!==Mv||typeof String.prototype.trim!==Mv||typeof Object.keys!==Mv||typeof Array.prototype.indexOf!==Mv||typeof Array.prototype.forEach!==Mv||typeof Array.prototype.map!==Mv||typeof Array.prototype.filter!==Mv||"undefined"!=typeof window&&typeof window.addEventListener!==Mv)throw Error("It looks like you're attempting to use Ractive.js in an older browser. You'll need to use one of the 'legacy builds' in order to continue - see http://docs.ractivejs.org/latest/legacy-builds for more information.");var Rv=nv;return Rv})},{}],206:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.observe("value",function(e,n,a){var r=t.get(),i=r.min,o=r.max,s=Math.clamp(i,o,e);t.animate("percentage",Math.round((s-i)/(o-i)*100))})}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,305],t:7,e:"div",a:{"class":"bar"},f:[{p:[14,3,326],t:7,e:"div",a:{"class":["barFill ",{t:2,r:"state",p:[14,23,346]}],style:["width: ",{t:2,r:"percentage",p:[14,48,371]},"%"]}}," ",{p:[15,3,398],t:7,e:"span",a:{"class":"barText"},f:[{t:16,p:[15,25,420]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],207:[function(t,e,n){var a=t(205),r={exports:{}};!function(e){"use strict";var n=t(310),a=t(309);e.exports={computed:{clickable:function(){return!this.get("enabled")||this.get("state")&&"toggle"!=this.get("state")?!1:!0},enabled:function(){return this.get("config.status")===n.UI_INTERACTIVE?!0:!1},styles:function(){var t="";if(this.get("class")&&(t+=" "+this.get("class")),this.get("tooltip-side")&&(t=" tooltip-"+this.get("tooltip-side")),this.get("grid")&&(t+=" gridable"),this.get("enabled")){var e=this.get("state"),n=this.get("style");return e?"inactive "+e+" "+t:"active normal "+n+" "+t}return"inactive disabled "+t}},oninit:function(){var t=this;this.on("press",function(e){var n=t.get(),r=n.action,i=n.params;(0,a.act)(t.get("config.ref"),r,i),e.node.blur()})},data:{iconStackToHTML:function(t){var e="",n=t.split(",");if(n.length){e+='';for(var a=n,r=Array.isArray(a),i=0,a=r?a:a[Symbol.iterator]();;){var o;if(r){if(i>=a.length)break;o=a[i++]}else{if(i=a.next(),i.done)break;o=i.value}var s=o,u=/([\w\-]+)\s*(\dx)/g,p=u.exec(s),c=p[1],l=p[2];e+=''}}return e&&(e+=""),e}}}}(r),r.exports.template={v:3,t:[" ",{p:[70,1,2015],t:7,e:"span",a:{"class":["button ",{t:2,r:"styles",p:[70,21,2035]}],unselectable:"on","data-tooltip":[{t:2,r:"tooltip",p:[73,17,2120]}]},m:[{t:4,f:["tabindex='0'"],r:"clickable",p:[72,3,2071]}],v:{"mouseover-mousemove":"hover",mouseleave:"unhover","click-enter":{n:[{t:4,f:["press"],r:"clickable",p:[76,19,2213]}],d:[]}},f:[{t:4,f:[{p:[78,5,2261],t:7,e:"i",a:{"class":["fa fa-",{t:2,r:"icon",p:[78,21,2277]}]}}],n:50,r:"icon",p:[77,3,2243]}," ",{t:4,f:[{t:3,x:{r:["iconStackToHTML","icon_stack"],s:"_0(_1)"},p:[81,6,2331]}],n:50,r:"icon_stack",p:[80,3,2306]}," ",{t:16,p:[83,3,2379]}]}]},e.exports=a.extend(r.exports)},{205:205,309:309,310:310}],208:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"display"},f:[{t:4,f:[{p:[3,5,44],t:7,e:"header",f:[{p:[4,7,60],t:7,e:"h3",f:[{t:2,r:"title",p:[4,11,64]}]}," ",{t:4,f:[{p:[6,9,110],t:7,e:"div",a:{"class":"buttonRight"},f:[{t:16,n:"button",p:[6,34,135]}]}],n:50,r:"button",p:[5,7,86]}]}],n:50,r:"title",p:[2,3,25]}," ",{p:[10,3,202],t:7,e:"article",f:[{t:16,p:[11,5,217]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],209:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.on("clear",function(){t.set("value",""),t.find("input").focus()})}}}(r),r.exports.template={v:3,t:[" ",{p:[12,1,170],t:7,e:"input",a:{type:"text",value:[{t:2,r:"value",p:[12,27,196]}],placeholder:[{t:2,r:"placeholder",p:[12,51,220]}]}}," ",{p:[13,1,240],t:7,e:"ui-button",a:{icon:"refresh"},v:{press:"clear"}}]},e.exports=a.extend(r.exports)},{205:205}],210:[function(t,e,n){var a=t(205),r={exports:{}};!function(e){"use strict";e.exports={data:{graph:t(201),xaccessor:function(t){return t.x},yaccessor:function(t){return t.y}},computed:{size:function(){var t=this.get("points");return t[0].length},scale:function(){var t=this.get("points");return Math.max.apply(Math,Array.map(t,function(t){return Math.max.apply(Math,Array.map(t,function(t){return t.y}))}))},xaxis:function(){var t=this.get("xinc"),e=this.get("size");return Array.from(Array(e).keys()).filter(function(e){return e&&e%t==0})},yaxis:function(){var t=this.get("yinc"),e=this.get("scale");return Array.from(Array(t).keys()).map(function(t){return Math.round(e*(++t/100)*10)})}},oninit:function(){var t=this;this.on({enter:function(t){this.set("selected",t.index.count)},exit:function(t){this.set("selected")}}),window.addEventListener("resize",function(e){t.set("width",t.el.clientWidth)})},onrender:function(){this.set("width",this.el.clientWidth)}}}(r),r.exports.template={v:3,t:[" ",{p:[47,1,1269],t:7,e:"svg",a:{"class":"linegraph",width:"100%",height:[{t:2,x:{r:["height"],s:"_0+10"},p:[47,45,1313]}]},f:[{p:[48,3,1334],t:7,e:"g",a:{transform:"translate(0, 5)"},f:[{t:4,f:[{t:4,f:[{p:[51,9,1504],t:7,e:"line",a:{x1:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,19,1514]}],x2:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,38,1533]}],y1:"0",y2:[{t:2,r:"height",p:[51,64,1559]}],stroke:"darkgray"}}," ",{t:4,f:[{p:[53,11,1635],t:7,e:"text",a:{x:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[53,20,1644]}],y:[{t:2,x:{r:["height"],s:"_0-5"},p:[53,38,1662]}],"text-anchor":"middle",fill:"white"},f:[{t:2,x:{r:["size",".","xfactor"],s:"(_0-_1)*_2"},p:[53,88,1712]}," ",{t:2,r:"xunit",p:[53,113,1737]}]}],n:50,x:{r:["@index"],s:"_0%2==0"},p:[52,9,1600]}],n:52,r:"xaxis",p:[50,7,1479]}," ",{t:4,f:[{p:[57,9,1820],t:7,e:"line",a:{x1:"0",x2:[{t:2,r:"width",p:[57,26,1837]}],y1:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,41,1852]}],y2:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,60,1871]}],stroke:"darkgray"}}," ",{p:[58,9,1915],t:7,e:"text",a:{x:"0",y:[{t:2,x:{r:["yscale","."],s:"_0(_1)-5"},p:[58,24,1930]}],"text-anchor":"begin",fill:"white"},f:[{t:2,x:{r:[".","yfactor"],s:"_0*_1"},p:[58,76,1982]}," ",{t:2,r:"yunit",p:[58,92,1998]}]}],n:52,r:"yaxis",p:[56,7,1795]}," ",{t:4,f:[{p:[61,9,2071],t:7,e:"path",a:{d:[{t:2,x:{r:["area.path"],s:"_0.print()"},p:[61,18,2080]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[61,47,2109]}],opacity:"0.1"}}],n:52,i:"curve",r:"curves",p:[60,7,2039]}," ",{t:4,f:[{p:[64,9,2200],t:7,e:"path",a:{d:[{t:2,x:{r:["line.path"],s:"_0.print()"},p:[64,18,2209]}],stroke:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[64,49,2240]}],fill:"none"}}],n:52,i:"curve",r:"curves",p:[63,7,2168]}," ",{t:4,f:[{t:4,f:[{p:[68,11,2375],t:7,e:"circle",a:{transform:["translate(",{t:2,r:".",p:[68,40,2404]},")"],r:[{t:2,x:{r:["selected","count"],s:"_0==_1?10:4"},p:[68,51,2415]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[68,89,2453]}]},v:{mouseenter:"enter",mouseleave:"exit"}}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[67,9,2329]}],n:52,i:"curve",r:"curves",p:[66,7,2297]}," ",{t:4,f:[{t:4,f:[{t:4,f:[{p:[74,13,2678],t:7,e:"text",a:{transform:["translate(",{t:2,r:".",p:[74,40,2705]},") ",{t:2,x:{r:["count","size"],s:'_0<=_1/2?"translate(15, 4)":"translate(-15, 4)"'},p:[74,47,2712]}],"text-anchor":[{t:2,x:{r:["count","size"],s:'_0<=_1/2?"start":"end"'},p:[74,126,2791]}],fill:"white"},f:[{t:2,x:{r:["count","item","yfactor"],s:"_1[_0].y*_2"},p:[75,15,2861]}," ",{t:2,r:"yunit",p:[75,43,2889]}," @ ",{t:2,x:{r:["size","count","item","xfactor"],s:"(_0-_2[_1].x)*_3"},p:[75,55,2901]}," ",{t:2,r:"xunit",p:[75,92,2938]}]}],n:50,x:{r:["selected","count"],s:"_0==_1"},p:[73,11,2638]}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[72,9,2592]}],n:52,i:"curve",r:"curves",p:[71,7,2560]}," ",{t:4,f:[{p:[81,9,3063],t:7,e:"g",a:{transform:["translate(",{t:2,x:{r:["width","curves.length","@index"],s:"(_0/(_1+1))*(_2+1)"},p:[81,33,3087]},", 10)"]},f:[{p:[82,11,3154],t:7,e:"circle",a:{r:"4",fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[82,31,3174]}]}}," ",{p:[83,11,3206],t:7,e:"text",a:{x:"8",y:"4",fill:"white"},f:[{t:2,rx:{r:"legend",m:[{t:30,n:"curve"}]},p:[83,42,3237]}]}]}],n:52,i:"curve",r:"curves",p:[80,7,3031]}],x:{r:["graph","points","xaccessor","yaccessor","width","height"],s:"_0({data:_1,xaccessor:_2,yaccessor:_3,width:_4,height:_5})"},p:[49,5,1371]}]}]}]},e.exports=a.extend(r.exports)},{201:201,205:205}],211:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"notice"},f:[{t:16,p:[2,3,24]}]}]},e.exports=a.extend(r.exports)},{205:205}],212:[function(t,e,n){var a=t(205),r={exports:{}};!function(e){"use strict";var n=t(309),a=t(311);e.exports={oninit:function(){var t=this,e=a.resize.bind(this),r=function(){return t.set({resize:!1,x:null,y:null})};this.observe("config.fancy",function(a,i,o){(0,n.winset)(t.get("config.window"),"can-resize",!a),a?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",r)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r))}),this.on("resize",function(){return t.toggle("resize")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[28,3,766],t:7,e:"div",a:{"class":"resize"},v:{mousedown:"resize"}}],n:50,r:"config.fancy",p:[27,1,742]}]},e.exports=a.extend(r.exports)},{205:205,309:309,311:311}],213:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"section",a:{"class":[{t:4,f:["candystripe"],r:"candystripe",p:[1,17,16]}]},f:[{t:4,f:[{p:[3,5,84],t:7,e:"span",a:{"class":"label",style:[{t:4,f:["color:",{t:2,r:"labelcolor",p:[3,53,132]}],r:"labelcolor",p:[3,32,111]}]},f:[{t:2,r:"label",p:[3,84,163]},":"]}],n:50,r:"label",p:[2,3,65]}," ",{t:4,f:[{t:16,p:[6,5,215]}],n:50,r:"nowrap",p:[5,3,195]},{t:4,n:51,f:[{p:[8,5,242],t:7,e:"div",a:{"class":"content",style:[{t:4,f:["float:right;"],r:"right",p:[8,33,270]}]},f:[{t:16,p:[9,7,312]}]}],r:"nowrap"}]}]},e.exports=a.extend(r.exports)},{205:205}],214:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"subdisplay"},f:[{t:4,f:[{p:[3,5,47],t:7,e:"header",f:[{p:[4,7,63],t:7,e:"h4",f:[{t:2,r:"title",p:[4,11,67]}]}," ",{t:4,f:[{t:16,n:"button",p:[5,21,103]}],n:50,r:"button",p:[5,7,89]}]}],n:50,r:"title",p:[2,3,28]}," ",{p:[8,3,156],t:7,e:"article",f:[{t:16,p:[9,5,171]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],215:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.set("active",this.findComponent("tab").get("name")),this.on("switch",function(e){t.set("active",e.node.textContent.trim())}),this.observe("active",function(e,n,a){for(var r=t.findAllComponents("tab"),i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var u=s;u.set("shown",u.get("name")===e)}})}}}(r),r.exports.template={v:3,t:[" "," ",{p:[20,1,524],t:7,e:"header",f:[{t:4,f:[{p:[22,5,556],t:7,e:"ui-button",a:{pane:[{t:2,r:".",p:[22,22,573]}]},v:{press:"switch"},f:[{t:2,r:".",p:[22,47,598]}]}],n:52,r:"tabs",p:[21,3,536]}]}," ",{p:[25,1,641],t:7,e:"ui-display",f:[{t:8,r:"content",p:[26,3,657]}]}]},r.exports.components=r.exports.components||{};var i={tab:t(216)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,216:216}],216:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:16,p:[2,3,17]}],n:50,r:"shown",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{205:205}],217:[function(t,e,n){var a=t(205),r={exports:{}};!function(e){"use strict";var n=t(310),a=t(309),r=t(311);e.exports={computed:{visualStatus:function(){switch(this.get("config.status")){case n.UI_INTERACTIVE:return"good";case n.UI_UPDATE:return"average";case n.UI_DISABLED:return"bad";default:return"bad"}}},oninit:function(){var t=this,e=r.drag.bind(this),n=function(e){return t.set({drag:!1,x:null,y:null})};this.observe("config.fancy",function(r,i,o){(0,a.winset)(t.get("config.window"),"titlebar",!r&&t.get("config.titlebar")),r?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",n)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",n))}),this.on({drag:function(){this.toggle("drag")},close:function(){(0,a.winset)(this.get("config.window"),"is-visible",!1),window.location.href=(0,a.href)({command:"uiclose "+this.get("config.ref")},"winset")},minimize:function(){(0,a.winset)(this.get("config.window"),"is-minimized",!0)}})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[50,3,1440],t:7,e:"header",a:{"class":"titlebar"},v:{mousedown:"drag"},f:[{p:[51,5,1491],t:7,e:"i",a:{"class":["statusicon fa fa-eye fa-2x ",{t:2,r:"visualStatus",p:[51,42,1528]}]}}," ",{p:[52,5,1556],t:7,e:"span",a:{"class":"title"},f:[{t:16,p:[52,25,1576]}]}," ",{t:4,f:[{p:[54,7,1626],t:7,e:"i",a:{"class":"minimize fa fa-minus fa-2x"},v:{click:"minimize"}}," ",{p:[55,7,1696],t:7,e:"i",a:{"class":"close fa fa-close fa-2x"},v:{click:"close"}}],n:50,r:"config.fancy",p:[53,5,1598]}]}],n:50,r:"config.titlebar",p:[49,1,1413]}]},e.exports=a.extend(r.exports)},{205:205,309:309,310:310,311:311}],218:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";var e=[11,10,9,8];t.exports={data:{userAgent:navigator.userAgent},computed:{ie:function(){if(document.documentMode)return document.documentMode;for(var t in e){var n=document.createElement("div");if(n.innerHTML="",n.getElementsByTagName("span").length)return t}}},oninit:function(){var t=this;this.on("debug",function(){return t.toggle("debug")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[27,3,662],t:7,e:"ui-notice",f:[{p:[28,5,679],t:7,e:"span",f:["You have an old (IE",{t:2,r:"ie",p:[28,30,704]},"), end-of-life (click 'EOL Info' for more information) version of Internet Explorer installed."]},{p:[28,137,811],t:7,e:"br"}," ",{p:[29,5,822],t:7,e:"span",f:["To upgrade, click 'Upgrade IE' to download IE11 from Microsoft."]},{p:[29,81,898],t:7,e:"br"}," ",{p:[30,5,909],t:7,e:"span",f:["If you are unable to upgrade directly, click 'IE VMs' to download a VM with IE11 or Edge from Microsoft."]},{p:[30,122,1026],t:7,e:"br"}," ",{p:[31,5,1037],t:7,e:"span",f:["Otherwise, click 'No Frills' below to disable potentially incompatible features (and this message)."]}," ",{p:[32,5,1155],t:7,e:"hr"}," ",{p:[33,5,1166],t:7,e:"ui-button",a:{icon:"close",action:"tgui:nofrills"},f:["No Frills"]}," ",{p:[34,5,1240],t:7,e:"ui-button",a:{icon:"internet-explorer",action:"tgui:link",params:'{"url": "http://windows.microsoft.com/en-us/internet-explorer/download-ie"}'},f:["Upgrade IE"]}," ",{p:[36,5,1416],t:7,e:"ui-button",a:{icon:"edge",action:"tgui:link",params:'{"url": "https://dev.windows.com/en-us/microsoft-edge/tools/vms"}'},f:["IE VMs"]}," ",{p:[38,5,1565],t:7,e:"ui-button",a:{icon:"info",action:"tgui:link",params:'{"url": "https://support.microsoft.com/en-us/lifecycle#gp/Microsoft-Internet-Explorer"}'},f:["EOL Info"]}," ",{p:[40,5,1738],t:7,e:"ui-button",a:{icon:"bug"},v:{press:"debug"},f:["Debug Info"]}," ",{t:4,f:[{p:[42,7,1826],t:7,e:"hr"}," ",{p:[43,7,1839],t:7,e:"span",f:["Detected: IE",{t:2,r:"ie",p:[43,25,1857]}]},{p:[43,38,1870],t:7,e:"br"}," ",{p:[44,7,1883],t:7,e:"span",f:["User Agent: ",{t:2,r:"userAgent",p:[44,25,1901]}]}],n:50,r:"debug",p:[41,5,1805]}]}],n:50,x:{r:["config.fancy","ie"],s:"_0&&_1&&_1<11"},p:[26,1,621]}]},e.exports=a.extend(r.exports)},{205:205}],219:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," ",{p:[7,1,267],t:7,e:"ui-notice",f:[{t:4,f:[{p:[9,5,312],t:7,e:"ui-section",a:{ + label:"Interface Lock"},f:[{p:[10,7,355],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[10,24,372]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[10,75,423]}]}]}],n:50,r:"data.siliconUser",p:[8,3,282]},{t:4,n:51,f:[{p:[13,5,514],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,31,540]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[16,1,625],t:7,e:"status"}," ",{t:4,f:[{t:4,f:[{p:[19,7,719],t:7,e:"ui-display",a:{title:"Air Controls"},f:[{p:[20,9,762],t:7,e:"ui-section",f:[{p:[21,11,786],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"exclamation-triangle":"exclamation"'},p:[21,28,803]}],style:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"caution":null'},p:[21,98,873]}],action:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"reset":"alarm"'},p:[22,23,937]}]},f:["Area Atmosphere Alarm"]}]}," ",{p:[24,9,1045],t:7,e:"ui-section",f:[{p:[25,11,1069],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0==3?"exclamation-triangle":"exclamation"'},p:[25,28,1086]}],style:[{t:2,x:{r:["data.mode"],s:'_0==3?"danger":null'},p:[25,96,1154]}],action:"mode",params:['{"mode": ',{t:2,x:{r:["data.mode"],s:"_0==3?1:3"},p:[26,44,1236]},"}"]},f:["Panic Siphon"]}]}," ",{p:[28,9,1322],t:7,e:"br"}," ",{p:[29,9,1337],t:7,e:"ui-section",f:[{p:[30,11,1361],t:7,e:"ui-button",a:{icon:"sign-out",action:"tgui:view",params:'{"screen": "vents"}'},f:["Vent Controls"]}]}," ",{p:[32,9,1494],t:7,e:"ui-section",f:[{p:[33,11,1518],t:7,e:"ui-button",a:{icon:"filter",action:"tgui:view",params:'{"screen": "scrubbers"}'},f:["Scrubber Controls"]}]}," ",{p:[35,9,1657],t:7,e:"ui-section",f:[{p:[36,11,1681],t:7,e:"ui-button",a:{icon:"cog",action:"tgui:view",params:'{"screen": "modes"}'},f:["Operating Mode"]}]}," ",{p:[38,9,1810],t:7,e:"ui-section",f:[{p:[39,11,1834],t:7,e:"ui-button",a:{icon:"bar-chart",action:"tgui:view",params:'{"screen": "thresholds"}'},f:["Alarm Thresholds"]}]}]}],n:50,x:{r:["config.screen"],s:'_0=="home"'},p:[18,3,680]},{t:4,n:51,f:[{t:4,n:50,x:{r:["config.screen"],s:'_0=="vents"'},f:[{p:[43,5,2032],t:7,e:"vents"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&(_0=="scrubbers")'},f:[" ",{p:[45,5,2089],t:7,e:"scrubbers"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&(_0=="modes"))'},f:[" ",{p:[47,5,2146],t:7,e:"modes"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&((!(_0=="modes"))&&(_0=="thresholds")))'},f:[" ",{p:[49,5,2204],t:7,e:"thresholds"}]}],x:{r:["config.screen"],s:'_0=="home"'}}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[17,1,636]}]},r.exports.components=r.exports.components||{};var i={vents:t(225),modes:t(221),thresholds:t(224),status:t(223),scrubbers:t(222)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,221:221,222:222,223:223,224:224,225:225}],220:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-button",a:{icon:"arrow-left",action:"tgui:view",params:'{"screen": "home"}'},f:["Back"]}]},e.exports=a.extend(r.exports)},{205:205}],221:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,115],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Operating Modes",button:0},f:[" ",{t:4,f:[{p:[8,5,168],t:7,e:"ui-section",f:[{p:[9,7,188],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["selected"],s:'_0?"check-square-o":"square-o"'},p:[9,24,205]}],state:[{t:2,x:{r:["selected","danger"],s:'_0?_1?"danger":"selected":null'},p:[10,16,267]}],action:"mode",params:['{"mode": ',{t:2,r:"mode",p:[11,40,361]},"}"]},f:[{t:2,r:"name",p:[11,51,372]}]}]}],n:52,r:"data.modes",p:[7,3,142]}]}]},r.exports.components=r.exports.components||{};var i={back:t(220)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,220:220}],222:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,117],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Scrubber Controls",button:0},f:[" ",{t:4,f:[{p:[8,5,174],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[8,27,196]}]},f:[{p:[9,7,219],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[10,9,255],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[10,26,272]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[10,68,314]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[11,46,391]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[11,66,411]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[11,80,425]}]}]}," ",{p:[13,7,490],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[14,9,525],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["scrubbing"],s:'_0?"filter":"sign-in"'},p:[14,26,542]}],style:[{t:2,x:{r:["scrubbing"],s:'_0?null:"danger"'},p:[14,71,587]}],action:"scrubbing",params:['{"id_tag": "',{t:2,r:"id_tag",p:[15,50,670]},'", "val": ',{t:2,x:{r:["scrubbing"],s:"+!_0"},p:[15,70,690]},"}"]},f:[{t:2,x:{r:["scrubbing"],s:'_0?"Scrubbing":"Siphoning"'},p:[15,88,708]}]}]}," ",{p:[17,7,790],t:7,e:"ui-section",a:{label:"Range"},f:[{p:[18,9,826],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["widenet"],s:'_0?"expand":"compress"'},p:[18,26,843]}],style:[{t:2,x:{r:["widenet"],s:'_0?"selected":null'},p:[18,70,887]}],action:"widenet",params:['{"id_tag": "',{t:2,r:"id_tag",p:[19,48,968]},'", "val": ',{t:2,x:{r:["widenet"],s:"+!_0"},p:[19,68,988]},"}"]},f:[{t:2,x:{r:["widenet"],s:'_0?"Expanded":"Normal"'},p:[19,84,1004]}]}]}," ",{p:[21,7,1080],t:7,e:"ui-section",a:{label:"Filters"},f:[{p:[22,9,1118],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["filter_co2"],s:'_0?"check-square-o":"square-o"'},p:[22,26,1135]}],style:[{t:2,x:{r:["filter_co2"],s:'_0?"selected":null'},p:[22,81,1190]}],action:"co2_scrub",params:['{"id_tag": "',{t:2,r:"id_tag",p:[23,50,1276]},'", "val": ',{t:2,x:{r:["filter_co2"],s:"+!_0"},p:[23,70,1296]},"}"]},f:["CO2"]}," ",{p:[24,9,1340],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["filter_n2o"],s:'_0?"check-square-o":"square-o"'},p:[24,26,1357]}],style:[{t:2,x:{r:["filter_n2o"],s:'_0?"selected":null'},p:[24,81,1412]}],action:"n2o_scrub",params:['{"id_tag": "',{t:2,r:"id_tag",p:[25,50,1498]},'", "val": ',{t:2,x:{r:["filter_n2o"],s:"+!_0"},p:[25,70,1518]},"}"]},f:["N2O"]}," ",{p:[26,9,1562],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["filter_toxins"],s:'_0?"check-square-o":"square-o"'},p:[26,26,1579]}],style:[{t:2,x:{r:["filter_toxins"],s:'_0?"selected":null'},p:[26,84,1637]}],action:"tox_scrub",params:['{"id_tag": "',{t:2,r:"id_tag",p:[27,50,1726]},'", "val": ',{t:2,x:{r:["filter_toxins"],s:"+!_0"},p:[27,70,1746]},"}"]},f:["Plasma"]}," ",{p:[28,3,1790],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["filter_bz"],s:'_0?"check-square-o":"square-o"'},p:[28,20,1807]}],style:[{t:2,x:{r:["filter_bz"],s:'_0?"selected":null'},p:[28,74,1861]}],action:"bz_scrub",params:['{"id_tag": "',{t:2,r:"id_tag",p:[29,43,1939]},'", "val": ',{t:2,x:{r:["filter_bz"],s:"+!_0"},p:[29,63,1959]},"}"]},f:["BZ"]}," ",{p:[30,3,1995],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["filter_freon"],s:'_0?"check-square-o":"square-o"'},p:[30,20,2012]}],style:[{t:2,x:{r:["filter_freon"],s:'_0?"selected":null'},p:[30,77,2069]}],action:"freon_scrub",params:['{"id_tag": "',{t:2,r:"id_tag",p:[31,46,2153]},'", "val": ',{t:2,x:{r:["filter_freon"],s:"+!_0"},p:[31,66,2173]},"}"]},f:["Freon"]}," ",{p:[32,3,2215],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["filter_water_vapor"],s:'_0?"check-square-o":"square-o"'},p:[32,20,2232]}],style:[{t:2,x:{r:["filter_water_vapor"],s:'_0?"selected":null'},p:[32,83,2295]}],action:"water_vapor_scrub",params:['{"id_tag": "',{t:2,r:"id_tag",p:[33,52,2391]},'", "val": ',{t:2,x:{r:["filter_water_vapor"],s:"+!_0"},p:[33,72,2411]},"}"]},f:["Water Vapor"]}]}]}],n:52,r:"data.scrubbers",p:[7,3,144]},{t:4,n:51,f:[{p:[37,5,2522],t:7,e:"span",a:{"class":"bad"},f:["Error: No scrubbers connected."]}],r:"data.scrubbers"}]}]},r.exports.components=r.exports.components||{};var i={back:t(220)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,220:220}],223:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Air Status"},f:[{t:4,f:[{t:4,f:[{p:[4,7,110],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[4,26,129]}]},f:[{p:[5,6,146],t:7,e:"span",a:{"class":[{t:2,x:{r:["danger_level"],s:'_0==2?"bad":_0==1?"average":"good"'},p:[5,19,159]}]},f:[{t:2,x:{r:["value"],s:"Math.fixed(_0,2)"},p:[6,5,237]},{t:2,r:"unit",p:[6,29,261]}]}]}],n:52,r:"adata.environment_data",p:[3,5,70]}," ",{p:[10,5,322],t:7,e:"ui-section",a:{label:"Local Status"},f:[{p:[11,7,363],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.danger_level"],s:'_0==2?"bad bold":_0==1?"average bold":"good"'},p:[11,20,376]}]},f:[{t:2,x:{r:["data.danger_level"],s:'_0==2?"Danger (Internals Required)":_0==1?"Caution":"Optimal"'},p:[12,6,475]}]}]}," ",{p:[15,5,619],t:7,e:"ui-section",a:{label:"Area Status"},f:[{p:[16,7,659],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.atmos_alarm","data.fire_alarm"],s:'_0||_1?"bad bold":"good"'},p:[16,20,672]}]},f:[{t:2,x:{r:["data.atmos_alarm","fire_alarm"],s:'_0?"Atmosphere Alarm":_1?"Fire Alarm":"Nominal"'},p:[17,8,744]}]}]}],n:50,r:"data.environment_data",p:[2,3,35]},{t:4,n:51,f:[{p:[21,5,876],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[22,7,912],t:7,e:"span",a:{"class":"bad bold"},f:["Cannot obtain air sample for analysis."]}]}],r:"data.environment_data"}," ",{t:4,f:[{p:[26,5,1040],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[27,7,1076],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[25,3,1014]}]}]},e.exports=a.extend(r.exports)},{205:205}],224:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.css=" th, td {\r\n padding-right: 16px;\r\n text-align: left;\r\n }",r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,116],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Alarm Thresholds",button:0},f:[" ",{p:[7,3,143],t:7,e:"table",f:[{p:[8,5,156],t:7,e:"thead",f:[{p:[8,12,163],t:7,e:"tr",f:[{p:[9,7,175],t:7,e:"th"}," ",{p:[10,7,192],t:7,e:"th",f:[{p:[10,11,196],t:7,e:"span",a:{"class":"bad"},f:["min2"]}]}," ",{p:[11,7,238],t:7,e:"th",f:[{p:[11,11,242],t:7,e:"span",a:{"class":"average"},f:["min1"]}]}," ",{p:[12,7,288],t:7,e:"th",f:[{p:[12,11,292],t:7,e:"span",a:{"class":"average"},f:["max1"]}]}," ",{p:[13,7,338],t:7,e:"th",f:[{p:[13,11,342],t:7,e:"span",a:{"class":"bad"},f:["max2"]}]}]}]}," ",{p:[15,5,401],t:7,e:"tbody",f:[{t:4,f:[{p:[16,32,441],t:7,e:"tr",f:[{p:[17,9,455],t:7,e:"th",f:[{t:3,r:"name",p:[17,13,459]}]}," ",{t:4,f:[{p:[18,27,502],t:7,e:"td",f:[{p:[19,11,518],t:7,e:"ui-button",a:{action:"threshold",params:['{"env": "',{t:2,r:"env",p:[19,58,565]},'", "var": "',{t:2,r:"val",p:[19,76,583]},'"}']},f:[{t:2,x:{r:["selected"],s:"Math.fixed(_0,2)"},p:[19,87,594]}]}]}],n:52,r:"settings",p:[18,9,484]}]}],n:52,r:"data.thresholds",p:[16,7,416]}]}," ",{p:[23,3,697],t:7,e:"table",f:[]}]}]}," "]},r.exports.components=r.exports.components||{};var i={back:t(220)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,220:220}],225:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,113],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Vent Controls",button:0},f:[" ",{t:4,f:[{p:[8,5,166],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[8,27,188]}]},f:[{p:[9,7,211],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[10,9,247],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[10,26,264]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[10,68,306]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[11,46,383]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[11,66,403]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[11,80,417]}]}]}," ",{p:[13,7,482],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[14,9,517],t:7,e:"span",f:[{t:2,x:{r:["direction"],s:'_0=="release"?"Pressurizing":"Siphoning"'},p:[14,15,523]}]}]}," ",{p:[16,7,616],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[17,9,665],t:7,e:"ui-button",a:{icon:"sign-in",style:[{t:2,x:{r:["incheck"],s:'_0?"selected":null'},p:[17,42,698]}],action:"incheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[18,48,779]},'", "val": ',{t:2,r:"checks",p:[18,68,799]},"}"]},f:["Internal"]}," ",{p:[19,9,842],t:7,e:"ui-button",a:{icon:"sign-out",style:[{t:2,x:{r:["excheck"],s:'_0?"selected":null'},p:[19,43,876]}],action:"excheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,957]},'", "val": ',{t:2,r:"checks",p:[20,68,977]},"}"]},f:["External"]}]}," ",{p:[22,7,1039],t:7,e:"ui-section",a:{label:"Target Pressure"},f:[{p:[23,9,1085],t:7,e:"ui-button",a:{icon:"pencil",action:"set_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[24,31,1172]},'"}']},f:[{t:2,x:{r:["external"],s:"Math.fixed(_0)"},p:[24,45,1186]}]}," ",{p:[25,9,1232],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["extdefault"],s:'_0?"disabled":null'},p:[25,42,1265]}],action:"reset_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[26,31,1365]},'"}']},f:["Reset"]}]}]}],n:52,r:"data.vents",p:[7,3,140]},{t:4,n:51,f:[{p:[30,5,1457],t:7,e:"span",a:{"class":"bad"},f:["Error: No vents connected."]}],r:"data.vents"}]}]},r.exports.components=r.exports.components||{};var i={back:t(220)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,220:220}],226:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.css=" table {\r\n width: 100%;\r\n border-spacing: 2px;\r\n }\r\n th {\r\n text-align: left;\r\n }\r\n td {\r\n vertical-align: top;\r\n }\r\n td .button {\r\n margin-top: 4px\r\n }",r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",f:[{p:[3,5,34],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oneAccess"],s:'_0?"unlock":"lock"'},p:[3,22,51]}],action:"one_access"},f:[{t:2,x:{r:["data.oneAccess"],s:'_0?"One":"All"'},p:[3,82,111]}," Required"]}," ",{p:[4,5,172],t:7,e:"ui-button",a:{icon:"refresh",action:"clear"},f:["Clear"]}]}," ",{p:[6,3,251],t:7,e:"hr"}," ",{p:[7,3,260],t:7,e:"table",f:[{p:[8,3,271],t:7,e:"thead",f:[{p:[9,4,283],t:7,e:"tr",f:[{t:4,f:[{p:[10,5,315],t:7,e:"th",f:[{p:[10,9,319],t:7,e:"span",a:{"class":"highlight bold"},f:[{t:2,r:"name",p:[10,38,348]}]}]}],n:52,r:"data.regions",p:[9,8,287]}]}]}," ",{p:[13,3,403],t:7,e:"tbody",f:[{p:[14,4,415],t:7,e:"tr",f:[{t:4,f:[{p:[15,5,447],t:7,e:"td",f:[{t:4,f:[{p:[16,11,481],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["req"],s:'_0?"check-square-o":"square-o"'},p:[16,28,498]}],style:[{t:2,x:{r:["req"],s:'_0?"selected":null'},p:[16,76,546]}],action:"set",params:['{"access": "',{t:2,r:"id",p:[17,46,621]},'"}']},f:[{t:2,r:"name",p:[17,56,631]}]}," ",{p:[18,9,661],t:7,e:"br"}],n:52,r:"accesses",p:[15,9,451]}]}],n:52,r:"data.regions",p:[14,8,419]}]}]}]}]}," "]},e.exports=a.extend(r.exports)},{205:205}],227:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}}},computed:{malfAction:function(){switch(this.get("data.malfStatus")){case 1:return"hack";case 2:return"occupy";case 3:return"deoccupy"}},malfButton:function(){switch(this.get("data.malfStatus")){case 1:return"Override Programming";case 2:case 4:return"Shunt Core Process";case 3:return"Return to Main Core"}},malfIcon:function(){switch(this.get("data.malfStatus")){case 1:return"terminal";case 2:case 4:return"caret-square-o-down";case 3:return"caret-square-o-left"}},powerCellStatusState:function(){var t=this.get("data.powerCellStatus");return t>50?"good":t>25?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[46,2,1206],t:7,e:"ui-notice",f:[{p:[47,3,1221],t:7,e:"b",f:[{p:[47,6,1224],t:7,e:"h3",f:["SYSTEM FAILURE"]}]}," ",{p:[48,3,1255],t:7,e:"i",f:["I/O regulators malfunction detected! Waiting for system reboot..."]},{p:[48,75,1327],t:7,e:"br"}," Automatic reboot in ",{t:2,r:"data.failTime",p:[49,23,1355]}," seconds... ",{p:[50,3,1387],t:7,e:"ui-button",a:{icon:"refresh",action:"reboot"},f:["Reboot Now"]},{p:[50,67,1451],t:7,e:"br"},{p:[50,71,1455],t:7,e:"br"},{p:[50,75,1459],t:7,e:"br"}]}],n:50,r:"data.failTime",p:[45,1,1182]},{t:4,n:51,f:[{p:[53,2,1491],t:7,e:"ui-notice",f:[{t:4,f:[{p:[55,3,1535],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[56,5,1576],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[56,22,1593]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[56,73,1644]}]}]}],n:50,r:"data.siliconUser",p:[54,4,1507]},{t:4,n:51,f:[{p:[59,3,1732],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[59,29,1758]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[62,2,1846],t:7,e:"ui-display",a:{title:"Power Status"},f:[{p:[63,4,1884],t:7,e:"ui-section",a:{label:"Main Breaker"},f:[{t:4,f:[{p:[65,5,1967],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isOperating"],s:'_0?"good":"bad"'},p:[65,18,1980]}]},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[65,57,2019]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[64,3,1921]},{t:4,n:51,f:[{p:[67,5,2079],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[67,22,2096]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[67,75,2149]}],action:"breaker"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[68,21,2212]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}," ",{p:[71,4,2293],t:7,e:"ui-section",a:{label:"External Power"},f:[{p:[72,3,2332],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.externalPower"],s:"_0(_1)"},p:[72,16,2345]}]},f:[{t:2,x:{r:["data.externalPower"],s:'_0==2?"Good":_0==1?"Low":"None"'},p:[72,52,2381]}]}]}," ",{p:[74,4,2490],t:7,e:"ui-section",a:{label:"Power Cell"},f:[{t:4,f:[{p:[76,5,2567],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerCellStatus",p:[76,38,2600]}],state:[{t:2,r:"powerCellStatusState",p:[76,71,2633]}]},f:[{t:2,x:{r:["adata.powerCellStatus"],s:"Math.fixed(_0)"},p:[76,97,2659]},"%"]}],n:50,x:{r:["data.powerCellStatus"],s:"_0!=null"},p:[75,3,2525]},{t:4,n:51,f:[{p:[78,5,2724],t:7,e:"span",a:{"class":"bad"},f:["Removed"]}],x:{r:["data.powerCellStatus"],s:"_0!=null"}}]}," ",{t:4,f:[{p:[82,3,2830],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{t:4,f:[{p:[84,4,2913],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.chargeMode"],s:'_0?"good":"bad"'},p:[84,17,2926]}]},f:[{t:2,x:{r:["data.chargeMode"],s:'_0?"Auto":"Off"'},p:[84,55,2964]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[83,5,2868]},{t:4,n:51,f:[{p:[86,4,3026],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.chargeMode"],s:'_0?"refresh":"close"'},p:[86,21,3043]}],style:[{t:2,x:{r:["data.chargeMode"],s:'_0?"selected":null'},p:[86,71,3093]}],action:"charge"},f:[{t:2,x:{r:["data.chargeMode"],s:'_0?"Auto":"Off"'},p:[87,22,3156]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}," [",{p:[90,6,3236],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.chargingStatus"],s:"_0(_1)"},p:[90,19,3249]}]},f:[{t:2,x:{r:["data.chargingStatus"],s:'_0==2?"Fully Charged":_0==1?"Charging":"Not Charging"'},p:[90,56,3286]}]},"]"]}],n:50,x:{r:["data.powerCellStatus"],s:"_0!=null"},p:[81,4,2790]}]}," ",{p:[94,2,3445],t:7,e:"ui-display",a:{title:"Power Channels"},f:[{t:4,f:[{p:[96,3,3517],t:7,e:"ui-section",a:{label:[{t:2,r:"title",p:[96,22,3536]}],nowrap:0},f:[{p:[97,5,3560],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.powerChannels"],s:"Math.round(_1[_0].powerLoad)"},p:[97,26,3581]}," W"]}," ",{p:[98,5,3648],t:7,e:"div",a:{"class":"content"},f:[{p:[98,26,3669],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0>=2?"good":"bad"'},p:[98,39,3682]}]},f:[{t:2,x:{r:["status"],s:'_0>=2?"On":"Off"'},p:[98,73,3716]}]}]}," ",{p:[99,5,3765],t:7,e:"div",a:{"class":"content"},f:["[",{p:[99,27,3787],t:7,e:"span",f:[{t:2,x:{r:["status"],s:'_0==1||_0==3?"Auto":"Manual"'},p:[99,33,3793]}]},"]"]}," ",{p:[100,5,3863],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{t:4,f:[{p:[102,6,3956],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["status"],s:'_0==1||_0==3?"selected":null'},p:[102,39,3989]}],action:"channel",params:[{t:2,r:"topicParams.auto",p:[103,30,4071]}]},f:["Auto"]}," ",{p:[104,6,4116],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["status"],s:'_0==2?"selected":null'},p:[104,41,4151]}],action:"channel",params:[{t:2,r:"topicParams.on",p:[105,13,4218]}]},f:["On"]}," ",{p:[106,6,4259],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["status"],s:'_0==0?"selected":null'},p:[106,37,4290]}],action:"channel",params:[{t:2,r:"topicParams.off",p:[107,13,4357]}]},f:["Off"]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[101,4,3909]}]}]}],n:52,r:"data.powerChannels",p:[95,4,3485]}," ",{p:[112,4,4453],t:7,e:"ui-section",a:{label:"Total Load"},f:[{p:[113,3,4488],t:7,e:"span",a:{"class":"bold"},f:[{t:2,x:{r:["adata.totalLoad"],s:"Math.round(_0)"},p:[113,22,4507]}," W"]}]}]}," ",{t:4,f:[{p:[117,4,4613],t:7,e:"ui-display",a:{title:"System Overrides"},f:[{p:[118,3,4654],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"overload"},f:["Overload"]}," ",{t:4,f:[{p:[120,5,4755],t:7,e:"ui-button",a:{icon:[{t:2,r:"malfIcon",p:[120,22,4772]}],state:[{t:2,x:{r:["data.malfStatus"],s:'_0==4?"disabled":null'},p:[120,43,4793]}],action:[{t:2,r:"malfAction",p:[120,97,4847]}]},f:[{t:2,r:"malfButton",p:[120,113,4863]}]}],n:50,r:"data.malfStatus",p:[119,3,4726]}]}],n:50,r:"data.siliconUser",p:[116,2,4584]}," ",{p:[124,2,4931],t:7,e:"ui-notice",f:[{p:[125,4,4947],t:7,e:"ui-section",a:{label:"Cover Lock"},f:[{t:4,f:[{p:[127,5,5028],t:7,e:"span",f:[{t:2,x:{r:["data.coverLocked"],s:'_0?"Engaged":"Disengaged"'},p:[127,11,5034]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[126,3,4982]},{t:4,n:51,f:[{p:[129,5,5106],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.coverLocked"],s:'_0?"lock":"unlock"'},p:[129,22,5123]}],action:"cover"},f:[{t:2,x:{r:["data.coverLocked"],s:'_0?"Engaged":"Disengaged"'},p:[129,79,5180]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}],r:"data.failTime"}]},e.exports=a.extend(r.exports)},{205:205}],228:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Alarms"},f:[{p:[2,3,31],t:7,e:"ul",f:[{t:4,f:[{p:[4,7,72],t:7,e:"li",f:[{p:[4,11,76],t:7,e:"ui-button",a:{icon:"close",style:"danger",action:"clear",params:['{"zone": "',{t:2,r:".",p:[4,83,148]},'"}']},f:[{t:2,r:".",p:[4,92,157]}]}]}],n:52,r:"data.priority",p:[3,5,41]},{t:4,n:51,f:[{p:[6,7,201],t:7,e:"li",f:[{p:[6,11,205],t:7,e:"span",a:{"class":"good"},f:["No Priority Alerts"]}]}],r:"data.priority"}," ",{t:4,f:[{p:[9,7,303],t:7,e:"li",f:[{p:[9,11,307],t:7,e:"ui-button",a:{icon:"close",style:"caution",action:"clear",params:['{"zone": "',{t:2,r:".",p:[9,84,380]},'"}']},f:[{t:2,r:".",p:[9,93,389]}]}]}],n:52,r:"data.minor",p:[8,5,275]},{t:4,n:51,f:[{p:[11,7,433],t:7,e:"li",f:[{p:[11,11,437],t:7,e:"span",a:{"class":"good"},f:["No Minor Alerts"]}]}],r:"data.minor"}]}]}]},e.exports=a.extend(r.exports)},{205:205}],229:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.tank","data.sensors.0.long_name"],s:"_0?_1:null"},p:[1,20,19]}]},f:[{t:4,f:[{p:[3,5,102],t:7,e:"ui-subdisplay",a:{title:[{t:2,x:{r:["data.tank","long_name"],s:"!_0?_1:null"},p:[3,27,124]}]},f:[{p:[4,7,167],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[5,3,200],t:7,e:"span",f:[{t:2,x:{r:["pressure"],s:"Math.fixed(_0,2)"},p:[5,9,206]}," kPa"]}]}," ",{t:4,f:[{p:[8,9,302],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[9,11,346],t:7,e:"span",f:[{t:2,x:{r:["temperature"],s:"Math.fixed(_0,2)"},p:[9,17,352]}," K"]}]}],n:50,r:"temperature",p:[7,7,273]}," ",{t:4,f:[{p:[13,9,462],t:7,e:"ui-section",a:{label:[{t:2,r:"id",p:[13,28,481]}]},f:[{p:[14,5,495],t:7,e:"span",f:[{t:2,x:{r:["."],s:"Math.fixed(_0,2)"},p:[14,11,501]},"%"]}]}],n:52,i:"id",r:"gases",p:[12,4,434]}]}],n:52,r:"adata.sensors",p:[2,3,73]}]}," ",{t:4,f:[{p:{button:[{p:[23,5,704],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[25,5,792],t:7,e:"ui-section",a:{label:"Input Injector"},f:[{p:[26,7,835],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputting"],s:'_0?"power-off":"close"'},p:[26,24,852]}],style:[{t:2,x:{r:["data.inputting"],s:'_0?"selected":null'},p:[26,75,903]}],action:"input"},f:[{t:2,x:{r:["data.inputting"],s:'_0?"Injecting":"Off"'},p:[27,9,968]}]}]}," ",{p:[29,5,1044],t:7,e:"ui-section",a:{label:"Input Rate"},f:[{p:[30,7,1083],t:7,e:"span",f:[{t:2,x:{r:["adata.inputRate"],s:"Math.fixed(_0)"},p:[30,13,1089]}," L/s"]}]}," ",{p:[32,5,1156],t:7,e:"ui-section",a:{label:"Output Regulator"},f:[{p:[33,7,1201],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputting"],s:'_0?"power-off":"close"'},p:[33,24,1218]}],style:[{t:2,x:{r:["data.outputting"],s:'_0?"selected":null'},p:[33,76,1270]}],action:"output"},f:[{t:2,x:{r:["data.outputting"],s:'_0?"Open":"Closed"'},p:[34,9,1337]}]}]}," ",{p:[36,5,1412],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[37,7,1456],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure"},f:[{t:2,x:{r:["adata.outputPressure"],s:"Math.round(_0)"},p:[37,50,1499]}," kPa"]}]}]}],n:50,r:"data.tank",p:[20,1,618]}]},e.exports=a.extend(r.exports)},{205:205}],230:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,48],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,65]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,109]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,164]}]}]}," ",{p:[6,3,223],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[7,5,265],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[8,5,360],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[8,35,390]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[9,5,518],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[9,11,524]}," kPa"]}]}," ",{p:[11,3,586],t:7,e:"ui-section",a:{label:"Filter"},f:[{p:[12,5,619],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0==""?"selected":null'},p:[12,23,637]}],action:"filter",params:'{"mode": ""}'},f:["Nothing"]}," ",{p:[14,5,755],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="plasma"?"selected":null'},p:[14,23,773]}],action:"filter",params:'{"mode": "plasma"}'},f:["Plasma"]}," ",{p:[16,5,902],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="o2"?"selected":null'},p:[16,23,920]}],action:"filter",params:'{"mode": "o2"}'},f:["O2"]}," ",{p:[18,5,1037],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="n2"?"selected":null'},p:[18,23,1055]}],action:"filter",params:'{"mode": "n2"}'},f:["N2"]}," ",{p:[20,5,1172],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="co2"?"selected":null'},p:[20,23,1190]}],action:"filter",params:'{"mode": "co2"}'},f:["CO2"]}," ",{p:[22,5,1310],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="n2o"?"selected":null'},p:[22,23,1328]}],action:"filter",params:'{"mode": "n2o"}'},f:["N2O"]}," ",{p:[24,2,1445],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="bz"?"selected":null'},p:[24,20,1463]}],action:"filter",params:'{"mode": "bz"}'},f:["BZ"]}," ",{p:[26,2,1578],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="freon"?"selected":null'},p:[26,20,1596]}],action:"filter",params:'{"mode": "freon"}'},f:["Freon"]}," ",{p:[28,2,1720],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="water_vapor"?"selected":null'},p:[28,20,1738]}],action:"filter",params:'{"mode": "water_vapor"}'},f:["Water Vapor"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],231:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,48],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,65]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,109]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,164]}]}]}," ",{p:[6,3,223],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[7,5,265],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[8,5,360],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.set_pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[8,35,390]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[9,5,522],t:7,e:"span",f:[{t:2,x:{r:["adata.set_pressure"],s:"Math.round(_0)"},p:[9,11,528]}," kPa"]}]}," ",{p:[11,3,594],t:7,e:"ui-section",a:{label:"Node 1"},f:[{p:[12,5,627],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==0?"disabled":null'},p:[12,44,666]}],action:"node1",params:'{"concentration": -0.1}'}}," ",{p:[14,5,783],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==0?"disabled":null'},p:[14,39,817]}],action:"node1",params:'{"concentration": -0.01}'}}," ",{p:[16,5,935],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==100?"disabled":null'},p:[16,38,968]}],action:"node1",params:'{"concentration": 0.01}'}}," ",{p:[18,5,1087],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==100?"disabled":null'},p:[18,43,1125]}],action:"node1",params:'{"concentration": 0.1}'}}," ",{p:[20,5,1243],t:7,e:"span",f:[{t:2,x:{r:["adata.node1_concentration"],s:"Math.round(_0)"},p:[20,11,1249]},"%"]}]}," ",{p:[22,3,1319],t:7,e:"ui-section",a:{label:"Node 2"},f:[{p:[23,5,1352],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==0?"disabled":null'},p:[23,44,1391]}],action:"node2",params:'{"concentration": -0.1}'}}," ",{p:[25,5,1508],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==0?"disabled":null'},p:[25,39,1542]}],action:"node2",params:'{"concentration": -0.01}'}}," ",{p:[27,5,1660],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==100?"disabled":null'},p:[27,38,1693]}],action:"node2",params:'{"concentration": 0.01}'}}," ",{p:[29,5,1812],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==100?"disabled":null'},p:[29,43,1850]}],action:"node2",params:'{"concentration": 0.1}'}}," ",{p:[31,5,1968],t:7,e:"span",f:[{t:2,x:{r:["adata.node2_concentration"],s:"Math.round(_0)"},p:[31,11,1974]},"%"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],232:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,48],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,65]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,109]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,164]}]}]}," ",{t:4,f:[{p:[7,5,250],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{p:[8,7,292],t:7,e:"ui-button",a:{icon:"pencil",action:"rate",params:'{"rate": "input"}'},f:["Set"]}," ",{p:[9,7,381],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.rate","data.max_rate"],s:'_0==_1?"disabled":null'},p:[9,37,411]}],action:"rate",params:'{"rate": "max"}'},f:["Max"]}," ",{p:[10,7,525],t:7,e:"span",f:[{t:2,x:{r:["adata.rate"],s:"Math.round(_0)"},p:[10,13,531]}," L/s"]}]}],n:50,r:"data.max_rate",p:[6,3,223]},{t:4,n:51,f:[{ +-p:[13,5,605],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[14,7,649],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[15,7,746],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[15,37,776]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[16,7,906],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[16,13,912]}," kPa"]}]}],r:"data.max_rate"}]}]},e.exports=a.extend(r.exports)},{205:205}],233:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,5,67],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"selected":null'},p:[3,38,100]}],action:[{t:2,x:{r:["data.timing"],s:'_0?"stop":"start"'},p:[3,83,145]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"Stop":"Start"'},p:[3,119,181]}]}," ",{p:[4,5,233],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"flash",style:[{t:2,x:{r:["data.flash_charging"],s:'_0?"disabled":null'},p:[4,57,285]}]},f:[{t:2,x:{r:["data.flash_charging"],s:'_0?"Recharging":"Flash"'},p:[4,102,330]}]}]},t:7,e:"ui-display",a:{title:"Cell Timer",button:0},f:[" ",{p:[6,3,410],t:7,e:"ui-section",f:[{p:[7,5,428],t:7,e:"ui-button",a:{icon:"fast-backward",action:"time",params:'{"adjust": -600}'}}," ",{p:[8,5,518],t:7,e:"ui-button",a:{icon:"backward",action:"time",params:'{"adjust": -100}'}}," ",{p:[9,5,603],t:7,e:"span",f:[{t:2,x:{r:["text","data.minutes"],s:"_0.zeroPad(_1,2)"},p:[9,11,609]},":",{t:2,x:{r:["text","data.seconds"],s:"_0.zeroPad(_1,2)"},p:[9,45,643]}]}," ",{p:[10,5,689],t:7,e:"ui-button",a:{icon:"forward",action:"time",params:'{"adjust": 100}'}}," ",{p:[11,5,772],t:7,e:"ui-button",a:{icon:"fast-forward",action:"time",params:'{"adjust": 600}'}}]}," ",{p:[13,3,875],t:7,e:"ui-section",f:[{p:[14,7,895],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "short"}'},f:["Short"]}," ",{p:[15,7,999],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "medium"}'},f:["Medium"]}," ",{p:[16,7,1105],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "long"}'},f:["Long"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],234:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,23],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,40]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,82],t:7,e:"ui-display",a:{title:"Bluespace Artillery Control",button:0},f:[{t:4,f:[{p:[8,3,167],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,5,200],t:7,e:"ui-button",a:{icon:"crosshairs",action:"recalibrate"},f:[{t:2,r:"data.target",p:[9,55,250]}]}]}," ",{p:[11,3,298],t:7,e:"ui-section",a:{label:"Controls"},f:[{t:4,f:[{p:[13,3,356],t:7,e:"ui-notice",f:[{p:[14,4,372],t:7,e:"span",f:["Bluespace Artillery firing protocols must be globally unlocked from two keycard authentication devices first!"]}]}],n:50,x:{r:["data.unlocked"],s:"!_0"},p:[12,2,330]},{t:4,n:51,f:[{p:[17,3,525],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.ready"],s:'_0?null:"disabled"'},p:[17,36,558]}],action:"fire"},f:["FIRE!"]}],x:{r:["data.unlocked"],s:"!_0"}}]}],n:50,r:"data.connected",p:[7,3,141]}," ",{t:4,f:[{p:[22,3,694],t:7,e:"ui-section",a:{label:"Maintenance"},f:[{p:[23,7,734],t:7,e:"ui-button",a:{icon:"wrench",action:"build"},f:["Complete Deployment."]}]}],n:50,x:{r:["data.connected"],s:"!_0"},p:[21,3,667]}]}]},e.exports=a.extend(r.exports)},{205:205}],235:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,15],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.hasHoldingTank"],s:'_0?"is":"is not"'},p:[2,23,35]}," connected to a tank."]}]}," ",{p:{button:[{p:[6,5,185],t:7,e:"ui-button",a:{icon:"pencil",action:"relabel"},f:["Relabel"]}]},t:7,e:"ui-display",a:{title:"Canister",button:0},f:[" ",{p:[8,3,266],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[9,5,301],t:7,e:"span",f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[9,11,307]}," kPa"]}]}," ",{p:[11,3,373],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[12,5,404],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.portConnected"],s:'_0?"good":"average"'},p:[12,18,417]}]},f:[{t:2,x:{r:["data.portConnected"],s:'_0?"Connected":"Not Connected"'},p:[12,63,462]}]}]}," ",{t:4,f:[{p:[15,3,573],t:7,e:"ui-section",a:{label:"Access"},f:[{p:[16,7,608],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.restricted"],s:'_0?"lock":"unlock"'},p:[16,24,625]}],style:[{t:2,x:{r:[],s:'"caution"'},p:[17,14,680]}],action:"restricted"},f:[{t:2,x:{r:["data.restricted"],s:'_0?"Restricted to Engineering":"Public"'},p:[18,27,722]}]}]}],n:50,r:"data.isPrototype",p:[14,3,544]}]}," ",{p:[22,1,839],t:7,e:"ui-display",a:{title:"Valve"},f:[{p:[23,3,869],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[24,5,912],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[24,18,925]}],max:[{t:2,r:"data.maxReleasePressure",p:[24,52,959]}],value:[{t:2,r:"data.releasePressure",p:[25,14,1002]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[25,40,1028]}," kPa"]}]}," ",{p:[27,3,1099],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[28,5,1144],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[28,38,1177]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[30,5,1333],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[30,36,1364]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[32,5,1511],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[33,5,1606],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[33,35,1636]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}," ",{p:[36,3,1798],t:7,e:"ui-section",a:{label:"Valve"},f:[{p:[37,5,1830],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.valveOpen"],s:'_0?"unlock":"lock"'},p:[37,22,1847]}],style:[{t:2,x:{r:["data.valveOpen","data.hasHoldingTank"],s:'_0?_1?"caution":"danger":null'},p:[38,14,1901]}],action:"valve"},f:[{t:2,x:{r:["data.valveOpen"],s:'_0?"Open":"Closed"'},p:[39,22,1995]}]}]}]}," ",{t:4,f:[{p:[42,1,2090],t:7,e:"ui-display",a:{title:"Valve Toggle Timer"},f:[{t:4,f:[{p:[44,5,2155],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[45,7,2196],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.timer_is_not_default"],s:'_0?null:"disabled"'},p:[45,40,2229]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[47,7,2358],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.timer_is_not_min"],s:'_0?null:"disabled"'},p:[47,38,2389]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[49,7,2520],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:[],s:'"disabled"'},p:[49,39,2552]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[51,7,2637],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.timer_is_not_max"],s:'_0?null:"disabled"'},p:[51,37,2667]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[43,3,2133]}," ",{p:[55,3,2833],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[56,6,2866],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[56,39,2899]}],action:"toggle_timer"},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[57,30,2969]}]}," ",{p:[59,2,3017],t:7,e:"ui-section",a:{label:"Time until Valve Toggle"},f:[{p:[60,2,3064],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[60,8,3070]}]}]}]}]}],n:50,r:"data.isPrototype",p:[41,1,2062]},{p:{button:[{t:4,f:[{p:[69,7,3277],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.valveOpen"],s:'_0?"danger":null'},p:[69,38,3308]}],action:"eject"},f:["Eject"]}],n:50,r:"data.hasHoldingTank",p:[68,5,3242]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[73,3,3442],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holdingTank.name",p:[74,4,3473]}]}," ",{p:[76,3,3519],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holdingTank.tankPressure"],s:"Math.round(_0)"},p:[77,4,3553]}," kPa"]}],n:50,r:"data.hasHoldingTank",p:[72,3,3411]},{t:4,n:51,f:[{p:[80,3,3635],t:7,e:"ui-section",f:[{p:[81,4,3652],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.hasHoldingTank"}]}]},e.exports=a.extend(r.exports)},{205:205}],236:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={computed:{tabs:function(){return Object.keys(this.get("data.supplies"))}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,158],t:7,e:"ui-display",a:{title:"Cargo"},f:[{p:[12,3,188],t:7,e:"ui-section",a:{label:"Shuttle"},f:[{t:4,f:[{p:[14,7,270],t:7,e:"ui-button",a:{action:"send"},f:[{t:2,r:"data.location",p:[14,32,295]}]}],n:50,x:{r:["data.docked","data.requestonly"],s:"_0&&!_1"},p:[13,5,222]},{t:4,n:51,f:[{p:[16,7,346],t:7,e:"span",f:[{t:2,r:"data.location",p:[16,13,352]}]}],x:{r:["data.docked","data.requestonly"],s:"_0&&!_1"}}]}," ",{p:[19,3,410],t:7,e:"ui-section",a:{label:"Credits"},f:[{p:[20,5,444],t:7,e:"span",f:[{t:2,x:{r:["adata.points"],s:"Math.floor(_0)"},p:[20,11,450]}]}]}," ",{p:[22,3,506],t:7,e:"ui-section",a:{label:"Centcom Message"},f:[{p:[23,7,550],t:7,e:"span",f:[{t:2,r:"data.message",p:[23,13,556]}]}]}," ",{t:4,f:[{p:[26,5,644],t:7,e:"ui-section",a:{label:"Loan"},f:[{t:4,f:[{p:[28,9,716],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.away","data.docked"],s:'_0&&_1?null:"disabled"'},p:[29,17,744]}],action:"loan"},f:["Loan Shuttle"]}],n:50,x:{r:["data.loan_dispatched"],s:"!_0"},p:[27,7,677]},{t:4,n:51,f:[{p:[32,9,868],t:7,e:"span",a:{"class":"bad"},f:["Loaned to Centcom"]}],x:{r:["data.loan_dispatched"],s:"!_0"}}]}],n:50,x:{r:["data.loan","data.requestonly"],s:"_0&&!_1"},p:[25,3,600]}]}," ",{t:4,f:[{p:{button:[{p:[40,7,1066],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.cart.length"],s:'_0?null:"disabled"'},p:[40,38,1097]}],action:"clear"},f:["Clear"]}]},t:7,e:"ui-display",a:{title:"Cart",button:0},f:[" ",{t:4,f:[{p:[43,7,1222],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[44,9,1263],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[44,31,1285]}]}," ",{p:[45,9,1307],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"object",p:[45,30,1328]}]}," ",{p:[46,9,1354],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"cost",p:[46,30,1375]}," Credits"]}," ",{p:[47,9,1407],t:7,e:"div",a:{"class":"content"},f:[{p:[48,11,1440],t:7,e:"ui-button",a:{icon:"minus",action:"remove",params:['{"id": "',{t:2,r:"id",p:[48,67,1496]},'"}']}}]}]}],n:52,r:"data.cart",p:[42,5,1195]},{t:4,n:51,f:[{p:[52,7,1566],t:7,e:"span",f:["Nothing in Cart"]}],r:"data.cart"}]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[37,1,972]},{p:{button:[{t:4,f:[{p:[59,7,1735],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.requests.length"],s:'_0?null:"disabled"'},p:[59,38,1766]}],action:"denyall"},f:["Clear"]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[58,5,1702]}]},t:7,e:"ui-display",a:{title:"Requests",button:0},f:[" ",{t:4,f:[{p:[63,5,1908],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[64,7,1947],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[64,29,1969]}]}," ",{p:[65,7,1989],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"object",p:[65,28,2010]}]}," ",{p:[66,7,2034],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"cost",p:[66,28,2055]}," Credits"]}," ",{p:[67,7,2085],t:7,e:"div",a:{"class":"content"},f:["By ",{t:2,r:"orderer",p:[67,31,2109]}]}," ",{p:[68,7,2134],t:7,e:"div",a:{"class":"content"},f:["Comment: ",{t:2,r:"reason",p:[68,37,2164]}]}," ",{t:4,f:[{p:[70,9,2223],t:7,e:"div",a:{"class":"content"},f:[{p:[71,11,2256],t:7,e:"ui-button",a:{icon:"check",action:"approve",params:['{"id": "',{t:2,r:"id",p:[71,68,2313]},'"}']}}," ",{p:[72,11,2336],t:7,e:"ui-button",a:{icon:"close",action:"deny",params:['{"id": "',{t:2,r:"id",p:[72,65,2390]},'"}']}}]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[69,7,2188]}]}],n:52,r:"data.requests",p:[62,3,1879]},{t:4,n:51,f:[{p:[77,7,2473],t:7,e:"span",f:["No Requests"]}],r:"data.requests"}]}," ",{p:[80,1,2529],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"tabs",p:[80,16,2544]}]},f:[{t:4,f:[{p:[82,5,2587],t:7,e:"tab",a:{name:[{t:2,r:"name",p:[82,16,2598]}]},f:[{t:4,f:[{p:[84,9,2641],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[84,28,2660]}],candystripe:0,right:0},f:[{p:[85,11,2700],t:7,e:"ui-button",a:{action:"add",params:['{"id": "',{t:2,r:"id",p:[85,51,2740]},'"}']},f:[{t:2,r:"cost",p:[85,61,2750]}," Credits"]}]}],n:52,r:"packs",p:[83,7,2616]}]}],n:52,r:"data.supplies",p:[81,3,2558]}]}]},e.exports=a.extend(r.exports)},{205:205}],237:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Cellular Emporium",button:0},f:[{p:[2,3,49],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.can_readapt"],s:'_0?null:"disabled"'},p:[2,36,82]}],action:"readapt"},f:["Readapt"]}," ",{p:[4,3,169],t:7,e:"ui-section",a:{label:"Genetic Points Remaining",right:0},f:[{t:2,r:"data.genetic_points_remaining",p:[5,5,226]}]}]}," ",{p:[8,1,293],t:7,e:"ui-display",f:[{t:4,f:[{p:[10,3,335],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[10,22,354]}],candystripe:0,right:0},f:[{p:[11,5,388],t:7,e:"span",f:[{t:2,r:"desc",p:[11,11,394]}]}," ",{p:[12,5,415],t:7,e:"span",f:[{t:2,r:"helptext",p:[12,11,421]}]}," ",{p:[13,5,446],t:7,e:"span",f:["Cost: ",{t:2,r:"dna_cost",p:[13,17,458]}]}," ",{p:[14,5,483],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["owned","can_purchase"],s:'_0?"selected":_1?null:"disabled"'},p:[15,14,508]}],action:"evolve",params:['{"name": "',{t:2,r:"name",p:[17,25,615]},'"}']},f:[{t:2,x:{r:["owned"],s:'_0?"Evolved":"Evolve"'},p:[18,7,635]}]}]}],n:52,r:"data.abilities",p:[9,1,307]},{t:4,f:[{p:[23,3,738],t:7,e:"span",a:{"class":"warning"},f:["No abilities availible."]}],n:51,r:"data.abilities",p:[22,1,715]}]}]},e.exports=a.extend(r.exports)},{205:205}],238:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,31],t:7,e:"ui-section",a:{label:"Energy"},f:[{p:[3,5,64],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.maxEnergy",p:[3,26,85]}],value:[{t:2,r:"data.energy",p:[3,53,112]}]},f:[{t:2,x:{r:["adata.energy"],s:"Math.fixed(_0)"},p:[3,70,129]}," Units"]}]}]}," ",{p:{button:[{t:4,f:[{p:[9,7,315],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.amount","."],s:'_0==_1?"selected":null'},p:[9,37,345]}],action:"amount",params:['{"target": ',{t:2,r:".",p:[9,114,422]},"}"]},f:[{t:2,r:".",p:[9,122,430]}]}],n:52,r:"data.beakerTransferAmounts",p:[8,5,271]}]},t:7,e:"ui-display",a:{title:"Dispense",button:0},f:[" ",{p:[12,3,482],t:7,e:"ui-section",f:[{t:4,f:[{p:[14,7,532],t:7,e:"ui-button",a:{grid:0,icon:"tint",action:"dispense",params:['{"reagent": "',{t:2,r:"id",p:[14,74,599]},'"}']},f:[{t:2,r:"title",p:[14,84,609]}]}],n:52,r:"data.chemicals",p:[13,5,500]}]}]}," ",{p:{button:[{t:4,f:[{p:[21,7,786],t:7,e:"ui-button",a:{icon:"minus",action:"remove",params:['{"amount": ',{t:2,r:".",p:[21,66,845]},"}"]},f:[{t:2,r:".",p:[21,74,853]}]}],n:52,r:"data.beakerTransferAmounts",p:[20,5,742]}," ",{p:[23,5,891],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[23,36,922]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[25,3,1019],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[27,7,1089],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[27,13,1095]},"/",{t:2,r:"data.beakerMaxVolume",p:[27,55,1137]}," Units"]}," ",{p:[28,7,1182],t:7,e:"br"}," ",{t:4,f:[{p:[30,9,1235],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[30,52,1278]}," units of ",{t:2,r:"name",p:[30,87,1313]}]},{p:[30,102,1328],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[29,7,1195]},{t:4,n:51,f:[{p:[32,9,1359],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[26,5,1054]},{t:4,n:51,f:[{p:[35,7,1435],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{205:205}],239:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[2,3,35],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,67],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isActive"],s:'_0?"power-off":"close"'},p:[3,22,84]}],style:[{t:2,x:{r:["data.isActive"],s:'_0?"selected":null'},p:[4,10,137]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,10,186]}],action:"power"},f:[{t:2,x:{r:["data.isActive"],s:'_0?"On":"Off"'},p:[6,18,249]}]}]}," ",{p:[8,3,314],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,4,346],t:7,e:"ui-button",a:{icon:"pencil",action:"temperature",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[9,79,421]}," K"]}]}]}," ",{p:{button:[{p:[14,5,564],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[14,36,595]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[16,3,692],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[18,7,762],t:7,e:"span",f:["Temperature: ",{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[18,26,781]}," K"]}," ",{p:[19,7,831],t:7,e:"br"}," ",{t:4,f:[{p:[21,9,885],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[21,52,928]}," units of ",{t:2,r:"name",p:[21,87,963]}]},{p:[21,102,978],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[20,7,845]},{t:4,n:51,f:[{p:[23,9,1009],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[17,5,727]},{t:4,n:51,f:[{p:[26,7,1085],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{205:205}],240:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,32],t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[{p:[3,3,70],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"Eject":"close"'},p:[3,20,87]}],style:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"selected":null'},p:[4,11,143]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,11,199]}],action:"eject"},f:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"Eject and Clear Buffer":"No beaker"'},p:[7,5,268]}]}," ",{p:[10,3,357],t:7,e:"ui-section",f:[{t:4,f:[{t:4,f:[{p:[13,6,443],t:7,e:"ui-section",a:{label:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[13,25,462]}," units of ",{t:2,r:"name",p:[13,60,497]}],nowrap:0},f:[{p:[14,7,522],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{p:[15,8,572],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[15,61,625]},'", "amount": 1}']},f:["1"]}," ",{p:[16,8,670],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[16,61,723]},'", "amount": 5}']},f:["5"]}," ",{p:[17,8,768],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[17,61,821]},'", "amount": 10}']},f:["10"]}," ",{p:[18,8,868],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[18,61,921]},'", "amount": 1000}']},f:["All"]}," ",{p:[19,8,971],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[19,61,1024]},'", "amount": -1}']},f:["Custom"]}," ",{p:[20,8,1075],t:7,e:"ui-button",a:{action:"analyze",params:['{"id": "',{t:2,r:"id",p:[20,52,1119]},'"}']},f:["Analyze"]}]}]}],n:52,r:"data.beakerContents",p:[12,5,407]},{t:4,n:51,f:[{p:[24,5,1201],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"data.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[11,4,374]},{t:4,n:51,f:[{p:[27,5,1272],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}," ",{p:[32,2,1360],t:7,e:"ui-display",a:{title:"Buffer"},f:[{p:[33,3,1391],t:7,e:"ui-button",a:{action:"toggleMode",state:[{t:2,x:{r:["data.mode"],s:'_0?null:"selected"'},p:[33,41,1429]}]},f:["Destroy"]}," ",{p:[34,3,1487],t:7,e:"ui-button",a:{action:"toggleMode",state:[{t:2,x:{r:["data.mode"],s:'_0?"selected":null'},p:[34,41,1525]}]},f:["Transfer to Beaker"]}," ",{p:[35,3,1594],t:7,e:"ui-section",f:[{t:4,f:[{p:[37,5,1646],t:7,e:"ui-section",a:{label:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[37,24,1665]}," units of ",{t:2,r:"name",p:[37,59,1700]}],nowrap:0},f:[{p:[38,6,1724],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{p:[39,7,1773],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[39,62,1828]},'", "amount": 1}']},f:["1"]}," ",{p:[40,7,1872],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[40,62,1927]},'", "amount": 5}']},f:["5"]}," ",{p:[41,7,1971],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[41,62,2026]},'", "amount": 10}']},f:["10"]}," ",{p:[42,7,2072],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[42,62,2127]},'", "amount": 1000}']},f:["All"]}," ",{p:[43,7,2176],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[43,62,2231]},'", "amount": -1}']},f:["Custom"]}," ",{p:[44,7,2281],t:7,e:"ui-button",a:{action:"analyze",params:['{"id": "',{t:2,r:"id",p:[44,51,2325]},'"}']},f:["Analyze"]}]}]}],n:52,r:"data.bufferContents",p:[36,4,1611]}]}]}," ",{t:4,f:[{p:[52,3,2461],t:7,e:"ui-display",a:{title:"Pills, Bottles and Patches"},f:[{t:4,f:[{p:[54,5,2551],t:7,e:"ui-button",a:{action:"ejectp",state:[{t:2,x:{r:["data.isPillBottleLoaded"],s:'_0?null:"disabled"'},p:[54,39,2585]}]},f:[{t:2,x:{r:["data.isPillBottleLoaded"],s:'_0?"Eject":"No Pill bottle loaded"'},p:[54,88,2634]}]}," ",{p:[55,5,2715],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.pillBotContent",p:[55,27,2737]},"/",{t:2,r:"data.pillBotMaxContent",p:[55,51,2761]}]}],n:50,r:"data.isPillBottleLoaded",p:[53,4,2514]},{t:4,n:51,f:[{p:[57,5,2813],t:7,e:"span",a:{"class":"average"},f:["No Pillbottle"]}],r:"data.isPillBottleLoaded"}," ",{p:[60,4,2877],t:7,e:"br"}," ",{p:[61,4,2887],t:7,e:"br"}," ",{p:[62,4,2897],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[62,63,2956]}]},f:["Create Pill (max 50µ)"]}," ",{p:[63,4,3040],t:7,e:"br"}," ",{p:[64,4,3050],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[64,63,3109]}]},f:["Create Multiple Pills"]}," ",{p:[65,4,3193],t:7,e:"br"}," ",{p:[66,4,3203],t:7,e:"br"}," ",{p:[67,4,3213],t:7,e:"ui-button",a:{action:"createPatch",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[67,64,3273]}]},f:["Create Patch (max 40µ)"]}," ",{p:[68,4,3358],t:7,e:"br"}," ",{p:[69,4,3368],t:7,e:"ui-button",a:{action:"createPatch",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[69,64,3428]}]},f:["Create Multiple Patches"]}," ",{p:[70,4,3514],t:7,e:"br"}," ",{p:[71,4,3524],t:7,e:"br"}," ",{p:[72,4,3534],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[72,65,3595]}]},f:["Create Bottle (max 30µ)"]}," ",{p:[73,4,3681],t:7,e:"br"}," ",{p:[74,4,3691],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[74,65,3752]}]},f:["Dispense Buffer to Bottles"]}]}],n:50,x:{r:["data.condi"],s:"!_0"},p:[51,2,2438]},{t:4,n:51,f:[{p:[79,3,3874],t:7,e:"ui-display",a:{title:"Condiments bottles and packs"},f:[{p:[80,4,3929],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[80,63,3988]}]},f:["Create Pack (max 10µ)"]}," ",{p:[81,4,4072],t:7,e:"br"}," ",{p:[82,4,4082],t:7,e:"br"}," ",{p:[83,4,4092],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[83,65,4153]}]},f:["Create Bottle (max 50µ)"]}]}],x:{r:["data.condi"],s:"!_0"}}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,1,0]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.screen"],s:'_0=="analyze"'},f:[{p:[87,2,4301],t:7,e:"ui-display",a:{title:[{t:2,r:"data.analyzeVars.name",p:[87,20,4319]}]},f:[{p:[88,3,4350],t:7,e:"span",a:{"class":"highlight"},f:["Description:"]}," ",{p:[89,3,4398],t:7,e:"span",a:{"class":"content",style:"float:center"},f:[{t:2,r:"data.analyzeVars.description",p:[89,46,4441]}]}," ",{p:[90,3,4484],t:7,e:"br"}," ",{p:[91,3,4493],t:7,e:"span",a:{"class":"highlight"},f:["Color:"]}," ",{p:[92,3,4535],t:7,e:"span",a:{style:["color: ",{t:2,r:"data.analyzeVars.color",p:[92,23,4555]},"; background-color: ",{t:2,r:"data.analyzeVars.color",p:[92,69,4601]}]},f:[{t:2,r:"data.analyzeVars.color",p:[92,97,4629]}]}," ",{p:[93,3,4666],t:7,e:"br"}," ",{p:[94,3,4675],t:7,e:"span",a:{"class":"highlight"},f:["State:"]}," ",{p:[95,3,4717],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.state",p:[95,25,4739]}]}," ",{p:[96,3,4776],t:7,e:"br"}," ",{p:[97,3,4785],t:7,e:"span",a:{"class":"highlight"},f:["Metabolization Rate:"]}," ",{p:[98,3,4841],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.metaRate",p:[98,25,4863]},"µ/minute"]}," ",{p:[99,3,4911],t:7,e:"br"}," ",{p:[100,3,4920],t:7,e:"span",a:{"class":"highlight"},f:["Overdose Threshold:"]}," ",{p:[101,3,4975],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.overD",p:[101,25,4997]}]}," ",{p:[102,3,5034],t:7,e:"br"}," ",{p:[103,3,5043],t:7,e:"span",a:{"class":"highlight"},f:["Addiction Threshold:"]}," ",{p:[104,3,5099],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.addicD",p:[104,25,5121]}]}," ",{p:[105,3,5159],t:7,e:"br"}," ",{p:[106,3,5168],t:7,e:"br"}," ",{p:[107,3,5177],t:7,e:"ui-button",a:{action:"goScreen",params:'{"screen": "home"}'},f:["Back"]}]}]}],x:{r:["data.screen"],s:'_0=="home"'}}]},e.exports=a.extend(r.exports)},{205:205}],241:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-button",a:{action:"toggle"},f:[{t:2,x:{r:["data.recollection"],s:'_0?"Recital":"Recollection"'},p:[2,30,43]}]}," ",{p:[3,3,107],t:7,e:"ui-button",a:{action:"component"},f:["Target Component: ",{t:3,r:"data.target_comp",p:[3,51,155]}]}]}," ",{t:4,f:[{p:[6,3,235],t:7,e:"ui-display",f:[{t:3,r:"data.rec_text",p:[7,3,251]}," ",{t:4,f:[{p:[9,4,317],t:7,e:"br"},{p:[9,8,321],t:7,e:"ui-button",a:{action:"rec_category",params:['{"category": "',{t:2,r:"name",p:[9,63,376]},'"}']},f:[{t:3,r:"name",p:[9,75,388]}," - ",{t:3,r:"desc",p:[9,88,401]}]}],n:52,r:"data.recollection_categories",p:[8,3,274]}," ",{t:3,r:"data.rec_section",p:[11,3,440]}," ",{t:3,r:"data.rec_binds",p:[12,3,466]}]}],n:50,r:"data.recollection",p:[5,1,206]},{t:4,n:51,f:[{p:[15,2,517],t:7,e:"ui-display",a:{title:"Components (with Global Cache)",button:0},f:[{p:[16,4,580],t:7,e:"ui-section",f:[{t:3,r:"data.components",p:[17,6,599]}]}]}," ",{p:[20,2,657],t:7,e:"ui-display",f:[{p:[21,3,673],t:7,e:"ui-section",f:[{p:[22,4,690],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Driver"?"selected":null'},p:[22,22,708]}],action:"select",params:'{"category": "Driver"}'},f:["Driver"]}," ",{p:[23,4,831],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Script"?"selected":null'},p:[23,22,849]}],action:"select",params:'{"category": "Script"}'},f:["Scripts"]}," ",{p:[24,4,973],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Application"?"selected":null'},p:[24,22,991]}],action:"select",params:'{"category": "Application"}'},f:["Applications"]}," ",{p:[25,4,1130],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Judgement"?"selected":null'},p:[25,22,1148]}],action:"select",params:'{"category": "Judgement"}'},f:["Judgement"]}," ",{p:[26,4,1279],t:7,e:"br"},{t:3,r:"data.tier_info",p:[26,8,1283]}]},{p:[27,16,1320],t:7,e:"hr"}," ",{p:[28,3,1328],t:7,e:"ui-section",f:[{t:4,f:[{p:[30,4,1373],t:7,e:"div",f:[{p:[30,9,1378],t:7,e:"ui-button",a:{tooltip:[{t:3,r:"tip",p:[30,29,1398]}],"tooltip-side":"right",action:"recite",params:['{"category": "',{t:2,r:"type",p:[30,99,1468]},'"}']},f:["Recite",{t:3,r:"required",p:[30,117,1486]}]}," ",{t:4,f:[{t:4,f:[{p:[33,6,1562],t:7,e:"ui-button",a:{action:"bind",params:['{"category": "',{t:2,r:"type",p:[33,53,1609]},'"}']},f:["Unbind ",{t:3,r:"bound",p:[33,72,1628]}]}],n:50,r:"bound",p:[32,5,1542]},{t:4,n:51,f:[{p:[35,6,1672],t:7,e:"ui-button",a:{action:"bind",params:['{"category": "',{t:2,r:"type",p:[35,53,1719]},'"}']},f:["Quickbind"]}],r:"bound"}],n:50,r:"quickbind",p:[31,6,1519]}," ",{t:3,r:"name",p:[38,6,1786]}," ",{t:3,r:"descname",p:[38,17,1797]}," ",{t:3,r:"invokers",p:[38,32,1812]}]}],n:52,r:"data.scripture",p:[29,3,1344]}]}]}],r:"data.recollection"}]},e.exports=a.extend(r.exports)},{205:205}],242:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Codex Gigas"},f:[{p:[2,2,35],t:7,e:"ui-section",f:[{t:2,r:"data.name",p:[3,3,51]}]}," ",{p:[5,5,86],t:7,e:"ui-section",a:{label:"Prefix"},f:[{p:[6,3,117],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[6,22,136]}],action:"Dark "},f:["Dark"]}," ",{p:[7,3,221],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[7,22,240]}],action:"Hellish "},f:["Hellish"]}," ",{p:[8,3,331],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[8,22,350]}],action:"Fallen "},f:["Fallen"]}," ",{p:[9,3,439],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[9,22,458]}],action:"Fiery "},f:["Fiery"]}," ",{p:[10,3,545],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[10,22,564]}],action:"Sinful "},f:["Sinful"]}," ",{p:[11,3,653],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[11,22,672]}],action:"Blood "},f:["Blood"]}," ",{p:[12,3,759],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[12,22,778]}],action:"Fluffy "},f:["Fluffy"]}]}," ",{p:[14,5,888],t:7,e:"ui-section",a:{label:"Title"},f:[{p:[15,3,918],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[15,22,937]}],action:"Lord "},f:["Lord"]}," ",{p:[16,3,1022],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[16,22,1041]}],action:"Prelate "},f:["Prelate"]}," ",{p:[17,3,1132],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[17,22,1151]}],action:"Count "},f:["Count"]}," ",{p:[18,3,1238],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[18,22,1257]}],action:"Viscount "},f:["Viscount"]}," ",{p:[19,3,1350],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[19,22,1369]}],action:"Vizier "},f:["Vizier"]}," ",{p:[20,3,1458],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[20,22,1477]}],action:"Elder "},f:["Elder"]}," ",{p:[21,3,1564],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[21,22,1583]}],action:"Adept "},f:["Adept"]}]}," ",{p:[23,5,1691],t:7,e:"ui-section",a:{label:"Name"},f:[{p:[24,3,1720],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[24,22,1739]}],action:"hal"},f:["hal"]}," ",{p:[25,3,1821],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[25,22,1840]}],action:"ve" ++p:[13,5,605],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[14,7,649],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[15,7,746],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[15,37,776]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[16,7,906],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[16,13,912]}," kPa"]}]}],r:"data.max_rate"}]}]},e.exports=a.extend(r.exports)},{205:205}],233:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,5,67],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"selected":null'},p:[3,38,100]}],action:[{t:2,x:{r:["data.timing"],s:'_0?"stop":"start"'},p:[3,83,145]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"Stop":"Start"'},p:[3,119,181]}]}," ",{p:[4,5,233],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"flash",style:[{t:2,x:{r:["data.flash_charging"],s:'_0?"disabled":null'},p:[4,57,285]}]},f:[{t:2,x:{r:["data.flash_charging"],s:'_0?"Recharging":"Flash"'},p:[4,102,330]}]}]},t:7,e:"ui-display",a:{title:"Cell Timer",button:0},f:[" ",{p:[6,3,410],t:7,e:"ui-section",f:[{p:[7,5,428],t:7,e:"ui-button",a:{icon:"fast-backward",action:"time",params:'{"adjust": -600}'}}," ",{p:[8,5,518],t:7,e:"ui-button",a:{icon:"backward",action:"time",params:'{"adjust": -100}'}}," ",{p:[9,5,603],t:7,e:"span",f:[{t:2,x:{r:["text","data.minutes"],s:"_0.zeroPad(_1,2)"},p:[9,11,609]},":",{t:2,x:{r:["text","data.seconds"],s:"_0.zeroPad(_1,2)"},p:[9,45,643]}]}," ",{p:[10,5,689],t:7,e:"ui-button",a:{icon:"forward",action:"time",params:'{"adjust": 100}'}}," ",{p:[11,5,772],t:7,e:"ui-button",a:{icon:"fast-forward",action:"time",params:'{"adjust": 600}'}}]}," ",{p:[13,3,875],t:7,e:"ui-section",f:[{p:[14,7,895],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "short"}'},f:["Short"]}," ",{p:[15,7,999],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "medium"}'},f:["Medium"]}," ",{p:[16,7,1105],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "long"}'},f:["Long"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],234:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,23],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,40]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,82],t:7,e:"ui-display",a:{title:"Bluespace Artillery Control",button:0},f:[{t:4,f:[{p:[8,3,167],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,5,200],t:7,e:"ui-button",a:{icon:"crosshairs",action:"recalibrate"},f:[{t:2,r:"data.target",p:[9,55,250]}]}]}," ",{p:[11,3,298],t:7,e:"ui-section",a:{label:"Controls"},f:[{t:4,f:[{p:[13,3,356],t:7,e:"ui-notice",f:[{p:[14,4,372],t:7,e:"span",f:["Bluespace Artillery firing protocols must be globally unlocked from two keycard authentication devices first!"]}]}],n:50,x:{r:["data.unlocked"],s:"!_0"},p:[12,2,330]},{t:4,n:51,f:[{p:[17,3,525],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.ready"],s:'_0?null:"disabled"'},p:[17,36,558]}],action:"fire"},f:["FIRE!"]}],x:{r:["data.unlocked"],s:"!_0"}}]}],n:50,r:"data.connected",p:[7,3,141]}," ",{t:4,f:[{p:[22,3,694],t:7,e:"ui-section",a:{label:"Maintenance"},f:[{p:[23,7,734],t:7,e:"ui-button",a:{icon:"wrench",action:"build"},f:["Complete Deployment."]}]}],n:50,x:{r:["data.connected"],s:"!_0"},p:[21,3,667]}]}]},e.exports=a.extend(r.exports)},{205:205}],235:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,15],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.hasHoldingTank"],s:'_0?"is":"is not"'},p:[2,23,35]}," connected to a tank."]}]}," ",{p:{button:[{p:[6,5,185],t:7,e:"ui-button",a:{icon:"pencil",action:"relabel"},f:["Relabel"]}]},t:7,e:"ui-display",a:{title:"Canister",button:0},f:[" ",{p:[8,3,266],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[9,5,301],t:7,e:"span",f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[9,11,307]}," kPa"]}]}," ",{p:[11,3,373],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[12,5,404],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.portConnected"],s:'_0?"good":"average"'},p:[12,18,417]}]},f:[{t:2,x:{r:["data.portConnected"],s:'_0?"Connected":"Not Connected"'},p:[12,63,462]}]}]}," ",{t:4,f:[{p:[15,3,573],t:7,e:"ui-section",a:{label:"Access"},f:[{p:[16,7,608],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.restricted"],s:'_0?"lock":"unlock"'},p:[16,24,625]}],style:[{t:2,x:{r:[],s:'"caution"'},p:[17,14,680]}],action:"restricted"},f:[{t:2,x:{r:["data.restricted"],s:'_0?"Restricted to Engineering":"Public"'},p:[18,27,722]}]}]}],n:50,r:"data.isPrototype",p:[14,3,544]}]}," ",{p:[22,1,839],t:7,e:"ui-display",a:{title:"Valve"},f:[{p:[23,3,869],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[24,5,912],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[24,18,925]}],max:[{t:2,r:"data.maxReleasePressure",p:[24,52,959]}],value:[{t:2,r:"data.releasePressure",p:[25,14,1002]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[25,40,1028]}," kPa"]}]}," ",{p:[27,3,1099],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[28,5,1144],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[28,38,1177]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[30,5,1333],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[30,36,1364]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[32,5,1511],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[33,5,1606],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[33,35,1636]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}," ",{p:[36,3,1798],t:7,e:"ui-section",a:{label:"Valve"},f:[{p:[37,5,1830],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.valveOpen"],s:'_0?"unlock":"lock"'},p:[37,22,1847]}],style:[{t:2,x:{r:["data.valveOpen","data.hasHoldingTank"],s:'_0?_1?"caution":"danger":null'},p:[38,14,1901]}],action:"valve"},f:[{t:2,x:{r:["data.valveOpen"],s:'_0?"Open":"Closed"'},p:[39,22,1995]}]}]}]}," ",{t:4,f:[{p:[42,1,2090],t:7,e:"ui-display",a:{title:"Valve Toggle Timer"},f:[{t:4,f:[{p:[44,5,2155],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[45,7,2196],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.timer_is_not_default"],s:'_0?null:"disabled"'},p:[45,40,2229]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[47,7,2358],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.timer_is_not_min"],s:'_0?null:"disabled"'},p:[47,38,2389]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[49,7,2520],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:[],s:'"disabled"'},p:[49,39,2552]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[51,7,2637],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.timer_is_not_max"],s:'_0?null:"disabled"'},p:[51,37,2667]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[43,3,2133]}," ",{p:[55,3,2833],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[56,6,2866],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[56,39,2899]}],action:"toggle_timer"},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[57,30,2969]}]}," ",{p:[59,2,3017],t:7,e:"ui-section",a:{label:"Time until Valve Toggle"},f:[{p:[60,2,3064],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[60,8,3070]}]}]}]}]}],n:50,r:"data.isPrototype",p:[41,1,2062]},{p:{button:[{t:4,f:[{p:[69,7,3277],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.valveOpen"],s:'_0?"danger":null'},p:[69,38,3308]}],action:"eject"},f:["Eject"]}],n:50,r:"data.hasHoldingTank",p:[68,5,3242]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[73,3,3442],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holdingTank.name",p:[74,4,3473]}]}," ",{p:[76,3,3519],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holdingTank.tankPressure"],s:"Math.round(_0)"},p:[77,4,3553]}," kPa"]}],n:50,r:"data.hasHoldingTank",p:[72,3,3411]},{t:4,n:51,f:[{p:[80,3,3635],t:7,e:"ui-section",f:[{p:[81,4,3652],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.hasHoldingTank"}]}]},e.exports=a.extend(r.exports)},{205:205}],236:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={computed:{tabs:function(){return Object.keys(this.get("data.supplies"))}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,158],t:7,e:"ui-display",a:{title:"Cargo"},f:[{p:[12,3,188],t:7,e:"ui-section",a:{label:"Shuttle"},f:[{t:4,f:[{p:[14,7,270],t:7,e:"ui-button",a:{action:"send"},f:[{t:2,r:"data.location",p:[14,32,295]}]}],n:50,x:{r:["data.docked","data.requestonly"],s:"_0&&!_1"},p:[13,5,222]},{t:4,n:51,f:[{p:[16,7,346],t:7,e:"span",f:[{t:2,r:"data.location",p:[16,13,352]}]}],x:{r:["data.docked","data.requestonly"],s:"_0&&!_1"}}]}," ",{p:[19,3,410],t:7,e:"ui-section",a:{label:"Credits"},f:[{p:[20,5,444],t:7,e:"span",f:[{t:2,x:{r:["adata.points"],s:"Math.floor(_0)"},p:[20,11,450]}]}]}," ",{p:[22,3,506],t:7,e:"ui-section",a:{label:"CentCom Message"},f:[{p:[23,7,550],t:7,e:"span",f:[{t:2,r:"data.message",p:[23,13,556]}]}]}," ",{t:4,f:[{p:[26,5,644],t:7,e:"ui-section",a:{label:"Loan"},f:[{t:4,f:[{p:[28,9,716],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.away","data.docked"],s:'_0&&_1?null:"disabled"'},p:[29,17,744]}],action:"loan"},f:["Loan Shuttle"]}],n:50,x:{r:["data.loan_dispatched"],s:"!_0"},p:[27,7,677]},{t:4,n:51,f:[{p:[32,9,868],t:7,e:"span",a:{"class":"bad"},f:["Loaned to CentCom"]}],x:{r:["data.loan_dispatched"],s:"!_0"}}]}],n:50,x:{r:["data.loan","data.requestonly"],s:"_0&&!_1"},p:[25,3,600]}]}," ",{t:4,f:[{p:{button:[{p:[40,7,1066],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.cart.length"],s:'_0?null:"disabled"'},p:[40,38,1097]}],action:"clear"},f:["Clear"]}]},t:7,e:"ui-display",a:{title:"Cart",button:0},f:[" ",{t:4,f:[{p:[43,7,1222],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[44,9,1263],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[44,31,1285]}]}," ",{p:[45,9,1307],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"object",p:[45,30,1328]}]}," ",{p:[46,9,1354],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"cost",p:[46,30,1375]}," Credits"]}," ",{p:[47,9,1407],t:7,e:"div",a:{"class":"content"},f:[{p:[48,11,1440],t:7,e:"ui-button",a:{icon:"minus",action:"remove",params:['{"id": "',{t:2,r:"id",p:[48,67,1496]},'"}']}}]}]}],n:52,r:"data.cart",p:[42,5,1195]},{t:4,n:51,f:[{p:[52,7,1566],t:7,e:"span",f:["Nothing in Cart"]}],r:"data.cart"}]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[37,1,972]},{p:{button:[{t:4,f:[{p:[59,7,1735],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.requests.length"],s:'_0?null:"disabled"'},p:[59,38,1766]}],action:"denyall"},f:["Clear"]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[58,5,1702]}]},t:7,e:"ui-display",a:{title:"Requests",button:0},f:[" ",{t:4,f:[{p:[63,5,1908],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[64,7,1947],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[64,29,1969]}]}," ",{p:[65,7,1989],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"object",p:[65,28,2010]}]}," ",{p:[66,7,2034],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"cost",p:[66,28,2055]}," Credits"]}," ",{p:[67,7,2085],t:7,e:"div",a:{"class":"content"},f:["By ",{t:2,r:"orderer",p:[67,31,2109]}]}," ",{p:[68,7,2134],t:7,e:"div",a:{"class":"content"},f:["Comment: ",{t:2,r:"reason",p:[68,37,2164]}]}," ",{t:4,f:[{p:[70,9,2223],t:7,e:"div",a:{"class":"content"},f:[{p:[71,11,2256],t:7,e:"ui-button",a:{icon:"check",action:"approve",params:['{"id": "',{t:2,r:"id",p:[71,68,2313]},'"}']}}," ",{p:[72,11,2336],t:7,e:"ui-button",a:{icon:"close",action:"deny",params:['{"id": "',{t:2,r:"id",p:[72,65,2390]},'"}']}}]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[69,7,2188]}]}],n:52,r:"data.requests",p:[62,3,1879]},{t:4,n:51,f:[{p:[77,7,2473],t:7,e:"span",f:["No Requests"]}],r:"data.requests"}]}," ",{p:[80,1,2529],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"tabs",p:[80,16,2544]}]},f:[{t:4,f:[{p:[82,5,2587],t:7,e:"tab",a:{name:[{t:2,r:"name",p:[82,16,2598]}]},f:[{t:4,f:[{p:[84,9,2641],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[84,28,2660]}],candystripe:0,right:0},f:[{p:[85,11,2700],t:7,e:"ui-button",a:{action:"add",params:['{"id": "',{t:2,r:"id",p:[85,51,2740]},'"}']},f:[{t:2,r:"cost",p:[85,61,2750]}," Credits"]}]}],n:52,r:"packs",p:[83,7,2616]}]}],n:52,r:"data.supplies",p:[81,3,2558]}]}]},e.exports=a.extend(r.exports)},{205:205}],237:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Cellular Emporium",button:0},f:[{p:[2,3,49],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.can_readapt"],s:'_0?null:"disabled"'},p:[2,36,82]}],action:"readapt"},f:["Readapt"]}," ",{p:[4,3,169],t:7,e:"ui-section",a:{label:"Genetic Points Remaining",right:0},f:[{t:2,r:"data.genetic_points_remaining",p:[5,5,226]}]}]}," ",{p:[8,1,293],t:7,e:"ui-display",f:[{t:4,f:[{p:[10,3,335],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[10,22,354]}],candystripe:0,right:0},f:[{p:[11,5,388],t:7,e:"span",f:[{t:2,r:"desc",p:[11,11,394]}]}," ",{p:[12,5,415],t:7,e:"span",f:[{t:2,r:"helptext",p:[12,11,421]}]}," ",{p:[13,5,446],t:7,e:"span",f:["Cost: ",{t:2,r:"dna_cost",p:[13,17,458]}]}," ",{p:[14,5,483],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["owned","can_purchase"],s:'_0?"selected":_1?null:"disabled"'},p:[15,14,508]}],action:"evolve",params:['{"name": "',{t:2,r:"name",p:[17,25,615]},'"}']},f:[{t:2,x:{r:["owned"],s:'_0?"Evolved":"Evolve"'},p:[18,7,635]}]}]}],n:52,r:"data.abilities",p:[9,1,307]},{t:4,f:[{p:[23,3,738],t:7,e:"span",a:{"class":"warning"},f:["No abilities availible."]}],n:51,r:"data.abilities",p:[22,1,715]}]}]},e.exports=a.extend(r.exports)},{205:205}],238:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,31],t:7,e:"ui-section",a:{label:"Energy"},f:[{p:[3,5,64],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.maxEnergy",p:[3,26,85]}],value:[{t:2,r:"data.energy",p:[3,53,112]}]},f:[{t:2,x:{r:["adata.energy"],s:"Math.fixed(_0)"},p:[3,70,129]}," Units"]}]}]}," ",{p:{button:[{t:4,f:[{p:[9,7,315],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.amount","."],s:'_0==_1?"selected":null'},p:[9,37,345]}],action:"amount",params:['{"target": ',{t:2,r:".",p:[9,114,422]},"}"]},f:[{t:2,r:".",p:[9,122,430]}]}],n:52,r:"data.beakerTransferAmounts",p:[8,5,271]}]},t:7,e:"ui-display",a:{title:"Dispense",button:0},f:[" ",{p:[12,3,482],t:7,e:"ui-section",f:[{t:4,f:[{p:[14,7,532],t:7,e:"ui-button",a:{grid:0,icon:"tint",action:"dispense",params:['{"reagent": "',{t:2,r:"id",p:[14,74,599]},'"}']},f:[{t:2,r:"title",p:[14,84,609]}]}],n:52,r:"data.chemicals",p:[13,5,500]}]}]}," ",{p:{button:[{t:4,f:[{p:[21,7,786],t:7,e:"ui-button",a:{icon:"minus",action:"remove",params:['{"amount": ',{t:2,r:".",p:[21,66,845]},"}"]},f:[{t:2,r:".",p:[21,74,853]}]}],n:52,r:"data.beakerTransferAmounts",p:[20,5,742]}," ",{p:[23,5,891],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[23,36,922]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[25,3,1019],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[27,7,1089],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[27,13,1095]},"/",{t:2,r:"data.beakerMaxVolume",p:[27,55,1137]}," Units"]}," ",{p:[28,7,1182],t:7,e:"br"}," ",{t:4,f:[{p:[30,9,1235],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[30,52,1278]}," units of ",{t:2,r:"name",p:[30,87,1313]}]},{p:[30,102,1328],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[29,7,1195]},{t:4,n:51,f:[{p:[32,9,1359],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[26,5,1054]},{t:4,n:51,f:[{p:[35,7,1435],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{205:205}],239:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[2,3,35],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,67],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isActive"],s:'_0?"power-off":"close"'},p:[3,22,84]}],style:[{t:2,x:{r:["data.isActive"],s:'_0?"selected":null'},p:[4,10,137]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,10,186]}],action:"power"},f:[{t:2,x:{r:["data.isActive"],s:'_0?"On":"Off"'},p:[6,18,249]}]}]}," ",{p:[8,3,314],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,4,346],t:7,e:"ui-button",a:{icon:"pencil",action:"temperature",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[9,79,421]}," K"]}]}]}," ",{p:{button:[{p:[14,5,564],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[14,36,595]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[16,3,692],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[18,7,762],t:7,e:"span",f:["Temperature: ",{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[18,26,781]}," K"]}," ",{p:[19,7,831],t:7,e:"br"}," ",{t:4,f:[{p:[21,9,885],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[21,52,928]}," units of ",{t:2,r:"name",p:[21,87,963]}]},{p:[21,102,978],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[20,7,845]},{t:4,n:51,f:[{p:[23,9,1009],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[17,5,727]},{t:4,n:51,f:[{p:[26,7,1085],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{205:205}],240:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,32],t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[{p:[3,3,70],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"Eject":"close"'},p:[3,20,87]}],style:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"selected":null'},p:[4,11,143]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,11,199]}],action:"eject"},f:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"Eject and Clear Buffer":"No beaker"'},p:[7,5,268]}]}," ",{p:[10,3,357],t:7,e:"ui-section",f:[{t:4,f:[{t:4,f:[{p:[13,6,443],t:7,e:"ui-section",a:{label:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[13,25,462]}," units of ",{t:2,r:"name",p:[13,60,497]}],nowrap:0},f:[{p:[14,7,522],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{p:[15,8,572],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[15,61,625]},'", "amount": 1}']},f:["1"]}," ",{p:[16,8,670],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[16,61,723]},'", "amount": 5}']},f:["5"]}," ",{p:[17,8,768],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[17,61,821]},'", "amount": 10}']},f:["10"]}," ",{p:[18,8,868],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[18,61,921]},'", "amount": 1000}']},f:["All"]}," ",{p:[19,8,971],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[19,61,1024]},'", "amount": -1}']},f:["Custom"]}," ",{p:[20,8,1075],t:7,e:"ui-button",a:{action:"analyze",params:['{"id": "',{t:2,r:"id",p:[20,52,1119]},'"}']},f:["Analyze"]}]}]}],n:52,r:"data.beakerContents",p:[12,5,407]},{t:4,n:51,f:[{p:[24,5,1201],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"data.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[11,4,374]},{t:4,n:51,f:[{p:[27,5,1272],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}," ",{p:[32,2,1360],t:7,e:"ui-display",a:{title:"Buffer"},f:[{p:[33,3,1391],t:7,e:"ui-button",a:{action:"toggleMode",state:[{t:2,x:{r:["data.mode"],s:'_0?null:"selected"'},p:[33,41,1429]}]},f:["Destroy"]}," ",{p:[34,3,1487],t:7,e:"ui-button",a:{action:"toggleMode",state:[{t:2,x:{r:["data.mode"],s:'_0?"selected":null'},p:[34,41,1525]}]},f:["Transfer to Beaker"]}," ",{p:[35,3,1594],t:7,e:"ui-section",f:[{t:4,f:[{p:[37,5,1646],t:7,e:"ui-section",a:{label:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[37,24,1665]}," units of ",{t:2,r:"name",p:[37,59,1700]}],nowrap:0},f:[{p:[38,6,1724],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{p:[39,7,1773],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[39,62,1828]},'", "amount": 1}']},f:["1"]}," ",{p:[40,7,1872],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[40,62,1927]},'", "amount": 5}']},f:["5"]}," ",{p:[41,7,1971],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[41,62,2026]},'", "amount": 10}']},f:["10"]}," ",{p:[42,7,2072],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[42,62,2127]},'", "amount": 1000}']},f:["All"]}," ",{p:[43,7,2176],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[43,62,2231]},'", "amount": -1}']},f:["Custom"]}," ",{p:[44,7,2281],t:7,e:"ui-button",a:{action:"analyze",params:['{"id": "',{t:2,r:"id",p:[44,51,2325]},'"}']},f:["Analyze"]}]}]}],n:52,r:"data.bufferContents",p:[36,4,1611]}]}]}," ",{t:4,f:[{p:[52,3,2461],t:7,e:"ui-display",a:{title:"Pills, Bottles and Patches"},f:[{t:4,f:[{p:[54,5,2551],t:7,e:"ui-button",a:{action:"ejectp",state:[{t:2,x:{r:["data.isPillBottleLoaded"],s:'_0?null:"disabled"'},p:[54,39,2585]}]},f:[{t:2,x:{r:["data.isPillBottleLoaded"],s:'_0?"Eject":"No Pill bottle loaded"'},p:[54,88,2634]}]}," ",{p:[55,5,2715],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.pillBotContent",p:[55,27,2737]},"/",{t:2,r:"data.pillBotMaxContent",p:[55,51,2761]}]}],n:50,r:"data.isPillBottleLoaded",p:[53,4,2514]},{t:4,n:51,f:[{p:[57,5,2813],t:7,e:"span",a:{"class":"average"},f:["No Pillbottle"]}],r:"data.isPillBottleLoaded"}," ",{p:[60,4,2877],t:7,e:"br"}," ",{p:[61,4,2887],t:7,e:"br"}," ",{p:[62,4,2897],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[62,63,2956]}]},f:["Create Pill (max 50µ)"]}," ",{p:[63,4,3040],t:7,e:"br"}," ",{p:[64,4,3050],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[64,63,3109]}]},f:["Create Multiple Pills"]}," ",{p:[65,4,3193],t:7,e:"br"}," ",{p:[66,4,3203],t:7,e:"br"}," ",{p:[67,4,3213],t:7,e:"ui-button",a:{action:"createPatch",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[67,64,3273]}]},f:["Create Patch (max 40µ)"]}," ",{p:[68,4,3358],t:7,e:"br"}," ",{p:[69,4,3368],t:7,e:"ui-button",a:{action:"createPatch",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[69,64,3428]}]},f:["Create Multiple Patches"]}," ",{p:[70,4,3514],t:7,e:"br"}," ",{p:[71,4,3524],t:7,e:"br"}," ",{p:[72,4,3534],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[72,65,3595]}]},f:["Create Bottle (max 30µ)"]}," ",{p:[73,4,3681],t:7,e:"br"}," ",{p:[74,4,3691],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[74,65,3752]}]},f:["Dispense Buffer to Bottles"]}]}],n:50,x:{r:["data.condi"],s:"!_0"},p:[51,2,2438]},{t:4,n:51,f:[{p:[79,3,3874],t:7,e:"ui-display",a:{title:"Condiments bottles and packs"},f:[{p:[80,4,3929],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[80,63,3988]}]},f:["Create Pack (max 10µ)"]}," ",{p:[81,4,4072],t:7,e:"br"}," ",{p:[82,4,4082],t:7,e:"br"}," ",{p:[83,4,4092],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[83,65,4153]}]},f:["Create Bottle (max 50µ)"]}]}],x:{r:["data.condi"],s:"!_0"}}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,1,0]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.screen"],s:'_0=="analyze"'},f:[{p:[87,2,4301],t:7,e:"ui-display",a:{title:[{t:2,r:"data.analyzeVars.name",p:[87,20,4319]}]},f:[{p:[88,3,4350],t:7,e:"span",a:{"class":"highlight"},f:["Description:"]}," ",{p:[89,3,4398],t:7,e:"span",a:{"class":"content",style:"float:center"},f:[{t:2,r:"data.analyzeVars.description",p:[89,46,4441]}]}," ",{p:[90,3,4484],t:7,e:"br"}," ",{p:[91,3,4493],t:7,e:"span",a:{"class":"highlight"},f:["Color:"]}," ",{p:[92,3,4535],t:7,e:"span",a:{style:["color: ",{t:2,r:"data.analyzeVars.color",p:[92,23,4555]},"; background-color: ",{t:2,r:"data.analyzeVars.color",p:[92,69,4601]}]},f:[{t:2,r:"data.analyzeVars.color",p:[92,97,4629]}]}," ",{p:[93,3,4666],t:7,e:"br"}," ",{p:[94,3,4675],t:7,e:"span",a:{"class":"highlight"},f:["State:"]}," ",{p:[95,3,4717],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.state",p:[95,25,4739]}]}," ",{p:[96,3,4776],t:7,e:"br"}," ",{p:[97,3,4785],t:7,e:"span",a:{"class":"highlight"},f:["Metabolization Rate:"]}," ",{p:[98,3,4841],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.metaRate",p:[98,25,4863]},"µ/minute"]}," ",{p:[99,3,4911],t:7,e:"br"}," ",{p:[100,3,4920],t:7,e:"span",a:{"class":"highlight"},f:["Overdose Threshold:"]}," ",{p:[101,3,4975],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.overD",p:[101,25,4997]}]}," ",{p:[102,3,5034],t:7,e:"br"}," ",{p:[103,3,5043],t:7,e:"span",a:{"class":"highlight"},f:["Addiction Threshold:"]}," ",{p:[104,3,5099],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.addicD",p:[104,25,5121]}]}," ",{p:[105,3,5159],t:7,e:"br"}," ",{p:[106,3,5168],t:7,e:"br"}," ",{p:[107,3,5177],t:7,e:"ui-button",a:{action:"goScreen",params:'{"screen": "home"}'},f:["Back"]}]}]}],x:{r:["data.screen"],s:'_0=="home"'}}]},e.exports=a.extend(r.exports)},{205:205}],241:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-button",a:{action:"toggle"},f:[{t:2,x:{r:["data.recollection"],s:'_0?"Recital":"Recollection"'},p:[2,30,43]}]}," ",{p:[3,3,107],t:7,e:"ui-button",a:{action:"component"},f:["Target Component: ",{t:3,r:"data.target_comp",p:[3,51,155]}]}]}," ",{t:4,f:[{p:[6,3,235],t:7,e:"ui-display",f:[{t:3,r:"data.rec_text",p:[7,3,251]}," ",{t:4,f:[{p:[9,4,317],t:7,e:"br"},{p:[9,8,321],t:7,e:"ui-button",a:{action:"rec_category",params:['{"category": "',{t:2,r:"name",p:[9,63,376]},'"}']},f:[{t:3,r:"name",p:[9,75,388]}," - ",{t:3,r:"desc",p:[9,88,401]}]}],n:52,r:"data.recollection_categories",p:[8,3,274]}," ",{t:3,r:"data.rec_section",p:[11,3,440]}," ",{t:3,r:"data.rec_binds",p:[12,3,466]}]}],n:50,r:"data.recollection",p:[5,1,206]},{t:4,n:51,f:[{p:[15,2,517],t:7,e:"ui-display",a:{title:"Components (with Global Cache)",button:0},f:[{p:[16,4,580],t:7,e:"ui-section",f:[{t:3,r:"data.components",p:[17,6,599]}]}]}," ",{p:[20,2,657],t:7,e:"ui-display",f:[{p:[21,3,673],t:7,e:"ui-section",f:[{p:[22,4,690],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Driver"?"selected":null'},p:[22,22,708]}],action:"select",params:'{"category": "Driver"}'},f:["Driver"]}," ",{p:[23,4,831],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Script"?"selected":null'},p:[23,22,849]}],action:"select",params:'{"category": "Script"}'},f:["Scripts"]}," ",{p:[24,4,973],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Application"?"selected":null'},p:[24,22,991]}],action:"select",params:'{"category": "Application"}'},f:["Applications"]}," ",{p:[25,4,1130],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Judgement"?"selected":null'},p:[25,22,1148]}],action:"select",params:'{"category": "Judgement"}'},f:["Judgement"]}," ",{p:[26,4,1279],t:7,e:"br"},{t:3,r:"data.tier_info",p:[26,8,1283]}]},{p:[27,16,1320],t:7,e:"hr"}," ",{p:[28,3,1328],t:7,e:"ui-section",f:[{t:4,f:[{p:[30,4,1373],t:7,e:"div",f:[{p:[30,9,1378],t:7,e:"ui-button",a:{tooltip:[{t:3,r:"tip",p:[30,29,1398]}],"tooltip-side":"right",action:"recite",params:['{"category": "',{t:2,r:"type",p:[30,99,1468]},'"}']},f:["Recite",{t:3,r:"required",p:[30,117,1486]}]}," ",{t:4,f:[{t:4,f:[{p:[33,6,1562],t:7,e:"ui-button",a:{action:"bind",params:['{"category": "',{t:2,r:"type",p:[33,53,1609]},'"}']},f:["Unbind ",{t:3,r:"bound",p:[33,72,1628]}]}],n:50,r:"bound",p:[32,5,1542]},{t:4,n:51,f:[{p:[35,6,1672],t:7,e:"ui-button",a:{action:"bind",params:['{"category": "',{t:2,r:"type",p:[35,53,1719]},'"}']},f:["Quickbind"]}],r:"bound"}],n:50,r:"quickbind",p:[31,6,1519]}," ",{t:3,r:"name",p:[38,6,1786]}," ",{t:3,r:"descname",p:[38,17,1797]}," ",{t:3,r:"invokers",p:[38,32,1812]}]}],n:52,r:"data.scripture",p:[29,3,1344]}]}]}],r:"data.recollection"}]},e.exports=a.extend(r.exports)},{205:205}],242:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Codex Gigas"},f:[{p:[2,2,35],t:7,e:"ui-section",f:[{t:2,r:"data.name",p:[3,3,51]}]}," ",{p:[5,5,86],t:7,e:"ui-section",a:{label:"Prefix"},f:[{p:[6,3,117],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[6,22,136]}],action:"Dark "},f:["Dark"]}," ",{p:[7,3,221],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[7,22,240]}],action:"Hellish "},f:["Hellish"]}," ",{p:[8,3,331],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[8,22,350]}],action:"Fallen "},f:["Fallen"]}," ",{p:[9,3,439],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[9,22,458]}],action:"Fiery "},f:["Fiery"]}," ",{p:[10,3,545],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[10,22,564]}],action:"Sinful "},f:["Sinful"]}," ",{p:[11,3,653],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[11,22,672]}],action:"Blood "},f:["Blood"]}," ",{p:[12,3,759],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[12,22,778]}],action:"Fluffy "},f:["Fluffy"]}]}," ",{p:[14,5,888],t:7,e:"ui-section",a:{label:"Title"},f:[{p:[15,3,918],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[15,22,937]}],action:"Lord "},f:["Lord"]}," ",{p:[16,3,1022],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[16,22,1041]}],action:"Prelate "},f:["Prelate"]}," ",{p:[17,3,1132],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[17,22,1151]}],action:"Count "},f:["Count"]}," ",{p:[18,3,1238],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[18,22,1257]}],action:"Viscount "},f:["Viscount"]}," ",{p:[19,3,1350],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[19,22,1369]}],action:"Vizier "},f:["Vizier"]}," ",{p:[20,3,1458],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[20,22,1477]}],action:"Elder "},f:["Elder"]}," ",{p:[21,3,1564],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[21,22,1583]}],action:"Adept "},f:["Adept"]}]}," ",{p:[23,5,1691],t:7,e:"ui-section",a:{label:"Name"},f:[{p:[24,3,1720],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[24,22,1739]}],action:"hal"},f:["hal"]}," ",{p:[25,3,1821],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[25,22,1840]}],action:"ve" + },f:["ve"]}," ",{p:[26,3,1920],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[26,22,1939]}],action:"odr"},f:["odr"]}," ",{p:[27,3,2021],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[27,22,2040]}],action:"neit"},f:["neit"]}," ",{p:[28,3,2124],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[28,22,2143]}],action:"ci"},f:["ci"]}," ",{p:[29,3,2223],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[29,22,2242]}],action:"quon"},f:["quon"]}," ",{p:[30,3,2326],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[30,22,2345]}],action:"mya"},f:["mya"]}," ",{p:[31,3,2427],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[31,22,2446]}],action:"folth"},f:["folth"]}," ",{p:[32,3,2532],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[32,22,2551]}],action:"wren"},f:["wren"]}," ",{p:[33,3,2635],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[33,22,2654]}],action:"geyr"},f:["geyr"]}," ",{p:[34,3,2738],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[34,22,2757]}],action:"hil"},f:["hil"]}," ",{p:[35,3,2839],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[35,22,2858]}],action:"niet"},f:["niet"]}," ",{p:[36,3,2942],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[36,22,2961]}],action:"twou"},f:["twou"]}," ",{p:[37,3,3045],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[37,22,3064]}],action:"phi"},f:["phi"]}," ",{p:[38,3,3146],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[38,22,3165]}],action:"coa"},f:["coa"]}]}," ",{p:[40,5,3268],t:7,e:"ui-section",a:{label:"suffix"},f:[{p:[41,3,3299],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[41,22,3318]}],action:" the Red"},f:["the Red"]}," ",{p:[42,3,3409],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[42,22,3428]}],action:" the Soulless"},f:["the Soulless"]}," ",{p:[43,3,3529],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[43,22,3548]}],action:" the Master"},f:["the Master"]}," ",{p:[44,3,3645],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[44,22,3664]}],action:", the Lord of all things"},f:["the Lord of all things"]}," ",{p:[45,3,3786],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[45,22,3805]}],action:", Jr."},f:["jr"]}]}," ",{p:[47,5,3909],t:7,e:"ui-section",a:{label:"submit"},f:[{p:[48,3,3941],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0>=4?null:"disabled"'},p:[48,21,3959]}],action:"search"},f:["search"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],243:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[2,1,2],t:7,e:"ui-button",a:{icon:"circle",action:"clean_order"},f:["Clear Order"]},{p:[2,70,71],t:7,e:"br"},{p:[2,74,75],t:7,e:"br"}," ",{p:[3,1,81],t:7,e:"i",f:["Your new computer device you always dreamed of is just four steps away..."]},{p:[3,81,161],t:7,e:"hr"}," ",{t:4,f:[" ",{p:[5,1,223],t:7,e:"div",a:{"class":"item"},f:[{p:[6,2,244],t:7,e:"h2",f:["Step 1: Select your device type"]}," ",{p:[7,2,287],t:7,e:"ui-button",a:{icon:"calc",action:"pick_device",params:'{"pick" : "1"}'},f:["Laptop"]}," ",{p:[8,2,377],t:7,e:"ui-button",a:{icon:"calc",action:"pick_device",params:'{"pick" : "2"}'},f:["LTablet"]}]}],n:50,x:{r:["data.state"],s:"_0==0"},p:[4,1,167]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.state"],s:"_0==1"},f:[{p:[11,1,502],t:7,e:"div",a:{"class":"item"},f:[{p:[12,2,523],t:7,e:"h2",f:["Step 2: Personalise your device"]}," ",{p:[13,2,566],t:7,e:"table",f:[{p:[14,3,577],t:7,e:"tr",f:[{p:[15,4,586],t:7,e:"td",f:[{p:[15,8,590],t:7,e:"b",f:["Current Price:"]}]},{p:[16,4,616],t:7,e:"td",f:[{t:2,r:"data.totalprice",p:[16,8,620]},"C"]}]}," ",{p:[18,3,653],t:7,e:"tr",f:[{p:[19,4,663],t:7,e:"td",f:[{p:[19,8,667],t:7,e:"b",f:["Battery:"]}]},{p:[20,4,687],t:7,e:"td",f:[{p:[20,8,691],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "1"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==1?"selected":null'},p:[20,73,756]}]},f:["Standard"]}]},{p:[21,4,827],t:7,e:"td",f:[{p:[21,8,831],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "2"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==2?"selected":null'},p:[21,73,896]}]},f:["Upgraded"]}]},{p:[22,4,967],t:7,e:"td",f:[{p:[22,8,971],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "3"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==3?"selected":null'},p:[22,73,1036]}]},f:["Advanced"]}]}]}," ",{p:[24,3,1115],t:7,e:"tr",f:[{p:[25,4,1124],t:7,e:"td",f:[{p:[25,8,1128],t:7,e:"b",f:["Hard Drive:"]}]},{p:[26,4,1151],t:7,e:"td",f:[{p:[26,8,1155],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "1"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==1?"selected":null'},p:[26,67,1214]}]},f:["Standard"]}]},{p:[27,4,1282],t:7,e:"td",f:[{p:[27,8,1286],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "2"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==2?"selected":null'},p:[27,67,1345]}]},f:["Upgraded"]}]},{p:[28,4,1413],t:7,e:"td",f:[{p:[28,8,1417],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "3"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==3?"selected":null'},p:[28,67,1476]}]},f:["Advanced"]}]}]}," ",{p:[30,3,1552],t:7,e:"tr",f:[{p:[31,4,1561],t:7,e:"td",f:[{p:[31,8,1565],t:7,e:"b",f:["Network Card:"]}]},{p:[32,4,1590],t:7,e:"td",f:[{p:[32,8,1594],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "0"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==0?"selected":null'},p:[32,73,1659]}]},f:["None"]}]},{p:[33,4,1726],t:7,e:"td",f:[{p:[33,8,1730],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "1"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==1?"selected":null'},p:[33,73,1795]}]},f:["Standard"]}]},{p:[34,4,1866],t:7,e:"td",f:[{p:[34,8,1870],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "2"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==2?"selected":null'},p:[34,73,1935]}]},f:["Advanced"]}]}]}," ",{p:[36,3,2014],t:7,e:"tr",f:[{p:[37,4,2023],t:7,e:"td",f:[{p:[37,8,2027],t:7,e:"b",f:["Nano Printer:"]}]},{p:[38,4,2052],t:7,e:"td",f:[{p:[38,8,2056],t:7,e:"ui-button",a:{action:"hw_nanoprint",params:'{"print" : "0"}',state:[{t:2,x:{r:["data.hw_nanoprint"],s:'_0==0?"selected":null'},p:[38,73,2121]}]},f:["None"]}]},{p:[39,4,2190],t:7,e:"td",f:[{p:[39,8,2194],t:7,e:"ui-button",a:{action:"hw_nanoprint",params:'{"print" : "1"}',state:[{t:2,x:{r:["data.hw_nanoprint"],s:'_0==1?"selected":null'},p:[39,73,2259]}]},f:["Standard"]}]}]}," ",{p:[41,3,2340],t:7,e:"tr",f:[{p:[42,4,2349],t:7,e:"td",f:[{p:[42,8,2353],t:7,e:"b",f:["Card Reader:"]}]},{p:[43,4,2377],t:7,e:"td",f:[{p:[43,8,2381],t:7,e:"ui-button",a:{action:"hw_card",params:'{"card" : "0"}',state:[{t:2,x:{r:["data.hw_card"],s:'_0==0?"selected":null'},p:[43,67,2440]}]},f:["None"]}]},{p:[44,4,2504],t:7,e:"td",f:[{p:[44,8,2508],t:7,e:"ui-button",a:{action:"hw_card",params:'{"card" : "1"}',state:[{t:2,x:{r:["data.hw_card"],s:'_0==1?"selected":null'},p:[44,67,2567]}]},f:["Standard"]}]}]}]}," ",{t:4,f:[" ",{p:[49,4,2706],t:7,e:"table",f:[{p:[50,5,2719],t:7,e:"tr",f:[{p:[51,6,2730],t:7,e:"td",f:[{p:[51,10,2734],t:7,e:"b",f:["Processor Unit:"]}]},{p:[52,6,2763],t:7,e:"td",f:[{p:[52,10,2767],t:7,e:"ui-button",a:{action:"hw_cpu",params:'{"cpu" : "1"}',state:[{t:2,x:{r:["data.hw_cpu"],s:'_0==1?"selected":null'},p:[52,67,2824]}]},f:["Standard"]}]},{p:[53,6,2893],t:7,e:"td",f:[{p:[53,10,2897],t:7,e:"ui-button",a:{action:"hw_cpu",params:'{"cpu" : "2"}',state:[{t:2,x:{r:["data.hw_cpu"],s:'_0==2?"selected":null'},p:[53,67,2954]}]},f:["Advanced"]}]}]}," ",{p:[55,5,3033],t:7,e:"tr",f:[{p:[56,6,3044],t:7,e:"td",f:[{p:[56,10,3048],t:7,e:"b",f:["Tesla Relay:"]}]},{p:[57,6,3074],t:7,e:"td",f:[{p:[57,10,3078],t:7,e:"ui-button",a:{action:"hw_tesla",params:'{"tesla" : "0"}',state:[{t:2,x:{r:["data.hw_tesla"],s:'_0==0?"selected":null'},p:[57,71,3139]}]},f:["None"]}]},{p:[58,6,3206],t:7,e:"td",f:[{p:[58,10,3210],t:7,e:"ui-button",a:{action:"hw_tesla",params:'{"tesla" : "1"}',state:[{t:2,x:{r:["data.hw_tesla"],s:'_0==1?"selected":null'},p:[58,71,3271]}]},f:["Standard"]}]}]}]}],n:50,x:{r:["data.devtype"],s:"_0!=2"},p:[48,3,2659]}," ",{p:[62,3,3374],t:7,e:"table",f:[{p:[63,4,3386],t:7,e:"tr",f:[{p:[64,5,3396],t:7,e:"td",f:[{p:[64,9,3400],t:7,e:"b",f:["Confirm Order:"]}]},{p:[65,5,3427],t:7,e:"td",f:[{p:[65,9,3431],t:7,e:"ui-button",a:{action:"confirm_order"},f:["CONFIRM"]}]}]}]}," ",{p:[69,2,3512],t:7,e:"hr"}," ",{p:[70,2,3519],t:7,e:"b",f:["Battery"]}," allows your device to operate without external utility power source. Advanced batteries increase battery life.",{p:[70,127,3644],t:7,e:"br"}," ",{p:[71,2,3651],t:7,e:"b",f:["Hard Drive"]}," stores file on your device. Advanced drives can store more files, but use more power, shortening battery life.",{p:[71,130,3779],t:7,e:"br"}," ",{p:[72,2,3786],t:7,e:"b",f:["Network Card"]}," allows your device to wirelessly connect to stationwide NTNet network. Basic cards are limited to on-station use, while advanced cards can operate anywhere near the station, which includes the asteroid outposts.",{p:[72,233,4017],t:7,e:"br"}," ",{p:[73,2,4024],t:7,e:"b",f:["Processor Unit"]}," is critical for your device's functionality. It allows you to run programs from your hard drive. Advanced CPUs use more power, but allow you to run more programs on background at once.",{p:[73,208,4230],t:7,e:"br"}," ",{p:[74,2,4237],t:7,e:"b",f:["Tesla Relay"]}," is an advanced wireless power relay that allows your device to connect to nearby area power controller to provide alternative power source. This component is currently unavailable on tablet computers due to size restrictions.",{p:[74,246,4481],t:7,e:"br"}," ",{p:[75,2,4488],t:7,e:"b",f:["Nano Printer"]}," is device that allows for various paperwork manipulations, such as, scanning of documents or printing new ones. This device was certified EcoFriendlyPlus and is capable of recycling existing paper for printing purposes.",{p:[75,241,4727],t:7,e:"br"}," ",{p:[76,2,4734],t:7,e:"b",f:["Card Reader"]}," adds a slot that allows you to manipulate RFID cards. Please note that this is not necessary to allow the device to read your identification, it is just necessary to manipulate other cards."]}]},{t:4,n:50,x:{r:["data.state"],s:"(!(_0==1))&&(_0==2)"},f:[" ",{p:[79,2,4981],t:7,e:"h2",f:["Step 3: Payment"]}," ",{p:[80,2,5008],t:7,e:"b",f:["Your device is now ready for fabrication.."]},{p:[80,51,5057],t:7,e:"br"}," ",{p:[81,2,5064],t:7,e:"i",f:["Please ensure the required amount of credits are in the machine, then press purchase."]},{p:[81,94,5156],t:7,e:"br"}," ",{p:[82,2,5163],t:7,e:"i",f:["Current credits: ",{p:[82,22,5183],t:7,e:"b",f:[{t:2,r:"data.credits",p:[82,25,5186]},"C"]}]},{p:[82,50,5211],t:7,e:"br"}," ",{p:[83,2,5218],t:7,e:"i",f:["Total price: ",{p:[83,18,5234],t:7,e:"b",f:[{t:2,r:"data.totalprice",p:[83,21,5237]},"C"]}]},{p:[83,49,5265],t:7,e:"br"},{p:[83,53,5269],t:7,e:"br"}," ",{p:[84,2,5276],t:7,e:"ui-button",a:{action:"purchase",state:[{t:2,x:{r:["data.credits","data.totalprice"],s:'_0>=_1?null:"disabled"'},p:[84,38,5312]}]},f:["PURCHASE"]}]},{t:4,n:50,x:{r:["data.state"],s:"(!(_0==1))&&((!(_0==2))&&(_0==3))"},f:[" ",{p:[87,2,5423],t:7,e:"h2",f:["Step 4: Thank you for your purchase"]},{p:[87,46,5467],t:7,e:"br"}," ",{p:[88,2,5474],t:7,e:"b",f:["Should you experience any issues with your new device, contact your local network admin for assistance."]}]}],x:{r:["data.state"],s:"_0==0"}}]},e.exports=a.extend(r.exports)},{205:205}],244:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,22],t:7,e:"ui-display",f:[{p:[3,2,37],t:7,e:"ui-section",a:{label:"Cap"},f:[{p:[4,3,65],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.is_capped"],s:'_0?"power-off":"close"'},p:[4,20,82]}],style:[{t:2,x:{r:["data.is_capped"],s:'_0?null:"selected"'},p:[4,71,133]}],action:"toggle_cap"},f:[{t:2,x:{r:["data.is_capped"],s:'_0?"On":"Off"'},p:[6,4,202]}]}]}]}],n:50,r:"data.has_cap",p:[1,1,0]},{p:[10,1,288],t:7,e:"ui-display",f:[{t:4,f:[{p:[14,2,419],t:7,e:"ui-section",f:[{p:[15,3,435],t:7,e:"ui-button",a:{action:"select_colour"},f:["Select New Colour"]}]}],n:50,r:"data.can_change_colour",p:[13,1,386]}]}," ",{p:[19,1,540],t:7,e:"ui-display",a:{title:"Stencil"},f:[{t:4,f:[{p:[21,2,599],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[21,21,618]}]},f:[{t:4,f:[{p:[23,7,655],t:7,e:"ui-button",a:{action:"select_stencil",params:['{"item":"',{t:2,r:"item",p:[23,59,707]},'"}'],style:[{t:2,x:{r:["item","data.selected_stencil"],s:'_0==_1?"selected":null'},p:[24,12,731]}]},f:[{t:2,r:"item",p:[25,4,791]}]}],n:52,r:"items",p:[22,3,632]}]}],n:52,r:"data.drawables",p:[20,3,572]}]}," ",{p:[31,1,874],t:7,e:"ui-display",a:{title:"Text Mode"},f:[{p:[32,2,907],t:7,e:"ui-section",a:{label:"Current Buffer"},f:[{t:2,r:"text_buffer",p:[32,37,942]}]}," ",{p:[34,2,976],t:7,e:"ui-section",f:[{p:[34,14,988],t:7,e:"ui-button",a:{action:"enter_text"},f:["New Text"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],245:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={data:{temperatureStatus:function(t){return 225>t?"good":273.15>t?"average":"bad"}},computed:{occupantStatState:function(){switch(this.get("data.occupant.stat")){case 0:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[22,1,466],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[23,3,499],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[24,3,532],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[24,9,538]}]}]}," ",{t:4,f:[{p:[27,5,655],t:7,e:"ui-section",a:{label:"State"},f:[{p:[28,7,689],t:7,e:"span",a:{"class":[{t:2,r:"occupantStatState",p:[28,20,702]}]},f:[{t:2,x:{r:["data.occupant.stat"],s:'_0==0?"Conscious":_0==1?"Unconcious":"Dead"'},p:[28,43,725]}]}]}," ",{p:[30,4,846],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[31,6,885],t:7,e:"span",a:{"class":[{t:2,x:{r:["temperatureStatus","adata.occupant.bodyTemperature"],s:"_0(_1)"},p:[31,19,898]}]},f:[{t:2,x:{r:["adata.occupant.bodyTemperature"],s:"Math.round(_0)"},p:[31,74,953]}," K"]}]}," ",{p:[33,5,1032],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[34,7,1067],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[34,20,1080]}],max:[{t:2,r:"data.occupant.maxHealth",p:[34,54,1114]}],value:[{t:2,r:"data.occupant.health",p:[34,90,1150]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[35,16,1192]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[35,68,1244]}]}]}," ",{t:4,f:[{p:[38,7,1481],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[38,26,1500]}]},f:[{p:[39,9,1521],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[39,30,1542]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[39,66,1578]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[39,103,1615]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[37,5,1315]}],n:50,r:"data.hasOccupant",p:[26,3,625]}]}," ",{p:[44,1,1724],t:7,e:"ui-display",a:{title:"Cell"},f:[{p:[45,3,1753],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[46,5,1785],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[46,22,1802]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[47,14,1862]}],state:[{t:2,x:{r:["data.isOpen"],s:'_0?"disabled":null'},p:[48,14,1918]}],action:"power"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[49,22,1977]}]}]}," ",{p:[51,3,2045],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[52,3,2081],t:7,e:"span",a:{"class":[{t:2,x:{r:["temperatureStatus","adata.cellTemperature"],s:"_0(_1)"},p:[52,16,2094]}]},f:[{t:2,x:{r:["adata.cellTemperature"],s:"Math.round(_0)"},p:[52,62,2140]}," K"]}]}," ",{p:[54,2,2205],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[55,5,2236],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOpen"],s:'_0?"unlock":"lock"'},p:[55,22,2253]}],action:"door"},f:[{t:2,x:{r:["data.isOpen"],s:'_0?"Open":"Closed"'},p:[55,73,2304]}]}," ",{p:[56,5,2357],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoEject"],s:'_0?"sign-out":"sign-in"'},p:[56,22,2374]}],action:"autoeject"},f:[{t:2,x:{r:["data.autoEject"],s:'_0?"Auto":"Manual"'},p:[56,86,2438]}]}]}]}," ",{p:{button:[{p:[61,5,2584],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[61,36,2615]}],action:"ejectbeaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[63,3,2718],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[66,9,2828],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[66,52,2871]}," units of ",{t:2,r:"name",p:[66,87,2906]}]},{p:[66,102,2921],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[65,7,2788]},{t:4,n:51,f:[{p:[68,9,2952],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[64,5,2753]},{t:4,n:51,f:[{p:[71,7,3028],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{205:205}],246:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,15],t:7,e:"ui-section",a:{label:"State"},f:[{t:4,f:[{p:[4,4,76],t:7,e:"span",a:{"class":"good"},f:["Ready"]}],n:50,r:"data.full_pressure",p:[3,3,45]},{t:4,n:51,f:[{t:4,f:[{p:[7,5,153],t:7,e:"span",a:{"class":"bad"},f:["Power Disabled"]}],n:50,r:"data.panel_open",p:[6,4,124]},{t:4,n:51,f:[{t:4,f:[{p:[10,6,248],t:7,e:"span",a:{"class":"average"},f:["Pressurizing"]}],n:50,r:"data.pressure_charging",p:[9,5,211]},{t:4,n:51,f:[{p:[12,6,310],t:7,e:"span",a:{"class":"bad"},f:["Off"]}],r:"data.pressure_charging"}],r:"data.panel_open"}],r:"data.full_pressure"}]}," ",{p:[17,2,393],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[18,3,426],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.per",p:[18,36,459]}],state:"good"},f:[{t:2,r:"data.per",p:[18,63,486]},"%"]}]}," ",{p:[20,5,530],t:7,e:"ui-section",a:{label:"Handle"},f:[{p:[21,9,567],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.flush"],s:'_0?"toggle-on":"toggle-off"'},p:[22,10,589]}],state:[{t:2,x:{r:["data.isai","data.panel_open"],s:'_0||_1?"disabled":null'},p:[23,11,647]}],action:[{t:2,x:{r:["data.flush"],s:'_0?"handle-0":"handle-1"'},p:[24,12,714]}]},f:[{t:2,x:{r:["data.flush"],s:'_0?"Disengage":"Engage"'},p:[25,5,763]}]}]}," ",{p:[27,2,837],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[28,3,867],t:7,e:"ui-button",a:{icon:"sign-out",state:[{t:2,x:{r:["data.isai"],s:'_0?"disabled":null'},p:[28,37,901]}],action:"eject"},f:["Eject Contents"]},{p:[28,114,978],t:7,e:"br"}]}," ",{p:[30,2,1002],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,3,1032],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["data.panel_open"],s:'_0?"disabled":null'},p:[31,38,1067]}],action:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"pump-0":"pump-1"'},p:[31,87,1116]}],style:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"selected":null'},p:[31,145,1174]}]}},{p:[31,206,1235],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{205:205}],247:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"DNA Vault Database"},f:[{p:[2,3,43],t:7,e:"ui-section",a:{label:"Human DNA"},f:[{p:[3,7,81],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.dna_max",p:[3,28,102]}],value:[{t:2,r:"data.dna",p:[3,53,127]}]},f:[{t:2,r:"data.dna",p:[3,67,141]},"/",{t:2,r:"data.dna_max",p:[3,80,154]}," Samples"]}]}," ",{p:[5,3,208],t:7,e:"ui-section",a:{label:"Plant Data"},f:[{p:[6,5,245],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.plants_max",p:[6,26,266]}],value:[{t:2,r:"data.plants",p:[6,54,294]}]},f:[{t:2,r:"data.plants",p:[6,71,311]},"/",{t:2,r:"data.plants_max",p:[6,87,327]}," Samples"]}]}," ",{p:[8,3,384],t:7,e:"ui-section",a:{label:"Animal Data"},f:[{p:[9,5,422],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.animals_max",p:[9,26,443]}],value:[{t:2,r:"data.animals",p:[9,55,472]}]},f:[{t:2,r:"data.animals",p:[9,73,490]},"/",{t:2,r:"data.animals_max",p:[9,90,507]}," Samples"]}]}]}," ",{t:4,f:[{p:[13,1,616],t:7,e:"ui-display",a:{title:"Personal Gene Therapy"},f:[{p:[14,3,663],t:7,e:"ui-section",f:[{p:[15,2,678],t:7,e:"span",f:["Applicable gene therapy treatments:"]}]}," ",{p:[17,3,747],t:7,e:"ui-section",f:[{p:[18,2,762],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceA",p:[18,47,807]},'"}']},f:[{t:2,r:"data.choiceA",p:[18,67,827]}]}," ",{p:[19,2,858],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceB",p:[19,47,903]},'"}']},f:[{t:2,r:"data.choiceB",p:[19,67,923]}]}]}]}],n:50,x:{r:["data.completed","data.used"],s:"_0&&!_1"},p:[12,1,578]}]},e.exports=a.extend(r.exports)},{205:205}],248:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,24],t:7,e:"ui-display",a:{title:[{t:2,r:"data.question",p:[2,21,42]}]},f:[{p:[3,5,66],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,9,118],t:7,e:"ui-button",a:{action:"vote",params:['{"answer": "',{t:2,r:"answer",p:[6,45,174]},'"}'],style:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[7,18,206]}]},f:[{t:2,r:"answer",p:[7,53,241]}," (",{t:2,r:"amount",p:[7,65,253]},")"]}],n:52,r:"data.answers",p:[4,7,86]}]}]}],n:50,r:"data.shaking",p:[1,1,0]},{t:4,n:51,f:[{p:[13,3,353],t:7,e:"ui-notice",f:["The eightball is not currently being shaken."]}],r:"data.shaking"}]},e.exports=a.extend(r.exports)},{205:205}],249:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,5,17],t:7,e:"span",f:["Time Until Launch: ",{t:2,r:"data.timer_str",p:[2,30,42]}]}]}," ",{p:[4,1,83],t:7,e:"ui-notice",f:[{p:[5,3,98],t:7,e:"span",f:["Engines: ",{t:2,x:{r:["data.engines_started"],s:'_0?"Online":"Idle"'},p:[5,18,113]}]}]}," ",{p:[7,1,180],t:7,e:"ui-display",a:{title:"Early Launch"},f:[{p:[8,2,216],t:7,e:"span",f:["Authorizations Remaining: ",{t:2,x:{r:["data.emagged","data.authorizations_remaining"],s:'_0?"ERROR":_1'},p:[9,2,250]}]}," ",{p:[10,2,318],t:7,e:"ui-button",a:{icon:"exclamation-triangle",action:"authorize",style:"danger",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[12,10,404]}]},f:["AUTHORIZE"]}," ",{p:[15,2,473],t:7,e:"ui-button",a:{icon:"minus",action:"repeal",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[16,10,523]}]},f:["Repeal"]}," ",{p:[19,2,589],t:7,e:"ui-button",a:{icon:"close",action:"abort",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[20,10,638]}]},f:["Repeal All"]}]}," ",{p:[24,1,722],t:7,e:"ui-display",a:{title:"Authorizations"},f:[{t:4,f:[{p:[26,3,793],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{t:2,r:"name",p:[26,34,824]}," (",{t:2,r:"job",p:[26,44,834]},")"]}],n:52,r:"data.authorizations",p:[25,2,760]},{t:4,n:51,f:[{p:[28,3,870],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:["No authorizations."]}],r:"data.authorizations"}]}]},e.exports=a.extend(r.exports)},{205:205}],250:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.hidden_message",p:[3,5,50]}]}," ",{p:[5,3,94],t:7,e:"ui-section",a:{label:"Created On"},f:[{t:2,r:"data.realdate",p:[6,5,131]}]}," ",{p:[8,3,169],t:7,e:"ui-section",a:{label:"Approval"},f:[{p:[9,5,204],t:7,e:"ui-button",a:{icon:"arrow-up",state:[{t:2,x:{r:["data.is_creator","data.has_liked"],s:'_0?"disabled":_1?"selected":null'},p:[11,14,252]}],action:"like"},f:[{t:2,r:"data.num_likes",p:[12,21,344]}]}," ",{p:[13,5,380],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.is_creator","data.has_liked","data.has_disliked"],s:'_0?"disabled":!_1&&!_2?"selected":null'},p:[15,14,426]}],action:"neutral"}}," ",{p:[17,5,562],t:7,e:"ui-button",a:{icon:"arrow-down",state:[{t:2,x:{r:["data.is_creator","data.has_disliked"],s:'_0?"disabled":_1?"selected":null'},p:[19,14,612]}],action:"dislike"},f:[{t:2,r:"data.num_dislikes",p:[20,24,710]}]}]}]}," ",{t:4,f:[{p:[24,3,805],t:7,e:"ui-display",a:{title:"Admin Panel"},f:[{p:[25,5,843],t:7,e:"ui-section",a:{label:"Creator Ckey"},f:[{t:2,r:"data.creator_key",p:[25,38,876]}]}," ",{p:[26,5,915],t:7,e:"ui-section",a:{label:"Creator Character Name"},f:[{t:2,r:"data.creator_name",p:[26,48,958]}]}," ",{p:[27,5,998],t:7,e:"ui-button",a:{icon:"remove",action:"delete",style:"danger"},f:["Delete"]}]}],n:50,r:"data.admin_mode",p:[23,1,778]}]},e.exports=a.extend(r.exports)},{205:205}],251:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,15],t:7,e:"span",f:["The requested interface (",{t:2,r:"config.interface",p:[2,34,46]},") was not found. Does it exist?"]}]}]},e.exports=a.extend(r.exports)},{205:205}],252:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={computed:{seclevelState:function(){switch(this.get("data.seclevel")){case"blue":return"average";case"red":return"bad";case"delta":return"bad bold";default:return"good"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[16,1,323],t:7,e:"ui-display",f:[{p:[17,5,341],t:7,e:"ui-section",a:{label:"Alert Level"},f:[{p:[18,9,383],t:7,e:"span",a:{"class":[{t:2,r:"seclevelState",p:[18,22,396]}]},f:[{t:2,x:{r:["text","data.seclevel"],s:"_0.titleCase(_1)"},p:[18,41,415]}]}]}," ",{p:[20,5,480],t:7,e:"ui-section",a:{label:"Controls"},f:[{p:[21,9,519],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.alarm"],s:'_0?"close":"bell-o"'},p:[21,26,536]}],action:[{t:2,x:{r:["data.alarm"],s:'_0?"reset":"alarm"'},p:[21,71,581]}]},f:[{t:2,x:{r:["data.alarm"],s:'_0?"Reset":"Activate"'},p:[22,13,631]}]}]}," ",{t:4,f:[{p:[25,7,733],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[26,9,771],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[24,5,705]}]}]},e.exports=a.extend(r.exports)},{205:205}],253:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[2,1,31],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,2,60],t:7,e:"ui-button",a:{icon:"power-off",style:[{t:2,x:{r:["data.power"],s:'_0?"selected":"danger"'},p:[3,37,95]}],action:"power"},f:[{t:2,x:{r:["data.power"],s:'_0?"Enabled":"Disabled"'},p:[3,92,150]}]}]}," ",{p:[5,1,218],t:7,e:"ui-section",a:{label:"Tag"},f:[{p:[6,2,245],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:[{t:2,r:"data.tag",p:[6,43,286]}]}]}," ",{p:[8,1,327],t:7,e:"ui-section",a:{label:"Scanning mode"},f:[{p:[9,2,364],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.updating"],s:'_0?"unlock":"lock"'},p:[9,18,380]}],style:[{t:2,x:{r:["data.updating"],s:'_0?null:"danger"'},p:[9,63,425]}],action:"updating",tooltip:"Toggle between automatic scanning or scan only when a button is pressed.","tooltip-side":"right"},f:[{t:2,x:{r:["data.updating"],s:'_0?"AUTO":"MANUAL"'},p:[9,221,583]}]}]}," ",{p:[11,1,649],t:7,e:"ui-section",a:{label:"Detection range"},f:[{p:[12,2,688],t:7,e:"ui-button",a:{icon:"refresh",style:[{t:2,x:{r:["data.globalmode"],s:'_0?null:"selected"'},p:[12,35,721]}],action:"globalmode",tooltip:"Local sector or whole region scanning.","tooltip-side":"right"},f:[{t:2,x:{r:["data.globalmode"],s:'_0?"MAXIMUM":"LOCAL"'},p:[12,165,851]}]}]}]}," ",{t:4,f:[{p:[16,2,957],t:7,e:"ui-display",a:{title:"Current Location"},f:[{p:[17,3,998],t:7,e:"span",f:[{t:2,r:"data.current",p:[17,9,1004]}]}]}," ",{p:[20,2,1048],t:7,e:"ui-display",a:{title:"Detected Signals"},f:[{t:4,f:[{p:[22,3,1114],t:7,e:"ui-section",a:{label:[{t:2,r:"entrytag",p:[22,21,1132]}]},f:[{p:[23,3,1149],t:7,e:"span",f:[{t:2,r:"area",p:[23,9,1155]}," (",{t:2,r:"coord",p:[23,19,1165]},")"]}," ",{t:4,f:[{p:[25,4,1209],t:7,e:"span",f:["Dist: ",{t:2,r:"dist",p:[25,16,1221]},"m Dir: ",{t:2,r:"degrees",p:[25,31,1236]},"° (",{t:2,r:"direction",p:[25,45,1250]},")"]}],n:50,r:"direction",p:[24,3,1187]}]}],n:52,r:"data.signals",p:[21,2,1088]}]}],n:50,r:"data.power",p:[15,1,936]}]},e.exports=a.extend(r.exports)},{205:205}],254:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Labor Camp Teleporter"},f:[{p:[2,2,45],t:7,e:"ui-section",a:{label:"Teleporter Status"},f:[{p:[3,3,87],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.teleporter"],s:'_0?"good":"bad"'},p:[3,16,100]}]},f:[{t:2,x:{r:["data.teleporter"],s:'_0?"Connected":"Not connected"'},p:[3,54,138]}]}]}," ",{t:4,f:[{p:[6,4,244],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[7,5,279],t:7,e:"span",f:[{t:2,r:"data.teleporter_location",p:[7,11,285]}]}]}," ",{p:[9,4,343],t:7,e:"ui-section",a:{label:"Locked status"},f:[{p:[10,5,383],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"lock":"unlock"'},p:[10,22,400]}],action:"teleporter_lock"},f:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"Locked":"Unlocked"'},p:[10,93,471]}]}," ",{p:[11,5,537],t:7,e:"ui-button",a:{action:"toggle_open"},f:[{t:2,x:{r:["data.teleporter_state_open"],s:'_0?"Open":"Closed"'},p:[11,37,569]}]}]}],n:50,r:"data.teleporter",p:[5,3,216]},{t:4,n:51,f:[{p:[14,4,666],t:7,e:"span",f:[{p:[14,10,672],t:7,e:"ui-button",a:{action:"scan_teleporter"},f:["Scan Teleporter"]}]}],r:"data.teleporter"}]}," ",{p:[17,1,770],t:7,e:"ui-display",a:{title:"Labor Camp Beacon"},f:[{p:[18,2,811],t:7,e:"ui-section",a:{label:"Beacon Status"},f:[{p:[19,3,849],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.beacon"],s:'_0?"good":"bad"'},p:[19,16,862]}]},f:[{t:2,x:{r:["data.beacon"],s:'_0?"Connected":"Not connected"'},p:[19,50,896]}]}]}," ",{t:4,f:[{p:[22,3,992],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[23,4,1026],t:7,e:"span",f:[{t:2,r:"data.beacon_location",p:[23,10,1032]}]}]}],n:50,r:"data.beacon",p:[21,2,969]},{t:4,n:51,f:[{p:[26,4,1097],t:7,e:"span",f:[{p:[26,10,1103],t:7,e:"ui-button",a:{action:"scan_beacon"},f:["Scan Beacon"]}]}],r:"data.beacon"}]}," ",{p:[29,1,1193],t:7,e:"ui-display",a:{title:"Prisoner details"},f:[{p:[30,2,1233],t:7,e:"ui-section",a:{label:"Prisoner ID"},f:[{p:[31,3,1269],t:7,e:"ui-button",a:{action:"handle_id"},f:[{t:2,x:{r:["data.id","data.id_name"],s:'_0?_1:"-------------"'},p:[31,33,1299]}]}]}," ",{t:4,f:[{p:[34,2,1392],t:7,e:"ui-section",a:{label:"Set ID goal"},f:[{p:[35,4,1429],t:7,e:"ui-button",a:{action:"set_goal"},f:[{t:2,r:"data.goal",p:[35,33,1458]}]}]}],n:50,r:"data.id",p:[33,2,1374]}," ",{p:[38,2,1512],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[39,3,1545],t:7,e:"span",f:[{t:2,x:{r:["data.prisoner.name"],s:'_0?_0:"No Occupant"'},p:[39,9,1551]}]}]}," ",{t:4,f:[{p:[42,3,1661],t:7,e:"ui-section",a:{label:"Criminal Status"},f:[{p:[43,4,1702],t:7,e:"span",f:[{t:2,r:"data.prisoner.crimstat",p:[43,10,1708]}]}]}],n:50,r:"data.prisoner",p:[41,2,1636]}]}," ",{p:[47,1,1785],t:7,e:"ui-display",f:[{p:[48,2,1800],t:7,e:"center",f:[{p:[48,10,1808],t:7,e:"ui-button",a:{action:"teleport",state:[{t:2,x:{r:["data.can_teleport"],s:'_0?null:"disabled"'},p:[48,45,1843]}]},f:["Process Prisoner"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],255:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,15],t:7,e:"center",f:[{p:[2,10,23],t:7,e:"ui-button",a:{action:"handle_id"},f:[{t:2,x:{r:["data.id","data.id_name"],s:'_0?_1:"-------------"'},p:[2,40,53]}]}]}]}," ",{p:[4,1,135],t:7,e:"ui-display",a:{title:"Stored Items"},f:[{t:4,f:[{p:[6,3,194],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[6,22,213]}]},f:[{p:[7,4,228],t:7,e:"ui-button",a:{action:"release_items",params:['{"mobref":',{t:2, + r:"mob",p:[7,56,280]},"}"],state:[{t:2,x:{r:["data.can_reclaim"],s:'_0?null:"disabled"'},p:[7,72,296]}]},f:["Drop Items"]}]}],n:52,r:"data.mobs",p:[5,2,171]}]}]},e.exports=a.extend(r.exports)},{205:205}],256:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,3,70],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.emagged"],s:'_0?"un":null'},p:[3,20,87]},"lock"],state:[{t:2,x:{r:["data.can_toggle_safety"],s:'_0?null:"disabled"'},p:[3,63,130]}],action:"safety"},f:["Safeties: ",{p:[4,14,209],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.emagged"],s:'_0?"bad":"good"'},p:[4,27,222]}]},f:[{t:2,x:{r:["data.emagged"],s:'_0?"OFF":"ON"'},p:[4,62,257]}]}]}]},t:7,e:"ui-display",a:{title:"Default Programs",button:0},f:[" ",{t:4,f:[{p:[8,2,363],t:7,e:"ui-button",a:{action:"load_program",params:['{"type": ',{t:2,r:"type",p:[8,52,413]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[8,70,431]}]},f:[{t:2,r:"name",p:[9,5,483]}," "]},{p:[10,14,506],t:7,e:"br"}],n:52,r:"data.default_programs",p:[7,2,329]}]}," ",{t:4,f:[{p:[14,2,562],t:7,e:"ui-display",a:{title:"Dangerous Programs"},f:[{t:4,f:[{p:[16,4,638],t:7,e:"ui-button",a:{icon:"warning",action:"load_program",params:['{"type": ',{t:2,r:"type",p:[16,69,703]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[16,87,721]}]},f:[{t:2,r:"name",p:[17,5,773]}," "]},{p:[18,16,798],t:7,e:"br"}],n:52,r:"data.emag_programs",p:[15,3,605]}]}],n:50,r:"data.emagged",p:[13,1,539]}]},e.exports=a.extend(r.exports)},{205:205}],257:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={computed:{occupantStatState:function(){switch(this.get("data.occupant.stat")){case 0:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[15,1,280],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[16,3,313],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[17,3,346],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[17,9,352]}]}]}," ",{t:4,f:[{p:[20,5,466],t:7,e:"ui-section",a:{label:"State"},f:[{p:[21,7,500],t:7,e:"span",a:{"class":[{t:2,r:"occupantStatState",p:[21,20,513]}]},f:[{t:2,x:{r:["data.occupant.stat"],s:'_0==0?"Conscious":_0==1?"Unconcious":"Dead"'},p:[21,43,536]}]}]}],n:50,r:"data.occupied",p:[19,3,439]}]}," ",{p:[25,1,680],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[26,2,712],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[27,5,743],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[27,22,760]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[27,71,809]}]}]}," ",{p:[29,3,874],t:7,e:"ui-section",a:{label:"Uses"},f:[{t:2,r:"data.ready_implants",p:[30,5,905]}," ",{t:4,f:[{p:[32,7,969],t:7,e:"span",a:{"class":"fa fa-cog fa-spin"}}],n:50,r:"data.replenishing",p:[31,5,936]}]}," ",{p:[35,3,1036],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[36,7,1073],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","data.ready_implants","data.ready"],s:'_0&&_1>0&&_2?null:"disabled"'},p:[36,25,1091]}],action:"implant"},f:[{t:2,x:{r:["data.ready","data.special_name"],s:'_0?(_1?_1:"Implant"):"Recharging"'},p:[37,9,1198]}," "]},{p:[38,19,1302],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{205:205}],258:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[15,3,296],t:7,e:"ui-notice",f:[{p:[16,5,313],t:7,e:"span",f:["Wipe in progress!"]}]}],n:50,r:"data.wiping",p:[14,1,273]},{p:{button:[{t:4,f:[{p:[22,7,479],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.isDead"],s:'_0?"disabled":null'},p:[22,38,510]}],action:"wipe"},f:[{t:2,x:{r:["data.wiping"],s:'_0?"Stop Wiping":"Wipe"'},p:[22,89,561]}," AI"]}],n:50,r:"data.name",p:[21,5,454]}]},t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.name"],s:'_0||"Empty Card"'},p:[19,19,388]}],button:0},f:[" ",{t:4,f:[{p:[26,5,672],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[27,9,709],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"bad":"good"'},p:[27,22,722]}]},f:[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"Offline":"Operational"'},p:[27,76,776]}]}]}," ",{p:[29,5,871],t:7,e:"ui-section",a:{label:"Software Integrity"},f:[{p:[30,7,918],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[30,40,951]}],state:[{t:2,r:"healthState",p:[30,64,975]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[30,81,992]},"%"]}]}," ",{p:[32,5,1055],t:7,e:"ui-section",a:{label:"Laws"},f:[{t:4,f:[{p:[34,9,1117],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[34,33,1141]}]},{p:[34,45,1153],t:7,e:"br"}],n:52,r:"data.laws",p:[33,7,1088]}]}," ",{p:[37,5,1200],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[38,7,1237],t:7,e:"ui-button",a:{icon:"signal",style:[{t:2,x:{r:["data.wireless"],s:'_0?"selected":null'},p:[38,39,1269]}],action:"wireless"},f:["Wireless Activity"]}," ",{p:[39,7,1363],t:7,e:"ui-button",a:{icon:"microphone",style:[{t:2,x:{r:["data.radio"],s:'_0?"selected":null'},p:[39,43,1399]}],action:"radio"},f:["Subspace Radio"]}]}],n:50,r:"data.name",p:[25,3,649]}]}]},e.exports=a.extend(r.exports)},{205:205}],259:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,23],t:7,e:"ui-notice",f:[{p:[3,3,38],t:7,e:"span",f:["Waiting for another device to confirm your request..."]}]}],n:50,r:"data.waiting",p:[1,1,0]},{t:4,n:51,f:[{p:[6,2,132],t:7,e:"ui-display",f:[{p:[7,3,148],t:7,e:"ui-section",f:[{t:4,f:[{p:[9,5,197],t:7,e:"ui-button",a:{icon:"check",action:"auth_swipe"},f:["Authorize ",{t:2,r:"data.auth_required",p:[9,59,251]}]}],n:50,r:"data.auth_required",p:[8,4,165]},{t:4,n:51,f:[{p:[11,5,304],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.red_alert"],s:'_0?"disabled":null'},p:[11,38,337]}],action:"red_alert"},f:["Red Alert"]}," ",{p:[12,5,423],t:7,e:"ui-button",a:{icon:"wrench",state:[{t:2,x:{r:["data.emergency_maint"],s:'_0?"disabled":null'},p:[12,37,455]}],action:"emergency_maint"},f:["Emergency Maintenance Access"]}," ",{p:[13,5,572],t:7,e:"ui-button",a:{icon:"warning",state:"null",action:"bsa_unlock"},f:["Bluespace Artillery Unlock"]}],r:"data.auth_required"}]}]}],r:"data.waiting"}]},e.exports=a.extend(r.exports)},{205:205}],260:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ore values"},f:[{t:4,f:[{p:[3,3,57],t:7,e:"ui-section",a:{label:[{t:2,r:"ore",p:[3,22,76]}]},f:[{p:[4,4,90],t:7,e:"span",f:[{t:2,r:"value",p:[4,10,96]}]}]}],n:52,r:"data.ores",p:[2,2,34]}]}," ",{p:[8,1,158],t:7,e:"ui-display",a:{title:"Points"},f:[{p:[9,2,188],t:7,e:"ui-section",a:{label:"ID"},f:[{p:[10,3,215],t:7,e:"ui-button",a:{action:"handle_id"},f:[{t:2,x:{r:["data.id","data.id_name"],s:'_0?_1:"-------------"'},p:[10,33,245]}]}]}," ",{t:4,f:[{p:[13,3,339],t:7,e:"ui-section",a:{label:"Points collected"},f:[{p:[14,4,381],t:7,e:"span",f:[{t:2,r:"data.points",p:[14,10,387]}]}]}," ",{p:[16,3,430],t:7,e:"ui-section",a:{label:"Goal"},f:[{p:[17,4,460],t:7,e:"span",f:[{t:2,r:"data.goal",p:[17,10,466]}]}]}," ",{p:[19,3,507],t:7,e:"ui-section",a:{label:"Unclaimed points"},f:[{p:[20,4,549],t:7,e:"span",f:[{t:2,r:"data.unclaimed_points",p:[20,10,555]}]}," ",{p:[21,4,592],t:7,e:"ui-button",a:{action:"claim_points",state:[{t:2,x:{r:["data.unclaimed_points"],s:'_0?null:"disabled"'},p:[21,43,631]}]},f:["Claim points"]}]}],n:50,r:"data.id",p:[12,2,320]}]}," ",{p:[25,1,745],t:7,e:"ui-display",f:[{p:[26,2,760],t:7,e:"center",f:[{p:[27,3,772],t:7,e:"ui-button",a:{action:"move_shuttle",state:[{t:2,x:{r:["data.can_go_home"],s:'_0?null:"disabled"'},p:[27,42,811]}]},f:["Move shuttle"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],261:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Known Languages"},f:[{t:4,f:[{p:[3,5,70],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[3,23,88]}]},f:[{p:[4,7,105],t:7,e:"span",f:[{t:2,r:"desc",p:[4,13,111]}]}," ",{p:[5,7,134],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[5,19,146]}]}," ",{t:4,f:[{p:[7,9,192],t:7,e:"span",f:["(gained from mob)"]}],n:50,r:"shadow",p:[6,7,168]}," ",{p:[9,7,245],t:7,e:"span",f:[{t:2,x:{r:["can_speak"],s:'_0?"Can Speak":"Cannot Speak"'},p:[9,13,251]}]}," ",{t:4,f:[{p:[11,9,342],t:7,e:"ui-button",a:{action:"select_default",params:['{"language_name":"',{t:2,r:"name",p:[13,37,425]},'"}'],style:[{t:2,x:{r:["is_default","can_speak"],s:'_0?"selected":_1?null:"disabled"'},p:[14,18,455]}]},f:[{t:2,x:{r:["is_default"],s:'_0?"Default Language":"Select as Default"'},p:[15,10,526]}]}],n:50,r:"data.is_living",p:[10,7,310]}," ",{t:4,f:[{t:4,f:[{p:[20,11,685],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[20,72,746]},'"}']},f:["Grant"]}],n:50,r:"shadow",p:[19,9,659]},{t:4,n:51,f:[{p:[22,11,805],t:7,e:"ui-button",a:{action:"remove_language",params:['{"language_name":"',{t:2,r:"name",p:[22,73,867]},'"}']},f:["Remove"]}],r:"shadow"}],n:50,r:"data.admin_mode",p:[18,7,626]}]}],n:52,r:"data.languages",p:[2,3,40]}]}," ",{t:4,f:[{t:4,f:[{p:[30,5,1033],t:7,e:"ui-button",a:{action:"toggle_omnitongue",style:[{t:2,x:{r:["data.omnitongue"],s:'_0?"selected":null'},p:[32,14,1092]}]},f:["Omnitongue ",{t:2,x:{r:["data.omnitongue"],s:'_0?"Enabled":"Disabled"'},p:[33,19,1152]}]}],n:50,r:"data.is_living",p:[29,3,1005]}," ",{p:[36,3,1231],t:7,e:"ui-display",a:{title:"Unknown Languages"},f:[{t:4,f:[{p:[38,7,1315],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[38,25,1333]}]},f:[{p:[39,9,1352],t:7,e:"span",f:[{t:2,r:"desc",p:[39,15,1358]}]}," ",{p:[40,9,1383],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[40,21,1395]}]}," ",{p:[41,9,1419],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[43,37,1502]},'"}']},f:["Grant"]}]}],n:52,r:"data.unknown_languages",p:[37,5,1275]}]}],n:50,r:"data.admin_mode",p:[28,1,978]}]},e.exports=a.extend(r.exports)},{205:205}],262:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{t:4,f:[{t:4,f:[{p:[4,4,84],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[5,5,118],t:7,e:"span",f:["Launchpad closed."]}]}],n:50,r:"data.pad_closed",p:[3,3,56]},{t:4,n:51,f:[{p:[8,4,183],t:7,e:"ui-section",a:{label:"Launchpad"},f:[{p:[9,4,218],t:7,e:"span",f:[{p:[9,10,224],t:7,e:"b",f:[{t:2,r:"data.pad_name",p:[9,13,227]}]}]},{p:[9,41,255],t:7,e:"br"}," ",{p:[10,4,264],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:["Rename"]}," ",{p:[11,4,328],t:7,e:"ui-button",a:{icon:"remove",style:"danger",action:"remove"},f:["Remove"]}]}," ",{p:[14,4,427],t:7,e:"ui-section",a:{label:"Set Target"},f:[{p:[15,4,463],t:7,e:"table",f:[{p:[16,4,475],t:7,e:"tr",f:[{p:[17,5,485],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[17,38,518],t:7,e:"ui-button",a:{action:"up-left"},f:["↖"]}]}," ",{p:[18,5,570],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[18,57,622],t:7,e:"ui-button",a:{action:"up"},f:["↑"]}]}," ",{p:[19,5,669],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[19,56,720],t:7,e:"ui-button",a:{action:"up-right"},f:["↗"]}]}]}," ",{p:[21,4,782],t:7,e:"tr",f:[{p:[22,5,792],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[22,38,825],t:7,e:"ui-button",a:{action:"left",style:"width:35px!important"},f:["â†"]}]}," ",{p:[23,5,903],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[23,57,955],t:7,e:"ui-button",a:{action:"reset"},f:["R"]}]}," ",{p:[24,5,1005],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[24,56,1056],t:7,e:"ui-button",a:{action:"right"},f:["→"]}]}]}," ",{p:[26,4,1115],t:7,e:"tr",f:[{p:[27,5,1125],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[27,38,1158],t:7,e:"ui-button",a:{action:"down-left"},f:["↙"]}]}," ",{p:[28,5,1212],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[28,57,1264],t:7,e:"ui-button",a:{action:"down"},f:["↓"]}]}," ",{p:[29,5,1313],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[29,56,1364],t:7,e:"ui-button",a:{action:"down-right"},f:["↘"]}]}]}]}]}," ",{p:[33,4,1459],t:7,e:"ui-section",a:{label:"Current Target"},f:[{p:[34,5,1500],t:7,e:"span",f:[{t:2,r:"data.abs_y",p:[34,11,1506]}," ",{t:2,r:"data.north_south",p:[34,26,1521]}]},{p:[34,53,1548],t:7,e:"br"}," ",{p:[35,5,1558],t:7,e:"span",f:[{t:2,r:"data.abs_x",p:[35,11,1564]}," ",{t:2,r:"data.east_west",p:[35,26,1579]}]}]}," ",{p:[37,4,1627],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[38,5,1662],t:7,e:"ui-button",a:{action:"launch",tooltip:"Teleport everything on the pad to the target.","tooltip-side":"down"},f:["Launch"]}," ",{p:[39,5,1789],t:7,e:"ui-button",a:{action:"pull",tooltip:"Teleport everything from the target to the pad.","tooltip-side":"down"},f:["Pull"]}]}],r:"data.pad_closed"}],n:50,r:"data.has_pad",p:[2,2,32]},{t:4,n:51,f:[{p:[45,3,1956],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[46,4,1989],t:7,e:"span",f:["No launchpad found. Link the remote to a launchpad."]}]}],r:"data.has_pad"}]}]},e.exports=a.extend(r.exports)},{205:205}],263:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={data:{mechChargeState:function(t){var e=this.get("data.recharge_port.mech.cell.maxcharge");return t>=e/1.5?"good":t>=e/3?"average":"bad"},mechHealthState:function(t){var e=this.get("data.recharge_port.mech.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[20,1,545],t:7,e:"ui-display",a:{title:"Mech Status"},f:[{t:4,f:[{t:4,f:[{p:[23,4,646],t:7,e:"ui-section",a:{label:"Integrity"},f:[{p:[24,6,683],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,27,704]}],value:[{t:2,r:"adata.recharge_port.mech.health",p:[24,74,751]}],state:[{t:2,x:{r:["mechHealthState","adata.recharge_port.mech.health"],s:"_0(_1)"},p:[24,117,794]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.health"],s:"Math.round(_0)"},p:[24,171,848]},"/",{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,219,896]}]}]}," ",{t:4,f:[{t:4,f:[{p:[28,5,1061],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[28,31,1087],t:7,e:"span",a:{"class":"bad"},f:["Cell Critical Failure"]}]}],n:50,r:"data.recharge_port.mech.cell.critfail",p:[27,3,1010]},{t:4,n:51,f:[{p:[30,11,1170],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,13,1210],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.cell.maxcharge",p:[31,34,1231]}],value:[{t:2,r:"adata.recharge_port.mech.cell.charge",p:[31,86,1283]}],state:[{t:2,x:{r:["mechChargeState","adata.recharge_port.mech.cell.charge"],s:"_0(_1)"},p:[31,134,1331]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.cell.charge"],s:"Math.round(_0)"},p:[31,193,1390]},"/",{t:2,x:{r:["adata.recharge_port.mech.cell.maxcharge"],s:"Math.round(_0)"},p:[31,246,1443]}]}]}],r:"data.recharge_port.mech.cell.critfail"}],n:50,r:"data.recharge_port.mech.cell",p:[26,4,970]},{t:4,n:51,f:[{p:[35,3,1558],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[35,29,1584],t:7,e:"span",a:{"class":"bad"},f:["Cell Missing"]}]}],r:"data.recharge_port.mech.cell"}],n:50,r:"data.recharge_port.mech",p:[22,2,610]},{t:4,n:51,f:[{p:[38,4,1662],t:7,e:"ui-section",f:["Mech Not Found"]}],r:"data.recharge_port.mech"}],n:50,r:"data.recharge_port",p:[21,3,581]},{t:4,n:51,f:[{p:[41,5,1729],t:7,e:"ui-section",f:["Recharging Port Not Found"]}," ",{p:[42,2,1782],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}],r:"data.recharge_port"}]}]},e.exports=a.extend(r.exports)},{205:205}],264:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{t:4,f:[{p:[3,5,45],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[4,7,88],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[4,24,105]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[4,75,156]}]}]}],n:50,r:"data.siliconUser",p:[2,3,15]},{t:4,n:51,f:[{p:[7,5,247],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[7,31,273]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[10,1,358],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[11,3,389],t:7,e:"ui-section",a:{label:"Power"},f:[{t:4,f:[{p:[13,7,470],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[13,24,487]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[13,68,531]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[13,116,579]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[12,5,421]},{t:4,n:51,f:[{p:[15,7,639],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.on"],s:'_0?"good":"bad"'},p:[15,20,652]}],state:[{t:2,x:{r:["data.cell"],s:'_0?null:"disabled"'},p:[15,57,689]}]},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[15,92,724]}]}],x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"}}]}," ",{p:[18,3,791],t:7,e:"ui-section",a:{label:"Cell"},f:[{p:[19,5,822],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.cell"],s:'_0?null:"bad"'},p:[19,18,835]}]},f:[{t:2,x:{r:["data.cell","data.cellPercent"],s:'_0?_1+"%":"No Cell"'},p:[19,48,865]}]}]}," ",{p:[21,3,943],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[22,5,974],t:7,e:"span",a:{"class":[{t:2,r:"data.modeStatus",p:[22,18,987]}]},f:[{t:2,r:"data.mode",p:[22,39,1008]}]}]}," ",{p:[24,3,1049],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[25,5,1080],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.load"],s:'_0?"good":"average"'},p:[25,18,1093]}]},f:[{t:2,x:{r:["data.load"],s:'_0?_0:"None"'},p:[25,54,1129]}]}]}," ",{p:[27,3,1191],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[28,5,1229],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.destination"],s:'_0?"good":"average"'},p:[28,18,1242]}]},f:[{t:2,x:{r:["data.destination"],s:'_0?_0:"None"'},p:[28,60,1284]}]}]}]}," ",{t:4,f:[{p:{button:[{t:4,f:[{p:[35,9,1513],t:7,e:"ui-button",a:{icon:"eject",action:"unload"},f:["Unload"]}],n:50,r:"data.load",p:[34,7,1486]}," ",{t:4,f:[{p:[38,9,1623],t:7,e:"ui-button",a:{icon:"eject",action:"ejectpai"},f:["Eject PAI"]}],n:50,r:"data.haspai",p:[37,7,1594]}," ",{p:[40,7,1709],t:7,e:"ui-button",a:{icon:"pencil",action:"setid"},f:["Set ID"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[42,5,1791],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[43,7,1831],t:7,e:"ui-button",a:{icon:"pencil",action:"destination"},f:["Set Destination"]}," ",{p:[44,7,1912],t:7,e:"ui-button",a:{icon:"stop",action:"stop"},f:["Stop"]}," ",{p:[45,7,1973],t:7,e:"ui-button",a:{icon:"play",action:"go"},f:["Go"]}]}," ",{p:[47,5,2047],t:7,e:"ui-section",a:{label:"Home"},f:[{p:[48,7,2080],t:7,e:"ui-button",a:{icon:"home",action:"home"},f:["Go Home"]}," ",{p:[49,7,2144],t:7,e:"ui-button",a:{icon:"pencil",action:"sethome"},f:["Set Home"]}]}," ",{p:[51,5,2231],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[52,7,2268],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoReturn"],s:'_0?"check-square-o":"square-o"'},p:[52,24,2285]}],style:[{t:2,x:{r:["data.autoReturn"],s:'_0?"selected":null'},p:[52,84,2345]}],action:"autoret"},f:["Auto-Return Home"]}," ",{p:[54,7,2449],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoPickup"],s:'_0?"check-square-o":"square-o"'},p:[54,24,2466]}],style:[{t:2,x:{r:["data.autoPickup"],s:'_0?"selected":null'},p:[54,84,2526]}],action:"autopick"},f:["Auto-Pickup Crate"]}," ",{p:[56,7,2632],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"check-square-o":"square-o"'},p:[56,24,2649]}],style:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"selected":null'},p:[56,88,2713]}],action:"report"},f:["Report Deliveries"]}]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[31,1,1373]}]},e.exports=a.extend(r.exports)},{205:205}],265:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Relay"},f:[{t:4,f:[{p:[3,3,57],t:7,e:"h2",f:["NETWORK BUFFERS OVERLOADED"]}," ",{p:[4,3,96],t:7,e:"h3",f:["Overload Recovery Mode"]}," ",{p:[5,3,131],t:7,e:"i",f:["This system is suffering temporary outage due to overflow of traffic buffers. Until buffered traffic is processed, all further requests will be dropped. Frequent occurences of this error may indicate insufficient hardware capacity of your network. Please contact your network planning department for instructions on how to resolve this issue."]}," ",{p:[6,3,484],t:7,e:"h3",f:["ADMINISTRATIVE OVERRIDE"]}," ",{p:[7,3,520],t:7,e:"b",f:["CAUTION - Data loss may occur"]}," ",{p:[8,3,562],t:7,e:"ui-button",a:{icon:"signal",action:"restart"},f:["Purge buffered traffic"]}],n:50,r:"data.dos_crashed",p:[2,2,29]},{t:4,n:51,f:[{p:[12,3,663],t:7,e:"ui-section",a:{label:"Relay status"},f:[{p:[13,4,701],t:7,e:"ui-button",a:{icon:"power-off",action:"toggle"},f:[{t:2,x:{r:["data.enabled"],s:'_0?"ENABLED":"DISABLED"'},p:[14,6,752]}]}]}," ",{p:[18,3,836],t:7,e:"ui-section",a:{label:"Network buffer status"},f:[{t:2,r:"data.dos_overload",p:[19,4,883]}," / ",{t:2,r:"data.dos_capacity",p:[19,28,907]}," GQ"]}],r:"data.dos_crashed"}]}]},e.exports=a.extend(r.exports)},{205:205}],266:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,320],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[18,3,363],t:7,e:"ui-notice",f:[{p:[19,5,380],t:7,e:"span",f:["Reconstruction in progress!"]}]}],n:50,r:"data.restoring",p:[17,1,337]},{p:[24,1,451],t:7,e:"ui-display",f:[{p:[26,1,467],t:7,e:"div",a:{"class":"item"},f:[{p:[27,3,489],t:7,e:"div",a:{"class":"itemLabel"},f:["Inserted AI:"]}," ",{p:[30,3,541],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[31,2,569],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",state:[{t:2,x:{r:["data.nocard"],s:'_0?"disabled":null'},p:[31,52,619]}]},f:[{t:2,x:{r:["data.name"],s:'_0?_0:"---"'},p:[31,89,656]}]}]}]}," ",{t:4,f:[{p:[36,2,744],t:7,e:"b",f:["ERROR: ",{t:2,r:"data.error",p:[36,12,754]}]}],n:50,r:"data.error",p:[35,1,723]},{t:4,n:51,f:[{p:[38,2,785],t:7,e:"h2",f:["System Status"]}," ",{p:[39,2,810],t:7,e:"div",a:{"class":"item"},f:[{p:[40,3,832],t:7,e:"div",a:{"class":"itemLabel"},f:["Current AI:"]}," ",{p:[43,3,885],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.name",p:[44,4,915]}]}," ",{p:[46,3,942],t:7,e:"div",a:{"class":"itemLabel"},f:["Status:"]}," ",{p:[49,3,991],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["Nonfunctional"],n:50,r:"data.isDead",p:[50,4,1021]},{t:4,n:51,f:["Functional"],r:"data.isDead"}]}," ",{p:[56,3,1114],t:7,e:"div",a:{"class":"itemLabel"},f:["System Integrity:"]}," ",{p:[59,3,1173],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[60,4,1203],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[60,37,1236]}],state:[{t:2,r:"healthState",p:[61,11,1264]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[61,28,1281]},"%"]}]}," ",{p:[63,3,1336],t:7,e:"div",a:{"class":"itemLabel"},f:["Active Laws:"]}," ",{p:[66,3,1390],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[67,4,1420],t:7,e:"table",f:[{t:4,f:[{p:[69,6,1462],t:7,e:"tr",f:[{p:[69,10,1466],t:7,e:"td",f:[{p:[69,14,1470],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[69,38,1494]}]}]}]}],n:52,r:"data.ai_laws",p:[68,5,1433]}]}]}," ",{p:[73,2,1547],t:7,e:"ui-section",a:{label:"Operations"},f:[{p:[74,3,1582],t:7,e:"ui-button",a:{icon:"plus",style:[{t:2,x:{r:["data.restoring"],s:'_0?"disabled":null'},p:[74,33,1612]}],action:"PRG_beginReconstruction"},f:["Begin Reconstruction"]}]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],267:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,1,91],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"home",params:'{"target" : "mod"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==1?"disabled":null'},p:[5,80,170]}]},f:["Access Modification"]}],n:50,r:"data.have_id_slot",p:[4,1,64]},{p:[7,1,253],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manage"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==2?"disabled":null'},p:[7,90,342]}]},f:["Job Management"]}," ",{p:[8,1,411],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manifest"}',state:[{t:2,x:{r:["data.mmode"],s:'!_0?"disabled":null'},p:[8,92,502]}]},f:["Crew Manifest"]}," ",{t:4,f:[{p:[10,1,593],t:7,e:"ui-button",a:{action:"PRG_print",icon:"print",state:[{t:2,x:{r:["data.has_id","data.mmode"],s:'!_1||_0&&_1==1?null:"disabled"'},p:[10,51,643]}]},f:["Print"]}],n:50,r:"data.have_printer",p:[9,1,566]},{t:4,f:[{p:[14,1,766],t:7,e:"div",a:{"class":"item"},f:[{p:[15,3,788],t:7,e:"h2",f:["Crew Manifest"]}," ",{p:[16,3,814],t:7,e:"br"},"Please use security record computer to modify entries.",{p:[16,61,872],t:7,e:"br"},{p:[16,65,876],t:7,e:"br"}]}," ",{t:4,f:[{p:[19,2,916],t:7,e:"div",a:{"class":"item"},f:[{t:2,r:"name",p:[20,2,937]}," - ",{t:2,r:"rank",p:[20,13,948]}]}],n:52,r:"data.manifest",p:[18,1,890]}],n:50,x:{r:["data.mmode"],s:"!_0"},p:[13,1,745]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.mmode"],s:"_0==2"},f:[{p:[25,1,1008],t:7,e:"div",a:{"class":"item"},f:[{p:[26,3,1030],t:7,e:"h2",f:["Job Management"]}]}," ",{p:[28,1,1063],t:7,e:"table",f:[{p:[29,1,1072],t:7,e:"tr",f:[{p:[29,5,1076],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,27,1098],t:7,e:"b",f:["Job"]}]},{p:[29,42,1113],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,64,1135],t:7,e:"b",f:["Slots"]}]},{p:[29,81,1152],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,103,1174],t:7,e:"b",f:["Open job"]}]},{p:[29,123,1194],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,145,1216],t:7,e:"b",f:["Close job"]}]}]}," ",{t:4,f:[{p:[32,2,1269],t:7,e:"tr",f:[{p:[32,6,1273],t:7,e:"td",f:[{t:2,r:"title",p:[32,10,1277]}]},{p:[32,24,1291],t:7,e:"td",f:[{t:2,r:"current",p:[32,28,1295]},"/",{t:2,r:"total",p:[32,40,1307]}]},{p:[32,54,1321],t:7,e:"td",f:[{p:[32,58,1325],t:7,e:"ui-button",a:{action:"PRG_open_job",params:['{"target" : "',{t:2,r:"title",p:[32,112,1379]},'"}'],state:[{t:2,x:{r:["status_open"],s:'_0?null:"disabled"'},p:[32,132,1399]}]},f:[{t:2,r:"desc_open",p:[32,169,1436]}]},{p:[32,194,1461],t:7,e:"br"}]},{p:[32,203,1470],t:7,e:"td",f:[{p:[32,207,1474],t:7,e:"ui-button",a:{action:"PRG_close_job",params:['{"target" : "',{t:2,r:"title",p:[32,262,1529]},'"}'],state:[{t:2,x:{r:["status_close"],s:'_0?null:"disabled"'},p:[32,282,1549]}]},f:[{t:2,r:"desc_close",p:[32,320,1587]}]}]}]}],n:52,r:"data.slots",p:[30,1,1244]}]}]},{t:4,n:50,x:{r:["data.mmode"],s:"!(_0==2)"},f:[" ",{p:[40,1,1665],t:7,e:"div",a:{"class":"item"},f:[{p:[41,3,1687],t:7,e:"h2",f:["Access Modification"]}]}," ",{t:4,f:[{p:[45,3,1751],t:7,e:"span",a:{"class":"alert"},f:[{p:[45,23,1771],t:7,e:"i",f:["Please insert the ID into the terminal to proceed."]}]},{p:[45,87,1835],t:7,e:"br"}],n:50,x:{r:["data.has_id"],s:"!_0"},p:[44,1,1727]},{p:[48,1,1852],t:7,e:"div",a:{"class":"item"},f:[{p:[49,3,1874],t:7,e:"div",a:{"class":"itemLabel"},f:["Target Identity:"]}," ",{p:[52,3,1930],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[53,2,1958],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "id"}'},f:[{t:2,r:"data.id_name",p:[53,72,2028]}]}]}]}," ",{p:[56,1,2076],t:7,e:"div",a:{"class":"item"},f:[{p:[57,3,2098],t:7,e:"div",a:{"class":"itemLabel"},f:["Auth Identity:"]}," ",{p:[60,3,2152],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[61,2,2180],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "auth"}'},f:[{t:2,r:"data.auth_name",p:[61,74,2252]}]}]}]}," ",{p:[64,1,2302],t:7,e:"hr"}," ",{t:4,f:[{t:4,f:[{p:[68,2,2362],t:7,e:"div",a:{"class":"item"},f:[{p:[69,4,2385],t:7,e:"h2",f:["Details"]}]}," ",{t:4,f:[{p:[73,2,2436],t:7,e:"div",a:{"class":"item"},f:[{p:[74,4,2459],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[77,4,2518],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_owner",p:[78,3,2547]}]}]}," ",{p:[81,2,2587],t:7,e:"div",a:{"class":"item"},f:[{p:[82,4,2610],t:7,e:"div",a:{"class":"itemLabel"},f:["Rank:"]}," ",{p:[85,4,2658],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_rank",p:[86,3,2687]}]}]}," ",{p:[89,2,2726],t:7,e:"div",a:{"class":"item"},f:[{p:[90,4,2749],t:7,e:"div",a:{"class":"itemLabel"},f:["Demote:"]}," ",{p:[93,4,2799],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[94,3,2828],t:7,e:"ui-button",a:{action:"PRG_terminate",icon:"gear",state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Unassigned"?"disabled":null'},p:[94,56,2881]}]},f:["Demote ",{t:2,r:"data.id_owner",p:[94,117,2942]}]}]}]}],n:50,r:"data.minor",p:[72,2,2415]},{t:4,n:51,f:[{p:[99,2,3007],t:7,e:"div",a:{"class":"item"},f:[{p:[100,4,3030],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[103,4,3089],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[104,3,3118],t:7,e:"ui-button",a:{action:"PRG_edit",icon:"pencil",params:'{"name" : "1"}'},f:[{t:2,r:"data.id_owner",p:[104,70,3185]}]}]}]}," ",{p:[108,2,3239],t:7,e:"div",a:{"class":"item"},f:[{p:[109,4,3262],t:7,e:"h2",f:["Assignment"]}]}," ",{p:[111,3,3294],t:7,e:"ui-button",a:{action:"PRG_togglea",icon:"gear"},f:[{t:2,x:{r:["data.assignments"],s:'_0?"Hide assignments":"Show assignments"'},p:[111,47,3338]}]}," ",{p:[112,2,3415],t:7,e:"div",a:{"class":"item"},f:[{p:[113,4,3438],t:7,e:"span",a:{id:"allvalue.jobsslot"},f:[]}]}," ",{p:[117,2,3495],t:7,e:"div",a:{"class":"item"},f:[{t:4,f:[{p:[119,4,3547],t:7,e:"div",a:{id:"all-value.jobs"},f:[{p:[120,3,3576],t:7,e:"table",f:[{p:[121,5,3589],t:7,e:"tr",f:[{p:[122,4,3598],t:7,e:"th",f:["Command"]}," ",{p:[123,4,3619],t:7,e:"td",f:[{p:[124,6,3630],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Captain"}',state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Captain"?"selected":null'},p:[124,83,3707]}]},f:["Captain"]}]}]}," ",{p:[127,5,3804],t:7,e:"tr",f:[{p:[128,4,3813],t:7,e:"th",f:["Special"]}," ",{p:[129,4,3834],t:7,e:"td",f:[{p:[130,6,3845],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Custom"}'},f:["Custom"]}]}]}," ",{p:[133,5,3959],t:7,e:"tr",f:[{p:[134,4,3968],t:7,e:"th",a:{style:"color: '#FFA500';"},f:["Engineering"]}," ",{p:[135,4,4019],t:7,e:"td",f:[{t:4,f:[{p:[137,5,4067],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[137,64,4126]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[137,82,4144]}]},f:[{t:2,r:"display_name",p:[137,127,4189]}]}],n:52,r:"data.engineering_jobs",p:[136,6,4030]}]}]}," ",{p:[141,5,4260],t:7,e:"tr",f:[{p:[142,4,4269],t:7,e:"th",a:{style:"color: '#008000';"},f:["Medical"]}," ",{p:[143,4,4316],t:7,e:"td",f:[{t:4,f:[{p:[145,5,4360],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[145,64,4419]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[145,82,4437]}]},f:[{t:2,r:"display_name",p:[145,127,4482]}]}],n:52,r:"data.medical_jobs",p:[144,6,4327]}]}]}," ",{p:[149,5,4553],t:7,e:"tr",f:[{p:[150,4,4562],t:7,e:"th",a:{style:"color: '#800080';"},f:["Science"]}," ",{p:[151,4,4609],t:7,e:"td",f:[{t:4,f:[{p:[153,5,4653],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[153,64,4712]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[153,82,4730]}]},f:[{t:2,r:"display_name",p:[153,127,4775]}]}],n:52,r:"data.science_jobs",p:[152,6,4620]}]}]}," ",{p:[157,5,4846],t:7,e:"tr",f:[{p:[158,4,4855],t:7,e:"th",a:{style:"color: '#DD0000';"},f:["Security"]}," ",{p:[159,4,4903],t:7,e:"td",f:[{t:4,f:[{p:[161,5,4948],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[161,64,5007]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[161,82,5025]}]},f:[{t:2,r:"display_name",p:[161,127,5070]}]}],n:52,r:"data.security_jobs",p:[160,6,4914]}]}]}," ",{p:[165,5,5141],t:7,e:"tr",f:[{p:[166,4,5150],t:7,e:"th",a:{style:"color: '#cc6600';" +-},f:["Cargo"]}," ",{p:[167,4,5195],t:7,e:"td",f:[{t:4,f:[{p:[169,5,5237],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[169,64,5296]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[169,82,5314]}]},f:[{t:2,r:"display_name",p:[169,127,5359]}]}],n:52,r:"data.cargo_jobs",p:[168,6,5206]}]}]}," ",{p:[173,5,5430],t:7,e:"tr",f:[{p:[174,4,5439],t:7,e:"th",a:{style:"color: '#808080';"},f:["Civilian"]}," ",{p:[175,4,5487],t:7,e:"td",f:[{t:4,f:[{p:[177,5,5532],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[177,64,5591]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[177,82,5609]}]},f:[{t:2,r:"display_name",p:[177,127,5654]}]}],n:52,r:"data.civilian_jobs",p:[176,6,5498]}]}]}," ",{t:4,f:[{p:[182,4,5757],t:7,e:"tr",f:[{p:[183,6,5768],t:7,e:"th",a:{style:"color: '#A52A2A';"},f:["Centcom"]}," ",{p:[184,6,5817],t:7,e:"td",f:[{t:4,f:[{p:[186,7,5862],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[186,66,5921]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[186,84,5939]}]},f:[{t:2,r:"display_name",p:[186,129,5984]}]}],n:52,r:"data.centcom_jobs",p:[185,5,5827]}]}]}],n:50,r:"data.centcom_access",p:[181,5,5725]}]}]}],n:50,r:"data.assignments",p:[118,4,3518]}]}],r:"data.minor"}," ",{t:4,f:[{p:[198,4,6153],t:7,e:"div",a:{"class":"item"},f:[{p:[199,3,6175],t:7,e:"h2",f:["Central Command"]}]}," ",{p:[201,4,6215],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[203,5,6296],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[204,5,6331],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[204,64,6390]},'", "allowed" : "',{t:2,r:"allowed",p:[204,87,6413]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[204,109,6435]}]},f:[{t:2,r:"desc",p:[204,140,6466]}]}]}],n:52,r:"data.all_centcom_access",p:[202,3,6257]}]}],n:50,r:"data.centcom_access",p:[197,2,6121]},{t:4,n:51,f:[{p:[209,4,6538],t:7,e:"div",a:{"class":"item"},f:[{p:[210,3,6560],t:7,e:"h2",f:[{t:2,r:"data.station_name",p:[210,7,6564]}]}]}," ",{p:[212,4,6606],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[214,5,6676],t:7,e:"div",a:{style:"float: left; width: 175px; min-height: 250px"},f:[{p:[215,4,6739],t:7,e:"div",a:{"class":"average"},f:[{p:[215,25,6760],t:7,e:"ui-button",a:{action:"PRG_regsel",state:[{t:2,x:{r:["selected"],s:'_0?"toggle":null'},p:[215,63,6798]}],params:['{"region" : "',{t:2,r:"regid",p:[215,116,6851]},'"}']},f:[{p:[215,129,6864],t:7,e:"b",f:[{t:2,r:"name",p:[215,132,6867]}]}]}]}," ",{p:[216,4,6902],t:7,e:"br"}," ",{t:4,f:[{p:[218,6,6938],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[219,5,6973],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[219,64,7032]},'", "allowed" : "',{t:2,r:"allowed",p:[219,87,7055]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[219,109,7077]}]},f:[{t:2,r:"desc",p:[219,140,7108]}]}]}],n:52,r:"accesses",p:[217,6,6913]}]}],n:52,r:"data.regions",p:[213,3,6648]}]}],r:"data.centcom_access"}],n:50,r:"data.has_id",p:[67,3,2340]}],n:50,r:"data.authenticated",p:[66,1,2310]}]}],x:{r:["data.mmode"],s:"!_0"}}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],268:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={data:{chargeState:function(t){var e=this.get("data.battery.max");return t>e/2?"good":t>e/4?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,311],t:7,e:"ntosheader"}," ",{p:[17,1,328],t:7,e:"ui-display",f:[{p:[18,2,343],t:7,e:"i",f:["Welcome to computer configuration utility. Please consult your system administrator if you have any questions about your device."]},{p:[18,137,478],t:7,e:"hr"}," ",{p:[19,2,485],t:7,e:"ui-display",a:{title:"Power Supply"},f:[{p:[20,3,522],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"data.power_usage",p:[21,4,559]},"W"]}," ",{t:4,f:[{p:[25,4,630],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Active"]}," ",{p:[28,4,701],t:7,e:"ui-section",a:{label:"Battery Rating"},f:[{t:2,r:"data.battery.max",p:[29,5,742]}]}," ",{p:[31,4,785],t:7,e:"ui-section",a:{label:"Battery Charge"},f:[{p:[32,5,826],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.battery.max",p:[32,26,847]}],value:[{t:2,r:"adata.battery.charge",p:[32,56,877]}],state:[{t:2,x:{r:["chargeState","adata.battery.charge"],s:"_0(_1)"},p:[32,89,910]}]},f:[{t:2,x:{r:["adata.battery.charge"],s:"Math.round(_0)"},p:[32,128,949]},"/",{t:2,r:"adata.battery.max",p:[32,165,986]}]}]}],n:50,r:"data.battery",p:[24,3,605]},{t:4,n:51,f:[{p:[35,4,1051],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Not Available"]}],r:"data.battery"}]}," ",{p:[41,2,1156],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,3,1192],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,4,1231],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,25,1252]}],value:[{t:2,r:"adata.disk_used",p:[43,53,1280]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,87,1314]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,123,1350]},"GQ"]}]}]}," ",{p:[47,2,1419],t:7,e:"ui-display",a:{title:"Computer Components"},f:[{t:4,f:[{p:[49,4,1491],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[49,26,1513]}]},f:[{p:[50,5,1529],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"desc",p:[50,59,1583]}]}," ",{p:[52,5,1605],t:7,e:"ui-section",a:{label:"State"},f:[{p:[53,6,1638],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["critical"],s:'_0?"disabled":null'},p:[53,24,1656]}],action:"PC_toggle_component",params:['{"name": "',{t:2,r:"name",p:[53,105,1737]},'"}']},f:[{t:2,x:{r:["enabled"],s:'_0?"Enabled":"Disabled"'},p:[54,7,1757]}]}]}," ",{t:4,f:[{p:[59,6,1868],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"powerusage",p:[60,7,1908]},"W"]}],n:50,r:"powerusage",p:[58,5,1843]}]}," ",{p:[64,4,1985],t:7,e:"br"}],n:52,r:"data.hardware",p:[48,3,1463]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],269:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,3,103],t:7,e:"h2",f:["An error has occurred and this program can not continue."]}," Additional information: ",{t:2,r:"data.error",p:[8,27,196]},{p:[8,41,210],t:7,e:"br"}," ",{p:[9,3,218],t:7,e:"i",f:["Please try again. If the problem persists contact your system administrator for assistance."]}," ",{p:[10,3,320],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["Restart program"]}],n:50,r:"data.error",p:[6,2,81]},{t:4,n:51,f:[{t:4,f:[{p:[13,4,422],t:7,e:"h2",f:["Viewing file ",{t:2,r:"data.filename",p:[13,21,439]}]}," ",{p:[14,4,466],t:7,e:"div",a:{"class":"item"},f:[{p:[15,4,489],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["CLOSE"]}," ",{p:[16,4,545],t:7,e:"ui-button",a:{action:"PRG_edit"},f:["EDIT"]}," ",{p:[17,4,595],t:7,e:"ui-button",a:{action:"PRG_printfile"},f:["PRINT"]}," "]},{p:[18,10,657],t:7,e:"hr"}," ",{t:3,r:"data.filedata",p:[19,4,666]}],n:50,r:"data.filename",p:[12,3,396]},{t:4,n:51,f:[{p:[21,4,702],t:7,e:"h2",f:["Available files (local):"]}," ",{p:[22,4,740],t:7,e:"table",f:[{p:[23,5,753],t:7,e:"tr",f:[{p:[24,6,764],t:7,e:"th",f:["File name"]}," ",{p:[25,6,789],t:7,e:"th",f:["File type"]}," ",{p:[26,6,814],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[27,6,844],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[30,6,907],t:7,e:"tr",f:[{p:[31,7,919],t:7,e:"td",f:[{t:2,r:"name",p:[31,11,923]}]}," ",{p:[32,7,944],t:7,e:"td",f:[".",{t:2,r:"type",p:[32,12,949]}]}," ",{p:[33,7,970],t:7,e:"td",f:[{t:2,r:"size",p:[33,11,974]},"GQ"]}," ",{p:[34,7,997],t:7,e:"td",f:[{p:[35,8,1010],t:7,e:"ui-button",a:{action:"PRG_openfile",params:['{"name": "',{t:2,r:"name",p:[35,59,1061]},'"}']},f:["VIEW"]}," ",{p:[36,8,1098],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[36,26,1116]}],action:"PRG_deletefile",params:['{"name": "',{t:2,r:"name",p:[36,105,1195]},'"}']},f:["DELETE"]}," ",{p:[37,8,1234],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[37,26,1252]}],action:"PRG_rename",params:['{"name": "',{t:2,r:"name",p:[37,101,1327]},'"}']},f:["RENAME"]}," ",{p:[38,8,1366],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[38,26,1384]}],action:"PRG_clone",params:['{"name": "',{t:2,r:"name",p:[38,100,1458]},'"}']},f:["CLONE"]}," ",{t:4,f:[{p:[40,9,1531],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[40,27,1549]}],action:"PRG_copytousb",params:['{"name": "',{t:2,r:"name",p:[40,105,1627]},'"}']},f:["EXPORT"]}],n:50,r:"data.usbconnected",p:[39,8,1496]}]}]}],n:52,r:"data.files",p:[29,5,880]}]}," ",{t:4,f:[{p:[47,4,1761],t:7,e:"h2",f:["Available files (portable device):"]}," ",{p:[48,4,1809],t:7,e:"table",f:[{p:[49,5,1822],t:7,e:"tr",f:[{p:[50,6,1833],t:7,e:"th",f:["File name"]}," ",{p:[51,6,1858],t:7,e:"th",f:["File type"]}," ",{p:[52,6,1883],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[53,6,1913],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[56,6,1979],t:7,e:"tr",f:[{p:[57,7,1991],t:7,e:"td",f:[{t:2,r:"name",p:[57,11,1995]}]}," ",{p:[58,7,2016],t:7,e:"td",f:[".",{t:2,r:"type",p:[58,12,2021]}]}," ",{p:[59,7,2042],t:7,e:"td",f:[{t:2,r:"size",p:[59,11,2046]},"GQ"]}," ",{p:[60,7,2069],t:7,e:"td",f:[{p:[61,8,2082],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[61,26,2100]}],action:"PRG_usbdeletefile",params:['{"name": "',{t:2,r:"name",p:[61,108,2182]},'"}']},f:["DELETE"]}," ",{t:4,f:[{p:[63,9,2256],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[63,27,2274]}],action:"PRG_copyfromusb",params:['{"name": "',{t:2,r:"name",p:[63,107,2354]},'"}']},f:["IMPORT"]}],n:50,r:"data.usbconnected",p:[62,8,2221]}]}]}],n:52,r:"data.usbfiles",p:[55,5,1949]}]}],n:50,r:"data.usbconnected",p:[46,4,1731]}," ",{p:[70,4,2470],t:7,e:"ui-button",a:{action:"PRG_newtextfile"},f:["NEW DATA FILE"]}],r:"data.filename"}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],270:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{p:[5,2,79],t:7,e:"i",f:["No program loaded. Please select program from list below."]}," ",{p:[6,2,146],t:7,e:"table",f:[{t:4,f:[{p:[8,4,185],t:7,e:"tr",f:[{p:[8,8,189],t:7,e:"td",f:[{p:[8,12,193],t:7,e:"ui-button",a:{action:"PC_runprogram",params:['{"name": "',{t:2,r:"name",p:[8,64,245]},'"}']},f:[{t:2,r:"desc",p:[9,5,263]}]}]},{p:[11,4,293],t:7,e:"td",f:[{p:[11,8,297],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["running"],s:'_0?null:"disabled"'},p:[11,26,315]}],icon:"close",action:"PC_killprogram",params:['{"name": "',{t:2,r:"name",p:[11,114,403]},'"}']}}]}]}],n:52,r:"data.programs",p:[7,3,157]}]}," ",{p:[14,2,454],t:7,e:"br"},{p:[14,6,458],t:7,e:"br"}," ",{t:4,f:[{p:[16,3,491],t:7,e:"ui-button",a:{action:"PC_toggle_light",style:[{t:2,x:{r:["data.light_on"],s:'_0?"selected":null'},p:[16,46,534]}]},f:["Toggle Flashlight"]},{p:[16,114,602],t:7,e:"br"}," ",{p:[17,3,610],t:7,e:"ui-button",a:{action:"PC_light_color"},f:["Change Flashlight Color ",{p:[17,62,669],t:7,e:"span",a:{style:["border:1px solid #161616; background-color: ",{t:2,r:"data.comp_light_color",p:[17,119,726]},";"]},f:["   "]}]}],n:50,r:"data.has_light",p:[15,2,465]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],271:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{t:4,f:[{p:[6,3,105],t:7,e:"h1",f:["ADMINISTRATIVE MODE"]}],n:50,r:"data.adminmode",p:[5,2,79]}," ",{t:4,f:[{p:[10,3,170],t:7,e:"div",a:{"class":"itemLabel"},f:["Current channel:"]}," ",{p:[13,3,229],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.title",p:[14,4,259]}]}," ",{p:[16,3,287],t:7,e:"div",a:{"class":"itemLabel"},f:["Operator access:"]}," ",{p:[19,3,346],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:[{p:[21,5,406],t:7,e:"b",f:["Enabled"]}],n:50,r:"data.is_operator",p:[20,4,376]},{t:4,n:51,f:[{p:[23,5,439],t:7,e:"b",f:["Disabled"]}],r:"data.is_operator"}]}," ",{p:[26,3,480],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[29,3,532],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[30,4,562],t:7,e:"table",f:[{p:[31,5,575],t:7,e:"tr",f:[{p:[31,9,579],t:7,e:"td",f:[{p:[31,13,583],t:7,e:"ui-button",a:{action:"PRG_speak"},f:["Send message"]}]}]},{p:[32,5,643],t:7,e:"tr",f:[{p:[32,9,647],t:7,e:"td",f:[{p:[32,13,651],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[33,5,719],t:7,e:"tr",f:[{p:[33,9,723],t:7,e:"td",f:[{p:[33,13,727],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]},{p:[34,5,807],t:7,e:"tr",f:[{p:[34,9,811],t:7,e:"td",f:[{p:[34,13,815],t:7,e:"ui-button",a:{action:"PRG_leavechannel"},f:["Leave channel"]}]}]},{p:[35,5,883],t:7,e:"tr",f:[{p:[35,9,887],t:7,e:"td",f:[{p:[35,13,891],t:7,e:"ui-button",a:{action:"PRG_savelog"},f:["Save log to local drive"]}," ",{t:4,f:[{p:[37,6,995],t:7,e:"tr",f:[{p:[37,10,999],t:7,e:"td",f:[{p:[37,14,1003],t:7,e:"ui-button",a:{action:"PRG_renamechannel"},f:["Rename channel"]}]}]},{p:[38,6,1074],t:7,e:"tr",f:[{p:[38,10,1078],t:7,e:"td",f:[{p:[38,14,1082],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}]}]},{p:[39,6,1149],t:7,e:"tr",f:[{p:[39,10,1153],t:7,e:"td",f:[{p:[39,14,1157],t:7,e:"ui-button",a:{action:"PRG_deletechannel"},f:["Delete channel"]}]}]}],n:50,r:"data.is_operator",p:[36,5,964]}]}]}]}]}," ",{p:[43,3,1263],t:7,e:"b",f:["Chat Window"]}," ",{p:[44,4,1286],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[45,4,1342],t:7,e:"div",a:{"class":"item"},f:[{p:[46,5,1366],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"msg",p:[48,7,1450]},{p:[48,14,1457],t:7,e:"br"}],n:52,r:"data.messages",p:[47,6,1419]}]}]}]}," ",{p:[53,3,1516],t:7,e:"b",f:["Connected Users"]},{p:[53,25,1538],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"name",p:[55,4,1573]},{p:[55,12,1581],t:7,e:"br"}],n:52,r:"data.clients",p:[54,3,1546]}],n:50,r:"data.title",p:[9,2,148]},{t:4,n:51,f:[{p:[58,3,1613],t:7,e:"b",f:["Controls:"]}," ",{p:[59,3,1633],t:7,e:"table",f:[{p:[60,4,1645],t:7,e:"tr",f:[{p:[60,8,1649],t:7,e:"td",f:[{p:[60,12,1653],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[61,4,1720],t:7,e:"tr",f:[{p:[61,8,1724],t:7,e:"td",f:[{p:[61,12,1728],t:7,e:"ui-button",a:{action:"PRG_newchannel"},f:["New Channel"]}]}]},{p:[62,4,1791],t:7,e:"tr",f:[{p:[62,8,1795],t:7,e:"td",f:[{p:[62,12,1799],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]}]}," ",{p:[64,3,1889],t:7,e:"b",f:["Available channels:"]}," ",{p:[65,3,1919],t:7,e:"table",f:[{t:4,f:[{p:[67,4,1964],t:7,e:"tr",f:[{p:[67,8,1968],t:7,e:"td",f:[{p:[67,12,1972],t:7,e:"ui-button",a:{action:"PRG_joinchannel",params:['{"id": "',{t:2,r:"id",p:[67,64,2024]},'"}']},f:[{t:2,r:"chan",p:[67,74,2034]}]},{p:[67,94,2054],t:7,e:"br"}]}]}],n:52,r:"data.all_channels",p:[66,3,1930]}]}],r:"data.title"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],272:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{t:4,f:["##SYSTEM ERROR: ",{t:2,r:"data.error",p:[6,19,117]},{p:[6,33,131],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["RESET"]}],n:50,r:"data.error",p:[5,2,79]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.target"],s:"_0"},f:["##DoS traffic generator active. Tx: ",{t:2,r:"data.speed",p:[8,39,243]},"GQ/s",{p:[8,57,261],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"nums",p:[10,4,300]},{p:[10,12,308],t:7,e:"br"}],n:52,r:"data.dos_strings",p:[9,3,269]}," ",{p:[12,3,329],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["ABORT"]}]},{t:4,n:50,x:{r:["data.target"],s:"!(_0)"},f:[" ##DoS traffic generator ready. Select target device.",{p:[14,55,443],t:7,e:"br"}," ",{t:4,f:["Targeted device ID: ",{t:2,r:"data.focus",p:[16,24,494]}],n:50,r:"data.focus",p:[15,3,451]},{t:4,n:51,f:["Targeted device ID: None"],r:"data.focus"}," ",{p:[20,3,564],t:7,e:"ui-button",a:{action:"PRG_execute"},f:["EXECUTE"]},{p:[20,54,615],t:7,e:"div",a:{style:"clear:both"}}," Detected devices on network:",{p:[21,31,677],t:7,e:"br"}," ",{t:4,f:[{p:[23,4,711],t:7,e:"ui-button",a:{action:"PRG_target_relay",params:['{"targid": "',{t:2,r:"id",p:[23,61,768]},'"}']},f:[{t:2,r:"id",p:[23,71,778]}]}],n:52,r:"data.relays",p:[22,3,685]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],273:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{p:[5,2,79],t:7,e:"i",f:["Welcome to software download utility. Please select which software you wish to download."]},{p:[5,97,174],t:7,e:"hr"}," ",{t:4,f:[{p:[7,3,203],t:7,e:"ui-display",a:{title:"Download Error"},f:[{p:[8,4,243],t:7,e:"ui-section",a:{label:"Information"},f:[{t:2,r:"data.error",p:[9,5,281]}]}," ",{p:[11,4,318],t:7,e:"ui-section",a:{label:"Reset Program"},f:[{p:[12,5,358],t:7,e:"ui-button",a:{icon:"times",action:"PRG_reseterror"},f:["RESET"]}]}]}],n:50,r:"data.error",p:[6,2,181]},{t:4,n:51,f:[{t:4,f:[{p:[19,4,516],t:7,e:"ui-display",a:{title:"Download Running"},f:[{p:[20,5,559],t:7,e:"i",f:["Please wait..."]}," ",{p:[21,5,586],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"data.downloadname",p:[22,6,623]}]}," ",{p:[24,5,669],t:7,e:"ui-section",a:{label:"File description"},f:[{t:2,r:"data.downloaddesc",p:[25,6,713]}]}," ",{p:[27,5,759],t:7,e:"ui-section",a:{label:"File size"},f:[{t:2,r:"data.downloadsize",p:[28,6,796]},"GQ"]}," ",{p:[30,5,844],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{t:2,r:"data.downloadspeed",p:[31,6,885]}," GQ/s"]}," ",{p:[33,5,937],t:7,e:"ui-section",a:{label:"Download progress"},f:[{p:[34,6,982],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.downloadsize",p:[34,27,1003]}],value:[{t:2,r:"adata.downloadcompletion",p:[34,58,1034]}],state:"good"},f:[{t:2,x:{r:["adata.downloadcompletion"],s:"Math.round(_0)"},p:[34,101,1077]},"GQ / ",{t:2,r:"adata.downloadsize",p:[34,146,1122]},"GQ"]}]}]}],n:50,r:"data.downloadname",p:[18,3,486]}],r:"data.error"}," ",{t:4,f:[{t:4,f:[{p:[41,4,1270],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,5,1308],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,6,1349],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,27,1370]}],value:[{t:2,r:"adata.disk_used",p:[43,55,1398]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,89,1432]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,125,1468]},"GQ"]}]}]}," ",{p:[47,4,1545],t:7,e:"ui-display",a:{title:"Primary Software Repository"},f:[{t:4,f:[{p:[49,6,1642],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[49,28,1664]}]},f:[{p:[50,7,1686],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[50,61,1740]}]}," ",{p:[52,7,1774],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[53,8,1813]}," (",{t:2,r:"size",p:[53,22,1827]}," GQ)"]}," ",{p:[55,7,1868],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[56,8,1911]}]}," ",{p:[58,7,1957],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[58,80,2030]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[62,6,2113],t:7,e:"br"}],n:52,r:"data.downloadable_programs",p:[48,5,1599]}]}," ",{t:4,f:[{p:[67,5,2194],t:7,e:"ui-display",a:{title:"UNKNOWN Software Repository"},f:[{p:[68,6,2249],t:7,e:"i",f:["Please note that Nanotrasen does not recommend download of software from non-official servers."]}," ",{t:4,f:[{p:[70,7,2395],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[70,29,2417]}]},f:[{p:[71,8,2440],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[71,62,2494]}]}," ",{p:[73,8,2530],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[74,9,2570]}," (",{t:2,r:"size",p:[74,23,2584]}," GQ)"]}," ",{p:[76,8,2627],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[77,9,2671]}]}," ",{p:[79,8,2719],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[79,81,2792]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[83,7,2879],t:7,e:"br"}],n:52,r:"data.hacked_programs",p:[69,6,2357]}]}],n:50,r:"data.hackedavailable",p:[66,4,2160]}],n:50,x:{r:["data.error"],s:"!_0"},p:[40,3,1246]}],n:50,x:{r:["data.downloadname"],s:"!_0"},p:[39,2,1216]}," ",{p:[89,2,2954],t:7,e:"br"},{p:[89,6,2958],t:7,e:"br"},{p:[89,10,2962],t:7,e:"hr"},{p:[89,14,2966],t:7,e:"i",f:["NTOS v2.0.4b Copyright Nanotrasen 2557 - 2559"]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],274:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{p:[6,2,81],t:7,e:"ui-display",a:{title:"WIRELESS CONNECTIVITY"},f:[{p:[8,3,129],t:7,e:"ui-section",a:{label:"Active NTNetRelays"},f:[{p:[9,4,173],t:7,e:"b",f:[{t:2,r:"data.ntnetrelays",p:[9,7,176]}]}]}," ",{t:4,f:[{p:[12,4,250],t:7,e:"ui-section",a:{label:"System status"},f:[{p:[13,6,291],t:7,e:"b",f:[{t:2,x:{r:["data.ntnetstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[13,9,294]}]}]}," ",{p:[15,4,366],t:7,e:"ui-section",a:{label:"Control"},f:[{p:[17,4,401],t:7,e:"ui-button",a:{icon:"plus",action:"toggleWireless"},f:["TOGGLE"]}]}," ",{p:[21,4,500],t:7,e:"br"},{p:[21,8,504],t:7,e:"br"}," ",{p:[22,4,513],t:7,e:"i",f:["Caution - Disabling wireless transmitters when using wireless device may prevent you from re-enabling them again!"]}],n:50,r:"data.ntnetrelays",p:[11,3,221]},{t:4,n:51,f:[{p:[24,4,650],t:7,e:"br"},{p:[24,8,654],t:7,e:"p",f:["Wireless coverage unavailable, no relays are connected."]}],r:"data.ntnetrelays"}]}," ",{p:[29,2,750],t:7,e:"ui-display",a:{title:"FIREWALL CONFIGURATION"},f:[{p:[31,2,798],t:7,e:"table",f:[{p:[32,3,809],t:7,e:"tr",f:[{p:[33,4,818],t:7,e:"th",f:["PROTOCOL"]},{p:[34,4,835],t:7,e:"th",f:["STATUS"]},{p:[35,4,850],t:7,e:"th",f:["CONTROL"]}]},{p:[36,3,865],t:7,e:"tr",f:[" ",{p:[37,4,874],t:7,e:"td",f:["Software Downloads"]},{p:[38,4,901],t:7,e:"td",f:[{t:2,x:{r:["data.config_softwaredownload"],s:'_0?"ENABLED":"DISABLED"'},p:[38,8,905]}]},{p:[39,4,967],t:7,e:"td",f:[" ",{p:[39,9,972],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "1"}'},f:["TOGGLE"]}]}]},{p:[40,3,1051],t:7,e:"tr",f:[" ",{p:[41,4,1060],t:7,e:"td",f:["Peer to Peer Traffic"]},{p:[42,4,1089],t:7,e:"td",f:[{t:2,x:{r:["data.config_peertopeer"],s:'_0?"ENABLED":"DISABLED"'},p:[42,8,1093]}]},{p:[43,4,1149],t:7,e:"td",f:[{p:[43,8,1153],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "2"}'},f:["TOGGLE"]}]}]},{p:[44,3,1232],t:7,e:"tr",f:[" ",{p:[45,4,1241],t:7,e:"td",f:["Communication Systems"]},{p:[46,4,1271],t:7,e:"td",f:[{t:2,x:{r:["data.config_communication"],s:'_0?"ENABLED":"DISABLED"'},p:[46,8,1275]}]},{p:[47,4,1334],t:7,e:"td",f:[{p:[47,8,1338],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "3"}'},f:["TOGGLE"]}]}]},{p:[48,3,1417],t:7,e:"tr",f:[" ",{p:[49,4,1426],t:7,e:"td",f:["Remote System Control"]},{p:[50,4,1456],t:7,e:"td",f:[{t:2,x:{r:["data.config_systemcontrol"],s:'_0?"ENABLED":"DISABLED"'},p:[50,8,1460]}]},{p:[51,4,1519],t:7,e:"td",f:[{p:[51,8,1523],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "4"}'},f:["TOGGLE"]}]}]}]}]}," ",{p:[55,2,1630],t:7,e:"ui-display",a:{title:"SECURITY SYSTEMS"},f:[{t:4,f:[{p:[58,4,1699],t:7,e:"ui-notice",f:[{p:[59,5,1716],t:7,e:"h1",f:["NETWORK INCURSION DETECTED"]}]}," ",{p:[61,5,1774],t:7,e:"i",f:["An abnormal activity has been detected in the network. Please verify system logs for more information"]}],n:50,r:"data.idsalarm",p:[57,3,1673]}," ",{p:[64,3,1902],t:7,e:"ui-section",a:{label:"Intrusion Detection System"},f:[{p:[65,4,1954],t:7,e:"b",f:[{t:2,x:{r:["data.idsstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[65,7,1957]}]}]}," ",{p:[68,3,2029],t:7,e:"ui-section",a:{label:"Maximal Log Count"},f:[{p:[69,4,2072],t:7,e:"b",f:[{t:2,r:"data.ntnetmaxlogs",p:[69,7,2075]}]}]}," ",{p:[72,3,2125],t:7,e:"ui-section",a:{label:"Controls"},f:[]}," ",{p:[74,4,2176],t:7,e:"table",f:[{p:[75,4,2188],t:7,e:"tr",f:[{p:[75,8,2192],t:7,e:"td",f:[{p:[75,12,2196],t:7,e:"ui-button",a:{action:"resetIDS"},f:["RESET IDS"]}]}]},{p:[76,4,2251],t:7,e:"tr",f:[{p:[76,8,2255],t:7,e:"td",f:[{p:[76,12,2259],t:7,e:"ui-button",a:{action:"toggleIDS"},f:["TOGGLE IDS"]}]}]},{p:[77,4,2316],t:7,e:"tr",f:[{p:[77,8,2320],t:7,e:"td",f:[{p:[77,12,2324],t:7,e:"ui-button",a:{action:"updatemaxlogs"},f:["SET LOG LIMIT"]}]}]},{p:[78,4,2388],t:7,e:"tr",f:[{p:[78,8,2392],t:7,e:"td",f:[{p:[78,12,2396],t:7,e:"ui-button",a:{action:"purgelogs"},f:["PURGE LOGS"]}]}]}]}," ",{p:[81,3,2467],t:7,e:"ui-subdisplay",a:{title:"System Logs"},f:[{p:[82,3,2506],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[83,3,2561],t:7,e:"div",a:{"class":"item"},f:[{p:[84,4,2584],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"entry",p:[86,6,2667]},{p:[86,15,2676],t:7,e:"br"}],n:52,r:"data.ntnetlogs",p:[85,5,2636]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],275:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,2,102],t:7,e:"div",a:{"class":"item"},f:[{p:[8,3,124],t:7,e:"h2",f:["An error has occurred during operation..."]}," ",{p:[9,3,178],t:7,e:"b",f:["Additional information:"]},{t:2,r:"data.error",p:[9,34,209]},{p:[9,48,223],t:7,e:"br"}," ",{p:[10,3,231],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Clear"]}]}],n:50,r:"data.error",p:[6,2,81]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.downloading"],s:"_0"},f:[{p:[13,3,321],t:7,e:"h2",f:["Download in progress..."]}," ",{p:[14,3,357],t:7,e:"div",a:{"class":"itemLabel"},f:["Downloaded file:"]}," ",{p:[17,3,416],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_name",p:[18,4,446]}]}," ",{p:[20,3,483],t:7,e:"div",a:{"class":"itemLabel"},f:["Download progress:"]}," ",{p:[23,3,544],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_progress",p:[24,4,574]}," / ",{t:2,r:"data.download_size",p:[24,33,603]}," GQ"]}," ",{p:[26,3,642],t:7,e:"div",a:{"class":"itemLabel"},f:["Transfer speed:"]}," ",{p:[29,3,700],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_netspeed",p:[30,4,730]},"GQ/s"]}," ",{p:[32,3,774],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[35,3,826],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[36,4,856],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Abort download"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading"],s:"(!(_0))&&(_1)"},f:[" ",{p:[39,3,954],t:7,e:"h2",f:["Server enabled"]}," ",{p:[40,3,981],t:7,e:"div",a:{"class":"itemLabel"},f:["Connected clients:"]}," ",{p:[43,3,1042],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_clients",p:[44,4,1072]}]}," ",{p:[46,3,1109],t:7,e:"div",a:{"class":"itemLabel"},f:["Provided file:"]}," ",{p:[49,3,1166],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_filename",p:[50,4,1196]}]}," ",{p:[52,3,1234],t:7,e:"div",a:{"class":"itemLabel"},f:["Server password:"]}," ",{p:[55,3,1293],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ENABLED"],n:50,r:"data.upload_haspassword",p:[56,4,1323]},{t:4,n:51,f:["DISABLED"],r:"data.upload_haspassword"}]}," ",{p:[62,3,1420],t:7,e:"div",a:{"class":"itemLabel"},f:["Commands:"]}," ",{p:[65,3,1472],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[66,4,1502],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[67,4,1567],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Exit server"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(_2))"},f:[" ",{p:[70,3,1668],t:7,e:"h2",f:["File transfer server ready. Select file to upload:"]}," ",{p:[71,3,1732],t:7,e:"table",f:[{p:[72,3,1743],t:7,e:"tr",f:[{p:[72,7,1747],t:7,e:"th",f:["File name"]},{p:[72,20,1760],t:7,e:"th",f:["File size"]},{p:[72,33,1773],t:7,e:"th",f:["Controls ",{t:4,f:[{p:[74,4,1824],t:7,e:"tr",f:[{p:[74,8,1828],t:7,e:"td",f:[{t:2,r:"filename",p:[74,12,1832]}]},{p:[75,4,1849],t:7,e:"td",f:[{t:2,r:"size",p:[75,8,1853]},"GQ"]},{p:[76,4,1868],t:7,e:"td",f:[{p:[76,8,1872],t:7,e:"ui-button",a:{action:"PRG_uploadfile",params:['{"id": "',{t:2,r:"uid",p:[76,59,1923]},'"}']},f:["Select"]}]}]}],n:52,r:"data.upload_filelist",p:[73,3,1789]}]}]}]}," ",{p:[79,3,1981],t:7,e:"hr"}," ",{p:[80,3,1989],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[81,3,2053],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Return"]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(!(_2)))"},f:[" ",{p:[83,3,2116],t:7,e:"h2",f:["Available files:"]}," ",{p:[84,3,2145],t:7,e:"table",a:{border:"1",style:"border-collapse: collapse"},f:[{p:[84,55,2197],t:7,e:"tr",f:[{p:[84,59,2201],t:7,e:"th",f:["Server UID"]},{p:[84,73,2215],t:7,e:"th",f:["File Name"]},{p:[84,86,2228],t:7,e:"th",f:["File Size"]},{p:[84,99,2241],t:7,e:"th",f:["Password Protection"]},{p:[84,122,2264],t:7,e:"th",f:["Operations ",{t:4,f:[{p:[86,5,2311],t:7,e:"tr",f:[{p:[86,9,2315],t:7,e:"td",f:[{t:2,r:"uid",p:[86,13,2319]}]},{p:[87,5,2332],t:7,e:"td",f:[{t:2,r:"filename",p:[87,9,2336]}]},{p:[88,5,2354],t:7,e:"td",f:[{t:2,r:"size",p:[88,9,2358]},"GQ ",{t:4,f:[{p:[90,6,2400],t:7,e:"td",f:["Enabled"]}],n:50,r:"haspassword",p:[89,5,2374]}," ",{t:4,f:[{p:[93,6,2457],t:7,e:"td",f:["Disabled"]}],n:50,x:{r:["haspassword"],s:"!_0"},p:[92,5,2430]}]},{p:[96,5,2494],t:7,e:"td",f:[{p:[96,9,2498],t:7,e:"ui-button",a:{action:"PRG_downloadfile",params:['{"id": "',{t:2,r:"uid",p:[96,62,2551]},'"}']},f:["Download"]}]}]}],n:52,r:"data.servers",p:[85,4,2283]}]}]}]}," ",{p:[99,3,2612],t:7,e:"hr"}," ",{p:[100,3,2620],t:7,e:"ui-button",a:{action:"PRG_uploadmenu"},f:["Send file"]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],276:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[43,1,1082],t:7,e:"ntosheader"}," ",{p:[45,1,1099],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[47,5,1157],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData", ++},f:["Cargo"]}," ",{p:[167,4,5195],t:7,e:"td",f:[{t:4,f:[{p:[169,5,5237],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[169,64,5296]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[169,82,5314]}]},f:[{t:2,r:"display_name",p:[169,127,5359]}]}],n:52,r:"data.cargo_jobs",p:[168,6,5206]}]}]}," ",{p:[173,5,5430],t:7,e:"tr",f:[{p:[174,4,5439],t:7,e:"th",a:{style:"color: '#808080';"},f:["Civilian"]}," ",{p:[175,4,5487],t:7,e:"td",f:[{t:4,f:[{p:[177,5,5532],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[177,64,5591]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[177,82,5609]}]},f:[{t:2,r:"display_name",p:[177,127,5654]}]}],n:52,r:"data.civilian_jobs",p:[176,6,5498]}]}]}," ",{t:4,f:[{p:[182,4,5757],t:7,e:"tr",f:[{p:[183,6,5768],t:7,e:"th",a:{style:"color: '#A52A2A';"},f:["CentCom"]}," ",{p:[184,6,5817],t:7,e:"td",f:[{t:4,f:[{p:[186,7,5862],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[186,66,5921]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[186,84,5939]}]},f:[{t:2,r:"display_name",p:[186,129,5984]}]}],n:52,r:"data.centcom_jobs",p:[185,5,5827]}]}]}],n:50,r:"data.centcom_access",p:[181,5,5725]}]}]}],n:50,r:"data.assignments",p:[118,4,3518]}]}],r:"data.minor"}," ",{t:4,f:[{p:[198,4,6153],t:7,e:"div",a:{"class":"item"},f:[{p:[199,3,6175],t:7,e:"h2",f:["Central Command"]}]}," ",{p:[201,4,6215],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[203,5,6296],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[204,5,6331],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[204,64,6390]},'", "allowed" : "',{t:2,r:"allowed",p:[204,87,6413]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[204,109,6435]}]},f:[{t:2,r:"desc",p:[204,140,6466]}]}]}],n:52,r:"data.all_centcom_access",p:[202,3,6257]}]}],n:50,r:"data.centcom_access",p:[197,2,6121]},{t:4,n:51,f:[{p:[209,4,6538],t:7,e:"div",a:{"class":"item"},f:[{p:[210,3,6560],t:7,e:"h2",f:[{t:2,r:"data.station_name",p:[210,7,6564]}]}]}," ",{p:[212,4,6606],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[214,5,6676],t:7,e:"div",a:{style:"float: left; width: 175px; min-height: 250px"},f:[{p:[215,4,6739],t:7,e:"div",a:{"class":"average"},f:[{p:[215,25,6760],t:7,e:"ui-button",a:{action:"PRG_regsel",state:[{t:2,x:{r:["selected"],s:'_0?"toggle":null'},p:[215,63,6798]}],params:['{"region" : "',{t:2,r:"regid",p:[215,116,6851]},'"}']},f:[{p:[215,129,6864],t:7,e:"b",f:[{t:2,r:"name",p:[215,132,6867]}]}]}]}," ",{p:[216,4,6902],t:7,e:"br"}," ",{t:4,f:[{p:[218,6,6938],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[219,5,6973],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[219,64,7032]},'", "allowed" : "',{t:2,r:"allowed",p:[219,87,7055]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[219,109,7077]}]},f:[{t:2,r:"desc",p:[219,140,7108]}]}]}],n:52,r:"accesses",p:[217,6,6913]}]}],n:52,r:"data.regions",p:[213,3,6648]}]}],r:"data.centcom_access"}],n:50,r:"data.has_id",p:[67,3,2340]}],n:50,r:"data.authenticated",p:[66,1,2310]}]}],x:{r:["data.mmode"],s:"!_0"}}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],268:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={data:{chargeState:function(t){var e=this.get("data.battery.max");return t>e/2?"good":t>e/4?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,311],t:7,e:"ntosheader"}," ",{p:[17,1,328],t:7,e:"ui-display",f:[{p:[18,2,343],t:7,e:"i",f:["Welcome to computer configuration utility. Please consult your system administrator if you have any questions about your device."]},{p:[18,137,478],t:7,e:"hr"}," ",{p:[19,2,485],t:7,e:"ui-display",a:{title:"Power Supply"},f:[{p:[20,3,522],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"data.power_usage",p:[21,4,559]},"W"]}," ",{t:4,f:[{p:[25,4,630],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Active"]}," ",{p:[28,4,701],t:7,e:"ui-section",a:{label:"Battery Rating"},f:[{t:2,r:"data.battery.max",p:[29,5,742]}]}," ",{p:[31,4,785],t:7,e:"ui-section",a:{label:"Battery Charge"},f:[{p:[32,5,826],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.battery.max",p:[32,26,847]}],value:[{t:2,r:"adata.battery.charge",p:[32,56,877]}],state:[{t:2,x:{r:["chargeState","adata.battery.charge"],s:"_0(_1)"},p:[32,89,910]}]},f:[{t:2,x:{r:["adata.battery.charge"],s:"Math.round(_0)"},p:[32,128,949]},"/",{t:2,r:"adata.battery.max",p:[32,165,986]}]}]}],n:50,r:"data.battery",p:[24,3,605]},{t:4,n:51,f:[{p:[35,4,1051],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Not Available"]}],r:"data.battery"}]}," ",{p:[41,2,1156],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,3,1192],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,4,1231],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,25,1252]}],value:[{t:2,r:"adata.disk_used",p:[43,53,1280]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,87,1314]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,123,1350]},"GQ"]}]}]}," ",{p:[47,2,1419],t:7,e:"ui-display",a:{title:"Computer Components"},f:[{t:4,f:[{p:[49,4,1491],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[49,26,1513]}]},f:[{p:[50,5,1529],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"desc",p:[50,59,1583]}]}," ",{p:[52,5,1605],t:7,e:"ui-section",a:{label:"State"},f:[{p:[53,6,1638],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["critical"],s:'_0?"disabled":null'},p:[53,24,1656]}],action:"PC_toggle_component",params:['{"name": "',{t:2,r:"name",p:[53,105,1737]},'"}']},f:[{t:2,x:{r:["enabled"],s:'_0?"Enabled":"Disabled"'},p:[54,7,1757]}]}]}," ",{t:4,f:[{p:[59,6,1868],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"powerusage",p:[60,7,1908]},"W"]}],n:50,r:"powerusage",p:[58,5,1843]}]}," ",{p:[64,4,1985],t:7,e:"br"}],n:52,r:"data.hardware",p:[48,3,1463]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],269:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,3,103],t:7,e:"h2",f:["An error has occurred and this program can not continue."]}," Additional information: ",{t:2,r:"data.error",p:[8,27,196]},{p:[8,41,210],t:7,e:"br"}," ",{p:[9,3,218],t:7,e:"i",f:["Please try again. If the problem persists contact your system administrator for assistance."]}," ",{p:[10,3,320],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["Restart program"]}],n:50,r:"data.error",p:[6,2,81]},{t:4,n:51,f:[{t:4,f:[{p:[13,4,422],t:7,e:"h2",f:["Viewing file ",{t:2,r:"data.filename",p:[13,21,439]}]}," ",{p:[14,4,466],t:7,e:"div",a:{"class":"item"},f:[{p:[15,4,489],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["CLOSE"]}," ",{p:[16,4,545],t:7,e:"ui-button",a:{action:"PRG_edit"},f:["EDIT"]}," ",{p:[17,4,595],t:7,e:"ui-button",a:{action:"PRG_printfile"},f:["PRINT"]}," "]},{p:[18,10,657],t:7,e:"hr"}," ",{t:3,r:"data.filedata",p:[19,4,666]}],n:50,r:"data.filename",p:[12,3,396]},{t:4,n:51,f:[{p:[21,4,702],t:7,e:"h2",f:["Available files (local):"]}," ",{p:[22,4,740],t:7,e:"table",f:[{p:[23,5,753],t:7,e:"tr",f:[{p:[24,6,764],t:7,e:"th",f:["File name"]}," ",{p:[25,6,789],t:7,e:"th",f:["File type"]}," ",{p:[26,6,814],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[27,6,844],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[30,6,907],t:7,e:"tr",f:[{p:[31,7,919],t:7,e:"td",f:[{t:2,r:"name",p:[31,11,923]}]}," ",{p:[32,7,944],t:7,e:"td",f:[".",{t:2,r:"type",p:[32,12,949]}]}," ",{p:[33,7,970],t:7,e:"td",f:[{t:2,r:"size",p:[33,11,974]},"GQ"]}," ",{p:[34,7,997],t:7,e:"td",f:[{p:[35,8,1010],t:7,e:"ui-button",a:{action:"PRG_openfile",params:['{"name": "',{t:2,r:"name",p:[35,59,1061]},'"}']},f:["VIEW"]}," ",{p:[36,8,1098],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[36,26,1116]}],action:"PRG_deletefile",params:['{"name": "',{t:2,r:"name",p:[36,105,1195]},'"}']},f:["DELETE"]}," ",{p:[37,8,1234],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[37,26,1252]}],action:"PRG_rename",params:['{"name": "',{t:2,r:"name",p:[37,101,1327]},'"}']},f:["RENAME"]}," ",{p:[38,8,1366],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[38,26,1384]}],action:"PRG_clone",params:['{"name": "',{t:2,r:"name",p:[38,100,1458]},'"}']},f:["CLONE"]}," ",{t:4,f:[{p:[40,9,1531],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[40,27,1549]}],action:"PRG_copytousb",params:['{"name": "',{t:2,r:"name",p:[40,105,1627]},'"}']},f:["EXPORT"]}],n:50,r:"data.usbconnected",p:[39,8,1496]}]}]}],n:52,r:"data.files",p:[29,5,880]}]}," ",{t:4,f:[{p:[47,4,1761],t:7,e:"h2",f:["Available files (portable device):"]}," ",{p:[48,4,1809],t:7,e:"table",f:[{p:[49,5,1822],t:7,e:"tr",f:[{p:[50,6,1833],t:7,e:"th",f:["File name"]}," ",{p:[51,6,1858],t:7,e:"th",f:["File type"]}," ",{p:[52,6,1883],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[53,6,1913],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[56,6,1979],t:7,e:"tr",f:[{p:[57,7,1991],t:7,e:"td",f:[{t:2,r:"name",p:[57,11,1995]}]}," ",{p:[58,7,2016],t:7,e:"td",f:[".",{t:2,r:"type",p:[58,12,2021]}]}," ",{p:[59,7,2042],t:7,e:"td",f:[{t:2,r:"size",p:[59,11,2046]},"GQ"]}," ",{p:[60,7,2069],t:7,e:"td",f:[{p:[61,8,2082],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[61,26,2100]}],action:"PRG_usbdeletefile",params:['{"name": "',{t:2,r:"name",p:[61,108,2182]},'"}']},f:["DELETE"]}," ",{t:4,f:[{p:[63,9,2256],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[63,27,2274]}],action:"PRG_copyfromusb",params:['{"name": "',{t:2,r:"name",p:[63,107,2354]},'"}']},f:["IMPORT"]}],n:50,r:"data.usbconnected",p:[62,8,2221]}]}]}],n:52,r:"data.usbfiles",p:[55,5,1949]}]}],n:50,r:"data.usbconnected",p:[46,4,1731]}," ",{p:[70,4,2470],t:7,e:"ui-button",a:{action:"PRG_newtextfile"},f:["NEW DATA FILE"]}],r:"data.filename"}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],270:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{p:[5,2,79],t:7,e:"i",f:["No program loaded. Please select program from list below."]}," ",{p:[6,2,146],t:7,e:"table",f:[{t:4,f:[{p:[8,4,185],t:7,e:"tr",f:[{p:[8,8,189],t:7,e:"td",f:[{p:[8,12,193],t:7,e:"ui-button",a:{action:"PC_runprogram",params:['{"name": "',{t:2,r:"name",p:[8,64,245]},'"}']},f:[{t:2,r:"desc",p:[9,5,263]}]}]},{p:[11,4,293],t:7,e:"td",f:[{p:[11,8,297],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["running"],s:'_0?null:"disabled"'},p:[11,26,315]}],icon:"close",action:"PC_killprogram",params:['{"name": "',{t:2,r:"name",p:[11,114,403]},'"}']}}]}]}],n:52,r:"data.programs",p:[7,3,157]}]}," ",{p:[14,2,454],t:7,e:"br"},{p:[14,6,458],t:7,e:"br"}," ",{t:4,f:[{p:[16,3,491],t:7,e:"ui-button",a:{action:"PC_toggle_light",style:[{t:2,x:{r:["data.light_on"],s:'_0?"selected":null'},p:[16,46,534]}]},f:["Toggle Flashlight"]},{p:[16,114,602],t:7,e:"br"}," ",{p:[17,3,610],t:7,e:"ui-button",a:{action:"PC_light_color"},f:["Change Flashlight Color ",{p:[17,62,669],t:7,e:"span",a:{style:["border:1px solid #161616; background-color: ",{t:2,r:"data.comp_light_color",p:[17,119,726]},";"]},f:["   "]}]}],n:50,r:"data.has_light",p:[15,2,465]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],271:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{t:4,f:[{p:[6,3,105],t:7,e:"h1",f:["ADMINISTRATIVE MODE"]}],n:50,r:"data.adminmode",p:[5,2,79]}," ",{t:4,f:[{p:[10,3,170],t:7,e:"div",a:{"class":"itemLabel"},f:["Current channel:"]}," ",{p:[13,3,229],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.title",p:[14,4,259]}]}," ",{p:[16,3,287],t:7,e:"div",a:{"class":"itemLabel"},f:["Operator access:"]}," ",{p:[19,3,346],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:[{p:[21,5,406],t:7,e:"b",f:["Enabled"]}],n:50,r:"data.is_operator",p:[20,4,376]},{t:4,n:51,f:[{p:[23,5,439],t:7,e:"b",f:["Disabled"]}],r:"data.is_operator"}]}," ",{p:[26,3,480],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[29,3,532],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[30,4,562],t:7,e:"table",f:[{p:[31,5,575],t:7,e:"tr",f:[{p:[31,9,579],t:7,e:"td",f:[{p:[31,13,583],t:7,e:"ui-button",a:{action:"PRG_speak"},f:["Send message"]}]}]},{p:[32,5,643],t:7,e:"tr",f:[{p:[32,9,647],t:7,e:"td",f:[{p:[32,13,651],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[33,5,719],t:7,e:"tr",f:[{p:[33,9,723],t:7,e:"td",f:[{p:[33,13,727],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]},{p:[34,5,807],t:7,e:"tr",f:[{p:[34,9,811],t:7,e:"td",f:[{p:[34,13,815],t:7,e:"ui-button",a:{action:"PRG_leavechannel"},f:["Leave channel"]}]}]},{p:[35,5,883],t:7,e:"tr",f:[{p:[35,9,887],t:7,e:"td",f:[{p:[35,13,891],t:7,e:"ui-button",a:{action:"PRG_savelog"},f:["Save log to local drive"]}," ",{t:4,f:[{p:[37,6,995],t:7,e:"tr",f:[{p:[37,10,999],t:7,e:"td",f:[{p:[37,14,1003],t:7,e:"ui-button",a:{action:"PRG_renamechannel"},f:["Rename channel"]}]}]},{p:[38,6,1074],t:7,e:"tr",f:[{p:[38,10,1078],t:7,e:"td",f:[{p:[38,14,1082],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}]}]},{p:[39,6,1149],t:7,e:"tr",f:[{p:[39,10,1153],t:7,e:"td",f:[{p:[39,14,1157],t:7,e:"ui-button",a:{action:"PRG_deletechannel"},f:["Delete channel"]}]}]}],n:50,r:"data.is_operator",p:[36,5,964]}]}]}]}]}," ",{p:[43,3,1263],t:7,e:"b",f:["Chat Window"]}," ",{p:[44,4,1286],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[45,4,1342],t:7,e:"div",a:{"class":"item"},f:[{p:[46,5,1366],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"msg",p:[48,7,1450]},{p:[48,14,1457],t:7,e:"br"}],n:52,r:"data.messages",p:[47,6,1419]}]}]}]}," ",{p:[53,3,1516],t:7,e:"b",f:["Connected Users"]},{p:[53,25,1538],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"name",p:[55,4,1573]},{p:[55,12,1581],t:7,e:"br"}],n:52,r:"data.clients",p:[54,3,1546]}],n:50,r:"data.title",p:[9,2,148]},{t:4,n:51,f:[{p:[58,3,1613],t:7,e:"b",f:["Controls:"]}," ",{p:[59,3,1633],t:7,e:"table",f:[{p:[60,4,1645],t:7,e:"tr",f:[{p:[60,8,1649],t:7,e:"td",f:[{p:[60,12,1653],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[61,4,1720],t:7,e:"tr",f:[{p:[61,8,1724],t:7,e:"td",f:[{p:[61,12,1728],t:7,e:"ui-button",a:{action:"PRG_newchannel"},f:["New Channel"]}]}]},{p:[62,4,1791],t:7,e:"tr",f:[{p:[62,8,1795],t:7,e:"td",f:[{p:[62,12,1799],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]}]}," ",{p:[64,3,1889],t:7,e:"b",f:["Available channels:"]}," ",{p:[65,3,1919],t:7,e:"table",f:[{t:4,f:[{p:[67,4,1964],t:7,e:"tr",f:[{p:[67,8,1968],t:7,e:"td",f:[{p:[67,12,1972],t:7,e:"ui-button",a:{action:"PRG_joinchannel",params:['{"id": "',{t:2,r:"id",p:[67,64,2024]},'"}']},f:[{t:2,r:"chan",p:[67,74,2034]}]},{p:[67,94,2054],t:7,e:"br"}]}]}],n:52,r:"data.all_channels",p:[66,3,1930]}]}],r:"data.title"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],272:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{t:4,f:["##SYSTEM ERROR: ",{t:2,r:"data.error",p:[6,19,117]},{p:[6,33,131],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["RESET"]}],n:50,r:"data.error",p:[5,2,79]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.target"],s:"_0"},f:["##DoS traffic generator active. Tx: ",{t:2,r:"data.speed",p:[8,39,243]},"GQ/s",{p:[8,57,261],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"nums",p:[10,4,300]},{p:[10,12,308],t:7,e:"br"}],n:52,r:"data.dos_strings",p:[9,3,269]}," ",{p:[12,3,329],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["ABORT"]}]},{t:4,n:50,x:{r:["data.target"],s:"!(_0)"},f:[" ##DoS traffic generator ready. Select target device.",{p:[14,55,443],t:7,e:"br"}," ",{t:4,f:["Targeted device ID: ",{t:2,r:"data.focus",p:[16,24,494]}],n:50,r:"data.focus",p:[15,3,451]},{t:4,n:51,f:["Targeted device ID: None"],r:"data.focus"}," ",{p:[20,3,564],t:7,e:"ui-button",a:{action:"PRG_execute"},f:["EXECUTE"]},{p:[20,54,615],t:7,e:"div",a:{style:"clear:both"}}," Detected devices on network:",{p:[21,31,677],t:7,e:"br"}," ",{t:4,f:[{p:[23,4,711],t:7,e:"ui-button",a:{action:"PRG_target_relay",params:['{"targid": "',{t:2,r:"id",p:[23,61,768]},'"}']},f:[{t:2,r:"id",p:[23,71,778]}]}],n:52,r:"data.relays",p:[22,3,685]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],273:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{p:[5,2,79],t:7,e:"i",f:["Welcome to software download utility. Please select which software you wish to download."]},{p:[5,97,174],t:7,e:"hr"}," ",{t:4,f:[{p:[7,3,203],t:7,e:"ui-display",a:{title:"Download Error"},f:[{p:[8,4,243],t:7,e:"ui-section",a:{label:"Information"},f:[{t:2,r:"data.error",p:[9,5,281]}]}," ",{p:[11,4,318],t:7,e:"ui-section",a:{label:"Reset Program"},f:[{p:[12,5,358],t:7,e:"ui-button",a:{icon:"times",action:"PRG_reseterror"},f:["RESET"]}]}]}],n:50,r:"data.error",p:[6,2,181]},{t:4,n:51,f:[{t:4,f:[{p:[19,4,516],t:7,e:"ui-display",a:{title:"Download Running"},f:[{p:[20,5,559],t:7,e:"i",f:["Please wait..."]}," ",{p:[21,5,586],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"data.downloadname",p:[22,6,623]}]}," ",{p:[24,5,669],t:7,e:"ui-section",a:{label:"File description"},f:[{t:2,r:"data.downloaddesc",p:[25,6,713]}]}," ",{p:[27,5,759],t:7,e:"ui-section",a:{label:"File size"},f:[{t:2,r:"data.downloadsize",p:[28,6,796]},"GQ"]}," ",{p:[30,5,844],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{t:2,r:"data.downloadspeed",p:[31,6,885]}," GQ/s"]}," ",{p:[33,5,937],t:7,e:"ui-section",a:{label:"Download progress"},f:[{p:[34,6,982],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.downloadsize",p:[34,27,1003]}],value:[{t:2,r:"adata.downloadcompletion",p:[34,58,1034]}],state:"good"},f:[{t:2,x:{r:["adata.downloadcompletion"],s:"Math.round(_0)"},p:[34,101,1077]},"GQ / ",{t:2,r:"adata.downloadsize",p:[34,146,1122]},"GQ"]}]}]}],n:50,r:"data.downloadname",p:[18,3,486]}],r:"data.error"}," ",{t:4,f:[{t:4,f:[{p:[41,4,1270],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,5,1308],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,6,1349],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,27,1370]}],value:[{t:2,r:"adata.disk_used",p:[43,55,1398]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,89,1432]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,125,1468]},"GQ"]}]}]}," ",{p:[47,4,1545],t:7,e:"ui-display",a:{title:"Primary Software Repository"},f:[{t:4,f:[{p:[49,6,1642],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[49,28,1664]}]},f:[{p:[50,7,1686],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[50,61,1740]}]}," ",{p:[52,7,1774],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[53,8,1813]}," (",{t:2,r:"size",p:[53,22,1827]}," GQ)"]}," ",{p:[55,7,1868],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[56,8,1911]}]}," ",{p:[58,7,1957],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[58,80,2030]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[62,6,2113],t:7,e:"br"}],n:52,r:"data.downloadable_programs",p:[48,5,1599]}]}," ",{t:4,f:[{p:[67,5,2194],t:7,e:"ui-display",a:{title:"UNKNOWN Software Repository"},f:[{p:[68,6,2249],t:7,e:"i",f:["Please note that Nanotrasen does not recommend download of software from non-official servers."]}," ",{t:4,f:[{p:[70,7,2395],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[70,29,2417]}]},f:[{p:[71,8,2440],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[71,62,2494]}]}," ",{p:[73,8,2530],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[74,9,2570]}," (",{t:2,r:"size",p:[74,23,2584]}," GQ)"]}," ",{p:[76,8,2627],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[77,9,2671]}]}," ",{p:[79,8,2719],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[79,81,2792]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[83,7,2879],t:7,e:"br"}],n:52,r:"data.hacked_programs",p:[69,6,2357]}]}],n:50,r:"data.hackedavailable",p:[66,4,2160]}],n:50,x:{r:["data.error"],s:"!_0"},p:[40,3,1246]}],n:50,x:{r:["data.downloadname"],s:"!_0"},p:[39,2,1216]}," ",{p:[89,2,2954],t:7,e:"br"},{p:[89,6,2958],t:7,e:"br"},{p:[89,10,2962],t:7,e:"hr"},{p:[89,14,2966],t:7,e:"i",f:["NTOS v2.0.4b Copyright Nanotrasen 2557 - 2559"]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],274:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{p:[6,2,81],t:7,e:"ui-display",a:{title:"WIRELESS CONNECTIVITY"},f:[{p:[8,3,129],t:7,e:"ui-section",a:{label:"Active NTNetRelays"},f:[{p:[9,4,173],t:7,e:"b",f:[{t:2,r:"data.ntnetrelays",p:[9,7,176]}]}]}," ",{t:4,f:[{p:[12,4,250],t:7,e:"ui-section",a:{label:"System status"},f:[{p:[13,6,291],t:7,e:"b",f:[{t:2,x:{r:["data.ntnetstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[13,9,294]}]}]}," ",{p:[15,4,366],t:7,e:"ui-section",a:{label:"Control"},f:[{p:[17,4,401],t:7,e:"ui-button",a:{icon:"plus",action:"toggleWireless"},f:["TOGGLE"]}]}," ",{p:[21,4,500],t:7,e:"br"},{p:[21,8,504],t:7,e:"br"}," ",{p:[22,4,513],t:7,e:"i",f:["Caution - Disabling wireless transmitters when using wireless device may prevent you from re-enabling them again!"]}],n:50,r:"data.ntnetrelays",p:[11,3,221]},{t:4,n:51,f:[{p:[24,4,650],t:7,e:"br"},{p:[24,8,654],t:7,e:"p",f:["Wireless coverage unavailable, no relays are connected."]}],r:"data.ntnetrelays"}]}," ",{p:[29,2,750],t:7,e:"ui-display",a:{title:"FIREWALL CONFIGURATION"},f:[{p:[31,2,798],t:7,e:"table",f:[{p:[32,3,809],t:7,e:"tr",f:[{p:[33,4,818],t:7,e:"th",f:["PROTOCOL"]},{p:[34,4,835],t:7,e:"th",f:["STATUS"]},{p:[35,4,850],t:7,e:"th",f:["CONTROL"]}]},{p:[36,3,865],t:7,e:"tr",f:[" ",{p:[37,4,874],t:7,e:"td",f:["Software Downloads"]},{p:[38,4,901],t:7,e:"td",f:[{t:2,x:{r:["data.config_softwaredownload"],s:'_0?"ENABLED":"DISABLED"'},p:[38,8,905]}]},{p:[39,4,967],t:7,e:"td",f:[" ",{p:[39,9,972],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "1"}'},f:["TOGGLE"]}]}]},{p:[40,3,1051],t:7,e:"tr",f:[" ",{p:[41,4,1060],t:7,e:"td",f:["Peer to Peer Traffic"]},{p:[42,4,1089],t:7,e:"td",f:[{t:2,x:{r:["data.config_peertopeer"],s:'_0?"ENABLED":"DISABLED"'},p:[42,8,1093]}]},{p:[43,4,1149],t:7,e:"td",f:[{p:[43,8,1153],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "2"}'},f:["TOGGLE"]}]}]},{p:[44,3,1232],t:7,e:"tr",f:[" ",{p:[45,4,1241],t:7,e:"td",f:["Communication Systems"]},{p:[46,4,1271],t:7,e:"td",f:[{t:2,x:{r:["data.config_communication"],s:'_0?"ENABLED":"DISABLED"'},p:[46,8,1275]}]},{p:[47,4,1334],t:7,e:"td",f:[{p:[47,8,1338],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "3"}'},f:["TOGGLE"]}]}]},{p:[48,3,1417],t:7,e:"tr",f:[" ",{p:[49,4,1426],t:7,e:"td",f:["Remote System Control"]},{p:[50,4,1456],t:7,e:"td",f:[{t:2,x:{r:["data.config_systemcontrol"],s:'_0?"ENABLED":"DISABLED"'},p:[50,8,1460]}]},{p:[51,4,1519],t:7,e:"td",f:[{p:[51,8,1523],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "4"}'},f:["TOGGLE"]}]}]}]}]}," ",{p:[55,2,1630],t:7,e:"ui-display",a:{title:"SECURITY SYSTEMS"},f:[{t:4,f:[{p:[58,4,1699],t:7,e:"ui-notice",f:[{p:[59,5,1716],t:7,e:"h1",f:["NETWORK INCURSION DETECTED"]}]}," ",{p:[61,5,1774],t:7,e:"i",f:["An abnormal activity has been detected in the network. Please verify system logs for more information"]}],n:50,r:"data.idsalarm",p:[57,3,1673]}," ",{p:[64,3,1902],t:7,e:"ui-section",a:{label:"Intrusion Detection System"},f:[{p:[65,4,1954],t:7,e:"b",f:[{t:2,x:{r:["data.idsstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[65,7,1957]}]}]}," ",{p:[68,3,2029],t:7,e:"ui-section",a:{label:"Maximal Log Count"},f:[{p:[69,4,2072],t:7,e:"b",f:[{t:2,r:"data.ntnetmaxlogs",p:[69,7,2075]}]}]}," ",{p:[72,3,2125],t:7,e:"ui-section",a:{label:"Controls"},f:[]}," ",{p:[74,4,2176],t:7,e:"table",f:[{p:[75,4,2188],t:7,e:"tr",f:[{p:[75,8,2192],t:7,e:"td",f:[{p:[75,12,2196],t:7,e:"ui-button",a:{action:"resetIDS"},f:["RESET IDS"]}]}]},{p:[76,4,2251],t:7,e:"tr",f:[{p:[76,8,2255],t:7,e:"td",f:[{p:[76,12,2259],t:7,e:"ui-button",a:{action:"toggleIDS"},f:["TOGGLE IDS"]}]}]},{p:[77,4,2316],t:7,e:"tr",f:[{p:[77,8,2320],t:7,e:"td",f:[{p:[77,12,2324],t:7,e:"ui-button",a:{action:"updatemaxlogs"},f:["SET LOG LIMIT"]}]}]},{p:[78,4,2388],t:7,e:"tr",f:[{p:[78,8,2392],t:7,e:"td",f:[{p:[78,12,2396],t:7,e:"ui-button",a:{action:"purgelogs"},f:["PURGE LOGS"]}]}]}]}," ",{p:[81,3,2467],t:7,e:"ui-subdisplay",a:{title:"System Logs"},f:[{p:[82,3,2506],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[83,3,2561],t:7,e:"div",a:{"class":"item"},f:[{p:[84,4,2584],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"entry",p:[86,6,2667]},{p:[86,15,2676],t:7,e:"br"}],n:52,r:"data.ntnetlogs",p:[85,5,2636]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],275:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,2,102],t:7,e:"div",a:{"class":"item"},f:[{p:[8,3,124],t:7,e:"h2",f:["An error has occurred during operation..."]}," ",{p:[9,3,178],t:7,e:"b",f:["Additional information:"]},{t:2,r:"data.error",p:[9,34,209]},{p:[9,48,223],t:7,e:"br"}," ",{p:[10,3,231],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Clear"]}]}],n:50,r:"data.error",p:[6,2,81]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.downloading"],s:"_0"},f:[{p:[13,3,321],t:7,e:"h2",f:["Download in progress..."]}," ",{p:[14,3,357],t:7,e:"div",a:{"class":"itemLabel"},f:["Downloaded file:"]}," ",{p:[17,3,416],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_name",p:[18,4,446]}]}," ",{p:[20,3,483],t:7,e:"div",a:{"class":"itemLabel"},f:["Download progress:"]}," ",{p:[23,3,544],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_progress",p:[24,4,574]}," / ",{t:2,r:"data.download_size",p:[24,33,603]}," GQ"]}," ",{p:[26,3,642],t:7,e:"div",a:{"class":"itemLabel"},f:["Transfer speed:"]}," ",{p:[29,3,700],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_netspeed",p:[30,4,730]},"GQ/s"]}," ",{p:[32,3,774],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[35,3,826],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[36,4,856],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Abort download"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading"],s:"(!(_0))&&(_1)"},f:[" ",{p:[39,3,954],t:7,e:"h2",f:["Server enabled"]}," ",{p:[40,3,981],t:7,e:"div",a:{"class":"itemLabel"},f:["Connected clients:"]}," ",{p:[43,3,1042],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_clients",p:[44,4,1072]}]}," ",{p:[46,3,1109],t:7,e:"div",a:{"class":"itemLabel"},f:["Provided file:"]}," ",{p:[49,3,1166],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_filename",p:[50,4,1196]}]}," ",{p:[52,3,1234],t:7,e:"div",a:{"class":"itemLabel"},f:["Server password:"]}," ",{p:[55,3,1293],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ENABLED"],n:50,r:"data.upload_haspassword",p:[56,4,1323]},{t:4,n:51,f:["DISABLED"],r:"data.upload_haspassword"}]}," ",{p:[62,3,1420],t:7,e:"div",a:{"class":"itemLabel"},f:["Commands:"]}," ",{p:[65,3,1472],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[66,4,1502],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[67,4,1567],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Exit server"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(_2))"},f:[" ",{p:[70,3,1668],t:7,e:"h2",f:["File transfer server ready. Select file to upload:"]}," ",{p:[71,3,1732],t:7,e:"table",f:[{p:[72,3,1743],t:7,e:"tr",f:[{p:[72,7,1747],t:7,e:"th",f:["File name"]},{p:[72,20,1760],t:7,e:"th",f:["File size"]},{p:[72,33,1773],t:7,e:"th",f:["Controls ",{t:4,f:[{p:[74,4,1824],t:7,e:"tr",f:[{p:[74,8,1828],t:7,e:"td",f:[{t:2,r:"filename",p:[74,12,1832]}]},{p:[75,4,1849],t:7,e:"td",f:[{t:2,r:"size",p:[75,8,1853]},"GQ"]},{p:[76,4,1868],t:7,e:"td",f:[{p:[76,8,1872],t:7,e:"ui-button",a:{action:"PRG_uploadfile",params:['{"id": "',{t:2,r:"uid",p:[76,59,1923]},'"}']},f:["Select"]}]}]}],n:52,r:"data.upload_filelist",p:[73,3,1789]}]}]}]}," ",{p:[79,3,1981],t:7,e:"hr"}," ",{p:[80,3,1989],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[81,3,2053],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Return"]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(!(_2)))"},f:[" ",{p:[83,3,2116],t:7,e:"h2",f:["Available files:"]}," ",{p:[84,3,2145],t:7,e:"table",a:{border:"1",style:"border-collapse: collapse"},f:[{p:[84,55,2197],t:7,e:"tr",f:[{p:[84,59,2201],t:7,e:"th",f:["Server UID"]},{p:[84,73,2215],t:7,e:"th",f:["File Name"]},{p:[84,86,2228],t:7,e:"th",f:["File Size"]},{p:[84,99,2241],t:7,e:"th",f:["Password Protection"]},{p:[84,122,2264],t:7,e:"th",f:["Operations ",{t:4,f:[{p:[86,5,2311],t:7,e:"tr",f:[{p:[86,9,2315],t:7,e:"td",f:[{t:2,r:"uid",p:[86,13,2319]}]},{p:[87,5,2332],t:7,e:"td",f:[{t:2,r:"filename",p:[87,9,2336]}]},{p:[88,5,2354],t:7,e:"td",f:[{t:2,r:"size",p:[88,9,2358]},"GQ ",{t:4,f:[{p:[90,6,2400],t:7,e:"td",f:["Enabled"]}],n:50,r:"haspassword",p:[89,5,2374]}," ",{t:4,f:[{p:[93,6,2457],t:7,e:"td",f:["Disabled"]}],n:50,x:{r:["haspassword"],s:"!_0"},p:[92,5,2430]}]},{p:[96,5,2494],t:7,e:"td",f:[{p:[96,9,2498],t:7,e:"ui-button",a:{action:"PRG_downloadfile",params:['{"id": "',{t:2,r:"uid",p:[96,62,2551]},'"}']},f:["Download"]}]}]}],n:52,r:"data.servers",p:[85,4,2283]}]}]}]}," ",{p:[99,3,2612],t:7,e:"hr"}," ",{p:[100,3,2620],t:7,e:"ui-button",a:{action:"PRG_uploadmenu"},f:["Send file"]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],276:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[43,1,1082],t:7,e:"ntosheader"}," ",{p:[45,1,1099],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[47,5,1157],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData", + p:[47,27,1179]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[49,38,1331]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[50,15,1387]}],yinc:"9"}}],n:50,r:"config.fancy",p:[46,3,1131]},{t:4,n:51,f:[{p:[52,5,1437],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[53,7,1475],t:7,e:"span",f:[{t:2,r:"data.supply",p:[53,13,1481]}," W"]}]}," ",{p:[55,5,1530],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[56,9,1565],t:7,e:"span",f:[{t:2,r:"data.demand",p:[56,15,1571]}," W"]}]}],r:"config.fancy"}]}," ",{p:[60,1,1642],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[61,3,1672],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[62,5,1697],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[63,5,1734],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[64,5,1773],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[65,5,1810],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[66,5,1849],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[67,5,1891],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[68,5,1932],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[71,5,2017],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[71,24,2036]}],nowrap:0},f:[{p:[72,7,2061],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[72,28,2082]}," %"]}," ",{p:[73,7,2140],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].load)"},p:[73,28,2161]}," W"]}," ",{p:[74,7,2217],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2238],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[74,41,2251]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[74,70,2280]}]}]}," ",{p:[75,7,2327],t:7,e:"div",a:{"class":"content"},f:[{p:[75,28,2348],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[75,41,2361]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[75,64,2384]}," [",{p:[75,87,2407],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[75,93,2413]}]},"]"]}]}," ",{p:[76,7,2462],t:7,e:"div",a:{"class":"content"},f:[{p:[76,28,2483],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[76,41,2496]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[76,64,2519]}," [",{p:[76,87,2542],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[76,93,2548]}]},"]"]}]}," ",{p:[77,7,2597],t:7,e:"div",a:{"class":"content"},f:[{p:[77,28,2618],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[77,41,2631]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[77,64,2654]}," [",{p:[77,87,2677],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[77,93,2683]}]},"]"]}]}]}],n:52,r:"data.areas",p:[70,3,1991]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],277:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{p:[5,2,79],t:7,e:"div",a:{"class":"item"},f:[{p:[6,3,101],t:7,e:"div",a:{"class":"itemLabel"},f:["Payload status:"]}," ",{p:[9,3,158],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ARMED"],n:50,r:"data.armed",p:[10,4,188]},{t:4,n:51,f:["DISARMED"],r:"data.armed"}]}," ",{p:[16,3,270],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[19,3,321],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[20,4,351],t:7,e:"table",f:[{p:[21,4,363],t:7,e:"tr",f:[{p:[21,8,367],t:7,e:"td",f:[{p:[21,12,371],t:7,e:"ui-button",a:{action:"PRG_obfuscate"},f:["OBFUSCATE PROGRAM NAME"]}]}]},{p:[22,4,444],t:7,e:"tr",f:[{p:[22,8,448],t:7,e:"td",f:[{p:[22,12,452],t:7,e:"ui-button",a:{action:"PRG_arm",state:[{t:2,x:{r:["data.armed"],s:'_0?"danger":null'},p:[22,47,487]}]},f:[{t:2,x:{r:["data.armed"],s:'_0?"DISARM":"ARM"'},p:[22,81,521]}]}," ",{p:[23,4,571],t:7,e:"ui-button",a:{icon:"radiation",state:[{t:2,x:{r:["data.armed"],s:'_0?null:"disabled"'},p:[23,39,606]}],action:"PRG_activate"},f:["ACTIVATE"]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],278:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,3,95],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[5,22,114]}," Alarms"]},f:[{p:[6,5,138],t:7,e:"ul",f:[{t:4,f:[{p:[8,9,171],t:7,e:"li",f:[{t:2,r:".",p:[8,13,175]}]}],n:52,r:".",p:[7,7,150]},{t:4,n:51,f:[{p:[10,9,211],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[4,1,64]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],279:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={data:{integState:function(t){var e=100;return t==e?"good":t>e/2?"average":"bad"},bigState:function(t,e,n){return charge>n?"bad":t>e?"average":"good"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[23,1,421],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[27,2,462],t:7,e:"ui-button",a:{action:"PRG_clear"},f:["Back to Menu"]},{p:[27,56,516],t:7,e:"br"}," ",{p:[28,3,524],t:7,e:"ui-display",a:{title:"Supermatter Status:"},f:[{p:[29,3,568],t:7,e:"ui-section",a:{label:"Core Integrity"},f:[{p:[30,5,609],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"adata.SM_integrity",p:[30,38,642]}],state:[{t:2,x:{r:["integState","adata.SM_integrity"],s:"_0(_1)"},p:[30,69,673]}]},f:[{t:2,r:"data.SM_integrity",p:[30,105,709]},"%"]}]}," ",{p:[32,3,761],t:7,e:"ui-section",a:{label:"Relative EER"},f:[{p:[33,5,800],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_power"],s:"_0(_1,150,300)"},p:[33,18,813]}]},f:[{t:2,r:"data.SM_power",p:[33,55,850]}," MeV/cm3"]}]}," ",{p:[35,3,903],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[36,5,941],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambienttemp"],s:"_0(_1,4000,5000)"},p:[36,18,954]}]},f:[{t:2,r:"data.SM_ambienttemp",p:[36,63,999]}," K"]}]}," ",{p:[38,3,1052],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[39,5,1087],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambientpressure"],s:"_0(_1,5000,10000)"},p:[39,18,1100]}]},f:[{t:2,r:"data.SM_ambientpressure",p:[39,68,1150]}," kPa"]}]}]}," ",{p:[42,3,1227],t:7,e:"hr"},{p:[42,7,1231],t:7,e:"br"}," ",{p:[43,3,1239],t:7,e:"ui-display",a:{title:"Gas Composition:"},f:[{t:4,f:[{p:[45,5,1307],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[45,24,1326]}]},f:[{t:2,r:"amount",p:[46,6,1343]}," %"]}],n:52,r:"data.gases",p:[44,4,1281]}]}],n:50,r:"data.active",p:[26,1,440]},{t:4,n:51,f:[{p:[51,2,1418],t:7,e:"ui-button",a:{action:"PRG_refresh"},f:["Refresh"]},{p:[51,53,1469],t:7,e:"br"}," ",{p:[52,2,1476],t:7,e:"ui-display",a:{title:"Detected Supermatters"},f:[{t:4,f:[{p:[54,3,1552],t:7,e:"ui-section",a:{label:"Area"},f:[{t:2,r:"area_name",p:[55,5,1583]}," - (#",{t:2,r:"uid",p:[55,23,1601]},")"]}," ",{p:[57,3,1630],t:7,e:"ui-section",a:{label:"Integrity"},f:[{t:2,r:"integrity",p:[58,5,1666]}," %"]}," ",{p:[60,3,1702],t:7,e:"ui-section",a:{label:"Options"},f:[{p:[61,5,1736],t:7,e:"ui-button",a:{action:"PRG_set",params:['{"target" : "',{t:2,r:"uid",p:[61,54,1785]},'"}']},f:["View Details"]}]}],n:52,r:"data.supermatters",p:[53,2,1521]}]}],r:"data.active"}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(280)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,280:280}],280:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"item",style:"float: left"},f:[{p:[2,2,41],t:7,e:"table",f:[{p:[2,9,48],t:7,e:"tr",f:[{t:4,f:[{p:[4,3,113],t:7,e:"td",f:[{p:[4,7,117],t:7,e:"img",a:{src:[{t:2,r:"data.PC_batteryicon",p:[4,17,127]}]}}]}],n:50,x:{r:["data.PC_batteryicon","data.PC_showbatteryicon"],s:"_0&&_1"},p:[3,2,55]}," ",{t:4,f:[{p:[7,3,226],t:7,e:"td",f:[{p:[7,7,230],t:7,e:"b",f:[{t:2,r:"data.PC_batterypercent",p:[7,10,233]}]}]}],n:50,x:{r:["data.PC_batterypercent","data.PC_showbatteryicon"],s:"_0&&_1"},p:[6,2,165]}," ",{t:4,f:[{p:[10,3,305],t:7,e:"td",f:[{p:[10,7,309],t:7,e:"img",a:{src:[{t:2,r:"data.PC_ntneticon",p:[10,17,319]}]}}]}],n:50,r:"data.PC_ntneticon",p:[9,2,276]}," ",{t:4,f:[{p:[13,3,386],t:7,e:"td",f:[{p:[13,7,390],t:7,e:"img",a:{src:[{t:2,r:"data.PC_apclinkicon",p:[13,17,400]}]}}]}],n:50,r:"data.PC_apclinkicon",p:[12,2,355]}," ",{t:4,f:[{p:[16,3,469],t:7,e:"td",f:[{p:[16,7,473],t:7,e:"b",f:[{t:2,r:"data.PC_stationtime",p:[16,10,476]}]}]}],n:50,r:"data.PC_stationtime",p:[15,2,438]}," ",{t:4,f:[{p:[19,3,552],t:7,e:"td",f:[{p:[19,7,556],t:7,e:"img",a:{src:[{t:2,r:"icon",p:[19,17,566]}]}}]}],n:52,r:"data.PC_programheaders",p:[18,2,516]}]}]}]}," ",{p:[23,1,609],t:7,e:"div",a:{style:"float: right; margin-top: 5px"},f:[{p:[24,2,655],t:7,e:"ui-button",a:{action:"PC_shutdown"},f:["Shutdown"]}," ",{t:4,f:[{p:[26,3,745],t:7,e:"ui-button",a:{action:"PC_exit"},f:["EXIT PROGRAM"]}," ",{p:[27,3,801],t:7,e:"ui-button",a:{action:"PC_minimize"},f:["Minimize Program"]}],n:50,r:"data.PC_showexitprogram",p:[25,2,710]}]}," ",{p:[30,1,881],t:7,e:"div",a:{style:"clear: both"}}]},e.exports=a.extend(r.exports)},{205:205}],281:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Auth. Disk:"},f:[{t:4,f:[{p:[3,7,69],t:7,e:"ui-button",a:{icon:"eject",style:"selected",action:"eject_disk"},f:["++++++++++"]}],n:50,r:"data.disk_present",p:[2,3,36]},{t:4,n:51,f:[{p:[5,7,172],t:7,e:"ui-button",a:{icon:"plus",action:"insert_disk"},f:["----------"]}],r:"data.disk_present"}]}," ",{p:[8,1,266],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[9,3,297],t:7,e:"span",f:[{t:2,r:"data.status1",p:[9,9,303]},"-",{t:2,r:"data.status2",p:[9,26,320]}]}]}," ",{p:[11,1,360],t:7,e:"ui-display",a:{title:"Timer"},f:[{p:[12,3,390],t:7,e:"ui-section",a:{label:"Time to Detonation"},f:[{p:[13,5,435],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[13,11,441]}]}]}," ",{t:4,f:[{p:[16,5,540],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[17,7,581],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_default"],s:'_0&&_1&&_2?null:"disabled"'},p:[17,40,614]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[19,7,786],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_min"],s:'_0&&_1&&_2?null:"disabled"'},p:[19,38,817]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[21,7,991],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[21,39,1023]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[22,7,1155],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_max"],s:'_0&&_1&&_2?null:"disabled"'},p:[22,37,1185]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[15,3,518]}," ",{p:[26,3,1394],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[27,5,1426],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[27,38,1459]}],action:"toggle_timer",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.safety"],s:'_0&&_1&&!_2?null:"disabled"'},p:[29,14,1542]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[30,7,1631]}]}]}]}," ",{p:[34,1,1713],t:7,e:"ui-display",a:{title:"Anchoring"},f:[{p:[35,3,1747],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[36,12,1770]}],icon:[{t:2,x:{r:["data.anchored"],s:'_0?"lock":"unlock"'},p:[37,11,1846]}],style:[{t:2,x:{r:["data.anchored"],s:'_0?null:"caution"'},p:[38,12,1897]}],action:"anchor"},f:[{t:2,x:{r:["data.anchored"],s:'_0?"Engaged":"Off"'},p:[39,21,1956]}]}]}," ",{p:[41,1,2022],t:7,e:"ui-display",a:{title:"Safety"},f:[{p:[42,3,2053],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[43,12,2076]}],icon:[{t:2,x:{r:["data.safety"],s:'_0?"lock":"unlock"'},p:[44,11,2152]}],action:"safety",style:[{t:2,x:{r:["data.safety"],s:'_0?"caution":"danger"'},p:[45,12,2217]}]},f:[{p:[46,7,2265],t:7,e:"span",f:[{t:2,x:{r:["data.safety"],s:'_0?"On":"Off"'},p:[46,13,2271]}]}]}]}," ",{p:[49,1,2341],t:7,e:"ui-display",a:{title:"Code"},f:[{p:[50,3,2370],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.message",p:[50,31,2398]}]}," ",{p:[51,3,2431],t:7,e:"ui-section",a:{label:"Keypad"},f:[{p:[52,5,2464],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[52,39,2498]}],params:'{"digit":"1"}'},f:["1"]}," ",{p:[53,5,2583],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[53,39,2617]}],params:'{"digit":"2"}'},f:["2"]}," ",{p:[54,5,2702],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[54,39,2736]}],params:'{"digit":"3"}'},f:["3"]}," ",{p:[55,5,2821],t:7,e:"br"}," ",{p:[56,5,2831],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[56,39,2865]}],params:'{"digit":"4"}'},f:["4"]}," ",{p:[57,5,2950],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[57,39,2984]}],params:'{"digit":"5"}'},f:["5"]}," ",{p:[58,5,3069],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[58,39,3103]}],params:'{"digit":"6"}'},f:["6"]}," ",{p:[59,5,3188],t:7,e:"br"}," ",{p:[60,5,3198],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[60,39,3232]}],params:'{"digit":"7"}'},f:["7"]}," ",{p:[61,5,3317],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[61,39,3351]}],params:'{"digit":"8"}'},f:["8"]}," ",{p:[62,5,3436],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[62,39,3470]}],params:'{"digit":"9"}'},f:["9"]}," ",{p:[63,5,3555],t:7,e:"br"}," ",{p:[64,5,3565],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[64,39,3599]}],params:'{"digit":"R"}'},f:["R"]}," ",{p:[65,5,3684],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[65,39,3718]}],params:'{"digit":"0"}'},f:["0"]}," ",{p:[66,5,3803],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[66,39,3837]}],params:'{"digit":"E"}'},f:["E"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],282:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,15],t:7,e:"ui-section",f:["This machine only accepts ore. Gibtonite and Slag are not accepted."]}," ",{p:[5,2,117],t:7,e:"ui-section",f:["Current unclaimed points: ",{t:2,r:"data.unclaimedPoints",p:[6,29,159]}," ",{t:4,f:[{p:[8,4,220],t:7,e:"ui-button",a:{action:"Claim"},f:["Claim Points"]}],n:50,r:"data.unclaimedPoints",p:[7,3,187]}]}," ",{p:[13,2,311],t:7,e:"ui-section",f:[{t:4,f:[{p:[15,4,350],t:7,e:"ui-button",a:{action:"Eject"},f:["Eject ID"]}," You have ",{t:2,r:"data.claimedPoints",p:[18,13,421]}," mining points collected."],n:50,r:"data.hasID",p:[14,3,327]},{t:4,n:51,f:[{p:[20,4,485],t:7,e:"ui-button",a:{action:"Insert"},f:["Insert ID"]}],r:"data.hasID"}]}]}," ",{p:[26,1,588],t:7,e:"ui-display",f:[{t:4,f:[{p:[28,3,627],t:7,e:"ui-section",f:[{p:[29,4,644],t:7,e:"ui-button",a:{action:"diskEject",icon:"eject"},f:["Eject Disk"]}]}," ",{t:4,f:[{p:[34,4,772],t:7,e:"ui-section",a:{"class":"candystripe"},f:[{p:[35,5,808],t:7,e:"ui-button",a:{action:"diskUpload",state:[{t:2,x:{r:["canupload"],s:'(_0)?null:"disabled"'},p:[35,42,845]}],icon:"upload",align:"right",params:['{ "design" : "',{t:2,r:"index",p:[35,129,932]},'" }']},f:["Upload"]}," File ",{t:2,r:"index",p:[38,10,988]},": ",{t:2,r:"name",p:[38,21,999]}]}],n:52,r:"data.diskDesigns",p:[33,3,741]}],n:50,r:"data.hasDisk",p:[27,2,603]},{t:4,n:51,f:[{p:[42,3,1053],t:7,e:"ui-section",f:[{p:[43,4,1070],t:7,e:"ui-button",a:{action:"diskInsert",icon:"floppy-o"},f:["Insert Disk"]}]}],r:"data.hasDisk"}]}," ",{p:[49,1,1195],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[50,2,1227],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[51,4,1261],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[54,4,1316],t:7,e:"section",a:{"class":"cell"},f:["Sheets"]}," ",{p:[57,4,1370],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[59,4,1412],t:7,e:"section",a:{"class":"cell"},f:[{p:[60,5,1440],t:7,e:"ui-button",a:{"class":"center mineral",grid:0,action:"Release",params:'{"id" : "all"}'},f:["Release All"]}]}," ",{p:[64,4,1576],t:7,e:"section",a:{"class":"cell"},f:["Ore Value"]}]}," ",{t:4,f:[{p:[69,3,1673],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[70,4,1707],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[71,5,1735]}]}," ",{p:[73,4,1763],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[74,5,1805]}]}," ",{p:[76,4,1835],t:7,e:"section",a:{"class":"cell"},f:[{p:[77,5,1863],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[77,18,1876]}],placeholder:"###","class":"number"}}]}," ",{p:[79,4,1941],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[80,5,1983],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[80,59,2037]}],params:['{ "id" : ',{t:2,r:"id",p:[80,114,2092]},', "sheets" : ',{t:2,r:"sheets",p:[80,133,2111]}," }"]},f:["Release"]}]}," ",{p:[84,4,2178],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"value",p:[85,5,2220]}]}]}],n:52,r:"data.materials",p:[68,2,1645]}," ",{t:4,f:[{p:[90,3,2298],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[91,4,2332],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[92,5,2360]}]}," ",{p:[94,4,2388],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[95,5,2430]}]}," ",{p:[97,4,2460],t:7,e:"section",a:{"class":"cell"},f:[{p:[98,5,2488],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[98,18,2501]}],placeholder:"###","class":"number"}}]}," ",{p:[100,4,2566],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[101,5,2608],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Smelt",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[101,57,2660]}],params:['{ "id" : ',{t:2,r:"id",p:[101,113,2716]},', "sheets" : ',{t:2,r:"sheets",p:[101,132,2735]}," }"]},f:["Smelt"]}]}," ",{p:[105,4,2799],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[106,5,2841],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"SmeltAll",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[106,60,2896]}],params:['{ "id" : ',{t:2,r:"id",p:[106,116,2952]}," }"]},f:["Smelt All"]}]}]}],n:52,r:"data.alloys",p:[89,2,2273]}]}]},e.exports=a.extend(r.exports)},{205:205}],283:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,3,60],t:7,e:"ui-button",a:{icon:"remove",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[3,35,92]}],action:"empty_eject_beaker"},f:["Empty and eject"]}," ",{p:[6,3,201],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[6,34,232]}],action:"empty_beaker"},f:["Empty"]}," ",{p:[9,3,325],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[9,34,356]}],action:"eject_beaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{t:4,f:[{p:[14,3,490],t:7,e:"ui-section",f:[{t:4,f:[{p:[16,5,538],t:7,e:"span",a:{"class":"bad"},f:["The beaker is empty!"]}],n:50,r:"data.beaker_empty",p:[15,4,507]},{t:4,n:51,f:[{p:[18,5,602],t:7,e:"ui-subdisplay",a:{title:"Blood"},f:[{t:4,f:[{p:[20,7,668],t:7,e:"ui-section",a:{label:"Blood DNA"},f:[{t:2,r:"data.blood.dna",p:[20,37,698]}]}," ",{p:[21,7,737],t:7,e:"ui-section",a:{label:"Blood type"},f:[{t:2,r:"data.blood.type",p:[21,38,768]}]}],n:50,r:"data.has_blood",p:[19,6,638]},{t:4,n:51,f:[{p:[23,7,823],t:7,e:"ui-section",f:[{p:[24,8,844],t:7,e:"span",a:{"class":"average"},f:["No blood sample detected."]}]}],r:"data.has_blood"}]}],r:"data.beaker_empty"}]}],n:50,r:"data.has_beaker",p:[13,2,463]},{t:4,n:51,f:[{p:[31,3,999],t:7,e:"ui-section",f:[{p:[32,4,1016],t:7,e:"span",a:{"class":"bad"},f:["No beaker loaded."]}]}],r:"data.has_beaker"}]}," ",{t:4,f:[{p:[37,2,1127],t:7,e:"ui-display",a:{title:"Diseases"},f:[{t:4,f:[{p:{button:[{t:4,f:[{p:[42,7,1277],t:7,e:"ui-button",a:{icon:"pencil",action:"rename_disease",state:[{t:2,x:{r:["can_rename"],s:'_0?"":"disabled"'},p:[42,63,1333]}],params:['{"index": ',{t:2,r:"index",p:[42,115,1385]},"}"]},f:["Name advanced disease"]}],n:50,r:"is_adv",p:[41,6,1255]}," ",{p:[46,6,1468],t:7,e:"ui-button",a:{icon:"flask",action:"create_culture_bottle",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[46,68,1530]}],params:['{"index": ',{t:2,r:"index",p:[46,123,1585]},"}"]},f:["Create virus culture bottle"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[39,23,1206]}],button:0},f:[" ",{p:[50,5,1675],t:7,e:"ui-section",a:{label:"Disease agent"},f:[{t:2,r:"agent",p:[50,39,1709]}]}," ",{p:[51,5,1737],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[51,37,1769]}]}," ",{p:[52,5,1803],t:7,e:"ui-section",a:{label:"Spread"},f:[{t:2,r:"spread",p:[52,32,1830]}]}," ",{p:[53,5,1859],t:7,e:"ui-section",a:{label:"Possible cure"},f:[{t:2,r:"cure",p:[53,39,1893]}]}," ",{t:4,f:[{p:[55,6,1942],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[55,37,1973]}]}," ",{p:[56,6,2007],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[56,34,2035]}]}," ",{p:[57,6,2066],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[57,38,2098]}]}," ",{p:[58,6,2133],t:7,e:"ui-section",a:{label:"Symptoms"},f:[{t:4,f:[{p:[60,8,2197],t:7,e:"span",f:[{t:2,r:"name",p:[60,14,2203]}]},{p:[60,29,2218],t:7,e:"br"}],n:52,r:"symptoms",p:[59,7,2170]}]}],n:50,r:"is_adv",p:[54,5,1921]}]}],n:52,r:"data.viruses",p:[38,3,1160]},{t:4,n:51,f:[{p:[66,4,2309],t:7,e:"ui-section",f:[{p:[67,5,2327],t:7,e:"span",a:{"class":"average"},f:["No detectable virus in the blood sample."]}]}],r:"data.viruses"}]}," ",{p:[71,2,2446],t:7,e:"ui-display",a:{title:"Antibodies"},f:[{t:4,f:[{p:[73,4,2512],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[73,23,2531]}]},f:[{p:[74,6,2548],t:7,e:"ui-button",a:{icon:"eyedropper",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[74,42,2584]}],action:"create_vaccine_bottle",params:['{"index": ',{t:2,r:"id",p:[74,128,2670]},"}"]},f:["Create vaccine bottle"]}]}],n:52,r:"data.resistances",p:[72,3,2481]},{t:4,n:51,f:[{p:[79,4,2762],t:7,e:"ui-section",f:[{p:[80,5,2780],t:7,e:"span",a:{"class":"average"},f:["No antibodies detected in the blood sample."]}]}],r:"data.resistances"}]}],n:50,r:"data.has_blood",p:[36,1,1102]}]},e.exports=a.extend(r.exports)},{205:205}],284:[function(t,e,n){var a=t(205),r={exports:{}};!function(e){"use strict";var n=t(312);e.exports={data:{filter:"",tooltiptext:function(t,e,n){var a="";return t&&(a+="REQUIREMENTS: "+t+" "),e&&(a+="CATALYSTS: "+e+" "),n&&(a+="TOOLS: "+n),a}},oninit:function(){var t=this;this.on({hover:function(t){this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}}),this.observe("filter",function(e,a,r){var i=null;i=t.get("data.display_compact")?t.findAll(".section"):t.findAll(".display:not(:first-child)"),(0,n.filterMulti)(i,t.get("filter").toLowerCase())},{init:!1})}}}(r),r.exports.template={v:3,t:[" ",{p:[48,1,1342],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[48,20,1361]},{t:4,f:[" : ",{t:2,r:"data.subcategory",p:[48,64,1405]}],n:50,r:"data.subcategory",p:[48,37,1378]}]},f:[{t:4,f:[{p:[50,3,1459],t:7,e:"ui-section",f:["Crafting... ",{p:[51,16,1488],t:7,e:"i",a:{"class":"fa-spin fa fa-spinner"}}]}],n:50,r:"data.busy",p:[49,2,1438]},{t:4,n:51,f:[{p:[54,3,1557],t:7,e:"ui-section",f:[{p:[55,4,1574],t:7,e:"table",a:{style:"width:100%"},f:[{p:[56,5,1606],t:7,e:"tr",f:[{p:[57,6,1617],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[58,7,1659],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardCat"},f:[{t:2,r:"data.prev_cat",p:[59,8,1718]}]}]}," ",{p:[62,6,1774],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[63,7,1816],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardCat"},f:[{t:2,r:"data.next_cat",p:[64,7,1874]}]}]}," ",{p:[67,6,1930],t:7,e:"td",a:{style:"float:right!important"},f:[{t:4,f:[{p:[69,7,2014],t:7,e:"ui-button",a:{icon:"lock",action:"toggle_recipes"},f:["Showing Craftable Recipes"]}],n:50,r:"data.display_craftable_only",p:[68,6,1971]},{t:4,n:51,f:[{p:[73,7,2138],t:7,e:"ui-button",a:{icon:"unlock",action:"toggle_recipes"},f:["Showing All Recipes"]}],r:"data.display_craftable_only"}]}," ",{p:[78,6,2268],t:7,e:"td",a:{style:"float:right!important"},f:[{p:[79,7,2310],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.display_compact"],s:'_0?"check-square-o":"square-o"'},p:[79,24,2327]}],action:"toggle_compact"},f:["Compact"]}]}]}," ",{p:[84,5,2474],t:7,e:"tr",f:[{t:4,f:[{p:[86,6,2515],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[87,7,2557],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardSubCat"},f:[{t:2,r:"data.prev_subcat",p:[88,8,2619]}]}]}," ",{p:[91,6,2678],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[92,7,2720],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardSubCat"},f:[{t:2,r:"data.next_subcat",p:[93,8,2782]}]}]}],n:50,r:"data.subcategory",p:[85,5,2484]}]}]}," ",{t:4,f:[{t:4,f:[" ",{p:[101,6,2992],t:7,e:"ui-input",a:{value:[{t:2,r:"filter",p:[101,23,3009]}],placeholder:"Filter.."}}],n:51,r:"data.display_compact",p:[100,5,2902]}],n:50,r:"config.fancy",p:[99,4,2876]}]}," ",{t:4,f:[{p:[106,5,3144],t:7,e:"ui-display",f:[{t:4,f:[{p:[108,6,3193],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[108,25,3212]}]},f:[{p:[109,7,3230],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[109,27,3250]}],"tooltip-side":"right",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[109,135,3358]},'"}'],icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.can_craft",p:[107,5,3162]}," ",{t:4,f:[{t:4,f:[{p:[116,7,3567],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[116,26,3586]}]},f:[{p:[117,8,3605],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[117,28,3625]}],"tooltip-side":"right",state:"disabled",icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.cant_craft",p:[115,6,3534]}],n:51,r:"data.display_craftable_only",p:[114,5,3495]}]}],n:50,r:"data.display_compact",p:[105,4,3110]},{t:4,n:51,f:[{t:4,f:[{p:[126,6,3947],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[126,25,3966]}]},f:[{t:4,f:[{p:[128,8,4009],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[129,9,4052]}]}],n:50,r:"req_text",p:[127,7,3984]}," ",{t:4,f:[{p:[133,8,4139],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[134,9,4179]}]}],n:50,r:"catalyst_text",p:[132,7,4109]}," ",{t:4,f:[{p:[138,8,4267],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[139,9,4303]}]}],n:50,r:"tool_text",p:[137,7,4241]}," ",{p:[142,7,4361],t:7,e:"ui-section",f:[{p:[143,8,4382],t:7,e:"ui-button",a:{icon:"gears",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[143,66,4440]},'"}']},f:["Craft"]}]}]}],n:52,r:"data.can_craft",p:[125,5,3916]}," ",{t:4,f:[{t:4,f:[{p:[151,7,4621],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[151,26,4640]}]},f:[{t:4,f:[{p:[153,9,4685],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[154,10,4729]}]}],n:50,r:"req_text",p:[152,8,4659]}," ",{t:4,f:[{p:[158,9,4820],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[159,10,4861]}]}],n:50,r:"catalyst_text",p:[157,8,4789]}," ",{t:4,f:[{p:[163,9,4953],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[164,10,4990]}]}],n:50,r:"tool_text",p:[162,8,4926]}]}],n:52,r:"data.cant_craft",p:[150,6,4588]}],n:51,r:"data.display_craftable_only",p:[149,5,4549]}],r:"data.display_compact"}],r:"data.busy"}]}]},e.exports=a.extend(r.exports)},{205:205,312:312}],285:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,15],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[2,23,35]}," connected to a tank."]}]}," ",{p:[4,1,113],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[5,3,151],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,5,186],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[6,11,192]}," kPa"]}]}," ",{p:[8,3,254],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[9,5,285],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[9,18,298]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[9,59,339]}]}]}]}," ",{p:[12,1,430],t:7,e:"ui-display",a:{title:"Pump"},f:[{p:[13,3,459],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,5,491],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[14,22,508]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[15,14,559]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[16,22,616]}]}]}," ",{p:[18,3,675],t:7,e:"ui-section",a:{label:"Direction"},f:[{p:[19,5,711],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"sign-out":"sign-in"'},p:[19,22,728]}],action:"direction"},f:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"Out":"In"'},p:[20,26,808]}]}]}," ",{p:[22,3,883],t:7,e:"ui-section",a:{label:"Target Pressure"},f:[{p:[23,5,925],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.min_pressure",p:[23,18,938]}],max:[{t:2,r:"data.max_pressure",p:[23,46,966]}],value:[{t:2,r:"data.target_pressure",p:[24,14,1003]}]},f:[{t:2,x:{r:["adata.target_pressure"],s:"Math.round(_0)"},p:[24,40,1029]}," kPa"]}]}," ",{p:[26,3,1100],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,1145],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.target_pressure","data.default_pressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,1178]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1328],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.target_pressure","data.min_pressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1359]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1500],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1595],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.target_pressure","data.max_pressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1625]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}," ",{p:{button:[{t:4,f:[{p:[39,7,1891],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[39,38,1922]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[38,5,1863]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[43,3,2042],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[44,4,2073]}]}," ",{p:[46,3,2115],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[47,4,2149]}," kPa"]}],n:50,r:"data.holding",p:[42,3,2018]},{t:4,n:51,f:[{p:[50,3,2223],t:7,e:"ui-section",f:[{p:[51,4,2240],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}]},e.exports=a.extend(r.exports)},{205:205}],286:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0], + t:7,e:"ui-notice",f:[{p:[2,3,15],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[2,23,35]}," connected to a tank."]}]}," ",{p:[4,1,113],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[5,3,151],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,5,186],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[6,11,192]}," kPa"]}]}," ",{p:[8,3,254],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[9,5,285],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[9,18,298]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[9,59,339]}]}]}]}," ",{p:[12,1,430],t:7,e:"ui-display",a:{title:"Filter"},f:[{p:[13,3,461],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,5,493],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[14,22,510]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[15,14,561]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[16,22,618]}]}]}]}," ",{p:{button:[{t:4,f:[{p:[22,7,787],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[22,38,818]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[21,5,759]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[26,3,938],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[27,4,969]}]}," ",{p:[29,3,1011],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[30,4,1045]}," kPa"]}],n:50,r:"data.holding",p:[25,3,914]},{t:4,n:51,f:[{p:[33,3,1119],t:7,e:"ui-section",f:[{p:[34,4,1136],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}]},e.exports=a.extend(r.exports)},{205:205}],287:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" ",{p:[42,1,1035],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[44,5,1093],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[44,27,1115]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[46,38,1267]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[47,15,1323]}],yinc:"9"}}],n:50,r:"config.fancy",p:[43,3,1067]},{t:4,n:51,f:[{p:[49,5,1373],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[50,7,1411],t:7,e:"span",f:[{t:2,r:"data.supply",p:[50,13,1417]}," W"]}]}," ",{p:[52,5,1466],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[53,9,1501],t:7,e:"span",f:[{t:2,r:"data.demand",p:[53,15,1507]}," W"]}]}],r:"config.fancy"}]}," ",{p:[57,1,1578],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[58,3,1608],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[59,5,1633],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[60,5,1670],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[61,5,1709],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[62,5,1746],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[63,5,1785],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[64,5,1827],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[65,5,1868],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[68,5,1953],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[68,24,1972]}],nowrap:0},f:[{p:[69,7,1997],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[69,28,2018]}," %"]}," ",{p:[70,7,2076],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].load)"},p:[70,28,2097]}," W"]}," ",{p:[71,7,2153],t:7,e:"div",a:{"class":"content"},f:[{p:[71,28,2174],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[71,41,2187]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[71,70,2216]}]}]}," ",{p:[72,7,2263],t:7,e:"div",a:{"class":"content"},f:[{p:[72,28,2284],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[72,41,2297]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[72,64,2320]}," [",{p:[72,87,2343],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[72,93,2349]}]},"]"]}]}," ",{p:[73,7,2398],t:7,e:"div",a:{"class":"content"},f:[{p:[73,28,2419],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[73,41,2432]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[73,64,2455]}," [",{p:[73,87,2478],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[73,93,2484]}]},"]"]}]}," ",{p:[74,7,2533],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2554],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[74,41,2567]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[74,64,2590]}," [",{p:[74,87,2613],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[74,93,2619]}]},"]"]}]}]}],n:52,r:"data.areas",p:[67,3,1927]}]}]},e.exports=a.extend(r.exports)},{205:205}],288:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={computed:{readableFrequency:function(){return Math.round(this.get("adata.frequency"))/10}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,177],t:7,e:"ui-display",a:{title:"Settings"},f:[{t:4,f:[{p:[13,5,236],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,7,270],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[14,24,287]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[14,75,338]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"On":"Off"'},p:[16,9,413]}]}]}],n:50,r:"data.headset",p:[12,3,210]},{t:4,n:51,f:[{p:[19,5,494],t:7,e:"ui-section",a:{label:"Microphone"},f:[{p:[20,7,533],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.broadcasting"],s:'_0?"power-off":"close"'},p:[20,24,550]}],style:[{t:2,x:{r:["data.broadcasting"],s:'_0?"selected":null'},p:[20,78,604]}],action:"broadcast"},f:[{t:2,x:{r:["data.broadcasting"],s:'_0?"Engaged":"Disengaged"'},p:[22,9,685]}]}]}," ",{p:[24,5,769],t:7,e:"ui-section",a:{label:"Speaker"},f:[{p:[25,7,805],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[25,24,822]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[25,75,873]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"Engaged":"Disengaged"'},p:[27,9,948]}]}]}],r:"data.headset"}," ",{t:4,f:[{p:[31,5,1064],t:7,e:"ui-section",a:{label:"High Volume"},f:[{p:[32,7,1104],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.useCommand"],s:'_0?"power-off":"close"'},p:[32,24,1121]}],style:[{t:2,x:{r:["data.useCommand"],s:'_0?"selected":null'},p:[32,76,1173]}],action:"command"},f:[{t:2,x:{r:["data.useCommand"],s:'_0?"On":"Off"'},p:[34,9,1250]}]}]}],n:50,r:"data.command",p:[30,3,1038]}]}," ",{p:[38,1,1342],t:7,e:"ui-display",a:{title:"Channel"},f:[{p:[39,3,1374],t:7,e:"ui-section",a:{label:"Frequency"},f:[{t:4,f:[{p:[41,7,1439],t:7,e:"span",f:[{t:2,r:"readableFrequency",p:[41,13,1445]}]}],n:50,r:"data.freqlock",p:[40,5,1410]},{t:4,n:51,f:[{p:[43,7,1495],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[43,46,1534]}],action:"frequency",params:'{"adjust": -1}'}}," ",{p:[44,7,1646],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[44,41,1680]}],action:"frequency",params:'{"adjust": -.2}'}}," ",{p:[45,7,1793],t:7,e:"ui-button",a:{icon:"pencil",action:"frequency",params:'{"tune": "input"}'},f:[{t:2,r:"readableFrequency",p:[45,78,1864]}]}," ",{p:[46,7,1905],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[46,40,1938]}],action:"frequency",params:'{"adjust": .2}'}}," ",{p:[47,7,2050],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[47,45,2088]}],action:"frequency",params:'{"adjust": 1}'}}],r:"data.freqlock"}]}," ",{t:4,f:[{p:[51,5,2262],t:7,e:"ui-section",a:{label:"Subspace Transmission"},f:[{p:[52,7,2312],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.subspace"],s:'_0?"power-off":"close"'},p:[52,24,2329]}],style:[{t:2,x:{r:["data.subspace"],s:'_0?"selected":null'},p:[52,74,2379]}],action:"subspace"},f:[{t:2,x:{r:["data.subspace"],s:'_0?"Active":"Inactive"'},p:[53,29,2447]}]}]}],n:50,r:"data.subspaceSwitchable",p:[50,3,2225]}," ",{t:4,f:[{p:[57,5,2578],t:7,e:"ui-section",a:{label:"Channels"},f:[{t:4,f:[{p:[59,9,2656],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["."],s:'_0?"check-square-o":"square-o"'},p:[59,26,2673]}],style:[{t:2,x:{r:["."],s:'_0?"selected":null'},p:[60,18,2730]}],action:"channel",params:['{"channel": "',{t:2,r:"channel",p:[61,49,2806]},'"}']},f:[{t:2,r:"channel",p:[62,11,2833]}]},{p:[62,34,2856],t:7,e:"br"}],n:52,i:"channel",r:"data.channels",p:[58,7,2615]}]}],n:50,x:{r:["data.subspace","data.channels"],s:"_0&&_1"},p:[56,3,2534]}]}]},e.exports=a.extend(r.exports)},{205:205}],289:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,23],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,40]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,82],t:7,e:"ui-display",a:{title:"Satellite Network Control",button:0},f:[{t:4,f:[{p:[8,4,168],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[9,9,209],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[9,31,231]}]}," ",{p:[10,9,253],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"mode",p:[10,30,274]}]}," ",{p:[11,9,298],t:7,e:"div",a:{"class":"content"},f:[{p:[12,11,331],t:7,e:"ui-button",a:{action:"toggle",params:['{"id": "',{t:2,r:"id",p:[12,54,374]},'"}']},f:[{t:2,x:{r:["active"],s:'_0?"Deactivate":"Activate"'},p:[12,64,384]}]}]}]}],n:52,r:"data.satellites",p:[7,2,138]}]}," ",{t:4,f:[{p:[18,1,528],t:7,e:"ui-display",a:{title:"Station Shield Coverage"},f:[{p:[19,3,576],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.meteor_shield_coverage_max",p:[19,24,597]}],value:[{t:2,r:"data.meteor_shield_coverage",p:[19,68,641]}]},f:[{t:2,x:{r:["data.meteor_shield_coverage","data.meteor_shield_coverage_max"],s:"100*_0/_1"},p:[19,101,674]}," %"]}," ",{p:[20,1,758],t:7,e:"ui-display",f:[]}]}],n:50,r:"data.meteor_shield",p:[17,1,500]}]},e.exports=a.extend(r.exports)},{205:205}],290:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[" "," "," ",{p:[5,1,200],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[5,16,215]}]},f:[{p:[6,2,233],t:7,e:"tab",a:{name:"Status"},f:[{p:[7,3,256],t:7,e:"status"}]}," ",{p:[9,2,277],t:7,e:"tab",a:{name:"Templates"},f:[{p:[10,3,303],t:7,e:"templates"}]}," ",{p:[12,2,327],t:7,e:"tab",a:{name:"Modification"},f:[{t:4,f:[{p:[14,3,381],t:7,e:"modification"}],n:50,r:"data.selected",p:[13,3,356]}," ",{t:4,f:[{p:[17,3,437],t:7,e:"span",a:{"class":"bad"},f:["No shuttle selected."]}],n:50,x:{r:["data.selected"],s:"!_0"},p:[16,3,411]}]}]}]},r.exports.components=r.exports.components||{};var i={modification:t(291),templates:t(293),status:t(292)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{205:205,291:291,292:292,293:293}],291:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:["Selected: ",{t:2,r:"data.selected.name",p:[1,30,29]}]},f:[{t:4,f:[{p:[3,5,96],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.selected.description",p:[3,37,128]}]}],n:50,r:"data.selected.description",p:[2,3,57]}," ",{t:4,f:[{p:[6,5,224],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"data.selected.admin_notes",p:[6,37,256]}]}],n:50,r:"data.selected.admin_notes",p:[5,3,185]}]}," ",{t:4,f:[{p:[11,3,361],t:7,e:"ui-display",a:{title:["Existing Shuttle: ",{t:2,r:"data.existing_shuttle.name",p:[11,40,398]}]},f:["Status: ",{t:2,r:"data.existing_shuttle.status",p:[12,13,444]}," ",{t:4,f:["(",{t:2,r:"data.existing_shuttle.timeleft",p:[14,8,526]},")"],n:50,r:"data.existing_shuttle.timer",p:[13,5,482]}," ",{p:[16,5,580],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"data.existing_shuttle.id",p:[17,41,649]},'"}']},f:["Jump To"]}]}],n:50,r:"data.existing_shuttle",p:[10,1,328]},{t:4,f:[{p:[24,3,778],t:7,e:"ui-display",a:{title:"Existing Shuttle: None"}}],n:50,x:{r:["data.existing_shuttle"],s:"!_0"},p:[23,1,744]},{p:[27,1,847],t:7,e:"ui-button",a:{action:"preview",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[28,27,902]},'"}']},f:["Preview"]}," ",{p:[31,1,961],t:7,e:"ui-button",a:{action:"load",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[32,27,1013]},'"}'],style:"danger"},f:["Load"]}," ",{p:[37,1,1089],t:7,e:"ui-display",a:{title:"Status"},f:[]}]},e.exports=a.extend(r.exports)},{205:205}],292:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,27],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[2,22,46]}," (",{t:2,r:"id",p:[2,32,56]},")"]},f:[{t:2,r:"status",p:[3,5,71]}," ",{t:4,f:["(",{t:2,r:"timeleft",p:[5,8,109]},")"],n:50,r:"timer",p:[4,5,87]}," ",{p:[7,5,141],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"id",p:[7,67,203]},'"}']},f:["Jump To"]}," ",{p:[10,5,252],t:7,e:"ui-button",a:{action:"fast_travel",params:['{"id": "',{t:2,r:"id",p:[10,53,300]},'"}'],state:[{t:2,x:{r:["can_fast_travel"],s:'_0?null:"disabled"'},p:[10,70,317]}]},f:["Fast Travel"]}]}],n:52,r:"data.shuttles",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{205:205}],293:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.templates_tabs",p:[1,16,15]}]},f:[{t:4,f:[{p:[3,5,74],t:7,e:"tab",a:{name:[{t:2,r:"port_id",p:[3,16,85]}]},f:[{t:4,f:[{p:[5,9,135],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[5,28,154]}]},f:[{t:4,f:[{p:[7,13,209],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[7,45,241]}]}],n:50,r:"description",p:[6,11,176]}," ",{t:4,f:[{p:[10,13,333],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"admin_notes",p:[10,45,365]}]}],n:50,r:"admin_notes",p:[9,11,300]}," ",{p:[13,11,426],t:7,e:"ui-button",a:{action:"select_template",params:['{"shuttle_id": "',{t:2,r:"shuttle_id",p:[14,37,499]},'"}'],state:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"selected":null'},p:[15,20,537]}]},f:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"Selected":"Select"'},p:[17,13,630]}]}]}],n:52,r:"templates",p:[4,7,106]}]}],n:52,r:"data.templates",p:[2,3,44]}]}]},e.exports=a.extend(r.exports)},{205:205}],294:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={computed:{occupantStatState:function(){switch(this.get("data.occupant.stat")){case 0:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[15,1,280],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[16,3,313],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[17,3,346],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[17,9,352]}]}]}," ",{t:4,f:[{p:[20,5,466],t:7,e:"ui-section",a:{label:"State"},f:[{p:[21,7,500],t:7,e:"span",a:{"class":[{t:2,r:"occupantStatState",p:[21,20,513]}]},f:[{t:2,x:{r:["data.occupant.stat"],s:'_0==0?"Conscious":_0==1?"Unconcious":"Dead"'},p:[21,43,536]}]}]}," ",{p:[23,5,658],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[24,7,693],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[24,20,706]}],max:[{t:2,r:"data.occupant.maxHealth",p:[24,54,740]}],value:[{t:2,r:"data.occupant.health",p:[24,90,776]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[25,16,818]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[25,68,870]}]}]}," ",{t:4,f:[{p:[28,7,1107],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[28,26,1126]}]},f:[{p:[29,9,1147],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[29,30,1168]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[29,66,1204]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[29,103,1241]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[27,5,941]}," ",{p:[32,5,1328],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[33,9,1364],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[33,22,1377]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[33,68,1423]}]}]}," ",{p:[35,5,1506],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[36,9,1542],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[36,22,1555]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[36,68,1601]}]}]}," ",{p:[38,5,1685],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[40,11,1772],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[40,54,1815]}," units of ",{t:2,r:"name",p:[40,89,1850]}]},{p:[40,104,1865],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[39,9,1727]},{t:4,n:51,f:[{p:[42,11,1900],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[19,3,439]}]}," ",{p:[47,1,1996],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[48,2,2028],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[49,5,2059],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[49,22,2076]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[49,71,2125]}]}]}," ",{p:[51,3,2190],t:7,e:"ui-section",a:{label:"Inject"},f:[{t:4,f:[{p:[53,7,2251],t:7,e:"ui-button",a:{icon:"flask",state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[53,38,2282]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[53,122,2366]},'"}']},f:[{t:2,r:"name",p:[53,132,2376]}]},{p:[53,152,2396],t:7,e:"br"}],n:52,r:"data.chems",p:[52,5,2223]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],295:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,25],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[2,22,44]}],labelcolor:[{t:2,r:"htmlcolor",p:[2,44,66]}],candystripe:0,right:0},f:[{p:[3,5,105],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,32,132],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0=="Dead"?"bad bold":_0=="Unconscious"?"average bold":"good"'},p:[3,45,145]}]},f:[{t:2,r:"status",p:[3,132,232]}]}]}," ",{p:[4,5,268],t:7,e:"ui-section",a:{label:"Jelly"},f:[{t:2,r:"exoticblood",p:[4,31,294]}]}," ",{p:[5,5,328],t:7,e:"ui-section",a:{label:"Location"},f:[{t:2,r:"area",p:[5,34,357]}]}," ",{p:[7,5,386],t:7,e:"ui-button",a:{state:[{t:2,r:"swap_button_state",p:[8,14,411]}],action:"swap",params:['{"ref": "',{t:2,r:"ref",p:[9,38,472]},'"}']},f:[{t:2,x:{r:["is_current"],s:'_0?"You Are Here":"Swap"'},p:[10,7,491]}]}]}],n:52,r:"data.bodies",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{205:205}],296:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={computed:{capacityPercentState:function(){var t=this.get("data.capacityPercent");return t>50?"good":t>15?"average":"bad"},inputState:function(){return this.get("data.capacityPercent")>=100?"good":this.get("data.inputting")?"average":"bad"},outputState:function(){return this.get("data.outputting")?"good":this.get("data.charge")>0?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[24,1,663],t:7,e:"ui-display",a:{title:"Storage"},f:[{p:[25,3,695],t:7,e:"ui-section",a:{label:"Stored Energy"},f:[{p:[26,5,735],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.capacityPercent",p:[26,38,768]}],state:[{t:2,r:"capacityPercentState",p:[26,71,801]}]},f:[{t:2,x:{r:["adata.capacityPercent"],s:"Math.fixed(_0)"},p:[26,97,827]},"%"]}]}]}," ",{p:[29,1,908],t:7,e:"ui-display",a:{title:"Input"},f:[{p:[30,3,938],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{p:[31,5,976],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"refresh":"close"'},p:[31,22,993]}],style:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"selected":null'},p:[31,74,1045]}],action:"tryinput"},f:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"Auto":"Off"'},p:[32,25,1113]}]},"   [",{p:[34,6,1182],t:7,e:"span",a:{"class":[{t:2,r:"inputState",p:[34,19,1195]}]},f:[{t:2,x:{r:["data.capacityPercent","data.inputting"],s:'_0>=100?"Fully Charged":_1?"Charging":"Not Charging"'},p:[34,35,1211]}]},"]"]}," ",{p:[36,3,1335],t:7,e:"ui-section",a:{label:"Target Input"},f:[{p:[37,5,1374],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.inputLevelMax",p:[37,26,1395]}],value:[{t:2,r:"data.inputLevel",p:[37,57,1426]}]},f:[{t:2,x:{r:["adata.inputLevel"],s:"Math.round(_0)"},p:[37,78,1447]},"W"]}]}," ",{p:[39,3,1509],t:7,e:"ui-section",a:{label:"Adjust Input"},f:[{p:[40,5,1548],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[40,44,1587]}],action:"input",params:'{"target": "min"}'}}," ",{p:[41,5,1682],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[41,39,1716]}],action:"input",params:'{"adjust": -10000}'}}," ",{p:[42,5,1812],t:7,e:"ui-button",a:{icon:"pencil",action:"input",params:'{"target": "input"}'},f:["Set"]}," ",{p:[43,5,1902],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[43,38,1935]}],action:"input",params:'{"adjust": 10000}'}}," ",{p:[44,5,2047],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[44,43,2085]}],action:"input",params:'{"target": "max"}'}}]}," ",{p:[46,3,2212],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[47,3,2246],t:7,e:"span",f:[{t:2,x:{r:["adata.inputAvailable"],s:"Math.round(_0)"},p:[47,9,2252]},"W"]}]}]}," ",{p:[50,1,2329],t:7,e:"ui-display",a:{title:"Output"},f:[{p:[51,3,2360],t:7,e:"ui-section",a:{label:"Output Mode"},f:[{p:[52,5,2398],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"power-off":"close"'},p:[52,22,2415]}],style:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"selected":null'},p:[52,77,2470]}],action:"tryoutput"},f:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"On":"Off"'},p:[53,26,2540]}]},"   [",{p:[55,6,2608],t:7,e:"span",a:{"class":[{t:2,r:"outputState",p:[55,19,2621]}]},f:[{t:2,x:{r:["data.outputting","data.charge"],s:'_0?"Sending":_1>0?"Not Sending":"No Charge"'},p:[55,36,2638]}]},"]"]}," ",{p:[57,3,2745],t:7,e:"ui-section",a:{label:"Target Output"},f:[{p:[58,5,2785],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.outputLevelMax",p:[58,26,2806]}],value:[{t:2,r:"data.outputLevel",p:[58,58,2838]}]},f:[{t:2,x:{r:["adata.outputLevel"],s:"Math.round(_0)"},p:[58,80,2860]},"W"]}]}," ",{p:[60,3,2923],t:7,e:"ui-section",a:{label:"Adjust Output"},f:[{p:[61,5,2963],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[61,44,3002]}],action:"output",params:'{"target": "min"}'}}," ",{p:[62,5,3099],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[62,39,3133]}],action:"output",params:'{"adjust": -10000}'}}," ",{p:[63,5,3231],t:7,e:"ui-button",a:{icon:"pencil",action:"output",params:'{"target": "input"}'},f:["Set"]}," ",{p:[64,5,3322],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[64,38,3355]}],action:"output",params:'{"adjust": 10000}'}}," ",{p:[65,5,3470],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[65,43,3508]}],action:"output",params:'{"target": "max"}'}}]}," ",{p:[67,3,3638],t:7,e:"ui-section",a:{label:"Outputting"},f:[{p:[68,3,3673],t:7,e:"span",f:[{t:2,x:{r:["adata.outputUsed"],s:"Math.round(_0)"},p:[68,9,3679]},"W"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],297:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,31],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{t:2,x:{r:["adata.generated"],s:"Math.round(_0)"},p:[3,5,73]},"W"]}," ",{p:[5,3,126],t:7,e:"ui-section",a:{label:"Orientation"},f:[{p:[6,5,164],t:7,e:"span",f:[{t:2,x:{r:["adata.angle"],s:"Math.round(_0)"},p:[6,11,170]},"° (",{t:2,r:"data.direction",p:[6,45,204]},")"]}]}," ",{p:[8,3,251],t:7,e:"ui-section",a:{label:"Adjust Angle"},f:[{p:[9,5,290],t:7,e:"ui-button",a:{icon:"step-backward",action:"angle",params:'{"adjust": -15}'},f:["15°"]}," ",{p:[10,5,387],t:7,e:"ui-button",a:{icon:"backward",action:"angle",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[11,5,477],t:7,e:"ui-button",a:{icon:"forward",action:"angle",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[12,5,565],t:7,e:"ui-button",a:{icon:"step-forward",action:"angle",params:'{"adjust": 15}'},f:["15°"]}]}]}," ",{p:[15,1,687],t:7,e:"ui-display",a:{title:"Tracking"},f:[{p:[16,3,720],t:7,e:"ui-section",a:{label:"Tracker Mode"},f:[{p:[17,5,759],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==0?"selected":null'},p:[17,36,790]}],action:"tracking",params:'{"mode": 0}'},f:["Off"]}," ",{p:[19,5,907],t:7,e:"ui-button",a:{icon:"clock-o",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==1?"selected":null'},p:[19,38,940]}],action:"tracking",params:'{"mode": 1}'},f:["Timed"]}," ",{p:[21,5,1059],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.connected_tracker","data.tracking_state"],s:'_0?_1==2?"selected":null:"disabled"'},p:[21,38,1092]}],action:"tracking",params:'{"mode": 2}'},f:["Auto"]}]}," ",{p:[24,3,1262],t:7,e:"ui-section",a:{label:"Tracking Rate"},f:[{p:[25,3,1300],t:7,e:"span",f:[{t:2,x:{r:["adata.tracking_rate"],s:"Math.round(_0)"},p:[25,9,1306]},"°/h (",{t:2,r:"data.rotating_way",p:[25,53,1350]},")"]}]}," ",{p:[27,3,1399],t:7,e:"ui-section",a:{label:"Adjust Rate"},f:[{p:[28,5,1437],t:7,e:"ui-button",a:{icon:"fast-backward",action:"rate",params:'{"adjust": -180}'},f:["180°"]}," ",{p:[29,5,1535],t:7,e:"ui-button",a:{icon:"step-backward",action:"rate",params:'{"adjust": -30}'},f:["30°"]}," ",{p:[30,5,1631],t:7,e:"ui-button",a:{icon:"backward",action:"rate",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[31,5,1720],t:7,e:"ui-button",a:{icon:"forward",action:"rate",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[32,5,1807],t:7,e:"ui-button",a:{icon:"step-forward",action:"rate",params:'{"adjust": 30}'},f:["30°"]}," ",{p:[33,5,1901],t:7,e:"ui-button",a:{icon:"fast-forward",action:"rate",params:'{"adjust": 180}'},f:["180°"]}]}]}," ",{p:{button:[{p:[38,5,2088],t:7,e:"ui-button",a:{icon:"refresh",action:"refresh"},f:["Refresh"]}]},t:7,e:"ui-display",a:{title:"Devices",button:0},f:[" ",{p:[40,2,2169],t:7,e:"ui-section",a:{label:"Solar Tracker"},f:[{p:[41,5,2209],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_tracker"],s:'_0?"good":"bad"'},p:[41,18,2222]}]},f:[{t:2,x:{r:["data.connected_tracker"],s:'_0?"":"Not "'},p:[41,63,2267]},"Found"]}]}," ",{p:[43,2,2338],t:7,e:"ui-section",a:{label:"Solar Panels"},f:[{p:[44,3,2375],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_panels"],s:'_0?"good":"bad"'},p:[44,16,2388]}]},f:[{t:2,x:{r:["adata.connected_panels"],s:"Math.round(_0)"},p:[44,60,2432]}," Panels Connected"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],298:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,7,87],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[4,38,118]}],action:"eject"},f:["Eject"]}],n:50,r:"data.open",p:[3,5,62]}]},t:7,e:"ui-display",a:{title:"Power",button:0},f:[" ",{p:[7,3,226],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[8,5,258],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[8,22,275]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[9,14,326]}],state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[9,54,366]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[10,22,431]}]}]}," ",{p:[12,3,490],t:7,e:"ui-section",a:{label:"Cell"},f:[{t:4,f:[{p:[14,7,554],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerLevel",p:[14,40,587]}]},f:[{t:2,x:{r:["adata.powerLevel"],s:"Math.fixed(_0)"},p:[14,61,608]},"%"]}],n:50,r:"data.hasPowercell",p:[13,5,521]},{t:4,n:51,f:[{p:[16,4,667],t:7,e:"span",a:{"class":"bad"},f:["No Cell"]}],r:"data.hasPowercell"}]}]}," ",{p:[20,1,744],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[21,3,779],t:7,e:"ui-section",a:{label:"Current Temperature"},f:[{p:[22,3,823],t:7,e:"span",f:[{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[22,9,829]},"°C"]}]}," ",{p:[24,2,894],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[25,3,937],t:7,e:"span",f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[25,9,943]},"°C"]}]}," ",{t:4,f:[{p:[28,5,1031],t:7,e:"ui-section",a:{label:"Adjust Target"},f:[{p:[29,7,1073],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[29,46,1112]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[30,7,1218],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[30,41,1252]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[31,7,1357],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:["Set"]}," ",{p:[32,7,1450],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[32,40,1483]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[33,7,1587],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[33,45,1625]}],action:"target",params:'{"adjust": 20}'}}]}],n:50,r:"data.open",p:[27,3,1008]}," ",{p:[36,3,1754],t:7,e:"ui-section",a:{label:"Mode"},f:[{t:4,f:[{p:[38,7,1808],t:7,e:"ui-button",a:{icon:"long-arrow-up",state:[{t:2,x:{r:["data.mode"],s:'_0=="heat"?"selected":null'},p:[38,46,1847]}],action:"mode",params:'{"mode": "heat"}'},f:["Heat"]}," ",{p:[39,7,1956],t:7,e:"ui-button",a:{icon:"long-arrow-down",state:[{t:2,x:{r:["data.mode"],s:'_0=="cool"?"selected":null'},p:[39,48,1997]}],action:"mode",params:'{"mode": "cool"}'},f:["Cool"]}," ",{p:[40,7,2106],t:7,e:"ui-button",a:{icon:"arrows-v",state:[{t:2,x:{r:["data.mode"],s:'_0=="auto"?"selected":null'},p:[40,41,2140]}],action:"mode",params:'{"mode": "auto"}'},f:["Auto"]}],n:50,r:"data.open",p:[37,3,1783]},{t:4,n:51,f:[{p:[42,4,2258],t:7,e:"span",f:[{t:2,x:{r:["text","data.mode"],s:"_0.titleCase(_1)"},p:[42,10,2264]}]}],r:"data.open"}]}]}]},e.exports=a.extend(r.exports)},{205:205}],299:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,31],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[2,22,50]}," Alarms"]},f:[{p:[3,5,74],t:7,e:"ul",f:[{t:4,f:[{p:[5,9,107],t:7,e:"li",f:[{t:2,r:".",p:[5,13,111]}]}],n:52,r:".",p:[4,7,86]},{t:4,n:51,f:[{p:[7,9,147],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{205:205}],300:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,42],t:7,e:"ui-notice",f:[{p:[3,5,59],t:7,e:"span",f:["Biological entity detected in contents. Please remove."]}]}],n:50,x:{r:["data.occupied","data.safeties"],s:"_0&&_1"},p:[1,1,0]},{t:4,f:[{p:[7,3,179],t:7,e:"ui-notice",f:[{p:[8,5,196],t:7,e:"span",f:["Contents are being disinfected. Please wait."]}]}],n:50,r:"data.uv_active",p:[6,1,153]},{t:4,n:51,f:[{p:{button:[{t:4,f:[{p:[13,25,369],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,42,386] + }],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[13,93,437]}]}],n:50,x:{r:["data.open"],s:"!_0"},p:[13,7,351]}," ",{t:4,f:[{p:[14,27,519],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"sign-out":"sign-in"'},p:[14,44,536]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Close":"Open"'},p:[14,98,590]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[14,7,499]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[17,7,692],t:7,e:"ui-notice",f:[{p:[18,9,713],t:7,e:"span",f:["Unit Locked"]}]}],n:50,r:"data.locked",p:[16,5,665]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.open"],s:"_0"},f:[{p:[21,9,793],t:7,e:"ui-section",a:{label:"Helmet"},f:[{p:[22,11,832],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.helmet"],s:'_0?"square":"square-o"'},p:[22,28,849]}],state:[{t:2,x:{r:["data.helmet"],s:'_0?null:"disabled"'},p:[22,75,896]}],action:"dispense",params:'{"item": "helmet"}'},f:[{t:2,x:{r:["data.helmet"],s:'_0||"Empty"'},p:[23,59,992]}]}]}," ",{p:[25,9,1063],t:7,e:"ui-section",a:{label:"Suit"},f:[{p:[26,11,1100],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.suit"],s:'_0?"square":"square-o"'},p:[26,28,1117]}],state:[{t:2,x:{r:["data.suit"],s:'_0?null:"disabled"'},p:[26,74,1163]}],action:"dispense",params:'{"item": "suit"}'},f:[{t:2,x:{r:["data.suit"],s:'_0||"Empty"'},p:[27,57,1255]}]}]}," ",{p:[29,9,1324],t:7,e:"ui-section",a:{label:"Mask"},f:[{p:[30,11,1361],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mask"],s:'_0?"square":"square-o"'},p:[30,28,1378]}],state:[{t:2,x:{r:["data.mask"],s:'_0?null:"disabled"'},p:[30,74,1424]}],action:"dispense",params:'{"item": "mask"}'},f:[{t:2,x:{r:["data.mask"],s:'_0||"Empty"'},p:[31,57,1516]}]}]}," ",{p:[33,9,1585],t:7,e:"ui-section",a:{label:"Storage"},f:[{p:[34,11,1625],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.storage"],s:'_0?"square":"square-o"'},p:[34,28,1642]}],state:[{t:2,x:{r:["data.storage"],s:'_0?null:"disabled"'},p:[34,77,1691]}],action:"dispense",params:'{"item": "storage"}'},f:[{t:2,x:{r:["data.storage"],s:'_0||"Empty"'},p:[35,60,1789]}]}]}]},{t:4,n:50,x:{r:["data.open"],s:"!(_0)"},f:[" ",{p:[38,7,1873],t:7,e:"ui-button",a:{icon:"recycle",state:[{t:2,x:{r:["data.occupied","data.safeties"],s:'_0&&_1?"disabled":null'},p:[38,40,1906]}],action:"uv"},f:["Disinfect"]}]}],r:"data.locked"}]}],r:"data.uv_active"}]},e.exports=a.extend(r.exports)},{205:205}],301:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,5,18],t:7,e:"ui-section",a:{label:"Dispense"},f:[{p:[3,9,57],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.plasma"],s:'_0?"square":"square-o"'},p:[3,26,74]}],state:[{t:2,x:{r:["data.plasma"],s:'_0?null:"disabled"'},p:[3,74,122]}],action:"plasma"},f:["Plasma (",{t:2,x:{r:["adata.plasma"],s:"Math.round(_0)"},p:[4,37,196]},")"]}," ",{p:[5,9,247],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oxygen"],s:'_0?"square":"square-o"'},p:[5,26,264]}],state:[{t:2,x:{r:["data.oxygen"],s:'_0?null:"disabled"'},p:[5,74,312]}],action:"oxygen"},f:["Oxygen (",{t:2,x:{r:["adata.oxygen"],s:"Math.round(_0)"},p:[6,37,386]},")"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],302:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={computed:{tankPressureState:function(){var t=this.get("data.tankPressure");return t>=200?"good":t>=100?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,295],t:7,e:"ui-notice",f:[{p:[15,3,310],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.connected"],s:'_0?"is":"is not"'},p:[15,23,330]}," connected to a mask."]}]}," ",{p:[17,1,409],t:7,e:"ui-display",f:[{p:[18,3,425],t:7,e:"ui-section",a:{label:"Tank Pressure"},f:[{p:[19,7,467],t:7,e:"ui-bar",a:{min:"0",max:"1013",value:[{t:2,r:"data.tankPressure",p:[19,41,501]}],state:[{t:2,r:"tankPressureState",p:[20,16,540]}]},f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[20,39,563]}," kPa"]}]}," ",{p:[22,3,631],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[23,5,674],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[23,18,687]}],max:[{t:2,r:"data.maxReleasePressure",p:[23,52,721]}],value:[{t:2,r:"data.releasePressure",p:[24,14,764]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[24,40,790]}," kPa"]}]}," ",{p:[26,3,861],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,906],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,939]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1095],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1126]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1273],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1368],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1398]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],303:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,5,33],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[3,9,75],t:7,e:"span",f:[{t:2,x:{r:["adata.temperature"],s:"Math.fixed(_0,2)"},p:[3,15,81]}," K"]}]}," ",{p:[5,5,151],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,9,190],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.fixed(_0,2)"},p:[6,15,196]}," kPa"]}]}]}," ",{p:[9,1,276],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[10,5,311],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,347],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[11,26,364]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[11,70,408]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[12,28,469]}]}]}," ",{p:[14,5,531],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[15,9,580],t:7,e:"ui-button",a:{icon:"fast-backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[15,48,619]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[17,9,733],t:7,e:"ui-button",a:{icon:"backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[17,43,767]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[19,9,880],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.target"],s:"Math.fixed(_0,2)"},p:[19,79,950]}]}," ",{p:[20,9,1003],t:7,e:"ui-button",a:{icon:"forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[20,42,1036]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[22,9,1148],t:7,e:"ui-button",a:{icon:"fast-forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[22,47,1186]}],action:"target",params:'{"adjust": 20}'}}]}]}]},e.exports=a.extend(r.exports)},{205:205}],304:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={data:{},oninit:function(){this.on({hover:function(t){var e=this.get("data.telecrystals");e>=t.context.params.cost&&this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}})}}}(r),r.exports.template={v:3,t:[" ",{p:{button:[{t:4,f:[{p:[23,7,482],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock"]}],n:50,r:"data.lockable",p:[22,5,453]}]},t:7,e:"ui-display",a:{title:"Uplink",button:0},f:[" ",{p:[26,3,568],t:7,e:"ui-section",a:{label:"Telecrystals",right:0},f:[{p:[27,5,613],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.telecrystals"],s:'_0>0?"good":"bad"'},p:[27,18,626]}]},f:[{t:2,r:"data.telecrystals",p:[27,62,670]}," TC"]}]}]}," ",{t:4,f:[{p:[31,3,764],t:7,e:"ui-display",f:[{p:[32,2,779],t:7,e:"ui-button",a:{action:"select",params:['{"category": "',{t:2,r:"name",p:[32,51,828]},'"}']},f:[{t:2,r:"name",p:[32,63,840]}]}," ",{t:4,f:[{p:[34,4,883],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[34,23,902]}],candystripe:0,right:0},f:[{p:[35,3,934],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"name",p:[35,23,954]},": ",{t:2,r:"desc",p:[35,33,964]}],"tooltip-side":"left",state:[{t:2,x:{r:["data.telecrystals","hovered.cost","cost","hovered.item","name"],s:'_0<_2||(_0-_1<_2&&_3!=_4)?"disabled":null'},p:[36,12,1006]}],action:"buy",params:['{"category": "',{t:2,r:"category",p:[37,40,1165]},'", "item": ',{t:2,r:"name",p:[37,63,1188]},', "cost": ',{t:2,r:"cost",p:[37,81,1206]},"}"]},v:{hover:"hover",unhover:"unhover"},f:[{t:2,r:"cost",p:[38,43,1260]}," TC"]}]}],n:52,r:"items",p:[33,2,863]}]}],n:52,r:"data.categories",p:[30,1,735]}]},e.exports=a.extend(r.exports)},{205:205}],305:[function(t,e,n){var a=t(205),r={exports:{}};!function(t){"use strict";t.exports={data:{healthState:function(t){var e=this.get("data.vr_avatar.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,292],t:7,e:"ui-display",f:[{t:4,f:[{p:[16,3,333],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:[{p:[17,4,373],t:7,e:"ui-section",a:{label:"Name"},f:[{t:2,r:"data.vr_avatar.name",p:[18,5,404]}]}," ",{p:[20,4,450],t:7,e:"ui-section",a:{label:"Status"},f:[{t:2,r:"data.vr_avatar.status",p:[21,5,483]}]}," ",{p:[23,4,531],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[24,5,564],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.vr_avatar.maxhealth",p:[24,26,585]}],value:[{t:2,r:"adata.vr_avatar.health",p:[24,64,623]}],state:[{t:2,x:{r:["healthState","adata.vr_avatar.health"],s:"_0(_1)"},p:[24,99,658]}]},f:[{t:2,x:{r:["adata.vr_avatar.health"],s:"Math.round(_0)"},p:[24,140,699]},"/",{t:2,r:"adata.vr_avatar.maxhealth",p:[24,179,738]}]}]}]}],n:50,r:"data.vr_avatar",p:[15,2,307]},{t:4,n:51,f:[{p:[28,3,826],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:["No Virtual Avatar detected"]}],r:"data.vr_avatar"}," ",{p:[32,2,922],t:7,e:"ui-display",a:{title:"VR Commands"},f:[{p:[33,3,958],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.toggle_open"],s:'_0?"times":"plus"'},p:[33,20,975]}],action:"toggle_open"},f:[{t:2,x:{r:["data.toggle_open"],s:'_0?"Close":"Open"'},p:[34,4,1042]}," the VR Sleeper"]}," ",{t:4,f:[{p:[37,4,1144],t:7,e:"ui-button",a:{icon:"signal",action:"vr_connect"},f:["Connect to VR"]}],n:50,r:"data.isoccupant",p:[36,3,1116]}," ",{t:4,f:[{p:[42,4,1267],t:7,e:"ui-button",a:{icon:"ban",action:"delete_avatar"},f:["Delete Virtual Avatar"]}],n:50,r:"data.vr_avatar",p:[41,3,1240]}]}]}]},e.exports=a.extend(r.exports)},{205:205}],306:[function(t,e,n){var a=t(205),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{t:4,f:[{p:[3,5,42],t:7,e:"ui-section",a:{label:[{t:2,r:"color",p:[3,24,61]},{t:2,x:{r:["wire"],s:'_0?" ("+_0+")":""'},p:[3,33,70]}],labelcolor:[{t:2,r:"color",p:[3,80,117]}],candystripe:0,right:0},f:[{p:[4,7,154],t:7,e:"ui-button",a:{action:"cut",params:['{"wire":"',{t:2,r:"color",p:[4,48,195]},'"}']},f:[{t:2,x:{r:["cut"],s:'_0?"Mend":"Cut"'},p:[4,61,208]}]}," ",{p:[5,7,252],t:7,e:"ui-button",a:{action:"pulse",params:['{"wire":"',{t:2,r:"color",p:[5,50,295]},'"}']},f:["Pulse"]}," ",{p:[6,7,333],t:7,e:"ui-button",a:{action:"attach",params:['{"wire":"',{t:2,r:"color",p:[6,51,377]},'"}']},f:[{t:2,x:{r:["attached"],s:'_0?"Detach":"Attach"'},p:[6,64,390]}]}]}],n:52,r:"data.wires",p:[2,3,16]}]}," ",{t:4,f:[{p:[11,3,508],t:7,e:"ui-display",f:[{t:4,f:[{p:[13,7,555],t:7,e:"ui-section",f:[{t:2,r:".",p:[13,19,567]}]}],n:52,r:"data.status",p:[12,5,526]}]}],n:50,r:"data.status",p:[10,1,485]}]},e.exports=a.extend(r.exports)},{205:205}],307:[function(t,e,n){(function(e){"use strict";var n=t(205),a=e.interopRequireDefault(n);t(194),t(1),t(190),t(193);var r=t(308),i=e.interopRequireDefault(r),o=t(309),s=t(191),u=t(192),p=e.interopRequireDefault(u);a["default"].DEBUG=/minified/.test(function(){}),Object.assign(Math,t(313)),window.initialize=function(e){window.tgui||(window.tgui=new i["default"]({el:"#container",data:function(){var n=JSON.parse(e);return{constants:t(310),text:t(314),config:n.config,data:n.data,adata:n.data}}}))};var c=document.getElementById("data"),l=c.textContent,f=c.getAttribute("data-ref");"{}"!==l&&(window.initialize(l),c.remove()),(0,o.act)(f,"tgui:initialize"),(0,s.loadCSS)("font-awesome.min.css");var d=new p["default"]("FontAwesome");d.check("").then(function(){return document.body.classList.add("icons")})["catch"](function(){return document.body.classList.add("no-icons")})}).call(this,t("babel/external-helpers"))},{1:1,190:190,191:191,192:192,193:193,194:194,205:205,308:308,309:309,310:310,313:313,314:314,"babel/external-helpers":"babel/external-helpers"}],308:[function(t,e,n){var a=t(205),r={exports:{}};!function(e){"use strict";var n=t(309),a=t(311);e.exports={components:{"ui-bar":t(206),"ui-button":t(207),"ui-display":t(208),"ui-input":t(209),"ui-linegraph":t(210),"ui-notice":t(211),"ui-section":t(213),"ui-subdisplay":t(214),"ui-tabs":t(215)},events:{enter:t(203).enter,space:t(203).space},transitions:{fade:t(204)},onconfig:function(){var e=this.get("config.interface"),n={airalarm:t(219),"airalarm/back":t(220),"airalarm/modes":t(221),"airalarm/scrubbers":t(222),"airalarm/status":t(223),"airalarm/thresholds":t(224),"airalarm/vents":t(225),airlock_electronics:t(226),apc:t(227),atmos_alert:t(228),atmos_control:t(229),atmos_filter:t(230),atmos_mixer:t(231),atmos_pump:t(232),brig_timer:t(233),bsa:t(234),canister:t(235),cargo:t(236),cellular_emporium:t(237),chem_dispenser:t(238),chem_heater:t(239),chem_master:t(240),clockwork_slab:t(241),codex_gigas:t(242),computer_fabricator:t(243),crayon:t(244),cryo:t(245),disposal_unit:t(246),dna_vault:t(247),eightball:t(248),emergency_shuttle_console:t(249),engraved_message:t(250),error:t(251),firealarm:t(252),gps:t(253),gulag_console:t(254),gulag_item_reclaimer:t(255),holodeck:t(256),implantchair:t(257),intellicard:t(258),keycard_auth:t(259),labor_claim_console:t(260),language_menu:t(261),launchpad_remote:t(262),mech_bay_power_console:t(263),mulebot:t(264),ntnet_relay:t(265),ntos_ai_restorer:t(266),ntos_card:t(267),ntos_configuration:t(268),ntos_file_manager:t(269),ntos_main:t(270),ntos_net_chat:t(271),ntos_net_dos:t(272),ntos_net_downloader:t(273),ntos_net_monitor:t(274),ntos_net_transfer:t(275),ntos_power_monitor:t(276),ntos_revelation:t(277),ntos_station_alert:t(278),ntos_supermatter_monitor:t(279),ntosheader:t(280),nuclear_bomb:t(281),ore_redemption_machine:t(282),pandemic:t(283),personal_crafting:t(284),portable_pump:t(285),portable_scrubber:t(286),power_monitor:t(287),radio:t(288),sat_control:t(289),shuttle_manipulator:t(290),"shuttle_manipulator/modification":t(291),"shuttle_manipulator/status":t(292),"shuttle_manipulator/templates":t(293),sleeper:t(294),slime_swap_body:t(295),smes:t(296),solar_control:t(297),space_heater:t(298),station_alert:t(299),suit_storage_unit:t(300),tank_dispenser:t(301),tanks:t(302),thermomachine:t(303),uplink:t(304),vr_sleeper:t(305),wires:t(306)};e in n?this.components["interface"]=n[e]:this.components["interface"]=n.error},oninit:function(){this.observe("config.style",function(t,e,n){t&&document.body.classList.add(t),e&&document.body.classList.remove(e)})},oncomplete:function(){if(this.get("config.locked")){var t=(0,a.lock)(window.screenLeft,window.screenTop),e=t.x,r=t.y;(0,n.winset)(this.get("config.window"),"pos",e+","+r)}(0,n.winset)("mapwindow.map","focus",!0)}}}(r),r.exports.template={v:3,t:[" "," "," "," ",{p:[56,1,1874],t:7,e:"titlebar",f:[{t:3,r:"config.title",p:[56,11,1884]}]}," ",{p:[57,1,1915],t:7,e:"main",f:[{p:[58,3,1925],t:7,e:"warnings"}," ",{p:[59,3,1940],t:7,e:"interface"}]}," ",{t:4,f:[{p:[62,3,1990],t:7,e:"resize"}],n:50,r:"config.titlebar",p:[61,1,1963]}]},r.exports.components=r.exports.components||{};var i={warnings:t(218),titlebar:t(217),resize:t(212)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{203:203,204:204,205:205,206:206,207:207,208:208,209:209,210:210,211:211,212:212,213:213,214:214,215:215,217:217,218:218,219:219,220:220,221:221,222:222,223:223,224:224,225:225,226:226,227:227,228:228,229:229,230:230,231:231,232:232,233:233,234:234,235:235,236:236,237:237,238:238,239:239,240:240,241:241,242:242,243:243,244:244,245:245,246:246,247:247,248:248,249:249,250:250,251:251,252:252,253:253,254:254,255:255,256:256,257:257,258:258,259:259,260:260,261:261,262:262,263:263,264:264,265:265,266:266,267:267,268:268,269:269,270:270,271:271,272:272,273:273,274:274,275:275,276:276,277:277,278:278,279:279,280:280,281:281,282:282,283:283,284:284,285:285,286:286,287:287,288:288,289:289,290:290,291:291,292:292,293:293,294:294,295:295,296:296,297:297,298:298,299:299,300:300,301:301,302:302,303:303,304:304,305:305,306:306,309:309,311:311}],309:[function(t,e,n){"use strict";function a(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"byond://"+e+"?"+Object.keys(t).map(function(e){return o(e)+"="+o(t[e])}).join("&")}function r(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};window.location.href=a(Object.assign({src:t,action:e},n))}function i(t,e,n){var r;window.location.href=a((r={},r[t+"."+e]=n,r),"winset")}n.__esModule=!0,n.href=a,n.act=r,n.winset=i;var o=encodeURIComponent},{}],310:[function(t,e,n){"use strict";n.__esModule=!0;n.UI_INTERACTIVE=2,n.UI_UPDATE=1,n.UI_DISABLED=0,n.UI_CLOSE=-1},{}],311:[function(t,e,n){"use strict";function a(t,e){return 0>t?t=0:t+window.innerWidth>window.screen.availWidth&&(t=window.screen.availWidth-window.innerWidth),0>e?e=0:e+window.innerHeight>window.screen.availHeight&&(e=window.screen.availHeight-window.innerHeight),{x:t,y:e}}function r(t){if(t.preventDefault(),this.get("drag")){if(this.get("x")){var e=t.screenX-this.get("x")+window.screenLeft,n=t.screenY-this.get("y")+window.screenTop;if(this.get("config.locked")){var r=a(e,n);e=r.x,n=r.y}(0,s.winset)(this.get("config.window"),"pos",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}function i(t,e){return t=Math.clamp(100,window.screen.width,t),e=Math.clamp(100,window.screen.height,e),{x:t,y:e}}function o(t){if(t.preventDefault(),this.get("resize")){if(this.get("x")){var e=t.screenX-this.get("x")+window.innerWidth,n=t.screenY-this.get("y")+window.innerHeight,a=i(e,n);e=a.x,n=a.y,(0,s.winset)(this.get("config.window"),"size",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}n.__esModule=!0,n.lock=a,n.drag=r,n.sane=i,n.resize=o;var s=t(309)},{309:309}],312:[function(t,e,n){"use strict";function a(t,e){for(var n=t,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();;){var o;if(a){if(i>=n.length)break;o=n[i++]}else{if(i=n.next(),i.done)break;o=i.value}var s=o;s.textContent.toLowerCase().includes(e)?(s.style.display="",r(s,e)):s.style.display="none"}}function r(t,e){for(var n=t.queryAll("section"),a=t.query("header").textContent.toLowerCase().includes(e),r=n,i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var u=s;a||u.textContent.toLowerCase().includes(e)?u.style.display="":u.style.display="none"}}n.__esModule=!0,n.filterMulti=a,n.filter=r},{}],313:[function(t,e,n){"use strict";function a(t,e,n){return Math.max(t,Math.min(n,e))}function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return+(Math.round(t+"e"+e)+"e-"+e)}n.__esModule=!0,n.clamp=a,n.fixed=r},{}],314:[function(t,e,n){"use strict";function a(t){return t[0].toUpperCase()+t.slice(1).toLowerCase()}function r(t){return t.replace(/\w\S*/g,a)}function i(t,e){for(t=""+t;t.length1){for(var u=Array(o),p=0;o>p;p++)u[p]=arguments[p+3];n.children=u}return{$$typeof:t,type:e,key:void 0===a?null:""+a,ref:null,props:n,_owner:null}}}(),e.asyncIterator=function(t){if("function"==typeof Symbol){if(Symbol.asyncIterator){var e=t[Symbol.asyncIterator];if(null!=e)return e.call(t)}if(Symbol.iterator)return t[Symbol.iterator]()}throw new TypeError("Object is not async iterable")},e.asyncGenerator=function(){function t(t){this.value=t}function e(e){function n(t,e){return new Promise(function(n,r){var s={key:t,arg:e,resolve:n,reject:r,next:null};o?o=o.next=s:(i=o=s,a(t,e))})}function a(n,i){try{var o=e[n](i),s=o.value;s instanceof t?Promise.resolve(s.value).then(function(t){a("next",t)},function(t){a("throw",t)}):r(o.done?"return":"normal",o.value)}catch(u){r("throw",u)}}function r(t,e){switch(t){case"return":i.resolve({value:e,done:!0});break;case"throw":i.reject(e);break;default:i.resolve({value:e,done:!1})}i=i.next,i?a(i.key,i.arg):o=null}var i,o;this._invoke=n,"function"!=typeof e["return"]&&(this["return"]=void 0)}return"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype["throw"]=function(t){return this._invoke("throw",t)},e.prototype["return"]=function(t){return this._invoke("return",t)},{wrap:function(t){return function(){return new e(t.apply(this,arguments))}},await:function(e){return new t(e)}}}(),e.asyncGeneratorDelegate=function(t,e){function n(n,a){return r=!0,a=new Promise(function(e){e(t[n](a))}),{done:!1,value:e(a)}}var a={},r=!1;return"function"==typeof Symbol&&Symbol.iterator&&(a[Symbol.iterator]=function(){return this}),a.next=function(t){return r?(r=!1,t):n("next",t)},"function"==typeof t["throw"]&&(a["throw"]=function(t){if(r)throw r=!1,t;return n("throw",t)}),"function"==typeof t["return"]&&(a["return"]=function(t){return n("return",t)}),a},e.asyncToGenerator=function(t){return function(){var e=t.apply(this,arguments);return new Promise(function(t,n){function a(r,i){try{var o=e[r](i),s=o.value}catch(u){return void n(u)}return o.done?void t(s):Promise.resolve(s).then(function(t){a("next",t)},function(t){a("throw",t)})}return a("next")})}},e.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e.createClass=function(){function t(t,e){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(t,a)&&(n[a]=t[a]);return n},e.possibleConstructorReturn=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},e.selfGlobal=void 0===t?self:t,e.set=function a(t,e,n,r){var i=Object.getOwnPropertyDescriptor(t,e);if(void 0===i){var o=Object.getPrototypeOf(t);null!==o&&a(o,e,n,r)}else if("value"in i&&i.writable)i.value=n;else{var s=i.set;void 0!==s&&s.call(r,n)}return n},e.slicedToArray=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),e.slicedToArrayLoose=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t)){for(var n,a=[],r=t[Symbol.iterator]();!(n=r.next()).done&&(a.push(n.value),!e||a.length!==e););return a}throw new TypeError("Invalid attempt to destructure non-iterable instance")},e.taggedTemplateLiteral=function(t,e){return Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))},e.taggedTemplateLiteralLoose=function(t,e){return t.raw=e,t},e.temporalRef=function(t,e,n){if(t===n)throw new ReferenceError(e+" is not defined - temporal dead zone");return t},e.temporalUndefined={},e.toArray=function(t){return Array.isArray(t)?t:Array.from(t)},e.toConsumableArray=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e {{Math.floor(adata.points)}} - + {{data.message}} {{#if data.loan && !data.requestonly}} @@ -29,7 +29,7 @@ state='{{data.away && data.docked ? null : "disabled"}}' action='loan'>Loan Shuttle {{else}} - Loaned to Centcom + Loaned to CentCom {{/if}} {{/if}} diff --git a/tgui/src/interfaces/ntos_card.ract b/tgui/src/interfaces/ntos_card.ract index 582737a8a6..3d7cbba9b2 100644 --- a/tgui/src/interfaces/ntos_card.ract +++ b/tgui/src/interfaces/ntos_card.ract @@ -180,7 +180,7 @@ {{#if data.centcom_access}} - Centcom + CentCom {{#each data.centcom_jobs}} {{display_name}} From 68bbda4b4dcb1b4ae26ede8a284b6b6256ac4013 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 8 Aug 2017 09:05:50 -0500 Subject: [PATCH 071/230] Mechs can no longer open cult doors if the person inside is not a cultist --- code/__DEFINES/access.dm | 7 ++++++- code/game/machinery/doors/airlock_types.dm | 19 ++++++++++--------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index e557a55e7c..3498887edf 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -93,4 +93,9 @@ #define ACCESS_AWAY_GENERIC1 205//Away generic access #define ACCESS_AWAY_GENERIC2 206 #define ACCESS_AWAY_GENERIC3 207 -#define ACCESS_AWAY_GENERIC4 208 \ No newline at end of file +#define ACCESS_AWAY_GENERIC4 208 + + //Special, for anything that's basically internal +#define ACCESS_BLOODCULT 250 +#define ACCESS_CLOCKCULT 251 + diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 72840241b3..ef54783cd3 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -368,13 +368,14 @@ overlays_file = 'icons/obj/doors/airlocks/cult/runed/overlays.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_cult hackProof = TRUE - aiControlDisabled = 1 + aiControlDisabled = TRUE + req_access = list(ACCESS_BLOODCULT) var/openingoverlaytype = /obj/effect/temp_visual/cult/door var/friendly = FALSE -/obj/machinery/door/airlock/cult/New() - ..() - new openingoverlaytype(src.loc) +/obj/machinery/door/airlock/cult/Initialize() + . = ..() + new openingoverlaytype(loc) /obj/machinery/door/airlock/cult/canAIControl(mob/user) return (iscultist(user) && !isAllPowerCut()) @@ -435,17 +436,17 @@ opacity = 1 hackProof = TRUE aiControlDisabled = TRUE + req_access = list(ACCESS_CLOCKCULT) use_power = FALSE resistance_flags = FIRE_PROOF | ACID_PROOF damage_deflection = 30 normal_integrity = 240 var/construction_state = GEAR_SECURE //Pinion airlocks have custom deconstruction -/obj/machinery/door/airlock/clockwork/New() - ..() - var/turf/T = get_turf(src) - new /obj/effect/temp_visual/ratvar/door(T) - new /obj/effect/temp_visual/ratvar/beam/door(T) +/obj/machinery/door/airlock/clockwork/Initialize() + . = ..() + new /obj/effect/temp_visual/ratvar/door(loc) + new /obj/effect/temp_visual/ratvar/beam/door(loc) change_construction_value(5) /obj/machinery/door/airlock/clockwork/Destroy() From fb86e035448445dafb20e3f86ba65189bd6dccf4 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 8 Aug 2017 09:05:54 -0500 Subject: [PATCH 072/230] Belligerent now has a visible indicator --- .../clock_scriptures/scripture_drivers.dm | 1 + .../objects/effects/temporary_visuals/clockcult.dm | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm index 7818f9fae8..fa61e3ca31 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm @@ -21,6 +21,7 @@ /datum/clockwork_scripture/channeled/belligerent/chant_effects(chant_number) for(var/mob/living/carbon/C in hearers(7, invoker)) C.apply_status_effect(STATUS_EFFECT_BELLIGERENT) + new /obj/effect/temp_visual/ratvar/belligerent(get_turf(invoker)) return TRUE diff --git a/code/game/objects/effects/temporary_visuals/clockcult.dm b/code/game/objects/effects/temporary_visuals/clockcult.dm index c3894b8300..b1068b0038 100644 --- a/code/game/objects/effects/temporary_visuals/clockcult.dm +++ b/code/game/objects/effects/temporary_visuals/clockcult.dm @@ -62,6 +62,17 @@ /obj/effect/temp_visual/ratvar/grille/broken icon_state = "ratvarbrokengrilleglow" +/obj/effect/temp_visual/ratvar/belligerent + layer = ABOVE_MOB_LAYER + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "belligerent_eye" + pixel_y = 20 + duration = 20 + +/obj/effect/temp_visual/ratvar/belligerent_cast/Initialize() + . = ..() + animate(src, alpha = 0, time = duration, easing = EASE_OUT) + /obj/effect/temp_visual/ratvar/mending_mantra layer = ABOVE_MOB_LAYER duration = 20 @@ -88,7 +99,7 @@ . = ..() pixel_x = rand(-8, 8) pixel_y = rand(-10, 10) - animate(src, alpha = 0, time = 3, easing = EASE_OUT) + animate(src, alpha = 0, time = duration, easing = EASE_OUT) /obj/effect/temp_visual/ratvar/prolonging_prism icon = 'icons/effects/64x64.dmi' From fcd1a2dc86ab4eac1c47488bbfc8d51fc1e5693e Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 8 Aug 2017 09:05:58 -0500 Subject: [PATCH 073/230] Oocky in icky descriptions --- code/game/objects/effects/contraband.dm | 2 +- code/modules/library/soapstone.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm index 663fed74fc..5778f5f42e 100644 --- a/code/game/objects/effects/contraband.dm +++ b/code/game/objects/effects/contraband.dm @@ -350,7 +350,7 @@ /obj/structure/sign/poster/contraband/free_drone name = "Free Drone" - desc = "This poster commemorates the bravery of the rogue drone banned by CentComm." + desc = "This poster commemorates the bravery of the rogue drone; once exiled, and then ultimately destroyed by CentCom." icon_state = "poster35" /obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6 diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm index 26c88883df..cd069ec44d 100644 --- a/code/modules/library/soapstone.dm +++ b/code/modules/library/soapstone.dm @@ -1,6 +1,6 @@ /obj/item/soapstone name = "soapstone" - desc = "Leave informative messages for the crew, including the crew of future shifts!\nEven if out of uses, it can still be used to remove messages.\n(Not suitable for engraving on shuttles, off station or on cats. Side effects may include beatings, bannings and orbital bombardment.)" + desc = "Leave informative messages for the crew, including the crew of future shifts!\nEven if out of uses, it can still be used to remove messages.\n(Not suitable for engraving on shuttles, off station or on cats. Side effects may include prompt beatings, psychotic clown incursions, and/or orbital bombardment.)" icon = 'icons/obj/items.dmi' icon_state = "soapstone" throw_speed = 3 From 9e71a0bdb10612858b887c4cfccd7d325d632769 Mon Sep 17 00:00:00 2001 From: ktccd Date: Tue, 8 Aug 2017 17:41:27 +0200 Subject: [PATCH 074/230] Lots of genital changes Penile masturbation is fixed again. Masturbation cooldown set to 5 seconds once again, as intended. mob_masturbate is now mob_climax(forced_climax=FALSE). It can be used to masturbate alone, cum inside someone partially or completely and can be used to trigger a forced orgasm through all eligible genitals. Hexacrocin (Aphro PLUS) now increases your minimum arousal over time when overdosing, up to your maximum arousal level at which point you are constantly aroused. When fully aroused, hexacrocin overdose will force an orgasm. Hexacamhor (ANaphro PLUS) overdose now decreases minimum arousal over time, down to 0. Added to_chat feedback to the player when their libido changes permanently. Changed old "src <<" messages to use the new to_chat in citadel chems and citadel arousal, so text should display now. Changed names of genitals to be capitalized, to avoid the code automatically calling them "The X". Masturbation also has more helpful feedback messages when you lack the correct organs. The old force_orgasm proc is removed, use mob_climax(forced_climax=TRUE) instead. --- code/citadel/cit_arousal.dm | 160 ++++++++++++++++++++++++------ code/citadel/cit_reagents.dm | 30 +++--- code/citadel/organs/breasts.dm | 2 +- code/citadel/organs/eggsack.dm | 2 +- code/citadel/organs/ovipositor.dm | 2 +- code/citadel/organs/penis.dm | 2 +- code/citadel/organs/testicles.dm | 2 +- code/citadel/organs/vagina.dm | 2 +- code/citadel/organs/womb.dm | 4 +- 9 files changed, 155 insertions(+), 51 deletions(-) diff --git a/code/citadel/cit_arousal.dm b/code/citadel/cit_arousal.dm index 12245c05d5..cf47dab1da 100644 --- a/code/citadel/cit_arousal.dm +++ b/code/citadel/cit_arousal.dm @@ -6,7 +6,7 @@ var/arousal_rate = 1 //The base rate that arousal will increase in this mob. var/arousal_loss_rate = 1 //How easily arousal can be relieved for this mob. var/canbearoused = FALSE //Mob-level disabler for arousal. Starts off and can be enabled as features are added for different mob types. - var/mb_cd_length = 50 //5 second cooldown for masturbating because fuck spam + var/mb_cd_length = 100 //5 second cooldown for masturbating because fuck spam. var/mb_cd_timer = 0 //The timer itself /mob/living/carbon/human @@ -150,14 +150,14 @@ return 0 var/mob/living/M = usr if(M.canbearoused) - M.mob_masturbate() + M.mob_climax() return 1 else - M << "Arousal is disabled. Feature is unavailable." + to_chat(M, "Arousal is disabled. Feature is unavailable.") -/mob/living/proc/mob_masturbate()//This is just so I can test this shit without being forced to add actual content to get rid of arousal. Will be a very basic proc for a while. +/mob/living/proc/mob_climax()//This is just so I can test this shit without being forced to add actual content to get rid of arousal. Will be a very basic proc for a while. set name = "Masturbate" set category = "IC" if(canbearoused && !restrained() && !stat) @@ -179,45 +179,93 @@ PoolOrNew(/obj/effect/decal/cleanable/femcum, loc) */ else - src << "You aren't aroused enough for that." + to_chat(src, "You aren't aroused enough for that.") -/mob/living/carbon/human/mob_masturbate() +/mob/living/carbon/human/mob_climax(forced_climax=FALSE) //Forced is instead of the other proc, makes you cum if you have the tools for it, ignoring restraints if(mb_cd_timer > world.time) - src << "You need to wait [round((mb_cd_timer - world.time)/(20))] seconds before you can do that again!" + if(!forced_climax) //Don't spam the message to the victim if forced to come too fast + to_chat(src, "You need to wait [round((mb_cd_timer - world.time)/(20))] seconds before you can do that again!") return + mb_cd_timer = (world.time + mb_cd_length) var/list/genitals_list = list() var/obj/item/organ/genital/SG = null//originally selected_genital var/list/containers_list = list() var/obj/item/weapon/reagent_containers/SC = null var/datum/reagents/fluid_source = null var/into_container = 0 - var/arms = get_num_arms() - var/free_hands = arms + var/free_hands = get_num_arms() //arms was only used to know if we had ANY at all var/total_cum = 0 var/finished = 0 var/mb_time = 30 - mb_cd_timer = (world.time + mb_cd_length) if(canbearoused && has_dna()) - if(restrained()) - src << "You can't do that while restrained!" + if(stat==2) + to_chat(src, "You can't do that while dead!") return - if(stat) - src << "You must be conscious to do that!" + if(forced_climax) //Something forced us to cum, this is not a masturbation thing and does not progress to the other checks + for(var/obj/item/organ/genital/G in internal_organs) + if(G.can_masturbate_with) //All capable genitals will orgasm with this + var/unable_to_come = FALSE + switch(G.type) + if(/obj/item/organ/genital/penis) + var/obj/item/organ/genital/penis/P = G + if(!P.linked_balls) + unable_to_come = TRUE + else + fluid_source = P.linked_balls.reagents + + + if(/obj/item/organ/genital/vagina) + var/obj/item/organ/genital/vagina/V = G + if(!V.linked_womb) + unable_to_come = TRUE + else + fluid_source = V.linked_womb.reagents + else //Weird, undefined genitalia behaviour + unable_to_come = TRUE + + if(unable_to_come) + src.visible_message("[src] shudders, their [G.name] unable to cum.", \ + "Your [G.name] cannot cum, giving no relief.", \ + "Your [G.name] cannot cum, giving no relief.") + else + if(fluid_source) + total_cum = fluid_source.total_volume + src.visible_message("[src] looks like they're about to cum.", \ + "You feel yourself about to orgasm.", \ + "You feel yourself about to orgasm.") + if(do_after(src, mb_time, target = src)) + if(total_cum > 5) + fluid_source.reaction(src.loc, TOUCH, 1, 0) + fluid_source.clear_reagents() + fluid_source = null //cleanup so this can be used for the next genitalia + + src.visible_message("[src] orgasms, cumming[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""]!", \ + "You're forced to cum[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""] with your [G].", \ + "Your [G] have been forced to climax.") + finished = 1 + if(finished) + setArousalLoss(min_arousal) + return //Do not proceed to masturbating if all genitals have been forced to orgasm. + if(stat==1) //Sleeping people can be forced chemically or with electrical stimulants, for example. + to_chat(src, "You must be conscious to do that!") + return + if(restrained()) + to_chat(src, "You can't do that while restrained!") return if(getArousalLoss() < 33)//flat number instead of percentage - src << "You aren't aroused enough for that!" + to_chat(src, "You aren't aroused enough for that!") return if(!is_groin_exposed()) - src << "You need to undress, first!" + to_chat(src, "You need to undress, first!") return - if(!arms) - src << "You need at least one arm." + if(!free_hands) + to_chat(src, "You need at least one free arm.") return for(var/helditem in held_items)//how many hands are free if(isobj(helditem)) free_hands-- if(free_hands <= 0) - src << "You need at least one free hand." + to_chat(src, "You need at least one free hand.") return for(var/obj/item/organ/genital/G in internal_organs) if(G.can_masturbate_with)//filter out what you can't masturbate with @@ -240,12 +288,12 @@ if(/obj/item/organ/genital/penis) var/obj/item/organ/genital/penis/P = SG if(!P.linked_balls) - src << "Grow a pair!" + to_chat(src, "You need a pair of testicles to do this.") return fluid_source = P.linked_balls.reagents total_cum = fluid_source.total_volume if(into_container)//into a glass or beaker or whatever - src.visible_message("[src] starts [pick("jerking off","stroking")] their [SG] over [SC].", \ + src.visible_message("[src] starts [pick("jerking off","stroking")] their [SG.name] over [SC].", \ "You start jerking off over [SC.name].", \ "You start masturbating.") if(do_after(src, mb_time, target = src) && in_range(src, SC)) @@ -254,16 +302,71 @@ "You cum into [SC].", \ "You have relieved yourself.") finished = 1 - + else //Not in a container + if(src.pulling) + if(iscarbon(src.pulling)) + var/mob/living/carbon/C = src.pulling + if(!C.is_groin_exposed()) + to_chat(src, "You must undress someone to climax inside them.") + return + if(isliving(src.pulling)) //Gotta be alive to fuck it, don't wanna have to code fucking objects that ain't containers... + var/mob/living/partner = src.pulling + src.visible_message("[src] is about to climax inside [partner]!", \ + "You're about to climax inside [partner]!", \ + "You're preparing to climax inside someone!") + switch(grab_state) + if(GRAB_PASSIVE) + if(do_after(src, mb_time, target = src) && in_range(src, partner)) + var/spillage = 0.5 //Leaks a bit on passive grab + var/did_spill = FALSE + fluid_source.trans_to(partner, total_cum*(1-spillage)) + total_cum = total_cum*spillage + if(total_cum > 5) + fluid_source.reaction(partner.loc, TOUCH, 1, 0) + did_spill = TRUE + fluid_source.clear_reagents() + + src.visible_message("[src] ejaculates inside [partner][did_spill ? ", overflowing and spilling":""]!", \ + "You ejaculate inside [partner][did_spill ? ", spilling out of them":""].", \ + "You have climaxed inside someone[did_spill ? ", spilling out of them":""].") + finished = 1 + else //Aggressive or higher + if(do_after(src, mb_time, target = src) && in_range(src, partner)) + var/spillage = 0.0 //Leakproofing seals + fluid_source.trans_to(partner, total_cum*(1-spillage)) + total_cum = total_cum*spillage + if(total_cum > 5) + fluid_source.reaction(partner.loc, TOUCH, 1, 0) + fluid_source.clear_reagents() + + src.visible_message("[src] ejaculates inside [partner], spilling nothing!", \ + "You ejaculate inside [partner], spilling nothing.", \ + "You have climaxed inside someone, spilling nothing.") + finished = 1 + //Don't care, not coding you fucking a unanchored girder + else //No pulling, or pulling non-living things + src.visible_message("[src] starts [pick("jerking off","stroking")] their [SG].", \ + "You start masturbating.", \ + "You start masturbating.") + if(do_after(src, mb_time, target = src)) + if(total_cum > 5) + fluid_source.reaction(src.loc, TOUCH, 1, 0) + fluid_source.clear_reagents() + + src.visible_message("[src] orgasms, cumming[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""]!", \ + "You cum[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""].", \ + "You have relieved yourself.") + finished = 1 + if(/obj/item/organ/genital/vagina) var/obj/item/organ/genital/vagina/V = SG if(!V.linked_womb) - src << "No womb!" + to_chat(src, "You need a womb to do this.") return fluid_source = V.linked_womb.reagents total_cum = fluid_source.total_volume if(into_container)//into a glass or beaker or whatever - src.visible_message("[src] starts fingering their vagina over [SC].", \ + src.visible_message("[src] starts fingering their [SG.name] over [SC].", \ "You start fingering over [SC.name].", \ "You start masturbating.") if(do_after(src, mb_time, target = src) && in_range(src, SC)) @@ -272,7 +375,7 @@ "You cum into [SC].", \ "You have relieved yourself.") finished = 1 - + else//not into a container src.visible_message("[src] starts fingering their vagina.", \ "You start fingering your vagina.", \ @@ -297,10 +400,5 @@ setArousalLoss(min_arousal) else - src << "You have no genitals!" + to_chat(src, "You have no genitals!") return - -/mob/living/carbon/proc/force_orgasm(intensity) - if(canbearoused && has_dna() && (has_penis() || has_vagina())) - return 1 - return 0 diff --git a/code/citadel/cit_reagents.dm b/code/citadel/cit_reagents.dm index 2f421542ae..428729d30f 100644 --- a/code/citadel/cit_reagents.dm +++ b/code/citadel/cit_reagents.dm @@ -105,7 +105,7 @@ M.emote(pick("moan","blush")) if(prob(5)) var/aroused_message = pick("You feel frisky.", "You're having trouble suppressing your urges.", "You feel in the mood.") - M << "[aroused_message]" + to_chat(M, "[aroused_message]") ..() /datum/reagent/aphrodisiacplus @@ -128,15 +128,13 @@ else M.emote(pick("moan","blush")) if(prob(5)) + var/aroused_message if(M.getArousalLoss() > 90) - var/aroused_message = pick("You need to fuck someone!", "You're bursting with sexual tension!", "You can't get sex off your mind!") - M << "[aroused_message]" + aroused_message = pick("You need to fuck someone!", "You're bursting with sexual tension!", "You can't get sex off your mind!") else - var/aroused_message = pick("You feel a bit hot.", "You feel strong sexual urges.", "You feel in the mood.", "You're ready to go down on someone.") - M << "[aroused_message]" -// if(iscarbon(M) && has_dna(M)) -// M.force_ejaculation() - ..() + aroused_message = pick("You feel a bit hot.", "You feel strong sexual urges.", "You feel in the mood.", "You're ready to go down on someone.") + to_chat(M, "[aroused_message]") + /datum/reagent/aphrodisiacplus/addiction_act_stage2(mob/living/M) if(prob(30)) M.adjustBrainLoss(2) @@ -152,11 +150,17 @@ ..() /datum/reagent/aphrodisiacplus/overdose_process(mob/living/M) - if(prob(66)) + if(prob(33)) + if(M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna()) + var/mob/living/carbon/human/H = M + to_chat(H, "Your libido is going haywire!") + H.mob_climax(forced_climax=TRUE) if(M.min_arousal < 50) M.min_arousal += 1 - if(M.max_arousal < 200) - M.max_arousal += 1 + to_chat(M, "You're having a hard time thinkin about things other than sex!") + if(M.min_arousal < M.max_arousal) + M.min_arousal += 1 + to_chat(M, "You feel your libido permanently increasing.") M.adjustArousalLoss(2) ..() @@ -193,8 +197,10 @@ if(prob(33)) if(M.min_arousal > 0) M.min_arousal -= 1 - if(M.max_arousal > 75) + to_chat(M, "You feel your libido returning to more normal levels.") + if(M.min_arousal > 50) M.min_arousal -= 1 + to_chat(M, "You feel like your overactive libido is calming down.") M.adjustArousalLoss(-2) ..() diff --git a/code/citadel/organs/breasts.dm b/code/citadel/organs/breasts.dm index 5e3f312199..ce45b88cfb 100644 --- a/code/citadel/organs/breasts.dm +++ b/code/citadel/organs/breasts.dm @@ -1,5 +1,5 @@ /obj/item/organ/genital/breasts - name = "breasts" + name = "Breasts" desc = "Female milk producing organs." icon_state = "breasts" icon = 'code/citadel/icons/breasts.dmi' diff --git a/code/citadel/organs/eggsack.dm b/code/citadel/organs/eggsack.dm index 1e53240e1a..718a353b87 100644 --- a/code/citadel/organs/eggsack.dm +++ b/code/citadel/organs/eggsack.dm @@ -1,5 +1,5 @@ /obj/item/organ/genital/eggsack - name = "egg sack" + name = "Egg sack" desc = "An egg producing reproductive organ." icon_state = "egg_sack" icon = 'code/citadel/icons/ovipositor.dmi' diff --git a/code/citadel/organs/ovipositor.dm b/code/citadel/organs/ovipositor.dm index 9e46cff91c..3d684ee387 100644 --- a/code/citadel/organs/ovipositor.dm +++ b/code/citadel/organs/ovipositor.dm @@ -1,5 +1,5 @@ /obj/item/organ/genital/ovipositor - name = "ovipositor" + name = "Ovipositor" desc = "An egg laying reproductive organ." icon_state = "ovi_knotted_2" icon = 'code/citadel/icons/ovipositor.dmi' diff --git a/code/citadel/organs/penis.dm b/code/citadel/organs/penis.dm index 3d99d6c939..d687b3e76a 100644 --- a/code/citadel/organs/penis.dm +++ b/code/citadel/organs/penis.dm @@ -1,5 +1,5 @@ /obj/item/organ/genital/penis - name = "penis" + name = "Penis" desc = "A male reproductive organ." icon_state = "penis" icon = 'code/citadel/icons/penis.dmi' diff --git a/code/citadel/organs/testicles.dm b/code/citadel/organs/testicles.dm index 71e591f930..a759aeab52 100644 --- a/code/citadel/organs/testicles.dm +++ b/code/citadel/organs/testicles.dm @@ -1,5 +1,5 @@ /obj/item/organ/genital/testicles - name = "testicles" + name = "Testicles" desc = "A male reproductive organ." icon_state = "testicles" icon = 'code/citadel/icons/penis.dmi' diff --git a/code/citadel/organs/vagina.dm b/code/citadel/organs/vagina.dm index c1924a3067..fa1f00bda2 100644 --- a/code/citadel/organs/vagina.dm +++ b/code/citadel/organs/vagina.dm @@ -1,5 +1,5 @@ /obj/item/organ/genital/vagina - name = "vagina" + name = "Vagina" desc = "A female reproductive organ." icon = 'code/citadel/icons/vagina.dmi' icon_state = "vagina" diff --git a/code/citadel/organs/womb.dm b/code/citadel/organs/womb.dm index e1ea02a230..3ebe5c2f98 100644 --- a/code/citadel/organs/womb.dm +++ b/code/citadel/organs/womb.dm @@ -1,5 +1,5 @@ /obj/item/organ/genital/womb - name = "womb" + name = "Womb" desc = "A female reproductive organ." icon = 'code/citadel/icons/vagina.dmi' icon_state = "womb" @@ -10,7 +10,7 @@ fluid_id = "femcum" producing = TRUE var/obj/item/organ/genital/vagina/linked_vag - + /obj/item/organ/genital/womb/Initialize() . = ..() reagents.add_reagent(fluid_id, fluid_max_volume) From c0cc42821671ac9caebb115863c2bd64b89fcbb5 Mon Sep 17 00:00:00 2001 From: ktccd Date: Tue, 8 Aug 2017 19:45:06 +0200 Subject: [PATCH 075/230] Makes mindtransfers respect arousal Clients arousal preferences are now taken into account when transferring minds. --- code/datums/mind.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 3515440499..7017149d53 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -120,6 +120,10 @@ transfer_martial_arts(new_character) if(active || force_key_move) new_character.key = key //now transfer the key to link the client to our new body + if(isliving(new_character)) //New humans and such are by default enabled arousal. Let's always use the new mind's prefs. + var/mob/living/L = new_character + L.canbearoused = L.client.prefs.arousable //Technically this should make taking over a character mean the body gain the new minds setting... + L.update_arousal_hud() //Removes the old icon /datum/mind/proc/store_memory(new_text) memory += "[new_text]
    " From 5eadc197cf36529d616696de7680e3cc6cf7c82f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 8 Aug 2017 14:59:10 -0500 Subject: [PATCH 076/230] Fix RCL loading --- code/game/objects/items/weapons/RCL.dm | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/code/game/objects/items/weapons/RCL.dm b/code/game/objects/items/weapons/RCL.dm index 623a1f9b78..495af046af 100644 --- a/code/game/objects/items/weapons/RCL.dm +++ b/code/game/objects/items/weapons/RCL.dm @@ -23,17 +23,20 @@ /obj/item/weapon/twohanded/rcl/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W - if(user.transferItemToLoc(W, src)) - loaded = W - loaded.max_amount = max_amount //We store a lot. - else - to_chat(user, "[src] is stuck to your hand!") - return + + if(!loaded) + if(!user.transferItemToLoc(W, src)) + to_chat(user, "[src] is stuck to your hand!") + return + else + loaded = W //W.loc is src at this point. + loaded.max_amount = max_amount //We store a lot. + return if(loaded.amount < max_amount) - var/amount = min(loaded.amount + C.amount, max_amount) - C.use(amount - loaded.amount) - loaded.amount = amount + var/transfer_amount = min(max_amount - loaded.amount, C.amount) + C.use(transfer_amount) + loaded.amount += transfer_amount else return update_icon() From 0a7a8fcf90746ceba3ba3ec61533e84ee03a3c6b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 8 Aug 2017 15:04:21 -0500 Subject: [PATCH 077/230] Fixes repairing jumpsuits. --- code/modules/clothing/clothing.dm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 013fbd8bc4..bd6ffe5f67 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -538,13 +538,15 @@ BLIND // can't see anything if(accessory_overlay) . += accessory_overlay -/obj/item/clothing/under/attackby(obj/item/W, mob/user, params) - if((has_sensor == BROKEN_SENSORS) && istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W +/obj/item/clothing/under/attackby(obj/item/I, mob/user, params) + if((has_sensor == BROKEN_SENSORS) && istype(I, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = I C.use(1) has_sensor = HAS_SENSORS to_chat(user,"You repair the suit sensors on [src] with [C].") return 1 + if(!attach_accessory(I, user)) + return ..() /obj/item/clothing/under/update_clothes_damaged_state(damaging = TRUE) ..() @@ -591,10 +593,6 @@ BLIND // can't see anything ..() -/obj/item/clothing/under/attackby(obj/item/I, mob/user, params) - if(!attach_accessory(I, user)) - ..() - /obj/item/clothing/under/proc/attach_accessory(obj/item/I, mob/user, notifyAttach = 1) . = FALSE if(istype(I, /obj/item/clothing/accessory)) From 764ebb2e5e4d50f9a266cd1a792d656c661d3a65 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 8 Aug 2017 22:24:01 -0500 Subject: [PATCH 078/230] Fixes the Hierophant not spawning its crusher trophy --- code/modules/mining/equipment/kinetic_crusher.dm | 2 +- .../mob/living/simple_animal/hostile/megafauna/hierophant.dm | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index a1251381b4..06845ba0cb 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -284,7 +284,7 @@ L.adjustBruteLoss(bonus_value) /obj/item/crusher_trophy/tail_spike/proc/pushback(mob/living/target, mob/living/user) - if(!target.anchored || ismegafauna(target)) //megafauna will always be pushed + if(!QDELETED(target) && !QDELETED(user) && (!target.anchored || ismegafauna(target))) //megafauna will always be pushed step(target, get_dir(user, target)) //bubblegum diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 11c59a2d28..0ca966df35 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -57,6 +57,7 @@ Difficulty: Hard ranged_cooldown_time = 40 aggro_vision_range = 21 //so it can see to one side of the arena to the other loot = list(/obj/item/weapon/hierophant_club) + crusher_loot = list(/obj/item/weapon/hierophant_club) wander = FALSE var/burst_range = 3 //range on burst aoe var/beam_range = 5 //range on cross blast beams From 2004d399c9e6d92cfb4ddaa966666255ade622ea Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 8 Aug 2017 22:26:10 -0500 Subject: [PATCH 079/230] Makes dummy humans queue instead of harddel --- code/modules/mob/living/carbon/human/human.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 74bc902be5..4424e80ce8 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -9,11 +9,11 @@ real_name = "Test Dummy" status_flags = GODMODE|CANPUSH -/mob/living/carbon/human/dummy/New(loc) +INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) + +/mob/living/carbon/human/dummy/Destroy() ..() - if(!initialized) - args[1] = FALSE - Initialize(arglist(args)) + return QDEL_HINT_QUEUE /mob/living/carbon/human/dummy/Life() return From cc7ad81f79ba7026a3458ed420a33361c1fc3907 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 8 Aug 2017 22:28:16 -0500 Subject: [PATCH 080/230] Adds helpers to avoid << use --- code/__DEFINES/misc.dm | 2 +- code/__HELPERS/_logging.dm | 43 +++++++++++-------- code/__HELPERS/game.dm | 4 +- code/__HELPERS/mobs.dm | 3 -- code/__HELPERS/priority_announce.dm | 7 +-- code/__HELPERS/text.dm | 2 +- code/controllers/configuration.dm | 28 ++++++------ code/controllers/subsystem/pai.dm | 1 - code/controllers/subsystem/persistence.dm | 8 ++-- code/controllers/subsystem/shuttle.dm | 2 - code/controllers/subsystem/ticker.dm | 34 +++++++-------- code/controllers/subsystem/title.dm | 2 +- code/datums/antagonists/devil.dm | 2 +- code/datums/antagonists/ninja.dm | 2 +- code/datums/status_effects/buffs.dm | 4 +- code/datums/weather/weather.dm | 6 +-- code/game/area/areas.dm | 2 +- code/game/area/areas.dm.rej | 10 +++++ code/game/gamemodes/antag_spawner.dm | 2 +- code/game/gamemodes/blob/powers.dm | 4 +- code/game/gamemodes/blob/theblob.dm | 2 +- .../gamemodes/changeling/powers/shriek.dm | 4 +- .../gamemodes/clock_cult/clock_scripture.dm | 2 +- code/game/gamemodes/cult/cult_comms.dm | 10 ++--- code/game/gamemodes/cult/supply.dm | 1 - code/game/gamemodes/cult/talisman.dm | 4 +- .../gamemodes/malfunction/Malf_Modules.dm | 3 +- code/game/gamemodes/miniantags/morph/morph.dm | 2 +- .../gamemodes/miniantags/revenant/revenant.dm | 2 +- .../miniantags/slaughter/slaughterevent.dm | 2 +- code/game/gamemodes/nuclear/nuclearbomb.dm | 3 +- code/game/gamemodes/wizard/artefact.dm | 2 +- code/game/machinery/cloning.dm | 2 +- .../game/machinery/computer/communications.dm | 2 +- code/game/machinery/computer/pod.dm | 2 +- code/game/machinery/doors/airlock_types.dm | 2 +- code/game/mecha/equipment/mecha_equipment.dm | 5 +-- code/game/mecha/mecha.dm | 8 ++-- code/game/mecha/mecha_actions.dm | 2 +- code/game/objects/effects/mines.dm | 2 +- code/game/sound.dm | 6 +-- code/game/sound.dm.rej | 9 ++++ code/modules/admin/NewBan.dm | 28 ++++++------ code/modules/admin/admin.dm | 2 +- code/modules/admin/admin_investigate.dm.rej | 10 +++++ code/modules/admin/admin_ranks.dm | 4 +- code/modules/admin/secrets.dm | 2 +- code/modules/admin/topic.dm | 10 ++--- code/modules/admin/verbs/BrokenInhands.dm | 2 +- code/modules/admin/verbs/adminhelp.dm | 4 +- code/modules/admin/verbs/adminpm.dm | 6 +-- code/modules/admin/verbs/playsound.dm | 4 +- code/modules/admin/verbs/pray.dm | 2 +- code/modules/client/client_procs.dm | 2 +- code/modules/client/preferences_savefile.dm | 4 +- .../client/preferences_savefile.dm.rej | 10 +++++ code/modules/client/preferences_toggles.dm | 2 +- code/modules/detectivework/detective_work.dm | 5 --- code/modules/error_handler/error_handler.dm | 6 +-- code/modules/events/holiday/halloween.dm | 2 +- code/modules/events/portal_storm.dm | 4 +- code/modules/events/wizard/fakeexplosion.dm | 3 +- code/modules/events/wizard/imposter.dm | 2 +- code/modules/goonchat/browserOutput.dm | 7 ++- code/modules/goonchat/jsErrorHandler.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 2 +- .../carbon/alien/special/alien_embryo.dm | 2 +- .../mob/living/carbon/carbon_defense.dm | 2 +- .../mob/living/carbon/human/interactive.dm | 2 +- .../mob/living/carbon/monkey/punpun.dm | 22 +++++----- code/modules/mob/living/living_defense.dm | 2 +- code/modules/mob/living/silicon/ai/say.dm | 4 +- .../mob/living/silicon/pai/personality.dm | 10 ++--- .../mob/living/simple_animal/friendly/cat.dm | 2 +- .../mob/living/simple_animal/friendly/dog.dm | 10 ++--- .../hostile/megafauna/colossus.dm | 2 +- .../mob/living/simple_animal/parrot.dm | 8 ++-- code/modules/mob/mob_helpers.dm | 2 +- code/modules/power/apc.dm | 5 +-- code/modules/power/power.dm | 1 - code/modules/power/singularity/narsie.dm | 2 +- code/modules/power/supermatter/supermatter.dm | 4 +- code/modules/spells/spell_types/knock.dm | 2 +- .../spells/spell_types/mind_transfer.dm | 4 +- code/modules/vehicles/bicycle.dm | 2 +- 85 files changed, 241 insertions(+), 217 deletions(-) create mode 100644 code/game/area/areas.dm.rej create mode 100644 code/game/sound.dm.rej create mode 100644 code/modules/admin/admin_investigate.dm.rej create mode 100644 code/modules/client/preferences_savefile.dm.rej diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index e0ab84f832..0eeb62d67f 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -8,7 +8,7 @@ //You can use these defines to get the typepath of the currently running proc/verb (yes procs + verbs are objects) /* eg: /mob/living/carbon/human/death() - world << THIS_PROC_TYPE_STR //You can only output the string versions + to_chat(world, THIS_PROC_TYPE_STR) //You can only output the string versions Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a string with () (eg: the _WITH_ARGS defines) to make it look nicer) */ #define THIS_PROC_TYPE ..... diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 2dd2e42129..05b6aa1a15 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -1,3 +1,10 @@ +//wrapper macros for easier grepping +#define DIRECT_OUTPUT(A, B) A << B +#define SEND_IMAGE(target, image) DIRECT_OUTPUT(target, image) +#define SEND_SOUND(target, sound) DIRECT_OUTPUT(target, sound) +#define SEND_TEXT(target, text) DIRECT_OUTPUT(target, text) +#define WRITE_FILE(file, text) DIRECT_OUTPUT(file, text) + //print a warning message to world.log #define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].") /proc/warning(msg) @@ -20,13 +27,13 @@ /proc/log_admin(text) GLOB.admin_log.Add(text) if (config.log_admin) - GLOB.world_game_log << "\[[time_stamp()]]ADMIN: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]ADMIN: [text]") //Items using this proc are stripped from public logs - use with caution /proc/log_admin_private(text) GLOB.admin_log.Add(text) if (config.log_admin) - GLOB.world_game_log << "\[[time_stamp()]]ADMINPRIVATE: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]ADMINPRIVATE: [text]") /proc/log_adminsay(text) if (config.log_adminchat) @@ -38,65 +45,65 @@ /proc/log_game(text) if (config.log_game) - GLOB.world_game_log << "\[[time_stamp()]]GAME: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]GAME: [text]") /proc/log_vote(text) if (config.log_vote) - GLOB.world_game_log << "\[[time_stamp()]]VOTE: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]VOTE: [text]") /proc/log_access(text) if (config.log_access) - GLOB.world_game_log << "\[[time_stamp()]]ACCESS: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]ACCESS: [text]") /proc/log_say(text) if (config.log_say) - GLOB.world_game_log << "\[[time_stamp()]]SAY: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]SAY: [text]") /proc/log_prayer(text) if (config.log_prayer) - GLOB.world_game_log << "\[[time_stamp()]]PRAY: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]PRAY: [text]") /proc/log_law(text) if (config.log_law) - GLOB.world_game_log << "\[[time_stamp()]]LAW: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]LAW: [text]") /proc/log_ooc(text) if (config.log_ooc) - GLOB.world_game_log << "\[[time_stamp()]]OOC: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]OOC: [text]") /proc/log_whisper(text) if (config.log_whisper) - GLOB.world_game_log << "\[[time_stamp()]]WHISPER: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]WHISPER: [text]") /proc/log_emote(text) if (config.log_emote) - GLOB.world_game_log << "\[[time_stamp()]]EMOTE: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]EMOTE: [text]") /proc/log_attack(text) if (config.log_attack) - GLOB.world_attack_log << "\[[time_stamp()]]ATTACK: [text]" + WRITE_FILE(GLOB.world_attack_log, "\[[time_stamp()]]ATTACK: [text]") /proc/log_pda(text) if (config.log_pda) - GLOB.world_game_log << "\[[time_stamp()]]PDA: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]PDA: [text]") /proc/log_comment(text) if (config.log_pda) //reusing the PDA option because I really don't think news comments are worth a config option - GLOB.world_game_log << "\[[time_stamp()]]COMMENT: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]COMMENT: [text]") /proc/log_chat(text) if (config.log_pda) - GLOB.world_game_log << "\[[time_stamp()]]CHAT: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]CHAT: [text]") /proc/log_sql(text) if(config.sql_enabled) - GLOB.world_game_log << "\[[time_stamp()]]SQL: [text]" + WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]SQL: [text]") //This replaces world.log so it displays both in DD and the file /proc/log_world(text) - GLOB.world_runtime_log << text - world.log << text + WRITE_FILE(GLOB.world_runtime_log, text) + SEND_TEXT(world.log, text) // Helper procs for building detailed log lines diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index d150e86f45..9b1507771a 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -418,7 +418,7 @@ /proc/showCandidatePollWindow(mob/M, poll_time, Question, list/candidates, ignore_category, time_passed, flashwindow = TRUE) set waitfor = 0 - M << 'sound/misc/notice2.ogg' //Alerting them to their consideration + SEND_SOUND(M, 'sound/misc/notice2.ogg') //Alerting them to their consideration if(flashwindow) window_flash(M.client) switch(ignore_category ? askuser(M,Question,"Please answer in [poll_time/10] seconds!","Yes","No","Never for this round", StealFocus=0, Timeout=poll_time) : askuser(M,Question,"Please answer in [poll_time/10] seconds!","Yes","No", StealFocus=0, Timeout=poll_time)) @@ -426,7 +426,7 @@ to_chat(M, "Choice registered: Yes.") if(time_passed + poll_time <= world.time) to_chat(M, "Sorry, you answered too late to be considered!") - M << 'sound/machines/buzz-sigh.ogg' + SEND_SOUND(M, 'sound/machines/buzz-sigh.ogg') candidates -= M else candidates += M diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 7c6746f477..ee80354987 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -1,6 +1,3 @@ -//wrapper macro for sending images that makes grepping easy -#define SEND_IMAGE(target, image) target << image - /proc/random_blood_type() return pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index 70bb8b2db6..a617437ac3 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -24,11 +24,12 @@ announcement += "
    [html_encode(text)]
    " announcement += "
    " + var/s = sound(sound) for(var/mob/M in GLOB.player_list) if(!isnewplayer(M) && M.can_hear()) to_chat(M, announcement) if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS) - M << sound(sound) + SEND_SOUND(M, s) /proc/print_command_report(text = "", title = null, announce=TRUE) if(!title) @@ -55,6 +56,6 @@ to_chat(M, "[title]
    [message]

    ") if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS) if(alert) - M << sound('sound/misc/notice1.ogg') + SEND_SOUND(M, sound('sound/misc/notice1.ogg')) else - M << sound('sound/misc/notice2.ogg') + SEND_SOUND(M, sound('sound/misc/notice2.ogg')) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index cd5d0c6af5..60c95f4740 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -553,7 +553,7 @@ GLOBAL_LIST_INIT(binary, list("0","1")) var/list/tosend = list() tosend["data"] = finalized - log << json_encode(tosend) + WRITE_FILE(log, json_encode(tosend)) //Used for applying byonds text macros to strings that are loaded at runtime /proc/apply_text_macros(string) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index c32c481291..abf2c1f937 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -275,7 +275,7 @@ if(M.config_tag) if(!(M.config_tag in modes)) // ensure each mode is added only once - GLOB.config_error_log << "Adding game mode [M.name] ([M.config_tag]) to configuration." + WRITE_FILE(GLOB.config_error_log, "Adding game mode [M.name] ([M.config_tag]) to configuration.") modes += M.config_tag mode_names[M.config_tag] = M.name probabilities[M.config_tag] = M.probability @@ -548,7 +548,7 @@ if("irc_announce_new_game") irc_announce_new_game = TRUE else - GLOB.config_error_log << "Unknown setting in configuration: '[name]'" + WRITE_FILE(GLOB.config_error_log, "Unknown setting in configuration: '[name]'") else if(type == "game_options") switch(name) @@ -611,13 +611,13 @@ if(mode_name in modes) continuous[mode_name] = 1 else - GLOB.config_error_log << "Unknown continuous configuration definition: [mode_name]." + WRITE_FILE(GLOB.config_error_log, "Unknown continuous configuration definition: [mode_name].") if("midround_antag") var/mode_name = lowertext(value) if(mode_name in modes) midround_antag[mode_name] = 1 else - GLOB.config_error_log << "Unknown midround antagonist configuration definition: [mode_name]." + WRITE_FILE(GLOB.config_error_log, "Unknown midround antagonist configuration definition: [mode_name].") if("midround_antag_time_check") midround_antag_time_check = text2num(value) if("midround_antag_life_check") @@ -633,9 +633,9 @@ if(mode_name in modes) min_pop[mode_name] = text2num(mode_value) else - GLOB.config_error_log << "Unknown minimum population configuration definition: [mode_name]." + WRITE_FILE(GLOB.config_error_log, "Unknown minimum population configuration definition: [mode_name].") else - GLOB.config_error_log << "Incorrect minimum population configuration definition: [mode_name] [mode_value]." + WRITE_FILE(GLOB.config_error_log, "Incorrect minimum population configuration definition: [mode_name] [mode_value].") if("max_pop") var/pop_pos = findtext(value, " ") var/mode_name = null @@ -647,9 +647,9 @@ if(mode_name in modes) max_pop[mode_name] = text2num(mode_value) else - GLOB.config_error_log << "Unknown maximum population configuration definition: [mode_name]." + WRITE_FILE(GLOB.config_error_log, "Unknown maximum population configuration definition: [mode_name].") else - GLOB.config_error_log << "Incorrect maximum population configuration definition: [mode_name] [mode_value]." + WRITE_FILE(GLOB.config_error_log, "Incorrect maximum population configuration definition: [mode_name] [mode_value].") if("shuttle_refuel_delay") shuttle_refuel_delay = text2num(value) if("show_game_type_odds") @@ -677,9 +677,9 @@ if(prob_name in modes) probabilities[prob_name] = text2num(prob_value) else - GLOB.config_error_log << "Unknown game mode probability configuration definition: [prob_name]." + WRITE_FILE(GLOB.config_error_log, "Unknown game mode probability configuration definition: [prob_name].") else - GLOB.config_error_log << "Incorrect probability configuration definition: [prob_name] [prob_value]." + WRITE_FILE(GLOB.config_error_log, "Incorrect probability configuration definition: [prob_name] [prob_value].") if("protect_roles_from_antagonist") protect_roles_from_antagonist = 1 @@ -726,7 +726,7 @@ // Value is in the form "LAWID,NUMBER" var/list/L = splittext(value, ",") if(L.len != 2) - GLOB.config_error_log << "Invalid LAW_WEIGHT: " + t + WRITE_FILE(GLOB.config_error_log, "Invalid LAW_WEIGHT: " + t) continue var/lawid = L[1] var/weight = text2num(L[2]) @@ -781,7 +781,7 @@ if("mice_roundstart") mice_roundstart = text2num(value) else - GLOB.config_error_log << "Unknown setting in configuration: '[name]'" + WRITE_FILE(GLOB.config_error_log, "Unknown setting in configuration: '[name]'") else if(type == "policies") policies[name] = value @@ -839,7 +839,7 @@ if ("disabled") currentmap = null else - GLOB.config_error_log << "Unknown command in map vote config: '[command]'" + WRITE_FILE(GLOB.config_error_log, "Unknown command in map vote config: '[command]'") /datum/configuration/proc/loadsql(filename) @@ -883,7 +883,7 @@ if("feedback_tableprefix") global.sqlfdbktableprefix = value else - GLOB.config_error_log << "Unknown setting in configuration: '[name]'" + WRITE_FILE(GLOB.config_error_log, "Unknown setting in configuration: '[name]'") /datum/configuration/proc/pick_mode(mode_name) // I wish I didn't have to instance the game modes in order to look up diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm index e5e83c85fc..2a1a04e21d 100644 --- a/code/controllers/subsystem/pai.dm +++ b/code/controllers/subsystem/pai.dm @@ -149,7 +149,6 @@ SUBSYSTEM_DEF(pai) continue if(!(ROLE_PAI in G.client.prefs.be_special)) continue - //G << 'sound/misc/server-ready.ogg' //Alerting them to their consideration to_chat(G, "[user] is requesting a pAI personality! Use the pAI button to submit yourself as one.") addtimer(CALLBACK(src, .proc/spam_again), spam_delay) var/list/available = list() diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index f4eebe95be..a0dc7c526d 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -49,7 +49,7 @@ SUBSYSTEM_DEF(persistence) satchel_string = pick_n_take(expanded_old_satchels) old_secret_satchels = jointext(expanded_old_satchels,"#") - secret_satchels[SSmapping.config.map_name] << old_secret_satchels + WRITE_FILE(secret_satchels[SSmapping.config.map_name], old_secret_satchels) var/list/chosen_satchel = splittext(satchel_string,"|") if(!chosen_satchel || isemptylist(chosen_satchel) || chosen_satchel.len != 3) //Malformed @@ -171,7 +171,7 @@ SUBSYSTEM_DEF(persistence) if(isemptylist(savable_obj)) continue old_secret_satchels += "[F.x]|[F.y]|[pick(savable_obj)]#" - secret_satchels[SSmapping.config.map_name] << old_secret_satchels + WRITE_FILE(secret_satchels[SSmapping.config.map_name], old_secret_satchels) /datum/controller/subsystem/persistence/proc/CollectChiselMessages() var/savefile/chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav") @@ -181,14 +181,14 @@ SUBSYSTEM_DEF(persistence) log_world("Saved [saved_messages.len] engraved messages on map [SSmapping.config.map_name]") - chisel_messages_sav[SSmapping.config.map_name] << json_encode(saved_messages) + WRITE_FILE(chisel_messages_sav[SSmapping.config.map_name], json_encode(saved_messages)) /datum/controller/subsystem/persistence/proc/SaveChiselMessage(obj/structure/chisel_message/M) saved_messages += list(M.pack()) // dm eats one list /datum/controller/subsystem/persistence/proc/CollectTrophies() - trophy_sav << json_encode(saved_trophies) + WRITE_FILE(trophy_sav, json_encode(saved_trophies)) /datum/controller/subsystem/persistence/proc/SaveTrophy(obj/structure/displaycase/trophy/T) if(!T.added_roundstart && T.showpiece) diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index f0c11a0d83..0186589f16 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -101,8 +101,6 @@ SUBSYSTEM_DEF(shuttle) T.color = "#00ffff" #endif - //world.log << "[transit_turfs.len] transit turfs registered" - /datum/controller/subsystem/shuttle/fire() for(var/thing in mobile) if(!thing) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 08fe58e167..3c2de6eeb9 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -225,7 +225,7 @@ SUBSYSTEM_DEF(ticker) round_start_time = world.time to_chat(world, "Welcome to [station_name()], enjoy your stay!") - world << sound('sound/ai/welcome.ogg') + SEND_SOUND(world, sound('sound/ai/welcome.ogg')) current_state = GAME_STATE_PLAYING Master.SetRunLevel(RUNLEVEL_GAME) @@ -300,7 +300,7 @@ SUBSYSTEM_DEF(ticker) if("nuclear emergency") //Nuke wasn't on station when it blew up flick("intro_nuke",cinematic) sleep(35) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) station_explosion_detonation(bomb) flick("station_intact_fade_red",cinematic) cinematic.icon_state = "summary_nukefail" @@ -308,12 +308,12 @@ SUBSYSTEM_DEF(ticker) cinematic.icon_state = null flick("intro_cult",cinematic) sleep(25) - world << sound('sound/magic/enter_blood.ogg') + SEND_SOUND(world, sound('sound/magic/enter_blood.ogg')) sleep(28) - world << sound('sound/machines/terminal_off.ogg') + SEND_SOUND(world, sound('sound/machines/terminal_off.ogg')) sleep(20) flick("station_corrupted",cinematic) - world << sound('sound/effects/ghost.ogg') + SEND_SOUND(world, sound('sound/effects/ghost.ogg')) actually_blew_up = FALSE if("gang war") //Gang Domination (just show the override screen) cinematic.icon_state = "intro_malf_still" @@ -323,19 +323,19 @@ SUBSYSTEM_DEF(ticker) if("fake") //The round isn't over, we're just freaking people out for fun flick("intro_nuke",cinematic) sleep(35) - world << sound('sound/items/bikehorn.ogg') + SEND_SOUND(world, sound('sound/items/bikehorn.ogg')) flick("summary_selfdes",cinematic) actually_blew_up = FALSE else flick("intro_nuke",cinematic) sleep(35) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) station_explosion_detonation(bomb) if(NUKE_MISS_STATION || NUKE_SYNDICATE_BASE) //nuke was nowhere nearby //TODO: a really distant explosion animation sleep(50) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) station_explosion_detonation(bomb) actually_blew_up = station_missed == NUKE_SYNDICATE_BASE //don't kill everyone on station if it detonated off station else //station was destroyed @@ -346,42 +346,42 @@ SUBSYSTEM_DEF(ticker) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red",cinematic) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) station_explosion_detonation(bomb) cinematic.icon_state = "summary_nukewin" if("AI malfunction") //Malf (screen,explosion,summary) flick("intro_malf",cinematic) sleep(76) flick("station_explode_fade_red",cinematic) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) station_explosion_detonation(bomb) //TODO: If we ever decide to actually detonate the vault bomb cinematic.icon_state = "summary_malf" if("blob") //Station nuked (nuke,explosion,summary) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red",cinematic) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) station_explosion_detonation(bomb) //TODO: no idea what this case could be cinematic.icon_state = "summary_selfdes" if("cult") //Station nuked (nuke,explosion,summary) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red",cinematic) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) station_explosion_detonation(bomb) //TODO: no idea what this case could be cinematic.icon_state = "summary_cult" if("no_core") //Nuke failed to detonate as it had no core flick("intro_nuke",cinematic) sleep(35) flick("station_intact",cinematic) - world << sound('sound/ambience/signal.ogg') + SEND_SOUND(world, sound('sound/ambience/signal.ogg')) addtimer(CALLBACK(src, .proc/finish_cinematic, null, FALSE), 100) return //Faster exit, since nothing happened else //Station nuked (nuke,explosion,summary) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red", cinematic) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) station_explosion_detonation(bomb) cinematic.icon_state = "summary_selfdes" //If its actually the end of the round, wait for it to end. @@ -636,7 +636,7 @@ SUBSYSTEM_DEF(ticker) if(living_player_count() < config.hard_popcap) if(next_in_line && next_in_line.client) to_chat(next_in_line, "A slot has opened! You have approximately 20 seconds to join. \>\>Join Game\<\<") - next_in_line << sound('sound/misc/notice1.ogg') + SEND_SOUND(next_in_line, sound('sound/misc/notice1.ogg')) next_in_line.LateChoices() return queued_players -= next_in_line //Client disconnected, remove he @@ -804,7 +804,7 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/proc/save_mode(the_mode) var/F = file("data/mode.txt") fdel(F) - F << the_mode + WRITE_FILE(F, the_mode) /datum/controller/subsystem/ticker/proc/SetRoundEndSound(the_sound) set waitfor = FALSE @@ -858,4 +858,4 @@ SUBSYSTEM_DEF(ticker) 'sound/roundend/disappointed.ogg'\ ) - world << sound(round_end_sound) + SEND_SOUND(world, sound(round_end_sound)) diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm index 6c5466d8d9..a0bcb5feec 100644 --- a/code/controllers/subsystem/title.dm +++ b/code/controllers/subsystem/title.dm @@ -53,7 +53,7 @@ SUBSYSTEM_DEF(title) /datum/controller/subsystem/title/Shutdown() if(file_path) var/F = file("data/previous_title.dat") - F << file_path + WRITE_FILE(F, file_path) for(var/thing in GLOB.clients) if(!thing) diff --git a/code/datums/antagonists/devil.dm b/code/datums/antagonists/devil.dm index c8f00d1995..077fb94e52 100644 --- a/code/datums/antagonists/devil.dm +++ b/code/datums/antagonists/devil.dm @@ -280,7 +280,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", if(!D) return to_chat(world, "\"SLOTH, WRATH, GLUTTONY, ACEDIA, ENVY, GREED, PRIDE! FIRES OF HELL AWAKEN!!\"") - world << 'sound/hallucinations/veryfar_noise.ogg' + SEND_SOUND(world, sound('sound/hallucinations/veryfar_noise.ogg')) give_appropriate_spells() D.convert_to_archdevil() if(istype(D.loc, /obj/effect/dummy/slaughter/)) diff --git a/code/datums/antagonists/ninja.dm b/code/datums/antagonists/ninja.dm index 6948740687..4efb17f154 100644 --- a/code/datums/antagonists/ninja.dm +++ b/code/datums/antagonists/ninja.dm @@ -141,7 +141,7 @@ /datum/antagonist/ninja/greet() - owner.current << sound('sound/effects/ninja_greeting.ogg') + SEND_SOUND(owner.current, sound('sound/effects/ninja_greeting.ogg')) to_chat(owner.current, "I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!") to_chat(owner.current, "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!") to_chat(owner.current, "Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.") diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 485ca00515..c15ede7b3e 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -37,7 +37,7 @@ icon_state = "shadow_mend" /datum/status_effect/void_price/tick() - owner << sound('sound/magic/summon_karp.ogg', volume = 25) + SEND_SOUND(owner, sound('sound/magic/summon_karp.ogg', volume = 25)) owner.adjustBruteLoss(3) @@ -247,7 +247,7 @@ for(var/datum/mind/B in SSticker.mode.cult) if(isliving(B.current)) var/mob/living/M = B.current - M << 'sound/hallucinations/veryfar_noise.ogg' + SEND_SOUND(M, sound('sound/hallucinations/veryfar_noise.ogg')) to_chat(M, "The Cult's Master, [owner], has fallen in \the [A]!") /datum/status_effect/cult_master/tick() diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm index 7b43bf6396..f4f2fc089c 100644 --- a/code/datums/weather/weather.dm +++ b/code/datums/weather/weather.dm @@ -69,7 +69,7 @@ if(telegraph_message) to_chat(M, telegraph_message) if(telegraph_sound) - M << sound(telegraph_sound) + SEND_SOUND(M, sound(telegraph_sound)) addtimer(CALLBACK(src, .proc/start), telegraph_duration) /datum/weather/proc/start() @@ -83,7 +83,7 @@ if(weather_message) to_chat(M, weather_message) if(weather_sound) - M << sound(weather_sound) + SEND_SOUND(M, sound(weather_sound)) START_PROCESSING(SSweather, src) addtimer(CALLBACK(src, .proc/wind_down), weather_duration) @@ -98,7 +98,7 @@ if(end_message) to_chat(M, end_message) if(end_sound) - M << sound(end_sound) + SEND_SOUND(M, sound(end_sound)) STOP_PROCESSING(SSweather, src) addtimer(CALLBACK(src, .proc/end), end_duration) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 3f0b780205..d38a4d3467 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -448,7 +448,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) var/sound = pick(ambientsounds) if(!L.client.played) - L << sound(sound, repeat = 0, wait = 0, volume = 25, channel = CHANNEL_AMBIENCE) + SEND_SOUND(L, sound(sound, repeat = 0, wait = 0, volume = 25, channel = CHANNEL_AMBIENCE)) L.client.played = 1 sleep(600) //ewww - this is very very bad if(L.&& L.client) diff --git a/code/game/area/areas.dm.rej b/code/game/area/areas.dm.rej new file mode 100644 index 0000000000..3c097d1229 --- /dev/null +++ b/code/game/area/areas.dm.rej @@ -0,0 +1,10 @@ +diff a/code/game/area/areas.dm b/code/game/area/areas.dm (rejected hunks) +@@ -432,7 +432,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) + // Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch + if(L.client && !L.client.ambience_playing && L.client.prefs.toggles & SOUND_SHIP_AMBIENCE) + L.client.ambience_playing = 1 +- L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = CHANNEL_BUZZ) ++ SEND_SOUND(L, sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = CHANNEL_BUZZ)) + + if(!(L.client && (L.client.prefs.toggles & SOUND_AMBIENCE))) + return //General ambience check is below the ship ambience so one can play without the other diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index 8da7cb3169..8a6d0063b9 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -110,7 +110,7 @@ SSticker.mode.apprentices += M.mind M.mind.special_role = "apprentice" SSticker.mode.update_wiz_icons_added(M.mind) - M << sound('sound/effects/magic.ogg') + SEND_SOUND(M, sound('sound/effects/magic.ogg')) var/newname = copytext(sanitize(input(M, "You are [wizard_name]'s apprentice. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN) if (!newname) newname = randomname diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index deef4367e0..f6bf8539e0 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -171,8 +171,8 @@ if(candidates.len) //if we got at least one candidate, they're a blobbernaut now. var/client/C = pick(candidates) blobber.key = C.key - blobber << 'sound/effects/blobattack.ogg' - blobber << 'sound/effects/attackblob.ogg' + SEND_SOUND(blobber, sound('sound/effects/blobattack.ogg')) + SEND_SOUND(blobber, sound('sound/effects/attackblob.ogg')) to_chat(blobber, "You are a blobbernaut!") to_chat(blobber, "You are powerful, hard to kill, and slowly regenerate near nodes and cores, but will slowly die if not near the blob or if the factory that made you is killed.") to_chat(blobber, "You can communicate with other blobbernauts and GLOB.overminds via :b") diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 0c216f1c38..9bce7319f8 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -235,7 +235,7 @@ if(istype(I, /obj/item/device/analyzer)) user.changeNext_move(CLICK_CD_MELEE) to_chat(user, "The analyzer beeps once, then reports:
    ") - user << 'sound/machines/ping.ogg' + SEND_SOUND(user, sound('sound/machines/ping.ogg')) chemeffectreport(user) typereport(user) else diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm index 099d991062..7afce8aa27 100644 --- a/code/game/gamemodes/changeling/powers/shriek.dm +++ b/code/game/gamemodes/changeling/powers/shriek.dm @@ -16,10 +16,10 @@ C.confused += 25 C.Jitter(50) else - C << sound('sound/effects/screech.ogg') + SEND_SOUND(C, sound('sound/effects/screech.ogg')) if(issilicon(M)) - M << sound('sound/weapons/flash.ogg') + SEND_SOUND(M, sound('sound/weapons/flash.ogg')) M.Knockdown(rand(100,200)) for(var/obj/machinery/light/L in range(4, user)) diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index 4a1ca367ce..382aaec10d 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -150,7 +150,7 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or if(prob(ratvarian_prob)) message = text2ratvar(message) to_chat(invoker, "\"[message]\"") - invoker << 'sound/magic/clockwork/invoke_general.ogg' + SEND_SOUND(invoker, sound('sound/magic/clockwork/invoke_general.ogg')) return TRUE /datum/clockwork_scripture/proc/check_offstation_penalty() diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/game/gamemodes/cult/cult_comms.dm index a7fb90d253..647b47e7fa 100644 --- a/code/game/gamemodes/cult/cult_comms.dm +++ b/code/game/gamemodes/cult/cult_comms.dm @@ -103,13 +103,13 @@ if(B.current) B.current.update_action_buttons_icon() if(!B.current.incapacitated()) - B.current << 'sound/hallucinations/im_here1.ogg' + SEND_SOUND(B.current, 'sound/hallucinations/im_here1.ogg') to_chat(B.current, "Acolyte [Nominee] has asserted that they are worthy of leading the cult. A vote will be called shortly.") sleep(100) var/list/asked_cultists = list() for(var/datum/mind/B in SSticker.mode.cult) if(B.current && B.current != Nominee && !B.current.incapacitated()) - B.current << 'sound/magic/exit_blood.ogg' + SEND_SOUND(B.current, 'sound/magic/exit_blood.ogg') asked_cultists += B.current var/list/yes_voters = pollCandidates("[Nominee] seeks to lead your cult, do you support [Nominee.p_them()]?", poll_time = 300, group = asked_cultists) if(QDELETED(Nominee) || Nominee.incapacitated()) @@ -280,7 +280,7 @@ for(var/datum/mind/B in SSticker.mode.cult) if(B.current && B.current.stat != DEAD && B.current.client) to_chat(B.current, "Master [ranged_ability_user] has marked [GLOB.blood_target] in the [A.name] as the cult's top priority, get there immediately!") - B.current << pick(sound('sound/hallucinations/over_here2.ogg',0,1,75), sound('sound/hallucinations/over_here3.ogg',0,1,75)) + SEND_SOUND(B.current, sound(pick('sound/hallucinations/over_here2.ogg','sound/hallucinations/over_here3.ogg'),0,1,75)) B.current.client.images += GLOB.blood_target_image attached_action.owner.update_action_buttons_icon() remove_ranged_ability("The marking rite is complete! It will last for 90 seconds.") @@ -324,7 +324,7 @@ return FALSE if(cooldown > world.time) if(!PM.active) - owner << "You need to wait [round((cooldown - world.time) * 0.1)] seconds before you can pulse again!" + to_chat(owner, "You need to wait [round((cooldown - world.time) * 0.1)] seconds before you can pulse again!") return FALSE return ..() @@ -367,7 +367,7 @@ if(!attached_action.throwing) attached_action.throwing = TRUE attached_action.throwee = target - ranged_ability_user << 'sound/weapons/thudswoosh.ogg' + SEND_SOUND(ranged_ability_user, sound('sound/weapons/thudswoosh.ogg')) to_chat(ranged_ability_user,"You reach through the veil with your mind's eye and seize [target]!") return else diff --git a/code/game/gamemodes/cult/supply.dm b/code/game/gamemodes/cult/supply.dm index 71b8c941b1..23270c3d6c 100644 --- a/code/game/gamemodes/cult/supply.dm +++ b/code/game/gamemodes/cult/supply.dm @@ -29,7 +29,6 @@ return 0 /obj/item/weapon/paper/talisman/supply/Topic(href, href_list) - world.log << "[usr], [href], [href_list]" if(QDELETED(src) || usr.incapacitated() || !in_range(src, usr)) return diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index e8b77c1172..c5b94d983f 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -270,7 +270,7 @@ if(target.use(25)) new /obj/structure/constructshell(T) to_chat(user, "The talisman clings to the metal and twists it into a construct shell!") - user << sound('sound/effects/magic.ogg',0,1,25) + SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) invoke(user, 1) qdel(src) else @@ -281,7 +281,7 @@ new /obj/item/stack/sheet/runed_metal(T,quantity) target.use(quantity) to_chat(user, "The talisman clings to the plasteel, transforming it into runed metal!") - user << sound('sound/effects/magic.ogg',0,1,25) + SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) invoke(user, 1) if(uses <= 0) qdel(src) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 8c8108962e..5bc162ee8f 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -375,8 +375,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( minor_announce("[key] SECONDS UNTIL DOOMSDAY DEVICE ACTIVATION!", "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", TRUE) /obj/machinery/doomsday_device/proc/detonate(z_level = ZLEVEL_STATION) - for(var/mob/M in GLOB.player_list) - M << 'sound/machines/alarm.ogg' + sound_to_playing_players('sound/machines/alarm.ogg') sleep(100) for(var/mob/living/L in GLOB.mob_list) var/turf/T = get_turf(L) diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index dcd2ef2673..af27833d15 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -224,7 +224,7 @@ player_mind.special_role = "Morph" SSticker.mode.traitors |= player_mind to_chat(S, S.playstyle_string) - S << 'sound/magic/mutate.ogg' + SEND_SOUND(S, sound('sound/magic/mutate.ogg')) message_admins("[key_name_admin(S)] has been made into a morph by an event.") log_game("[key_name(S)] was spawned as a morph by an event.") spawned_mobs += S diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index afbc597c29..e16c21e2e2 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -74,7 +74,7 @@ generated_objectives_and_spells = TRUE mind.remove_all_antag() mind.wipe_memory() - src << 'sound/effects/ghost.ogg' + SEND_SOUND(src, sound('sound/effects/ghost.ogg')) var/datum/objective/revenant/objective = new objective.owner = mind mind.objectives += objective diff --git a/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm b/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm index e9b417de1a..bcb2218fe6 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm @@ -42,7 +42,7 @@ SSticker.mode.traitors |= player_mind to_chat(S, S.playstyle_string) to_chat(S, "You are currently not currently in the same plane of existence as the station. Blood Crawl near a blood pool to manifest.") - S << 'sound/magic/demon_dies.ogg' + SEND_SOUND(S, 'sound/magic/demon_dies.ogg') message_admins("[key_name_admin(S)] has been made into a slaughter demon by an event.") log_game("[key_name(S)] was spawned as a slaughter demon by an event.") spawned_mobs += S diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 755f6dd0c9..d36cab4881 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -421,8 +421,7 @@ yes_code = FALSE safety = TRUE update_icon() - for(var/mob/M in GLOB.player_list) - M << 'sound/machines/alarm.ogg' + sound_to_playing_players('sound/machines/alarm.ogg') if(SSticker && SSticker.mode) SSticker.mode.explosion_in_progress = 1 sleep(100) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 5f65c2a96d..6f1ae8e1dd 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -476,7 +476,7 @@ GiveHint(target) else if(istype(I, /obj/item/weapon/bikehorn)) to_chat(target, "HONK") - target << 'sound/items/airhorn.ogg' + SEND_SOUND(target, 'sound/items/airhorn.ogg') target.adjustEarDamage(0,3) GiveHint(target) cooldown = world.time +cooldown_time diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 06c4cce2bc..9fdcea6aaf 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -403,7 +403,7 @@ flash_color(mob_occupant, flash_color="#960000", flash_time=100) to_chat(mob_occupant, "Agony blazes across your consciousness as your body is torn apart.
    Is this what dying is like? Yes it is.
    ") playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 50, 0) - mob_occupant << sound('sound/hallucinations/veryfar_noise.ogg',0,1,50) + SEND_SOUND(mob_occupant, sound('sound/hallucinations/veryfar_noise.ogg',0,1,50)) QDEL_IN(mob_occupant, 40) /obj/machinery/clonepod/relaymove(mob/user) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 66c4bfa463..c2d2d1055d 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -89,7 +89,7 @@ playsound(src, 'sound/machines/terminal_alert.ogg', 25, 0) if(prob(25)) for(var/mob/living/silicon/ai/AI in active_ais()) - AI << sound('sound/machines/terminal_alert.ogg', volume = 10) //Very quiet for balance reasons + SEND_SOUND(AI, sound('sound/machines/terminal_alert.ogg', volume = 10)) //Very quiet for balance reasons if("logout") authenticated = 0 playsound(src, 'sound/machines/terminal_off.ogg', 50, 0) diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index 60ac43cb41..3f18cc29e9 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -21,7 +21,7 @@ return if(!connected) - viewers(null, null) << "Cannot locate mass driver connector. Cancelling firing sequence!" + say("Cannot locate mass driver connector. Cancelling firing sequence!") return for(var/obj/machinery/door/poddoor/M in range(range, src)) diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 72840241b3..2c31cb1d21 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -389,7 +389,7 @@ new /obj/effect/temp_visual/cult/sac(loc) var/atom/throwtarget throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(L, src))) - L << pick(sound('sound/hallucinations/turn_around1.ogg',0,1,50), sound('sound/hallucinations/turn_around2.ogg',0,1,50)) + SEND_SOUND(L, sound(pick('sound/hallucinations/turn_around1.ogg','sound/hallucinations/turn_around2.ogg'),0,1,50)) flash_color(L, flash_color="#960000", flash_time=20) L.Knockdown(40) L.throw_at(throwtarget, 5, 1,src) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 4fdf06b530..f51e1be8bb 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -37,10 +37,7 @@ src.update_chassis_page() chassis.occupant_message("The [src] is destroyed!") chassis.log_append_to_last("[src] is destroyed.",1) - if(istype(src, /obj/item/mecha_parts/mecha_equipment/weapon)) - chassis.occupant << sound('sound/mecha/weapdestr.ogg',volume=50) - else - chassis.occupant << sound('sound/mecha/critdestr.ogg',volume=50) + SEND_SOUND(chassis.occupant, sound(istype(src, /obj/item/mecha_parts/mecha_equipment/weapon) ? 'sound/mecha/weapdestr.ogg' : 'sound/mecha/critdestr.ogg', volume=50)) chassis = null return ..() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 5564cd2c0a..cd385d3de3 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -596,7 +596,7 @@ /obj/mecha/proc/setInternalDamage(int_dam_flag) internal_damage |= int_dam_flag log_append_to_last("Internal damage of type [int_dam_flag].",1) - occupant << sound('sound/machines/warning-buzzer.ogg',wait=0) + SEND_SOUND(occupant, sound('sound/machines/warning-buzzer.ogg',wait=0)) diag_hud_set_mechstat() return @@ -707,7 +707,7 @@ icon_state = initial(icon_state) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) if(!internal_damage) - occupant << sound('sound/mecha/nominal.ogg',volume=50) + SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50)) AI.cancel_camera() AI.controlled_mech = src AI.remote_control = src @@ -860,7 +860,7 @@ setDir(dir_in) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) if(!internal_damage) - occupant << sound('sound/mecha/nominal.ogg',volume=50) + SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50)) return 1 else return 0 @@ -914,7 +914,7 @@ setDir(dir_in) log_message("[mmi_as_oc] moved in as pilot.") if(!internal_damage) - occupant << sound('sound/mecha/nominal.ogg',volume=50) + SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50)) GrantActions(brainmob) return TRUE diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index 050498d8f1..4102ba914b 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -242,7 +242,7 @@ chassis.occupant_message("Zoom mode [chassis.zoom_mode?"en":"dis"]abled.") if(chassis.zoom_mode) owner.client.change_view(12) - owner << sound('sound/mecha/imag_enh.ogg',volume=50) + SEND_SOUND(owner, sound('sound/mecha/imag_enh.ogg',volume=50)) else owner.client.change_view(world.view) //world.view - default mob view size UpdateButtonIcon() diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index c9b524836f..6c02c9b4d1 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -121,7 +121,7 @@ if(!victim.client || !istype(victim)) return to_chat(victim, "RIP AND TEAR") - victim << 'sound/misc/e1m1.ogg' + SEND_SOUND(victim, sound('sound/misc/e1m1.ogg')) var/old_color = victim.client.color var/red_splash = list(1,0,0,0.8,0.2,0, 0.8,0,0.2,0.1,0,0) var/pure_red = list(0,0,0,0,0,0,0,0,0,1,0,0) diff --git a/code/game/sound.dm b/code/game/sound.dm index c728071e50..f0891eaefb 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -78,7 +78,7 @@ S.y = 1 S.falloff = (falloff ? falloff : FALLOFF_SOUNDS) - src << S + SEND_SOUND(src, S) /proc/sound_to_playing_players(sound, volume = 100, vary) sound = get_sfx(sound) @@ -94,13 +94,13 @@ next_channel = 1 /mob/proc/stop_sound_channel(chan) - src << sound(null, repeat = 0, wait = 0, channel = chan) + SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = chan)) /client/proc/playtitlemusic() UNTIL(SSticker.login_music) //wait for SSticker init to set the login music if(prefs && (prefs.toggles & SOUND_LOBBY)) - src << sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85, channel = CHANNEL_LOBBYMUSIC) // MAD JAMS + SEND_SOUND(src, sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85, channel = CHANNEL_LOBBYMUSIC) // MAD JAMS) /proc/get_rand_frequency() return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs. diff --git a/code/game/sound.dm.rej b/code/game/sound.dm.rej new file mode 100644 index 0000000000..003c8b9975 --- /dev/null +++ b/code/game/sound.dm.rej @@ -0,0 +1,9 @@ +diff a/code/game/sound.dm b/code/game/sound.dm (rejected hunks) +@@ -145,7 +145,3 @@ + if ("can_open") + soundin = pick('sound/effects/can_open1.ogg', 'sound/effects/can_open2.ogg', 'sound/effects/can_open3.ogg') + return soundin +- +-/proc/playsound_global(file, repeat = 0, wait, channel, volume) +- for(var/V in GLOB.clients) +- V << sound(file, repeat, wait, channel, volume) diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm index 1ff2360923..5ea980a91d 100644 --- a/code/modules/admin/NewBan.dm +++ b/code/modules/admin/NewBan.dm @@ -109,14 +109,14 @@ GLOBAL_PROTECT(Banlist) else GLOB.Banlist.dir.Add("[ckey][computerid]") GLOB.Banlist.cd = "/base/[ckey][computerid]" - GLOB.Banlist["key"] << ckey - GLOB.Banlist["id"] << computerid - GLOB.Banlist["ip"] << address - GLOB.Banlist["reason"] << reason - GLOB.Banlist["bannedby"] << bannedby - GLOB.Banlist["temp"] << temp + WRITE_FILE(GLOB.Banlist["key"], ckey) + WRITE_FILE(GLOB.Banlist["id"], computerid) + WRITE_FILE(GLOB.Banlist["ip"], address) + WRITE_FILE(GLOB.Banlist["reason"], reason) + WRITE_FILE(GLOB.Banlist["bannedby"], bannedby) + WRITE_FILE(GLOB.Banlist["temp"], temp) if (temp) - GLOB.Banlist["minutes"] << bantimestamp + WRITE_FILE(GLOB.Banlist["minutes"], bantimestamp) if(!temp) create_message("note", ckey, bannedby, "Permanently banned - [reason]", null, null, 0, 0) else @@ -211,17 +211,17 @@ GLOBAL_PROTECT(Banlist) GLOB.Banlist.cd = "/base" GLOB.Banlist.dir.Add("trash[i]trashid[i]") GLOB.Banlist.cd = "/base/trash[i]trashid[i]" - GLOB.Banlist["key"] << "trash[i]" + WRITE_FILE(GLOB.Banlist["key"], "trash[i]") else GLOB.Banlist.cd = "/base" GLOB.Banlist.dir.Add("[last]trashid[i]") GLOB.Banlist.cd = "/base/[last]trashid[i]" - GLOB.Banlist["key"] << last - GLOB.Banlist["id"] << "trashid[i]" - GLOB.Banlist["reason"] << "Trashban[i]." - GLOB.Banlist["temp"] << a - GLOB.Banlist["minutes"] << GLOB.CMinutes + rand(1,2000) - GLOB.Banlist["bannedby"] << "trashmin" + WRITE_FILE(GLOB.Banlist["key"], last) + WRITE_FILE(GLOB.Banlist["id"], "trashid[i]") + WRITE_FILE(GLOB.Banlist["reason"], "Trashban[i].") + WRITE_FILE(GLOB.Banlist["temp"], a) + WRITE_FILE(GLOB.Banlist["minutes"], GLOB.CMinutes + rand(1,2000)) + WRITE_FILE(GLOB.Banlist["bannedby"], "trashmin") last = "trash[i]" GLOB.Banlist.cd = "/base" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 7c20421d3c..5943e753a0 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -595,7 +595,7 @@ log_admin("[key_name(usr)] delayed the round start.") else to_chat(world, "The game will start in [newtime] seconds.") - world << 'sound/ai/attention.ogg' + SEND_SOUND(world, sound('sound/ai/attention.ogg')) log_admin("[key_name(usr)] set the pre-game delay to [newtime] seconds.") SSblackbox.add_details("admin_verb","Delay Game Start") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/admin_investigate.dm.rej b/code/modules/admin/admin_investigate.dm.rej new file mode 100644 index 0000000000..77df29a749 --- /dev/null +++ b/code/modules/admin/admin_investigate.dm.rej @@ -0,0 +1,10 @@ +diff a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm (rejected hunks) +@@ -2,7 +2,7 @@ + if(!message || !subject) + return + var/F = file("[GLOB.log_directory]/[subject].html") +- F << "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
    " ++ WRITE_FILE(F, "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
    ") + + + /client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS) ) diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 73c2d8067e..828fbb2e91 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -142,7 +142,7 @@ GLOBAL_PROTECT(admin_ranks) else if(!SSdbcore.Connect()) log_world("Failed to connect to database in load_admin_ranks(). Reverting to legacy system.") - GLOB.world_game_log << "Failed to connect to database in load_admin_ranks(). Reverting to legacy system." + WRITE_FILE(GLOB.world_game_log, "Failed to connect to database in load_admin_ranks(). Reverting to legacy system.") config.admin_legacy_system = 1 load_admin_ranks() return @@ -220,7 +220,7 @@ GLOBAL_PROTECT(admin_ranks) else if(!SSdbcore.Connect()) log_world("Failed to connect to database in load_admins(). Reverting to legacy system.") - GLOB.world_game_log << "Failed to connect to database in load_admins(). Reverting to legacy system." + WRITE_FILE(GLOB.world_game_log, "Failed to connect to database in load_admins(). Reverting to legacy system.") config.admin_legacy_system = 1 load_admins() return diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index be09ebd3ef..58181d663a 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -390,7 +390,7 @@ SSblackbox.add_details("admin_secrets_fun_used","Chinese Cartoons") message_admins("[key_name_admin(usr)] made everything kawaii.") for(var/mob/living/carbon/human/H in GLOB.mob_list) - H << sound('sound/ai/animes.ogg') + SEND_SOUND(H, sound('sound/ai/animes.ogg')) if(H.dna.species.id == "human") if(H.dna.features["tail_human"] == "None" || H.dna.features["ears"] == "None") diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 5436590e83..ec8c2e19b4 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -506,10 +506,10 @@ ban_unban_log_save("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]") message_admins("[key_name_admin(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]") GLOB.Banlist.cd = "/base/[banfolder]" - GLOB.Banlist["reason"] << reason - GLOB.Banlist["temp"] << temp - GLOB.Banlist["minutes"] << minutes - GLOB.Banlist["bannedby"] << usr.ckey + WRITE_FILE(GLOB.Banlist["reason"], reason) + WRITE_FILE(GLOB.Banlist["temp"], temp) + WRITE_FILE(GLOB.Banlist["minutes"], minutes) + WRITE_FILE(GLOB.Banlist["bannedby"], usr.ckey) GLOB.Banlist.cd = "/base" SSblackbox.inc("ban_edit",1) unbanpanel() @@ -1697,7 +1697,7 @@ message_admins("[key_name(H)] got their cookie, spawned by [key_name(src.owner)].") SSblackbox.inc("admin_cookies_spawned",1) to_chat(H, "Your prayers have been answered!! You received the best cookie!") - H << 'sound/effects/pray_chaplain.ogg' + SEND_SOUND(H, sound('sound/effects/pray_chaplain.ogg')) else if(href_list["adminsmite"]) if(!check_rights(R_ADMIN|R_FUN)) diff --git a/code/modules/admin/verbs/BrokenInhands.dm b/code/modules/admin/verbs/BrokenInhands.dm index 89eccf285d..732ae9e91c 100644 --- a/code/modules/admin/verbs/BrokenInhands.dm +++ b/code/modules/admin/verbs/BrokenInhands.dm @@ -28,7 +28,7 @@ if(text) var/F = file("broken_icons.txt") fdel(F) - F << text + WRITE_FILE(F, text) to_chat(world, "Completely successfully and written to [F]") diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 0177798e25..eef4fbd9e7 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -258,7 +258,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) for(var/client/X in GLOB.admins) if(X.prefs.toggles & SOUND_ADMINHELP) - X << 'sound/effects/adminhelp.ogg' + SEND_SOUND(X, sound('sound/effects/adminhelp.ogg')) window_flash(X, ignorepref = TRUE) to_chat(X, chat_msg) @@ -346,7 +346,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) if(initiator) initiator.giveadminhelpverb() - initiator << 'sound/effects/adminhelp.ogg' + SEND_SOUND(initiator, sound('sound/effects/adminhelp.ogg')) to_chat(initiator, "- AdminHelp Rejected! -") to_chat(initiator, "Your admin help was rejected. The adminhelp verb has been returned to you so that you may try again.") diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 31fb08da36..db29021463 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -167,7 +167,7 @@ //play the recieving admin the adminhelp sound (if they have them enabled) if(recipient.prefs.toggles & SOUND_ADMINHELP) - recipient << 'sound/effects/adminhelp.ogg' + SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg')) else if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT @@ -182,7 +182,7 @@ admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]") //always play non-admin recipients the adminhelp sound - recipient << 'sound/effects/adminhelp.ogg' + SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg')) //AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn if(config.popup_admin_pm) @@ -301,7 +301,7 @@ window_flash(C, ignorepref = TRUE) //always play non-admin recipients the adminhelp sound - C << 'sound/effects/adminhelp.ogg' + SEND_SOUND(C, 'sound/effects/adminhelp.ogg') C.ircreplyamount = IRCREPLYCOUNT diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index eb4c3a5f10..2bac326710 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -30,7 +30,7 @@ for(var/mob/M in GLOB.player_list) if(M.client.prefs.toggles & SOUND_MIDI) - M << admin_sound + SEND_SOUND(M, admin_sound) SSblackbox.add_details("admin_verb","Play Global Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -68,5 +68,5 @@ message_admins("[key_name_admin(src)] stopped all currently playing sounds.") for(var/mob/M in GLOB.player_list) if(M.client) - M << sound(null) + SEND_SOUND(M, sound(null)) SSblackbox.add_details("admin_verb","Stop All Playing Sounds") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index a385e68560..bf0e4e1fcc 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -40,7 +40,7 @@ to_chat(C, msg) if(C.prefs.toggles & SOUND_PRAYERS) if(usr.job == "Chaplain") - C << 'sound/effects/pray.ogg' + SEND_SOUND(C, sound('sound/effects/pray.ogg')) to_chat(usr, "Your prayers have been received by the gods.") SSblackbox.add_details("admin_verb","Prayer") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 4455af7ca9..fddc3a38d4 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -73,7 +73,7 @@ return //Logs all hrefs - GLOB.world_href_log << "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
    " + WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
    ") // Admin PM if(href_list["priv_msg"]) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index c52767f1d9..193dd77c3d 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -273,7 +273,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car slot = sanitize_integer(slot, 1, max_save_slots, initial(default_slot)) if(slot != default_slot) default_slot = slot - S["default_slot"] << slot + WRITE_FILE(S["default_slot"] , slot) S.cd = "/character[slot]" var/needs_update = savefile_needs_update(S) @@ -292,7 +292,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car pref_species = new rando_race() if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000") - S["features["mcolor"]"] << "#FFF" + WRITE_FILE(S["features["mcolor"]"] , "#FFF") //Character S["OOC_Notes"] >> metadata diff --git a/code/modules/client/preferences_savefile.dm.rej b/code/modules/client/preferences_savefile.dm.rej new file mode 100644 index 0000000000..3cdbf2cd44 --- /dev/null +++ b/code/modules/client/preferences_savefile.dm.rej @@ -0,0 +1,10 @@ +diff a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm (rejected hunks) +@@ -193,7 +193,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car + return 0 + S.cd = "/" + +- WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX //updates (or failing that the sanity checks) will ensure data is not invalid at load. Assume up-to-date) ++ WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //updates (or failing that the sanity checks) will ensure data is not invalid at load. Assume up-to-date + + //general preferences + WRITE_FILE(S["ooccolor"], ooccolor) diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index d56b6e0619..1d04964a8b 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -229,7 +229,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggleprayersounds)() set name = "Stop Sounds" set category = "Preferences" set desc = "Stop Current Sounds" - usr << sound(null) + SEND_SOUND(usr, sound(null)) SSblackbox.add_details("preferences_verb","Stop Self Sounds") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm index 1ab499fcb5..6c91fee8c5 100644 --- a/code/modules/detectivework/detective_work.dm +++ b/code/modules/detectivework/detective_work.dm @@ -17,19 +17,16 @@ if(M.wear_suit) fibertext = "Material from \a [M.wear_suit]." if(prob(10*item_multiplier) && !(fibertext in suit_fibers)) - //world.log << "Added fibertext: [fibertext]" suit_fibers += fibertext if(!(M.wear_suit.body_parts_covered & CHEST)) if(M.w_uniform) fibertext = "Fibers from \a [M.w_uniform]." if(prob(12*item_multiplier) && !(fibertext in suit_fibers)) //Wearing a suit means less of the uniform exposed. - //world.log << "Added fibertext: [fibertext]" suit_fibers += fibertext if(!(M.wear_suit.body_parts_covered & HANDS)) if(M.gloves) fibertext = "Material from a pair of [M.gloves.name]." if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) - //world.log << "Added fibertext: [fibertext]" suit_fibers += fibertext else if(M.w_uniform) fibertext = "Fibers from \a [M.w_uniform]." @@ -39,12 +36,10 @@ if(M.gloves) fibertext = "Material from a pair of [M.gloves.name]." if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) - //world.log << "Added fibertext: [fibertext]" suit_fibers += "Material from a pair of [M.gloves.name]." else if(M.gloves) fibertext = "Material from a pair of [M.gloves.name]." if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) - //world.log << "Added fibertext: [fibertext]" suit_fibers += "Material from a pair of [M.gloves.name]." diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index e2cce14db3..93605ea78a 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -55,7 +55,7 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) var/skipcount = abs(error_cooldown[erroruid]) - 1 error_cooldown[erroruid] = 0 if(skipcount > 0) - world.log << "\[[time_stamp()]] Skipped [skipcount] runtimes in [E.file],[E.line]." + SEND_TEXT(world.log, "\[[time_stamp()]] Skipped [skipcount] runtimes in [E.file],[E.line].") GLOB.error_cache.log_error(E, skip_count = skipcount) error_last_seen[erroruid] = world.time @@ -92,9 +92,9 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) if(GLOB.error_cache) GLOB.error_cache.log_error(E, desclines) - world.log << "\[[time_stamp()]] Runtime in [E.file],[E.line]: [E]" + SEND_TEXT(world.log, "\[[time_stamp()]] Runtime in [E.file],[E.line]: [E]") for(var/line in desclines) - world.log << line + SEND_TEXT(world.log, line) /* This logs the runtime in the old format */ diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index 8f634003f5..1386995c28 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -70,7 +70,7 @@ if(!H.client || !istype(H)) return to_chat(H, "Honk...") - H << 'sound/spookoween/scary_clown_appear.ogg' + SEND_SOUND(H, sound('sound/spookoween/scary_clown_appear.ogg')) var/turf/T = get_turf(H) if(T) new /obj/effect/hallucination/simple/clown(T, H, 50) diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 888b87cc02..9658d8b144 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -68,11 +68,11 @@ /datum/round_event/portal_storm/announce() set waitfor = 0 - playsound_global('sound/magic/lightning_chargeup.ogg', repeat=0, channel=1, volume=100) + sound_to_playing_players('sound/magic/lightning_chargeup.ogg') sleep(80) priority_announce("Massive bluespace anomaly detected en route to [station_name()]. Brace for impact.") sleep(20) - playsound_global('sound/magic/lightningbolt.ogg', repeat=0, channel=1, volume=100) + sound_to_playing_players('sound/magic/lightningbolt.ogg') /datum/round_event/portal_storm/tick() spawn_effects() diff --git a/code/modules/events/wizard/fakeexplosion.dm b/code/modules/events/wizard/fakeexplosion.dm index f6ffab2da8..3dee4a1f49 100644 --- a/code/modules/events/wizard/fakeexplosion.dm +++ b/code/modules/events/wizard/fakeexplosion.dm @@ -6,6 +6,5 @@ earliest_start = 0 /datum/round_event/wizard/fake_explosion/start() - for(var/mob/M in GLOB.player_list) - M << 'sound/machines/alarm.ogg' + sound_to_playing_players('sound/machines/alarm.ogg') addtimer(CALLBACK(SSticker, /datum/controller/subsystem/ticker/.proc/station_explosion_cinematic, 1, "fake"), 100) //:o) \ No newline at end of file diff --git a/code/modules/events/wizard/imposter.dm b/code/modules/events/wizard/imposter.dm index ffec648771..1ba052c4c0 100644 --- a/code/modules/events/wizard/imposter.dm +++ b/code/modules/events/wizard/imposter.dm @@ -55,4 +55,4 @@ I.log_message("Is an imposter!", INDIVIDUAL_ATTACK_LOG) to_chat(I, "You are an imposter! Trick and confuse the crew to misdirect malice from your handsome original!") - I << sound('sound/effects/magic.ogg') + SEND_SOUND(I, sound('sound/effects/magic.ogg')) diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index 7b236ea56f..5e22e7bdc8 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -100,7 +100,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic sendClientData() //do not convert to to_chat() - owner << {"If you can see this, update byond."} + SEND_TEXT(owner, "If you can see this, update byond.") pingLoop() @@ -172,7 +172,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic /proc/icon2base64(icon/icon, iconKey = "misc") if (!isicon(icon)) return FALSE - GLOB.iconCache[iconKey] << icon + WRITE_FILE(GLOB.iconCache[iconKey], icon) var/iconData = GLOB.iconCache.ExportText(iconKey) var/list/partial = splittext(iconData, "{") return replacetext(copytext(partial[2], 3, -5), "\n", "") @@ -224,7 +224,6 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic //Ok so I did my best but I accept that some calls to this will be for shit like sound and images //It stands that we PROBABLY don't want to output those to the browser output so just handle them here if (istype(message, /image) || istype(message, /sound) || istype(target, /savefile)) - target << message CRASH("Invalid message! [message]") if(!istext(message)) @@ -255,7 +254,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic continue //Send it to the old style output window. - C << original_message + SEND_TEXT(C, original_message) if(!C.chatOutput || C.chatOutput.broken) // A player who hasn't updated his skin file. continue diff --git a/code/modules/goonchat/jsErrorHandler.dm b/code/modules/goonchat/jsErrorHandler.dm index 67ea5faca3..ce257ce660 100644 --- a/code/modules/goonchat/jsErrorHandler.dm +++ b/code/modules/goonchat/jsErrorHandler.dm @@ -32,7 +32,7 @@ CRASH("Debug Error Handling encountered an error! This is highly ironic! File: '[fileName]' has exceeded the filesize limit of: [src.logFileLimit] bytes") message = "\[[time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")]\] Client: \[[C && C.key ? C.key : "Unknown Client"]\] triggered: [message]" - logFile << message + WRITE_FILE(logFile, message) return 1 /datum/debugFileOutput/proc/clear(fileName) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 2ede4c360e..da769c23cb 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -351,7 +351,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp source.plane = old_plane to_chat(src, "(Click to re-enter)") if(sound) - src << sound(sound) + SEND_SOUND(src, sound(sound)) /mob/dead/observer/proc/dead_tele() set category = "Ghost" diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 86ea3d64e9..01626c5694 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -87,7 +87,7 @@ var/atom/xeno_loc = get_turf(owner) var/mob/living/carbon/alien/larva/new_xeno = new(xeno_loc) new_xeno.key = ghost.key - new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100) //To get the player's attention + SEND_SOUND(new_xeno, sound('sound/voice/hiss5.ogg',0,0,0,100)) //To get the player's attention new_xeno.canmove = 0 //so we don't move during the bursting animation new_xeno.notransform = 1 new_xeno.invisibility = INVISIBILITY_MAXIMUM diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 8bf10c39ba..dcc2655e9a 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -337,7 +337,7 @@ // you need earmuffs, inacusiate, or replacement else if(ears.ear_damage >= 5) to_chat(src, "Your ears start to ring!") - src << sound('sound/weapons/flash_ring.ogg',0,1,0,250) + SEND_SOUND(src, sound('sound/weapons/flash_ring.ogg',0,1,0,250)) return effect_amount //how soundbanged we are diff --git a/code/modules/mob/living/carbon/human/interactive.dm b/code/modules/mob/living/carbon/human/interactive.dm index e439f8ef9e..2ed81b9f88 100644 --- a/code/modules/mob/living/carbon/human/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive.dm @@ -97,7 +97,7 @@ if(voice_saved) return var/savefile/S = new /savefile("data/npc_saves/snpc.sav") - S["knownStrings"] << knownStrings + WRITE_FILE(S["knownStrings"], knownStrings) //botPool funcs /mob/living/carbon/human/interactive/proc/takeDelegate(mob/living/carbon/human/interactive/from,doReset=TRUE) diff --git a/code/modules/mob/living/carbon/monkey/punpun.dm b/code/modules/mob/living/carbon/monkey/punpun.dm index 901f2ceabc..b56028634f 100644 --- a/code/modules/mob/living/carbon/monkey/punpun.dm +++ b/code/modules/mob/living/carbon/monkey/punpun.dm @@ -51,23 +51,23 @@ /mob/living/carbon/monkey/punpun/proc/Write_Memory(dead, gibbed) var/savefile/S = new /savefile("data/npc_saves/Punpun.sav") if(gibbed) - S["ancestor_name"] << null - S["ancestor_chain"] << 1 - S["relic_hat"] << null - S["relic_mask"] << null + WRITE_FILE(S["ancestor_name"], null) + WRITE_FILE(S["ancestor_chain"], 1) + WRITE_FILE(S["relic_hat"], null) + WRITE_FILE(S["relic_mask"], null) return if(dead) - S["ancestor_name"] << ancestor_name - S["ancestor_chain"] << ancestor_chain + 1 + WRITE_FILE(S["ancestor_name"], ancestor_name) + WRITE_FILE(S["ancestor_chain"], ancestor_chain + 1) if(!ancestor_name) //new monkey name this round - S["ancestor_name"] << name + WRITE_FILE(S["ancestor_name"], name) if(head) - S["relic_hat"] << head.type + WRITE_FILE(S["relic_hat"], head.type) else - S["relic_hat"] << null + WRITE_FILE(S["relic_hat"], null) if(wear_mask) - S["relic_mask"] << wear_mask.type + WRITE_FILE(S["relic_mask"], wear_mask.type) else - S["relic_mask"] << null + WRITE_FILE(S["relic_mask"], null) if(!dead) memory_saved = 1 diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 0c693b4749..578eaec93e 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -316,7 +316,7 @@ GLOB.cult_narsie.souls += 1 if((GLOB.cult_narsie.souls == GLOB.cult_narsie.soul_goal) && (GLOB.cult_narsie.resolved == FALSE)) GLOB.cult_narsie.resolved = TRUE - world << sound('sound/machines/alarm.ogg') + sound_to_playing_players('sound/machines/alarm.ogg') addtimer(CALLBACK(GLOBAL_PROC, .proc/cult_ending_helper, 1), 120) addtimer(CALLBACK(GLOBAL_PROC, .proc/ending_helper), 270) if(client) diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index 2e800f7de0..f0e079b594 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -163,9 +163,9 @@ if(M.client && M.can_hear() && (M.client.prefs.toggles & SOUND_ANNOUNCEMENTS)) var/turf/T = get_turf(M) if(T.z == z_level) - M << voice + SEND_SOUND(M, voice) else - only_listener << voice + SEND_SOUND(only_listener, voice) return 1 return 0 diff --git a/code/modules/mob/living/silicon/pai/personality.dm b/code/modules/mob/living/silicon/pai/personality.dm index 869009f255..4b2bc45118 100644 --- a/code/modules/mob/living/silicon/pai/personality.dm +++ b/code/modules/mob/living/silicon/pai/personality.dm @@ -17,12 +17,12 @@ var/savefile/F = new /savefile(src.savefile_path(user)) - F["name"] << src.name - F["description"] << src.description - F["role"] << src.role - F["comments"] << src.comments + WRITE_FILE(F["name"], name) + WRITE_FILE(F["description"], description) + WRITE_FILE(F["role"], role) + WRITE_FILE(F["comments"], comments) - F["version"] << 1 + WRITE_FILE(F["version"], 1) return 1 diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index ef0b35cdc3..62e0fb8fdd 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -130,7 +130,7 @@ family[C.type] += 1 else family[C.type] = 1 - S["family"] << family + WRITE_FILE(S["family"], family) memory_saved = 1 /mob/living/simple_animal/pet/cat/Runtime/proc/Deploy_The_Cats() diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 54a06cb37f..eab0ed31de 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -344,14 +344,14 @@ /mob/living/simple_animal/pet/dog/corgi/Ian/proc/Write_Memory(dead) var/savefile/S = new /savefile("data/npc_saves/Ian.sav") if(!dead) - S["age"] << age + 1 + WRITE_FILE(S["age"], age + 1) if((age + 1) > record_age) - S["record_age"] << record_age + 1 + WRITE_FILE(S["record_age"], record_age + 1) if(inventory_head) - S["saved_head"] << inventory_head.type + WRITE_FILE(S["saved_head"], inventory_head.type) else - S["age"] << 0 - S["saved_head"] << null + WRITE_FILE(S["age"], 0) + WRITE_FILE(S["saved_head"], null) memory_saved = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 6cebdd9500..6b528651f4 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -283,7 +283,7 @@ Difficulty: Very Hard for(var/obj/O in (contents-component_parts)) stored_items += O.type - S["stored_items"] << stored_items + WRITE_FILE(S["stored_items"], stored_items) memory_saved = TRUE /obj/machinery/smartfridge/black_box/proc/ReadMemory() diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 86bbcfdc45..6be40e0d43 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -936,10 +936,10 @@ /mob/living/simple_animal/parrot/Poly/proc/Write_Memory() var/savefile/S = new /savefile("data/npc_saves/Poly.sav") if(islist(speech_buffer)) - S["phrases"] << speech_buffer - S["roundssurvived"] << rounds_survived - S["longestsurvival"] << longest_survival - S["longestdeathstreak"] << longest_deathstreak + WRITE_FILE(S["phrases"], speech_buffer) + WRITE_FILE(S["roundssurvived"], rounds_survived) + WRITE_FILE(S["longestsurvival"], longest_survival) + WRITE_FILE(S["longestdeathstreak"], longest_deathstreak) memory_saved = 1 /mob/living/simple_animal/parrot/Poly/ghost diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index a704c2e43f..1c795a51fe 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -384,7 +384,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp if(O.client) to_chat(O, "[message][(enter_link) ? " [enter_link]" : ""]") if(ghost_sound) - O << sound(ghost_sound) + SEND_SOUND(O, sound(ghost_sound)) if(flashwindow) window_flash(O.client) if(source) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index e36c639eb9..105727d21d 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -892,7 +892,7 @@ transfer_in_progress = TRUE user.visible_message("[user] slots [card] into [src]...", "Transfer process initiated. Sending request for AI approval...") playsound(src, 'sound/machines/click.ogg', 50, 1) - occupier << sound('sound/misc/notice2.ogg') //To alert the AI that someone's trying to card them if they're tabbed out + SEND_SOUND(occupier, sound('sound/misc/notice2.ogg')) //To alert the AI that someone's trying to card them if they're tabbed out if(alert(occupier, "[user] is attempting to transfer you to \a [card.name]. Do you consent to this?", "APC Transfer", "Yes - Transfer Me", "No - Keep Me Here") == "No - Keep Me Here") to_chat(user, "AI denied transfer request. Process terminated.") playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1) @@ -986,9 +986,6 @@ else main_status = 2 - //if(debug) - // world.log << "Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light] - Longterm: [longtermpower]" - if(cell && !shorted) // draw power from cell as before to power the area var/cellused = min(cell.charge, GLOB.CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index b0d07e88d5..f130e7be11 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -216,7 +216,6 @@ //remove the old powernet and replace it with a new one throughout the network. /proc/propagate_network(obj/O, datum/powernet/PN) - //world.log << "propagating new network" var/list/worklist = list() var/list/found_machines = list() var/index = 1 diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 90c33bb6b3..df969d869e 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -71,7 +71,7 @@ sleep(1150) if(resolved == FALSE) resolved = TRUE - world << sound('sound/machines/alarm.ogg') + sound_to_playing_players('sound/machines/alarm.ogg') addtimer(CALLBACK(GLOBAL_PROC, .proc/cult_ending_helper), 120) addtimer(CALLBACK(GLOBAL_PROC, .proc/ending_helper), 220) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 816cd97874..f635d8e227 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -219,7 +219,7 @@ var/turf/T = get_turf(src) for(var/mob/M in GLOB.mob_list) if(M.z == z) - M << 'sound/magic/charge.ogg' + SEND_SOUND(M, 'sound/magic/charge.ogg') to_chat(M, "You feel reality distort for a moment...") if(combined_gas > MOLE_PENALTY_THRESHOLD) investigate_log("has collapsed into a singularity.", INVESTIGATE_SUPERMATTER) @@ -457,7 +457,7 @@ visible_message("[src] is consumed by the singularity!") for(var/mob/M in GLOB.mob_list) if(M.z == z) - M << 'sound/effects/supermatter.ogg' //everyone goan know bout this + SEND_SOUND(M, 'sound/effects/supermatter.ogg') //everyone goan know bout this to_chat(M, "A horrible screeching fills your ears, and a wave of dread washes over you...") qdel(src) return gain diff --git a/code/modules/spells/spell_types/knock.dm b/code/modules/spells/spell_types/knock.dm index b68491d15d..bbb2b3877f 100644 --- a/code/modules/spells/spell_types/knock.dm +++ b/code/modules/spells/spell_types/knock.dm @@ -13,7 +13,7 @@ action_icon_state = "knock" /obj/effect/proc_holder/spell/aoe_turf/knock/cast(list/targets,mob/user = usr) - user << sound('sound/magic/knock.ogg') + SEND_SOUND(user, sound('sound/magic/knock.ogg')) for(var/turf/T in targets) for(var/obj/machinery/door/door in T.contents) INVOKE_ASYNC(src, .proc/open_door, door) diff --git a/code/modules/spells/spell_types/mind_transfer.dm b/code/modules/spells/spell_types/mind_transfer.dm index fafb8afde6..023af548d0 100644 --- a/code/modules/spells/spell_types/mind_transfer.dm +++ b/code/modules/spells/spell_types/mind_transfer.dm @@ -75,5 +75,5 @@ Also, you never added distance checking after target is selected. I've went ahea //Here we knock both mobs out for a time. caster.Unconscious(unconscious_amount_caster) victim.Unconscious(unconscious_amount_victim) - caster << sound('sound/magic/mandswap.ogg') - victim << sound('sound/magic/mandswap.ogg')// only the caster and victim hear the sounds, that way no one knows for sure if the swap happened + SEND_SOUND(caster, sound('sound/magic/mandswap.ogg')) + SEND_SOUND(victim, sound('sound/magic/mandswap.ogg'))// only the caster and victim hear the sounds, that way no one knows for sure if the swap happened diff --git a/code/modules/vehicles/bicycle.dm b/code/modules/vehicles/bicycle.dm index 2d9b3c8258..cd93196b69 100644 --- a/code/modules/vehicles/bicycle.dm +++ b/code/modules/vehicles/bicycle.dm @@ -13,7 +13,7 @@ /obj/vehicle/bicycle/buckle_mob(mob/living/M, force = 0, check_loc = 1) if(prob(easter_egg_chance) || (SSevents.holidays && SSevents.holidays[APRIL_FOOLS])) - M << sound(pick(bike_music), repeat = 1, wait = 0, volume = 80, channel = CHANNEL_BICYCLE) + SEND_SOUND(M, sound(pick(bike_music), repeat = 1, wait = 0, volume = 80, channel = CHANNEL_BICYCLE)) . = ..() /obj/vehicle/bicycle/unbuckle_mob(mob/living/buckled_mob,force = 0) From 514ebfe21b792a7628093b5aa7824814cb530150 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 8 Aug 2017 22:36:27 -0500 Subject: [PATCH 081/230] updates brain damage lines --- strings/brain_damage_lines.json | 13 +++++++------ strings/brain_damage_lines.json.rej | 10 ++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 strings/brain_damage_lines.json.rej diff --git a/strings/brain_damage_lines.json b/strings/brain_damage_lines.json index ce3e726dbc..e25af310c3 100644 --- a/strings/brain_damage_lines.json +++ b/strings/brain_damage_lines.json @@ -1,17 +1,17 @@ { "brain_damage": [ - "IM A PONY NEEEEEEIIIIIIIIIGH", + "@pick(semicolon)IM A PONY NEEEEEEIIIIIIIIIGH", "without oxigen blob don't evoluate?", - "CAPTAINS A COMDOM", - "@pick(faggot_traitor) @pick(george) @pick(mellens) is grifing me HALP!!!", + "@pick(semicolon)CAPTAINS A COMDOM", + "@pick(semicolon)@pick(faggot_traitor) @pick(george) @pick(mellens) is grifing me HALP!!!", "can u give me @pick(mutations)?", "THe saiyans screwed", "Bi is THE BEST OF BOTH WORLDS>", - "I WANNA PET TEH monkeyS", + "@pick(semicolon)I WANNA PET TEH monkeyS", "stop grifing me!!!!", "SOTP IT#", "shiggey diggey!!", - "A PIRATE APPEAR", + "@pick(semicolon)A PIRATE APPEAR", "FUS RO DAH", "fucking 4rries!", "stat me", @@ -136,7 +136,8 @@ "random_gibberish": [ "g", "squid", - "r" + "r", + "carbon dioxide" ], "y_replacements": [ diff --git a/strings/brain_damage_lines.json.rej b/strings/brain_damage_lines.json.rej new file mode 100644 index 0000000000..6d8e1cdb62 --- /dev/null +++ b/strings/brain_damage_lines.json.rej @@ -0,0 +1,10 @@ +diff a/strings/brain_damage_lines.json b/strings/brain_damage_lines.json (rejected hunks) +@@ -131,7 +131,7 @@ + "", + "IS TIS A BUG??", + "SI IST A BUGG/", +- "BUG!!!" ++ "BUG!!!" + ], + + "semicolon": [ From 04fcf872a53be3c4f47a639ac1c509a78f30659a Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 9 Aug 2017 02:19:26 -0500 Subject: [PATCH 082/230] Automatic changelog generation for PR #2298 [ci skip] --- html/changelogs/AutoChangeLog-pr-2298.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2298.yml diff --git a/html/changelogs/AutoChangeLog-pr-2298.yml b/html/changelogs/AutoChangeLog-pr-2298.yml new file mode 100644 index 0000000000..3d12cf9dee --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2298.yml @@ -0,0 +1,4 @@ +author: "ktccd" +delete-after: True +changes: + - bugfix: "Preys being digested now get their digestion message" From 33415e935b4ba5ada7de0d470917ef2cca6c4934 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 9 Aug 2017 02:19:38 -0500 Subject: [PATCH 083/230] Automatic changelog generation for PR #2299 [ci skip] --- html/changelogs/AutoChangeLog-pr-2299.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2299.yml diff --git a/html/changelogs/AutoChangeLog-pr-2299.yml b/html/changelogs/AutoChangeLog-pr-2299.yml new file mode 100644 index 0000000000..7f5e8730dc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2299.yml @@ -0,0 +1,4 @@ +author: "JStheguy" +delete-after: True +changes: + - imageadd: "Laptops now have actual sprites for using the supermatter monitoring instead of defaulting to a generic one." From fbfd9c438399289910545ebea91936d33749d1e9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 9 Aug 2017 02:19:57 -0500 Subject: [PATCH 084/230] Automatic changelog generation for PR #2301 [ci skip] --- html/changelogs/AutoChangeLog-pr-2301.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2301.yml diff --git a/html/changelogs/AutoChangeLog-pr-2301.yml b/html/changelogs/AutoChangeLog-pr-2301.yml new file mode 100644 index 0000000000..2924b5a5ad --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2301.yml @@ -0,0 +1,4 @@ +author: "LetterJay" +delete-after: True +changes: + - rscadd: "Adds bear ears and bear tails (Sprites courtesy of LizziePup)" From a353b16453f52b9fd245d20845f337b43faeb6b8 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 9 Aug 2017 02:20:53 -0500 Subject: [PATCH 085/230] Automatic changelog generation for PR #2305 [ci skip] --- html/changelogs/AutoChangeLog-pr-2305.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2305.yml diff --git a/html/changelogs/AutoChangeLog-pr-2305.yml b/html/changelogs/AutoChangeLog-pr-2305.yml new file mode 100644 index 0000000000..fbd7208358 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2305.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - imageadd: "Belligerent now has a visible indicator over the caster." From defbaf18dab5e91e1878f9a4f147b93c073a4852 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 9 Aug 2017 02:21:49 -0500 Subject: [PATCH 086/230] Automatic changelog generation for PR #2308 [ci skip] --- html/changelogs/AutoChangeLog-pr-2308.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2308.yml diff --git a/html/changelogs/AutoChangeLog-pr-2308.yml b/html/changelogs/AutoChangeLog-pr-2308.yml new file mode 100644 index 0000000000..1d367c4d84 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2308.yml @@ -0,0 +1,7 @@ +author: "ktccd" +delete-after: True +changes: + - rscadd: "Penises can now climax inside someone instead of only be used for masturbating. Use passive grab to be able to spill on the floor, aggressive or higher grab to not spill a drop." + - rscadd: "Hexacrocin and hexacamphor now adjusts your arousal up respectively down when overdosed. Hexacrocin overdoses can force orgasms at high arousal." + - bugfix: "Penises can now be used for masturbation without containers again." + - bugfix: "Citadel chems now sends you feedback messages properly when in effect." From fdaea528d0bcf1fee70ef18b4abf551e3914b188 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 9 Aug 2017 02:22:04 -0500 Subject: [PATCH 087/230] Automatic changelog generation for PR #2309 [ci skip] --- html/changelogs/AutoChangeLog-pr-2309.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2309.yml diff --git a/html/changelogs/AutoChangeLog-pr-2309.yml b/html/changelogs/AutoChangeLog-pr-2309.yml new file mode 100644 index 0000000000..89ceed6223 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2309.yml @@ -0,0 +1,4 @@ +author: "ktccd" +delete-after: True +changes: + - bugfix: "Cloner and other mind-transfer things now respect client arousal settings." From 943599c5f1cb2bf83913e1afe566a135b5ee138a Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 9 Aug 2017 03:05:47 -0500 Subject: [PATCH 088/230] Clock powerdrain now works on any device with a powercell --- .../clock_cult/clock_helpers/clock_powerdrain.dm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/code/game/gamemodes/clock_cult/clock_helpers/clock_powerdrain.dm b/code/game/gamemodes/clock_cult/clock_helpers/clock_powerdrain.dm index ef1099d3e0..9380e46487 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/clock_powerdrain.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/clock_powerdrain.dm @@ -1,5 +1,14 @@ //horrifying power drain proc made for clockcult's power drain in lieu of six istypes or six for(x in view) loops /atom/movable/proc/power_drain(clockcult_user) + var/obj/item/weapon/stock_parts/cell/cell = get_cell() + if(cell) + return cell.power_drain(clockcult_user) + return 0 + +/obj/item/weapon/melee/baton/power_drain(clockcult_user) //balance memes + return 0 + +/obj/item/weapon/gun/power_drain(clockcult_user) //balance memes return 0 /obj/machinery/power/apc/power_drain(clockcult_user) From 0b516b57590a5b8e32ca4a7b17bfd1351c7a957d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 9 Aug 2017 03:24:08 -0500 Subject: [PATCH 089/230] Makes [WIP] and [DNM] case insensitive for autotagging --- tools/github_webhook_processor.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/github_webhook_processor.php b/tools/github_webhook_processor.php index d73970f04b..4ccdafa3f3 100644 --- a/tools/github_webhook_processor.php +++ b/tools/github_webhook_processor.php @@ -162,10 +162,10 @@ function tag_pr($payload, $opened) { $tags[] = $tag; //only maintners should be able to remove these - if(strpos($title, '[DNM]') !== FALSE) + if(strpos($lowertitle, '[dnm]') !== FALSE) $tags[] = 'Do Not Merge'; - if(strpos($title, '[WIP]') !== FALSE) + if(strpos($lowertitle, '[wip]') !== FALSE) $tags[] = 'Work In Progress'; $url = $payload['pull_request']['base']['repo']['url'] . '/issues/' . $payload['pull_request']['number'] . '/labels'; From 83c546f1430f59c585ac9d818a047d52e0f29a29 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 9 Aug 2017 03:26:14 -0500 Subject: [PATCH 090/230] Fixes swarmer shells having no ghost notifications --- code/game/gamemodes/miniantags/bot_swarm/swarmer.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 502b02c7f7..68ed9abd35 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -29,6 +29,12 @@ 3. Biological resources will be harvested at a later date; do not harm them. "} +/obj/effect/mob_spawn/swarmer/Initialize() + . = ..() + var/area/A = get_area(src) + if(A) + notify_ghosts("A swarmer shell has been created in [A.name].", 'sound/effects/bin_close.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) + /obj/effect/mob_spawn/swarmer/attack_hand(mob/living/user) to_chat(user, "Picking up the swarmer may cause it to activate. You should be careful about this.") From 805aa06807fcf20efd2896ef9e97615a50eb3978 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Wed, 9 Aug 2017 11:23:09 -0500 Subject: [PATCH 091/230] adds bear tails/ears to humans as well --- .../new_player/sprite_accessories_Citadel.dm | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm index 8e724f1aa5..55572d8187 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm @@ -31,6 +31,16 @@ color_src = 0 icon = 'icons/mob/mam_bodyparts.dmi' +/datum/sprite_accessory/mam_tails/human/bear + name = "Bear" + icon_state = "bear" + icon = 'icons/mob/mam_bodyparts.dmi' + +/datum/sprite_accessory/mam_ears/human/bear + name = "Bear" + icon_state = "bear" + icon = 'icons/mob/mam_bodyparts.dmi' + /datum/sprite_accessory/tails/human/catbig name = "Cat, Big" icon_state = "catbig" @@ -234,16 +244,9 @@ extra = 1 extra_color_src = MUTCOLORS2 -/datum/sprite_accessory/mam_ears/catbig - name = "Cat, Big" - icon_state = "cat" - hasinner = 1 - icon = 'icons/mob/mutant_bodyparts.dmi' - /datum/sprite_accessory/mam_tails/bear name = "Bear" icon_state = "bear" - extra_color_src = MUTCOLORS2 icon = 'icons/mob/mam_bodyparts.dmi' /datum/sprite_accessory/mam_ears/bear @@ -251,6 +254,12 @@ icon_state = "bear" icon = 'icons/mob/mam_bodyparts.dmi' +/datum/sprite_accessory/mam_ears/catbig + name = "Cat, Big" + icon_state = "cat" + hasinner = 1 + icon = 'icons/mob/mutant_bodyparts.dmi' + /datum/sprite_accessory/mam_tails/catbig name = "Cat, Big" icon_state = "catbig" From 014487c808cefbac2164bcb450ac741333e20c65 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 9 Aug 2017 11:25:04 -0500 Subject: [PATCH 092/230] Automatic changelog generation for PR #2319 [ci skip] --- html/changelogs/AutoChangeLog-pr-2319.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2319.yml diff --git a/html/changelogs/AutoChangeLog-pr-2319.yml b/html/changelogs/AutoChangeLog-pr-2319.yml new file mode 100644 index 0000000000..4ca8998875 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2319.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - bugfix: "Swarmer shells now have ghost notifications again." From cad81a26e25599ac296388bb73c4c6038e51b188 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 10 Aug 2017 06:13:49 -0500 Subject: [PATCH 093/230] Automatic changelog generation for PR #2320 [ci skip] --- html/changelogs/AutoChangeLog-pr-2320.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2320.yml diff --git a/html/changelogs/AutoChangeLog-pr-2320.yml b/html/changelogs/AutoChangeLog-pr-2320.yml new file mode 100644 index 0000000000..695f23e7de --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2320.yml @@ -0,0 +1,4 @@ +author: "LetterJay" +delete-after: True +changes: + - tweak: "Adds the option for bear ears and tails for humans as well." From f6da0f89c3f6d2288048f40f7c8f915d966a3098 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 10 Aug 2017 08:09:25 -0500 Subject: [PATCH 094/230] decapitalizes flyswatter in weaponry.dm --- code/game/objects/items/weapons/weaponry.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index ee6b2ea2c2..b49dc1c510 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -540,7 +540,7 @@ return 1 /obj/item/weapon/melee/flyswatter - name = "Flyswatter" + name = "flyswatter" desc = "Useful for killing insects of all sizes." icon = 'icons/obj/weapons.dmi' icon_state = "flyswatter" From bd8289b29f588948524b3745136620d099408bf2 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 10 Aug 2017 10:49:22 -0500 Subject: [PATCH 095/230] Massively improves downloading/viewing logs. --- code/modules/admin/verbs/getlogs.dm | 32 ++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/code/modules/admin/verbs/getlogs.dm b/code/modules/admin/verbs/getlogs.dm index fe3fe61b3f..9f08eb5e0e 100644 --- a/code/modules/admin/verbs/getlogs.dm +++ b/code/modules/admin/verbs/getlogs.dm @@ -13,7 +13,17 @@ return message_admins("[key_name_admin(src)] accessed file: [path]") - src << ftp(file(path)) + //this is copypasta because making it a proc would mean locking out adminproccalls, + // and that system is buggy enough with false positives that I don't want to risk locking admins out of legit calls. + switch(alert("View (in game), Open (in your system's text editor), or Download file [path]?", "Log File Opening", "View", "Open", "Download")) + if ("View") + src << browse("

    [html_encode(file2text(file(path)))]
    ", list2params(list("window" = "viewfile.[path]"))) + if ("Open") + src << run(file(path)) + if ("Download") + src << ftp(file(path)) + else + return to_chat(src, "Attempting to send file, this may take a fair few minutes if the file is very large.") return @@ -27,7 +37,15 @@ set desc = "Shows server log for this round." if(fexists("[GLOB.world_game_log]")) - src << ftp(GLOB.world_game_log) + switch(alert("View (in game), Open (in your system's text editor), or Download file [GLOB.world_game_log]?", "Log File Opening", "View", "Open", "Download")) + if ("View") + src << browse("
    [html_encode(file2text(GLOB.world_game_log))]
    ", list2params(list("window" = "viewfile.[GLOB.world_game_log]"))) + if ("Open") + src << run(GLOB.world_game_log) + if ("Download") + src << ftp(GLOB.world_game_log) + else + return else to_chat(src, "Server log not found, try using .getserverlog.") return @@ -41,7 +59,15 @@ set desc = "Shows server attack log for this round." if(fexists("[GLOB.world_attack_log]")) - src << ftp(GLOB.world_attack_log) + switch(alert("View (in game), Open (in your system's text editor), or Download file [GLOB.world_attack_log]?", "Log File Opening", "View", "Open", "Download")) + if ("View") + src << browse("
    [html_encode(file2text(GLOB.world_attack_log))]
    ", list2params(list("window" = "viewfile.[GLOB.world_attack_log]"))) + if ("Open") + src << run(GLOB.world_attack_log) + if ("Download") + src << ftp(GLOB.world_attack_log) + else + return else to_chat(src, "Server attack log not found, try using .getserverlog.") return From 4686340d3caaed764abcc748fd2db8da7037d739 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 11 Aug 2017 02:47:05 -0500 Subject: [PATCH 096/230] Fixes help text for embedded objects --- code/_onclick/hud/alert.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index b944f32754..e1f1410837 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -205,7 +205,7 @@ or something covering your eyes." /obj/screen/alert/embeddedobject name = "Embedded Object" desc = "Something got lodged into your flesh and is causing major bleeding. It might fall out with time, but surgery is the safest way. \ -If you're feeling frisky, click yourself in help intent to pull the object out." +If you're feeling frisky, examine yourself and click the underlined item to pull the object out." icon_state = "embeddedobject" /obj/screen/alert/embeddedobject/Click() From fa19568a06d6260f91bdc49d7d50d1f9e440b2d9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 11 Aug 2017 02:49:11 -0500 Subject: [PATCH 097/230] Ports weapons to Initialize() --- code/game/objects/weapons.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm index 0598d88a59..69c6c89870 100644 --- a/code/game/objects/weapons.dm +++ b/code/game/objects/weapons.dm @@ -2,8 +2,8 @@ name = "weapon" icon = 'icons/obj/weapons.dmi' -/obj/item/weapon/New() - ..() +/obj/item/weapon/Initialize() + . = ..() if(!hitsound) if(damtype == "fire") hitsound = 'sound/items/welder.ogg' From dab46b002c030ea273c714ac69bd3095ffb4c967 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 11 Aug 2017 02:50:20 -0500 Subject: [PATCH 098/230] Ports weaponry to Initialize --- code/game/objects/items/weapons/weaponry.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index ee6b2ea2c2..10449b394e 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -77,8 +77,8 @@ var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE var/obj/item/weapon/disk/nuclear/nuke_disk //OUR STORED NUKE DISK -/obj/item/weapon/claymore/highlander/New() - ..() +/obj/item/weapon/claymore/highlander/Initialize() + . = ..() START_PROCESSING(SSobj, src) /obj/item/weapon/claymore/highlander/Destroy() @@ -555,8 +555,8 @@ //Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc. var/list/strong_against -/obj/item/weapon/melee/flyswatter/New() - ..() +/obj/item/weapon/melee/flyswatter/Initialize() + . = ..() strong_against = typecacheof(list( /mob/living/simple_animal/hostile/poison/bees/, /mob/living/simple_animal/butterfly, From 6c6d8e5193d7abacfaa035044e1e66f4740b3733 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 11 Aug 2017 02:52:25 -0500 Subject: [PATCH 099/230] Fixes cable cuff inhand --- code/game/objects/items/weapons/handcuffs.dm | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 802c2d499a..40fa7d2520 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -90,8 +90,8 @@ desc = "Looks like some cables tied together. Could be used to tie something up." icon_state = "cuff_red" item_state = "coil_red" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' + lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' materials = list(MAT_METAL=150, MAT_GLASS=75) origin_tech = "engineering=2" breakouttime = 300 //Deciseconds = 30s @@ -145,9 +145,7 @@ /obj/item/weapon/restraints/handcuffs/cable/white icon_state = "cuff_white" - item_state = "cuff_white" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + item_state = "coil_white" /obj/item/weapon/restraints/handcuffs/alien icon_state = "handcuffAlien" @@ -212,7 +210,6 @@ name = "zipties" desc = "Plastic, disposable zipties that can be used to restrain temporarily but are destroyed after use." icon_state = "cuff_white" - item_state = "cuff_white" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' materials = list() @@ -222,6 +219,7 @@ /obj/item/weapon/restraints/handcuffs/cable/zipties/used desc = "A pair of broken zipties." icon_state = "cuff_white_used" + item_state = "cuff_white" /obj/item/weapon/restraints/handcuffs/cable/zipties/used/attack() return From 62a7d4301f3bffdedffb2ca1eea0ef54ed8616e7 Mon Sep 17 00:00:00 2001 From: ktccd Date: Fri, 11 Aug 2017 20:13:01 +0200 Subject: [PATCH 100/230] Refactored flavortext. Flavortext is now stored in DNA features and can thus be stolen by changelings and restored by cloners/pods/etc. Also added genitals_use_skintone to the random features proc, 'cause it was missing (my bad, I was even newer at messing with DNA back then :S). --- code/__HELPERS/mobs.dm | 6 ++++-- code/datums/dna.dm | 2 ++ code/modules/client/preferences.dm | 20 ++++++++++---------- code/modules/client/preferences_savefile.dm | 15 ++++++++++----- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 7c6746f477..924f8daf08 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -116,6 +116,7 @@ "xenohead" = "None", "xenotail" = "None", "exhibitionist" = FALSE, + "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = pick(GLOB.cock_shapes_list), "cock_length" = 6, @@ -158,8 +159,9 @@ "womb_cum_rate" = CUM_RATE, "womb_cum_mult" = CUM_RATE_MULT, "womb_efficiency" = CUM_EFFICIENCY, - "womb_fluid" = "femcum")) - + "womb_fluid" = "femcum", + "flavor_text" = "")) + /proc/random_hair_style(gender) switch(gender) if(MALE) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 550ea590bf..4bacf2d9e8 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -32,6 +32,7 @@ if(ishuman(destination)) var/mob/living/carbon/human/H = destination H.give_genitals(TRUE)//This gives the body the genitals of this DNA. Used for any transformations based on DNA + destination.flavor_text = destination.dna.features["flavor_text"] //Update the flavor_text to use new dna text /datum/dna/proc/copy_dna(datum/dna/new_dna) new_dna.unique_enzymes = unique_enzymes @@ -231,6 +232,7 @@ if(newfeatures) dna.features = newfeatures + flavor_text = dna.features["flavor_text"] //Update the flavor_text to use new dna text if(mrace) set_species(mrace, icon_update=0) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 1e07ee4ce0..4c23db3f86 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -130,7 +130,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) "womb_cum_rate" = CUM_RATE, "womb_cum_mult" = CUM_RATE_MULT, "womb_efficiency" = CUM_EFFICIENCY, - "womb_fluid" = "femcum" + "womb_fluid" = "femcum", + "flavor_text" = "" )//MAKE SURE TO UPDATE THE LIST IN MOBS.DM IF YOU'RE GOING TO ADD TO THIS LIST, OTHERWISE THINGS MIGHT GET FUCKEY var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity") @@ -175,7 +176,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) //citadel code var/arousable = TRUE //Allows players to disable arousal from the character creation menu - var/flavor_text = "" /datum/preferences/New(client/C) parent = C @@ -394,13 +394,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
    " dat += "

    " dat += "Set Flavor Text
    " - if(lentext(flavor_text) <= 40) - if(!lentext(flavor_text)) + if(lentext(features["flavor_text"]) <= 40) + if(!lentext(features["flavor_text"])) dat += "\[...\]" else - dat += "[flavor_text]" + dat += "[features["flavor_text"]]" else - dat += "[TextPreview(flavor_text)]...
    " + dat += "[TextPreview(features["flavor_text"])]...
    " if(config.mutant_races)//really don't need this check, but fuck un-tabbing all those lines dat += "

    Body

    " dat += "Gender: [gender == MALE ? "Male" : "Female"]
    " @@ -916,11 +916,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN) if("flavor_text") - var/msg = input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(flavor_text)) as message + var/msg = input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(features["flavor_text"])) as message if(msg != null) msg = copytext(msg, 1, MAX_MESSAGE_LEN) msg = html_encode(msg) - flavor_text = msg + features["flavor_text"] = msg if("metadata") var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , metadata) as message|null @@ -1628,7 +1628,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.backbag = backbag - character.dna.features = features.Copy() + character.dna.features = features.Copy() //Flavor text is now a DNA feature character.dna.real_name = character.real_name var/datum/species/chosen_species if(pref_species != /datum/species/human && config.mutant_races) @@ -1639,7 +1639,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) //citadel code character.give_genitals() - character.flavor_text = flavor_text + character.flavor_text = features["flavor_text"] //Let's update their flavor_text at least initially character.canbearoused = arousable if(icon_updates) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index c52767f1d9..a4b57422c7 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -342,9 +342,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["job_engsec_med"] >> job_engsec_med S["job_engsec_low"] >> job_engsec_low - //Citadel code - S["flavor_text"] >> flavor_text S["feature_exhibitionist"] >> features["exhibitionist"] S["feature_mcolor2"] >> features["mcolor2"] S["feature_mcolor3"] >> features["mcolor3"] @@ -382,6 +380,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_vag_color"] >> features["vag_color"] //womb features S["feature_has_womb"] >> features["has_womb"] + //flavor text + //Let's make our players NOT cry desperately as we wipe their savefiles of their special snowflake texts: + if((S["feature_flavor_text"] == "") && (S["flavor_text"] != "")) //If we got no new flavor_text data, but we have old + S["flavor_text"] >> features["flavor_text"] + else //Otherwise use new flavor_text data always + S["feature_flavor_text"] >> features["flavor_text"] + //try to fix any outdated data if necessary if(needs_update >= 0) @@ -441,7 +446,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car job_engsec_low = sanitize_integer(job_engsec_low, 0, 65535, initial(job_engsec_low)) //Citadel - flavor_text = sanitize_text(flavor_text, initial(flavor_text)) + features["flavor_text"] = sanitize_text(features["flavor_text"], initial(features["flavor_text"])) if(!features["mcolor2"] || features["mcolor"] == "#000") features["mcolor2"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F") if(!features["mcolor3"] || features["mcolor"] == "#000") @@ -510,7 +515,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["job_engsec_low"] << job_engsec_low //Citadel - S["flavor_text"] << flavor_text S["feature_exhibitionist"] << features["exhibitionist"] S["feature_mcolor2"] << features["mcolor2"] S["feature_mcolor3"] << features["mcolor3"] @@ -548,7 +552,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_vag_color"] << features["vag_color"] //womb features S["feature_has_womb"] << features["has_womb"] - + //flavor text + S["feature_flavor_text"] << features["flavor_text"] return 1 #undef SAVEFILE_VERSION_MAX From 9ef1825ee01e28057dfc8a88c13f9b43e4416dcb Mon Sep 17 00:00:00 2001 From: ktccd Date: Fri, 11 Aug 2017 21:29:01 +0200 Subject: [PATCH 101/230] Adds Taur cocks (#2329) * Added flared taur penises FIRST STEP ONLY DO NOT PULL REQUEST THIS!!!! The files are still messy and the penis is just another shape to choose from right now for testing purposes! Flipped the order of GENITALS_BEHIND_LAYER and BODY_BEHIND_LAYER, as taurs need to be drawn on top of the genitalia, and I don't think anything else uses this that would need genitals drawn on top of them. * Adds More shapes Adds Tapered and Knotted shapes to the Taur cocks. * Fixes on-ground sprites The OLD bug barbed knotted cocks being invisible when not inside a body is fixed. This fix solves why taur cocks were invisible when cut off or gibbed the body. This also removes the lowershape() workaround that was being used. I'll get around a bigger refactor of other genitalia in another PR, as the scope of this was just to add taur cocks to begin with... --- code/__DEFINES/misc.dm | 4 +-- code/__HELPERS/global_lists.dm | 5 ++++ code/citadel/_cit_helpers.dm | 1 + code/citadel/icons/taur_penis_onmob.dmi | Bin 0 -> 704 bytes code/citadel/organs/genitals.dm | 2 ++ .../organs/genitals_sprite_accessories.dm | 27 ++++++++++++++++++ code/citadel/organs/penis.dm | 2 +- icons/mob/mam_taur.dmi | Bin 38211 -> 38242 bytes 8 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 code/citadel/icons/taur_penis_onmob.dmi diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index e0ab84f832..6a932ead4a 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -46,8 +46,8 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s //Human Overlays Indexes///////// //citadel code #define MUTATIONS_LAYER 30 //mutations. Tk headglows, cold resistance glow, etc -#define BODY_BEHIND_LAYER 29 //certain mutantrace features (tail when looking south) that must appear behind the body parts -#define GENITALS_BEHIND_LAYER 28 +#define GENITALS_BEHIND_LAYER 29 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer +#define BODY_BEHIND_LAYER 28 //certain mutantrace features (tail when looking south) that must appear behind the body parts #define BODYPARTS_LAYER 27 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag #define BODY_ADJ_LAYER 26 //certain mutantrace features (snout, body markings) that must appear above the body parts #define GENITALS_ADJ_LAYER 25 diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 92d5dcbd80..1af231f893 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -48,6 +48,11 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_dorsal, GLOB.xeno_dorsal_list) //genitals init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list) + + for(var/K in GLOB.cock_shapes_list) + var/datum/sprite_accessory/penis/value = GLOB.cock_shapes_list[K] + GLOB.cock_shapes_icons[K] = value.icon_state + init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list) GLOB.breasts_size_list = list("a","b","c","d","e") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing. diff --git a/code/citadel/_cit_helpers.dm b/code/citadel/_cit_helpers.dm index db0626fa9c..e6dca1e369 100644 --- a/code/citadel/_cit_helpers.dm +++ b/code/citadel/_cit_helpers.dm @@ -53,6 +53,7 @@ GLOBAL_LIST_EMPTY(xeno_dorsal_list) //Genitals and Arousal Lists GLOBAL_LIST_EMPTY(cock_shapes_list)//global_lists.dm for the list initializations //Now also _DATASTRUCTURES globals.dm +GLOBAL_LIST_EMPTY(cock_shapes_icons) //Associated list for names->icon_states for cockshapes. GLOBAL_LIST_EMPTY(breasts_size_list) GLOBAL_LIST_EMPTY(breasts_shapes_list) GLOBAL_LIST_EMPTY(vagina_shapes_list) diff --git a/code/citadel/icons/taur_penis_onmob.dmi b/code/citadel/icons/taur_penis_onmob.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3debbd0047228c869a639a16566445d46fcbf113 GIT binary patch literal 704 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 T_dQyN4s%J@Q0LQmtKk0trQcyJ delta 22519 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 From 2102e0526a5e343a6ed19898733f337693d8c99d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 11 Aug 2017 14:29:03 -0500 Subject: [PATCH 102/230] Automatic changelog generation for PR #2329 [ci skip] --- html/changelogs/AutoChangeLog-pr-2329.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2329.yml diff --git a/html/changelogs/AutoChangeLog-pr-2329.yml b/html/changelogs/AutoChangeLog-pr-2329.yml new file mode 100644 index 0000000000..2950b70fbb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2329.yml @@ -0,0 +1,6 @@ +author: "ktccd" +delete-after: True +changes: + - rscadd: "Adds flared, knotted or tapered dicks for Taur bodies." + - tweak: "Resized the cow-taur's over-extended belly to match the profile picture, no longer completely blocking the taur penises." + - bugfix: "Barbed, knotted penises and other such long-named cocks are now visible on the ground if dismembered." From 84076d7bb954f0b9d678676b8ef87a942fb7338d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 11 Aug 2017 14:29:51 -0500 Subject: [PATCH 103/230] intialize() supermatter sword (#2332) --- code/game/objects/items/weapons/melee/misc.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 2ded74b536..5d32856bc9 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -209,8 +209,8 @@ origin_tech = "combat=7;materials=6" force_string = "INFINITE" -/obj/item/weapon/melee/supermatter_sword/New() - ..() +/obj/item/weapon/melee/supermatter_sword/Initialize() + . = ..() shard = new /obj/machinery/power/supermatter_shard(src) qdel(shard.countdown) shard.countdown = null From 12d4c7ade0017ce2728a42932245820407b882c5 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 11 Aug 2017 14:52:55 -0500 Subject: [PATCH 104/230] gorilla sprites --- icons/mob/animal.dmi | Bin 164136 -> 166678 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 3ed8c153d8cd046e583ac8837b83b4005a2309c7..42226c7d2bd70df6742d8ea912af4124c6c9b73a 100644 GIT binary patch delta 17611 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

    4pkFLYEKk4U0xEi6)!HaJmU=ooex7CO35y2{ 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 C=~`(3 From fca1df9a2bd67815eca77496ae93e1ddb6b03d54 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 11 Aug 2017 14:54:00 -0500 Subject: [PATCH 105/230] Fixes bad dirs --- code/game/machinery/shieldgen.dm.rej | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 code/game/machinery/shieldgen.dm.rej diff --git a/code/game/machinery/shieldgen.dm.rej b/code/game/machinery/shieldgen.dm.rej new file mode 100644 index 0000000000..12ce2d21dc --- /dev/null +++ b/code/game/machinery/shieldgen.dm.rej @@ -0,0 +1,10 @@ +diff a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm (rejected hunks) +@@ -12,7 +12,7 @@ + + /obj/structure/emergency_shield/Initialize() + . = ..() +- setDir(pick(1,2,3,4)) ++ setDir(pick(GLOB.cardinals)) + air_update_turf(1) + + /obj/structure/emergency_shield/Destroy() From d7ac827ea6fe8d00201dc8ead72cc11a871b9b02 Mon Sep 17 00:00:00 2001 From: ktccd Date: Fri, 11 Aug 2017 21:59:35 +0200 Subject: [PATCH 106/230] Testing Transition code, DO NOT MERGE YET!! As it says, do not merge until I confirm that it works. --- code/modules/client/preferences_savefile.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index a4b57422c7..1240fa7fe3 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -382,9 +382,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_has_womb"] >> features["has_womb"] //flavor text //Let's make our players NOT cry desperately as we wipe their savefiles of their special snowflake texts: - if((S["feature_flavor_text"] == "") && (S["flavor_text"] != "")) //If we got no new flavor_text data, but we have old - S["flavor_text"] >> features["flavor_text"] - else //Otherwise use new flavor_text data always + if(S["flavor_text"] != "" || S["flavor_text"] != null) + S["flavor_text"] >> features["flavor_text"] //Load old flavortext as current dna-based flavortext + S["flavor_text"] >> S["feature_flavor_text"] //Save it in our new type of flavor-text + null >> S["flavor_text"] //Remove old flavortext, completing the cut-and-paste into the new format. + else //We have no old flavortext, default to new S["feature_flavor_text"] >> features["flavor_text"] From 582a106d8e936875efb6db628c419ce514976151 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 11 Aug 2017 15:09:24 -0500 Subject: [PATCH 107/230] His Grace now shows up on the orbit list --- code/game/objects/items/weapons/his_grace.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/his_grace.dm b/code/game/objects/items/weapons/his_grace.dm index c43e1600b6..5b57fab800 100644 --- a/code/game/objects/items/weapons/his_grace.dm +++ b/code/game/objects/items/weapons/his_grace.dm @@ -20,12 +20,14 @@ var/prev_bloodthirst = HIS_GRACE_SATIATED var/force_bonus = 0 -/obj/item/weapon/his_grace/New() - ..() +/obj/item/weapon/his_grace/Initialize() + . = ..() START_PROCESSING(SSprocessing, src) + GLOB.poi_list += src /obj/item/weapon/his_grace/Destroy() STOP_PROCESSING(SSprocessing, src) + GLOB.poi_list -= src for(var/mob/living/L in src) L.forceMove(get_turf(src)) return ..() From 1b2f2120ec26f66825393d14c9f0bc3ec1fbf72c Mon Sep 17 00:00:00 2001 From: ktccd Date: Fri, 11 Aug 2017 23:10:05 +0200 Subject: [PATCH 108/230] DO NOT MERGE - Fixes random resetting of file I did a bad with the direction of >> and <<. My bad. Fixed now, I will test FURTHER to confirm that old files are not deleted or ruined. --- code/modules/client/preferences_savefile.dm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 1240fa7fe3..60fd905df3 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -382,11 +382,15 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_has_womb"] >> features["has_womb"] //flavor text //Let's make our players NOT cry desperately as we wipe their savefiles of their special snowflake texts: - if(S["flavor_text"] != "" || S["flavor_text"] != null) + if((S["flavor_text"] != "") && (S["flavor_text"] != null) && S["flavor_text"]) //If old text isn't null and isn't "" but still exists. + to_chat(world, "DEBUG: OLD TEXT FOUND, MOVING:[S["flavor_text"]]") S["flavor_text"] >> features["flavor_text"] //Load old flavortext as current dna-based flavortext - S["flavor_text"] >> S["feature_flavor_text"] //Save it in our new type of flavor-text - null >> S["flavor_text"] //Remove old flavortext, completing the cut-and-paste into the new format. + + S["feature_flavor_text"] << features["flavor_text"] //Save it in our new type of flavor-text + S["flavor_text"] << "" //Remove old flavortext, completing the cut-and-paste into the new format. + else //We have no old flavortext, default to new + to_chat(world, "DEBUG: No old text found.") S["feature_flavor_text"] >> features["flavor_text"] From 4188db53a5c081f496b539f0d20a6f1149d25020 Mon Sep 17 00:00:00 2001 From: ktccd Date: Fri, 11 Aug 2017 23:48:46 +0200 Subject: [PATCH 109/230] Flavortext transition finished Now properly moves OLD flavortext to the new format and then removes the old format. If no old format is found, it defaults to loading the new format. Flavortext is now stored in your DNA, and is loaded into your characters flavor_text variable upon creating the character or messing with the DNA. This allows cloners/pods/changelings to use the correct flavortext. --- code/modules/client/preferences_savefile.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 60fd905df3..f846f52625 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -383,14 +383,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //flavor text //Let's make our players NOT cry desperately as we wipe their savefiles of their special snowflake texts: if((S["flavor_text"] != "") && (S["flavor_text"] != null) && S["flavor_text"]) //If old text isn't null and isn't "" but still exists. - to_chat(world, "DEBUG: OLD TEXT FOUND, MOVING:[S["flavor_text"]]") S["flavor_text"] >> features["flavor_text"] //Load old flavortext as current dna-based flavortext S["feature_flavor_text"] << features["flavor_text"] //Save it in our new type of flavor-text S["flavor_text"] << "" //Remove old flavortext, completing the cut-and-paste into the new format. else //We have no old flavortext, default to new - to_chat(world, "DEBUG: No old text found.") S["feature_flavor_text"] >> features["flavor_text"] From 5a7126a0ddde8f0a7a10d5c3ea6cd4d2382edc96 Mon Sep 17 00:00:00 2001 From: Poojawa Date: Sat, 12 Aug 2017 01:15:42 -0500 Subject: [PATCH 110/230] Panic Bunker for moderator/trialmin access --- code/modules/admin/admin_verbs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 68e5430a09..a839b35b3c 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -17,6 +17,7 @@ GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault()) /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/ /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ /client/proc/cmd_admin_ticket_panel, + /client/proc/panicbunker, /client/proc/stop_sounds ) GLOBAL_PROTECT(admin_verbs_admin) @@ -114,7 +115,6 @@ GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer()) /client/proc/toggle_random_events, /client/proc/forcerandomrotate, /client/proc/adminchangemap, - /client/proc/panicbunker, /client/proc/toggle_hub ) GLOBAL_PROTECT(admin_verbs_debug) From 7addb0207b63c6bfc5906afd79092cb56338c120 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 12 Aug 2017 04:42:44 -0500 Subject: [PATCH 111/230] Fix travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index c0a45df72d..ba11b40c97 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ language: generic sudo: false +dist: precise env: global: From 73426d56ea6a5331fa75c26cbe20990e5911fb42 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 12 Aug 2017 06:31:50 -0500 Subject: [PATCH 112/230] file path fix --- .../modules/mob/dead/new_player/sprite_accessories_Citadel.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm index 55572d8187..9808923e33 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm @@ -31,12 +31,12 @@ color_src = 0 icon = 'icons/mob/mam_bodyparts.dmi' -/datum/sprite_accessory/mam_tails/human/bear +/datum/sprite_accessory/tails/human/bear name = "Bear" icon_state = "bear" icon = 'icons/mob/mam_bodyparts.dmi' -/datum/sprite_accessory/mam_ears/human/bear +/datum/sprite_accessory/ears/human/bear name = "Bear" icon_state = "bear" icon = 'icons/mob/mam_bodyparts.dmi' From 74636ffeb088c59a97e7afa0bcc5defc9fa2a3f7 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 12 Aug 2017 06:33:46 -0500 Subject: [PATCH 113/230] Automatic changelog generation for PR #2295 [ci skip] --- html/changelogs/AutoChangeLog-pr-2295.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2295.yml diff --git a/html/changelogs/AutoChangeLog-pr-2295.yml b/html/changelogs/AutoChangeLog-pr-2295.yml new file mode 100644 index 0000000000..c34d19ac6f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2295.yml @@ -0,0 +1,4 @@ +author: "More Robust Than You" +delete-after: True +changes: + - tweak: "Mulligan and non-continuous completion checks will not consider afk/logged out people to be \"living crew\"." From 4298f6539d88007e634baa384157a3b6f44d82cc Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 12 Aug 2017 06:35:46 -0500 Subject: [PATCH 114/230] Automatic changelog generation for PR #2335 [ci skip] --- html/changelogs/AutoChangeLog-pr-2335.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2335.yml diff --git a/html/changelogs/AutoChangeLog-pr-2335.yml b/html/changelogs/AutoChangeLog-pr-2335.yml new file mode 100644 index 0000000000..5681e3d5f9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2335.yml @@ -0,0 +1,4 @@ +author: "ktccd" +delete-after: True +changes: + - bugfix: "Flavortext is now in the DNA of mobs who has that, meaning changelings, cloners and such things use it properly." From 53b137740279725aad5958b219247db2cadf730c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 12 Aug 2017 06:36:59 -0500 Subject: [PATCH 115/230] Automatic changelog generation for PR #2339 [ci skip] --- html/changelogs/AutoChangeLog-pr-2339.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2339.yml diff --git a/html/changelogs/AutoChangeLog-pr-2339.yml b/html/changelogs/AutoChangeLog-pr-2339.yml new file mode 100644 index 0000000000..c7f3d42698 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2339.yml @@ -0,0 +1,4 @@ +author: "More Robust Than You" +delete-after: True +changes: + - tweak: "His Grace now shows up on the orbit list" From 6cb9a0088f3cc0fa24f14dd412def741a4b40831 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 01:26:39 -0500 Subject: [PATCH 116/230] Fixes admin mass deleting... not actually mass deleting... --- .../procedural_mapping/mapGeneratorModules/helpers.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm index 24b75a3a9a..6fdcccd43f 100644 --- a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm +++ b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm @@ -37,16 +37,12 @@ /datum/mapGeneratorModule/bottomLayer/massdelete/leave_turfs deleteturfs = FALSE -/datum/mapGeneratorModule/bottomLayer/massdelete/leave_turfs/New() - ..() - ignore_typecache = typecacheof(list(/turf)) - /datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete deleteturfs = FALSE /datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete/New() ..() - ignore_typecache = typecacheof(list(/mob, /turf)) + ignore_typecache = typecacheof(list(/mob)) //Only places atoms/turfs on area borders /datum/mapGeneratorModule/border From 1b3ccfdfeb9343d8c17c37959add1d7c4810e329 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 01:26:42 -0500 Subject: [PATCH 117/230] The wiki button now asks what page you want to be taken to --- interface/interface.dm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/interface/interface.dm b/interface/interface.dm index 253738064b..64e39587ce 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -1,12 +1,14 @@ //Please use mob or src (not usr) in these procs. This way they can be called in the same fashion as procs. -/client/verb/wiki() +/client/verb/wiki(query as text | null) set name = "wiki" - set desc = "Visit the wiki." + set desc = "Type what you want to know about. This will open the wiki on your web browser. Type nothing to go to the main page." set hidden = 1 if(config.wikiurl) - if(alert("This will open the wiki in your browser. Are you sure?",,"Yes","No")=="No") - return - src << link(config.wikiurl) + if(query) + var/output = config.wikiurl + "/index.php?title=Special%3ASearch&profile=default&search=" + query + src << link(output) + else if (query != null) + src << link(config.wikiurl) else to_chat(src, "The wiki URL is not set in the server configuration.") return From 501972a2f8038e45ce35de389dea1d98f44ebcb6 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 01:26:46 -0500 Subject: [PATCH 118/230] Removes chat pings from href logs --- code/modules/client/client_procs.dm | 5 +++-- code/modules/client/client_procs.dm.rej | 10 ++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 code/modules/client/client_procs.dm.rej diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 4455af7ca9..feb1a6e94d 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -72,8 +72,9 @@ to_chat(src, "Your previous action was ignored because you've done too many in a second") return - //Logs all hrefs - GLOB.world_href_log << "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
    " + //Logs all hrefs, except chat pings + if(href_list["proc"] != "ping") + GLOB.world_href_log << "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
    " // Admin PM if(href_list["priv_msg"]) diff --git a/code/modules/client/client_procs.dm.rej b/code/modules/client/client_procs.dm.rej new file mode 100644 index 0000000000..2b656938c4 --- /dev/null +++ b/code/modules/client/client_procs.dm.rej @@ -0,0 +1,10 @@ +diff a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm (rejected hunks) +@@ -73,7 +73,7 @@ + return + + //Logs all hrefs, except chat pings +- if(href_list["proc"] != "ping") ++ if(!(href_list["_src_"] == "chat" && href_list["proc"] == "ping" && LAZYLEN(href_list) == 2)) + WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
    ") + + // Admin PM From e972a90ba98ee2bfa979674763f8d276d12ecb3b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 01:27:51 -0500 Subject: [PATCH 119/230] Adds callback select system --- code/datums/callback.dm | 54 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/code/datums/callback.dm b/code/datums/callback.dm index 1b5c25fe18..624fed58a6 100644 --- a/code/datums/callback.dm +++ b/code/datums/callback.dm @@ -100,3 +100,57 @@ if (object == GLOBAL_PROC) return call(delegate)(arglist(calling_arguments)) return call(object, delegate)(arglist(calling_arguments)) + + +/datum/callback_select + var/list/finished + var/pendingcount + var/total + +/datum/callback_select/New(count, savereturns) + total = count + if (savereturns) + finished = new(count) + + +/datum/callback_select/proc/invoke_callback(index, datum/callback/callback, list/callback_args, savereturn = TRUE) + set waitfor = FALSE + if (!callback || !istype(callback)) + //This check only exists because the alternative is callback_select would block forever if given invalid data + CRASH("invalid callback passed to invoke_callback") + if (!length(callback_args)) + callback_args = list() + pendingcount++ + var/rtn = callback.Invoke(arglist(callback_args)) + pendingcount-- + if (savereturn) + finished[index] = rtn + + + + +//runs a list of callbacks asynchronously, returning once all of them return. +//callbacks can be repeated. +//callbacks-args is a optional list of argument lists, in the same order as the callbacks, +// the inner lists will be sent to the callbacks when invoked() as additional args. +//can optionly save and return a list of return values, in the same order as the original list of callbacks +//resolution is the number of byond ticks between checks. +/proc/callback_select(list/callbacks, list/callback_args, savereturns = TRUE, resolution = 1) + if (!callbacks) + return + var/count = length(callbacks) + if (!count) + return + if (!callback_args) + callback_args = list() + + callback_args.len = count + + var/datum/callback_select/CS = new(count, savereturns) + for (var/i in 1 to count) + CS.invoke_callback(i, callbacks[i], callback_args[i], savereturns) + + while(CS.pendingcount) + sleep(resolution*world.tick_lag) + return CS.finished + From 3f562c113c967947d0e2abe9b4ac5f4966b13aa7 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 01:27:54 -0500 Subject: [PATCH 120/230] get_head_slots() now returns wear_neck --- code/modules/mob/living/carbon/human/inventory.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index d9f1acf879..da99954f29 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -63,6 +63,7 @@ return list( head, wear_mask, + wear_neck, glasses, ears, ) @@ -171,7 +172,7 @@ dropItemToGround(belt) w_uniform = null update_suit_sensors() - if(!QDELETED(src)) + if(!QDELETED(src)) update_inv_w_uniform() else if(I == gloves) gloves = null From 714fc5ed4a0f82cf0c6165cb4efe5c46949cbb74 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 01:27:58 -0500 Subject: [PATCH 121/230] Fixes minebots missing action icons --- code/modules/mining/minebot.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 25aa9fb8e8..8029cc1416 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -170,6 +170,7 @@ /datum/action/innate/minedrone check_flags = AB_CHECK_CONSCIOUS + icon_icon = 'icons/mob/actions/actions_mecha.dmi' background_icon_state = "bg_default" /datum/action/innate/minedrone/toggle_light From 80f1fb8c58828d44f51def83c9c107272f94acea Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 01:28:03 -0500 Subject: [PATCH 122/230] Fix fireaxe cabinets spawned with broken icons --- code/game/objects/structures/fireaxe.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 24e70059af..bfd3dea037 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -12,8 +12,8 @@ max_integrity = 150 integrity_failure = 50 -/obj/structure/fireaxecabinet/New() - ..() +/obj/structure/fireaxecabinet/Initialize() + . = ..() update_icon() /obj/structure/fireaxecabinet/Destroy() From 7004797c8c41b5fd567b1f0bdd1772dfcbb22584 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 01:28:08 -0500 Subject: [PATCH 123/230] Fixed sign description --- code/game/objects/structures/signs.dm.rej | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 code/game/objects/structures/signs.dm.rej diff --git a/code/game/objects/structures/signs.dm.rej b/code/game/objects/structures/signs.dm.rej new file mode 100644 index 0000000000..51eea8f290 --- /dev/null +++ b/code/game/objects/structures/signs.dm.rej @@ -0,0 +1,11 @@ +diff a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm (rejected hunks) +@@ -326,6 +326,6 @@ + icon_state = "direction_bridge" + + /obj/structure/sign/logo +- name = "station logo" +- desc = "A sign: SPACE STATION 13." ++ name = "nanotrasen logo" ++ desc = "The Nanotrasen corporate logo." + icon_state = "nanotrasen_sign1" +\ No newline at end of file From 1291b122731a7e2802b9463594b4905d2b2aa1ad Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 01:28:11 -0500 Subject: [PATCH 124/230] Cleaned up stacked pipes --- _maps/map_files/BoxStation/BoxStation.dmm | 3 --- _maps/map_files/Deltastation/DeltaStation2.dmm | 3 --- _maps/map_files/OmegaStation/OmegaStation.dmm | 2 -- 3 files changed, 8 deletions(-) diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index bf4263ffe6..c89e4e0422 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -60788,9 +60788,6 @@ /turf/open/floor/plasteel, /area/science/robotics/lab) "cHY" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 3e19f173a4..b0265ad94b 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -112682,9 +112682,6 @@ /turf/open/floor/plating, /area/engine/atmospherics_engine) "ept" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 9 }, diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index 60495dcf55..020a963662 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -5039,7 +5039,6 @@ name = "Detective Privacy Blast door" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/security/detectives_office) "aix" = ( @@ -32004,7 +32003,6 @@ "bcM" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/vault{ dir = 5 }, From dae3e121f2cde3130eba771f758284292905e939 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 01:28:16 -0500 Subject: [PATCH 125/230] critical priority roleplay grammatical patch (*surrender emote fix) --- code/modules/mob/living/emote.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 8bdcf30f66..ff37b85800 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -326,7 +326,7 @@ /datum/emote/living/surrender key = "surrender" key_third_person = "surrenders" - message = "puts their hands on their head and falls to the ground, they surrender%s!" + message = "puts their hands on their head and falls to the ground, they surrender!" emote_type = EMOTE_AUDIBLE /datum/emote/living/surrender/run_emote(mob/user, params) From deffc1b1f1feb1d04d8401059d785ec54c998dfb Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 01:28:20 -0500 Subject: [PATCH 126/230] More baseturf helpers --- .../LavaRuins/lavaland_biodome_beach.dmm | 2 +- .../lavaland_biodome_clown_planet.dmm | 2 +- .../lavaland_surface_animal_hospital.dmm | 2 +- .../lavaland_surface_ash_walker1.dmm | 2 +- .../lavaland_surface_biodome_winter.dmm | 2 +- .../LavaRuins/lavaland_surface_cultaltar.dmm | 2 +- .../LavaRuins/lavaland_surface_envy.dmm | 2 +- .../lavaland_surface_fountain_hall.dmm | 2 +- .../LavaRuins/lavaland_surface_gluttony.dmm | 2 +- .../LavaRuins/lavaland_surface_golem_ship.dmm | 2 +- .../LavaRuins/lavaland_surface_greed.dmm | 2 +- .../LavaRuins/lavaland_surface_hermit.dmm | 2 +- .../LavaRuins/lavaland_surface_pizzaparty.dmm | 2 +- .../LavaRuins/lavaland_surface_pride.dmm | 2 +- .../LavaRuins/lavaland_surface_seed_vault.dmm | 2 +- .../LavaRuins/lavaland_surface_sloth.dmm | 2 +- .../lavaland_surface_survivalpod.dmm | 2 +- .../lavaland_surface_swarmer_crash.dmm | 2 +- .../lavaland_surface_syndicate_base1.dmm | 2 +- .../LavaRuins/lavaland_surface_ufo_crash.dmm | 2 +- .../lavaland_surface_xeno_nest.dmm.rej | 10 +++++ _maps/map_files/Mining/Lavaland.dmm | 25 ++++++++---- .../objects_and_mobs/ruin_mapping_aids.dm | 39 +++++++++++++++++-- 23 files changed, 84 insertions(+), 30 deletions(-) create mode 100644 _maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm.rej diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index f0f2d8a6c5..c47534925f 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -460,7 +460,7 @@ /area/ruin/powered/beach) "cz" = ( /obj/effect/turf_decal/sand, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plating/beach/sand, /area/ruin/powered/beach) "cR" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm index 408fe6ff1d..87137f7d14 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm @@ -896,7 +896,7 @@ /area/ruin/powered/clownplanet) "dR" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/indestructible/sound{ icon_state = "bananium"; name = "bananium floor"; diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm index de78fed108..ec1ce79bd8 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm @@ -809,7 +809,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "cF" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall/mineral/titanium/nodiagonal, /area/ruin/powered/animal_hospital) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index aed9b30686..3cae12bfe1 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -1071,7 +1071,7 @@ /area/ruin/unpowered/ash_walkers) "cE" = ( /obj/structure/stone_tile/surrounding/cracked, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "cF" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm index 49ae2cb4f5..722cc92d78 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm @@ -275,7 +275,7 @@ }, /area/ruin/powered/snow_biodome) "bS" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plating/asteroid/snow{ initial_gas_mix = "o2=22;n2=82;TEMP=180" }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm index ed4aee469d..875cfdc35d 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm @@ -163,7 +163,7 @@ /turf/open/floor/plasteel/cult{ initial_gas_mix = "o2=14;n2=23;TEMP=300" }, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall/mineral/cult, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm index 66d7173097..773fc01f51 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm @@ -104,7 +104,7 @@ /turf/open/floor/plating, /area/ruin/unpowered) "r" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall/rust, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm index 0c40aa2881..ab1d5764e1 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm @@ -29,7 +29,7 @@ /turf/open/floor/engine/cult, /area/ruin/unpowered) "i" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/engine/cult, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm index 97b44df094..3b1c555805 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm @@ -85,7 +85,7 @@ /turf/open/floor/plasteel/freezer, /area/ruin/powered/gluttony) "D" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plasteel/freezer, /area/ruin/powered/gluttony) "R" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm index fa1e394751..c993ecbb63 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm @@ -285,7 +285,7 @@ /turf/open/floor/plating, /area/ruin/powered/golem_ship) "Y" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/mineral/titanium/purple, /area/ruin/powered/golem_ship) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm index 3d67d7b474..c81c510b9e 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm @@ -123,7 +123,7 @@ /turf/open/floor/engine/cult, /area/ruin/powered/greed) "z" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/engine/cult, /area/ruin/powered/greed) "J" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm index 896f13b1bb..2749e39f1f 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm @@ -180,7 +180,7 @@ }, /area/ruin/powered) "L" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plating/asteroid/basalt, /area/ruin/powered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm index 44c41f5b85..f14495c95c 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm @@ -342,7 +342,7 @@ /area/ruin/unpowered) "S" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm index b1dedc0cb3..38b5f5f64d 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm @@ -65,7 +65,7 @@ /turf/open/floor/mineral/silver, /area/ruin/powered/pride) "u" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/mineral/silver, /area/ruin/powered/pride) "G" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm index cb2686fe89..01ac536230 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm @@ -262,7 +262,7 @@ /turf/open/floor/plasteel/freezer, /area/ruin/powered/seedvault) "Z" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall/r_wall, /area/ruin/powered/seedvault) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm index 89a8b50c39..5ae4227813 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm @@ -42,7 +42,7 @@ }, /area/ruin/unpowered) "h" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/sepia{ blocks_air = 0; slowdown = 10 diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm index 3392d60307..8d40c16d58 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm @@ -169,7 +169,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "B" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall/mineral/titanium/survival/pod, /area/ruin/powered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm index a794b58db8..3962947551 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm @@ -22,7 +22,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/unpowered) "g" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall/mineral/plastitanium, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index be96830ca4..2893f3481f 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -1285,7 +1285,7 @@ }, /area/ruin/powered/syndicate_lava_base) "dd" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plasteel/vault{ dir = 5 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm index 22d341c7df..0c4dd60fb8 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm @@ -105,7 +105,7 @@ "s" = ( /obj/structure/table/optable/abductor, /obj/item/weapon/cautery/alien, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plating/abductor{ initial_gas_mix = "o2=16;n2=23;TEMP=300" }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm.rej b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm.rej new file mode 100644 index 0000000000..365cc7fdda --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm.rej @@ -0,0 +1,10 @@ +diff a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm (rejected hunks) +@@ -269,7 +269,7 @@ + "W" = ( + /obj/structure/alien/weeds, + /obj/structure/alien/resin/wall, +-/obj/effect/baseturf_helper, ++/obj/effect/baseturf_helper/lava_land/surface, + /turf/open/floor/plating/asteroid/basalt/lava_land_surface, + /area/ruin/unpowered/xenonest) + diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 4c00524717..9b97eef1d5 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -1,4 +1,4 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( /turf/closed/indestructible/riveted/boss, /area/lavaland/surface/outdoors) @@ -1241,6 +1241,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/circuit, /area/mine/maintenance) "dy" = ( @@ -3399,17 +3400,27 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "Wt" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall, /area/mine/laborcamp/security) "Wu" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall, /area/mine/laborcamp) "Ww" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plasteel, /area/mine/living_quarters) +"Wx" = ( +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel/brown{ + dir = 4 + }, +/area/mine/eva) +"Wy" = ( +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel, +/area/mine/production) (1,1,1) = {" aa @@ -19057,7 +19068,7 @@ cI cP cn bP -bP +Wy bP bP eD @@ -19570,7 +19581,7 @@ bf cK bq bq -dt +br bq dV el @@ -20335,7 +20346,7 @@ bf bp bu bI -bW +Wx cr bf ad diff --git a/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm b/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm index 06fb2b9c04..68a34637b8 100644 --- a/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm +++ b/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm @@ -1,10 +1,10 @@ //These landmarks can be placed in rooms/ruins to set the baseturfs of every turf in the area. Easier than having potentially unlimited subtypes of every turf or having to manually edit the turfs in the map editor /obj/effect/baseturf_helper - name = "lava baseturf editor" + name = "baseturf editor" icon = 'icons/obj/weapons.dmi' icon_state = "syndballoon" - var/baseturf = /turf/open/lava/smooth/lava_land_surface + var/baseturf = null layer = POINT_LAYER /obj/effect/baseturf_helper/Initialize() @@ -13,4 +13,37 @@ for(var/turf/T in get_area_turfs(thearea, z)) if(T.baseturf != T.type) //Don't break indestructible walls and the like T.baseturf = baseturf - qdel(src) \ No newline at end of file + qdel(src) + + +/obj/effect/baseturf_helper/asteroid + name = "asteroid baseturf editor" + baseturf = /turf/open/floor/plating/asteroid + +/obj/effect/baseturf_helper/asteroid/airless + name = "asteroid airless baseturf editor" + baseturf = /turf/open/floor/plating/asteroid/airless + +/obj/effect/baseturf_helper/asteroid/basalt + name = "asteroid basalt baseturf editor" + baseturf = /turf/open/floor/plating/asteroid/basalt + +/obj/effect/baseturf_helper/asteroid/snow + name = "asteroid snow baseturf editor" + baseturf = /turf/open/floor/plating/asteroid/snow + +/obj/effect/baseturf_helper/beach/sand + name = "beach sand baseturf editor" + baseturf = /turf/open/floor/plating/beach/sand + +/obj/effect/baseturf_helper/beach/water + name = "water baseturf editor" + baseturf = /turf/open/floor/plating/beach/water + +/obj/effect/baseturf_helper/lava + name = "lava baseturf editor" + baseturf = /turf/open/lava/smooth + +/obj/effect/baseturf_helper/lava_land/surface + name = "lavaland baseturf editor" + baseturf = /turf/open/lava/smooth/lava_land_surface From 1e3ea07d8b5ddc40e993814b261cb7ac7f058493 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 01:28:24 -0500 Subject: [PATCH 127/230] Adds icon_states to the unused and used Eldritch whetstones --- code/game/gamemodes/cult/cult_items.dm | 6 +++++- code/game/objects/items/weapons/sharpener.dm | 17 +++++++++-------- icons/obj/kitchen.dmi | Bin 23347 -> 25105 bytes 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 918398154c..d472bb7d5a 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -161,11 +161,15 @@ /obj/item/weapon/sharpener/cult name = "eldritch whetstone" desc = "A block, empowered by dark magic. Sharp weapons will be enhanced when used on the stone." + icon_state = "cult_sharpener" used = 0 increment = 5 max = 40 prefix = "darkened" +/obj/item/weapon/sharpener/cult/update_icon() + icon_state = "cult_sharpener[used ? "_used" : ""]" + /obj/item/clothing/suit/hooded/cultrobes/cult_shield name = "empowered cultist armor" desc = "Empowered garb which creates a powerful shield around the user." @@ -391,7 +395,7 @@ if(!iscultist(user)) to_chat(user, "That doesn't seem to do anything useful.") return - + if(istype(A, /obj/item)) var/list/cultists = list() diff --git a/code/game/objects/items/weapons/sharpener.dm b/code/game/objects/items/weapons/sharpener.dm index ace66060af..881832b5bb 100644 --- a/code/game/objects/items/weapons/sharpener.dm +++ b/code/game/objects/items/weapons/sharpener.dm @@ -12,31 +12,31 @@ /obj/item/weapon/sharpener/attackby(obj/item/I, mob/user, params) if(used) - to_chat(user, "The sharpening block is too worn to use again.") + to_chat(user, "The sharpening block is too worn to use again!") return if(I.force >= max || I.throwforce >= max)//no esword sharpening - to_chat(user, "[I] is much too powerful to sharpen further.") + to_chat(user, "[I] is much too powerful to sharpen further!") return if(requires_sharpness && !I.sharpness) - to_chat(user, "You can only sharpen items that are already sharp, such as knives.") + to_chat(user, "You can only sharpen items that are already sharp, such as knives!") return if(istype(I, /obj/item/weapon/melee/transforming/energy)) - to_chat(user, "You don't think \the [I] will be the thing getting modified if you use it on \the [src].") + to_chat(user, "You don't think \the [I] will be the thing getting modified if you use it on \the [src]!") return if(istype(I, /obj/item/weapon/twohanded))//some twohanded items should still be sharpenable, but handle force differently. therefore i need this stuff var/obj/item/weapon/twohanded/TH = I if(TH.force_wielded >= max) - to_chat(user, "[TH] is much too powerful to sharpen further.") + to_chat(user, "[TH] is much too powerful to sharpen further!") return if(TH.wielded) - to_chat(user, "[TH] must be unwielded before it can be sharpened.") + to_chat(user, "[TH] must be unwielded before it can be sharpened!") return if(TH.force_wielded > initial(TH.force_wielded)) - to_chat(user, "[TH] has already been refined before. It cannot be sharpened further.") + to_chat(user, "[TH] has already been refined before. It cannot be sharpened further!") return TH.force_wielded = Clamp(TH.force_wielded + increment, 0, max)//wieldforce is increased since normal force wont stay if(I.force > initial(I.force)) - to_chat(user, "[I] has already been refined before. It cannot be sharpened further.") + to_chat(user, "[I] has already been refined before. It cannot be sharpened further!") return user.visible_message("[user] sharpens [I] with [src]!", "You sharpen [I], making it much more deadly than before.") I.sharpness = IS_SHARP_ACCURATE @@ -46,6 +46,7 @@ name = "worn out [name]" desc = "[desc] At least, it used to." used = 1 + update_icon() /obj/item/weapon/sharpener/super name = "super whetstone" diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index a8f7708c46fa1d3d9b0d28c0a15686dfebd0f8ac..87b2b46a2bad9966f73883c7a09f3b4a22a3df52 100644 GIT binary patch literal 25105 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ʼn z7wKu@trMmoeIkUoW_%NWwaojYPF>Lfb8*q#85|Dj4`0}OvC#)Tn`G(t{MMy!6%}kh zfBwuvZ&ig6+74zFt|?vf}1^?@%tJT0S3LgY>G6F$M4cUGr zLnqXlHsG5#6pM66WKAA}THT6)$8XyV{NLwgNDw zZ}ks9x;o_(Im#|@s`7hhCuZ$g*wsJBpXI51rWn+Psq>{Mn|S!o{@E~+s(L}gGf?l@ z*N&mwQ=zygPK=8*Ib6A2F^dQY4sdXLOg+uVH=zpQzsTLvz{XbH$bbabYuTiK;k&u> z2>hsg2KCB^)TuD;Y#BHQS{dX9f{{m(MKEQ@4^uo$lo zQ!;8KDOYdL{OH9xshrHWYqw2KC$8mQ3TbGlIz1T@k*hgAHW=ei$KvQ@oUDjWuGsbD zb^v{h)n4Q8a4f!ifAyG{nU|Zg-+~pr6?Ubdl9uwq1zmNiv?|pvK1ka)!aQW20dc_X zM+zyHl7jbslTQ2`?8-Tm{BT$?J?Tdj(Eb2pd7e0<0f;@o#0ecK(Nf;{7HZ5fH%d7N z+AhysAHS!3=l(BHn>e$&=GQ%NF%ncbmH!dySIPJ0t7jl^! zJC7Opre15i!?_g^29-PKJ3ikpE+2<*Cbs@KUVKL#eC1WGNUj!p3dMj6InIsU(~Qia z*E->F&O(I2T1%e$oc94dUOTq{nl7TrKs*0VVc2RA$_Kb#RcTuII?aG)4BvP@ff8jTXS7jSa1~XC>(C z=Yk*Nur0}W#P}R$4SPZJFJ`tw-D2{ByM1dncBMC$I$*|Ibm2i8+j? zTR#mX{h!TIm$lI>>Srg3`c^fcEssLAUy?{!#nxqIJGcaP!Xf&3*`{+#a+Nd~-i0E# zD&nY#(Et$7(eWt3S&k7}?3^h8JU9-oKEju$(?CYbdsqPT$-gVzcAP}ZZUqQn>6`+W z3$xmBlIbRPQAkhxzeC8o09FzIzoihIs29A%dZyAb?lDC3Vfg>H2b`HRJo0gl^-7R1 zFZ0InW(s0vqe_*qc+zm^yr(+BYLivV)}HY95HF1;g}@rb9ea;)VE5U=@fL*eG*?(7 zEEe2n8~i9%eEqlw*|kz}T3F`utKs08IL`Y+xJ=lzM#y0QbG{hy z&yLf|*Is=tK@+*cn~N(Tkt&Rv`+C5l)tJeFoDTR<4~3}KUU>bDx&~~V>-@=S43sG4 z8Xl-7s?Cx~W3N2pmimilNcmc`0#*l%sHNN*8I>JyoY=cIiuNE6p^gG{)2RK*$sI(e4n!Xs3ZvaD+s zdfCK$+r3G(b>X8G9x768aK=sQSgR|KzmvhsSHwMEdIC%^FjqLNK8I(`U15A_bTt0& zChR`$Bh76wBDQc=`hxO2GUvEA`cVl~1|X4wkp|CpU6WUlm_q5cs zoikfp`6Hm;$9!VM$WT)Pg`h!I2s9TN+F2j*np=bySl>%?2Ktv1jcr_w{gg_A4}Jy* zV%M^V?AA#JJ)*1+-^?fPmXV%I=f7_Ef7 zwQ+KbD1oNwtBjGv`q|uGH+sU$^V@kvE)ep)CK8|tu9*xkxW@j#fUY`fzG>}j6!rnpL{F)4L()H#x9)Z?In z9Dk|}-u$bg-Roe061Y*els<{qpZ57WjO{({}#X2cq2ky~MwyE&bRM<;F{vu8UMjET*zbd*QO`3yWKacD zh@Ue46WnAeeO$E2RJe>k`e<2Pcr_yNlm@9}fHZVghoc!EXVH4418SM#>-4knP^G%} zL779&rs)!9;C1@G(4hVeHngz+1{+Y8dSCPY8!8s}${1WK1Stv)rboRVm=?z+oKW8vmoR?OohC3cDrFW0EZc>hHA_~F zHV@1eK#Q`bsR^JujTOC3(kLn3HxU)m_#+-*PZ=@H(=*jl5J2n8T{^%aJfWxjT3Y{* zn}vEu0|sdqKHrN@-r83poZR&kjLdy|9;9hEEOE>TqG_pVM^UN58?J!Y05f>RVQRXFRt^OFL?2n8zBI-bD5(?vy50R0d1 ziPVoc@@jsesl%`x1j4SKHIKTxCl&A`P)8__Vn8wj_8lpZKRMz15LaF;&D!#g3K|U7 zY+~X{UZ@pM@|^&R0a-HD$w^4nkF$tEyOE@Sig}PxDB$5k>w!NXdep3Vm}3p8gfyq( z!3ivwr9FZX8r+QI1l%HmMLtLDF_wGbSqLeHA3^F-A4VTLe}XlfB{fx5)z6K7KDL7N z;lsRkSj;UpqGv50KsJ*7NotBmR^#2#vtz3u@t^qKD8{1=jIF`vqUiVW5fdDr+2RT< z7j#g33xs`c;OK}t>OnK9V^yAff!GFhxI*c?_w&2Ak9vF%iKKvWJ~)0jtSODa(8^ri z1&n_b(506EHJV*-3jL}Qu0+?hSA#o`=9aZpm zndBTn%j}a~(ys0uPrN!7!$I9$0htkCjxFok(!Rkvg3CnCY<$~HuJ!I*PpJdD%|n&n zCZWwF`lB@cDWpHW0FahEtw85nIW3P)<33JPdanw z^X-9O)XEd&V^7hU->SWc8Q*(%5{xSf{5p-#nWqfPYmibt@h!4Fw(6!9dwlcTW)mxv*7h7jn4(W-R+$K ze;$mmM?@52PYj%jf++XWtKow2cfs)X8sX#&M6o&B{n=g${Qts%{|_!U=g8SI@q-EM SQlLZ{0Q9ts?v&hei2ffmmYbRY literal 23347 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 Date: Sun, 13 Aug 2017 09:49:43 -0500 Subject: [PATCH 128/230] Automatic changelog generation for PR #2346 [ci skip] --- html/changelogs/AutoChangeLog-pr-2346.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2346.yml diff --git a/html/changelogs/AutoChangeLog-pr-2346.yml b/html/changelogs/AutoChangeLog-pr-2346.yml new file mode 100644 index 0000000000..c42300a173 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2346.yml @@ -0,0 +1,4 @@ +author: "More Robust Than You" +delete-after: True +changes: + - tweak: "The wiki button now asks what page you want to be taken to" From fdfb61b5272600b05a3d66a17adf9b0ecd1e8d14 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 13 Aug 2017 09:50:51 -0500 Subject: [PATCH 129/230] Update client_procs.dm --- code/modules/client/client_procs.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index feb1a6e94d..b4a879e5fe 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -73,8 +73,8 @@ return //Logs all hrefs, except chat pings - if(href_list["proc"] != "ping") - GLOB.world_href_log << "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
    " + if(!(href_list["_src_"] == "chat" && href_list["proc"] == "ping" && LAZYLEN(href_list) == 2)) + WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
    ") // Admin PM if(href_list["priv_msg"]) From be46c419e263d8e1167f279540b6ef43440e6a24 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 09:51:47 -0500 Subject: [PATCH 130/230] Automatic changelog generation for PR #2350 [ci skip] --- html/changelogs/AutoChangeLog-pr-2350.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2350.yml diff --git a/html/changelogs/AutoChangeLog-pr-2350.yml b/html/changelogs/AutoChangeLog-pr-2350.yml new file mode 100644 index 0000000000..07e0f51b62 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2350.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - bugfix: "Minebots no longer lack icons for their action buttons." From 6d72705ff593034e0b79db42b82b3504591f10f1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 09:53:12 -0500 Subject: [PATCH 131/230] Automatic changelog generation for PR #2356 [ci skip] --- html/changelogs/AutoChangeLog-pr-2356.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2356.yml diff --git a/html/changelogs/AutoChangeLog-pr-2356.yml b/html/changelogs/AutoChangeLog-pr-2356.yml new file mode 100644 index 0000000000..218da24865 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2356.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - imageadd: "Adds icon_states to the unused and used Eldritch whetstones. Sprites by Fury McFlurry." From bd358230122ebc1b3c02478399002d9cc658ce53 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 17:41:12 -0500 Subject: [PATCH 132/230] [ready]Makes bIcon better --- code/__DEFINES/misc.dm | 1 + code/__HELPERS/icons.dm | 109 +++++++++++++- code/__HELPERS/text.dm | 5 +- code/__HELPERS/unsorted.dm | 4 +- code/controllers/subsystem/assets.dm | 5 +- code/datums/callback.dm.rej | 62 ++++++++ code/datums/wires/mulebot.dm | 10 +- code/datums/wires/particle_accelerator.dm | 2 +- code/datums/wires/syndicatebomb.dm | 24 +-- code/game/atoms.dm | 2 +- code/game/gamemodes/clock_cult/clock_mobs.dm | 2 +- .../gamemodes/devil/true_devil/_true_devil.dm | 6 +- code/game/gamemodes/gang/gang_datum.dm | 2 +- code/game/gamemodes/gang/gang_pen.dm | 2 +- code/game/gamemodes/gang/recaller.dm | 18 +-- code/game/gamemodes/nuclear/nuclear.dm | 2 +- code/game/gamemodes/traitor/traitor.dm | 2 +- code/game/machinery/computer/apc_control.dm | 8 +- code/game/machinery/computer/message.dm | 8 +- code/game/machinery/overview.dm | 8 +- code/game/machinery/syndicatebomb.dm | 10 +- code/game/mecha/equipment/mecha_equipment.dm | 2 +- code/game/mecha/mecha.dm | 6 +- .../effects/decals/cleanable/humans.dm | 2 +- code/game/objects/effects/mines.dm | 2 +- code/game/objects/items/devices/PDA/PDA.dm | 4 +- .../objects/items/devices/geiger_counter.dm | 14 +- code/game/objects/items/toys.dm | 4 +- code/game/objects/items/weapons/AI_modules.dm | 2 +- code/game/objects/items/weapons/cards_ids.dm | 2 +- .../objects/items/weapons/pneumaticCannon.dm | 4 +- code/game/objects/items/weapons/powerfist.dm | 2 +- code/modules/admin/verbs/pray.dm | 2 +- code/modules/assembly/bomb.dm | 2 +- code/modules/assembly/health.dm | 2 +- code/modules/assembly/infrared.dm | 2 +- code/modules/assembly/proximity.dm | 2 +- code/modules/assembly/signaler.dm | 2 +- code/modules/assembly/timer.dm | 2 +- code/modules/client/asset_cache.dm | 45 ++++++ code/modules/client/client_procs.dm | 2 +- code/modules/client/verbs/ooc.dm | 2 +- .../modules/clothing/spacesuits/flightsuit.dm | 4 +- code/modules/clothing/spacesuits/hardsuit.dm | 2 +- code/modules/emoji/emoji_parse.dm | 2 +- .../kitchen_machinery/icecream_vat.dm | 2 +- code/modules/food_and_drinks/pizzabox.dm | 2 +- code/modules/goonchat/browserOutput.dm | 102 +++++++++++-- code/modules/goonchat/browserOutput.dm.rej | 137 ++++++++++++++++++ .../browserassets/css/browserOutput.css | 9 +- .../browserassets/js/browserOutput.js | 27 +++- code/modules/language/language.dm | 2 +- code/modules/mob/living/carbon/examine.dm | 16 +- .../mob/living/carbon/human/examine.dm | 58 ++++---- code/modules/mob/living/silicon/ai/examine.dm | 2 +- .../mob/living/silicon/pai/software.dm | 2 +- .../mob/living/silicon/robot/examine.dm | 4 +- .../mob/living/simple_animal/bot/bot.dm | 6 +- .../mob/living/simple_animal/bot/mulebot.dm | 2 +- .../mob/living/simple_animal/constructs.dm | 2 +- .../simple_animal/friendly/drone/_drone.dm | 14 +- .../living/simple_animal/friendly/mouse.dm | 2 +- .../simple_animal/guardian/types/dextrous.dm | 10 +- .../mob/living/simple_animal/slime/slime.dm | 2 +- code/modules/reagents/chemistry/holder.dm | 6 +- code/modules/recycling/conveyor2.dm | 2 +- code/modules/uplink/uplink_item.dm | 6 +- interface/stylesheet.dm | 2 +- 68 files changed, 644 insertions(+), 180 deletions(-) create mode 100644 code/datums/callback.dm.rej create mode 100644 code/modules/goonchat/browserOutput.dm.rej diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 6a932ead4a..d6299ba42c 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -350,6 +350,7 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE //debug printing macros #define debug_world(msg) if (GLOB.Debug2) to_chat(world, "DEBUG: [msg]") +#define debug_usr(msg) if (GLOB.Debug2&&usr) to_chat(usr, "DEBUG: [msg]") #define debug_admins(msg) if (GLOB.Debug2) to_chat(GLOB.admins, "DEBUG: [msg]") #define debug_world_log(msg) if (GLOB.Debug2) log_world("DEBUG: [msg]") diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 04ea69a43f..855675a29f 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -167,7 +167,7 @@ mob Output_Icon() set name = "2. Output Icon" - to_chat(src, "Icon is: [bicon(getFlatIcon(src))]") + to_chat(src, "Icon is: [icon2base64html(getFlatIcon(src))]") Label_Icon() set name = "3. Label Icon" @@ -993,3 +993,110 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) #undef FROZEN_RED_COLOR #undef FROZEN_GREEN_COLOR #undef FROZEN_BLUE_COLOR + + +//Converts an icon to base64. Operates by putting the icon in the iconCache savefile, +// exporting it as text, and then parsing the base64 from that. +// (This relies on byond automatically storing icons in savefiles as base64) +/proc/icon2base64(icon/icon, iconKey = "misc") + if (!isicon(icon)) + return FALSE + WRITE_FILE(GLOB.iconCache[iconKey], icon) + var/iconData = GLOB.iconCache.ExportText(iconKey) + var/list/partial = splittext(iconData, "{") + return replacetext(copytext(partial[2], 3, -5), "\n", "") + +/proc/icon2html(thing, target, icon_state, dir, frame = 1, moving = FALSE) + if (!thing) + return + + var/key + var/icon/I = thing + if (!target) + return + if (target == world) + target = GLOB.clients + + var/list/targets + if (!islist(target)) + targets = list(target) + else + targets = target + if (!targets.len) + return + if (!isicon(I)) + if (isfile(thing)) //special snowflake + var/name = sanitize_filename("[generate_asset_name(thing)].png") + register_asset(name, thing) + for (var/thing2 in targets) + send_asset(thing2, key, FALSE) + return "" + var/atom/A = thing + if (isnull(dir)) + dir = A.dir + if (isnull(icon_state)) + icon_state = A.icon_state + I = A.icon + if (ishuman(thing)) // Shitty workaround for a BYOND issue. + var/icon/temp = I + I = icon() + I.Insert(temp, dir = SOUTH) + dir = SOUTH + else + if (isnull(dir)) + dir = SOUTH + if (isnull(icon_state)) + icon_state = "" + + I = icon(I, icon_state, dir, frame, moving) + + key = "[generate_asset_name(I)].png" + register_asset(key, I) + for (var/thing2 in targets) + send_asset(thing2, key, FALSE) + + return "" + +/proc/icon2base64html(thing) + if (!thing) + return + var/static/list/bicon_cache = list() + if (isicon(thing)) + var/icon/I = thing + var/icon_base64 = icon2base64(I) + + if (I.Height() > world.icon_size || I.Width() > world.icon_size) + var/icon_md5 = md5(icon_base64) + icon_base64 = bicon_cache[icon_md5] + if (!icon_base64) // Doesn't exist yet, make it. + bicon_cache[icon_md5] = icon_base64 = icon2base64(I) + + + return "" + + // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. + var/atom/A = thing + var/key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" + + + if (!bicon_cache[key]) // Doesn't exist, make it. + var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) + if (ishuman(thing)) // Shitty workaround for a BYOND issue. + var/icon/temp = I + I = icon() + I.Insert(temp, dir = SOUTH) + + bicon_cache[key] = icon2base64(I, key) + + return "" + +//Costlier version of icon2html() that uses getFlatIcon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs. +/proc/costly_icon2html(thing, target) + if (!thing) + return + + if (isicon(thing)) + return icon2html(thing, target) + + var/icon/I = getFlatIcon(thing) + return icon2html(I, target) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index cd5d0c6af5..ef89caa490 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -45,6 +45,9 @@ index = findtext(t, char, index+1) return t +/proc/sanitize_filename(t) + return sanitize_simple(t, list("\n"="", "\t"="", "/"="", "\\"="", "?"="", "%"="", "*"="", ":"="", "|"="", "\""="", "<"="", ">"="")) + //Runs byond's sanitization proc along-side sanitize_simple /proc/sanitize(t,list/repl_chars = null) return html_encode(sanitize_simple(t,repl_chars)) @@ -560,7 +563,7 @@ GLOBAL_LIST_INIT(binary, list("0","1")) var/next_backslash = findtext(string, "\\") if(!next_backslash) return string - + var/leng = length(string) var/next_space = findtext(string, " ", next_backslash + 1) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index aab766f9e4..f3d67905de 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -845,11 +845,11 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list( /obj/proc/atmosanalyzer_scan(datum/gas_mixture/air_contents, mob/user, obj/target = src) var/obj/icon = target - user.visible_message("[user] has used the analyzer on [bicon(icon)] [target].", "You use the analyzer on [bicon(icon)] [target].") + user.visible_message("[user] has used the analyzer on [icon2html(icon, viewers(src))] [target].", "You use the analyzer on [icon2html(icon, user)] [target].") var/pressure = air_contents.return_pressure() var/total_moles = air_contents.total_moles() - to_chat(user, "Results of analysis of [bicon(icon)] [target].") + to_chat(user, "Results of analysis of [icon2html(icon, user)] [target].") if(total_moles>0) to_chat(user, "Pressure: [round(pressure,0.1)] kPa") diff --git a/code/controllers/subsystem/assets.dm b/code/controllers/subsystem/assets.dm index 607b142c59..fd27c9424f 100644 --- a/code/controllers/subsystem/assets.dm +++ b/code/controllers/subsystem/assets.dm @@ -3,12 +3,15 @@ SUBSYSTEM_DEF(assets) init_order = INIT_ORDER_ASSETS flags = SS_NO_FIRE var/list/cache = list() + var/list/preload = list() /datum/controller/subsystem/assets/Initialize(timeofday) for(var/type in typesof(/datum/asset) - list(/datum/asset, /datum/asset/simple)) var/datum/asset/A = new type() A.register() + preload = cache.Copy() //don't preload assets generated during the round + for(var/client/C in GLOB.clients) - addtimer(CALLBACK(GLOBAL_PROC, .proc/getFilesSlow, C, cache, FALSE), 10) + addtimer(CALLBACK(GLOBAL_PROC, .proc/getFilesSlow, C, preload, FALSE), 10) ..() diff --git a/code/datums/callback.dm.rej b/code/datums/callback.dm.rej new file mode 100644 index 0000000000..14faac8412 --- /dev/null +++ b/code/datums/callback.dm.rej @@ -0,0 +1,62 @@ +diff a/code/datums/callback.dm b/code/datums/callback.dm (rejected hunks) +@@ -100,60 +100,3 @@ + if (object == GLOBAL_PROC) + return call(delegate)(arglist(calling_arguments)) + return call(object, delegate)(arglist(calling_arguments)) +- +- +-/datum/callback_select +- var/list/finished +- var/pendingcount +- var/total +- +-/datum/callback_select/New(count, savereturns) +- total = count +- if (savereturns) +- finished = new(count) +- +- +-/datum/callback_select/proc/invoke_callback(index, datum/callback/callback, list/callback_args, savereturn = TRUE) +- set waitfor = FALSE +- if (!callback || !istype(callback)) +- //This check only exists because the alternative is callback_select would block forever if given invalid data +- CRASH("invalid callback passed to invoke_callback") +- if (!length(callback_args)) +- callback_args = list() +- pendingcount++ +- debug_usr("calling callback") +- var/rtn = callback.Invoke(arglist(callback_args)) +- debug_usr("callback returned") +- pendingcount-- +- if (savereturn) +- finished[index] = rtn +- +- +- +- +-//runs a list of callbacks asynchronously, returning once all of them return. +-//callbacks can be repeated. +-//callbacks-args is a optional list of argument lists, in the same order as the callbacks, +-// the inner lists will be sent to the callbacks when invoked() as additional args. +-//can optionly save and return a list of return values, in the same order as the original list of callbacks +-//resolution is the number of byond ticks between checks. +-/proc/callback_select(list/callbacks, list/callback_args, savereturns = TRUE, resolution = 1) +- if (!callbacks) +- return +- var/count = length(callbacks) +- if (!count) +- return +- if (!callback_args) +- callback_args = list() +- +- callback_args.len = count +- +- var/datum/callback_select/CS = new(count, savereturns) +- for (var/i in 1 to count) +- CS.invoke_callback(i, callbacks[i], callback_args[i], savereturns) +- debug_usr("starting callbacks: [CS.pendingcount]") +- while(CS.pendingcount) +- debug_usr("callbacks: [CS.pendingcount]") +- sleep(resolution*world.tick_lag) +- return CS.finished +- diff --git a/code/datums/wires/mulebot.dm b/code/datums/wires/mulebot.dm index 00b2dd10b8..9aa2ca81e8 100644 --- a/code/datums/wires/mulebot.dm +++ b/code/datums/wires/mulebot.dm @@ -20,12 +20,12 @@ var/mob/living/simple_animal/bot/mulebot/M = holder switch(wire) if(WIRE_POWER1, WIRE_POWER2) - holder.visible_message("[bicon(M)] The charge light flickers.") + holder.visible_message("[icon2html(M, viewers(holder))] The charge light flickers.") if(WIRE_AVOIDANCE) - holder.visible_message("[bicon(M)] The external warning lights flash briefly.") + holder.visible_message("[icon2html(M, viewers(holder))] The external warning lights flash briefly.") if(WIRE_LOADCHECK) - holder.visible_message("[bicon(M)] The load platform clunks.") + holder.visible_message("[icon2html(M, viewers(holder))] The load platform clunks.") if(WIRE_MOTOR1, WIRE_MOTOR2) - holder.visible_message("[bicon(M)] The drive motor whines briefly.") + holder.visible_message("[icon2html(M, viewers(holder))] The drive motor whines briefly.") else - holder.visible_message("[bicon(M)] You hear a radio crackle.") \ No newline at end of file + holder.visible_message("[icon2html(M, viewers(holder))] You hear a radio crackle.") \ No newline at end of file diff --git a/code/datums/wires/particle_accelerator.dm b/code/datums/wires/particle_accelerator.dm index 436b8be3ec..d38147f1ec 100644 --- a/code/datums/wires/particle_accelerator.dm +++ b/code/datums/wires/particle_accelerator.dm @@ -25,7 +25,7 @@ if(WIRE_INTERFACE) C.interface_control = !C.interface_control if(WIRE_LIMIT) - C.visible_message("[bicon(C)][C] makes a large whirring noise.") + C.visible_message("[icon2html(C, viewers(holder))][C] makes a large whirring noise.") /datum/wires/particle_accelerator/control_box/on_cut(wire, mend) var/obj/machinery/particle_accelerator/control_box/C = holder diff --git a/code/datums/wires/syndicatebomb.dm b/code/datums/wires/syndicatebomb.dm index 78acc42eb0..043110f5d3 100644 --- a/code/datums/wires/syndicatebomb.dm +++ b/code/datums/wires/syndicatebomb.dm @@ -19,21 +19,21 @@ switch(wire) if(WIRE_BOOM) if(B.active) - holder.visible_message("[bicon(B)] An alarm sounds! It's go-") + holder.visible_message("[icon2html(B, viewers(holder))] An alarm sounds! It's go-") B.explode_now = TRUE tell_admins(B) if(WIRE_UNBOLT) - holder.visible_message("[bicon(B)] The bolts spin in place for a moment.") + holder.visible_message("[icon2html(B, viewers(holder))] The bolts spin in place for a moment.") if(WIRE_DELAY) if(B.delayedbig) - holder.visible_message("[bicon(B)] The bomb has already been delayed.") + holder.visible_message("[icon2html(B, viewers(holder))] The bomb has already been delayed.") else - holder.visible_message("[bicon(B)] The bomb chirps.") + holder.visible_message("[icon2html(B, viewers(holder))] The bomb chirps.") playsound(B, 'sound/machines/chime.ogg', 30, 1) B.detonation_timer += 300 B.delayedbig = TRUE if(WIRE_PROCEED) - holder.visible_message("[bicon(B)] The bomb buzzes ominously!") + holder.visible_message("[icon2html(B, viewers(holder))] The bomb buzzes ominously!") playsound(B, 'sound/machines/buzz-sigh.ogg', 30, 1) var/seconds = B.seconds_remaining() if(seconds >= 61) // Long fuse bombs can suddenly become more dangerous if you tinker with them. @@ -44,13 +44,13 @@ B.detonation_timer = world.time + 100 if(WIRE_ACTIVATE) if(!B.active && !B.defused) - holder.visible_message("[bicon(B)] You hear the bomb start ticking!") + holder.visible_message("[icon2html(B, viewers(holder))] You hear the bomb start ticking!") B.activate() B.update_icon() else if(B.delayedlittle) - holder.visible_message("[bicon(B)] Nothing happens.") + holder.visible_message("[icon2html(B, viewers(holder))] Nothing happens.") else - holder.visible_message("[bicon(B)] The bomb seems to hesitate for a moment.") + holder.visible_message("[icon2html(B, viewers(holder))] The bomb seems to hesitate for a moment.") B.detonation_timer += 100 B.delayedlittle = TRUE @@ -62,24 +62,24 @@ B.defused = FALSE // Cutting and mending all the wires of an inactive bomb will thus cure any sabotage. else if(B.active) - holder.visible_message("[bicon(B)] An alarm sounds! It's go-") + holder.visible_message("[icon2html(B, viewers(holder))] An alarm sounds! It's go-") B.explode_now = TRUE tell_admins(B) else B.defused = TRUE if(WIRE_UNBOLT) if(!mend && B.anchored) - holder.visible_message("[bicon(B)] The bolts lift out of the ground!") + holder.visible_message("[icon2html(B, viewers(holder))] The bolts lift out of the ground!") playsound(B, 'sound/effects/stealthoff.ogg', 30, 1) B.anchored = FALSE if(WIRE_PROCEED) if(!mend && B.active) - holder.visible_message("[bicon(B)] An alarm sounds! It's go-") + holder.visible_message("[icon2html(B, viewers(holder))] An alarm sounds! It's go-") B.explode_now = TRUE tell_admins(B) if(WIRE_ACTIVATE) if(!mend && B.active) - holder.visible_message("[bicon(B)] The timer stops! The bomb has been defused!") + holder.visible_message("[icon2html(B, viewers(holder))] The timer stops! The bomb has been defused!") B.active = FALSE B.defused = TRUE B.update_icon() diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 6a00f26ffc..d931f808b8 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -270,7 +270,7 @@ f_name = "a " f_name += "blood-stained [name]!" - to_chat(user, "[bicon(src)] That's [f_name]") + to_chat(user, "[icon2html(src, user)] That's [f_name]") if(desc) to_chat(user, desc) diff --git a/code/game/gamemodes/clock_cult/clock_mobs.dm b/code/game/gamemodes/clock_cult/clock_mobs.dm index 97a68fd321..abeb183ab0 100644 --- a/code/game/gamemodes/clock_cult/clock_mobs.dm +++ b/code/game/gamemodes/clock_cult/clock_mobs.dm @@ -38,7 +38,7 @@ /mob/living/simple_animal/hostile/clockwork/examine(mob/user) var/t_He = p_they(TRUE) var/t_s = p_s() - var/msg = "*---------*\nThis is [bicon(src)] \a [src]!\n" + var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src]!\n" msg += "[desc]\n" if(health < maxHealth) msg += "" diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/game/gamemodes/devil/true_devil/_true_devil.dm index 1a0cfcd231..090b926dbf 100644 --- a/code/game/gamemodes/devil/true_devil/_true_devil.dm +++ b/code/game/gamemodes/devil/true_devil/_true_devil.dm @@ -61,15 +61,15 @@ /mob/living/carbon/true_devil/examine(mob/user) - var/msg = "*---------*\nThis is [bicon(src)] [src]!\n" + var/msg = "*---------*\nThis is [icon2html(src, user)] [src]!\n" //Left hand items for(var/obj/item/I in held_items) if(!(I.flags & ABSTRACT)) if(I.blood_DNA) - msg += "It is holding [bicon(I)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!\n" + msg += "It is holding [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!\n" else - msg += "It is holding [bicon(I)] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "It is holding [icon2html(I, user)] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n" //Braindead if(!client && stat != DEAD) diff --git a/code/game/gamemodes/gang/gang_datum.dm b/code/game/gamemodes/gang/gang_datum.dm index ba18ad7578..b7b20a7311 100644 --- a/code/game/gamemodes/gang/gang_datum.dm +++ b/code/game/gamemodes/gang/gang_datum.dm @@ -191,7 +191,7 @@ var/mob/living/mob = get(tool.loc, /mob/living) if(mob && mob.mind && mob.stat == CONSCIOUS) if(mob.mind.gang_datum == src) - to_chat(mob, "[bicon(tool)] [message]") + to_chat(mob, "[icon2html(tool, mob)] [message]") return diff --git a/code/game/gamemodes/gang/gang_pen.dm b/code/game/gamemodes/gang/gang_pen.dm index 4357f31e83..e52db2ec5f 100644 --- a/code/game/gamemodes/gang/gang_pen.dm +++ b/code/game/gamemodes/gang/gang_pen.dm @@ -66,4 +66,4 @@ cooldown = 0 icon_state = "pen" var/mob/M = get(src, /mob) - to_chat(M, "[bicon(src)] [src][(src.loc == M)?(""):(" in your [src.loc]")] vibrates softly. It is ready to be used again.") + to_chat(M, "[icon2html(src, M)] [src][(src.loc == M)?(""):(" in your [src.loc]")] vibrates softly. It is ready to be used again.") diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index 601a1f1c0d..0be52e6033 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -110,7 +110,7 @@ if(!message || !can_use(user)) return if(user.z > 2) - to_chat(user, "[bicon(src)]Error: Station out of range.") + to_chat(user, "[icon2html(src, user)]Error: Station out of range.") return var/list/members = list() members += gang.gangsters @@ -179,35 +179,35 @@ gang.message_gangtools("[usr] is attempting to recall the emergency shuttle.") recalling = 1 - to_chat(loc, "[bicon(src)]Generating shuttle recall order with codes retrieved from last call signal...") + to_chat(loc, "[icon2html(src, loc)]Generating shuttle recall order with codes retrieved from last call signal...") sleep(rand(100,300)) if(SSshuttle.emergency.mode != SHUTTLE_CALL) //Shuttle can only be recalled when it's moving to the station - to_chat(user, "[bicon(src)]Emergency shuttle cannot be recalled at this time.") + to_chat(user, "[icon2html(src, user)]Emergency shuttle cannot be recalled at this time.") recalling = 0 return 0 - to_chat(loc, "[bicon(src)]Shuttle recall order generated. Accessing station long-range communication arrays...") + to_chat(loc, "[icon2html(src, loc)]Shuttle recall order generated. Accessing station long-range communication arrays...") sleep(rand(100,300)) if(!gang.dom_attempts) - to_chat(user, "[bicon(src)]Error: Unable to access communication arrays. Firewall has logged our signature and is blocking all further attempts.") + to_chat(user, "[icon2html(src, user)]Error: Unable to access communication arrays. Firewall has logged our signature and is blocking all further attempts.") recalling = 0 return 0 var/turf/userturf = get_turf(user) if(userturf.z != ZLEVEL_STATION) //Shuttle can only be recalled while on station - to_chat(user, "[\bicon(src)]Error: Device out of range of station communication arrays.") + to_chat(user, "[icon2html(src, user)]Error: Device out of range of station communication arrays.") recalling = 0 return 0 var/datum/station_state/end_state = new /datum/station_state() end_state.count() if((100 * GLOB.start_state.score(end_state)) < 80) //Shuttle cannot be recalled if the station is too damaged - to_chat(user, "[bicon(src)]Error: Station communication systems compromised. Unable to establish connection.") + to_chat(user, "[icon2html(src, user)]Error: Station communication systems compromised. Unable to establish connection.") recalling = 0 return 0 - to_chat(loc, "[bicon(src)]Comm arrays accessed. Broadcasting recall signal...") + to_chat(loc, "[icon2html(src, loc)]Comm arrays accessed. Broadcasting recall signal...") sleep(rand(100,300)) @@ -220,7 +220,7 @@ gang.recalls -= 1 return 1 - to_chat(loc, "[bicon(src)]No response recieved. Emergency shuttle cannot be recalled at this time.") + to_chat(loc, "[icon2html(src, loc)]No response recieved. Emergency shuttle cannot be recalled at this time.") return 0 /obj/item/device/gangtool/proc/can_use(mob/living/carbon/human/user) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 759c5f4454..16fb1f601d 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -288,7 +288,7 @@ text += "
    " text += "(Syndicates used [TC_uses] TC) [purchases]" if(TC_uses == 0 && station_was_nuked && !are_operatives_dead()) - text += "[bicon(icon('icons/badass.dmi', "badass"))]" + text += "[icon2html('icons/badass.dmi', world, "badass")]" to_chat(world, text) return 1 diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 3e6cca1ac5..3b91816ee9 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -124,7 +124,7 @@ text += " (used [TC_uses] TC) [purchases]" if(TC_uses==0 && traitorwin) var/static/icon/badass = icon('icons/badass.dmi', "badass") - text += "[bicon(badass)]" + text += "[icon2html(badass, world)]" text += objectives diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index bc5c8cbfa7..134c28571e 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -116,24 +116,24 @@ authenticated = FALSE auth_id = "\[NULL\]" if(href_list["restore_logging"]) - to_chat(usr, "[bicon(src)] Logging functionality restored from backup data.") + to_chat(usr, "[icon2html(src, usr)] Logging functionality restored from backup data.") emagged = FALSE LAZYADD(logs, "-=- Logging restored to full functionality at this point -=-") if(href_list["access_apc"]) playsound(src, "terminal_type", 50, 0) var/obj/machinery/power/apc/APC = locate(href_list["access_apc"]) in GLOB.apcs_list if(!APC || APC.aidisabled || APC.panel_open || QDELETED(APC)) - to_chat(usr, "[bicon(src)] APC does not return interface request. Remote access may be disabled.") + to_chat(usr, "[icon2html(src, usr)] APC does not return interface request. Remote access may be disabled.") return if(active_apc) - to_chat(usr, "[bicon(src)] Disconnected from [active_apc].") + to_chat(usr, "[icon2html(src, usr)] Disconnected from [active_apc].") active_apc.say("Remote access canceled. Interface locked.") playsound(active_apc, 'sound/machines/boltsdown.ogg', 25, 0) playsound(active_apc, 'sound/machines/terminal_alert.ogg', 50, 0) active_apc.locked = TRUE active_apc.update_icon() active_apc = null - to_chat(usr, "[bicon(src)] Connected to APC in [APC.area]. Interface request sent.") + to_chat(usr, "[icon2html(src, usr)] Connected to APC in [APC.area]. Interface request sent.") log_activity("remotely accessed APC in [APC.area]") APC.interact(usr, GLOB.not_incapacitated_state) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 26a7d3b729..352ddfa4db 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -414,10 +414,10 @@ customrecepient.tnote += "← From
    [customsender] ([customjob]):
    [custommessage]
    " if (!customrecepient.silent) playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1) - customrecepient.audible_message("[bicon(customrecepient)] *[customrecepient.ttone]*", null, 3) + customrecepient.audible_message("[icon2html(customrecepient, viewers(customrecepient))] *[customrecepient.ttone]*", null, 3) if( customrecepient.loc && ishuman(customrecepient.loc) ) var/mob/living/carbon/human/H = customrecepient.loc - to_chat(H, "[bicon(customrecepient)] Message from [customsender] ([customjob]), \"[custommessage]\" (Reply)") + to_chat(H, "[icon2html(customrecepient, viewers(H))] Message from [customsender] ([customjob]), \"[custommessage]\" (Reply)") log_talk(usr,"[key_name(usr)] (PDA: [customsender]) sent \"[custommessage]\" to [customrecepient.owner]",LOGPDA) customrecepient.cut_overlays() customrecepient.add_overlay(mutable_appearance('icons/obj/pda.dmi', "pda-r")) @@ -427,10 +427,10 @@ customrecepient.tnote += "← From [PDARec.owner] ([customjob]):
    [custommessage]
    " if (!customrecepient.silent) playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1) - customrecepient.audible_message("[bicon(customrecepient)] *[customrecepient.ttone]*", null, 3) + customrecepient.audible_message("[icon2html(customrecepient, viewers(customrecepient))] *[customrecepient.ttone]*", null, 3) if( customrecepient.loc && ishuman(customrecepient.loc) ) var/mob/living/carbon/human/H = customrecepient.loc - to_chat(H, "[bicon(customrecepient)] Message from [PDARec.owner] ([customjob]), \"[custommessage]\" (Reply)") + to_chat(H, "[icon2html(customrecepient, H)] Message from [PDARec.owner] ([customjob]), \"[custommessage]\" (Reply)") log_talk(usr,"[key_name(usr)] (PDA: [PDARec.owner]) sent \"[custommessage]\" to [customrecepient.owner]",LOGPDA) customrecepient.cut_overlays() customrecepient.add_overlay(mutable_appearance('icons/obj/pda.dmi', "pda-r")) diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm index ffcb36678a..ba4b7b53e3 100644 --- a/code/game/machinery/overview.dm +++ b/code/game/machinery/overview.dm @@ -146,7 +146,7 @@ var/icon/I2 = imap[2+(ix + icx*iy)*2] - //to_chat(world, "icon: [bicon(I)]") + //to_chat(world, "icon: [icon2html(I, world)]") I.DrawBox(colour, rx, ry, rx+1, ry+1) @@ -163,7 +163,7 @@ H.screen_loc = "[5 + i%icx],[6+ round(i/icx)]" - //to_chat(world, "[bicon(I)] at [H.screen_loc]") + //to_chat(world, "[icon2html(I, world)] at [H.screen_loc]") H.name = (i==0)?"maprefresh":"map" @@ -274,7 +274,7 @@ var/icon/I = imap[1+(ix + icx*iy)] - //to_chat(world, "icon: [bicon(I)]") + //to_chat(world, "icon: [icon2html(I, world)]") I.DrawBox(colour, rx, ry, rx, ry) @@ -289,7 +289,7 @@ H.screen_loc = "[5 + i%icx],[6+ round(i/icx)]" - //to_chat(world, "[bicon(I)] at [H.screen_loc]") + //to_chat(world, "[icon2html(I, world)] at [H.screen_loc]") H.name = (i==0)?"maprefresh":"map" diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 655483a255..56c4038a76 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -210,14 +210,14 @@ var/new_timer = input(user, "Please set the timer.", "Timer", "[timer_set]") as num if(in_range(src, user) && isliving(user)) //No running off and setting bombs from across the station timer_set = Clamp(new_timer, minimum_timer, maximum_timer) - src.loc.visible_message("[bicon(src)] timer set for [timer_set] seconds.") + src.loc.visible_message("[icon2html(src, viewers(src))] timer set for [timer_set] seconds.") if(alert(user,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, user) && isliving(user)) if(defused || active) if(defused) - src.loc.visible_message("[bicon(src)] Device error: User intervention required.") + src.loc.visible_message("[icon2html(src, viewers(src))] Device error: User intervention required.") return else - src.loc.visible_message("[bicon(src)] [timer_set] seconds until detonation, please clear the area.") + src.loc.visible_message("[icon2html(src, viewers(loc))] [timer_set] seconds until detonation, please clear the area.") activate() update_icon() add_fingerprint(user) @@ -333,7 +333,7 @@ var/obj/machinery/syndicatebomb/holder = loc if(istype(holder)) attempts++ - holder.loc.visible_message("[bicon(holder)] Alert: Bomb has detonated. Your score is now [defusals] for [attempts]. Resetting wires...") + holder.loc.visible_message("[icon2html(holder, viewers(holder))] Alert: Bomb has detonated. Your score is now [defusals] for [attempts]. Resetting wires...") reset() else qdel(src) @@ -343,7 +343,7 @@ if(istype(holder)) attempts++ defusals++ - holder.loc.visible_message("[bicon(holder)] Alert: Bomb has been defused. Your score is now [defusals] for [attempts]! Resetting wires in 5 seconds...") + holder.loc.visible_message("[icon2html(holder, viewers(holder))] Alert: Bomb has been defused. Your score is now [defusals] for [attempts]! Resetting wires in 5 seconds...") sleep(50) //Just in case someone is trying to remove the bomb core this gives them a little window to crowbar it out if(istype(holder)) reset() diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 4fdf06b530..dd8581af69 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -139,7 +139,7 @@ /obj/item/mecha_parts/mecha_equipment/proc/occupant_message(message) if(chassis) - chassis.occupant_message("[bicon(src)] [message]") + chassis.occupant_message("[icon2html(src, chassis.occupant)] [message]") return /obj/item/mecha_parts/mecha_equipment/proc/log_message(message) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 5564cd2c0a..b0c16dcfa7 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -262,7 +262,7 @@ if(equipment && equipment.len) to_chat(user, "It's equipped with:") for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) - to_chat(user, "[bicon(ME)] [ME]") + to_chat(user, "[icon2html(ME, user)] [ME]") //processing internal damage, temperature, air regulation, alert updates, lights power use. /obj/mecha/process() @@ -636,7 +636,7 @@ var/can_control_mech = 0 for(var/obj/item/mecha_parts/mecha_tracking/ai_control/A in trackers) can_control_mech = 1 - to_chat(user, "[bicon(src)] Status of [name]:\n[A.get_mecha_info()]") + to_chat(user, "[icon2html(src, user)] Status of [name]:\n[A.get_mecha_info()]") break if(!can_control_mech) to_chat(user, "You cannot control exosuits without AI control beacons installed.") @@ -1004,7 +1004,7 @@ /obj/mecha/proc/occupant_message(message as text) if(message) if(occupant && occupant.client) - to_chat(occupant, "[bicon(src)] [message]") + to_chat(occupant, "[icon2html(src, occupant)] [message]") return /obj/mecha/proc/log_message(message as text,red=null) diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 5127aa2285..72a721911f 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -169,7 +169,7 @@ . += "You recognise the footprints as belonging to:\n" for(var/shoe in shoe_types) var/obj/item/clothing/shoes/S = shoe - . += "some [initial(S.name)] [bicon(initial(S.icon))]\n" + . += "some [initial(S.name)] [icon2html(initial(S.icon), user)]\n" to_chat(user, .) diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index c9b524836f..ef4531b2d6 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -22,7 +22,7 @@ /obj/effect/mine/proc/triggermine(mob/victim) if(triggered) return - visible_message("[victim] sets off [bicon(src)] [src]!") + visible_message("[victim] sets off [icon2html(src, viewers(src))] [src]!") var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(3, 1, src) s.start() diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index bca1ccce81..9097d8add4 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -558,7 +558,7 @@ GLOBAL_LIST_EMPTY(PDAs) if (!silent) playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) - audible_message("[bicon(src)] *[ttone]*", null, 3) + audible_message("[icon2html(src, hearers(src))] *[ttone]*", null, 3) //Search for holder of the PDA. var/mob/living/L = null if(loc && isliving(loc)) @@ -575,7 +575,7 @@ GLOBAL_LIST_EMPTY(PDAs) hrefstart = "" hrefend = "" - to_chat(L, "[\bicon(src)] Message from [hrefstart][source.owner] ([source.ownjob])[hrefend], \"[msg.message]\"[msg.get_photo_ref()] (Reply)") + to_chat(L, "[icon2html(src)] Message from [hrefstart][source.owner] ([source.ownjob])[hrefend], \"[msg.message]\"[msg.get_photo_ref()] (Reply)") update_icon() add_overlay(icon_alert) diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index e5bca7eeac..f32f707204 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -88,27 +88,27 @@ if(isliving(loc)) var/mob/living/M = loc if(!emagged) - to_chat(M, "[bicon(src)] RADIATION PULSE DETECTED.") - to_chat(M, "[bicon(src)] Severity: [amount]") + to_chat(M, "[icon2html(src, M)] RADIATION PULSE DETECTED.") + to_chat(M, "[icon2html(src, M)] Severity: [amount]") else - to_chat(M, "[bicon(src)] !@%$AT!(N P!LS! D/TEC?ED.") - to_chat(M, "[bicon(src)] &!F2rity: <=[amount]#1") + to_chat(M, "[icon2html(src, M)] !@%$AT!(N P!LS! D/TEC?ED.") + to_chat(M, "[icon2html(src, M)] &!F2rity: <=[amount]#1") update_icon() /obj/item/device/geiger_counter/attack_self(mob/user) scanning = !scanning update_icon() - to_chat(user, "[bicon(src)] You switch [scanning ? "on" : "off"] [src].") + to_chat(user, "[icon2html(src, user)] You switch [scanning ? "on" : "off"] [src].") /obj/item/device/geiger_counter/attack(mob/living/M, mob/user) if(user.a_intent == INTENT_HELP) if(!emagged) user.visible_message("[user] scans [M] with [src].", "You scan [M]'s radiation levels with [src]...") if(!M.radiation) - to_chat(user, "[bicon(src)] Radiation levels within normal boundaries.") + to_chat(user, "[icon2html(src, user)] Radiation levels within normal boundaries.") return 1 else - to_chat(user, "[bicon(src)] Subject is irradiated. Radiation levels: [M.radiation].") + to_chat(user, "[icon2html(src, user)] Subject is irradiated. Radiation levels: [M.radiation].") return 1 else user.visible_message("[user] scans [M] with [src].", "You project [src]'s stored radiation into [M]'s body!") diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 348c6620cd..daaadeb797 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -527,7 +527,7 @@ return list(pick(messages)) /obj/item/toy/talking/proc/toy_talk(mob/user, message) - user.loc.visible_message("[bicon(src)] [message]") + user.loc.visible_message("[icon2html(src, viewers(user.loc))] [message]") if(chattering) chatter(message, phomeme, user) @@ -1082,7 +1082,7 @@ user.visible_message("[user] pulls back the string on [src].") icon_state = "[initial(icon_state)]_used" sleep(5) - audible_message("[bicon(src)] Hiss!") + audible_message("[icon2html(src, viewers(src))] Hiss!") var/list/possible_sounds = list('sound/voice/hiss1.ogg', 'sound/voice/hiss2.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss4.ogg') var/chosen_sound = pick(possible_sounds) playsound(get_turf(src), chosen_sound, 50, 1) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 6f2310303b..66e3e0317f 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -525,7 +525,7 @@ AI MODULES laws[1] = generate_ion_law() to_chat(user, "You press the button on [src].") playsound(user, 'sound/machines/click.ogg', 20, 1) - src.loc.visible_message("[bicon(src)] [laws[1]]") + src.loc.visible_message("[icon2html(src, viewers(loc))] [laws[1]]") /******************** Mother Drone ******************/ diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 3f89e593d5..e4a69dfab7 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -106,7 +106,7 @@ update_label() /obj/item/weapon/card/id/attack_self(mob/user) - user.visible_message("[user] shows you: [bicon(src)] [src.name].", \ + user.visible_message("[user] shows you: [icon2html(src, viewers(user))] [src.name].", \ "You show \the [src.name].") src.add_fingerprint(user) return diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index d2f5714d5e..e893fec6ac 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -37,10 +37,10 @@ out += "You'll need to get closer to see any more." return for(var/obj/item/I in loadedItems) - out += "[bicon(I)] It has \the [I] loaded." + out += "[icon2html(I, user)] It has \the [I] loaded." CHECK_TICK if(tank) - out += "[bicon(tank)] It has \the [tank] mounted onto it." + out += "[icon2html(tank, user)] It has \the [tank] mounted onto it." to_chat(user, out.Join("
    ")) /obj/item/weapon/pneumatic_cannon/attackby(obj/item/weapon/W, mob/user, params) diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm index 256cdc0433..77d7784852 100644 --- a/code/game/objects/items/weapons/powerfist.dm +++ b/code/game/objects/items/weapons/powerfist.dm @@ -26,7 +26,7 @@ to_chat(user, "You'll need to get closer to see any more.") return if(tank) - to_chat(user, "[bicon(tank)] It has \the [tank] mounted onto it.") + to_chat(user, "[icon2html(tank, user)] It has \the [tank] mounted onto it.") /obj/item/weapon/melee/powerfist/attackby(obj/item/weapon/W, mob/user, params) diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 1b2fa82e20..ff39c36b9b 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -33,7 +33,7 @@ prayer_type = "CULTIST PRAYER" deity = "Nar-Sie" - msg = "[bicon(cross)][prayer_type][deity ? " (to [deity])" : ""]: [ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]: [msg]" + msg = "[icon2html(cross, GLOB.admins)][prayer_type][deity ? " (to [deity])" : ""]: [ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]: [msg]" for(var/client/C in GLOB.admins) if(C.prefs.chat_toggles & CHAT_PRAYER) diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 2853fefcbf..03720d9d81 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -63,7 +63,7 @@ return /obj/item/device/onetankbomb/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here. - visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") + visible_message("[icon2html(src, viewers(src))] *beep* *beep*", "*beep* *beep*") sleep(10) if(!src) return diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index b454cbacfb..180cb55db6 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -59,7 +59,7 @@ health_scan = M.health if(health_scan <= alarm_health) pulse() - audible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") + audible_message("[icon2html(src, hearers(src))] *beep* *beep*", "*beep* *beep*") toggle_scan() return return diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index be1659546f..c196e984a2 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -99,7 +99,7 @@ if(!secured || !on || next_activate > world.time) return FALSE pulse(0) - audible_message("[bicon(src)] *beep* *beep*", null, 3) + audible_message("[icon2html(src, hearers(src))] *beep* *beep*", null, 3) next_activate = world.time + 30 /obj/item/device/assembly/infra/interact(mob/user)//TODO: change this this to the wire control panel diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 9cf534f975..556979070d 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -56,7 +56,7 @@ if(!secured || next_activate > world.time) return 0 pulse(0) - audible_message("[bicon(src)] *beep* *beep*", null, 3) + audible_message("[icon2html(src, hearers(src))] *beep* *beep*", null, 3) next_activate = world.time + 30 diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index b3f25ac8cf..7c8efb14d5 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -143,7 +143,7 @@ Code: if(!(src.wires & WIRE_RADIO_RECEIVE)) return 0 pulse(1) - audible_message("[bicon(src)] *beep* *beep*", null, 1) + audible_message("[icon2html(src, hearers(src))] *beep* *beep*", null, 1) return diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 8938ecbe9d..9a959bc544 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -45,7 +45,7 @@ if(!secured || next_activate > world.time) return FALSE pulse(0) - audible_message("[bicon(src)] *beep* *beep*", null, 3) + audible_message("[icon2html(src, hearers(src))] *beep* *beep*", null, 3) if(loop) timing = 1 update_icon() diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 81fecc6dda..4f576dd3e7 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -138,6 +138,13 @@ You can set verify to TRUE if you want send() to sleep until the client has the /proc/register_asset(var/asset_name, var/asset) SSassets.cache[asset_name] = asset +//Generated names do not include file extention. +//Used mainly for code that deals with assets in a generic way +//The same asset will always lead to the same asset name +/proc/generate_asset_name(var/file) + return "asset.[md5(fcopy_rsc(file))]" + + //These datums are used to populate the asset cache, the proc "register()" does this. //all of our asset datums, used for referring to these later @@ -170,6 +177,33 @@ GLOBAL_LIST_EMPTY(asset_datums) send_asset_list(client,assets,verify) +//Generates assets based on iconstates of a single icon +/datum/asset/simple/icon_states + var/icon + var/direction = SOUTH + var/frame = 1 + var/movement_states = FALSE + + var/prefix = "default" //asset_name = "[prefix].[icon_state_name].png" + var/generic_icon_names = FALSE //generate icon filenames using generate_asset_name() instead the above format + + verify = FALSE + +/datum/asset/simple/icon_states/register() + for(var/icon_state_name in icon_states(icon)) + var/asset = icon(icon, icon_state_name, direction, frame, movement_states) + if (!asset) + continue + asset = fcopy_rsc(asset) //dedupe + var/asset_name = sanitize_filename("[prefix].[icon_state_name].png") + if (generic_icon_names) + asset_name = "[generate_asset_name(asset)].png" + + assets[asset_name] = asset + + ..() + + //DEFINITIONS FOR ASSET DATUMS START HERE. /datum/asset/simple/tgui @@ -306,3 +340,14 @@ GLOBAL_LIST_EMPTY(asset_datums) for(var/path in typesof(/datum/html_interface)) var/datum/html_interface/hi = new path() hi.registerResources() + +//this exists purely to avoid meta by pre-loading all language icons. +/datum/asset/language/register() + for(var/path in typesof(/datum/language)) + set waitfor = FALSE + var/datum/language/L = new path () + L.get_icon() + +/datum/asset/simple/icon_states/emojis + icon = 'icons/emoji.dmi' + generic_icon_names = TRUE diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 4455af7ca9..44b518e7b8 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -642,7 +642,7 @@ GLOBAL_LIST(external_rsc_urls) ) spawn (10) //removing this spawn causes all clients to not get verbs. //Precache the client with all other assets slowly, so as to not block other browse() calls - getFilesSlow(src, SSassets.cache, register_asset = FALSE) + getFilesSlow(src, SSassets.preload, register_asset = FALSE) //Hook, override it to run code when dir changes diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index aeb1a7fdcf..cd0f893fa6 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -55,7 +55,7 @@ var/keyname = key if(prefs.unlock_content) if(prefs.toggles & MEMBER_PUBLIC) - keyname = "[bicon(icon('icons/member_content.dmi', "blag"))][keyname]" + keyname = "[icon2html('icons/member_content.dmi', world, "blag")][keyname]" for(var/client/C in GLOB.clients) if(C.prefs.chat_toggles & CHAT_OOC) diff --git a/code/modules/clothing/spacesuits/flightsuit.dm b/code/modules/clothing/spacesuits/flightsuit.dm index 9888be0494..e0d2907ae8 100644 --- a/code/modules/clothing/spacesuits/flightsuit.dm +++ b/code/modules/clothing/spacesuits/flightsuit.dm @@ -138,7 +138,7 @@ targ = mob_override if(!istype(targ)) return - to_chat(targ, "[bicon(src)]|[message]") + to_chat(targ, "[icon2html(src, targ)]|[message]") /obj/item/device/flightpack/proc/sync_processing(datum/controller/subsystem/processing/flightpacks/FPS) processing_mode = FPS.flightsuit_processing @@ -924,7 +924,7 @@ targ = loc if(!istype(targ)) return - to_chat(targ, "[bicon(src)]|[message]") + to_chat(targ, "[icon2html(src, targ)]|[message]") /obj/item/clothing/suit/space/hardsuit/flightsuit/examine(mob/user) ..() diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 00f622b751..4dcc0207b9 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -47,7 +47,7 @@ /obj/item/clothing/head/helmet/space/hardsuit/proc/display_visor_message(var/msg) var/mob/wearer = loc if(msg && ishuman(wearer)) - wearer.show_message("[bicon(src)][msg]", 1) + wearer.show_message("[icon2html(src, wearer)][msg]", 1) /obj/item/clothing/head/helmet/space/hardsuit/rad_act(severity) ..() diff --git a/code/modules/emoji/emoji_parse.dm b/code/modules/emoji/emoji_parse.dm index 5ecadbe09c..58f261f8cc 100644 --- a/code/modules/emoji/emoji_parse.dm +++ b/code/modules/emoji/emoji_parse.dm @@ -16,7 +16,7 @@ if(search) emoji = lowertext(copytext(text, pos+1, search)) if(emoji in emojis) - parsed += bicon(icon('icons/emoji.dmi', emoji)) + parsed += icon2html('icons/emoji.dmi', world, emoji) pos = search + 1 else parsed += copytext(text, pos, search) diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm index b5c02946e7..f519892dda 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm @@ -97,7 +97,7 @@ var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = O if(!I.ice_creamed) if(product_types[dispense_flavour] > 0) - src.visible_message("[bicon(src)] [user] scoops delicious [flavour_name] ice cream into [I].") + visible_message("[icon2html(src, viewers(src))] [user] scoops delicious [flavour_name] ice cream into [I].") product_types[dispense_flavour] -= 1 I.add_ice_cream(flavour_name) // if(beaker) diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index cde68b86e2..54c2154b42 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -101,7 +101,7 @@ return open = !open if(open && !bomb_defused) - audible_message("[bicon(src)] *beep*") + audible_message("[icon2html(src, hearers(src))] *beep*") bomb_active = TRUE START_PROCESSING(SSobj, src) update_icon() diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index 7b236ea56f..7dd0fd5bb3 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -177,18 +177,93 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic var/list/partial = splittext(iconData, "{") return replacetext(copytext(partial[2], 3, -5), "\n", "") -/proc/bicon(thing) +/proc/icon2html(thing, target, icon_state, dir, frame = 1, moving) + if (!thing) + return + var/static/datum/callback/CB = CALLBACK(GLOBAL_PROC, .proc/send_asset) + + var/key + var/icon/I = thing + if (!target) + return + if (target == world) + target = GLOB.clients + + var/list/targets + if (!islist(target)) + targets = list(target) + else + targets = target + if (!targets.len) + return + debug_usr("start") + if (!isicon(I)) + debug_usr("not icon") + if (isfile(thing)) //special snowflake + debug_usr("file") + var/name = sanitize_filename("bicon.[thing]") + debug_usr("file:[name]") + register_asset(name, thing) + var/list/callbacks + var/list/callback_args = list() + for (var/thing2 in targets) + callbacks += CB + callback_args[++callback_args.len] = list(thing2, name, TRUE) + callback_select(callbacks, callback_args, savereturns = FALSE) + return "" + debug_usr("not file") + var/atom/A + if (isnull(dir)) + dir = A.dir + if (isnull(icon_state)) + icon_state = A.icon_state + I = A.icon + if (ishuman(thing)) // Shitty workaround for a BYOND issue. + debug_usr("human") + var/icon/temp = I + I = icon() + I.Insert(temp, dir = SOUTH) + dir = SOUTH + else + debug_usr("icon") + if (isnull(dir)) + dir = SOUTH + if (isnull(icon_state)) + icon_state = "" + + I = icon(I, icon_state, dir, frame) + + key = sanitize_filename("bicon.[md5(icon2base64(I))].[icon_state].[dir].png") + debug_usr("key:[key]") + register_asset(key, I) + var/list/callbacks = list() + var/list/callback_args = list() + for (var/thing2 in targets) + callbacks += CB + callback_args[++callback_args.len] = list(thing2, key, TRUE) + + callback_select(callbacks, callback_args, savereturns = FALSE) + return "" + +/proc/icon2base64html(thing) if (!thing) return var/static/list/bicon_cache = list() if (isicon(thing)) var/icon/I = thing - var/icon_md5 = md5(I) - if (!bicon_cache[icon_md5]) // Doesn't exist yet, make it. - I = icon(I) //copy it - I.Scale(16,16) //scale it - bicon_cache[icon_md5] = icon2base64(thing) //base64 it - return "" + var/icon_base64 = icon2base64(I) + + if (I.Height() > world.icon_size || I.Width() > world.icon_size) + var/icon_md5 = md5(icon_base64) + debug_admins(icon_md5) + icon_base64 = bicon_cache[icon_md5] + if (!icon_base64) // Doesn't exist yet, make it. + I = icon(I) + I.Scale(world.icon_size, world.icon_size) + bicon_cache[icon_md5] = icon_base64 = icon2base64(I) + + + return "" // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. var/atom/A = thing @@ -197,25 +272,28 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic if (!bicon_cache[key]) // Doesn't exist, make it. var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) - I.Scale(16,16) if (ishuman(thing)) // Shitty workaround for a BYOND issue. var/icon/temp = I I = icon() I.Insert(temp, dir = SOUTH) + + if (I.Height() > world.icon_size || I.Width() > world.icon_size) + I.Scale(world.icon_size, world.icon_size) + bicon_cache[key] = icon2base64(I, key) return "" -//Costlier version of bicon() that uses getFlatIcon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs. -/proc/costly_bicon(thing) +//Costlier version of icon2html() that uses getFlatIcon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs. +/proc/costly_icon2html(thing, target) if (!thing) return if (isicon(thing)) - return bicon(thing) + return icon2html(thing, target) var/icon/I = getFlatIcon(thing) - return bicon(I) + return icon2html(I, target) /proc/to_chat(target, message) if(!target) diff --git a/code/modules/goonchat/browserOutput.dm.rej b/code/modules/goonchat/browserOutput.dm.rej new file mode 100644 index 0000000000..231def1c9a --- /dev/null +++ b/code/modules/goonchat/browserOutput.dm.rej @@ -0,0 +1,137 @@ +diff a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm (rejected hunks) +@@ -166,135 +166,6 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic + + //Global chat procs + +-//Converts an icon to base64. Operates by putting the icon in the iconCache savefile, +-// exporting it as text, and then parsing the base64 from that. +-// (This relies on byond automatically storing icons in savefiles as base64) +-/proc/icon2base64(icon/icon, iconKey = "misc") +- if (!isicon(icon)) +- return FALSE +- WRITE_FILE(GLOB.iconCache[iconKey], icon) +- var/iconData = GLOB.iconCache.ExportText(iconKey) +- var/list/partial = splittext(iconData, "{") +- return replacetext(copytext(partial[2], 3, -5), "\n", "") +- +-/proc/icon2html(thing, target, icon_state, dir, frame = 1, moving) +- if (!thing) +- return +- var/static/datum/callback/CB = CALLBACK(GLOBAL_PROC, .proc/send_asset) +- +- var/key +- var/icon/I = thing +- if (!target) +- return +- if (target == world) +- target = GLOB.clients +- +- var/list/targets +- if (!islist(target)) +- targets = list(target) +- else +- targets = target +- if (!targets.len) +- return +- debug_usr("start") +- if (!isicon(I)) +- debug_usr("not icon") +- if (isfile(thing)) //special snowflake +- debug_usr("file") +- var/name = sanitize_filename("bicon.[thing]") +- debug_usr("file:[name]") +- register_asset(name, thing) +- var/list/callbacks +- var/list/callback_args = list() +- for (var/thing2 in targets) +- callbacks += CB +- callback_args[++callback_args.len] = list(thing2, name, TRUE) +- callback_select(callbacks, callback_args, savereturns = FALSE) +- return "" +- debug_usr("not file") +- var/atom/A +- if (isnull(dir)) +- dir = A.dir +- if (isnull(icon_state)) +- icon_state = A.icon_state +- I = A.icon +- if (ishuman(thing)) // Shitty workaround for a BYOND issue. +- debug_usr("human") +- var/icon/temp = I +- I = icon() +- I.Insert(temp, dir = SOUTH) +- dir = SOUTH +- else +- debug_usr("icon") +- if (isnull(dir)) +- dir = SOUTH +- if (isnull(icon_state)) +- icon_state = "" +- +- I = icon(I, icon_state, dir, frame) +- +- key = sanitize_filename("bicon.[md5(icon2base64(I))].[icon_state].[dir].png") +- debug_usr("key:[key]") +- register_asset(key, I) +- var/list/callbacks = list() +- var/list/callback_args = list() +- for (var/thing2 in targets) +- callbacks += CB +- callback_args[++callback_args.len] = list(thing2, key, TRUE) +- +- callback_select(callbacks, callback_args, savereturns = FALSE) +- return "" +- +-/proc/icon2base64html(thing) +- if (!thing) +- return +- var/static/list/bicon_cache = list() +- if (isicon(thing)) +- var/icon/I = thing +- var/icon_base64 = icon2base64(I) +- +- if (I.Height() > world.icon_size || I.Width() > world.icon_size) +- var/icon_md5 = md5(icon_base64) +- debug_admins(icon_md5) +- icon_base64 = bicon_cache[icon_md5] +- if (!icon_base64) // Doesn't exist yet, make it. +- I = icon(I) +- I.Scale(world.icon_size, world.icon_size) +- bicon_cache[icon_md5] = icon_base64 = icon2base64(I) +- +- +- return "" +- +- // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. +- var/atom/A = thing +- var/key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" +- +- +- if (!bicon_cache[key]) // Doesn't exist, make it. +- var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) +- if (ishuman(thing)) // Shitty workaround for a BYOND issue. +- var/icon/temp = I +- I = icon() +- I.Insert(temp, dir = SOUTH) +- +- if (I.Height() > world.icon_size || I.Width() > world.icon_size) +- I.Scale(world.icon_size, world.icon_size) +- +- bicon_cache[key] = icon2base64(I, key) +- +- return "" +- +-//Costlier version of icon2html() that uses getFlatIcon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs. +-/proc/costly_icon2html(thing, target) +- if (!thing) +- return +- +- if (isicon(thing)) +- return icon2html(thing, target) +- +- var/icon/I = getFlatIcon(thing) +- return icon2html(I, target) +- + /proc/to_chat(target, message) + if(!target) + return diff --git a/code/modules/goonchat/browserassets/css/browserOutput.css b/code/modules/goonchat/browserassets/css/browserOutput.css index ea4c169f0e..7c42972a10 100644 --- a/code/modules/goonchat/browserassets/css/browserOutput.css +++ b/code/modules/goonchat/browserassets/css/browserOutput.css @@ -28,10 +28,14 @@ img { margin: 0; padding: 0; line-height: 1; + -ms-interpolation-mode: nearest-neighbor; + image-rendering: pixelated; } img.icon { - width: 16px; - height: 16px; + height: 1em; + min-height: 16px; + width: auto; + vertical-align: bottom; } a {color: #0000ff;} @@ -357,7 +361,6 @@ h1.alert, h2.alert {color: #000000;} .clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;} .his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;} -BIG IMG.icon {width: 32px; height: 32px;} .memo {color: #638500; text-align: center;} .memoedit {text-align: center; font-size: 16px;} diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js index 59b152ab3b..e6e0c1d6fa 100644 --- a/code/modules/goonchat/browserassets/js/browserOutput.js +++ b/code/modules/goonchat/browserassets/js/browserOutput.js @@ -29,6 +29,8 @@ var opts = { 'messageLimit': 2053, //A limit...for the messages... 'scrollSnapTolerance': 10, //If within x pixels of bottom 'clickTolerance': 10, //Keep focus if outside x pixels of mousedown position on mouseup + 'imageRetryDelay': 50, //how long between attempts to reload images (in ms) + 'imageRetryLimit': 50, //how many attempts should we make? 'popups': 0, //Amount of popups opened ever 'wasd': false, //Is the user in wasd mode? 'chatMode': 'default', //The mode the chat is in @@ -146,6 +148,23 @@ function highlightTerms(el) { el.innerHTML = newText; } } + +function iconError(E) { + var that = this; + setTimeout(function() { + var attempts = $(that).data('reload_attempts'); + if (typeof attempts === 'undefined' || !attempts) { + attempts = 1; + } + if (attempts > opts.imageRetryLimit) + return; + var src = that.src; + that.src = null; + that.src = src+'#'+attempts; + $(that).data('reload_attempts', ++attempts); + }, opts.imageRetryDelay); +} + //Send a message to the client function output(message, flag) { if (typeof message === 'undefined') { @@ -271,7 +290,7 @@ function output(message, flag) { entry.innerHTML = message.trim(); $messages[0].appendChild(entry); - + $(entry).find("img.icon").error(iconError); //Actually do the snap if (!filteredOut && atBottom) { $('body,html').scrollTop($messages.outerHeight()); @@ -861,7 +880,11 @@ $(function() { $messages.empty(); opts.messageCount = 0; }); - + + $('img.icon').error(iconError); + + + /***************************************** * diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm index 2ad7f0549c..8b51429bd3 100644 --- a/code/modules/language/language.dm +++ b/code/modules/language/language.dm @@ -35,7 +35,7 @@ return TRUE /datum/language/proc/get_icon() - return "[bicon(icon(icon, icon_state))]" + return "[icon2html(icon, world, icon_state)]" /datum/language/proc/get_random_name(gender, name_count=2, syllable_count=4, syllable_divisor=2) if(!syllables || !syllables.len) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index ebc349cefc..e30556db30 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -6,26 +6,26 @@ var/t_has = p_have() var/t_is = p_are() - var/msg = "*---------*\nThis is [bicon(src)] \a [src]!\n" + var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src]!\n" if (handcuffed) - msg += "[t_He] [t_is] [bicon(handcuffed)] handcuffed!\n" + msg += "[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!\n" if (head) - msg += "[t_He] [t_is] wearing [bicon(head)] \a [src.head] on [t_his] head. \n" + msg += "[t_He] [t_is] wearing [icon2html(head, user)] \a [src.head] on [t_his] head. \n" if (wear_mask) - msg += "[t_He] [t_is] wearing [bicon(wear_mask)] \a [src.wear_mask] on [t_his] face.\n" + msg += "[t_He] [t_is] wearing [icon2html(wear_mask, user)] \a [src.wear_mask] on [t_his] face.\n" if (wear_neck) - msg += "[t_He] [t_is] wearing [bicon(wear_neck)] \a [src.wear_neck] around [t_his] neck.\n" + msg += "[t_He] [t_is] wearing [icon2html(wear_neck, user)] \a [src.wear_neck] around [t_his] neck.\n" for(var/obj/item/I in held_items) if(!(I.flags & ABSTRACT)) if(I.blood_DNA) - msg += "[t_He] [t_is] holding [bicon(I)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in [t_his] [get_held_index_name(get_held_index_of_item(I))]!\n" + msg += "[t_He] [t_is] holding [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in [t_his] [get_held_index_name(get_held_index_of_item(I))]!\n" else - msg += "[t_He] [t_is] holding [bicon(I)] \a [I] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "[t_He] [t_is] holding [icon2html(I, user)] \a [I] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" if (back) - msg += "[t_He] [t_has] [bicon(back)] \a [src.back] on [t_his] back.\n" + msg += "[t_He] [t_has] [icon2html(back, user)] \a [src.back] on [t_his] back.\n" var/appears_dead = 0 if (stat == DEAD) appears_dead = 1 diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 94732a349d..c2bec849e2 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -19,55 +19,55 @@ if(istype(w_uniform, /obj/item/clothing/under)) var/obj/item/clothing/under/U = w_uniform if(U.attached_accessory) - accessory_msg += " with [bicon(U.attached_accessory)] \a [U.attached_accessory]" + accessory_msg += " with [icon2html(U.attached_accessory, user)] \a [U.attached_accessory]" if(w_uniform.blood_DNA) - msg += "[t_He] [t_is] wearing \icon[w_uniform] [w_uniform.gender==PLURAL?"some":"a"] blood-stained [w_uniform.name][accessory_msg]!\n" + msg += "[t_He] [t_is] wearing [icon2html(w_uniform, user)] [w_uniform.gender==PLURAL?"some":"a"] blood-stained [w_uniform.name][accessory_msg]!\n" else - msg += "[t_He] [t_is] wearing [bicon(w_uniform)] \a [w_uniform][accessory_msg].\n" + msg += "[t_He] [t_is] wearing [icon2html(w_uniform, user)] \a [w_uniform][accessory_msg].\n" //head if(head) if(head.blood_DNA) - msg += "[t_He] [t_is] wearing [bicon(head)] [head.gender==PLURAL?"some":"a"] blood-stained [head.name] on [t_his] head!\n" + msg += "[t_He] [t_is] wearing [icon2html(head, user)] [head.gender==PLURAL?"some":"a"] blood-stained [head.name] on [t_his] head!\n" else - msg += "[t_He] [t_is] wearing [bicon(head)] \a [head] on [t_his] head.\n" + msg += "[t_He] [t_is] wearing [icon2html(head, user)] \a [head] on [t_his] head.\n" //suit/armor if(wear_suit) if(wear_suit.blood_DNA) - msg += "[t_He] [t_is] wearing [bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] blood-stained [wear_suit.name]!\n" + msg += "[t_He] [t_is] wearing [icon2html(wear_suit, user)] [wear_suit.gender==PLURAL?"some":"a"] blood-stained [wear_suit.name]!\n" else - msg += "[t_He] [t_is] wearing [bicon(wear_suit)] \a [wear_suit].\n" + msg += "[t_He] [t_is] wearing [icon2html(wear_suit, user)] \a [wear_suit].\n" //suit/armor storage if(s_store) if(s_store.blood_DNA) - msg += "[t_He] [t_is] carrying [bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] blood-stained [s_store.name] on [t_his] [wear_suit.name]!\n" + msg += "[t_He] [t_is] carrying [icon2html(s_store, user)] [s_store.gender==PLURAL?"some":"a"] blood-stained [s_store.name] on [t_his] [wear_suit.name]!\n" else - msg += "[t_He] [t_is] carrying [bicon(s_store)] \a [s_store] on [t_his] [wear_suit.name].\n" + msg += "[t_He] [t_is] carrying [icon2html(s_store, user)] \a [s_store] on [t_his] [wear_suit.name].\n" //back if(back) if(back.blood_DNA) - msg += "[t_He] [t_has] [bicon(back)] [back.gender==PLURAL?"some":"a"] blood-stained [back] on [t_his] back.\n" + msg += "[t_He] [t_has] [icon2html(back, user)] [back.gender==PLURAL?"some":"a"] blood-stained [back] on [t_his] back.\n" else - msg += "[t_He] [t_has] [bicon(back)] \a [back] on [t_his] back.\n" + msg += "[t_He] [t_has] [icon2html(back, user)] \a [back] on [t_his] back.\n" //Hands for(var/obj/item/I in held_items) if(!(I.flags & ABSTRACT)) if(I.blood_DNA) - msg += "[t_He] [t_is] holding [bicon(I)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in [t_his] [get_held_index_name(get_held_index_of_item(I))]!\n" + msg += "[t_He] [t_is] holding [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in [t_his] [get_held_index_name(get_held_index_of_item(I))]!\n" else - msg += "[t_He] [t_is] holding [bicon(I)] \a [I] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "[t_He] [t_is] holding [icon2html(I, user)] \a [I] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" //gloves if(gloves && !(slot_gloves in obscured)) if(gloves.blood_DNA) - msg += "[t_He] [t_has] [bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] blood-stained [gloves.name] on [t_his] hands!\n" + msg += "[t_He] [t_has] [icon2html(gloves, user)] [gloves.gender==PLURAL?"some":"a"] blood-stained [gloves.name] on [t_his] hands!\n" else - msg += "[t_He] [t_has] [bicon(gloves)] \a [gloves] on [t_his] hands.\n" + msg += "[t_He] [t_has] [icon2html(gloves, user)] \a [gloves] on [t_his] hands.\n" else if(blood_DNA) var/hand_number = get_num_arms() if(hand_number) @@ -78,48 +78,48 @@ //handcuffed? if(handcuffed) if(istype(handcuffed, /obj/item/weapon/restraints/handcuffs/cable)) - msg += "[t_He] [t_is] [bicon(handcuffed)] restrained with cable!\n" + msg += "[t_He] [t_is] [icon2html(handcuffed, user)] restrained with cable!\n" else - msg += "[t_He] [t_is] [bicon(handcuffed)] handcuffed!\n" + msg += "[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!\n" //belt if(belt) if(belt.blood_DNA) - msg += "[t_He] [t_has] [bicon(belt)] [belt.gender==PLURAL?"some":"a"] blood-stained [belt.name] about [t_his] waist!\n" + msg += "[t_He] [t_has] [icon2html(belt, user)] [belt.gender==PLURAL?"some":"a"] blood-stained [belt.name] about [t_his] waist!\n" else - msg += "[t_He] [t_has] [bicon(belt)] \a [belt] about [t_his] waist.\n" + msg += "[t_He] [t_has] [icon2html(belt, user)] \a [belt] about [t_his] waist.\n" //shoes if(shoes && !(slot_shoes in obscured)) if(shoes.blood_DNA) - msg += "[t_He] [t_is] wearing [bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] blood-stained [shoes.name] on [t_his] feet!\n" + msg += "[t_He] [t_is] wearing [icon2html(shoes, user)] [shoes.gender==PLURAL?"some":"a"] blood-stained [shoes.name] on [t_his] feet!\n" else - msg += "[t_He] [t_is] wearing [bicon(shoes)] \a [shoes] on [t_his] feet.\n" + msg += "[t_He] [t_is] wearing [icon2html(shoes, user)] \a [shoes] on [t_his] feet.\n" //mask if(wear_mask && !(slot_wear_mask in obscured)) if(wear_mask.blood_DNA) - msg += "[t_He] [t_has] [bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] blood-stained [wear_mask.name] on [t_his] face!\n" + msg += "[t_He] [t_has] [icon2html(wear_mask, user)] [wear_mask.gender==PLURAL?"some":"a"] blood-stained [wear_mask.name] on [t_his] face!\n" else - msg += "[t_He] [t_has] [bicon(wear_mask)] \a [wear_mask] on [t_his] face.\n" + msg += "[t_He] [t_has] [icon2html(wear_mask, user)] \a [wear_mask] on [t_his] face.\n" if (wear_neck && !(slot_neck in obscured)) - msg += "[t_He] [t_is] wearing [bicon(wear_neck)] \a [src.wear_neck] around [t_his] neck.\n" + msg += "[t_He] [t_is] wearing [icon2html(wear_neck, user)] \a [src.wear_neck] around [t_his] neck.\n" //eyes if(glasses && !(slot_glasses in obscured)) if(glasses.blood_DNA) - msg += "[t_He] [t_has] [bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] blood-stained [glasses] covering [t_his] eyes!\n" + msg += "[t_He] [t_has] [icon2html(glasses, user)] [glasses.gender==PLURAL?"some":"a"] blood-stained [glasses] covering [t_his] eyes!\n" else - msg += "[t_He] [t_has] [bicon(glasses)] \a [glasses] covering [t_his] eyes.\n" + msg += "[t_He] [t_has] [icon2html(glasses, user)] \a [glasses] covering [t_his] eyes.\n" //ears if(ears && !(slot_ears in obscured)) - msg += "[t_He] [t_has] [bicon(ears)] \a [ears] on [t_his] ears.\n" + msg += "[t_He] [t_has] [icon2html(ears, user)] \a [ears] on [t_his] ears.\n" //ID if(wear_id) - msg += "[t_He] [t_is] wearing [bicon(wear_id)] \a [wear_id].\n" + msg += "[t_He] [t_is] wearing [icon2html(wear_id, user)] \a [wear_id].\n" //Jitters switch(jitteriness) @@ -164,7 +164,7 @@ var/obj/item/bodypart/BP = X missing -= BP.body_zone for(var/obj/item/I in BP.embedded_objects) - msg += "[t_He] [t_has] \a [bicon(I)] [I] embedded in [t_his] [BP.name]!\n" + msg += "[t_He] [t_has] \a [icon2html(I, user)] [I] embedded in [t_his] [BP.name]!\n" //stores missing limbs var/l_limbs_missing = 0 diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index b19e866378..3af95cec4c 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -1,5 +1,5 @@ /mob/living/silicon/ai/examine(mob/user) - var/msg = "*---------*\nThis is [bicon(src)] [src]!\n" + var/msg = "*---------*\nThis is [icon2html(src, user)] [src]!\n" if (stat == DEAD) msg += "It appears to be powered-down.\n" else diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 77874ad403..9d2f786ade 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -173,7 +173,7 @@ if(href_list["send"]) sradio.send_signal("ACTIVATE") - audible_message("[bicon(src)] *beep* *beep*") + audible_message("[icon2html(src, world)] *beep* *beep*") if(href_list["freq"]) diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index 7f232e20f4..788a8f4255 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -1,11 +1,11 @@ /mob/living/silicon/robot/examine(mob/user) - var/msg = "*---------*\nThis is [bicon(src)] \a [src]!\n" + var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src]!\n" if(desc) msg += "[desc]\n" var/obj/act_module = get_active_held_item() if(act_module) - msg += "It is holding [bicon(act_module)] \a [act_module].\n" + msg += "It is holding [icon2html(act_module, user)] \a [act_module].\n" msg += "" if (src.getBruteLoss()) if (src.getBruteLoss() < maxHealth*0.5) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 59cb793b27..3c963ca820 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -469,7 +469,7 @@ Pass a positive integer as an argument to override a bot's default speed. var/area/end_area = get_area(waypoint) if(client) //Player bots instead get a location command from the AI - to_chat(src, "Priority waypoint set by [bicon(caller)] [caller]. Proceed to [end_area.name]<\b>.") + to_chat(src, "Priority waypoint set by [icon2html(caller, src)] [caller]. Proceed to [end_area.name]<\b>.") //For giving the bot temporary all-access. var/obj/item/weapon/card/id/all_access = new /obj/item/weapon/card/id @@ -485,7 +485,7 @@ Pass a positive integer as an argument to override a bot's default speed. turn_on() //Saves the AI the hassle of having to activate a bot manually. access_card = all_access //Give the bot all-access while under the AI's command. if(message) - to_chat(calling_ai, "[bicon(src)] [name] called to [end_area.name]. [path.len-1] meters to destination.") + to_chat(calling_ai, "[icon2html(src, calling_ai)] [name] called to [end_area.name]. [path.len-1] meters to destination.") pathset = 1 mode = BOT_RESPONDING tries = 0 @@ -500,7 +500,7 @@ Pass a positive integer as an argument to override a bot's default speed. var/success = bot_move(ai_waypoint, 3) if(!success) if(calling_ai) - to_chat(calling_ai, "[bicon(src)] [get_turf(src) == ai_waypoint ? "[src] successfully arrived to waypoint." : "[src] failed to reach waypoint."]") + to_chat(calling_ai, "[icon2html(src, calling_ai)] [get_turf(src) == ai_waypoint ? "[src] successfully arrived to waypoint." : "[src] failed to reach waypoint."]") calling_ai = null bot_reset() diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index e8936a2863..74005e84dd 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -596,7 +596,7 @@ if(pathset) //The AI called us here, so notify it of our arrival. loaddir = dir //The MULE will attempt to load a crate in whatever direction the MULE is "facing". if(calling_ai) - to_chat(calling_ai, "[bicon(src)] [src] wirelessly plays a chiming sound!") + to_chat(calling_ai, "[icon2html(src, calling_ai)] [src] wirelessly plays a chiming sound!") playsound(calling_ai, 'sound/machines/chime.ogg',40, 0) calling_ai = null radio_channel = "AI Private" //Report on AI Private instead if the AI is controlling us. diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 74f855bf8c..e0993c6ce5 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -50,7 +50,7 @@ /mob/living/simple_animal/hostile/construct/examine(mob/user) var/t_He = p_they(TRUE) var/t_s = p_s() - var/msg = "*---------*\nThis is [bicon(src)] \a [src]!\n" + var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src]!\n" msg += "[desc]\n" if(health < maxHealth) msg += "" diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index db347cc203..b37d5079d7 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -171,29 +171,29 @@ /mob/living/simple_animal/drone/examine(mob/user) - var/msg = "*---------*\nThis is [bicon(src)] \a [src]!\n" + var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src]!\n" //Hands for(var/obj/item/I in held_items) if(!(I.flags & ABSTRACT)) if(I.blood_DNA) - msg += "It has [bicon(I)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!\n" + msg += "It has [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!\n" else - msg += "It has [bicon(I)] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "It has [icon2html(I, user)] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n" //Internal storage if(internal_storage && !(internal_storage.flags&ABSTRACT)) if(internal_storage.blood_DNA) - msg += "It is holding [bicon(internal_storage)] [internal_storage.gender==PLURAL?"some":"a"] blood-stained [internal_storage.name] in its internal storage!\n" + msg += "It is holding [icon2html(internal_storage, user)] [internal_storage.gender==PLURAL?"some":"a"] blood-stained [internal_storage.name] in its internal storage!\n" else - msg += "It is holding [bicon(internal_storage)] \a [internal_storage] in its internal storage.\n" + msg += "It is holding [icon2html(internal_storage, user)] \a [internal_storage] in its internal storage.\n" //Cosmetic hat - provides no function other than looks if(head && !(head.flags&ABSTRACT)) if(head.blood_DNA) - msg += "It is wearing [bicon(head)] [head.gender==PLURAL?"some":"a"] blood-stained [head.name] on its head!\n" + msg += "It is wearing [icon2html(head, user)] [head.gender==PLURAL?"some":"a"] blood-stained [head.name] on its head!\n" else - msg += "It is wearing [bicon(head)] \a [head] on its head.\n" + msg += "It is wearing [icon2html(head, user)] \a [head] on its head.\n" //Braindead if(!client && stat != DEAD) diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 207bda2c2c..75a1759e1d 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -57,7 +57,7 @@ if( ishuman(AM) ) if(!stat) var/mob/M = AM - to_chat(M, "[bicon(src)] Squeek!") + to_chat(M, "[icon2html(src, M)] Squeek!") playsound(src, 'sound/effects/mousesqueek.ogg', 100, 1) ..() diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm index 5fe0ccaade..02754e0121 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm @@ -26,21 +26,21 @@ /mob/living/simple_animal/hostile/guardian/dextrous/examine(mob/user) if(dextrous) - var/msg = "*---------*\nThis is [bicon(src)] \a [src]!\n" + var/msg = "*---------*\nThis is [icon2html(src)] \a [src]!\n" msg += "[desc]\n" for(var/obj/item/I in held_items) if(!(I.flags & ABSTRACT)) if(I.blood_DNA) - msg += "It has [bicon(I)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!\n" + msg += "It has [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!\n" else - msg += "It has [bicon(I)] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "It has [icon2html(I, user)] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n" if(internal_storage && !(internal_storage.flags&ABSTRACT)) if(internal_storage.blood_DNA) - msg += "It is holding [bicon(internal_storage)] [internal_storage.gender==PLURAL?"some":"a"] blood-stained [internal_storage.name] in its internal storage!\n" + msg += "It is holding [icon2html(internal_storage, user)] [internal_storage.gender==PLURAL?"some":"a"] blood-stained [internal_storage.name] in its internal storage!\n" else - msg += "It is holding [bicon(internal_storage)] \a [internal_storage] in its internal storage.\n" + msg += "It is holding [icon2html(internal_storage, user)] \a [internal_storage] in its internal storage.\n" msg += "*---------*" to_chat(user, msg) else diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 236b36dafd..0e7d7a157e 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -347,7 +347,7 @@ /mob/living/simple_animal/slime/examine(mob/user) - var/msg = "*---------*\nThis is [bicon(src)] \a [src]!\n" + var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src]!\n" if (src.stat == DEAD) msg += "It is limp and unresponsive.\n" else diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 8d2bd6002f..a062d5c614 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -401,19 +401,21 @@ add_reagent(P, cached_results[P]*multiplier, null, chem_temp) var/list/seen = viewers(4, get_turf(my_atom)) + var/iconhtml = icon2html(cached_my_atom, seen) if(cached_my_atom) if(!ismob(cached_my_atom)) // No bubbling mobs if(C.mix_sound) playsound(get_turf(cached_my_atom), C.mix_sound, 80, 1) + for(var/mob/M in seen) - to_chat(M, "[bicon(my_atom)] [C.mix_message]") + to_chat(M, "[iconhtml] [C.mix_message]") if(istype(cached_my_atom, /obj/item/slime_extract)) var/obj/item/slime_extract/ME2 = my_atom ME2.Uses-- if(ME2.Uses <= 0) // give the notification that the slime core is dead for(var/mob/M in seen) - to_chat(M, "[bicon(my_atom)] \The [my_atom]'s power is consumed in the reaction.") + to_chat(M, "[iconhtml] \The [my_atom]'s power is consumed in the reaction.") ME2.name = "used slime extract" ME2.desc = "This extract has been used up." diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 0d0a4f7695..4388d6bcbe 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -341,7 +341,7 @@ found = 1 break if(!found) - to_chat(user, "[bicon(src)]The conveyor switch did not detect any linked conveyor belts in range.") + to_chat(user, "[icon2html(src, user)]The conveyor switch did not detect any linked conveyor belts in range.") return var/obj/machinery/conveyor_switch/NC = new/obj/machinery/conveyor_switch(A, id) transfer_fingerprints_to(NC) diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm index 7b455b7d80..b04ebe6643 100644 --- a/code/modules/uplink/uplink_item.dm +++ b/code/modules/uplink/uplink_item.dm @@ -110,10 +110,10 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. var/obj/item/weapon/storage/box/B = A if(istype(B) && B.contents.len > 0) for(var/obj/item/I in B) - U.purchase_log += "[bicon(I)]" + U.purchase_log += "[icon2base64html(I)]" else if(purchase_log_vis) - U.purchase_log += "[bicon(A)]" + U.purchase_log += "[icon2base64html(A)]" if(limited_stock > 0) limited_stock -= 1 @@ -1394,7 +1394,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. continue crate_value -= I.cost new I.item(C) - U.purchase_log += "[bicon(I.item)]" + U.purchase_log += "[icon2base64html(I.item)]" SSblackbox.add_details("traitor_uplink_items_bought", "[name]|[cost]") return C diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 6f38560b92..8576be384b 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -151,7 +151,7 @@ h1.alert, h2.alert {color: #000000;} .clown {color: #FF69Bf; font-size: 3; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;} .his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;} -BIG IMG.icon {width: 32px; height: 32px;} +.icon {height: 1em; width: auto;} .memo {color: #638500; text-align: center;} .memoedit {text-align: center; font-size: 2;} From 0e7b9a008e560c106df44d117b6d8baae4282d81 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 17:54:27 -0500 Subject: [PATCH 133/230] Ports a slightly edited version of Eris APC sprites --- apc_repair.dmi | Bin 0 -> 627 bytes code/modules/power/apc.dm | 4 ++-- icons/obj/power.dmi | Bin 35764 -> 36328 bytes icons/obj/wallframe.dmi | Bin 979 -> 1059 bytes power.dmi | Bin 0 -> 1782 bytes 5 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 apc_repair.dmi create mode 100644 power.dmi diff --git a/apc_repair.dmi b/apc_repair.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6e861eef61bfd13f6194a65b44410560672ced2d GIT binary patch literal 627 zcmV-(0*w8MP)W=qlarZKQ&SHQ4=*k*R##RR7Z)QVBPb{+LPA1gV`FO= z7O5s9z`(#;NDpmN3fW0U7CmbtPpKQON3H+>00DGTPE!Ct=GbNc0047(R9JLGWpiV4 zX>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33t zGfE(w;*!LYR3K9+u^`z%iHkEOv#1!zHRR$$p}NoJ^{cH6O_)f6U<~2K=bxUlL$Eel1ct*hW2ibGZ-n*6F>S@Q^13?1*F)Z|?1)TFzPm-tXD?LyCJ?H#CNCJBP7X_vH zUlf$)e~B>vN5al^yTHsSH#2GkQr^O5l(M!?@ENup3F20ppp8@~u;cNzI)RNCCGYp` zf+br8Vg7%)@>O#)2;BVtc3&@5bJMebZbEz#D-MkU9;g>oeYTt&f**u=9A4~N-h%)D N002ovPDHLkV1k1O4M+e0 literal 0 HcmV?d00001 diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index e36c639eb9..aec4bb82ea 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -120,8 +120,8 @@ if(auto_name) name = "\improper [get_area(src)] APC" - pixel_x = (src.tdir & 3)? 0 : (src.tdir == 4 ? 24 : -24) - pixel_y = (src.tdir & 3)? (src.tdir ==1 ? 24 : -24) : 0 + pixel_x = (src.tdir & 3)? 0 : (src.tdir == 4 ? 24 : -25) + pixel_y = (src.tdir & 3)? (src.tdir ==1 ? 23 : -24) : 0 if (building) area = get_area(src) opened = 1 diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index f3b2233283db7530bc69bff95f26986dd5ff4dfa..6b2ae5535153f3404d30a653b05a81f6027872f7 100644 GIT binary patch literal 36328 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 V<(D5j#Q7P3z|+;wWt~$(696vg+pz!u literal 35764 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 diff --git a/icons/obj/wallframe.dmi b/icons/obj/wallframe.dmi index 0e416cac77708215cfd415d4a064d24e04dafba4..70149901e33acdf8a077fe7f7b4b2850bc183d0c 100644 GIT binary patch delta 960 zcmV;x13&!J2crm(B!AdYOjJd{z`!v)MNumAb# z^yShgCoIajrQ*=M|N8Lx=+V=-0C=2@&$|wTFbsv^ zIev-=_NuqFO9iSJ;2qN75)U|4YzmLxs7T!^x}9J8mQ&hmeQP>fwGF&52}QOSd*1EA z%+zbhaXNwtNJG#yM4e)ug?st}OixL29l(D)k{fZ|Uvr;SBX2TXlz5m(0;WyOIE#0p ze^BDAd>ntl($-z|IsXRZk4q9)8Qs_b00LV{L_t(oh3%DVcbY&Dh6A`LD3MZItwpJ; zCXH!MTrq0#5^Zh!|Nl{Exkb$Yg+f2{@ZfR%AoHAeW?8PT{u_i#@)n3vwKJkf7>O<0uJ&ObM#0T372FMM)B5OQ2S(a--3Z8=9unFhNMh1a)6<-E3k4 ziM)_4K_JkZZ!|<88bJW>N8WStkG@bD4Ctj` z7|@GP5Fs!OE*OnQlyU)*U^w2|BfkLzB#a*%ujq;Z0000w6q=`9+9mo15;B|k=H7J;yC!{00001bW%=J06^y0W&i*Hp?XwU zbVOxyV{&P5bZKvH004NLjgY+#f-n?D=k_TYSc#$F;NoH+hC$w;!j;~Emh@i4$G84O zC!*VTl5>_XRfqc6w5mEa@(O{_JGEEaO)kZPJ=+LnA%z7TEWd!*FvOXdsY|5jF;FCb zEyX365#HN+rpZ4Fy~~O+)8FhoGkdpIel)l-x?x7L5Pr%I7U~S~A1bZ+%I=Wa_=LoZPN;E12H?9i^&f0EMeoMr zhH#bO#`^@#;7EV~!I-v>zoY`UqoDj!p5Sv=L3I=R;so6VlLCq0wsFWOyX{cBXGSRn^a{}V8aP8LR|3h z`1J711?R^R7hI6wJA72+37(n~aKU{}li-EYAjn|}1OmST7FbO1VtXERT$h4pfj|fv z=Jlz;7A0sLvQ#iCFpTD-Sah3z${5sWyvTISa<3U}1s7rRUtYd-2ppr1dO=T5k8Tc6 z6`Jbf3M~d&|L|z4!w}H=uN-R7BzP@=1mP))1tE!I5++GP7<5fq8zh1#j^gl*kQsxJ zx4CLTyoeX!oXmbOW@N5B0jP002ovPDHLk FV1kyuoWKA8 diff --git a/power.dmi b/power.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d0066b96de9d090771f9ec0a7338144bbdb839cd GIT binary patch literal 1782 zcmYk52{aqn8po5?J_u6FP^F_vZEeTW7EQ@m$~N}pv2lB(Sht!hgUaw1wPUNS97BzZB*nRm~*_xpYS@0{=c?>+aH1^9bws2QpO z000f2s~$n}$U2-VN9C)npz)PF^acD4?kOuOI`8T|JUmui-EjJheNbo|2n51l^6f&f z`uh52W@fOw(U8J%C=}XEnTxzJnOi>vfd*mi?Ch|C4aCsC-^PaiPu z-?~&5;!+;wL5jxomF_d5WHQVQ}l7O>Qf@hDT)&2xzcdU}@= zTTjckX?1pXmNz?VXBQe4YH4X19UYyJkdPFl_Rhy^jc^+43xcyxoxy3IJEnrQ25go5 zxmjICKZR2n*>16QKiDdb&-c{-V$&HhAuTo16iSEdgI}IOKUrBo4lXORpc3d^-3`uPoKm&cT)@MvLaEs0dt#|}T5Z5EGu_#dEE46T zq;?#JQc_bOZb$W(dq{PC@lDRxWjXZ9|;=S1gB%AZA#BgZ;T@A zM|>g{%(Db@=Jc7x%=a=`L^Vxo%yjwf`rqAF@x<;Hm{uRkY>A4WQ;}aXz^t=uOSP*q zC;jOR0jRfsm#(`h#G4ne#KmFaO0=(oSq2lke$M9NF?R#6Pe-a&^o}QJGEzI#Zm}1A*2h>i5Z`~{O1gJ2A;g1TRlQ12D)xeLs=EiRcIO%NXA=!{GH!ZKA8|dn zxD=P>LjK^A^O(na7xR_1Lng-AQTLu$&^qWA4EgyHtiM1*nlL!}5>^A-!W%HG8l56b zlAHNHNZxTP@_#<<{Dm`z2>RVN0HCh3gPZA!pXH*kpMQsK3EJExSDvh(QF^GGQBDM- z{9s6LQ^zB9A#q@+ciLnyNO7CBB}Dq>d@oy&jBw&_G?&!A$;8;A`(JLPyl;eciI+C8 ze#X9cXCHemY8pyL9Wj#klbanu&(YvF2)62}cDhc4GC4n5c`016qp!bwf!|fLJ1<@4 zpOwQ&a{5Q1;L@V^g&zKT?ub-C;=AwQZhxMuAL3Yv$|dnGoD!yxn8-U3=s?SN!VZk^ zk_VBETI}O{ifPReQf8;$Ss(!W9U=Ca>;U!pNL(-Z_}U5b3nS&NTT4rvZkZ68gHMFe2pzl=58dc%vGVf&K(rQ0XA`OK--vZ)j2oh5<0<{J5J8aZ{5&`=@UQRW@e`kR2+z`57Dq0My zq>NKIlr=y%#1cna56KZAI2GZ)aKTiug=~)Gjx02tKdp(Neuz4d7rI2{s_g|C#*|-` zq4{bd;F#UqK}05|!BID72%4>wG~g=JiN Date: Sun, 13 Aug 2017 18:00:36 -0500 Subject: [PATCH 134/230] Fixes turf slipping --- code/game/turfs/open.dm | 1 + code/game/turfs/simulated/chasm.dm | 1 + code/game/turfs/space/transit.dm | 1 + code/game/turfs/turf.dm | 1 + 4 files changed, 4 insertions(+) diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 82ff907a04..a990530056 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -18,6 +18,7 @@ var/sound /turf/open/indestructible/sound/Entered(var/mob/AM) + ..() if(istype(AM)) playsound(src,sound,50,1) diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm index 968e782984..a51240c969 100644 --- a/code/game/turfs/simulated/chasm.dm +++ b/code/game/turfs/simulated/chasm.dm @@ -22,6 +22,7 @@ return /turf/open/chasm/Entered(atom/movable/AM) + ..() START_PROCESSING(SSobj, src) drop_stuff(AM) diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index c7e6973c4d..b877fa9eac 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -25,6 +25,7 @@ dir = EAST /turf/open/space/transit/Entered(atom/movable/AM, atom/OldLoc) + ..() if(!locate(/obj/structure/lattice) in src) throw_atom(AM) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index b204406d05..4342d12714 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -160,6 +160,7 @@ return TRUE //Nothing found to block so return success! /turf/Entered(atom/movable/AM) + ..() if(explosion_level && AM.ex_check(explosion_id)) AM.ex_act(explosion_level) From 16428315aa6af839e82632cac562940c5610d8e9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 13 Aug 2017 18:01:40 -0500 Subject: [PATCH 135/230] Merges the two turf/Entereds --- code/game/turfs/turf.dm.rej | 13 +++++++++++++ code/modules/lighting/lighting_turf.dm | 8 -------- 2 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 code/game/turfs/turf.dm.rej diff --git a/code/game/turfs/turf.dm.rej b/code/game/turfs/turf.dm.rej new file mode 100644 index 0000000000..1c4472c18a --- /dev/null +++ b/code/game/turfs/turf.dm.rej @@ -0,0 +1,13 @@ +diff a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm (rejected hunks) +@@ -163,6 +163,11 @@ + if(explosion_level && AM.ex_check(explosion_id)) + AM.ex_act(explosion_level) + ++ // If an opaque movable atom moves around we need to potentially update visibility. ++ if (AM.opacity) ++ has_opaque_atom = TRUE // Make sure to do this before reconsider_lights(), incase we're on instant updates. Guaranteed to be on in this case. ++ reconsider_lights() ++ + /turf/open/Entered(atom/movable/AM) + ..() + //melting diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 3aca57c4bf..fc03cfb8c0 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -95,14 +95,6 @@ has_opaque_atom = TRUE break -// If an opaque movable atom moves around we need to potentially update visibility. -/turf/Entered(var/atom/movable/Obj, var/atom/OldLoc) - . = ..() - - if (Obj && Obj.opacity) - has_opaque_atom = TRUE // Make sure to do this before reconsider_lights(), incase we're on instant updates. Guaranteed to be on in this case. - reconsider_lights() - /turf/Exited(var/atom/movable/Obj, var/atom/newloc) . = ..() From 7aa960b4997d2d10805d8e36ac0e123dc2ef26d3 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 01:23:57 -0500 Subject: [PATCH 136/230] Fixes a typo in the blobbernaut spawn text --- code/game/gamemodes/blob/powers.dm.rej | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 code/game/gamemodes/blob/powers.dm.rej diff --git a/code/game/gamemodes/blob/powers.dm.rej b/code/game/gamemodes/blob/powers.dm.rej new file mode 100644 index 0000000000..27dc764a75 --- /dev/null +++ b/code/game/gamemodes/blob/powers.dm.rej @@ -0,0 +1,10 @@ +diff a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm (rejected hunks) +@@ -175,7 +175,7 @@ + SEND_SOUND(blobber, sound('sound/effects/attackblob.ogg')) + to_chat(blobber, "You are a blobbernaut!") + to_chat(blobber, "You are powerful, hard to kill, and slowly regenerate near nodes and cores, but will slowly die if not near the blob or if the factory that made you is killed.") +- to_chat(blobber, "You can communicate with other blobbernauts and GLOB.overminds via :b") ++ to_chat(blobber, "You can communicate with other blobbernauts and overminds via :b") + to_chat(blobber, "Your overmind's blob reagent is: [blob_reagent_datum.name]!") + to_chat(blobber, "The [blob_reagent_datum.name] reagent [blob_reagent_datum.shortdesc ? "[blob_reagent_datum.shortdesc]" : "[blob_reagent_datum.description]"]") + if(blobber) From 726ffe1fdd8698d01e960979a269c582be869bde Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 01:25:02 -0500 Subject: [PATCH 137/230] Tweaks atmos canister lights. --- .../atmospherics/machinery/portable/canister.dm | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index d733dfc3fb..a45536430a 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -189,8 +189,9 @@ #define CONNECTED 2 #define EMPTY 4 #define LOW 8 -#define FULL 16 -#define DANGER 32 +#define MEDIUM 16 +#define FULL 32 +#define DANGER 64 /obj/machinery/portable_atmospherics/canister/update_icon() if(stat & BROKEN) cut_overlays() @@ -207,9 +208,11 @@ var/pressure = air_contents.return_pressure() if(pressure < 10) update |= EMPTY - else if(pressure < ONE_ATMOSPHERE) + else if(pressure < 5 * ONE_ATMOSPHERE) update |= LOW - else if(pressure < 15 * ONE_ATMOSPHERE) + else if(pressure < 10 * ONE_ATMOSPHERE) + update |= MEDIUM + else if(pressure < 40 * ONE_ATMOSPHERE) update |= FULL else update |= DANGER @@ -222,9 +225,9 @@ add_overlay("can-open") if(update & CONNECTED) add_overlay("can-connector") - if(update & EMPTY) + if(update & LOW) add_overlay("can-o0") - else if(update & LOW) + else if(update & MEDIUM) add_overlay("can-o1") else if(update & FULL) add_overlay("can-o2") @@ -234,6 +237,7 @@ #undef CONNECTED #undef EMPTY #undef LOW +#undef MEDIUM #undef FULL #undef DANGER From 7fe8dd208d96448ea18e906fd623142f8e15d104 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 02:44:24 -0500 Subject: [PATCH 138/230] [s] Clean up some inputs --- code/game/gamemodes/miniantags/bot_swarm/swarmer.dm | 2 +- code/game/machinery/computer/card.dm | 1 - code/game/machinery/computer/message.dm | 2 +- code/modules/cargo/console.dm | 2 +- .../modular_computers/file_system/programs/ntnrc_client.dm | 2 +- 5 files changed, 4 insertions(+), 5 deletions(-) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 68ed9abd35..c24ab53ef5 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -654,7 +654,7 @@ to_chat(M, "[link] [rendered]") /mob/living/simple_animal/hostile/swarmer/proc/ContactSwarmers() - var/message = input(src, "Announce to other swarmers", "Swarmer contact") + var/message = stripped_input(src, "Announce to other swarmers", "Swarmer contact") // TODO get swarmers their own colour rather than just boldtext if(message) swarmer_chat(message) diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index a54ab19907..7330f2d072 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -473,7 +473,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if ("reg") if (authenticated) var/t2 = modify - //var/t1 = input(usr, "What name?", "ID computer", null) as text if ((authenticated && modify == t2 && (in_range(src, usr) || issilicon(usr)) && isturf(loc))) var/newName = reject_bad_name(href_list["reg"]) if(newName) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 26a7d3b729..18d86b71cf 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -309,7 +309,7 @@ message = noserver else if(auth) - var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null) + var/dkey = trim(stripped_input(usr, "Please enter the decryption key.")) if(dkey && dkey != "") if(src.linkedServer.decryptkey == dkey) var/newkey = trim(input(usr,"Please enter the new key (3 - 16 characters max):")) diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index 15117c1cbb..1cf215b9f2 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -145,7 +145,7 @@ var/reason = "" if(requestonly) - reason = input("Reason:", name, "") as text|null + reason = stripped_input("Reason:", name, "") as text|null if(isnull(reason) || ..()) return diff --git a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm index f200fbf747..10a6deb63d 100644 --- a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm @@ -110,7 +110,7 @@ if(!channel) return var/mob/living/user = usr - var/logname = input(user,"Enter desired logfile name (.log) or leave blank to cancel:") + var/logname = stripped_input(user,"Enter desired logfile name (.log) or leave blank to cancel:") if(!logname || !channel) return 1 var/datum/computer_file/data/logfile = new/datum/computer_file/data/logfile() From f840a18a9aeab00d5f2af74fc4ea495874b4b978 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 02:59:42 -0500 Subject: [PATCH 139/230] Fix compile warning --- code/modules/cargo/console.dm.rej | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 code/modules/cargo/console.dm.rej diff --git a/code/modules/cargo/console.dm.rej b/code/modules/cargo/console.dm.rej new file mode 100644 index 0000000000..e8798f179a --- /dev/null +++ b/code/modules/cargo/console.dm.rej @@ -0,0 +1,10 @@ +diff a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm (rejected hunks) +@@ -145,7 +145,7 @@ + + var/reason = "" + if(requestonly) +- reason = stripped_input("Reason:", name, "") as text|null ++ reason = stripped_input("Reason:", name, "") + if(isnull(reason) || ..()) + return + From e986657b164fc3024ee57158b47cf22a8e7ea6c9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 06:25:03 -0500 Subject: [PATCH 140/230] Makes mulligan antag check for gamemode required players --- code/game/gamemodes/game_mode.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 2a0cd230d5..790319e362 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -120,7 +120,7 @@ var/list/datum/game_mode/runnable_modes = config.get_runnable_midround_modes(living_crew.len) var/list/datum/game_mode/usable_modes = list() for(var/datum/game_mode/G in runnable_modes) - if(G.reroll_friendly) + if(G.reroll_friendly && living_crew >= G.required_players) usable_modes += G else qdel(G) From 2476d59be6b0972a058e222d3d75ca4dbbe7657b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 06:54:44 -0500 Subject: [PATCH 141/230] Makes the ahelp topic give the permissions warning --- code/modules/admin/topic.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 818b0d6f09..81925756fb 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -6,7 +6,7 @@ log_admin("[key_name(usr)] tried to use the admin panel without authorization.") return if(href_list["ahelp"]) - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN, TRUE)) return var/ahelp_ref = href_list["ahelp"] From c73e58d5874cf06809a9ad5bc506388c983746e7 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 08:19:27 -0500 Subject: [PATCH 142/230] Revert "[MIRROR] The wiki button now asks what page you want to be taken to" --- interface/interface.dm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/interface/interface.dm b/interface/interface.dm index 64e39587ce..253738064b 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -1,14 +1,12 @@ //Please use mob or src (not usr) in these procs. This way they can be called in the same fashion as procs. -/client/verb/wiki(query as text | null) +/client/verb/wiki() set name = "wiki" - set desc = "Type what you want to know about. This will open the wiki on your web browser. Type nothing to go to the main page." + set desc = "Visit the wiki." set hidden = 1 if(config.wikiurl) - if(query) - var/output = config.wikiurl + "/index.php?title=Special%3ASearch&profile=default&search=" + query - src << link(output) - else if (query != null) - src << link(config.wikiurl) + if(alert("This will open the wiki in your browser. Are you sure?",,"Yes","No")=="No") + return + src << link(config.wikiurl) else to_chat(src, "The wiki URL is not set in the server configuration.") return From b2f93c506b2927d6b999e5f5210c034c5a872559 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 08:20:10 -0500 Subject: [PATCH 143/230] Automatic changelog generation for PR #2359 [ci skip] --- html/changelogs/AutoChangeLog-pr-2359.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2359.yml diff --git a/html/changelogs/AutoChangeLog-pr-2359.yml b/html/changelogs/AutoChangeLog-pr-2359.yml new file mode 100644 index 0000000000..8455963dc6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2359.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - imageadd: "Ported CEV-Eris's APC sprites." From 77ce8f8031254ebda3150763634582d44fcf7df6 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 08:20:58 -0500 Subject: [PATCH 144/230] Automatic changelog generation for PR #2363 [ci skip] --- html/changelogs/AutoChangeLog-pr-2363.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2363.yml diff --git a/html/changelogs/AutoChangeLog-pr-2363.yml b/html/changelogs/AutoChangeLog-pr-2363.yml new file mode 100644 index 0000000000..e8f5b574ae --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2363.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "Canisters don't flash red lights anymore when empty." From 4edf9880d6821cd4b9d6e13e2a7dac1f717f784e Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 08:23:46 -0500 Subject: [PATCH 145/230] Update logging.dm --- code/__DEFINES/logging.dm | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm index 82d030bf08..24e10a24d1 100644 --- a/code/__DEFINES/logging.dm +++ b/code/__DEFINES/logging.dm @@ -1,15 +1,16 @@ //Investigate logging defines -#define INVESTIGATE_ATMOS "atmos" -#define INVESTIGATE_BOTANY "botany" -#define INVESTIGATE_CARGO "cargo" -#define INVESTIGATE_EXPERIMENTOR "experimentor" -#define INVESTIGATE_GRAVITY "gravity" -#define INVESTIGATE_RECORDS "records" -#define INVESTIGATE_SINGULO "singulo" -#define INVESTIGATE_SUPERMATTER "supermatter" -#define INVESTIGATE_TELESCI "telesci" -#define INVESTIGATE_WIRES "wires" +#define INVESTIGATE_ATMOS "atmos" +#define INVESTIGATE_BOTANY "botany" +#define INVESTIGATE_CARGO "cargo" +#define INVESTIGATE_EXPERIMENTOR "experimentor" +#define INVESTIGATE_GRAVITY "gravity" +#define INVESTIGATE_RECORDS "records" +#define INVESTIGATE_SINGULO "singulo" +#define INVESTIGATE_SUPERMATTER "supermatter" +#define INVESTIGATE_TELESCI "telesci" +#define INVESTIGATE_WIRES "wires" #define INVESTIGATE_PORTAL "portals" +#define INVESTIGATE_HALLUCINATIONS "hallucinations" //Individual logging defines #define INDIVIDUAL_ATTACK_LOG "Attack log" From fdfdd4fc214a81e6edcbe4b8204dfe77eb488bf3 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 08:24:34 -0500 Subject: [PATCH 146/230] Update admin_investigate.dm --- code/modules/admin/admin_investigate.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index 54feb11532..2ca0593e8d 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -5,7 +5,7 @@ F << "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
    " -/client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY) ) +/client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS) ) set name = "Investigate" set category = "Admin" if(!holder) From 80bb075eb3667c0fc24aa03b6d114661b04391b0 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 08:24:58 -0500 Subject: [PATCH 147/230] Update Hallucination.dm.rej --- code/modules/flufftext/Hallucination.dm.rej | 1360 ++++++++++++++++--- 1 file changed, 1151 insertions(+), 209 deletions(-) diff --git a/code/modules/flufftext/Hallucination.dm.rej b/code/modules/flufftext/Hallucination.dm.rej index 78b5d879f2..2b8fe4b064 100644 --- a/code/modules/flufftext/Hallucination.dm.rej +++ b/code/modules/flufftext/Hallucination.dm.rej @@ -1,209 +1,1151 @@ -diff a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm (rejected hunks) -@@ -60,9 +60,14 @@ GLOBAL_LIST_INIT(hallucinations_major, list( - var/halpick = pick(current) - new halpick(src, FALSE) - -+/mob/living/carbon/proc/set_screwyhud(hud_type) -+ hal_screwyhud = hud_type -+ update_health_hud() -+ - /datum/hallucination - var/mob/living/carbon/target - var/cost = 5 //affects the amount of hallucination reduced, and cooldown until the next hallucination -+ var/feedback_details //extra info for investigate - - /datum/hallucination/New(mob/living/carbon/T, forced = TRUE) - set waitfor = 0 -@@ -72,9 +77,13 @@ GLOBAL_LIST_INIT(hallucinations_major, list( - target.next_hallucination = world.time + (rand(cost * 0.5, cost * 3) * 10) - - /datum/hallucination/proc/wake_and_restore() -- target.hal_screwyhud = SCREWYHUD_NONE -+ target.set_screwyhud(SCREWYHUD_NONE) - target.SetSleeping(0) - -+/datum/hallucination/Destroy() -+ target.investigate_log("was afflicted with a hallucination of type [type]. [feedback_details]", INVESTIGATE_HALLUCINATIONS) -+ return ..() -+ - /obj/effect/hallucination - invisibility = INVISIBILITY_OBSERVER - var/mob/living/carbon/target = null -@@ -744,7 +771,9 @@ GLOBAL_LIST_INIT(hallucinations_major, list( - for(var/mob/living/carbon/human/H in GLOB.living_mob_list) - humans += H - person = pick(humans) -- to_chat(target, target.compose_message(person,understood_language,pick(radio_messages),"1459",person.get_spans())) -+ var/message = target.compose_message(person,understood_language,pick(radio_messages),"1459",person.get_spans()) -+ feedback_details += "Type: Radio, Source: [person.real_name], Message: [message]" -+ to_chat(target, message) - qdel(src) - - /datum/hallucination/message -@@ -763,43 +792,48 @@ GLOBAL_LIST_INIT(hallucinations_major, list( - "You're hallucinating.", \ - //Direct advice - "[pick_list_replacements(HAL_LINES_FILE, "advice")]") -+ feedback_details += "Message: [chosen]" - to_chat(target, chosen) - qdel(src) - - /datum/hallucination/sounds - cost = 15 - --/datum/hallucination/sounds/New(mob/living/carbon/T, forced = TRUE) -+/datum/hallucination/sounds/New(mob/living/carbon/T, forced = TRUE, sound_type) - ..() -+ if(!sound_type) -+ sound_type = pick("airlock","explosion","far_explosion","glass","phone","summon_guns","alarm","beepsky","hallelujah","creepy","ratvar","shuttle_dock", -+ "wall_decon","door_hack","esword","blob_alert","tesla","malf_ai") -+ feedback_details += "Type: [sound_type]" - //Strange audio -- switch(rand(1,20)) -- if(1) -+ switch(sound_type) -+ if("airlock") - target.playsound_local(null,'sound/machines/airlock.ogg', 15, 1) -- if(2) -+ if("explosion") - if(prob(50)) - target.playsound_local(null,'sound/effects/explosion1.ogg', 50, 1) - else - target.playsound_local(null, 'sound/effects/explosion2.ogg', 50, 1) -- if(3) -+ if("far_explosion") - target.playsound_local(null, 'sound/effects/explosionfar.ogg', 50, 1) -- if(4) -+ if("glass") - target.playsound_local(null, pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg'), 50, 1) -- if(5) -+ if("phone") - target.playsound_local(null, 'sound/weapons/ring.ogg', 35) - sleep(15) - target.playsound_local(null, 'sound/weapons/ring.ogg', 35) - sleep(15) - target.playsound_local(null, 'sound/weapons/ring.ogg', 35) -- if(6) -+ if("summon_guns") - target.playsound_local(null, 'sound/magic/summon_guns.ogg', 50, 1) -- if(7) -+ if("alarm") - target.playsound_local(null, 'sound/machines/alarm.ogg', 100, 0) -- if(8) -+ if("beepsky") - target.playsound_local(null, 'sound/voice/bfreeze.ogg', 35, 0) -- if(9) -+ if("hallelujah") - target.playsound_local(null, 'sound/effects/pray_chaplain.ogg', 50) - //Rare audio -- if(10) -+ if("creepy") - //These sounds are (mostly) taken from Hidden: Source - var/static/list/hallucinations_creepyasssounds = list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/screech.ogg',\ - 'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\ -@@ -807,42 +841,42 @@ GLOBAL_LIST_INIT(hallucinations_major, list( - 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ - 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg') - target.playsound_local(null, pick(hallucinations_creepyasssounds), 50, 1) -- if(11) -+ if("ratvar") - target.playsound_local(null, 'sound/effects/ratvar_rises.ogg', 100) - sleep(150) - target.playsound_local(null, 'sound/effects/ratvar_reveal.ogg', 100) -- if(12) -+ if("shuttle_dock") - to_chat(target, "

    Priority Announcement

    ") - to_chat(target, "

    The Emergency Shuttle has docked with the station. You have 3 minutes to board the Emergency Shuttle.

    ") - target.playsound_local(null, 'sound/ai/shuttledock.ogg', 100) - //Deconstructing a wall -- if(13) -+ if("wall_decon") - target.playsound_local(null, 'sound/items/welder.ogg', 15, 1) - sleep(105) - target.playsound_local(null, 'sound/items/welder2.ogg', 15, 1) - sleep(15) - target.playsound_local(null, 'sound/items/ratchet.ogg', 15, 1) - //Hacking a door -- if(14) -+ if("door_hack") - target.playsound_local(null, 'sound/items/screwdriver.ogg', 15, 1) - sleep(rand(10,30)) - for(var/i = rand(1,3), i>0, i--) - target.playsound_local(null, 'sound/weapons/empty.ogg', 15, 1) - sleep(rand(10,30)) - target.playsound_local(null, 'sound/machines/airlockforced.ogg', 15, 1) -- if(15) -+ if("esword") - target.playsound_local(null, 'sound/weapons/saberon.ogg',35,1) -- if(16) -+ if("blob_alert") - to_chat(target, "

    Biohazard Alert

    ") - to_chat(target, "

    Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.

    ") - target.playsound_local(null, 'sound/ai/outbreak5.ogg', 100, 0) -- if(17) //Tesla loose! -+ if("tesla") //Tesla loose! - target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 35, 1) - sleep(20) - target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 65, 1) - sleep(20) - target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 100, 1) -- if(18) //AI is doomsdaying! -+ if("malf_ai") //AI is doomsdaying! - to_chat(target, "

    Anomaly Alert

    ") - to_chat(target, "

    Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.

    ") - target.playsound_local(null, 'sound/ai/aimalf.ogg', 100, 0) -@@ -854,9 +888,10 @@ GLOBAL_LIST_INIT(hallucinations_major, list( - /datum/hallucination/hudscrew/New(mob/living/carbon/T, forced = TRUE) - ..() - //Screwy HUD -- target.hal_screwyhud = pick(SCREWYHUD_CRIT,SCREWYHUD_DEAD,SCREWYHUD_HEALTHY) -+ target.set_screwyhud(pick(SCREWYHUD_CRIT,SCREWYHUD_DEAD,SCREWYHUD_HEALTHY)) -+ feedback_details += "Type: [target.hal_screwyhud]" - sleep(rand(100,250)) -- target.hal_screwyhud = SCREWYHUD_NONE -+ target.set_screwyhud(SCREWYHUD_NONE) - qdel(src) - - /datum/hallucination/fake_alert -@@ -867,6 +902,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list( - var/alert_type = pick("not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","weightless","fire","locked","hacked","temphot","tempcold","pressure") - if(specific) - alert_type = specific -+ feedback_details += "Type: [alert_type]" - switch(alert_type) - if("oxy") - target.throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy, override = TRUE) -@@ -962,6 +998,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list( - target.halitem.icon = 'icons/obj/grenade.dmi' - target.halitem.icon_state = "flashbang1" - target.halitem.name = "Flashbang" -+ feedback_details += "Type: [target.halitem.name]" - if(target.client) target.client.screen += target.halitem - QDEL_IN(target.halitem, rand(150, 350)) - qdel(src) -@@ -1006,7 +1043,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list( - /datum/hallucination/death/New(mob/living/carbon/T, forced = TRUE) - set waitfor = 0 - ..() -- target.hal_screwyhud = SCREWYHUD_DEAD -+ target.set_screwyhud(SCREWYHUD_DEAD) - target.Knockdown(300) - target.silent += 10 - var/area/area = get_area(target) -@@ -1025,7 +1062,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list( - to_chat(target, "DEAD: [fakemob.name] says, \"[pick("rip","hey [target.first_name()]","you too?","is the AI rogue?",\ - "i[prob(50)?" fucking":""] hate [pick("blood cult", "clock cult", "revenants", "abductors","double agents","viruses","badmins","you")]")]\"") - sleep(rand(70,90)) -- target.hal_screwyhud = SCREWYHUD_NONE -+ target.set_screwyhud(SCREWYHUD_NONE) - target.SetKnockdown(0) - target.silent = 0 - qdel(src) -@@ -1100,6 +1137,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list( - startlocs += T - var/turf/start = pick(startlocs) - var/proj_type = pick(subtypesof(/obj/item/projectile/hallucination)) -+ feedback_details += "Type: [proj_type]" - var/obj/item/projectile/hallucination/H = new proj_type(start) - target.playsound_local(start, H.hal_fire_sound, 60, 1) - H.hal_target = target +/* +Ideas for the subtle effects of hallucination: + +Light up oxygen/plasma indicators (done) +Cause health to look critical/dead, even when standing (done) +Characters silently watching you +Brief flashes of fire/space/bombs/c4/dangerous shit (done) +Items that are rare/traitorous/don't exist appearing in your inventory slots (done) +Strange audio (should be rare) (done) +Gunshots/explosions/opening doors/less rare audio (done) + +*/ + +#define HAL_LINES_FILE "hallucination.json" + +/mob/living/carbon + var/image/halimage + var/image/halbody + var/obj/halitem + var/hal_screwyhud = SCREWYHUD_NONE + var/next_hallucination = 0 + +GLOBAL_LIST_INIT(hallucinations_minor, list( + /datum/hallucination/sounds, + /datum/hallucination/bolts, + /datum/hallucination/whispers, + /datum/hallucination/message, + /datum/hallucination/hudscrew)) + +GLOBAL_LIST_INIT(hallucinations_medium, list( + /datum/hallucination/fake_alert, + /datum/hallucination/items, + /datum/hallucination/items_other, + /datum/hallucination/dangerflash, + /datum/hallucination/bolts, + /datum/hallucination/fake_flood, + /datum/hallucination/husks, + /datum/hallucination/battle, + /datum/hallucination/fire, + /datum/hallucination/self_delusion)) + +GLOBAL_LIST_INIT(hallucinations_major, list( + /datum/hallucination/fakeattacker, + /datum/hallucination/death, + /datum/hallucination/xeno_attack, + /datum/hallucination/singularity_scare, + /datum/hallucination/delusion, + /datum/hallucination/oh_yeah)) + +/mob/living/carbon/proc/handle_hallucinations() + if(world.time < next_hallucination) + return + + if(hallucination) + var/list/current = GLOB.hallucinations_minor + if(prob(25) && hallucination > 100) + current = GLOB.hallucinations_medium + else if(prob(10) && hallucination > 200) + current = GLOB.hallucinations_major + var/halpick = pick(current) + new halpick(src, FALSE) + +/mob/living/carbon/proc/set_screwyhud(hud_type) + hal_screwyhud = hud_type + update_health_hud() + +/datum/hallucination + var/mob/living/carbon/target + var/cost = 5 //affects the amount of hallucination reduced, and cooldown until the next hallucination + var/feedback_details //extra info for investigate + +/datum/hallucination/New(mob/living/carbon/T, forced = TRUE) + set waitfor = 0 + target = T + if(!forced) + target.hallucination = max(0, target.hallucination - cost) + target.next_hallucination = world.time + (rand(cost * 0.5, cost * 3) * 10) + +/datum/hallucination/proc/wake_and_restore() + target.set_screwyhud(SCREWYHUD_NONE) + target.SetSleeping(0) + +/datum/hallucination/Destroy() + target.investigate_log("was afflicted with a hallucination of type [type]. [feedback_details]", INVESTIGATE_HALLUCINATIONS) + return ..() + +/obj/effect/hallucination + invisibility = INVISIBILITY_OBSERVER + var/mob/living/carbon/target = null + +/obj/effect/hallucination/simple + var/image_icon = 'icons/mob/alien.dmi' + var/image_state = "alienh_pounce" + var/px = 0 + var/py = 0 + var/col_mod = null + var/image/current_image = null + var/image_layer = MOB_LAYER + var/active = TRUE //qdelery + +/obj/effect/hallucination/simple/Initialize(mapload, var/mob/living/carbon/T) + ..() + target = T + current_image = GetImage() + if(target.client) + target.client.images |= current_image + +/obj/effect/hallucination/simple/proc/GetImage() + var/image/I = image(image_icon,src,image_state,image_layer,dir=src.dir) + I.pixel_x = px + I.pixel_y = py + if(col_mod) + I.color = col_mod + return I + +/obj/effect/hallucination/simple/proc/Show(update=1) + if(active) + if(target.client) + target.client.images.Remove(current_image) + if(update) + current_image = GetImage() + if(target.client) + target.client.images |= current_image + +/obj/effect/hallucination/simple/update_icon(new_state,new_icon,new_px=0,new_py=0) + image_state = new_state + if(new_icon) + image_icon = new_icon + else + image_icon = initial(image_icon) + px = new_px + py = new_py + Show() + +/obj/effect/hallucination/simple/Moved(atom/OldLoc, Dir) + Show() + +/obj/effect/hallucination/simple/Destroy() + if(target.client) + target.client.images.Remove(current_image) + active = FALSE + return ..() + +#define FAKE_FLOOD_EXPAND_TIME 20 +#define FAKE_FLOOD_MAX_RADIUS 10 + +/datum/hallucination/fake_flood + //Plasma starts flooding from the nearby vent + var/turf/center + var/list/flood_images = list() + var/list/turf/flood_turfs = list() + var/image_icon = 'icons/effects/tile_effects.dmi' + var/image_state = "plasma" + var/radius = 0 + var/next_expand = 0 + cost = 25 + +/datum/hallucination/fake_flood/New(mob/living/carbon/T, forced = TRUE) + ..() + for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in orange(7,target)) + if(!U.welded) + center = get_turf(U) + break + feedback_details += "Vent Coords: [center.x],[center.y],[center.z]" + flood_images += image(image_icon,center,image_state,MOB_LAYER) + flood_turfs += center + if(target.client) target.client.images |= flood_images + next_expand = world.time + FAKE_FLOOD_EXPAND_TIME + START_PROCESSING(SSobj, src) + +/datum/hallucination/fake_flood/process() + if(next_expand <= world.time) + radius++ + if(radius > FAKE_FLOOD_MAX_RADIUS) + qdel(src) + return + Expand() + if((get_turf(target) in flood_turfs) && !target.internal) + new /datum/hallucination/fake_alert(target, TRUE, "tox_in_air") + next_expand = world.time + FAKE_FLOOD_EXPAND_TIME + +/datum/hallucination/fake_flood/proc/Expand() + for(var/turf/FT in flood_turfs) + for(var/dir in GLOB.cardinals) + var/turf/T = get_step(FT, dir) + if((T in flood_turfs) || !FT.CanAtmosPass(T)) + continue + flood_images += image(image_icon,T,image_state,MOB_LAYER) + flood_turfs += T + if(target.client) + target.client.images |= flood_images + +/datum/hallucination/fake_flood/Destroy() + STOP_PROCESSING(SSobj, src) + qdel(flood_turfs) + flood_turfs = list() + if(target.client) + target.client.images.Remove(flood_images) + target = null + qdel(flood_images) + flood_images = list() + return ..() + +/obj/effect/hallucination/simple/xeno + image_icon = 'icons/mob/alien.dmi' + image_state = "alienh_pounce" + +/obj/effect/hallucination/simple/xeno/Initialize(mapload, mob/living/carbon/T) + ..() + name = "alien hunter ([rand(1, 1000)])" + +/obj/effect/hallucination/simple/xeno/throw_impact(A) + update_icon("alienh_pounce") + if(A == target && target.stat!=DEAD) + target.Knockdown(100) + target.visible_message("[target] flails around wildly.","[name] pounces on you!") + +/datum/hallucination/xeno_attack + //Xeno crawls from nearby vent,jumps at you, and goes back in + var/obj/machinery/atmospherics/components/unary/vent_pump/pump = null + var/obj/effect/hallucination/simple/xeno/xeno = null + cost = 25 + +/datum/hallucination/xeno_attack/New(mob/living/carbon/T, forced = TRUE) + ..() + for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in orange(7,target)) + if(!U.welded) + pump = U + break + feedback_details += "Vent Coords: [pump.x],[pump.y],[pump.z]" + if(pump) + xeno = new(pump.loc,target) + sleep(10) + xeno.update_icon("alienh_leap",'icons/mob/alienleap.dmi',-32,-32) + xeno.throw_at(target,7,1, spin = 0, diagonals_first = 1) + sleep(10) + xeno.update_icon("alienh_leap",'icons/mob/alienleap.dmi',-32,-32) + xeno.throw_at(pump,7,1, spin = 0, diagonals_first = 1) + sleep(10) + var/xeno_name = xeno.name + to_chat(target, "[xeno_name] begins climbing into the ventilation system...") + sleep(30) + qdel(xeno) + to_chat(target, "[xeno_name] scrambles into the ventilation ducts!") + qdel(src) + +/obj/effect/hallucination/simple/clown + image_icon = 'icons/mob/animal.dmi' + image_state = "clown" + +/obj/effect/hallucination/simple/clown/Initialize(mapload, mob/living/carbon/T, duration) + ..(loc, T) + name = pick(GLOB.clown_names) + QDEL_IN(src,duration) + +/obj/effect/hallucination/simple/clown/scary + image_state = "scary_clown" + +/obj/effect/hallucination/simple/bubblegum + name = "Bubblegum" + image_icon = 'icons/mob/lavaland/96x96megafauna.dmi' + image_state = "bubblegum" + px = -32 + +/datum/hallucination/oh_yeah + var/obj/effect/hallucination/simple/bubblegum/bubblegum + var/image/fakebroken + var/image/fakerune + cost = 75 + +/datum/hallucination/oh_yeah/New(mob/living/carbon/T, forced = TRUE) + . = ..() + var/turf/closed/wall/wall + for(var/turf/closed/wall/W in range(7,target)) + wall = W + break + if(!wall) + return INITIALIZE_HINT_QDEL + feedback_details += "Source: [wall.x],[wall.y],[wall.z]" + + fakebroken = image('icons/turf/floors.dmi', wall, "plating", layer = TURF_LAYER) + var/turf/landing = get_turf(target) + var/turf/landing_image_turf = get_step(landing, SOUTHWEST) //the icon is 3x3 + fakerune = image('icons/effects/96x96.dmi', landing_image_turf, "landing", layer = ABOVE_OPEN_TURF_LAYER) + fakebroken.override = TRUE + if(target.client) + target.client.images |= fakebroken + target.client.images |= fakerune + target.playsound_local(wall,'sound/effects/meteorimpact.ogg', 150, 1) + bubblegum = new(wall, target) + addtimer(CALLBACK(src, .proc/bubble_attack, landing), 10) + +/datum/hallucination/oh_yeah/proc/bubble_attack(turf/landing) + var/charged = FALSE //only get hit once + while(get_turf(bubblegum) != landing && target && target.stat != DEAD) + bubblegum.forceMove(get_step_towards(bubblegum, landing)) + bubblegum.setDir(get_dir(bubblegum, landing)) + target.playsound_local(get_turf(bubblegum), 'sound/effects/meteorimpact.ogg', 150, 1) + shake_camera(target, 2, 1) + if(bubblegum.Adjacent(target) && !charged) + charged = TRUE + target.Knockdown(80) + target.adjustStaminaLoss(40) + step_away(target, bubblegum) + shake_camera(target, 4, 3) + target.visible_message("[target] jumps backwards, falling on the ground!","[bubblegum] slams into you!") + sleep(2) + sleep(30) + qdel(src) + +/datum/hallucination/oh_yeah/Destroy() + if(target.client) + target.client.images.Remove(fakebroken) + target.client.images.Remove(fakerune) + QDEL_NULL(fakebroken) + QDEL_NULL(fakerune) + QDEL_NULL(bubblegum) + return ..() + +/datum/hallucination/singularity_scare + //Singularity moving towards you. + //todo Hide where it moved with fake space images + var/obj/effect/hallucination/simple/singularity/s = null + cost = 75 + +/datum/hallucination/singularity_scare/New(mob/living/carbon/T, forced = TRUE) + ..() + var/turf/start = get_turf(T) + var/screen_border = pick(SOUTH,EAST,WEST,NORTH) + for(var/i in 1 to 13) + start = get_step(start,screen_border) + feedback_details += "Source: [start.x],[start.y],[start.z]" + s = new(start,target) + s.parent = src + for(var/i in 1 to 13) + sleep(10) + s.forceMove(get_step(get_turf(s),get_dir(s,target))) + s.Show() + s.Eat() + qdel(s) + +/obj/effect/hallucination/simple/singularity + image_icon = 'icons/effects/224x224.dmi' + image_state = "singularity_s7" + image_layer = MASSIVE_OBJ_LAYER + px = -96 + py = -96 + var/datum/hallucination/singularity_scare/parent + +/obj/effect/hallucination/simple/singularity/proc/Eat(atom/OldLoc, Dir) + var/target_dist = get_dist(src,target) + if(target_dist<=3) //"Eaten" + target.set_screwyhud(SCREWYHUD_DEAD) + target.SetUnconscious(160) + addtimer(CALLBACK(parent, /datum/hallucination/.proc/wake_and_restore), rand(30, 50)) + +/datum/hallucination/battle + cost = 15 + +/datum/hallucination/battle/New(mob/living/carbon/T, forced = TRUE, battle_type) + ..() + var/hits = rand(3,6) + if(!battle_type) + battle_type = pick("laser","esword","gun","stunprod","bomb") + feedback_details += "Type: [battle_type]" + switch(battle_type) + if("laser") //Laser fight + for(var/i in 1 to hits) + target.playsound_local(null, 'sound/weapons/laser.ogg', 25, 1) + if(prob(50)) + addtimer(CALLBACK(target, /mob/.proc/playsound_local, null, 'sound/weapons/sear.ogg', 25, 1), rand(10,20)) + else + addtimer(CALLBACK(target, /mob/.proc/playsound_local, null, 'sound/weapons/effects/searwall.ogg', 25, 1), rand(10,20)) + sleep(rand(CLICK_CD_RANGE, CLICK_CD_RANGE + 8)) + target.playsound_local(null, get_sfx("bodyfall"), 25, 1) + if("esword") //Esword fight + target.playsound_local(null, 'sound/weapons/saberon.ogg',15, 1) + for(var/i=0,i...wabbajack...wabbajack...") + target.playsound_local(target,'sound/magic/staff_change.ogg', 50, 1) + delusion = A + target.client.images |= A + QDEL_IN(src, duration) + +/datum/hallucination/self_delusion/Destroy() + if(target.client) + target.client.images.Remove(delusion) + return ..() + +/datum/hallucination/fakeattacker/New(mob/living/carbon/T, forced = TRUE) + ..() + var/mob/living/carbon/human/clone = null + var/clone_weapon = null + + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) + if(H.stat || H.lying) + continue + clone = H + feedback_details += "Clone of: [H.real_name]" + break + + if(!clone) + return + + var/static/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/ballistic, /obj/item/ammo_box/a357,\ + /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow, /obj/item/weapon/melee/transforming/energy/sword/saber,\ + /obj/item/weapon/storage/box/syndicate, /obj/item/weapon/storage/box/emps,\ + /obj/item/weapon/cartridge/virus/syndicate, /obj/item/clothing/under/chameleon,\ + /obj/item/clothing/shoes/chameleon, /obj/item/weapon/card/id/syndicate,\ + /obj/item/clothing/mask/chameleon, /obj/item/clothing/glasses/thermal,\ + /obj/item/device/chameleon, /obj/item/weapon/card/emag, /obj/item/weapon/grenade/plastic/x4,\ + /obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\ + /obj/item/device/radio/headset/syndicate, /obj/item/weapon/grenade/plastic/c4,\ + /obj/item/device/powersink, /obj/item/weapon/storage/box/syndie_kit,\ + /obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/laser/captain,\ + /obj/item/weapon/hand_tele, /obj/item/weapon/construction/rcd, /obj/item/weapon/tank/jetpack,\ + /obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\ + /obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/weapon/disk/nuclear,\ + /obj/item/clothing/suit/space/nasavoid, /obj/item/weapon/tank) + + var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(get_turf(target),target) + + for(var/obj/item/I in clone.held_items) + if(!(locate(I) in non_fakeattack_weapons)) + clone_weapon = I.name + F.weap = I + + F.name = clone.name + F.my_target = target + F.weapon_name = clone_weapon + + F.left = image(clone,dir = WEST) + F.right = image(clone,dir = EAST) + F.up = image(clone,dir = NORTH) + F.down = image(clone,dir = SOUTH) + + F.updateimage() + qdel(src) + +/obj/effect/fake_attacker + icon = null + icon_state = null + name = "" + desc = "" + density = FALSE + anchored = TRUE + opacity = 0 + var/mob/living/carbon/human/my_target = null + var/weapon_name = null + var/obj/item/weap = null + var/image/stand_icon = null + var/image/currentimage = null + var/icon/base = null + var/skin_tone + var/mob/living/clone = null + var/image/left + var/image/right + var/image/up + var/collapse + var/image/down + + max_integrity = 100 + +/obj/effect/fake_attacker/attackby(obj/item/weapon/P, mob/living/user, params) + step_away(src,my_target,2) + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + my_target.playsound_local(src, P.hitsound, 1) + my_target.visible_message("[my_target] flails around wildly.", \ + "[my_target] has attacked [src]!") + + obj_integrity -= P.force + +/obj/effect/fake_attacker/Crossed(mob/M, somenumber) + if(M == my_target) + step_away(src,my_target,2) + if(prob(30)) + for(var/mob/O in oviewers(world.view , my_target)) + to_chat(O, "[my_target] stumbles around.") + +/obj/effect/fake_attacker/Initialize(mapload, mob/living/carbon/T) + ..() + my_target = T + QDEL_IN(src, 300) + step_away(src,my_target,2) + INVOKE_ASYNC(src, .proc/attack_loop) + + +/obj/effect/fake_attacker/proc/updateimage() +// del src.currentimage + if(src.dir == NORTH) + del src.currentimage + src.currentimage = new /image(up,src) + else if(src.dir == SOUTH) + del src.currentimage + src.currentimage = new /image(down,src) + else if(src.dir == EAST) + del src.currentimage + src.currentimage = new /image(right,src) + else if(src.dir == WEST) + del src.currentimage + src.currentimage = new /image(left,src) + SEND_IMAGE(my_target, currentimage) + + +/obj/effect/fake_attacker/proc/attack_loop() + while(1) + sleep(rand(5,10)) + if(obj_integrity < 0 || my_target.stat) + collapse() + continue + if(get_dist(src,my_target) > 1) + src.setDir(get_dir(src,my_target)) + step_towards(src,my_target) + updateimage() + else + if(prob(15)) + if(weapon_name) + my_target.playsound_local(my_target, weap.hitsound, weap.get_clamped_volume(), 1) + my_target.show_message("[src.name] has attacked [my_target] with [weapon_name]!", 1) + my_target.staminaloss += 30 + if(prob(20)) + my_target.blur_eyes(3) + if(prob(33)) + if(!locate(/obj/effect/overlay) in my_target.loc) + fake_blood(my_target) + else + my_target.playsound_local(my_target, pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg'), 25, 1) + my_target.show_message("[src.name] has punched [my_target]!", 1) + my_target.staminaloss += 30 + if(prob(33)) + if(!locate(/obj/effect/overlay) in my_target.loc) + fake_blood(my_target) + + if(prob(15)) + step_away(src,my_target,2) + +/obj/effect/fake_attacker/proc/collapse() + collapse = 1 + updateimage() + qdel(src) + +/obj/effect/fake_attacker/proc/fake_blood(mob/target) + var/obj/effect/overlay/O = new/obj/effect/overlay(target.loc) + O.name = "blood" + var/image/I = image('icons/effects/blood.dmi',O,"floor[rand(1,7)]",O.dir,1) + SEND_IMAGE(target, I) + QDEL_IN(O, 300) + + +/datum/hallucination/bolts + var/list/doors = list() + cost = 25 + +/datum/hallucination/bolts/New(mob/living/carbon/T, forced, door_number=-1) //-1 for severe, 1-2 for subtle + ..() + var/image/I = null + var/count = 0 + feedback_details += "Door amount: [door_number]" + for(var/obj/machinery/door/airlock/A in range(7, target)) + if(count>door_number && door_number>0) + break + count++ + I = image(A.overlays_file, get_turf(A), "lights_bolts",layer=A.layer+0.1) + doors += I + if(target.client) + target.client.images |= I + target.playsound_local(get_turf(A), 'sound/machines/boltsdown.ogg',30,0,3) + sleep(rand(6,12)) + sleep(100) + for(var/image/B in doors) + if(target.client) + target.client.images.Remove(B) + target.playsound_local(get_turf(B), 'sound/machines/boltsup.ogg',30,0,3) + sleep(rand(6,12)) + qdel(src) + +/datum/hallucination/whispers + cost = 15 + +/datum/hallucination/whispers/New(mob/living/carbon/T, forced = TRUE) + ..() + var/speak_messages = list("[pick_list_replacements(HAL_LINES_FILE, "suspicion")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "greetings")][target.first_name()]!",\ + "[pick_list_replacements(HAL_LINES_FILE, "getout")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "weird")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "didyouhearthat")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "imatraitor")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "doubt")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "aggressive")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "help")]!!",\ + "[pick_list_replacements(HAL_LINES_FILE, "escape")]",\ + "I'm infected, [pick_list_replacements(HAL_LINES_FILE, "infection_advice")]!") + + var/radio_messages = list("Set [target.first_name()] to arrest!",\ + "[pick_list_replacements(HAL_LINES_FILE, "people")] is [pick_list_replacements(HAL_LINES_FILE, "accusations")]!",\ + "Help!",\ + "[pick_list_replacements(HAL_LINES_FILE, "threat")] in [pick_list_replacements(HAL_LINES_FILE, "location")][prob(50)?"!":"!!"]",\ + "Where's [target.first_name()]?"\ + ,"[pick("C","Ai, c","Someone c","Rec")]all the shuttle!"\ + ,"AI [pick("rogue", "is dead")]!!") + + var/list/mob/living/carbon/people = list() + var/list/mob/living/carbon/person = null + var/datum/language/understood_language = target.get_random_understood_language() + for(var/mob/living/carbon/H in view(target)) + if(H == target) + continue + if(!person) + person = H + else + if(get_dist(target,H)The light burns you!", \ + "You don't feel like yourself.", \ + "You hear something squeezing through the ducts...", \ + "You hear a distant scream.", \ + "You feel invincible, nothing can hurt you!", \ + "You feel a tiny prick!", \ + "[target] sneezes.", \ + //The truth, revealed + "You're hallucinating.", \ + //Direct advice + "[pick_list_replacements(HAL_LINES_FILE, "advice")]") + feedback_details += "Message: [chosen]" + to_chat(target, chosen) + qdel(src) + +/datum/hallucination/sounds + cost = 15 + +/datum/hallucination/sounds/New(mob/living/carbon/T, forced = TRUE, sound_type) + ..() + if(!sound_type) + sound_type = pick("airlock","explosion","far_explosion","glass","phone","summon_guns","alarm","beepsky","hallelujah","creepy","ratvar","shuttle_dock", + "wall_decon","door_hack","esword","blob_alert","tesla","malf_ai") + feedback_details += "Type: [sound_type]" + //Strange audio + switch(sound_type) + if("airlock") + target.playsound_local(null,'sound/machines/airlock.ogg', 15, 1) + if("explosion") + if(prob(50)) + target.playsound_local(null,'sound/effects/explosion1.ogg', 50, 1) + else + target.playsound_local(null, 'sound/effects/explosion2.ogg', 50, 1) + if("far_explosion") + target.playsound_local(null, 'sound/effects/explosionfar.ogg', 50, 1) + if("glass") + target.playsound_local(null, pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg'), 50, 1) + if("phone") + target.playsound_local(null, 'sound/weapons/ring.ogg', 35) + sleep(15) + target.playsound_local(null, 'sound/weapons/ring.ogg', 35) + sleep(15) + target.playsound_local(null, 'sound/weapons/ring.ogg', 35) + if("summon_guns") + target.playsound_local(null, 'sound/magic/summon_guns.ogg', 50, 1) + if("alarm") + target.playsound_local(null, 'sound/machines/alarm.ogg', 100, 0) + if("beepsky") + target.playsound_local(null, 'sound/voice/bfreeze.ogg', 35, 0) + if("hallelujah") + target.playsound_local(null, 'sound/effects/pray_chaplain.ogg', 50) + //Rare audio + if("creepy") + //These sounds are (mostly) taken from Hidden: Source + var/static/list/hallucinations_creepyasssounds = list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/screech.ogg',\ + 'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\ + 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\ + 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ + 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg') + target.playsound_local(null, pick(hallucinations_creepyasssounds), 50, 1) + if("ratvar") + target.playsound_local(null, 'sound/effects/ratvar_rises.ogg', 100) + sleep(150) + target.playsound_local(null, 'sound/effects/ratvar_reveal.ogg', 100) + if("shuttle_dock") + to_chat(target, "

    Priority Announcement

    ") + to_chat(target, "

    The Emergency Shuttle has docked with the station. You have 3 minutes to board the Emergency Shuttle.

    ") + target.playsound_local(null, 'sound/ai/shuttledock.ogg', 100) + //Deconstructing a wall + if("wall_decon") + target.playsound_local(null, 'sound/items/welder.ogg', 15, 1) + sleep(105) + target.playsound_local(null, 'sound/items/welder2.ogg', 15, 1) + sleep(15) + target.playsound_local(null, 'sound/items/ratchet.ogg', 15, 1) + //Hacking a door + if("door_hack") + target.playsound_local(null, 'sound/items/screwdriver.ogg', 15, 1) + sleep(rand(10,30)) + for(var/i = rand(1,3), i>0, i--) + target.playsound_local(null, 'sound/weapons/empty.ogg', 15, 1) + sleep(rand(10,30)) + target.playsound_local(null, 'sound/machines/airlockforced.ogg', 15, 1) + if("esword") + target.playsound_local(null, 'sound/weapons/saberon.ogg',35,1) + if("blob_alert") + to_chat(target, "

    Biohazard Alert

    ") + to_chat(target, "

    Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.

    ") + target.playsound_local(null, 'sound/ai/outbreak5.ogg', 100, 0) + if("tesla") //Tesla loose! + target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 35, 1) + sleep(20) + target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 65, 1) + sleep(20) + target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 100, 1) + if("malf_ai") //AI is doomsdaying! + to_chat(target, "

    Anomaly Alert

    ") + to_chat(target, "

    Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.

    ") + target.playsound_local(null, 'sound/ai/aimalf.ogg', 100, 0) + qdel(src) + +/datum/hallucination/hudscrew + cost = 10 + +/datum/hallucination/hudscrew/New(mob/living/carbon/T, forced = TRUE) + ..() + //Screwy HUD + target.set_screwyhud(pick(SCREWYHUD_CRIT,SCREWYHUD_DEAD,SCREWYHUD_HEALTHY)) + feedback_details += "Type: [target.hal_screwyhud]" + sleep(rand(100,250)) + target.set_screwyhud(SCREWYHUD_NONE) + qdel(src) + +/datum/hallucination/fake_alert + cost = 15 + +/datum/hallucination/fake_alert/New(mob/living/carbon/T, forced = TRUE, specific, duration = 150) + ..() + var/alert_type = pick("not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","weightless","fire","locked","hacked","temphot","tempcold","pressure") + if(specific) + alert_type = specific + feedback_details += "Type: [alert_type]" + switch(alert_type) + if("oxy") + target.throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy, override = TRUE) + if("not_enough_tox") + target.throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox, override = TRUE) + if("not_enough_co2") + target.throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2, override = TRUE) + if("too_much_oxy") + target.throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy, override = TRUE) + if("too_much_co2") + target.throw_alert("too_much_co2", /obj/screen/alert/too_much_co2, override = TRUE) + if("tox_in_air") + target.throw_alert("too_much_tox", /obj/screen/alert/too_much_tox, override = TRUE) + if("nutrition") + if(prob(50)) + target.throw_alert("nutrition", /obj/screen/alert/fat, override = TRUE) + else + target.throw_alert("nutrition", /obj/screen/alert/starving, override = TRUE) + if("weightless") + target.throw_alert("weightless", /obj/screen/alert/weightless, override = TRUE) + if("fire") + target.throw_alert("fire", /obj/screen/alert/fire, override = TRUE) + if("temphot") + target.throw_alert("temp", /obj/screen/alert/hot, 3, override = TRUE) + if("tempcold") + target.throw_alert("temp", /obj/screen/alert/cold, 3, override = TRUE) + if("pressure") + if(prob(50)) + target.throw_alert("pressure", /obj/screen/alert/highpressure, 2, override = TRUE) + else + target.throw_alert("pressure", /obj/screen/alert/lowpressure, 2, override = TRUE) + //BEEP BOOP I AM A ROBOT + if("newlaw") + target.throw_alert("newlaw", /obj/screen/alert/newlaw, override = TRUE) + if("locked") + target.throw_alert("locked", /obj/screen/alert/locked, override = TRUE) + if("hacked") + target.throw_alert("hacked", /obj/screen/alert/hacked, override = TRUE) + if("charge") + target.throw_alert("charge",/obj/screen/alert/emptycell, override = TRUE) + sleep(duration) + target.clear_alert(alert_type, clear_override = TRUE) + qdel(src) + +/datum/hallucination/items + cost = 15 + +/datum/hallucination/items/New(mob/living/carbon/T, forced = TRUE) + ..() + //Strange items + if(!target.halitem) + target.halitem = new + var/obj/item/l_hand = target.get_item_for_held_index(1) + var/obj/item/r_hand = target.get_item_for_held_index(2) + var/l = ui_hand_position(target.get_held_index_of_item(l_hand)) + var/r = ui_hand_position(target.get_held_index_of_item(r_hand)) + var/list/slots_free = list(l,r) + if(l_hand) slots_free -= l + if(r_hand) slots_free -= r + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if(!H.belt) slots_free += ui_belt + if(!H.l_store) slots_free += ui_storage1 + if(!H.r_store) slots_free += ui_storage2 + if(slots_free.len) + target.halitem.screen_loc = pick(slots_free) + target.halitem.layer = ABOVE_HUD_LAYER + target.halitem.plane = ABOVE_HUD_PLANE + switch(rand(1,6)) + if(1) //revolver + target.halitem.icon = 'icons/obj/guns/projectile.dmi' + target.halitem.icon_state = "revolver" + target.halitem.name = "Revolver" + if(2) //c4 + target.halitem.icon = 'icons/obj/grenade.dmi' + target.halitem.icon_state = "plastic-explosive0" + target.halitem.name = "C4" + if(prob(25)) + target.halitem.icon_state = "plasticx40" + if(3) //sword + target.halitem.icon = 'icons/obj/weapons.dmi' + target.halitem.icon_state = "sword0" + target.halitem.name = "Energy Sword" + if(4) //stun baton + target.halitem.icon = 'icons/obj/weapons.dmi' + target.halitem.icon_state = "stunbaton" + target.halitem.name = "Stun Baton" + if(5) //emag + target.halitem.icon = 'icons/obj/card.dmi' + target.halitem.icon_state = "emag" + target.halitem.name = "Cryptographic Sequencer" + if(6) //flashbang + target.halitem.icon = 'icons/obj/grenade.dmi' + target.halitem.icon_state = "flashbang1" + target.halitem.name = "Flashbang" + feedback_details += "Type: [target.halitem.name]" + if(target.client) target.client.screen += target.halitem + QDEL_IN(target.halitem, rand(150, 350)) + qdel(src) + +/datum/hallucination/dangerflash + cost = 15 + +/datum/hallucination/dangerflash/New(mob/living/carbon/T, forced = TRUE) + ..() + //Flashes of danger + if(!target.halimage) + var/list/possible_points = list() + for(var/turf/open/floor/F in view(target,world.view)) + possible_points += F + if(possible_points.len) + var/turf/open/floor/danger_point = pick(possible_points) + + switch(rand(1,5)) + if(1) + target.halimage = image('icons/turf/space.dmi',danger_point,"[rand(1,25)]",TURF_LAYER) + if(2) + target.halimage = image('icons/turf/floors/lava.dmi',danger_point,"smooth",TURF_LAYER) + if(3) + target.halimage = image('icons/turf/floors/Chasms.dmi',danger_point,"smooth",TURF_LAYER) + if(4) + target.halimage = image('icons/effects/effects.dmi',danger_point,"anom",OBJ_LAYER+0.01) + if(5) + target.halimage = image('icons/effects/effects.dmi',danger_point,"electricity2",OBJ_LAYER+0.01) + + + if(target.client) + target.client.images += target.halimage + sleep(rand(200,450)) + if(target.client) + target.client.images -= target.halimage + QDEL_NULL(target.halimage) + qdel(src) + +/datum/hallucination/death + cost = 40 + +/datum/hallucination/death/New(mob/living/carbon/T, forced = TRUE) + set waitfor = 0 + ..() + target.set_screwyhud(SCREWYHUD_DEAD) + target.Knockdown(300) + target.silent += 10 + var/area/area = get_area(target) + to_chat(target, "[target.mind.name] has died at [area.name].") + if(prob(50)) + var/mob/fakemob + var/list/dead_people = list() + for(var/mob/dead/observer/G in GLOB.player_list) + dead_people += G + if(LAZYLEN(dead_people)) + fakemob = pick(dead_people) + else + fakemob = target //ever been so lonely you had to haunt yourself? + if(fakemob) + sleep(rand(20, 50)) + to_chat(target, "DEAD: [fakemob.name] says, \"[pick("rip","hey [target.first_name()]","you too?","is the AI rogue?",\ + "i[prob(50)?" fucking":""] hate [pick("blood cult", "clock cult", "revenants", "abductors","double agents","viruses","badmins","you")]")]\"") + sleep(rand(70,90)) + target.set_screwyhud(SCREWYHUD_NONE) + target.SetKnockdown(0) + target.silent = 0 + qdel(src) + +/datum/hallucination/fire + cost = 25 + +/datum/hallucination/fire/New(mob/living/carbon/T, forced = TRUE) + ..() + var/image/fire_overlay = image('icons/mob/OnFire.dmi', target, "Standing", ABOVE_MOB_LAYER) + if(target.client) + target.client.images += fire_overlay + to_chat(target, "You're set on fire!") + target.throw_alert("fire", /obj/screen/alert/fire, override = TRUE) + sleep(20) + target.throw_alert("temp", /obj/screen/alert/hot, 1, override = TRUE) + sleep(30) + target.clear_alert("temp", clear_override = TRUE) + target.throw_alert("temp", /obj/screen/alert/hot, 2, override = TRUE) + sleep(30) + target.clear_alert("temp", clear_override = TRUE) + target.throw_alert("temp", /obj/screen/alert/hot, 3, override = TRUE) + for(var/i in 1 to rand(5, 10)) + target.adjustStaminaLoss(15) + sleep(25) + target.clear_alert("fire", clear_override = TRUE) + target.clear_alert("temp", clear_override = TRUE) + if(target.client) + target.client.images -= fire_overlay + QDEL_NULL(fire_overlay) + qdel(src) + +/datum/hallucination/husks + cost = 20 + +/datum/hallucination/husks/New(mob/living/carbon/T, forced = TRUE) + ..() + if(!target.halbody) + var/list/possible_points = list() + for(var/turf/open/floor/F in view(target,world.view)) + possible_points += F + if(possible_points.len) + var/turf/open/floor/husk_point = pick(possible_points) + switch(rand(1,4)) + if(1) + var/image/body = image('icons/mob/human.dmi',husk_point,"husk",TURF_LAYER) + var/matrix/M = matrix() + M.Turn(90) + body.transform = M + target.halbody = body + if(2,3) + target.halbody = image('icons/mob/human.dmi',husk_point,"husk",TURF_LAYER) + if(4) + target.halbody = image('icons/mob/alien.dmi',husk_point,"alienother",TURF_LAYER) + + if(target.client) + target.client.images += target.halbody + sleep(rand(30,50)) //Only seen for a brief moment. + if(target.client) + target.client.images -= target.halbody + QDEL_NULL(target.halbody) + qdel(src) + +//hallucination projectile code in code/modules/projectiles/projectile/special.dm +/datum/hallucination/stray_bullet + cost = 15 + +/datum/hallucination/stray_bullet/New(mob/living/carbon/C, forced = TRUE) + ..() + var/list/turf/startlocs = list() + for(var/turf/open/T in view(world.view+1,target)-view(world.view,target)) + startlocs += T + var/turf/start = pick(startlocs) + var/proj_type = pick(subtypesof(/obj/item/projectile/hallucination)) + feedback_details += "Type: [proj_type]" + var/obj/item/projectile/hallucination/H = new proj_type(start) + target.playsound_local(start, H.hal_fire_sound, 60, 1) + H.hal_target = target + H.current = start + H.starting = start + H.yo = target.y - start.y + H.xo = target.x - start.x + H.original = target + H.fire() + qdel(src) + From f52d120cafdefc43694d002e3f4a2f774375086d Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 08:27:50 -0500 Subject: [PATCH 148/230] Update world.dm --- code/world.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/world.dm b/code/world.dm index b6badeb348..df267f2536 100644 --- a/code/world.dm +++ b/code/world.dm @@ -59,7 +59,7 @@ if(config.sql_enabled) if(SSdbcore.Connect()) log_world("Database connection established.") - var/datum/DBQuery/db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_version")]") + var/datum/DBQuery/db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_revision")]") db_version.Execute() if(db_version.NextRow()) var/db_major = db_version.item[1] From 822cddc718e534720ecccfc8b9b206decfe9c4e0 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 08:55:45 -0500 Subject: [PATCH 149/230] Update Hallucination.dm --- code/modules/flufftext/Hallucination.dm | 798 +++++++++++++----------- 1 file changed, 432 insertions(+), 366 deletions(-) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 6ae32a9d6a..2b8fe4b064 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -18,46 +18,76 @@ Gunshots/explosions/opening doors/less rare audio (done) var/image/halbody var/obj/halitem var/hal_screwyhud = SCREWYHUD_NONE - var/handling_hal = 0 + var/next_hallucination = 0 + +GLOBAL_LIST_INIT(hallucinations_minor, list( + /datum/hallucination/sounds, + /datum/hallucination/bolts, + /datum/hallucination/whispers, + /datum/hallucination/message, + /datum/hallucination/hudscrew)) + +GLOBAL_LIST_INIT(hallucinations_medium, list( + /datum/hallucination/fake_alert, + /datum/hallucination/items, + /datum/hallucination/items_other, + /datum/hallucination/dangerflash, + /datum/hallucination/bolts, + /datum/hallucination/fake_flood, + /datum/hallucination/husks, + /datum/hallucination/battle, + /datum/hallucination/fire, + /datum/hallucination/self_delusion)) + +GLOBAL_LIST_INIT(hallucinations_major, list( + /datum/hallucination/fakeattacker, + /datum/hallucination/death, + /datum/hallucination/xeno_attack, + /datum/hallucination/singularity_scare, + /datum/hallucination/delusion, + /datum/hallucination/oh_yeah)) /mob/living/carbon/proc/handle_hallucinations() - if(handling_hal) + if(world.time < next_hallucination) return - //Least obvious - var/list/minor = list("sounds"=25,"bolts_minor"=5,"whispers"=15,"message"=10,"hudscrew"=15) - //Something's wrong here - var/list/medium = list("fake_alert"=15,"items"=10,"items_other"=10,"dangerflash"=10,"bolts"=5,"flood"=5,"husks"=10,"battle"=15,"self_delusion"=10) - //AAAAH - var/list/major = list("fake"=20,"death"=10,"xeno"=10,"singulo"=10,"borer"=10,"delusion"=20,"koolaid"=10) + if(hallucination) + var/list/current = GLOB.hallucinations_minor + if(prob(25) && hallucination > 100) + current = GLOB.hallucinations_medium + else if(prob(10) && hallucination > 200) + current = GLOB.hallucinations_major + var/halpick = pick(current) + new halpick(src, FALSE) - handling_hal = 1 - while(hallucination > 20) - sleep(rand(200,500)/(hallucination/25)) - if(prob(20)) - continue - var/list/current = list() - switch(rand(100)) - if(1 to 50) - current = minor - if(51 to 85) - current = medium - if(86 to 100) - current = major +/mob/living/carbon/proc/set_screwyhud(hud_type) + hal_screwyhud = hud_type + update_health_hud() - var/halpick = pickweight(current) +/datum/hallucination + var/mob/living/carbon/target + var/cost = 5 //affects the amount of hallucination reduced, and cooldown until the next hallucination + var/feedback_details //extra info for investigate - hallucinate(halpick) - handling_hal = 0 +/datum/hallucination/New(mob/living/carbon/T, forced = TRUE) + set waitfor = 0 + target = T + if(!forced) + target.hallucination = max(0, target.hallucination - cost) + target.next_hallucination = world.time + (rand(cost * 0.5, cost * 3) * 10) + +/datum/hallucination/proc/wake_and_restore() + target.set_screwyhud(SCREWYHUD_NONE) + target.SetSleeping(0) + +/datum/hallucination/Destroy() + target.investigate_log("was afflicted with a hallucination of type [type]. [feedback_details]", INVESTIGATE_HALLUCINATIONS) + return ..() /obj/effect/hallucination invisibility = INVISIBILITY_OBSERVER var/mob/living/carbon/target = null -/obj/effect/hallucination/proc/wake_and_restore() - target.hal_screwyhud = SCREWYHUD_NONE - target.SetSleeping(0) - /obj/effect/hallucination/simple var/image_icon = 'icons/mob/alien.dmi' var/image_state = "alienh_pounce" @@ -226,39 +256,6 @@ Gunshots/explosions/opening doors/less rare audio (done) /obj/effect/hallucination/simple/clown/scary image_state = "scary_clown" -/obj/effect/hallucination/simple/borer - image_icon = 'icons/mob/borer.dmi' - image_state = "brainslug" - -/obj/effect/hallucination/borer - //A borer unconsciouss you and crawls in your ear - var/obj/machinery/atmospherics/components/unary/vent_pump/pump = null - var/obj/effect/hallucination/simple/borer/borer = null - -/obj/effect/hallucination/borer/Initialize(mapload, var/mob/living/carbon/T) - ..() - target = T - for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in orange(7,target)) - if(!U.welded) - pump = U - break - if(pump) - borer = new(pump.loc,target) - for(var/i=0, i<11, i++) - walk_to(borer, get_step(borer, get_cardinal_dir(borer, T))) - if(borer.Adjacent(T)) - to_chat(T, "You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing.") - T.Stun(80) - sleep(50) - qdel(borer) - sleep(rand(60, 90)) - to_chat(T, "Primary [rand(1000,9999)] states: [pick("Hello","Hi","You're my slave now!","Don't try to get rid of me...")]") - break - sleep(4) - if(!QDELETED(borer)) - qdel(borer) - qdel(src) - /obj/effect/hallucination/simple/bubblegum name = "Bubblegum" image_icon = 'icons/mob/lavaland/96x96megafauna.dmi' @@ -728,22 +725,22 @@ Gunshots/explosions/opening doors/less rare audio (done) /datum/hallucination/whispers/New(mob/living/carbon/T, forced = TRUE) ..() - var/speak_messages = list("[pick("I'm watching you...","I know what you're doing","What are you hiding?","I saw that")]",\ - "[pick("","Hey, ","Hi ","Hello ","Wait, ","It's ")][target.first_name()]!",\ - "[pick("Get out","Go away","Fuck off","OUT!")]",\ - "[pick("Kchck-Chkck? Kchchck!","EEEeeeeEEEE","#@§*&£","H-hhhhh...")]",\ - "[pick("Did you hear that?","Did you see that?","What was that?")]",\ - "[pick("Hail Ratvar","Hail Nar'Sie","Viva!","[generate_code_phrase()]","Are you mr. [pick(GLOB.possible_changeling_IDs)]?")]",\ - "[pick("Why?","What?","Wait, what?","Wait","Hold on","Uh...")]",\ - "Give me that!",\ - "HELP[pick(""," ME"," HIM"," HER"," THEM")]!!",\ - "RUN!!",\ - "I'm infected, [pick("stay away","don't get close","be careful","help me","kill me")]") + var/speak_messages = list("[pick_list_replacements(HAL_LINES_FILE, "suspicion")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "greetings")][target.first_name()]!",\ + "[pick_list_replacements(HAL_LINES_FILE, "getout")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "weird")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "didyouhearthat")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "imatraitor")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "doubt")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "aggressive")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "help")]!!",\ + "[pick_list_replacements(HAL_LINES_FILE, "escape")]",\ + "I'm infected, [pick_list_replacements(HAL_LINES_FILE, "infection_advice")]!") var/radio_messages = list("Set [target.first_name()] to arrest!",\ - "[pick("Captain","Hos","Cmo","Rd","Ce","Hop","Janitor","AI","Viro","Qm","[target.first_name()]")] is [pick("rogue","cult","clockcult","a revhead","a gang leader","a traitor","a ling","dead")]!",\ + "[pick_list_replacements(HAL_LINES_FILE, "people")] is [pick_list_replacements(HAL_LINES_FILE, "accusations")]!",\ "Help!",\ - "[pick("Cult", "Wizard", "Blob", "Ling", "Ops", "Swarmers", "Revenant", "Traitor", "Harm", "I hear flashing", "Help")] in [pick(GLOB.teleportlocs)][prob(50)?"!":"!!"]",\ + "[pick_list_replacements(HAL_LINES_FILE, "threat")] in [pick_list_replacements(HAL_LINES_FILE, "location")][prob(50)?"!":"!!"]",\ "Where's [target.first_name()]?"\ ,"[pick("C","Ai, c","Someone c","Rec")]all the shuttle!"\ ,"AI [pick("rogue", "is dead")]!!") @@ -774,312 +771,381 @@ Gunshots/explosions/opening doors/less rare audio (done) for(var/mob/living/carbon/human/H in GLOB.living_mob_list) humans += H person = pick(humans) - to_chat(target, target.compose_message(person,understood_language,pick(radio_messages),"1459",person.get_spans())) + var/message = target.compose_message(person,understood_language,pick(radio_messages),"1459",person.get_spans()) + feedback_details += "Type: Radio, Source: [person.real_name], Message: [message]" + to_chat(target, message) qdel(src) -/obj/effect/hallucination/message +/datum/hallucination/message + cost = 15 -/obj/effect/hallucination/message/Initialize(mapload, var/mob/living/carbon/T) +/datum/hallucination/message/New(mob/living/carbon/T, forced = TRUE) ..() - target = T var/chosen = pick("The light burns you!", \ "You don't feel like yourself.", \ - "Unknown has punched [target]!", \ "You hear something squeezing through the ducts...", \ "You hear a distant scream.", \ "You feel invincible, nothing can hurt you!", \ "You feel a tiny prick!", \ "[target] sneezes.", \ - "You feel faint.", \ - "You hear a strange, alien voice in your head...[pick("Hiss","Ssss")]", \ - "You can see...everything!") + //The truth, revealed + "You're hallucinating.", \ + //Direct advice + "[pick_list_replacements(HAL_LINES_FILE, "advice")]") + feedback_details += "Message: [chosen]" to_chat(target, chosen) qdel(src) -/mob/living/carbon/proc/hallucinate(hal_type, specific) // specific is used to specify a particular hallucination - set waitfor = 0 - switch(hal_type) - if("xeno") - new /obj/effect/hallucination/xeno_attack(src.loc,src) - if("borer") - new /obj/effect/hallucination/borer(src.loc,src) - if("singulo") - new /obj/effect/hallucination/singularity_scare(src.loc,src) - if("koolaid") - new /obj/effect/hallucination/oh_yeah(src.loc,src) - if("battle") - new /obj/effect/hallucination/battle(src.loc,src) - if("flood") - new /obj/effect/hallucination/fake_flood(src.loc,src) - if("delusion") - new /obj/effect/hallucination/delusion(src.loc,src) - if("self_delusion") - new /obj/effect/hallucination/self_delusion(src.loc,src) - if("fake") - new /obj/effect/hallucination/fakeattacker(src.loc,src) - if("bolts") - new /obj/effect/hallucination/bolts(src.loc,src) - if("bolts_minor") - new /obj/effect/hallucination/bolts(src.loc,src,rand(1,2)) - if("whispers") - new /obj/effect/hallucination/whispers(src.loc,src) - if("message") - new /obj/effect/hallucination/message(src.loc,src) - if("items_other") - new /obj/effect/hallucination/items_other(src.loc,src) - if("sounds") - //Strange audio - switch(rand(1,20)) - if(1) playsound_local(null,'sound/machines/airlock.ogg', 15, 1) - if(2) - if(prob(50)) playsound_local(null,'sound/effects/explosion1.ogg', 50, 1) - else playsound_local(null, 'sound/effects/explosion2.ogg', 50, 1) - if(3) playsound_local(null, 'sound/effects/explosionfar.ogg', 50, 1) - if(4) playsound_local(null, pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg'), 50, 1) - if(5) - playsound_local(null, 'sound/weapons/ring.ogg', 35) - sleep(15) - playsound_local(null, 'sound/weapons/ring.ogg', 35) - sleep(15) - playsound_local(null, 'sound/weapons/ring.ogg', 35) - if(6) playsound_local(null, 'sound/magic/summon_guns.ogg', 50, 1) - if(7) playsound_local(null, 'sound/machines/alarm.ogg', 100, 0) - if(8) playsound_local(null, 'sound/voice/bfreeze.ogg', 35, 0) - if(9) - //To make it more realistic, I added two gunshots (enough to kill) - playsound_local(null, 'sound/weapons/gunshot.ogg', 25, 1) - spawn(rand(10,30)) - playsound_local(null, 'sound/weapons/gunshot.ogg', 25, 1) - sleep(rand(5,10)) - playsound_local(null, sound(get_sfx("bodyfall"), 25), 25, 1) - if(10) playsound_local(null, 'sound/effects/pray_chaplain.ogg', 50) - if(11) - //Same as above, but with tasers. - playsound_local(null, 'sound/weapons/taser.ogg', 25, 1) - spawn(rand(10,30)) - playsound_local(null, 'sound/weapons/taser.ogg', 25, 1) - sleep(rand(5,10)) - playsound_local(null, sound(get_sfx("bodyfall"), 25), 25, 1) - //Rare audio - if(12) - //These sounds are (mostly) taken from Hidden: Source - var/list/creepyasssounds = list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/screech.ogg',\ - 'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\ - 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\ - 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ - 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg') - playsound_local(null, pick(creepyasssounds), 50, 1) - if(13) - playsound_local(null, 'sound/effects/ratvar_rises.ogg', 100) - sleep(150) - playsound_local(null, 'sound/effects/ratvar_reveal.ogg', 100) - if(14) - to_chat(src, "

    Priority Announcement

    ") - to_chat(src, "

    The Emergency Shuttle has docked with the station. You have 3 minutes to board the Emergency Shuttle.

    ") - playsound_local(null, 'sound/ai/shuttledock.ogg', 100) - //Deconstructing a wall - if(15) - playsound_local(null, 'sound/items/welder.ogg', 15, 1) - sleep(105) - playsound_local(null, 'sound/items/welder2.ogg', 15, 1) - sleep(15) - playsound_local(null, 'sound/items/ratchet.ogg', 15, 1) - //Hacking a door - if(16) - playsound_local(null, 'sound/items/screwdriver.ogg', 15, 1) - sleep(rand(10,30)) - for(var/i = rand(1,3), i>0, i--) - playsound_local(null, 'sound/weapons/empty.ogg', 15, 1) - sleep(rand(10,30)) - playsound_local(null, 'sound/machines/airlockforced.ogg', 15, 1) - if(17) - playsound_local(null, 'sound/weapons/saberon.ogg',35,1) - if(18) - to_chat(src, "

    Biohazard Alert

    ") - to_chat(src, "

    Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.

    ") - playsound_local(null, 'sound/ai/outbreak5.ogg') - if(19) //Tesla loose! - playsound_local(null, 'sound/magic/lightningbolt.ogg', 35, 1) - sleep(20) - playsound_local(null, 'sound/magic/lightningbolt.ogg', 65, 1) - sleep(20) - playsound_local(null, 'sound/magic/lightningbolt.ogg', 100, 1) - if(20) //AI is doomsdaying! - to_chat(src, "

    Anomaly Alert

    ") - to_chat(src, "

    Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.

    ") - playsound_local(null, 'sound/ai/aimalf.ogg', 100) - if("hudscrew") - //Screwy HUD - //to_chat(src, "Screwy HUD") - hal_screwyhud = pick(SCREWYHUD_NONE,SCREWYHUD_CRIT,SCREWYHUD_DEAD,SCREWYHUD_HEALTHY) - sleep(rand(100,250)) - hal_screwyhud = 0 +/datum/hallucination/sounds + cost = 15 - if("fake_alert") - var/alert_type = pick("oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","tox_in_air","newlaw","nutrition","charge","weightless","fire","locked","hacked","temp","pressure") - if(specific) - alert_type = specific - switch(alert_type) - if("oxy") - throw_alert("oxy", /obj/screen/alert/oxy, override = TRUE) - if("not_enough_tox") - throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox, override = TRUE) - if("not_enough_co2") - throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2, override = TRUE) - if("too_much_oxy") - throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy, override = TRUE) - if("too_much_co2") - throw_alert("too_much_co2", /obj/screen/alert/too_much_co2, override = TRUE) - if("tox_in_air") - throw_alert("tox_in_air", /obj/screen/alert/tox_in_air, override = TRUE) - if("nutrition") - if(prob(50)) - throw_alert("nutrition", /obj/screen/alert/fat, override = TRUE) - else - throw_alert("nutrition", /obj/screen/alert/starving, override = TRUE) - if("weightless") - throw_alert("weightless", /obj/screen/alert/weightless, override = TRUE) - if("fire") - throw_alert("fire", /obj/screen/alert/fire, override = TRUE) - if("temp") - if(prob(50)) - throw_alert("temp", /obj/screen/alert/hot, 3, override = TRUE) - else - throw_alert("temp", /obj/screen/alert/cold, 3, override = TRUE) - if("pressure") - if(prob(50)) - throw_alert("pressure", /obj/screen/alert/highpressure, 2, override = TRUE) - else - throw_alert("pressure", /obj/screen/alert/lowpressure, 2, override = TRUE) - //BEEP BOOP I AM A ROBOT - if("newlaw") - throw_alert("newlaw", /obj/screen/alert/newlaw, override = TRUE) - if("locked") - throw_alert("locked", /obj/screen/alert/locked, override = TRUE) - if("hacked") - throw_alert("hacked", /obj/screen/alert/hacked, override = TRUE) - if("charge") - throw_alert("charge",/obj/screen/alert/emptycell, override = TRUE) - sleep(rand(100,200)) - clear_alert(alert_type, clear_override = TRUE) - - if("items") - //Strange items - //to_chat(src, "Traitor Items") - if(!halitem) - halitem = new - var/obj/item/l_hand = get_item_for_held_index(1) - var/obj/item/r_hand = get_item_for_held_index(2) - var/l = ui_hand_position(get_held_index_of_item(l_hand)) - var/r = ui_hand_position(get_held_index_of_item(r_hand)) - var/list/slots_free = list(l,r) - if(l_hand) slots_free -= l - if(r_hand) slots_free -= r - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(!H.belt) slots_free += ui_belt - if(!H.l_store) slots_free += ui_storage1 - if(!H.r_store) slots_free += ui_storage2 - if(slots_free.len) - halitem.screen_loc = pick(slots_free) - halitem.layer = ABOVE_HUD_LAYER - halitem.plane = ABOVE_HUD_PLANE - switch(rand(1,6)) - if(1) //revolver - halitem.icon = 'icons/obj/guns/projectile.dmi' - halitem.icon_state = "revolver" - halitem.name = "Revolver" - if(2) //c4 - halitem.icon = 'icons/obj/grenade.dmi' - halitem.icon_state = "plastic-explosive0" - halitem.name = "Mysterious Package" - if(prob(25)) - halitem.icon_state = "c4small_1" - if(3) //sword - halitem.icon = 'icons/obj/weapons.dmi' - halitem.icon_state = "sword1" - halitem.name = "Sword" - if(4) //stun baton - halitem.icon = 'icons/obj/weapons.dmi' - halitem.icon_state = "stunbaton" - halitem.name = "Stun Baton" - if(5) //emag - halitem.icon = 'icons/obj/card.dmi' - halitem.icon_state = "emag" - halitem.name = "Cryptographic Sequencer" - if(6) //flashbang - halitem.icon = 'icons/obj/grenade.dmi' - halitem.icon_state = "flashbang1" - halitem.name = "Flashbang" - if(client) client.screen += halitem - QDEL_IN(halitem, rand(100, 250)) - if("dangerflash") - //Flashes of danger - //to_chat(src, "Danger Flash") - if(!halimage) - var/list/possible_points = list() - for(var/turf/open/floor/F in view(src,world.view)) - possible_points += F - if(possible_points.len) - var/turf/open/floor/target = pick(possible_points) - - switch(rand(1,4)) - if(1) - //to_chat(src, "Space") - halimage = image('icons/turf/space.dmi',target,"[rand(1,25)]",TURF_LAYER) - if(2) - //to_chat(src, "Lava") - halimage = image('icons/turf/floors/lava.dmi',target,"smooth",TURF_LAYER) - if(3) - //to_chat(src, "Chasm") - halimage = image('icons/turf/floors/Chasms.dmi',target,"smooth",TURF_LAYER) - if(4) - //to_chat(src, "C4") - halimage = image('icons/obj/grenade.dmi',target,"plastic-explosive2",OBJ_LAYER+0.01) - - - if(client) client.images += halimage - sleep(rand(40,60)) //Only seen for a brief moment. - if(client) client.images -= halimage - halimage = null - if("death") - //Fake death - hal_screwyhud = SCREWYHUD_DEAD - SetUnconscious(400) - var/area/area = get_area(src) - to_chat(src, "[mind.name] has died at [area.name].") +/datum/hallucination/sounds/New(mob/living/carbon/T, forced = TRUE, sound_type) + ..() + if(!sound_type) + sound_type = pick("airlock","explosion","far_explosion","glass","phone","summon_guns","alarm","beepsky","hallelujah","creepy","ratvar","shuttle_dock", + "wall_decon","door_hack","esword","blob_alert","tesla","malf_ai") + feedback_details += "Type: [sound_type]" + //Strange audio + switch(sound_type) + if("airlock") + target.playsound_local(null,'sound/machines/airlock.ogg', 15, 1) + if("explosion") if(prob(50)) - var/list/dead_people = list() - for(var/mob/dead/observer/G in GLOB.player_list) - dead_people += G - var/mob/dead/observer/fakemob = pick(dead_people) - if(fakemob) - sleep(rand(30, 60)) - to_chat(src, "DEAD: [fakemob.name] says, \"[pick("rip","welcome [first_name()]","you too?","is the AI malf?",\ - "i[prob(50)?" fucking":""] hate [pick("blood cult", "clock cult", "revenants", "abductors","double agents","viruses","badmins","you")]")]\"") - sleep(rand(50,70)) - hal_screwyhud = SCREWYHUD_NONE - SetSleeping(0) - if("husks") - if(!halbody) - var/list/possible_points = list() - for(var/turf/open/floor/F in view(src,world.view)) - possible_points += F - if(possible_points.len) - var/turf/open/floor/target = pick(possible_points) - switch(rand(1,4)) - if(1) - var/image/body = image('icons/mob/human.dmi',target,"husk",TURF_LAYER) - var/matrix/M = matrix() - M.Turn(90) - body.transform = M - halbody = body - if(2,3) - halbody = image('icons/mob/human.dmi',target,"husk",TURF_LAYER) - if(4) - halbody = image('icons/mob/alien.dmi',target,"alienother",TURF_LAYER) + target.playsound_local(null,'sound/effects/explosion1.ogg', 50, 1) + else + target.playsound_local(null, 'sound/effects/explosion2.ogg', 50, 1) + if("far_explosion") + target.playsound_local(null, 'sound/effects/explosionfar.ogg', 50, 1) + if("glass") + target.playsound_local(null, pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg'), 50, 1) + if("phone") + target.playsound_local(null, 'sound/weapons/ring.ogg', 35) + sleep(15) + target.playsound_local(null, 'sound/weapons/ring.ogg', 35) + sleep(15) + target.playsound_local(null, 'sound/weapons/ring.ogg', 35) + if("summon_guns") + target.playsound_local(null, 'sound/magic/summon_guns.ogg', 50, 1) + if("alarm") + target.playsound_local(null, 'sound/machines/alarm.ogg', 100, 0) + if("beepsky") + target.playsound_local(null, 'sound/voice/bfreeze.ogg', 35, 0) + if("hallelujah") + target.playsound_local(null, 'sound/effects/pray_chaplain.ogg', 50) + //Rare audio + if("creepy") + //These sounds are (mostly) taken from Hidden: Source + var/static/list/hallucinations_creepyasssounds = list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/screech.ogg',\ + 'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\ + 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\ + 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ + 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg') + target.playsound_local(null, pick(hallucinations_creepyasssounds), 50, 1) + if("ratvar") + target.playsound_local(null, 'sound/effects/ratvar_rises.ogg', 100) + sleep(150) + target.playsound_local(null, 'sound/effects/ratvar_reveal.ogg', 100) + if("shuttle_dock") + to_chat(target, "

    Priority Announcement

    ") + to_chat(target, "

    The Emergency Shuttle has docked with the station. You have 3 minutes to board the Emergency Shuttle.

    ") + target.playsound_local(null, 'sound/ai/shuttledock.ogg', 100) + //Deconstructing a wall + if("wall_decon") + target.playsound_local(null, 'sound/items/welder.ogg', 15, 1) + sleep(105) + target.playsound_local(null, 'sound/items/welder2.ogg', 15, 1) + sleep(15) + target.playsound_local(null, 'sound/items/ratchet.ogg', 15, 1) + //Hacking a door + if("door_hack") + target.playsound_local(null, 'sound/items/screwdriver.ogg', 15, 1) + sleep(rand(10,30)) + for(var/i = rand(1,3), i>0, i--) + target.playsound_local(null, 'sound/weapons/empty.ogg', 15, 1) + sleep(rand(10,30)) + target.playsound_local(null, 'sound/machines/airlockforced.ogg', 15, 1) + if("esword") + target.playsound_local(null, 'sound/weapons/saberon.ogg',35,1) + if("blob_alert") + to_chat(target, "

    Biohazard Alert

    ") + to_chat(target, "

    Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.

    ") + target.playsound_local(null, 'sound/ai/outbreak5.ogg', 100, 0) + if("tesla") //Tesla loose! + target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 35, 1) + sleep(20) + target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 65, 1) + sleep(20) + target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 100, 1) + if("malf_ai") //AI is doomsdaying! + to_chat(target, "

    Anomaly Alert

    ") + to_chat(target, "

    Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.

    ") + target.playsound_local(null, 'sound/ai/aimalf.ogg', 100, 0) + qdel(src) + +/datum/hallucination/hudscrew + cost = 10 + +/datum/hallucination/hudscrew/New(mob/living/carbon/T, forced = TRUE) + ..() + //Screwy HUD + target.set_screwyhud(pick(SCREWYHUD_CRIT,SCREWYHUD_DEAD,SCREWYHUD_HEALTHY)) + feedback_details += "Type: [target.hal_screwyhud]" + sleep(rand(100,250)) + target.set_screwyhud(SCREWYHUD_NONE) + qdel(src) + +/datum/hallucination/fake_alert + cost = 15 + +/datum/hallucination/fake_alert/New(mob/living/carbon/T, forced = TRUE, specific, duration = 150) + ..() + var/alert_type = pick("not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","weightless","fire","locked","hacked","temphot","tempcold","pressure") + if(specific) + alert_type = specific + feedback_details += "Type: [alert_type]" + switch(alert_type) + if("oxy") + target.throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy, override = TRUE) + if("not_enough_tox") + target.throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox, override = TRUE) + if("not_enough_co2") + target.throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2, override = TRUE) + if("too_much_oxy") + target.throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy, override = TRUE) + if("too_much_co2") + target.throw_alert("too_much_co2", /obj/screen/alert/too_much_co2, override = TRUE) + if("tox_in_air") + target.throw_alert("too_much_tox", /obj/screen/alert/too_much_tox, override = TRUE) + if("nutrition") + if(prob(50)) + target.throw_alert("nutrition", /obj/screen/alert/fat, override = TRUE) + else + target.throw_alert("nutrition", /obj/screen/alert/starving, override = TRUE) + if("weightless") + target.throw_alert("weightless", /obj/screen/alert/weightless, override = TRUE) + if("fire") + target.throw_alert("fire", /obj/screen/alert/fire, override = TRUE) + if("temphot") + target.throw_alert("temp", /obj/screen/alert/hot, 3, override = TRUE) + if("tempcold") + target.throw_alert("temp", /obj/screen/alert/cold, 3, override = TRUE) + if("pressure") + if(prob(50)) + target.throw_alert("pressure", /obj/screen/alert/highpressure, 2, override = TRUE) + else + target.throw_alert("pressure", /obj/screen/alert/lowpressure, 2, override = TRUE) + //BEEP BOOP I AM A ROBOT + if("newlaw") + target.throw_alert("newlaw", /obj/screen/alert/newlaw, override = TRUE) + if("locked") + target.throw_alert("locked", /obj/screen/alert/locked, override = TRUE) + if("hacked") + target.throw_alert("hacked", /obj/screen/alert/hacked, override = TRUE) + if("charge") + target.throw_alert("charge",/obj/screen/alert/emptycell, override = TRUE) + sleep(duration) + target.clear_alert(alert_type, clear_override = TRUE) + qdel(src) + +/datum/hallucination/items + cost = 15 + +/datum/hallucination/items/New(mob/living/carbon/T, forced = TRUE) + ..() + //Strange items + if(!target.halitem) + target.halitem = new + var/obj/item/l_hand = target.get_item_for_held_index(1) + var/obj/item/r_hand = target.get_item_for_held_index(2) + var/l = ui_hand_position(target.get_held_index_of_item(l_hand)) + var/r = ui_hand_position(target.get_held_index_of_item(r_hand)) + var/list/slots_free = list(l,r) + if(l_hand) slots_free -= l + if(r_hand) slots_free -= r + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if(!H.belt) slots_free += ui_belt + if(!H.l_store) slots_free += ui_storage1 + if(!H.r_store) slots_free += ui_storage2 + if(slots_free.len) + target.halitem.screen_loc = pick(slots_free) + target.halitem.layer = ABOVE_HUD_LAYER + target.halitem.plane = ABOVE_HUD_PLANE + switch(rand(1,6)) + if(1) //revolver + target.halitem.icon = 'icons/obj/guns/projectile.dmi' + target.halitem.icon_state = "revolver" + target.halitem.name = "Revolver" + if(2) //c4 + target.halitem.icon = 'icons/obj/grenade.dmi' + target.halitem.icon_state = "plastic-explosive0" + target.halitem.name = "C4" + if(prob(25)) + target.halitem.icon_state = "plasticx40" + if(3) //sword + target.halitem.icon = 'icons/obj/weapons.dmi' + target.halitem.icon_state = "sword0" + target.halitem.name = "Energy Sword" + if(4) //stun baton + target.halitem.icon = 'icons/obj/weapons.dmi' + target.halitem.icon_state = "stunbaton" + target.halitem.name = "Stun Baton" + if(5) //emag + target.halitem.icon = 'icons/obj/card.dmi' + target.halitem.icon_state = "emag" + target.halitem.name = "Cryptographic Sequencer" + if(6) //flashbang + target.halitem.icon = 'icons/obj/grenade.dmi' + target.halitem.icon_state = "flashbang1" + target.halitem.name = "Flashbang" + feedback_details += "Type: [target.halitem.name]" + if(target.client) target.client.screen += target.halitem + QDEL_IN(target.halitem, rand(150, 350)) + qdel(src) + +/datum/hallucination/dangerflash + cost = 15 + +/datum/hallucination/dangerflash/New(mob/living/carbon/T, forced = TRUE) + ..() + //Flashes of danger + if(!target.halimage) + var/list/possible_points = list() + for(var/turf/open/floor/F in view(target,world.view)) + possible_points += F + if(possible_points.len) + var/turf/open/floor/danger_point = pick(possible_points) + + switch(rand(1,5)) + if(1) + target.halimage = image('icons/turf/space.dmi',danger_point,"[rand(1,25)]",TURF_LAYER) + if(2) + target.halimage = image('icons/turf/floors/lava.dmi',danger_point,"smooth",TURF_LAYER) + if(3) + target.halimage = image('icons/turf/floors/Chasms.dmi',danger_point,"smooth",TURF_LAYER) + if(4) + target.halimage = image('icons/effects/effects.dmi',danger_point,"anom",OBJ_LAYER+0.01) + if(5) + target.halimage = image('icons/effects/effects.dmi',danger_point,"electricity2",OBJ_LAYER+0.01) + + + if(target.client) + target.client.images += target.halimage + sleep(rand(200,450)) + if(target.client) + target.client.images -= target.halimage + QDEL_NULL(target.halimage) + qdel(src) + +/datum/hallucination/death + cost = 40 + +/datum/hallucination/death/New(mob/living/carbon/T, forced = TRUE) + set waitfor = 0 + ..() + target.set_screwyhud(SCREWYHUD_DEAD) + target.Knockdown(300) + target.silent += 10 + var/area/area = get_area(target) + to_chat(target, "[target.mind.name] has died at [area.name].") + if(prob(50)) + var/mob/fakemob + var/list/dead_people = list() + for(var/mob/dead/observer/G in GLOB.player_list) + dead_people += G + if(LAZYLEN(dead_people)) + fakemob = pick(dead_people) + else + fakemob = target //ever been so lonely you had to haunt yourself? + if(fakemob) + sleep(rand(20, 50)) + to_chat(target, "DEAD: [fakemob.name] says, \"[pick("rip","hey [target.first_name()]","you too?","is the AI rogue?",\ + "i[prob(50)?" fucking":""] hate [pick("blood cult", "clock cult", "revenants", "abductors","double agents","viruses","badmins","you")]")]\"") + sleep(rand(70,90)) + target.set_screwyhud(SCREWYHUD_NONE) + target.SetKnockdown(0) + target.silent = 0 + qdel(src) + +/datum/hallucination/fire + cost = 25 + +/datum/hallucination/fire/New(mob/living/carbon/T, forced = TRUE) + ..() + var/image/fire_overlay = image('icons/mob/OnFire.dmi', target, "Standing", ABOVE_MOB_LAYER) + if(target.client) + target.client.images += fire_overlay + to_chat(target, "You're set on fire!") + target.throw_alert("fire", /obj/screen/alert/fire, override = TRUE) + sleep(20) + target.throw_alert("temp", /obj/screen/alert/hot, 1, override = TRUE) + sleep(30) + target.clear_alert("temp", clear_override = TRUE) + target.throw_alert("temp", /obj/screen/alert/hot, 2, override = TRUE) + sleep(30) + target.clear_alert("temp", clear_override = TRUE) + target.throw_alert("temp", /obj/screen/alert/hot, 3, override = TRUE) + for(var/i in 1 to rand(5, 10)) + target.adjustStaminaLoss(15) + sleep(25) + target.clear_alert("fire", clear_override = TRUE) + target.clear_alert("temp", clear_override = TRUE) + if(target.client) + target.client.images -= fire_overlay + QDEL_NULL(fire_overlay) + qdel(src) + +/datum/hallucination/husks + cost = 20 + +/datum/hallucination/husks/New(mob/living/carbon/T, forced = TRUE) + ..() + if(!target.halbody) + var/list/possible_points = list() + for(var/turf/open/floor/F in view(target,world.view)) + possible_points += F + if(possible_points.len) + var/turf/open/floor/husk_point = pick(possible_points) + switch(rand(1,4)) + if(1) + var/image/body = image('icons/mob/human.dmi',husk_point,"husk",TURF_LAYER) + var/matrix/M = matrix() + M.Turn(90) + body.transform = M + target.halbody = body + if(2,3) + target.halbody = image('icons/mob/human.dmi',husk_point,"husk",TURF_LAYER) + if(4) + target.halbody = image('icons/mob/alien.dmi',husk_point,"alienother",TURF_LAYER) + + if(target.client) + target.client.images += target.halbody + sleep(rand(30,50)) //Only seen for a brief moment. + if(target.client) + target.client.images -= target.halbody + QDEL_NULL(target.halbody) + qdel(src) + +//hallucination projectile code in code/modules/projectiles/projectile/special.dm +/datum/hallucination/stray_bullet + cost = 15 + +/datum/hallucination/stray_bullet/New(mob/living/carbon/C, forced = TRUE) + ..() + var/list/turf/startlocs = list() + for(var/turf/open/T in view(world.view+1,target)-view(world.view,target)) + startlocs += T + var/turf/start = pick(startlocs) + var/proj_type = pick(subtypesof(/obj/item/projectile/hallucination)) + feedback_details += "Type: [proj_type]" + var/obj/item/projectile/hallucination/H = new proj_type(start) + target.playsound_local(start, H.hal_fire_sound, 60, 1) + H.hal_target = target + H.current = start + H.starting = start + H.yo = target.y - start.y + H.xo = target.x - start.x + H.original = target + H.fire() + qdel(src) - if(client) client.images += halbody - spawn(rand(30,50)) //Only seen for a brief moment. - if(client) client.images -= halbody - halbody = null From d58b2f7af36f2fe2441986106f5ee474ba9e4b35 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 08:56:20 -0500 Subject: [PATCH 150/230] Automatic changelog generation for PR #2231 [ci skip] --- html/changelogs/AutoChangeLog-pr-2231.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2231.yml diff --git a/html/changelogs/AutoChangeLog-pr-2231.yml b/html/changelogs/AutoChangeLog-pr-2231.yml new file mode 100644 index 0000000000..c25b4b2b49 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2231.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - tweak: "Spell action buttons now have their description in a tooltip." From 7faec4505367e3fd73c8ac78fa9ed9547c6a127d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 09:07:03 -0500 Subject: [PATCH 151/230] Tiny bit better splitting on add_details --- code/controllers/subsystem/blackbox.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm index afa77b0207..3344afcaaa 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -250,7 +250,7 @@ SUBSYSTEM_DEF(blackbox) return 0 return value -/datum/feedback_variable/proc/get_variable() +/datum/feedback_variable/proc/get_variable() return variable /datum/feedback_variable/proc/set_details(text) @@ -260,12 +260,12 @@ SUBSYSTEM_DEF(blackbox) /datum/feedback_variable/proc/add_details(text) if (istext(text)) if (!details) - details = text + details = "\"[text]\"" else - details += " [text]" + details += " | \"[text]\"" -/datum/feedback_variable/proc/get_details() +/datum/feedback_variable/proc/get_details() return details /datum/feedback_variable/proc/get_parsed() - return list(variable,value,details) + return list(variable,value,details) \ No newline at end of file From fa8ed2de17ed9065ce6587a60d675ba068c2dab0 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 09:13:33 -0500 Subject: [PATCH 152/230] Update component.dm --- code/datums/components/component.dm | 229 ++-------------------------- 1 file changed, 14 insertions(+), 215 deletions(-) diff --git a/code/datums/components/component.dm b/code/datums/components/component.dm index bc65b1cabe..5e25a581f8 100644 --- a/code/datums/components/component.dm +++ b/code/datums/components/component.dm @@ -26,7 +26,7 @@ //set up the typecache var/our_type = type - for(var/I in _GetInverseTypeList(our_type)) + for(var/I in _GetInverseTypeListExceptRoot(our_type)) var/test = dc[I] if(test) //already another component of this type here var/list/components_of_type @@ -66,7 +66,7 @@ if(P) var/list/dc = P.datum_components var/our_type = type - for(var/I in _GetInverseTypeList(our_type)) + for(var/I in _GetInverseTypeListExceptRoot(our_type)) var/list/components_of_type = dc[I] if(islist(components_of_type)) // var/list/subtracted = components_of_type - src @@ -110,226 +110,25 @@ /datum/component/proc/OnTransfer(datum/new_parent) return -/datum/component/proc/AfterComponentActivated() - return - -/datum/component/proc/_GetInverseTypeList(current_type) - . = list(current_type) +/datum/component/proc/_GetInverseTypeListExceptRoot(our_type_cached) + var/datum/component/current_type = our_type_cached + . = list() while (current_type != /datum/component) - current_type = type2parent(current_type) . += current_type + current_type = type2parent(current_type) + +/datum/var/list/datum_components //special typecache of /datum/component /datum/proc/SendSignal(sigtype, ...) var/list/comps = datum_components . = FALSE - if(!comps) - return - var/target = comps[/datum/component] - if(!islist(target)) - var/datum/component/C = target - if(C.enabled && C.ReceiveSignal(arglist(args))) + for(var/I in comps) + var/datum/component/C = I + if(!C.enabled) + continue + if(C.ReceiveSignal(arglist(args))) ComponentActivated(C) - C.AfterComponentActivated() - return TRUE - else - for(var/I in target) - var/datum/component/C = I - if(!C.enabled) - continue - if(C.ReceiveSignal(arglist(args))) - ComponentActivated(C) - . = TRUE - -/datum/proc/ComponentActivated(datum/component/C) - return - -/datum/proc/GetComponent(c_type) - var/list/dc = datum_components - if(!dc) - return null - . = dc[c_type] - if(islist(.)) - return .[1] - -/datum/proc/GetExactComponent(c_type) - var/list/dc = datum_components - if(!dc) - return null - var/datum/component/C = dc[c_type] - if(C) - if(islist(C)) - C = C[1] - if(C.type == c_type) - return C - return null - -/datum/proc/GetComponents(c_type) - var/list/dc = datum_components - if(!dc) - return null - . = dc[c_type] - if(!islist(.)) - return list(.) - -/datum/proc/AddComponent(new_type, ...) - var/nt = new_type - args[1] = src - var/datum/component/C = new nt(arglist(args)) - return QDELING(C) ? GetComponent(new_type) : C - -/datum/proc/TakeComponent(datum/component/C) - if(!C) - return - var/datum/helicopter = C.parent - if(helicopter == src) - //wat - return - C._RemoveNoSignal() - helicopter.SendSignal(COMSIG_COMPONENT_REMOVING, C) - C.OnTransfer(src) - C.parent = src - SendSignal(COMSIG_COMPONENT_ADDED, C) -/datum/component - var/enabled = TRUE - var/dupe_mode = COMPONENT_DUPE_HIGHLANDER - var/list/signal_procs - var/datum/parent - -/datum/component/New(datum/P, ...) - var/dm = dupe_mode - if(dm != COMPONENT_DUPE_ALLOWED) - var/datum/component/old = P.GetExactComponent(type) - if(old) - switch(dm) - if(COMPONENT_DUPE_HIGHLANDER) - InheritComponent(old, FALSE) - qdel(old) - if(COMPONENT_DUPE_UNIQUE) - old.InheritComponent(src, TRUE) - qdel(src) - return - P.SendSignal(COMSIG_COMPONENT_ADDED, src) - - //lazy init the parent's dc list - var/list/dc = P.datum_components - if(!dc) - P.datum_components = dc = list() - - //set up the typecache - var/our_type = type - for(var/I in _GetInverseTypeList(our_type)) - var/test = dc[I] - if(test) //already another component of this type here - var/list/components_of_type - if(!islist(test)) - components_of_type = list(test) - dc[I] = components_of_type - else - components_of_type = test - if(I == our_type) //exact match, take priority - var/inserted = FALSE - for(var/J in 1 to components_of_type.len) - var/datum/component/C = components_of_type[J] - if(C.type != our_type) //but not over other exact matches - components_of_type.Insert(J, I) - inserted = TRUE - break - if(!inserted) - components_of_type += src - else //indirect match, back of the line with ya - components_of_type += src - else //only component of this type, no list - dc[I] = src - - parent = P - -/datum/component/Destroy() - enabled = FALSE - var/datum/P = parent - if(P) - _RemoveNoSignal() - P.SendSignal(COMSIG_COMPONENT_REMOVING, src) - LAZYCLEARLIST(signal_procs) - return ..() - -/datum/component/proc/_RemoveNoSignal() - var/datum/P = parent - if(P) - var/list/dc = P.datum_components - var/our_type = type - for(var/I in _GetInverseTypeList(our_type)) - var/list/components_of_type = dc[I] - if(islist(components_of_type)) // - var/list/subtracted = components_of_type - src - if(subtracted.len == 1) //only 1 guy left - dc[I] = subtracted[1] //make him special - else - dc[I] = subtracted - else //just us - dc -= I - if(!dc.len) - P.datum_components = null - parent = null - -/datum/component/proc/RegisterSignal(sig_type, proc_on_self, override = FALSE) - if(QDELETED(src)) - return - var/list/procs = signal_procs - if(!procs) - procs = list() - signal_procs = procs - - if(!override) - . = procs[sig_type] - if(.) - stack_trace("[sig_type] overridden. Use override = TRUE to suppress this warning") - - procs[sig_type] = CALLBACK(src, proc_on_self) - -/datum/component/proc/ReceiveSignal(sigtype, ...) - var/list/sps = signal_procs - var/datum/callback/CB = LAZYACCESS(sps, sigtype) - if(!CB) - return FALSE - var/list/arguments = args.Copy() - arguments.Cut(1, 2) - return CB.InvokeAsync(arglist(arguments)) - -/datum/component/proc/InheritComponent(datum/component/C, i_am_original) - return - -/datum/component/proc/OnTransfer(datum/new_parent) - return - -/datum/component/proc/AfterComponentActivated() - return - -/datum/component/proc/_GetInverseTypeList(current_type) - . = list(current_type) - while (current_type != /datum/component) - current_type = type2parent(current_type) - . += current_type - -/datum/proc/SendSignal(sigtype, ...) - var/list/comps = datum_components - . = FALSE - if(!comps) - return - var/target = comps[/datum/component] - if(!islist(target)) - var/datum/component/C = target - if(C.enabled && C.ReceiveSignal(arglist(args))) - ComponentActivated(C) - C.AfterComponentActivated() - return TRUE - else - for(var/I in target) - var/datum/component/C = I - if(!C.enabled) - continue - if(C.ReceiveSignal(arglist(args))) - ComponentActivated(C) - . = TRUE + . = TRUE /datum/proc/ComponentActivated(datum/component/C) return From f8329e2a89a5308b482ec1259a3f0af422429347 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 09:17:25 -0500 Subject: [PATCH 153/230] Update brain_damage_lines.json --- strings/brain_damage_lines.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/strings/brain_damage_lines.json b/strings/brain_damage_lines.json index e25af310c3..af040d5ba0 100644 --- a/strings/brain_damage_lines.json +++ b/strings/brain_damage_lines.json @@ -172,6 +172,19 @@ "abdoocters" ], + "bug": [ + "", + "IS TIS A BUG??", + "SI IST A BUGG/", + "BUG!!!" + ], + + "semicolon": [ + "", + ";", + ".h" + ], + "roles": [ "heds", "ceptin", From f088e812a9ca1bd98429a450f7fd5dc4505bb5b8 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 09:31:49 -0500 Subject: [PATCH 154/230] Update flora.dm --- code/game/objects/structures/flora.dm | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 76b1462304..d141f71b7a 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -1,12 +1,13 @@ /obj/structure/flora resistance_flags = FLAMMABLE + obj_integrity = 150 max_integrity = 150 - anchored = TRUE + anchored = 1 //trees /obj/structure/flora/tree name = "tree" - density = TRUE + density = 1 pixel_x = -16 layer = FLY_LAYER var/cut = FALSE @@ -25,7 +26,7 @@ playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0) icon = 'icons/obj/flora/pinetrees.dmi' icon_state = "tree_stump" - density = FALSE + density = 0 pixel_x = -16 name += " stump" cut = TRUE @@ -88,12 +89,7 @@ /obj/structure/flora/tree/jungle/Initialize() icon_state = "[icon_state][rand(1, 6)]" - ..() - -/obj/structure/flora/tree/jungle/small - pixel_y = 0 - pixel_x = -32 - icon = 'icons/obj/flora/jungletreesmall.dmi' + . = ..() //grass /obj/structure/flora/grass @@ -129,7 +125,7 @@ name = "bush" icon = 'icons/obj/flora/snowflora.dmi' icon_state = "snowbush1" - anchored = TRUE + anchored = 1 /obj/structure/flora/bush/Initialize() icon_state = "snowbush[rand(1, 6)]" @@ -308,10 +304,10 @@ desc = "A volcanic rock" icon = 'icons/obj/flora/rocks.dmi' resistance_flags = FIRE_PROOF - density = TRUE + density = 1 /obj/structure/flora/rock/Initialize() - ..() + . = ..() icon_state = "[icon_state][rand(1,3)]" /obj/structure/flora/rock/pile From cfebaa664618a892246184d4d8f18efbebf16e62 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 16:05:29 -0500 Subject: [PATCH 155/230] Unlocked miner closet in Pubby aux_base dock --- _maps/map_files/PubbyStation/PubbyStation.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 4cc0b5c158..b4b78673a1 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -49675,7 +49675,7 @@ /turf/open/floor/plating, /area/maintenance/department/engine) "cdF" = ( -/obj/structure/closet/secure_closet/miner, +/obj/structure/closet/secure_closet/miner/unlocked, /turf/open/floor/plating, /area/shuttle/auxillary_base) "cdG" = ( From 5fd3a8355c7a76592c1f6f6ea2c6c97e571f58e5 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 16:05:33 -0500 Subject: [PATCH 156/230] Fixes the Resurrect Cultist rune not working --- code/game/gamemodes/cult/runes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 69b730d574..4c80f53b94 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -538,7 +538,7 @@ structure_check() searches for nearby cultist structures required for the invoca mob_to_revive = input(user, "Choose a cultist to revive.", "Cultist to Revive") as null|anything in potential_revive_mobs else mob_to_revive = potential_revive_mobs[1] - if(!src || QDELETED(src) || rune_in_use || !validness_checks(mob_to_revive, user)) + if(QDELETED(src) || !validness_checks(mob_to_revive, user)) rune_in_use = FALSE return if(user.name == "Herbert West") From 97243fca3a60bbc76dc765a2f827ee003692b6b3 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 16:05:43 -0500 Subject: [PATCH 157/230] Moved can_trigger_gun to item/weapon parent --- code/game/objects/items/weapons/flamethrower.dm | 8 ++------ code/game/objects/items/weapons/pneumaticCannon.dm | 7 ++----- code/game/objects/items/weapons/weaponry.dm | 6 ++++++ .../modules/mob/living/carbon/human/human_helpers.dm | 2 +- code/modules/mob/living/carbon/monkey/monkey.dm | 2 +- code/modules/mob/living/living.dm | 2 +- .../friendly/drone/extra_drone_types.dm | 2 +- code/modules/projectiles/gun.dm | 12 +++++------- 8 files changed, 19 insertions(+), 22 deletions(-) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 0e6d6cc66f..1829538a01 100755 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -26,6 +26,7 @@ var/create_full = FALSE var/create_with_tank = FALSE var/igniter_type = /obj/item/device/assembly/igniter + trigger_guard = TRIGGER_GUARD_NORMAL /obj/item/weapon/flamethrower/Destroy() if(weldtool) @@ -69,12 +70,7 @@ if(flag) return // too close if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.dna.check_mutation(HULK)) - to_chat(user, "Your meaty finger is much too large for the trigger guard!") - return - if(NOGUNS in H.dna.species.species_traits) - to_chat(user, "Your fingers don't fit in the trigger guard!") + if(!can_trigger_gun(user)) return if(user && user.get_active_held_item() == src) // Make sure our user is still holding us var/turf/target_turf = get_turf(target) diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index d2f5714d5e..90c0eceaad 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -26,6 +26,7 @@ var/fire_mode = PCANNON_FIREALL var/automatic = FALSE var/clumsyCheck = TRUE + trigger_guard = TRIGGER_GUARD_NORMAL /obj/item/weapon/pneumatic_cannon/CanItemAutoclick() return automatic @@ -108,11 +109,7 @@ if(!istype(user) && !target) return var/discharge = 0 - if(user.dna.check_mutation(HULK)) - to_chat(user, "Your meaty finger is much too large for the trigger guard!") - return - if(NOGUNS in user.dna.species.species_traits) - to_chat(user, "Your fingers don't fit in the trigger guard!") + if(!can_trigger_gun(user)) return if(!loadedItems || !loadedWeightClass) to_chat(user, "\The [src] has nothing loaded.") diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index bb723ffb33..53bfe5d64c 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -1,4 +1,5 @@ /obj/item/weapon + var/trigger_guard = TRIGGER_GUARD_NONE /obj/item/weapon/banhammer desc = "A banhammer" @@ -584,3 +585,8 @@ throwforce = 0 flags = DROPDEL | ABSTRACT attack_verb = list("bopped") + +/obj/item/weapon/proc/can_trigger_gun(mob/living/user) + if(!user.can_use_guns(src)) + return FALSE + return TRUE \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 69b581995b..3dacc2f444 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -143,7 +143,7 @@ var/protection = (prot["head"] + prot["arms"] + prot["feet"] + prot["legs"] + prot["groin"] + prot["chest"] + prot["hands"])/7 return protection -/mob/living/carbon/human/can_use_guns(var/obj/item/weapon/gun/G) +/mob/living/carbon/human/can_use_guns(var/obj/item/weapon/G) . = ..() if(G.trigger_guard == TRIGGER_GUARD_NORMAL) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index f57a48b5c6..9ed0a74d31 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -140,7 +140,7 @@ return 0 return 1 -/mob/living/carbon/monkey/can_use_guns(var/obj/item/weapon/gun/G) +/mob/living/carbon/monkey/can_use_guns(var/obj/item/weapon/G) return 1 /mob/living/carbon/monkey/angry diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index b58fb0ec13..edf54e547a 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -795,7 +795,7 @@ else to_chat(src, "You don't have the dexterity to do this!") return -/mob/living/proc/can_use_guns(var/obj/item/weapon/gun/G) +/mob/living/proc/can_use_guns(var/obj/item/weapon/G) if (G.trigger_guard != TRIGGER_GUARD_ALLOW_ALL && !IsAdvancedToolUser()) to_chat(src, "You don't have the dexterity to do this!") return 0 diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm index c984194805..51d28df31b 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm @@ -176,7 +176,7 @@ else ..() -/mob/living/simple_animal/drone/cogscarab/can_use_guns(obj/item/weapon/gun/G) +/mob/living/simple_animal/drone/cogscarab/can_use_guns(obj/item/weapon/G) return GLOB.ratvar_awakens /mob/living/simple_animal/drone/cogscarab/get_armor_effectiveness() diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 156a5ee81e..d5109a2c0c 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -27,7 +27,7 @@ var/recoil = 0 //boom boom shake the room var/clumsy_check = 1 var/obj/item/ammo_casing/chambered = null - var/trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers + trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers var/sawn_desc = null //description change if weapon is sawn-off var/sawn_state = SAWN_INTACT var/burst_size = 1 //how large a burst is @@ -188,12 +188,10 @@ -/obj/item/weapon/gun/proc/can_trigger_gun(var/mob/living/user) - - if(!handle_pins(user) || !user.can_use_guns(src)) - return 0 - - return 1 +/obj/item/weapon/gun/can_trigger_gun(mob/living/user) + . = ..() + if(!handle_pins(user)) + return FALSE /obj/item/weapon/gun/proc/handle_pins(mob/living/user) if(pin) From 048c782156035b3a7d59ff160152fdc131bfe543 Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Mon, 14 Aug 2017 17:09:11 -0600 Subject: [PATCH 158/230] xenomorph update A long overdue overhall and readdition of xenos --- .../new_player/sprite_accessories_Citadel.dm | 57 ++++++++++++------ .../carbon/human/species_types/furrypeople.dm | 24 ++++++++ icons/mob/human_parts_greyscale.dmi | Bin 43762 -> 44525 bytes icons/mob/xeno_parts_greyscale.dmi | Bin 0 -> 3061 bytes 4 files changed, 61 insertions(+), 20 deletions(-) create mode 100644 icons/mob/xeno_parts_greyscale.dmi diff --git a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm index 9808923e33..2d01d365ff 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm @@ -464,7 +464,6 @@ /datum/sprite_accessory/mam_tails/rabbit name = "Rabbit" icon_state = "rabbit" - color_src = 0 icon = 'icons/mob/mam_bodyparts.dmi' /datum/sprite_accessory/mam_ears/rabbit @@ -673,49 +672,67 @@ //Xeno Dorsal Tubes /datum/sprite_accessory/xeno_dorsal - icon = 'icons/mob/exotic_bodyparts.dmi' - color_src = 0 + icon = 'icons/mob/xeno_parts_greyscale.dmi' /datum/sprite_accessory/xeno_dorsal/none name = "None" -/datum/sprite_accessory/xeno_dorsal/normal - name = "Dorsal Tubes" - icon_state = "dortubes" +/datum/sprite_accessory/xeno_dorsal/standard + name = "Standard" + icon_state = "standard" + icon = 'icons/mob/xeno_parts_greyscale.dmi' + +/datum/sprite_accessory/xeno_dorsal/royal + name = "Royal" + icon_state = "royal" + icon = 'icons/mob/xeno_parts_greyscale.dmi' + +/datum/sprite_accessory/xeno_dorsal/down + name = "Dorsal Down" + icon_state = "down" + icon = 'icons/mob/xeno_parts_greyscale.dmi' //Xeno Tail /datum/sprite_accessory/xeno_tail - icon = 'icons/mob/exotic_bodyparts.dmi' - color_src = 0 + icon = 'icons/mob/xeno_parts_greyscale.dmi' /datum/sprite_accessory/xeno_tail/none name = "None" -/datum/sprite_accessory/xeno_tail/normal +/datum/sprite_accessory/xeno_tail/standard name = "Xenomorph Tail" icon_state = "xeno" + icon = 'icons/mob/xeno_parts_greyscale.dmi' //Xeno Caste Heads //unused as of October 3, 2016 /datum/sprite_accessory/xeno_head - icon = 'icons/mob/exotic_bodyparts.dmi' - color_src = 0 + icon = 'icons/mob/xeno_parts_greyscale.dmi' /datum/sprite_accessory/xeno_head/none name = "None" +/datum/sprite_accessory/xeno_head/standard + name = "Standard" + icon_state = "standard" + icon = 'icons/mob/xeno_parts_greyscale.dmi' -/datum/sprite_accessory/xeno_head/hunter - name = "Hunter" - icon_state = "hunter" -/datum/sprite_accessory/xeno_head/drone - name = "Drone" - icon_state = "drone" +/datum/sprite_accessory/xeno_head/royal + name = "royal" + icon_state = "royal" + icon = 'icons/mob/xeno_parts_greyscale.dmi' + +/datum/sprite_accessory/xeno_head/hollywood + name = "hollywood" + icon_state = "hollywood" + icon = 'icons/mob/xeno_parts_greyscale.dmi' + +/datum/sprite_accessory/xeno_head/warrior + name = "warrior" + icon_state = "warrior" + icon = 'icons/mob/xeno_parts_greyscale.dmi' -/datum/sprite_accessory/xeno_head/sentinel - name = "Sentinel" - icon_state = "sentinel" /* //Slimecoon Parts /datum/sprite_accessory/slimecoon_ears diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index d612a4f061..1fc4e848ec 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -79,6 +79,30 @@ datum/species/mammal return TRUE //HERBIVOROUS// +//Alien// +/datum/species/xeno + // A cloning mistake, crossing human and xenomorph DNA + name = "xeno" + id = "xeno" + say_mod = "hisses" + default_color = "00FF00" + species_traits = list(MUTCOLORS,LIPS,DIGITIGRADE) + mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur",) + default_features = list("xenotail"="xeno","xenohead"="none","xenodorsal"="none","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None") + armor = 15 + heatmod = 1.5 + no_equip = list(slot_head) + attack_verb = "slash" + attack_sound = 'sound/weapons/slash.ogg' + miss_sound = 'sound/weapons/slashmiss.ogg' + meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno + skinned_type = /obj/item/stack/sheet/animalhide/xeno + exotic_bloodtype = "L" + damage_overlay_type = "xeno" + roundstart = 1 + +//Praise the Omnissiah, A challange worthy of my skills - HS + //EXOTIC// //These races will likely include lots of downsides and upsides. Keep them relatively balanced.// /* diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index 968e12949b016810264ce8387373706fdd47e056..e7309556354492f8e627ff9200c8a627397d5ac9 100644 GIT binary patch literal 44525 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

    Ltjqw{5-D@{$RpiQJ9AN+n)IA`Oh9)3>)fc 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 literal 43762 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 DQt}3> literal 0 HcmV?d00001 From 46c6a54a7578627ad3a4e661c7a141d935d1ef4d Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 18:38:55 -0500 Subject: [PATCH 159/230] Update misc.dm --- code/modules/clothing/head/misc.dm | 568 +++++++++++++++-------------- 1 file changed, 285 insertions(+), 283 deletions(-) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index ac82fc92db..348be6ad6d 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -1,291 +1,292 @@ - - -/obj/item/clothing/head/centhat - name = "\improper Centcom hat" - icon_state = "centcom" - desc = "It's good to be emperor." - item_state = "that" - flags_inv = 0 - armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) - strip_delay = 80 - -/obj/item/clothing/head/powdered_wig - name = "powdered wig" - desc = "A powdered wig." - icon_state = "pwig" - item_state = "pwig" - -/obj/item/clothing/head/that - name = "top-hat" - desc = "It's an amish looking hat." - icon_state = "tophat" - item_state = "that" - dog_fashion = /datum/dog_fashion/head - throwforce = 1 - -/obj/item/clothing/head/canada - name = "striped red tophat" - desc = "it smells like fresh donut holes / il sent comme des trous de beignets frais" - icon_state = "canada" - item_state = "canada" - -/obj/item/clothing/head/redcoat - name = "redcoat's hat" - icon_state = "redcoat" - desc = "'I guess it's a redhead.'" - -/obj/item/clothing/head/mailman - name = "mailman's hat" - icon_state = "mailman" - desc = "'Right-on-time' mail service head wear." - -/obj/item/clothing/head/plaguedoctorhat - name = "plague doctor's hat" - desc = "These were once used by plague doctors. They're pretty much useless." - icon_state = "plaguedoctor" - permeability_coefficient = 0.01 - -/obj/item/clothing/head/hasturhood - name = "hastur's hood" - desc = "It's unspeakably stylish." - icon_state = "hasturhood" - flags_inv = HIDEHAIR - flags_cover = HEADCOVERSEYES - -/obj/item/clothing/head/nursehat - name = "nurse's hat" - desc = "It allows quick identification of trained medical personnel." - icon_state = "nursehat" + + +/obj/item/clothing/head/centhat + name = "\improper Centcom hat" + icon_state = "centcom" + desc = "It's good to be emperor." + item_state = "that" + flags_inv = 0 + armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) + strip_delay = 80 + +/obj/item/clothing/head/powdered_wig + name = "powdered wig" + desc = "A powdered wig." + icon_state = "pwig" + item_state = "pwig" + +/obj/item/clothing/head/that + name = "top-hat" + desc = "It's an amish looking hat." + icon_state = "tophat" + item_state = "that" + dog_fashion = /datum/dog_fashion/head + throwforce = 1 + +/obj/item/clothing/head/canada + name = "striped red tophat" + desc = "it smells like fresh donut holes / il sent comme des trous de beignets frais" + icon_state = "canada" + item_state = "canada" + +/obj/item/clothing/head/redcoat + name = "redcoat's hat" + icon_state = "redcoat" + desc = "'I guess it's a redhead.'" + +/obj/item/clothing/head/mailman + name = "mailman's hat" + icon_state = "mailman" + desc = "'Right-on-time' mail service head wear." + +/obj/item/clothing/head/plaguedoctorhat + name = "plague doctor's hat" + desc = "These were once used by plague doctors. They're pretty much useless." + icon_state = "plaguedoctor" + permeability_coefficient = 0.01 + +/obj/item/clothing/head/hasturhood + name = "hastur's hood" + desc = "It's unspeakably stylish." + icon_state = "hasturhood" + flags_inv = HIDEHAIR + flags_cover = HEADCOVERSEYES + +/obj/item/clothing/head/nursehat + name = "nurse's hat" + desc = "It allows quick identification of trained medical personnel." + icon_state = "nursehat" dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/nurse - -/obj/item/clothing/head/syndicatefake - name = "black space-helmet replica" - icon_state = "syndicate-helm-black-red" - item_state = "syndicate-helm-black-red" - desc = "A plastic replica of a Syndicate agent's space helmet. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/cueball - name = "cueball helmet" - desc = "A large, featureless white orb meant to be worn on your head. How do you even see out of this thing?" - icon_state = "cueball" - item_state="cueball" - flags_cover = HEADCOVERSEYES|HEADCOVERSMOUTH - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/snowman - name = "Snowman Head" - desc = "A ball of white styrofoam. So festive." - icon_state = "snowman_h" - item_state = "snowman_h" - flags_cover = HEADCOVERSEYES - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/justice - name = "justice hat" - desc = "Fight for what's righteous!" - icon_state = "justicered" - item_state = "justicered" - flags_inv = HIDEHAIR|HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR - flags_cover = HEADCOVERSEYES - -/obj/item/clothing/head/justice/blue - icon_state = "justiceblue" - item_state = "justiceblue" - -/obj/item/clothing/head/justice/yellow - icon_state = "justiceyellow" - item_state = "justiceyellow" - -/obj/item/clothing/head/justice/green - icon_state = "justicegreen" - item_state = "justicegreen" - -/obj/item/clothing/head/justice/pink - icon_state = "justicepink" - item_state = "justicepink" - -/obj/item/clothing/head/rabbitears - name = "rabbit ears" - desc = "Wearing these makes you look useless, and only good for your sex appeal." - icon_state = "bunny" + + dog_fashion = /datum/dog_fashion/head/nurse + +/obj/item/clothing/head/syndicatefake + name = "black space-helmet replica" + icon_state = "syndicate-helm-black-red" + item_state = "syndicate-helm-black-red" + desc = "A plastic replica of a Syndicate agent's space helmet. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + +/obj/item/clothing/head/cueball + name = "cueball helmet" + desc = "A large, featureless white orb meant to be worn on your head. How do you even see out of this thing?" + icon_state = "cueball" + item_state="cueball" + flags_cover = HEADCOVERSEYES|HEADCOVERSMOUTH + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + +/obj/item/clothing/head/snowman + name = "Snowman Head" + desc = "A ball of white styrofoam. So festive." + icon_state = "snowman_h" + item_state = "snowman_h" + flags_cover = HEADCOVERSEYES + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + +/obj/item/clothing/head/justice + name = "justice hat" + desc = "Fight for what's righteous!" + icon_state = "justicered" + item_state = "justicered" + flags_inv = HIDEHAIR|HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR + flags_cover = HEADCOVERSEYES + +/obj/item/clothing/head/justice/blue + icon_state = "justiceblue" + item_state = "justiceblue" + +/obj/item/clothing/head/justice/yellow + icon_state = "justiceyellow" + item_state = "justiceyellow" + +/obj/item/clothing/head/justice/green + icon_state = "justicegreen" + item_state = "justicegreen" + +/obj/item/clothing/head/justice/pink + icon_state = "justicepink" + item_state = "justicepink" + +/obj/item/clothing/head/rabbitears + name = "rabbit ears" + desc = "Wearing these makes you look useless, and only good for your sex appeal." + icon_state = "bunny" dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/rabbit - - -/obj/item/clothing/head/flatcap - name = "flat cap" - desc = "A working man's cap." - icon_state = "flat_cap" - item_state = "detective" - -/obj/item/clothing/head/pirate - name = "pirate hat" - desc = "Yarr." - icon_state = "pirate" - item_state = "pirate" - dog_fashion = /datum/dog_fashion/head/pirate - -/obj/item/clothing/head/pirate/captain - icon_state = "hgpiratecap" - item_state = "hgpiratecap" - -/obj/item/clothing/head/bandana - name = "pirate bandana" - desc = "Yarr." - icon_state = "bandana" - item_state = "bandana" + + dog_fashion = /datum/dog_fashion/head/rabbit + + +/obj/item/clothing/head/flatcap + name = "flat cap" + desc = "A working man's cap." + icon_state = "flat_cap" + item_state = "detective" + +/obj/item/clothing/head/pirate + name = "pirate hat" + desc = "Yarr." + icon_state = "pirate" + item_state = "pirate" + dog_fashion = /datum/dog_fashion/head/pirate + +/obj/item/clothing/head/pirate/captain + icon_state = "hgpiratecap" + item_state = "hgpiratecap" + +/obj/item/clothing/head/bandana + name = "pirate bandana" + desc = "Yarr." + icon_state = "bandana" + item_state = "bandana" dynamic_hair_suffix = "" - -/obj/item/clothing/head/bowler - name = "bowler-hat" - desc = "Gentleman, elite aboard!" - icon_state = "bowler" - item_state = "bowler" + +/obj/item/clothing/head/bowler + name = "bowler-hat" + desc = "Gentleman, elite aboard!" + icon_state = "bowler" + item_state = "bowler" dynamic_hair_suffix = "" - -/obj/item/clothing/head/witchwig - name = "witch costume wig" - desc = "Eeeee~heheheheheheh!" - icon_state = "witch" - item_state = "witch" - flags_inv = HIDEHAIR - -/obj/item/clothing/head/chicken - name = "chicken suit head" - desc = "Bkaw!" - icon_state = "chickenhead" - item_state = "chickensuit" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/griffin - name = "griffon head" - desc = "Why not 'eagle head'? Who knows." - icon_state = "griffinhat" - item_state = "griffinhat" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/bearpelt - name = "bear pelt hat" - desc = "Fuzzy." - icon_state = "bearpelt" - item_state = "bearpelt" - -/obj/item/clothing/head/xenos - name = "xenos helmet" - icon_state = "xenos" - item_state = "xenos_helm" - desc = "A helmet made out of chitinous alien hide." - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/fedora - name = "fedora" - icon_state = "fedora" - item_state = "fedora" - armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 30, acid = 50) - desc = "A really cool hat if you're a mobster. A really lame hat if you're not." - pockets = /obj/item/weapon/storage/internal/pocket/small - -/obj/item/clothing/head/fedora/suicide_act(mob/user) - if(user.gender == FEMALE) - return 0 - var/mob/living/carbon/human/H = user - user.visible_message("[user] is donning [src]! It looks like they're trying to be nice to girls.") - user.say("M'lady.") - sleep(10) - H.facial_hair_style = "Neckbeard" - return(BRUTELOSS) - -/obj/item/clothing/head/sombrero - name = "sombrero" - icon_state = "sombrero" - item_state = "sombrero" - desc = "You can practically taste the fiesta." - flags_inv = HIDEHAIR - - dog_fashion = /datum/dog_fashion/head/sombrero - -/obj/item/clothing/head/sombrero/green - name = "green sombrero" - icon_state = "greensombrero" - item_state = "greensombrero" - desc = "As elegant as a dancing cactus." - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - dog_fashion = null - -/obj/item/clothing/head/sombrero/shamebrero - name = "shamebrero" - icon_state = "shamebrero" - item_state = "shamebrero" - desc = "Once it's on, it never comes off." - flags = NODROP - dog_fashion = null - -/obj/item/clothing/head/cone - desc = "This cone is trying to warn you of something!" - name = "warning cone" - icon = 'icons/obj/janitor.dmi' - icon_state = "cone" - item_state = "cone" - force = 1 - throwforce = 3 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("warned", "cautioned", "smashed") - resistance_flags = 0 - -/obj/item/clothing/head/santa - name = "santa hat" - desc = "On the first day of christmas my employer gave to me!" - icon_state = "santahatnorm" - item_state = "that" - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - dog_fashion = /datum/dog_fashion/head/santa - -/obj/item/clothing/head/jester - name = "jester hat" + +/obj/item/clothing/head/witchwig + name = "witch costume wig" + desc = "Eeeee~heheheheheheh!" + icon_state = "witch" + item_state = "witch" + flags_inv = HIDEHAIR + +/obj/item/clothing/head/chicken + name = "chicken suit head" + desc = "Bkaw!" + icon_state = "chickenhead" + item_state = "chickensuit" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + +/obj/item/clothing/head/griffin + name = "griffon head" + desc = "Why not 'eagle head'? Who knows." + icon_state = "griffinhat" + item_state = "griffinhat" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + +/obj/item/clothing/head/bearpelt + name = "bear pelt hat" + desc = "Fuzzy." + icon_state = "bearpelt" + item_state = "bearpelt" + +/obj/item/clothing/head/xenos + name = "xenos helmet" + icon_state = "xenos" + item_state = "xenos_helm" + desc = "A helmet made out of chitinous alien hide." + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + +/obj/item/clothing/head/fedora + name = "fedora" + icon_state = "fedora" + item_state = "fedora" + armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 30, acid = 50) + desc = "A really cool hat if you're a mobster. A really lame hat if you're not." + pockets = /obj/item/weapon/storage/internal/pocket/small + +/obj/item/clothing/head/fedora/suicide_act(mob/user) + if(user.gender == FEMALE) + return 0 + var/mob/living/carbon/human/H = user + user.visible_message("[user] is donning [src]! It looks like they're trying to be nice to girls.") + user.say("M'lady.") + sleep(10) + H.facial_hair_style = "Neckbeard" + return(BRUTELOSS) + +/obj/item/clothing/head/sombrero + name = "sombrero" + icon_state = "sombrero" + item_state = "sombrero" + desc = "You can practically taste the fiesta." + flags_inv = HIDEHAIR + + dog_fashion = /datum/dog_fashion/head/sombrero + +/obj/item/clothing/head/sombrero/green + name = "green sombrero" + icon_state = "greensombrero" + item_state = "greensombrero" + desc = "As elegant as a dancing cactus." + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS + dog_fashion = null + +/obj/item/clothing/head/sombrero/shamebrero + name = "shamebrero" + icon_state = "shamebrero" + item_state = "shamebrero" + desc = "Once it's on, it never comes off." + flags = NODROP + dog_fashion = null + +/obj/item/clothing/head/cone + desc = "This cone is trying to warn you of something!" + name = "warning cone" + icon = 'icons/obj/janitor.dmi' + icon_state = "cone" + item_state = "cone" + force = 1 + throwforce = 3 + throw_speed = 2 + throw_range = 5 + w_class = WEIGHT_CLASS_SMALL + attack_verb = list("warned", "cautioned", "smashed") + resistance_flags = 0 + +/obj/item/clothing/head/santa + name = "santa hat" + desc = "On the first day of christmas my employer gave to me!" + icon_state = "santahatnorm" + item_state = "that" + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + dog_fashion = /datum/dog_fashion/head/santa + +/obj/item/clothing/head/jester + name = "jester hat" desc = "A hat with bells, to add some merriness to the suit." - icon_state = "jester_hat" - -/obj/item/clothing/head/rice_hat - name = "rice hat" - desc = "Welcome to the rice fields, motherfucker." - icon_state = "rice_hat" - -/obj/item/clothing/head/lizard - name = "lizardskin cloche hat" - desc = "How many lizards died to make this hat? Not enough." - icon_state = "lizard" - -/obj/item/clothing/head/papersack - name = "paper sack hat" - desc = "A paper sack with crude holes cut out for eyes. Useful for hiding one's identity or ugliness." - icon_state = "papersack" - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - -/obj/item/clothing/head/papersack/smiley - name = "paper sack hat" - desc = "A paper sack with crude holes cut out for eyes and a sketchy smile drawn on the front. Not creepy at all." - icon_state = "papersack_smile" - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - -/obj/item/clothing/head/crown - name = "crown" - desc = "A crown fit for a king, a petty king maybe." - icon_state = "crown" - armor = list(melee = 15, bullet = 0, laser = 0,energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) - resistance_flags = FIRE_PROOF + icon_state = "jester_hat" dynamic_hair_suffix = "" - -/obj/item/clothing/head/crown/fancy - name = "magnificent crown" - desc = "A crown worn by only the highest emperors of the land." - icon_state = "fancycrown" + +/obj/item/clothing/head/rice_hat + name = "rice hat" + desc = "Welcome to the rice fields, motherfucker." + icon_state = "rice_hat" + +/obj/item/clothing/head/lizard + name = "lizardskin cloche hat" + desc = "How many lizards died to make this hat? Not enough." + icon_state = "lizard" + +/obj/item/clothing/head/papersack + name = "paper sack hat" + desc = "A paper sack with crude holes cut out for eyes. Useful for hiding one's identity or ugliness." + icon_state = "papersack" + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS + +/obj/item/clothing/head/papersack/smiley + name = "paper sack hat" + desc = "A paper sack with crude holes cut out for eyes and a sketchy smile drawn on the front. Not creepy at all." + icon_state = "papersack_smile" + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS + +/obj/item/clothing/head/crown + name = "crown" + desc = "A crown fit for a king, a petty king maybe." + icon_state = "crown" + armor = list(melee = 15, bullet = 0, laser = 0,energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF + dynamic_hair_suffix = "" + +/obj/item/clothing/head/crown/fancy + name = "magnificent crown" + desc = "A crown worn by only the highest emperors of the land." + icon_state = "fancycrown" /obj/item/clothing/head/scarecrow_hat name = "scarecrow hat" @@ -301,4 +302,5 @@ /obj/item/clothing/head/jester/alt name = "jester hat" desc = "A hat with bells, to add some merriness to the suit." - icon_state = "jester_hat2" \ No newline at end of file + icon_state = "jester_hat2" + dynamic_hair_suffix = "" From 9b57f5fd62c954bd2482bcee9a71664264b69101 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 18:39:22 -0500 Subject: [PATCH 160/230] Update collectable.dm --- code/modules/clothing/head/collectable.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 6c7acefe8f..67ce9ea370 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -4,7 +4,6 @@ /obj/item/clothing/head/collectable name = "collectable hat" desc = "A rare collectable hat." - dynamic_hair_suffix = "+detective" /obj/item/clothing/head/collectable/petehat name = "ultra rare Pete's hat!" From 98ff124b68213796fc98b00054dab365da6a9202 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 18:50:44 -0500 Subject: [PATCH 161/230] Update shieldgen.dm --- code/game/machinery/shieldgen.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index a7d857844a..fbfbe61c0f 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -10,10 +10,11 @@ max_integrity = 200 //The shield can only take so much beating (prevents perma-prisons) CanAtmosPass = ATMOS_PASS_DENSITY -/obj/structure/emergency_shield/New() - src.setDir(pick(1,2,3,4)) - ..() - air_update_turf(1) +/obj/structure/emergency_shield/Initialize() + . = ..() + setDir(pick(1,2,3,4)) + setDir(pick(GLOB.cardinals)) + air_update_turf(1) /obj/structure/emergency_shield/Destroy() density = FALSE From 2719f23e52a352e09323625f92210eee1b8350cb Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 18:53:01 -0500 Subject: [PATCH 162/230] Update shieldgen.dm --- code/game/machinery/shieldgen.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index fbfbe61c0f..0629eea303 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -10,9 +10,8 @@ max_integrity = 200 //The shield can only take so much beating (prevents perma-prisons) CanAtmosPass = ATMOS_PASS_DENSITY -/obj/structure/emergency_shield/Initialize() - . = ..() - setDir(pick(1,2,3,4)) + /obj/structure/emergency_shield/Initialize() + . = ..() setDir(pick(GLOB.cardinals)) air_update_turf(1) From d8e7194e6dab5e8c20a60a87ab39c0ae661533df Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 18:53:54 -0500 Subject: [PATCH 163/230] Automatic changelog generation for PR #2371 [ci skip] --- html/changelogs/AutoChangeLog-pr-2371.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2371.yml diff --git a/html/changelogs/AutoChangeLog-pr-2371.yml b/html/changelogs/AutoChangeLog-pr-2371.yml new file mode 100644 index 0000000000..ec1810b8a6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2371.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - bugfix: "The Resurrect Cultist rune now works as intended." From f2c011a37b2407e1249ce2ac9dd081d109ec9a6f Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 18:55:25 -0500 Subject: [PATCH 164/230] Update console.dm --- code/modules/cargo/console.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index 15117c1cbb..7926cfc34d 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -145,7 +145,7 @@ var/reason = "" if(requestonly) - reason = input("Reason:", name, "") as text|null + reason = stripped_input("Reason:", name, "") if(isnull(reason) || ..()) return From 0c72b3ec53dafed312cd723314a50421921b1570 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 19:09:51 -0500 Subject: [PATCH 165/230] Update world.dm --- code/world.dm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/code/world.dm b/code/world.dm index e115ed6934..a0c5ae43f8 100644 --- a/code/world.dm +++ b/code/world.dm @@ -58,12 +58,11 @@ /world/proc/CheckSchemaVersion() if(config.sql_enabled) if(SSdbcore.Connect()) - log_world("Database connection established.") var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_revision")] ORDER BY date DESC LIMIT 1") - db_version.Execute() - if(db_version.NextRow()) - var/db_major = db_version.item[1] - var/db_minor = db_version.item[2] + query_db_version.Execute() + if(query_db_version.NextRow()) + var/db_major = text2num(query_db_version.item[1]) + var/db_minor = text2num(query_db_version.item[2]) if(db_major < DB_MAJOR_VERSION || db_minor < DB_MINOR_VERSION) message_admins("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") log_sql("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") From 64b3fe43d9a8412d534619c3781b62eeb26943dd Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 19:38:43 -0500 Subject: [PATCH 166/230] Update shieldgen.dm --- code/game/machinery/shieldgen.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 0629eea303..c857ddaf16 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -10,10 +10,10 @@ max_integrity = 200 //The shield can only take so much beating (prevents perma-prisons) CanAtmosPass = ATMOS_PASS_DENSITY - /obj/structure/emergency_shield/Initialize() - . = ..() +/obj/structure/emergency_shield/Initialize() + . = ..() setDir(pick(GLOB.cardinals)) - air_update_turf(1) + air_update_turf(1) /obj/structure/emergency_shield/Destroy() density = FALSE From 1d4e15502aebbf233f740d88e195a60cc0683394 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 14 Aug 2017 19:40:45 -0500 Subject: [PATCH 167/230] Update browserOutput.dm --- code/modules/goonchat/browserOutput.dm | 136 +------------------------ 1 file changed, 3 insertions(+), 133 deletions(-) diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index 7dd0fd5bb3..cc44c47f4e 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -100,7 +100,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic sendClientData() //do not convert to to_chat() - owner << {"If you can see this, update byond."} + SEND_TEXT(owner, "If you can see this, update byond.") pingLoop() @@ -152,7 +152,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic if (found.len > 0) //TODO: add a new evasion ban for the CURRENT client details, using the matched row details message_admins("[key_name(src.owner)] has a cookie from a banned account! (Matched: [found["ckey"]], [found["ip"]], [found["compid"]])") - log_admin_private("[key_name(src.owner)] has a cookie from a banned account! (Matched: [found["ckey"]], [found["ip"]], [found["compid"]])") + log_admin_private("[key_name(owner)] has a cookie from a banned account! (Matched: [found["ckey"]], [found["ip"]], [found["compid"]])") cookieSent = TRUE @@ -166,135 +166,6 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic //Global chat procs -//Converts an icon to base64. Operates by putting the icon in the iconCache savefile, -// exporting it as text, and then parsing the base64 from that. -// (This relies on byond automatically storing icons in savefiles as base64) -/proc/icon2base64(icon/icon, iconKey = "misc") - if (!isicon(icon)) - return FALSE - GLOB.iconCache[iconKey] << icon - var/iconData = GLOB.iconCache.ExportText(iconKey) - var/list/partial = splittext(iconData, "{") - return replacetext(copytext(partial[2], 3, -5), "\n", "") - -/proc/icon2html(thing, target, icon_state, dir, frame = 1, moving) - if (!thing) - return - var/static/datum/callback/CB = CALLBACK(GLOBAL_PROC, .proc/send_asset) - - var/key - var/icon/I = thing - if (!target) - return - if (target == world) - target = GLOB.clients - - var/list/targets - if (!islist(target)) - targets = list(target) - else - targets = target - if (!targets.len) - return - debug_usr("start") - if (!isicon(I)) - debug_usr("not icon") - if (isfile(thing)) //special snowflake - debug_usr("file") - var/name = sanitize_filename("bicon.[thing]") - debug_usr("file:[name]") - register_asset(name, thing) - var/list/callbacks - var/list/callback_args = list() - for (var/thing2 in targets) - callbacks += CB - callback_args[++callback_args.len] = list(thing2, name, TRUE) - callback_select(callbacks, callback_args, savereturns = FALSE) - return "" - debug_usr("not file") - var/atom/A - if (isnull(dir)) - dir = A.dir - if (isnull(icon_state)) - icon_state = A.icon_state - I = A.icon - if (ishuman(thing)) // Shitty workaround for a BYOND issue. - debug_usr("human") - var/icon/temp = I - I = icon() - I.Insert(temp, dir = SOUTH) - dir = SOUTH - else - debug_usr("icon") - if (isnull(dir)) - dir = SOUTH - if (isnull(icon_state)) - icon_state = "" - - I = icon(I, icon_state, dir, frame) - - key = sanitize_filename("bicon.[md5(icon2base64(I))].[icon_state].[dir].png") - debug_usr("key:[key]") - register_asset(key, I) - var/list/callbacks = list() - var/list/callback_args = list() - for (var/thing2 in targets) - callbacks += CB - callback_args[++callback_args.len] = list(thing2, key, TRUE) - - callback_select(callbacks, callback_args, savereturns = FALSE) - return "" - -/proc/icon2base64html(thing) - if (!thing) - return - var/static/list/bicon_cache = list() - if (isicon(thing)) - var/icon/I = thing - var/icon_base64 = icon2base64(I) - - if (I.Height() > world.icon_size || I.Width() > world.icon_size) - var/icon_md5 = md5(icon_base64) - debug_admins(icon_md5) - icon_base64 = bicon_cache[icon_md5] - if (!icon_base64) // Doesn't exist yet, make it. - I = icon(I) - I.Scale(world.icon_size, world.icon_size) - bicon_cache[icon_md5] = icon_base64 = icon2base64(I) - - - return "" - - // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. - var/atom/A = thing - var/key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" - - - if (!bicon_cache[key]) // Doesn't exist, make it. - var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) - if (ishuman(thing)) // Shitty workaround for a BYOND issue. - var/icon/temp = I - I = icon() - I.Insert(temp, dir = SOUTH) - - if (I.Height() > world.icon_size || I.Width() > world.icon_size) - I.Scale(world.icon_size, world.icon_size) - - bicon_cache[key] = icon2base64(I, key) - - return "" - -//Costlier version of icon2html() that uses getFlatIcon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs. -/proc/costly_icon2html(thing, target) - if (!thing) - return - - if (isicon(thing)) - return icon2html(thing, target) - - var/icon/I = getFlatIcon(thing) - return icon2html(I, target) - /proc/to_chat(target, message) if(!target) return @@ -302,7 +173,6 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic //Ok so I did my best but I accept that some calls to this will be for shit like sound and images //It stands that we PROBABLY don't want to output those to the browser output so just handle them here if (istype(message, /image) || istype(message, /sound) || istype(target, /savefile)) - target << message CRASH("Invalid message! [message]") if(!istext(message)) @@ -333,7 +203,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic continue //Send it to the old style output window. - C << original_message + SEND_TEXT(C, original_message) if(!C.chatOutput || C.chatOutput.broken) // A player who hasn't updated his skin file. continue From c4090f5484559165cb81101a198ca4f2c014529f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 14 Aug 2017 20:48:23 -0500 Subject: [PATCH 168/230] Automatic changelog generation for PR #2278 [ci skip] --- html/changelogs/AutoChangeLog-pr-2278.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2278.yml diff --git a/html/changelogs/AutoChangeLog-pr-2278.yml b/html/changelogs/AutoChangeLog-pr-2278.yml new file mode 100644 index 0000000000..111ae24812 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2278.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Fixed hair sticking through headgear." From 7e351b9b8ea6ce46887602b371108836c27003dc Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 15 Aug 2017 05:09:00 -0500 Subject: [PATCH 169/230] =?UTF-8?q?=E2=9D=84=20---=20=3D=3D=3D=3D=20D=20E?= =?UTF-8?q?=20E=20P=20=20=20F=20R=20E=20E=20Z=20E=20=3D=3D=3D=3D=20---=20?= =?UTF-8?q?=E2=9D=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/PULL_REQUEST_TEMPLATE.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 82633fdc70..f67f095a4f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,6 +1,3 @@ -[Feature Freeze!]: # We are currently not considering any balance or antagonist oriented pull requests. Full details, as well as ways to bypass this freeze, are available here https://github.com/tgstation/tgstation/pull/28223 - - [Changelogs]: # (Please make a changelog if you're adding, removing or changing content that'll affect players. This includes, but is not limited to, new features, sprites, sounds; balance changes; map edits and important fixes) []: # (See here for how to easily make a changelog: https://github.com/tgstation/tgstation/wiki/Changelogs. An example changelog has been provided below. Please edit or remove) From 3b1a0a0dc05e990a4c0e33dc4ef49e31336af2fe Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 15 Aug 2017 05:11:08 -0500 Subject: [PATCH 170/230] Fixes Singulo, Tesla, Reality Breaks, & Narsie being frozen by freon --- code/modules/power/singularity/singularity.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 07190b102c..1b65da86ab 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -26,7 +26,7 @@ var/last_failed_movement = 0//Will not move in the same dir if it couldnt before, will help with the getting stuck on fields thing var/last_warning var/consumedSupermatter = 0 //If the singularity has eaten a supermatter shard and can go to stage six - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF dangerous_possession = TRUE /obj/singularity/Initialize(mapload, starting_energy = 50) From 402b9a6cab3ce916a6e661721b41240b4fef60e7 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 15 Aug 2017 05:55:57 -0500 Subject: [PATCH 171/230] Fixes mining hardsuit heat_protection --- code/modules/clothing/spacesuits/hardsuit.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 00f622b751..19f777ac4a 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -200,7 +200,7 @@ item_color = "mining" max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF - heat_protection = CHEST|GROIN|LEGS|ARMS + heat_protection = HEAD armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 75) brightness_on = 7 allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/internals, /obj/item/weapon/resonator, /obj/item/device/mining_scanner, /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/weapon/gun/energy/kinetic_accelerator) @@ -216,6 +216,7 @@ armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 75) allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/internals, /obj/item/weapon/storage/bag/ore, /obj/item/weapon/pickaxe) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining + heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Syndicate hardsuit /obj/item/clothing/head/helmet/space/hardsuit/syndi From fdc4a4403bbb90bffaff791a301c493a3f877d70 Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Tue, 15 Aug 2017 07:02:57 -0600 Subject: [PATCH 172/230] headupdate --- icons/mob/xeno_parts_greyscale.dmi | Bin 3061 -> 3103 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/xeno_parts_greyscale.dmi b/icons/mob/xeno_parts_greyscale.dmi index ba6b8e5e80cad658514f4aec1204812446eaf13a..8b4630afe7f8a6a80b3fc08ef7883255c7f0ac2a 100644 GIT binary patch delta 2767 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 V-TGW(+_V4y002ovPDHLkV1lbOXEy)< delta 2725 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 From a8c706126d4f261fad9e72cf71921cdfa1da2f6c Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Tue, 15 Aug 2017 07:25:47 -0600 Subject: [PATCH 173/230] headupdates --- icons/mob/xeno_parts_greyscale.dmi | Bin 3103 -> 3103 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/xeno_parts_greyscale.dmi b/icons/mob/xeno_parts_greyscale.dmi index 8b4630afe7f8a6a80b3fc08ef7883255c7f0ac2a..3e180e8baaf9f0b7e43f116d6b0f8cdad1698cb8 100644 GIT binary patch delta 2474 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 From 5885d490ac2db5fdc4fdea3fdafe4f61098ffe16 Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Tue, 15 Aug 2017 07:35:35 -0600 Subject: [PATCH 174/230] futher updates to head and spines head and spine updates --- icons/mob/xeno_parts_greyscale.dmi | Bin 3103 -> 3104 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/xeno_parts_greyscale.dmi b/icons/mob/xeno_parts_greyscale.dmi index 3e180e8baaf9f0b7e43f116d6b0f8cdad1698cb8..44456309a763f59264a6812875f6cb1e32711564 100644 GIT binary patch delta 2768 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 V-hvq6Z;b!|002ovPDHLkV1i+5Qh)#e From 22ad3c6afe4441d6dfcf5651b870188b2effefa5 Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Tue, 15 Aug 2017 08:03:08 -0600 Subject: [PATCH 175/230] xeno markings addition added markings to the xenomorph, for polish --- .../new_player/sprite_accessories_Citadel.dm | 7 +++++++ .../carbon/human/species_types/furrypeople.dm | 4 ++-- icons/mob/mam_body_markings.dmi | Bin 43972 -> 45530 bytes 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm index 2d01d365ff..0b21852a8e 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm @@ -594,6 +594,13 @@ extra2 = 1 icon = 'icons/mob/mam_body_markings.dmi' + /datum/sprite_accessory/mam_body_markings/xeno + name = "Xeno" + icon_state = "xeno" + color_src = MUTCOLORS2 + extra_color_src = MUTCOLORS3 + gender_specific = 1 + /****************************************** ************ Taur Bodies ****************** *******************************************/ diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 1fc4e848ec..ad0cddabf1 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -87,8 +87,8 @@ datum/species/mammal say_mod = "hisses" default_color = "00FF00" species_traits = list(MUTCOLORS,LIPS,DIGITIGRADE) - mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur",) - default_features = list("xenotail"="xeno","xenohead"="none","xenodorsal"="none","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None") + mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur","mam_body_markings") + default_features = list("xenotail"="xeno","xenohead"="none","xenodorsal"="none","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "xeno") armor = 15 heatmod = 1.5 no_equip = list(slot_head) diff --git a/icons/mob/mam_body_markings.dmi b/icons/mob/mam_body_markings.dmi index a50181340db49512940e42edff85fd9cbb29c42d..737fa15c4276828ae4f9b4c2493a2721865494df 100644 GIT binary patch literal 45530 zcmbq*WmuF^*Y42WNJ)!?(jZ8KA|Q<-9nv7FGzdet(j|>ZO2g2hbeGa0Akr;4Fmv|! zzTdgdkMG~PE@s&C49|Xct+np8*1d?-R97Uzr^AOpAVklVQvyt8w0vvYQWK)f>B(gd7?`AI`rhU_)>}$DR=E2nz|vBy{~dEsDTTd#n^Ix|mzv`MhiRX7haiZhblsWzGMdOv@v=#u;9Cv2YD z)~YT|aJfWX(U4?9gE8-wy4cgX%Uc9XBZOrAimXjwx2}O2~mWw>wbk@u+ar+a#$q%u73C z2~tz3nAfM{DkjfTFQ^tC=#Il&+ceSajc-q zaY}9e92QPAx97P{t$k6Hf|Uz7g+Q1g&*kN`y)yUO{9InmcpoB{V5H6okT&K53?){j zOV;3(BZBWDq!=O|lb^;5>nT*Bj_64RS4#u?szs+m4Br>w84_9Bzt1=AioZQK*z5fZ zd;4~hW})>*Kg}HWUUvX)0>AhZaUVIQ8WZlgxHf+%eRjD!>^y!n{@lQxX@66wE3?*g zc1+yYZvSj)%qP2^`?zcUHBFcqO&A_|Lpm>{i=VKIKgLN9A^?69Qat|uY`oBcWErKh zZ{=*)q_Llr_ZS>@4Y=E}f|kOe#0-*O?khCREG;s@x*4)=c2ubw1>e|*vrHmqd{e5? zX@CE27S?hYKQI0KbpGF;bIg2+grA;}UJu-N?1289V6i`{JnbHEH@kN>#!tA8#kGk> zce9&}4w+wAV1Z5|nBTrL{=~`4t6*Z1-B#Yk4*9*Yk=NL$7p+EHfix>dY`3VlKw^H# zfGO)1Bta6GVBX%|w$9EC641?K=Bk~oxMv+m1pJU`-Qkeg5PUbjjrQw0wnrb?j9FE3 zZ9@}woRCB=tIF-ab#$v4mb(`2dl)VVmM|t9TrT@atiQj%e_n;tb~`Ek)A_T7)Sj9r zws@%Vpz=azSyCBD5<4FBr#IL76%13@+Xu!E^iqaMNzciO6ABDsdo znB^P<))EO4b`{WZaRgXi@(8EJUFKcSY$PWHf6Q``t-7E$TIP~Qe(PHMbuwCTuYjD>OyFtr9*Zp6xBuzd z%WCb~lVc8^lYrj8ePyPhS@r9hgjm#hS>DNsSEte>Yy7HAw^9Loa9VB^2qmiOrflQ*5mH%xR{Y+CrI{jOR374u{Kw)YQ ze?4XR3htX*A;K=zkR&Qul+<2(JX1y2$%qa0RL&y2w8!v)_ha{eDnsP^{ z|H&?FJG_auQcht!O7yc4`>ny?p_cj$wMHxY#1+WM6)5TnmyAA*JsG4Q&dYpAIfU+X zfQ{0;ZCRoz<5ivgeZ6^|I;KMT@9#c=p0U(IJABUG-0bLfM2R8FOmFc|-rk88WC!<+ zjw)>&dUWYii~qW2TFO>$Ni0WrGlJ2+S8K(YFRY!Lw(Vn&zLg*PJYT`JPJw0-H*~HS?+9~H;lxa`Mn3rO_ZEJh`TPmXIxyrqp z-x;URbaYax;iG3vs=w`!sXT^ZJuaTSrUF z-AWd2i0wA6Dc6UH{CrkOC(vCA63dCZlb8@;Vc}nM&2ca*&LAVC$#-l z{Er_;3=gYL^$0{AtUy(6Z0olR%FBtQq@)`CZ<~*6($;!Sr5cGkmt&=`aqlQPz41HJ zDbHa&XuB|hjI&CU@E%fTh&ZA{>gwupUz?U=L876I)z(hFN|cn8@?%|cdHEFY_bYg{ zjErJh4%>aZtHJwS&lNvWfB3@6+M|%rLG`2L$p|kPuVtQ-QgUPgGa3v(Z?%RiU{@w; z<|54^;02-2R%%ibGbMgJ`HHVS^jG80D~GY+VR`uImqFd9PAg5?i{$jZt-L^d7wf%_ z%|o8BaGSK!pgvmV)BERseiY<;*hc+ox5(BoFr!;T(Oy1Us_7KtwWq(+0vPmYvf~I7U*9`gS54^)k#zdFrVCx$DI2v-|W9Y+inmM5$R3Z zoIdVkp7FD`W z%JL;J{i;#|k>|^8o|z+dnwvZkl|819Y@e9&Ht7k}lYU~^jOSu^Vkdv6-u=3_ zx3^Du^ZxeQ-O|R!nI!)*ej*v`@(a|d=C`^m^^ZKilaZ^6C&gBV=|v1V6g%VZ-n}!5 zo$_DOm#wuP`F=GbHZPU4DY_W}bgo@(!?pvg9=x9E+o-Eos8G0l#D@ck?en=_7t@ja zHnFtinDhC&za+Z>@-u!eP)9wRGG2OY64{TJk*UM=ZS4p0T4%nry&p6=DNkwL`fsJ@ z9K_NEEU=~FLw5wmXg6WXe}>a7pdB9jpLYG1hSLP@k&2+?C7O!oT{-euG?h2w&ED_& zmga81izOT9p)=@;-vwn2=}Bp1t6m1vc$V#lXRVQ{8@J*DIIen|l#9 zm5zN3-wPh5MCM!2goM-I;$g9Ch#0EZ)YS01{uxg56S5hV2MUA=PD@LBezCY{G;`am z_xIiBx0OW)g71%es4LEpJ=CVQ)y_4DtnEXSMYsUg_(+Cmd`3p}&oW&Ow{PGbW%Pg) zW!lau-2Z>=-?L$+Aa!vGi4U_@H)u1^BNq>Ui+$b5Oswv$d*qQZ&E*73XO-qrfdW{X zz=EO-w7!1&IM&0555c0AYg7Jjc91A*{aXlqNUyC%uqZJ=XX3j(8c>YpCZDs?TjP(R z2^YHxsTV_aYBKzDJ5X)3I*u1PcJ_Apj?t>Hz+oG-65c=`- zQ}?y=1?Rq>VG$>1oe<`~i7EnTOaPP;v^+6Fu6L5lNFHb%qm0?B*&xO11DHng?aaXr zxrWSb9bDeGMJIa3#8+*>yqHAlZyaAxZs1k|;b8}|J*7vp3DH&#H6cs}1`&&<%=I+G z#^}yOkLKMzX)TIq6Q?>Vxm!}o87L*+ZVty2OPa9f0>!li%0+$M-_H(-Br$tY=t1?@ zYZB6bI3n;K7n+-kchMFA1p-4x(&G`*&5YyreTS_Zg7^IpbiHo46uA3n>!2tnON1C7@tb(1ucJ0wlOAllZ^j29wwXKlu4`lqTNZ-ln0am+y(s zn761@T|indMGI8hB8{&1WqWec+mVI)IBf{pUV_Ki5zobnPxX(lZKl(Utnrt!;_ToM zmm4yb0u7bm5_LT)NU&&F)t?aDVE}cQa6N8?Vswv4X%b&(12g&H<6@moDALkRH=c?v!NdZe}6$wM?|&i{iD3V@A&L&V&iiwRUc;54cIt1;6lYu-v2r&$K+J9 zs)I)(&D76Y!~MXBQ(X0ALvJJLFA^ScgjkiH-Ycf~adtj-CZkHan`71*hDF-NHjv@m z9?6mIg$_CDrqK8`BDx~{f;cfNCucDCZUwZ~sF(7~c{{6LTk>h*aaCu9@bHF>(*h z{6!R$_x3y@kJvbiX|4nGx%~cAjgXj_Zue%{Si-$qYTOQ5S5q9aE2FHr3!NDH0KdMz z9$#FHX>Jx578U(mSxF*CDU;g3J$sJoy}iAi=6Gs)`cG3i3?>2|4T->y1sB^6r9E0a zV&i7c#_Wz%2l?lpW`8W%i?D>tT;7loC_3e%$NtJ_D$ymRF+$0Av$V3hI_bQy zF}Z{`Bw{*yaglaziY&|Rv`iN16Yo8%#GyFTu(Y&vz^Q7es)}ocEClj06#6LwWy_-) zF|z3@RT&Q6%RNt7EDe8?O@2r{J1l|td=X~NE+;6l!$h_{`32Sf;I}V7rjjrQJ*sNF zg|8wcT3;Fpz^n^E2YZ|T5*SXuqLPOV_-y!L#d zs~diE^S-XWel^?oV8U!Nb(~bw*f@)P_1@F2H?**U}RftQTf3|YTy zMYO%m8WG`@1elcwtKT%FIDs)}3G2`lroG8Yj?5)t#k44llV-#%6NWIOz^P0r_ss>q z#&UP>RP_o%W~CnG;VCa;-g5dw+&lFBQIA?`Z#Udj>|0usZ>`GVG@18ofw`^#$$Aru zbg3YIa?i(ia-I`rJq=8> zo1Hl2uF_S$cSDs+Dii(SjuqT|OQb-fg@`g*fJ(yiK>oUJ;ixB06gpqH-*?Y%-cd|A_(@cdOb{y?=U){R zAPg`>`!Xhz^J9@0m;=Y%4BvAvL6!{Qzkd~D`MMsvNDAS62`o| zTNFKzhP9!)WmX1X)i^t>t9&Tbca_0Ks|PSv@OYNnWAD1_ROpgqoaLpIK%(?BPzKcV9B|x_;xXtqTwuDVPQ;F zI@7t0eL1KMK!9M;VP6IuXF{w|g3kZg&UDFw3Wy*fmZa;iT9d^;^m*P|L9bVyUkkft z<50lVR-jYoS(xPj7O1??g-p1lu9@-mGHL!%X~o;N?I``4YpIJd^G(Aarg3%X@w9?~ zA@NYmvH9DXOcOB6+HuY3{rr@NU2kP}t^nEyN@1OCa^=V@^8@xJ)60$wtc$dZ*%+*2|U|c5E za`^ABUc`Jbg&Pdp#O;Y5G)^5rM6-vgMZn7~Djs!L&8`l+qZcRUi!kFdEDv2DDu*%j z2mlygMa*p5?GWyN%ofix%n`@x45A)2RQIi+(fTl@v;I+{2YlWg3RtK&m_6fxl02Ze zyv@V{h%r(5@k)@C|3meDY0^6~C!R!c7d`dd;%}=Z@*PU|U$kX3#Se35B%}LA4dSPbfaKPNwYusMisQkbnrJ$&H zc+ZS+vkNf|+cC=plZfbL@Klg6p2MhXnS8VOwkRbn?Zf7~ur?Vsh^pI-<%JH;V&l5{ z*;@GC$Fr>GY0p>Dn$Jk*7iMN~AgB;cSD*C7Uy`+@J|}8@eSJtkObj7pwtZ_uVgIyq z${8!5y%YufSdcr@-fOHj~^BY^2p5I$;5Vv&YgjpnXP(U--2K_vkoR%=|Sk! zLV@88zt#a;VAOHQW_(2Ho|Pzw?o8v5hP4oY!`0hal@7BX;S51!n(neBT7CQ#QF z+U~RY=HVS#^F517dkhQQKx;Pkv0Xew9b8uHJ<$8#sP)^AIb>&NGvlk|vR)bDu2|kupApkP=HIb9f1Avz^dOqL3(Cb4(2w!D3U^)#a^hV0 zm4jmA2t%$6Nz#$P!hE~Da`Q)2z^chzlE42fCq6z9VABne)6>&>>*YDdShl0dyVb`= zAKm|yr5`MZKZcLKfAlhvW3ZhXo82@foLfEFCy@Nk`>2rBKn$E-dMBSk*f^aEo3{>C zta;800|=Uegxu%+;1{{~$tabAw2>FL&0{+|JM#-ae_}xvoV{6Lp6>2>Wo7nTXvhK1 z-04$#(&WIwFWneyk)JSdh-3a%fzx6h65hwkNp}2ni(IZ-9;51|2?Xno55XgV)wVX< zO)vBTu9#b1Tx=D+cMoG^WCUevYo#LA6cu_FWt=46@42d26{g2b!G&}-A23~fM=irB zu5)bLUa&CcADA#ogB}p&!C9h-KUd2pTz-C6GKw9&d8L_7l;V(EJz94YiEskGYhsWl zcEYGCn+))9M7AB`al&AVDoDoosQo~kUOT3^R^A_1E8^1M?|vS~ptP8>=^kB-+mE5xQ{MH zh29=<{>qS&$Zw)b-hHV^E`Ei24`0Pv#zmW#;MYq-)WAv;+G<_jbvfsX2Or)Qn<3a$`;U^V|L^-4xAQE<7 zQNcT$F2oV%3K?*@b-l&;#!hG7^GP$TE%nZ=sVdt)f6;=71*d@yTP(HPS23D7;$G}wZ*wR2&U@&cuNH*g zBT14T5r|O?HI-wLbdz-cvyAt>EcC-?FY7CtWd3@VQ#s$jJIah>rZ{ZLe4elM337FD z!Bj2Ryx9WSdq`=z_=hd~9L=BH#iAe)f15$wukfu^=D5lt&&WD&I?^btGlEHGHE_!u z6=PAw?_|v7^#2P3qb)t^B2Cj30WoP{_$}5r(AYKli@QvW7TE(WUts@>esBfkVB&VE zV*lT)>SNqb{|%F%#tA0Y`R)I0q$RB*)qHjPbDHNqtUp0m(kSrwo|Nvx{!Al&uSb5D z8&@41Z+9)}UvOn{N*U7YOaEbGD)#{-F#B$<3TR{5B-#fzVFL4?hTYtNh}PNOL_myZ);m} z@*NdX+Pv>$d?+c)SUEWu6U1~_Pcqm|(lJ01$pjH#wME=q8MMl^yfp%GfA9m*BBR6) zt@94@PrAzUI{Jo#2AP|ioBgmJgc+}nx(1r85)yYIN56tezRQbQHr{IZE8RdM$mG@? zgO~Agmy%P?)yHwNDm+xbwj|)v?c^}IXw7@_o-M7keH0YK8hxoD6}rFB@VTU9;2gaq zq&xPmxIAfO4#Pfj56p<~l7)mV@w znF<)pd4saXJW_QhuZiy zJ=@;}vC;?acev^gsKk{2hYJ8FkcA0j{OUbg!N4Vb6yCzJ)eTOfb zxZ#qbNbxV1ERl+T{ljiScvN(Ce%@f;%4Pn?l?NknIGTJ<>`e(l5iZ@~!lsv46R#Qw z&3~?~r2u&WNIt7lIQ14-34C%HOBo3X!xqxja~aj~c_aZ}E3iNQzsHW_eDq(R9BH&3 z4j23Zvz9}P-3QO2Ac4qe>F9)=XQ_mKRF63D0}5S^B>vEz#G)retVm#5)Sf)=v9S6o`l@FdgCol?QQJO_TDK(Zw@vei8sww0MG^t z=Q$-jgoQ_f`Z!^`rcUqWh(8vH{@U4j1KD{7k$OEe^lwPNmk%Enlbsy8Ih9#!nAGdR z9MaqT4i?3}tSN>~j@pc6f9UO1FfI7Tr&k5Z@xLyau6yr<)C!tKWR)BY6t)kk+A=be zvnXKpSNvS-48-vIlWtSz*@-jwsRy7fp;o_N0r9@C|03X>h?P-E9>hs490PuoIN{Bw zy5xDae?BU4hzf-20MBd<2=BSr0}03{+w$UKPV3oSpg3)9Z6UeS1ekBF!pAXdODJCg&jmoY;qDE;2B5q z5nw=}Fk=3AS;J)W{yIM#gTuD5!J`Ht4T4WN?8PMCfG;kuuTOh^xDpGZg&WS$Zm=H{ zQ&Yj^h7I`u^IBg%{W4PNw{L$AqrZH=FR|g#a&rMidfvY<1FPnO&&0tNq8-Jo9NO{z zN)TpbvK8F{Po*{{0|}S!I85(z)gW)-Bs%bwL|q;c=Vd}>I#16-=-+t}nd>)&Qc^u- zmF=Ij;iv4l28vX1uKmwO(G#DAm%d~3F=m+4^jEo^G0FzVv1c&(Ay982$q#j}-+^ek z@a@%N|7+L21Y9T0X81Qq0E`#NmpT zejA9!`TXH3)QqzG-^3l=JM%ve?(Du&Wo;c*f+DYp6qa#?9F7imG!n9RE$X zB9ou+P7{;g-+0HBGB4aHj$BdYxm_WPUP8FUe$lCRH=5YGy|Ri5$ffPqr-y8VJRwNi z4omY{1oXavI+>90EtrU#T`wX-{Z0QlE%yb)Yr%gn08Lwgisi#)=an zh@J>GJ!mO>$F^heDjCmgUK*Hz4}e4ggp7989BI1!YEa^J5zzxhEv@(y(G}B`nTOL~ z_1AqIMm{~dJo9T)hIUBaZ1n#6m8*OzaP$0We8A>8k=8=X;;$JVCfq zP`LG})w_hm#Py~Td58WE-3=o);BQa>%LM3V7Sk*FR?GogpY(Wmc$D{dl>|UwJ#_+g zgiWo#o;%|k?=yAc9t%w)s%Ze&5F;7U+dh)(k~g-k(bv`v2@AuXX&`8z2?1sagoksB ziMbbGy+;RCYguU5II#;D%2 zLVi`^JWT4qjU%eTD@L~Y=a-b=$^L-5uJ;lx5Xi&Ts`geS>N_AiRRjAgSzcC?0u*%_ zAGDp26o&XucaG}H!|UzqUCu7ML5fN`4C*}G{Q8rm)@XfyjCZH%51Fvd4Lx_a{`|-* zH@?A(o6OjrI=d+s(D(bwU0w^uew4v+cYh>}xU{(OI+&?XT9?p8zFKsjG3Mmso1qJM zpb@3C@K?6|JnLQF8(P9A*<=RU_5~pI{-jTkM%FEYi;s^a2Z|5_()a-fG8Gcju;MQP zHl&_AbT#~3V_)6#ZiMbf<~peN3;FrN^J&0Hi{BHZLE)?yeY<_bZ1?vn>VA(dXJ06O z#*J*6VGlJ_SG6k1_hivl28&-A^S(I0ZO-elSU zjz2i5<$jZ*MVEQ9nw1K!fTbFK=IJf=rLtAvTSRa$Epvy_C0*tiK899C zt{fKm9u(DJhSt;w(o1@gZftCL0o_)&00r-wz#aq6%^TxL;P*HoP2zn7{!4kI2*Dyv zB#-kITh64fgVtz-9?D;QkM^$~!6a}(9=O1BXh3LmrM5CxVO;w!=<^=?lDOLz>F;$D znGj33Mc()JyTW)z-riyd&AYs)JVLwcnQ8LE?dVVF9boC^P6PU_%xLboz?twGpw4Nt z@)3le(Hd}~GH->ZkF^_el)Ojr?#(!gs| zjXD`MP?5Zb@t==R*dep(Q*OsauQC+x-5KoXALf5f6nNXUNZ^67f^yf~7;R`27*KSv zlOm^`Y#z#!qBo3whI$}W#mUXxEn&~Y5=}Iv>0SJu+nE}8Ed$>!FB834{>_n)4MSY@An1<2F%c%Bg}Z} zelB6v2o1GW;on^sF)HO6LESy{z>sbsel-dE$m-lP+Z^x?^ zrm#P019;wami-U&gHuvc$Qb-Vr~7y>)LdPK04IsxedkBoZ8LBhnbHB>iIsyRJiLR3 zy@zH-QdXUeQiHN2ALtlXN_-abNZ=$wBBGcXmQ#U49MnxRM-uwPcHu2fG^2vpkE=-+ zYCmxat5?5&|7HfnDr-|8pXRrG5g%7&C}1>UT78X};}|58ucNcU1SF3-F|w)N2%C7V zf(U46c+AHh+$<5LhykmYYC|wVfq4(jVn9wn(H0C~$#_{80ekU&#vXV@mv{!@ixU%p zfq`h;2=DHEXh8N4*BX`uMj9GfMaA$pQv$6o=*UpKDv%Bgbbvd(zf2}PUey&$S|a&5 zqk&z4jE^buPau~)IhywDfEx=xdbHZIa$B+cwlY3ElM|bhJhFRlW&|vr(oO%{=i-C% z4E~xu8l>KT9nE^~TH84}>F`2OhnInY0dO{A=41e8@#9BgN3_nuHZ`X$-YFDg2IL9> ziI9@>Sc2}uhYtV;hTzAafI(myuaJN=przzlP92Ud@Q_zsXdXR!q}Smu_2$hRQsVG> zw`)s_|9V|-T=8lh<^&}!_51udXLaq-y4J#B!3w}R>V-BO2m;}&TAUnrk0dF=o#gTF zmwxR;%trelc+^+cWpnc*e*7Bs>bYsNOyV{-VOaVEvdQS@(pP#4W$tcv@1C$-gTAQ)nq8$II zplXerI&JzUyLyM(-&m`U`oB?RS$9 zmA*PViYrtpOqeu6!&6LS)sSC+Y?kzcz&PiaW4#0!f;BEP+{PRg9c{es$LRG74Rt~u zyYEmU(5OS+kkxsgT4##6Vryg#@So#w5me0R{*43_vGt$2rjK6HTPFw!!a2>M(Q2X2 zI;@z>`u34QK|yJ&d}1`8KT4U_QWJ*N$VYC5s8u@x+Xx5EZyS>ra*1Y_~@zOQk( zD-~9d)1lv0yXi+g7SLFAMDEr}lA!STR~UmQZsMG-B@*Q@jCu#4&f^JUI9n=XJ%C+I z{dk?wC#B(4L2x3F>-;_*f|&C=l$4w*im5#$0W`;_Tc2Y~`M0ASRCraiF|TYQiNnkk zY*f+Y*KF2HXs3b1nX^mm9UQXTao)r4(7N=?6UuJGH9*sRZ=g*%%jkKmHzAHvS8>L*$orE|XTQCYLNJ!VJ*4XEDw|3e5 zx9%GSv!LpZU?C*mi%~Ro^s9cYLZ-%MNd(5b(QmaNHe%H5HefG==ej+4|Epd#t98y! zQ^c0p0+8i|1oD=b_}5SMHV3V|?YPWKj znMr?hlG^e2nQ|i@iq^CYMfzn*`RZhhfJ41@d$BU(F~-$1&x4hnJIp4gW)yl0GG{Zc zfaa4sh_LNX*AwS>;x=zh!+xgZ!_!Cnt zYoa+{DktBf673Lk_9safWmSg?AX^r(!2v+lD_-SH5pi+xy7I1G{+NasdmjELqv%tC zA1O~G6Y#ApUyzWqq^GA>^a%+GB}b7o9{`^MLRi$Es2FjcVN|#V6y4H)7mP~wWblyk za%*vnKSop&BJ3@pKp}hLJ%Fv=_jL3q%2Soyq!2`YV^)+5AX?aj-q0t=< zV@y*`z!AG_TN$1dA-wYKNVnQf!-znSO4PS`BZ=&*JYU+{+L8rk1tbUe^Ek3p%ru$B zM`X11^lVcVFQSeBwLhj{8a+|}@4NN#@R6de%L8tnF6sXXuof5N$_f)LYtzRqgv1aL z5e-iL3fxj1KRY`^ZDgr|DPL8&>aKyF|L1}NOxgW{x@{mnn<`m|wH!t6S96+9GYM@^ zoSvGLhTuk$bd+OjYzR~{KLAAp9Cjoq%M*~yk>+SZ0@(l6TkXsqodI}8M*cei_q8S zx1Tt`p1@Y&P$4DFx38C+;%LdcE2re?rthHH|?6PxT$TvWV95#PT**}Gno!GfUPpP8Al zpe_P-&yPtw#IHYO$MeRDAk7ciHb1}cU1-o2;Mw_m@0C4&J*UtDtXmmX=zaF)bOgfYiSTdrV9 z*zU^0wGEg$VIpf4PG_rekd$nf6<~DyySDDi*>1s25>Wb>H0qF<1kx5dmL(zjN6ko= z9+z|%ZJZWI9=6!ZQVLick<_3d0%RR}`!ZKD@BRKbJ%S+%(&Jvsc-h`>3i}5KpXlgN zRTwp``HX@%o9yP+4rX*z)cE-L>xG{zLDDzMVSapcbab+=lO-X$D-3))&_xOsP;SKU z)9AKMUIAd{#!xB-1T^rOLr@s>V6kaycee{@5dqHwqu~tEF;}?okMWtAa3wZ!*RO?z z*m;^t3;g|n^&FoMOeQAv%sG;Y@uFCd z@H6!i#jo@_zOmEllcQX|O+V#OK`;{od@hVghD|}t{{hxYY(YwF=pDE$MMrrj0x=Jk z7vgv`(S0{oaiWcA~Bl>FM6+!NW zNC837B@1hO#0gH~%NtU*AngUuD3T|sxGcx7jEo!(3BtSPAWl?cjv# z_ffk^$>wj{7%jadACI58h69*fLYfpgsst;s5V0)Ux3y^@-= zd}V&aB5yTLhQyG6)^F(CcBfXuhEy<;nKlb>dWKA>rxkqn3uq_gzj+I8vQ*T4ZHJW#{?OM{P_R@D50#Miw(CUiNhm9!MYn=$qz2{n5WT1Ak>f*?3!|n)kO!Q9lD10^CmyaY^gN=&+ zer+cTg5!4rBGcw$WJ47mT}PK3;$SYmU~er^oB&xKC=V_uU;CVp~uJ_)g67Fx8GP zrk0RhXw_}9*)P&|sa^huOoQgQ=adybIXE-L4Vq0dR^3cG7|R z9ADbalDNarT2WJzcgQ6R%FN>^`2r+BD@>t!Hc4G`i5uSa z8K0Cc<>W=k6yYk7XU@Wgh-4j!|jvzpNubvJ!wN-rv9^UH|Cn z_i4a9IwJM<(ei168S0SNba{Ob5Bi+d_lh)9{(U@AN=8PR)h(aRuTwztP63-xJvlt1 zZ7{9JI`HsDa68vf^U~7l>ucAgZ(E0sO4RJN)j%M(%ATe7Jyj-PreF~GOmc!CBqU@z zLjvzf@)&(!nMwbqktlG06?c3S>(g-DMX3BUR&>mWs5^YE{57}o65h&*GpktmbQbQg zQi*kNrj0uMmzJ~tc@@`ZyYzA8fgpu8enjmJ{p~l9@D9CrtzRvA4H|KM?PFRHlF_;E zza_gVl{z)7ID`%YkUw6{F%jGWWLwJzt-K2ZUJ}|~Y^n=3`7u(kTErk8S+gK?G;Ko-&L{fFZca){mF`WsWJ;3dx0;6f zi9X4To4zx<{&s)M`4-q( z>-)3WCLEgxjf;&^o?IkQ`&(?Rert^GOlfs{w#^n2usopNr}7|43shOG+xOQd*cuUK zr8@j_lg#`!;?%dex7&|NfDU2|Jv}|ou~?=GB1~i-wsBajIQDo|=KXNBp^6(!a@(vQ zfQ<@YPGCmBo-BT+C9p)FqA=TmU45gN+UxKXJ6BxJAq12wRZQe{eCgTCkb^J$Zo_Eu zXg%wAPtMK#c&E;n8bSRgYdkJ6WKw_Yj+l0N802z0U6>z?$N>7o-ienKo8nXHx@lcj zMjC^M!_liW4fdg3W-~o{&t1fZB*{R5w6^(J+u;9j0f0gN^og!t=n2IG-4M@~^Dv^j zvKv}bH;<-Q8Y))PynXGzPQYm0B`^OF4W%Fd1Y&qVlN*xy{fI)C!tFoFW1m1rD+8>6 zl?ZhlO$jc?=1AO6gz;2z#vpumA4kELOLDQ|zHjJaSgSTqsN7l?$tkj5(_5Q6LOfgj z=g`Ml?{Z)b@AGw`$#a--hlPIfCN)`LDpx&=n3rfbz|A@q75<@!Va~qh|2vP0;w@*= z)g3-gL#z@~=g(y^J@C6gR7;A*Rsn=2Q^A{dIMC8%TM?1J+b8zf!+>Qo;>nCz7%G34m4W%G# zBER^VK0Uhkzzg{26EHzCv6+lAfur?RqxHUEYvB#`%-0iBquKy7jo4NV98ssmPLO@7 zLT$;EiW&D!pU>`my?x``^{^6i@NW&67sEPxhZ?a^X0$4F43tJjGA&A)->5~TFZMrG z`RnKR>N>(te7|M?<;c9JQ?&Q#qhqSQx{mX#g}UT#JlK6njucjLZR+eZs|k+qZxp?l z7&fhAUhB{RJf8rN*94eWG+qS|fZ0@A_jt4HHbF6$9IalGd*NL%q0!$y+Jr)6>}&xb z2L*sX8U#c%D>$(JRX>Mm5&8ZPQFxtPmJ)gI-$!jZ0rumXSU_;rqr7T%ZadQ%7VtK- z;T~S?3Qzo0Fri|*wSTnQHSY)tpV)W;P~iN(03IN8bQvk}F8(+1GcyJN_mx57V|{s^ z^h?iq^e*Bf9{2PrCv`f!>q{6I4dR)UeHkhUIBy$avZbvoC+=Ay+6y0b8Eb656Fe1}1EouXDVM8nr>sye z5lz^HvhpbA2)|sf7(wm9oiw!tQO6l)@SXL0fREECzdOzmG<@OGo{z1-5dANdc4a8^ z0!~8gGt#aCPOc`J2XfJQSZ#!=NBnIx1r8mSbrg5zvPGR4QI&fHGD{boF!kBV$ zSe|Sqe>9ixK*>xOQ&LOlbSs|L(9j!o*7hTJIgYwJY3p@$SK69V zPcA4cW>{9p8s~Zf9v0OTO|5dy2M{!Xmme#s{zcsdEW+B5kKgoo$&=#9715|4%WaXf zu(bnhu06y&m|0LXK*a9u?go+qiVv`#aZ-K<|8ij8Z>G{z zk&S%9d`0bs6gWfAeS;ojbB0#+^dYdzyr98Yornqx1exeD1_UU*`9CsmKmY#naQc(- z&}23HWWs%wDljC}N~vx=o-x6{Hc&nJKa9NvSX9ybF1qOsL8L{F0qIgu zN*alwBm@bOZi|u@ksLxAX{5WmbC{XC=J!AUd+t5wdCtAhBh1Wp*n91@*ZS7`ec$`N zYu}JQj>AG~<2-XH4hUG(Y9r+_IqdRJJP0jtnvr~MRqmU*&ael>7C%VlD2)d5q;e3zittgB9HnEDkjLu- zogm0zz1QZG4eHg@ZvU#8vl<&6{avb3Vsp{{Yv0J%WSx@kHibgkMvQGn-Ag3_&;Xj< z7}}|p=I0~}A{st68ooi`($7b+s6nZkFdpL7{Vcdejf{1GK^;iHt-saiq@1`a^5CV4 zS^z8be_$|HGa%r|)ZZe>y=mjO&73@~3)TH0`2T{gL^|faK7*gPdqp+bqI21zS&tgT z@$$&KzB}&^fD80WjAC-{CX|(WxSO}+Uh~{926qSzUhfVQjU&EN%HN%V-F4i{@_s5V z(j2sS8t3r`N(eZ@2J3~>*|OCXjxF|9q%rQJ+lya>rJ_ssBm7XC`8l6Knf1lVh_)te zJ9iykf0E%2^63wScowqixvnBb5hz##^wqAw8|uqJ zDb_fm3=Zsg-Ut~sFmNzR2I5Q|<^@mMldA@Hgf@EcZ*p8!`)n^`LuXB=$;0}t5_rsl zyvp2XUqRdo)J9MEU6da^@Cg|yw;A%4yLR0NOsV?;<_}HiR3tbm;YHy&Xi43rd#7eB zsE?s}Pi_`!MWs|VUm*}?RV^QHJ5W%1UiHJAKRD&@`IP1=?}Sql9V zXF|zDNu!8yPCt&7t46XC`~)bZmZ=hyA=7pk<0q!MN;&|L`qSBh9pg@I)NcyoMFEd2 z1lx6cd;0?^)+HHnWVYk4poAr^xnowHM6$aB2$6s*k8wW1sTv?uU^i*mf78eKdhlAl z+g!u}>*m0+RV&WTuqaBq!yAAhM8o!gZ}l7Dn<-W@K%@W+fd!I^3g94Hv6J-OJp4l* z%_h_J{{+F}A}t=d$Jqb|mzFw@uFK*5FAx~;-eRSYS&uL2*b)mDB%P#ia=6}_SAs~i z&T@qi0B0 z^JK*JwRo(5hh09X!051*gag#7B<4TxWj4=cOR!fhu2gb%a{9oCgEA62zXR&;S2 z&@T1P8-D&A^<+1#Ic*7PRaT}1laMWKhrPx(M0Zy9wsy#Gt2X>`;Sb)jk;<+?E6=E>)2H~KoATE2ICoC4P!J#C?HXoK$qV>0}Nkp6Dh{|#ER0cdT+ z9SUS#>Qpy^E;E5wv9z@GH6-3a7bq_z%_Uas|FUiv*V(Fd-%zzvt2>^uHF?Q!ZI7*N za@%<^;&adD1*++i?OTIXaGXQp`RS~V>sh6wZ#y`$Jel&^Vy!pU-v3RqAKy=|X+aYR70=HZm+7Xs=Qc;Hu1$yKtQN3&C0{lDT_`&X|N zot*B!di@%ZH1Q#B|B8Oerst7|(uhQJVh#{35O2r-8~fw6Ia7Y)5|Zp$1$kRdBi|@j4 z?%ja72Hz>i@2!*>vBJX|gCKtL++cef54(YlM}7orR7)+xnLXr6<~eRPSmHS0pWgnz z@oSX~!P|#Ea(yT!iY&V?kfomcZt5?AFH#p16osg}?G%Dc$8Bx$R|$IMn%{yEMASZH{I+oiniKnjx%S=vU7`W5we?BrnfCi?DqU^I~{ls zCPXUYn-Gz_f!IfTo&7hKOw51zyt4Bp`Vf3WKGVM>40mS4#g+_eAWN zTvEOs$&nA4^e^3HcmQ&G;SUPg|Erik6z_jj^@rl=yqEv~3kX3#mO27YhnTIbtlGAl z$`Fg4_568Qd_d)HOl<-t--2I4phC@#S$PUf31Y+n&VP=McFZ9CgDK_jP#p$A-4|>E zogjN-Fh_Y=r^Q(0)X7URDYE$Pb_OUS2O0#L7!|Saz0H`4H_|UO|GT13j1)e%d2?aU z*l+sq`0?hUhd70-J8;CrE;a;QYwI()Gw1Ywey%%wX z5C3Y)pEqR$8$=1BSyc!yOPqtl=7H!|nAQz9u%-f`8KX+rlMG};T!1sPpU-2!K-b8T zot=Y`riAg|@W7mQ9tNx&2tVwy$5^E<3?qp0;Wzg$Qud5P}jfBZ-*Ze z=L5F*@UZU2bDB#4@Ce^23L${kD~fOi0moYc=F+XaUwWDVQ|5W>BS( z0g7O?FC;#lP|}gPce8H{izx!=-K+oCNbRISS8M^G1|1CGk7gPP9XGEd?m7=nCfx;YU4fid1GV(wx5D z?Hgg2lVi0oKe20ILTL~E`xg$s-a*M%2Z-^EH#_4L$F+?h@{XpufuMwz&K7(vZaoSF z5&Y@_@>fTF^E9WNv^$d!pya@#{nBdX42%6tsL(zSEGT0-)z~xET*5Vr&UV zT$u{_ojLknZRTGHpx-_m{Lmam_`piUe5S~MQsu2x z``?W*SB3h4-qqcQX@H82L}KbMxg)T1H*;bdEDYF$zcux?X&(t10noqH9-Ty>*t@h2 zP$`clCvKGdfBtZc&XA#DXA?-=gd+>pajPA9s~Y7%*z#AXTUvLN$m#5T!t|zMN`<2a zIRN0j|6+d$;CU23a?Fv^mX=;hHJNOB>y`p(Tfz5$bzMw$LZb^u|H3-Uz{Er z`kx;l0gfXT?np`b=}xgfp7HTC7X|?{nY;a5*#}X|>}Rz_wH})v1u9z<^C$r&iS)~R z!2N!-Hu{I^pGf|9PR;+6@Rh0vEj;${ROThshvXmSS5nessdzu$@!(TIMY!(>g?{X7``L-t2m_5{WSL= z%PF+%YdbAXrIDO~C#F7f;Ybcq*Gj4N-iNG0b!CGpjMLpN#_|3X8GEO zqhEox`(HyLK1Q)KBCb> zD{SNEUtl~#dQTTqcN=7AL8K>ZJ+9+7UOdsE5{C1lGEL3^vg{^z2tDHy6GJs$R(+Ut zU;i;s_aazUSBQIwtXd1$ya`>pyJ3XUtl?I=S)i{0$)>jMGhGMoN8^{hP8GTWyZPT9 zb$-6rA0g`iBEHVRboziAth$ig)m>1>@(||(u#O2`uFr(mZ``BB`GZSMb^B1-4BV+& zJAs)PFE2^6>z0&nm_59^*)|p!{};kuS63EKT&PJ7#gWrhT|M1x6*iqzk~x^@ z95d7TS`fJV_l(Im`aKBKoNBljsAV)i{x)M4OEa8hQFzUT;xZYldtagVmjwEt72uOZ3pmv0^DCOEg1@@4^Nxn3n=N_ z+O+RPdJA+8kH1xsp3ZC;IDzfK{UqK>PMM+OsI{Mk=3uyU_9he>=8;ve0vhF;X_fEa zyN8wQt*B-uI;)JU8U8rU0^_<$P)?~YE_&Uc?J z?3kGc5-6Y|L47Xv9JVA>dRy=ayBp!bAI?*zX#Qs9JB^1nc<3*myMDY7O7eX)M?PyF z2O7_q@S@E9wmwg&dpF4~IWUJi?s)}S-FT3_t?6?w1|!V{2xbG;{8TLxXbqiph?u?q zo8ZPi{~Q&)dDY4MRLM8=KWD7AY!=@fascnaI-zr-Z518$c;?I^IsR><1@s66eEN|(J6`cOQQ76w8}=z?6Lp8VGEpA zB0{#w=_+6;v!!Jc9}#}J>1!X=ghsi%jGM?GX_}TD^FRH;eeP)|QwWw77Jwabt*If(MvOU&UB z2*qeM%H9~g;=&M{X0`DDV;t=;l8@Tj+I>yg*(^ZKjG(n?#QEjRe6MaeG z8S`gz$Kc}_xxu@3sSjT#%dAr+fU;^JNQT!cODV;b6!k7DYG=oB_t@e;B1AYXrLZz9 zka5@OvAiOi`56FC;0tN|M~T2I^cmW`4UTi6#%7@l{NV0|lf&P(I>XUYieu(s+g)@9DK*;Ys*6R9+^Z`6ITrg+5`ukP9 zynZEXmAjGQPJ%!|3y9$8XFLc*Yfi_h>TID~M~p*~TQRe3W79rPVs2!J{L)95JraWu zo7QJ)-F@~O&v)|h*QGUp#0utvE6Bb-aj>`x*o;i%%OIpA?svuq^uwyj-^Dj#$Uxu_ z$j9`ow+RP;tE3QFBS&=UPM#z(59c5Id^Q4lm@>R~{sTlcc$zUPj{qJ1Pff}QuIN1B zD~E~7X7UrBx3y0Z8qG&jyw1f(!lYkfdvy^Owz)`5J&Pma7ii}NufhL3@S@f6VjqUDQXFQ zS{mKHqU-Xbz>7Mk?S(1t9*lm{AJkI$gay+-=bRn$xk`CcgjQ{W@JS%r+-4gRTFX6C zX;t+`ympzvXU-sLr!qfl|DiwdTg!?Nz zy1F51M}Rz9mBrWg4-;J(998#A7#fP@I`162K4WIf1mOr-gP;4RJTw2y(H6?!xWv(?a%YRLiuD1p!kvUlv5a)llxQ)N8VW)S(0O@mkh*MgOe!F2xdy}>!ozF zac^~VR$sW9tUr%r_i_l5>=rWdym+mzqwtInmxxvJ*9x$LoalcnrWBMix%$!t`sPvw z6Ab*nK>6j`+a0hDO_>h%rx`hLt980kPP&rAHqEIc!tz;h3oI7S%92YKt+&DRDed$i zSCDu_OZI5f5#7HiAV;Xcd~$yJWqCvk^Jqq8Ot|?S(>Ww%ca>ol@LPxnf08n`|FV}S zszBWo-}_htR(zG>%N(|DKgRyExixFSbW0MC5CXbeQ)mw{6wuAO5u)^xFJ|PKwl)P| zIC!RYeuOzx10EbkdJAx-_%2hPEw{b-PNasAd$Sbw8Zl0fLy&q3fw36lvzF?J2K4T+ zx2#ua;j{gL+LDi|JoiZ~Aax2aV?ahQ!Mt8zKNo3vi+Jn0s#e7{uD1EWXFU`!fEQxX zBj10p3&TzlJP+fJKBVsk}#fa$7|PArxywM@}&FQ9e24%m2q3m32_(OD%r(nI8n zX9AAut9ta|2DpmXvzhHOIJvwgg6l9*PK<&?y$N@xl<8N+>+0XSXre2GOKwe>VHDw& zD-hEG+$Lz~f_43{qvR1bhW=D!iaT~~m7OYNGgVTlv2&Soq-2>UchyDwP7(NzQ;r{H z^p;*?W`yk_2Z4ed06*C;mHzl$oSvPMN`oi28CN1Ih#z0~p*Oky0jTIWetex1Xnh}yYbhK@U{}SxcIej7 zC)B;_H&6L6XCMf}ylR|>8>Z16xg*4AB0l3#$=&f<@}&i~+DT~T8zDmp zvbW6=6s7?I*#iLFIk>n~+gCduX=#yTShK*$wjaL+Wal6hijkw8qN09yYafmUWxr=L zzCN+oSMBIaGkROz`@9_9^8Bc5_a87n|As@&o`K^Va2B$#XPhA`-Q=4!TA#vjb%1>b z?uPZEVw&EF5w5RBrNf?ietX6*R*wRt9cqJP`v^ThSKrz3#*An#Uv~S^d&lRuSnoPK z|H`gj`Nb&NS~9`*yNMfa$^HFU>JK4(Z^;OB`2H9x84*NJR_8v-uL!xeIZE-&uevEH$Yahb-)Zm5( zJ_rg6v+MrAlkHwqc4OiXK-o=>_c=gWKJ3l>j#muDSrTL~JXv`Q6kmF>ioANM6-tuP z)S)GPgL3LdHu%onz+W?`bv%;hV)U0i&v-663^y2QvbkQdJg@QhGiETCO*p=9^s`UV zZiUz6o_IA}YQKRRf&lon8Y?mwoS&z-ev_~pHw9Z1EwiCfX!)Gv zpH~3rY22U4iRN+8{%-GEK|zH|3rQ#F4@5g+H5#F|Df9 zJC}nGA9c^?XEH=z)LDloWIk^Fb0MC)zJ5J&JOSR_;rh6y>mzOP;5E6X2vmua(;J0T z)Wx>(>ypHS_BKh9ouW*l}WRPFmL zCDsqCAATnwvFA85Gs@q6J?kuheXa-%@IQAnW03SF!=2zeKrXnEw`f zoRw6-5x1y_sct&Q`7$zR8Xj;@Ixc3+LhESunPiVS(yr5GH)p*AwryK0+xx=DXJQGf zmBzACfr7Hq8m-BZ#3O*?X^yi2YVavjry&{DI2w@S^cf;Ct(zcjcb5OXYI5QJIs z3&l#oEiFt`cpxq5i4HfW94qLQQ=WPwM(*cCOu^xYHi-2!nR4__=Oxz8f=mK40T zI&*xvAOEiFy>(h*b?k51(D-Ce)?7X}mXj zvhpA(5b=Z}#)9QtKfzwaeBiL&ARY`H@sM?u14r*)z}~N3*H#JU-<@7^1jEC_PP{u+ zPp`!8Dteeq!)edYZ>ITdeZ|=I?XCU)yf-Wr3z>q6n!iHRK5%SN-1t`aHklL6ATPADT?Qk0cFiTG#fk4BMK7HADf-0O7Jl;PyjMP}&=Qmud+#_BUScN}U z-mp)Q9FP9BPJ4>vO%<9*Bd3mo3nt9|Hb*9R7S7T?(uAmmBkan>!m69G#|3 z>z>U^^5FL%PPLH&;+)E1d70;v6rMr$^-*D$v^?(O%S@`F8@NK%i;YqjHQ>f_y}5ij z9Z<->-lYuPyia=1D;FDOR`-aW{UnGKS}%N2vy7{t!CZi(4wKzOAxMl>Fun1!QP%$F zWb8K)If^14#qUh(A4V7%CzRb9RyGBKh|i%s1Y+t>s@vrF-Hu!*6gHivsSbYz8{sQ7 zxc;qOmWMq;fe_CO#7-E(Mi|2V?)@}zTWtR>m;E-0BF#kUj3`6p3BK;%ZVYz-n09dfWudPo~*hl|buq^#T76n%9mJjP%T>`jUaxTW(8HP+JN2 z+gO&+!`?5+`<()D*yzTMGu2%f6=;EwC-($SSel_KHEkag8?>ox>HezdZ>?)SX^C)i zjlgw@Fgaug{5Q(V<`V7$v3XQx6D?Ua`U&WQKcl$?%8|GVl;EEp7IDa3O#55Ctynah_RjxhrZ!J$kvvzD{4~|9|E$tI3OBL zYoQo&K!=n|?S&xx95p$_g|QPogN(>T0e|m4`bVq*_!~wsXL-+4z6)f|*uApoBKj)J zp)!>Z;Pq2amTZ8ezTr3oHDBgW)19?xe)ymk!?uNvDpY=oPub-3voUba-VfQ37IJkx z;^f$IvRQ78hCi82T-m7GB!w0xu8fnzV{;Du;6kX8cRl+i5gKLX2ZkwRP>`?7*J&v5 zSxe{k_llo=HwJdDKiIWYcCU=)j90l_?+Y#O!QqxOAt$nr=P%}M!qv0~qxSz=RR=?v zu(vG5WVj1|&eymT8^PrOGS(I&qksevHuZ)o4@S{`)LUqE)h^+SW9^y>0FAi4Z7Thl z%*3)hJ$|--ntf{4s z4ZON1ebDcjcj|gFM86Xp!6IyzYPTUrwu=_u%8*nYM2H9pVX4odhP}`C4FhYM-W&W) z#XCn{k?5^+HHk%-HKGh&=sm7oIMD+gyzqfCO9x#>u!Zhb?cyoFx{`vRud>$=MA6{g z7THOV`>m0=BhZZk2ckoC%l!D(IO|Oz2Q@RhuYvyWdUt#<=|Yi4v3Bk2O_K6%Jac-6 zGzWP`8DlE$axZi~^}NH^W{z>4Y^)=WSU|ndr`GZFV@^HS%ie)S&{O3i=!$n)7jsNr z;J|GI%kMjGEwZ-|rULRvI7cDPbn)t|8Tz<@F5Pc})Sb5HzC}tK@@-E^mC*xW5HIuSolG zS?Vk3Z$+7mR+)9zhQ6Y<-JT)Qrwq5XC64Sc@RW-SpwTOr)Dk7=x9RDX=;zv zzZYJtJfBK`Zgf46qG61gL7I2CASn0P%s2D^U?MfY-@<{%U_>u$ot6!=qV6NNGxoc3 z@Nph9GMlI3e?eJ@jG|NC#osFj^G7#yKl67$|E?fBfMrH@-7Cpjrc(gD$O=K9WUd?d zKJAL(=e)8xV>PI3vC|6-P=@#!JW6}nPdem%$8 z1}sFmg%vj-NWYPY^twFwZ!OZR;I(~F#n97>rCxzNWKP2(`9H-AtM991xveE=wYK68 zintizv+Me_AB7cI5VW^ipyOJl6~Mu|^pNz)s>LP?m=$K- z0T8KR2%xk#^JQ?sS1$&_N5?$ae)4Hk&et3TlsXrn#|JRi0nHj-P3;)CndgYJF}!Zk zs_Zs%{X>{C_OZLKk55m}&b>F!zm1}KaZRy)VJy+LNituynvor6T};-#xrlCI*}_s6 z_vrXIPFQIFI0b<**r>piiT)k9$;AqJ4i1j^hL2$@NxZI0e(n>O`Rf%Ua`u+%IoX|B z{x0O|=C#;hF{PuYzj5y$_I!=joz6wj25iX44Z9HAu4oTED=pJ>25lbv;r@899xX5p z6&05}WW9P+ulga>OzfLz$Cu7P3Y#xqTu(+=Fi-kR&e>NvRz#ylMfTcCccP#yPuX&{ zh^!(*B4EvmX`XeLl5`Kigob4&1xvw>E^H0pA z=7Lq)<)BdXUzOI*^g+#hy+h_qe81!_rww7Rn_HXdJw1z1kd>3AdkLh zOG@I9lh4=hGn=paT(;mxY763|`6}nTCa+AkVzXK6&tGo3l+u3&iz^vflEV1A5W9~~ zsmRUGRqI2$zX>mJBf6vRfH9BrHn3k#CQcKKemC|_pQgvHy+j5`V1Db--mIe! zzve#zV|sxWeW5FRB9ElT>mv-O( zjq~E=SxcozeI5SV+-)%lOHa?YIQl1$6`zh1Tl^ed_4B=s0-mdXZh5Gjf;&CJLAr%E ze@wXS9_Tk)&JcVbX_AI zefXfcIZZ@jfVw?PQ!{y>O?$rmV%~YZ`>U06z`u%)?_z7Qi@BQ}f{`eWS zKF6spKbmpamo}#JLlrOx@n7_R5@VaIw&(3H);()YFghvT zLG7MUFc`V9-}B^+0T|tAYsT}wuQ#^JzVqrxIUyR#pY%o7kUT)_WkCVirA-6s0i`KD zij?g-Yr+@ZGL~IeT(%>KeXgot>tt=&>HNN3f#LC-?j4vEbK-}TN_h^RoH3F{V;r)YBjd$BWgLM2Wk1yTPg z**08U3D;Oy@3P%XYRR86;z`2RiI4b>CUBoT-L3(l>W6X6uq7{1n+_+)#?40F2Lmor zLpN5!Yj@_v1bCf78~VWC(Uno8%^=TdEB8h=Q~9RMSs(0d#|)?C5E#(h){8yv0Dgoc zyF_XG1@JC(KE#0j!y$x90;eM0>1exIV?#whyGlz+-W6wJ>6@64Y>rxPk+KE-ydj*- zgk$FGDrYYCVQg#^OEYLgp=MD5+zrW7B&>Y}i=9xwT~A?233Q$!lPz?E2CIMnuGvhc zkLfceO4fN1Ve474H1rQ1azeJo`zmIdS(W#>8`y!z2fJO2E+fR*08_wmhwHo?ebjCu z;j#z!KfJ{Vz%41YRTMV0Nw=g0F8q3mjS;=6xarmjtBXe-y$Mpc`R) z1?T~aQ}nk}G>sL6JZ!}S=-TpcTd`Yq&Dx>?WgJB_tAHsbkKEIh7ZI4~AWWnt?*4P1 zIAP!DTXQ(zlXkD#otmE;l{MCMjOwjMce{N1Zte83*1)(*q`QUa`f;&~$b;7G$m2*8 zX(Qu_Ptmn`DEP^L48ebSiAidYe1iVt<+3R&;!^_8@#$0l@~Hz2VI6^_c7ezu_jGIy z!jJ;CIlxo^qKwkV#|sN=(w=+Hc5f`}R+ksV#Kj4XV)q*cK6SKg@`dhQjo-JholQw1 zOkneHyNd9xe1tyXD(PNm(7}fEt#(dASW z6?Ok{WsDss;iVRkOHylT@IAH!0v5^cb3qCn`$Ttjo0yp{vL(H1u+~q+E$$M`)Gvnm zHiPYWuoj%}RX#>PQ{IAqy;lxEo2H4ScC`>nBrkkKt|2iipfU*y$^^f&P>Wg5w_q!i ze%0H^6N-IX|9}E$+tjcz5yf>FiV|Zg6T{S`UsPSB(0;(Q+@?QMqI@F~YXwFPFT$%lL07Ile z=+?_QBF8wMy_^#Pb2KM`0)^~Y2WGl<=KMC>G|4ptnEIieyWa1;Sb3VW8a~HJj)A$} z9cN>D%(i?p_;NHY@n2!E?VNLu!y|*Y%^s~3<-zju#k6jq-;CKP1?7q(vDlH(W3X=g z!3ME@#^X707d~Hv`ZwnN&X2z&DT7mb?^5~M9P2J4rvHfy_pl#NCE;#bP|W-0&_^k^ z9!k-;%yZ8>Up#Db8`il!zaNik*E_mtv~MF~d~9}XdC|(ohyGjrzWz{cEp#k=)d{oP zoEodFK$oiTHDfc#y+QJG8FWpH$LFzG!S6R|o0#grJ{$gW+c~b;#Q%b0H(x4dqImi7 z37a$C$QSkgfqQP-`@hU_v?B==vR!aVs=V~Igmi?_dz_chSD4&Zj#%@K5MAX5IrBhJ zde3*!9v>{kjrsmY8XJcW%U9ST2!kwc31s`aWE#3Hn?DGoG_Z3|KOaTj{Yv6^EqN3) zA;oSG4~9@Q%C{^dQN#bP?HC?I0C2iyNQ7l&$)Tfs>zz5(*@4DcoO>gP$5*sv==VpE z@8pGoZHkcLV9NV``5J#NeTooskwD5}^ynz8sf8lpA>mf?KuYL&!)?hNDO44ob}nXm z8bYK zdFN>M>dvGJQAY+R6_GvI;!qOr-$l=pFJM#)q8>ftW7>pK4P6a5K)_*ecS@_l*y}LVQS5X15z$2Xi;*_^x@%~tgyDAPR37BMQ>iKqr%SkI^$j#AF z%GkH~j4XW-EnuFHw{pth!2ZQF`ADx{1|0sj+fvX+9`nv- zHmNo)pI3gMYG|T;W^P4qJ0r3w=k2S!0cWGo0Zn!+bSjj38@Mx<^9^46B2v_!^1%ar z%~~3q?TqIc#jBeJ=Ao7p8lwdC(Nf~VP zeiITG8>?AN2O$wS3}d6z`9(~+og#*9w>9rWw#9mBI=(r16m z%E6()kx6{K(?Kdo)ka@#y7&(xc`1)`5`x z^&xNwjm^w7YggS?mOV!%jNC|p&+$M^RO+pXvy;hfO``wROK6pmzi6hta$WRgpNDoR zyq9^oK7c0?H_;XeT@7vsq@|ZKYxRd>d)W6i_#7TEal6aN=e<>Z7Dmq+2KV+MJVm(P?cSinvk45<=&=JHF8 z>dDOwm&f1C;6`hIb12UFjoDYH=saFggy5%|I@?o(bY!_bq9nxa6SI&`-X??QTkXUM zWd)gJsGwKU^4C1vq>{;aoAdPWjd`uo#$5g2^SOx$`^z6B%;s!n*<8ag(bbL5pQ&zB zIoN&KW{wM34|wsNGvz)jK@G@3HXorytbnBTbFXnTZ#%qJDmOMHf|m3_^}f`amud2~ zE}Zr@YmF6@Y8pV8`$9y=PXZbiAoOS9OIu|_Mvud~6$Zm(4>V7r1)9qJpJBbF{n&j6 zg6d8XWrYq(&AEei=6wiJb@NCDHO@$0Zn>54WVCLF{==%>+{ z!`wLAb=v57*&ZlB!tB<_mUvR8T}qzT&KH{f{^)6VKwbV}QescCg$@1A+%uYvIE;;D zwTm2;qnB5H`dhQAAd{fKS|(J@!x@=NGK{_xI0`GZn<(mOrtqp0QCOZ2JZ#l?h@`cH z4%HVAG3fhH_m;i#qcjhb1s^0>+EK`?^RzTdbvr7)Kne!tEFg~Ww&5B;i)iG&{0ft~ z8s7~DImMK=_1vLNtUqoAQxT<^`@Ckd0;-=-(Pz*p+LB)i^=J21Fj&5`z^BsTh~Se)-!U6_1Q@_DqupC9&{GU470rgjk^B{rM-^>ZpsigFRDZTY-%aTvxyJBXsBTc=|m->g} zEc3!*cffi0UkYig1q0=ua{2G_1XNMDP|AV!BXUw`Sgz+V1BKNjha$ z;TB}L;IRN?6ryuTm(3x`kF#$4CN2#ajcEVAnCSJcSQ3RaC@~|rXO4h)@jSG(C9aHu zJ|0zap^3&-=*nBr7}Vlzkesi7@tauyZofCN9O$u2RaVL5|4SR%Zti4FyuABrKsIy# zw}wa8s4@O9%*yU*6m5?@rSj(BGrIr4?+bFZu*d(EnxV9YE;&hf007Smb}eUaZ8@tP zD70+|gqaKE;BaaO=M9Mfq>a(8hSGVS9-jO+7l43^P?79LWV(Qv72&;oZ;#$_GkmAY zH$fl%;JdM8^!V%sKK!IQddvkPQo!;uGBJha_s?o#kiKpdK0V1h#l)O1PYK&e?E>PQ zFSS-dB}flx0->_8IFnY2!bl@E>X9vicM7^nv9sBcV=Am7^s_;+P6C1dPdkz7ps^%= z>#te3l;nx@(GEMOxxEm6!A_lkBz~9kH3o14fpsm@D7S+}?~&gAL+_^L%9WI>M!pL~ ziZMRwN^&phB*$b=e;jseF?U#4nQcq_0viG)I?*QClyTos971i^Sg3vI{AFyYXqC%*2pS z=lO3%8=Z>9Zt4#z(USZh36;}c$GeD6l=eZ34FbvRVQso(H?k_L@ZLM1X{t#B$50s^ z&CMW7BDHJ)!cr59fQZywgmj~3|Ll*j6gyeQ(|G4ErlP8f1?A@DVL>YmS<4Tf;`iti z{g-)FT>CqJUGm&HuhSq;x9PhdnNn9|yS0N27nAJ;Xu|DV(NDzW+bD(E6CO+V5)u+3_ZC2YE z7Hhk-@_P?%_H?#zF?>je+f<}_T>48ih)!?|Q18DR+zl9kT*3-OA=>IVoLx=|3Y0=xa<7H$mRtsxBjCLEaVjXqIphr}E7xOKr`N5w^LE%a0MD}J z;=-pk%HmXg`!zncn-28#--s%kI;IUf9tO4Js55tU{n}>Gws~MJFRFh z|822Q{ly)s?tQ2Ce`2h2+A3w_?N1&wx#`v&R=q-N+IV<8cs(h=l86+2?`xRZG?Gru z8A>b=ucnJC*z$3iqU^umMzS6#l>TyI$}}zY z5T;zx<@V8{3*BXY<3(+0$Jek1N8{jiPVEZ9#~KADfw#xW0I@Pg&fLq`b2a4snc*)i z58(AUk?Hseiz<@XU+1C>e7{}f+DJ)aw+1NOd2v(fcld2vLX!T``xY&p@181}(a1L# zDY3f;`oHf=2{a47X=doVm|Yl?u<8%8S7{Ey@9nwl%CM_Cks2AIC7J3}j~3oti-ZF(ZFj|vr=ZdvU{A9N|sG^0(*^CJG^*Yr|3oR{0h*ntLJDD^Xsm`Bs`P# zGmhUovrYHDI$qS61seNv-|VT^Xfky@2(^qqJZA!y7+=WF@698&o{*=a#`{z?t=y|` z*?V(M0`tZV9sDQkHYZZ}mk+Heqmm!)8V}!`@Sb}aF0&uUvmBwi{vy-dx+9tu$Pqs^ z1SY`8YX80*!NL)M6W5ln*YI^o1uQtd(j>i>yo%1%X2~)Or2AsF)7DEe&n&#|+FzSg zA1YCX$yNCI>z8#5-_K#Yj_Eoxti%e-$QA{06no(A-}a-{2N6)*d6b7Qvq$gwLsMaS zdZG(yfgH+zC^gZbi>&#^a`qTD!kl;;F?)-yb+GQ!cM}{_g~war+Z1H?pge^krk=nySywl>yr4~(+Z1i zx7Mv`cKzsLfh@3L(86u4X$1@&Ho~V1=6b2e-OjjHianNssf{kF@|O+L_5RA?*QS=W z`rWJBiYLD~Bn2l1zSIHg47iKf-()*hg!Hvd89YZM_v0LE>+E`iNZG)-LfHHXG=p#8 zD)=zX3USx1QiqXtK}9zKBx~p;Baz7eczA{MZS+@u6#9n6ivuUFJGOfeU{>v@a_ocW zzLBl>d`0xl7wgtg9?4jCyoni;0pm=ThgH)Rg^x=m2cyD|Hk@H~tK0mc0nK`K*nCX3 zzj4Im@6tVNls39zi&4=^_J5R{M-!#o@D1&e_6h9E8<}?phnvBckEv3*U4+?K;W8`N zK-T|yI`+uVo58lxny{et^?7lgbg}~1XD=l!fuFGYP6b26Ko>qC!3fUh_nG1esX(uS z9&KEw5oVld(yc2;sbPl+FsfnM; zSc0UtIYfTfZCSivl)t=I=L%6DaZvTS)IsN{=%X$4Np)~P$0kw4JL5i};GtDVs#=F% z;-HFP`Rjt?AN7YScgZvjW?zb$XP!K8y^3(vdCL?+J0-VfTA^KEz~r-ADeh8^y|{Ok zA}|xM?nJ}F7Bq7eho5%6F3?pu1?NHPfy>yUEk0qbBxw}%w~l#0J$92_DMSW$CA?+V zydEc;;n$?%Om;VW^x!Y(wn#bQ7g+KV&hE;Q-o_CbRQd9>H||yDO7B@vJj#7Tj!EPH zYVA9tnhLshPYeV^s)gPWrI(1J6hj9A0Vx84gcd+WP>NI`5Gf)^Z%S9X3Pc2y62L-L znxJ$LkluSqawpz*z3bj}|9n60kF1qsot&AoGkedopV@^eYLfp#5bwz`#+d8~c4@#~ z!M1kDHY#3x*0*^1&%+z_0{Zmr1ew2ksF!-7oOv4=1DGG3J^8dWVRbs3#^?gW-vQ|H zMe3Xiz`Qm58X?+9rk>UzTNa6>u8`33d57fQlqPL^#I1}Tm!xREur+tp$o2@-sS`3E z;pJ*mG&3#s6>sEu&16;5539L1O=zf~Tf-N=~bHN$S!fR$sd{PF8?a_BC{QGSN@4WO+|t55Uh@?Nj2pO~cyH?8cd$d)kzK~Xtqa#|iZf(wmTvG12xMNppwjzbdg=hhNY;MIG^I)!hLjFc)Wwg zfO>K~ukGH^W$xV=lClf~XB0=cKCw1ru-wdPa){awbH2h=UlARN`9T*h5j;2X$} z0RVlfs_P0Nd%@RkzOV%OPrEmLzwW8}3hA)M>zpN2%O=v_co7&fn~dYzcK^e=Fww#s zNk5}>;tB(QCF%MJ`Pi@bwdS0S^Ti*~-1P}r5W{g`i@IrB3k~~C5{`yb8662>L&Mp9 z3p5Q9fzMB~EO%WClG5ndRopp{K5cnWNE*L@nS;vD;+DFN5JZ64XLiWo)*1GHaJ3^6 zfu5+-QfgLCw|3f?IJsabY9Z0Jxa@&uSavX6O-SUP3~O9kw-ljB!v%j*Xz1ND?>v8w zy7~ssb5A8sH4yCtFWt)xb#gK-#NY*IX4S)wMvm3@kT7|*B)w&FvP{@E`ewFZF4B@-lk;ss-y(fX95?@{T1-$+r6)D}{y8<5pK*yFR(My1KM} zb;Nmmn_Trtq>3!v0U2K(`0kevTjLXEXsk-+hgTu#FK3;HGTg+SII5z4pB2_KIHBT% zJ5OtWQo3?CP-LD=onbDL+)Wm@q}G~)C0i|t(cfU=2jGf*A34tW{$|LW1+1yflqZ@I zN^~dM&{AzfC7UY637UIczes%Ox@GB!t4n0{TqEt`Ql@8M`;PKHv^tkEZEiDn^br|p z&>02`lQI$KsT%)F2IVUREU&HK`l`R2w1N7X(pGG+_I_!!W_j2)^3Cd>6R%18zeY)z zs%qoz0lqs(Y<)@aZA7^~adw`}R_funcKo^VNUG?L@5B-uy zADUQd10nUW0^dv-fOWy!CSAXkd(tGg)<*iRSIeqKN^a7Bi>_UB#sOy)1^D-cdKL(FPsw8RR^!28y4gHF;j`aYFuGpV0 zJYxJnUHIQ|lT88NHq*f&8sH_`IkI>FM;*;3bgkunquE8~#T55swiXrJekz>m5;T>3 zgfK03xu!g!a#I(fcD$jVutGAg4lJ$1ACmLTLq0O@%}*_ieW|xS;*VNUK6Zl@VUB4L zVm6Z%o_AVqX~LMj_~S9B(pK+W#g1iW$KJDTW=8TOpn3jIQAw2f6;p?*3t_wOYDwN5 zU1p5^bKR(IGIjDR5pcvbQ)+Eya>FKCG2wPWpr!QpCzc5XIJ!Y6wVj)%L5&Yj309LV znlCH z(Mz^&kTU&?7NBj;1`#+0ABlvfAl@^#&#B3{MF9e%b$iq_9_`}i*wHTu4%*4Nwd8(D zLia|JVCsKRmQu&$hdxVCorxm>*w}dlkJb7IGRX)+E|=>@VYPe$k?$8_?OM7W!icP zLK=|T*ZNaboXIHhKaZHAPDpZYma8)*~o0~>FI&hJ_03Yu=lG! zC2{f$yDNTypiB3Ms2q=&OW4Qi;wCS2y}#2}kYGdG3c|wk?0*Lh3xt0|glavd6M|-j z0na4e0(wAoc7fX%pF5SXf{)W-7axJQb2{dz|>H-OKwo~h=)>AJ{mB~LzUq6uZ za5;U0B5&dMK@MgL?ko2eg(kaUfsnQ>j-daTayBaEtsdEi@}sojSh0Pv>7>xqj!XTK zE$2^7{(;Kx^qup(tBWxB7F#cYY}*ZN3nE?O4Sp(l`_t*HV31Xiov)WF=0~a@`BrCr zNj?gRU2-QWm7L_C>3DLbzo!^Jda$cTGxu|UGPZ=#!pzx9M64qW9;n1CAG|jeWH-~m zg&+(?m7PfcJ;QCIm{}Zo*yJq1hRjAKt;!LP$32H75|2y{vt4IF9mBs&!F3ih--X)i;c^=Z}paMY57WI+n z?7p=Bg`b`LX=mVh?a)6n_r^pe2pP0Sfr{`j{)qFmW7VcFzw@B`ifD#tP7WRuKPDHW!he4 zN~i5^RPzheKKp9QTRox&=RVSfA_ormfGmF~M~Zo%%a+eJ2;n`}5;zO8It{YeYU2gz zru_CsUG5_{xQeuiS&OPw7txx3_> zMa0w~UgIG#8Fvl<@76mX2FDi%^ee6{$OJ*X?kbNTKeo)`MLi0Fe!TOwgs-g#cX7temZBsdJ)Orsl0M%ne4nZ4Ll+xE(Z4Fs*&h;9ExcZ!`w>jhXC>(pPe)mEJ0`Li z(IFUchVw(P_)pT?q+ZG~%H#xFjFv1yGjsRr;NIkV>iJgI=r_%$rfW{>e_){>NaI7b zVAr;D?3v4HUX^w#!e#Dw{Vr62z0nF0ai>~+IEh*N7E4T%aHmDH0SylY33@KO$9TX3 z=K+1p_B@Jpb)E*B92%-G6ZUq{#`MhCi;(%59v8VE9W&A8ZL3YFz~K=1p$L!B%?eB{xw zNky`xRh0+_S%lTB%ay>3eZMC%(8mv6;mr7m7zrJt(iY#(j}Ojc+B)1i&^j!z{`GWc1|- zy!p7J8#U?Poz_?ro_y%W4%SD?*~q=V(NPA9#on_B^DzHBVH>+qJ-Xl#jcfF*8eKp> zlJ@)Y8;^N5L)OH7qd{#~VLDiaZQ_9jMT3WRynftY^xV@l<kgbEq(W5vD(Qc!+h+ z-T}naAnxIcMQ*|jTd3{6Usg{Q7!=6mx~4w|z#Ux!Bb_rj9 zaj+fJBf{E262%`=K41Nvo9xy^r~Z%6XZF7Q%m?i}Kx%Yn4Qqq?doKQ?-P%+oXV8<8 zR#s*0Z34=PZ*Mt!{r(5n$xGev{-e8uishTBA%_n^?R_0|NZ3Rr)z}3z>lWbZ;FCz_!P%_m3vLta5)bM10n@PmGdncg)izKOz4HTLy02>y)CL zJp9S(+6(k@7t&fcK6~*n@S$`bJVAXmLb>|HIi8HvgjSf zcEZNxDh1<1f3$3BBu8{rSw{z^_ZeH361=GLJdtKJuTGI($JI}mVjt3gozk@GxTxwL z563d02(xy%9#BG`Va(N<69hJDxBUrxzZ%W!DLVx`N!!Rz_hU-uflS$|(Rs0gY<;4( zpagwx+lEdZI<)*%-^9eO9iGn|Mu5#zHhvoHo#UcO*mzlW&AF`o%x37g;WV-AZ`B|BBCU-XqgMOA?5R){-oz? z4Rh`2?t!Rdi_38Y4D3bedaYGJxQj2i1z3s;q8@ zMBuE*%DI^a zOyc&ZpWgF6pto9Y{+x&jpmyPth8pa|gv9~h;)8ncigcX`<%wai0I zELETY&hw2ATv$y`V8{VSY;vt$45Y!@rbE4;7Z1vnIUS7w;g)MjeqyMq4!=FVXO#@I zM|&(*$(f%4x>O!a4w~`UT^(m~v#dC-#+o+_!mo^E*q>NPARuOQ1=>$-#%74ojkgdFN-ZV0>3MaJkrghpucB{eLy=@O#Uj)&ggx&! z@9AgpJn`>yB{f2T3oI)ac;xs!y{)QK`;G{lYRj9?X&hJB=@pg}h4rsWcS-TZ3!vEQ zq)a)`CEJF~N=GDX{LZMyF-6;2B{{9Sy6e=c`e!t%f^kHpTR&0LoQ@dbFP@2@m|*;3 zZLuIgoUJLPR+lI_aglkp@VT|2`8Tg#!S}wmE&T^^w)zW+zou7+e+Ztm*a=WfgzfL!z|rm3o_ z*0q7RG2N2nuN)B^5ZDXrQ;-ux^d~QHoMThdkZ?evdp*ZLM}ap6wPht^aqfrrBYyv1 zcr$d*mFPM!G;}wJmyYdcXai18R&H(oSLsE&H(b z9@CKmgBo!GW$d3{vf-5jc0>}(C{Bbn@s%s|_@Kq#s2KQIXYN4^0GfACh4$Hr(X)*0 zP0oNy%#&w^s0is0&OBR+_S*-&PN;*{ z)WgHWZO0oP8&3~+fZXO?IMlc?(;>NG#?br-o>N`T_Al!i0eLKDZ)Fdl$^w$g^vKY> zvq}o-xZmlE)QGtByF)%gi+j3rCyjHAU4lN0Q&9Q+p~~Y`t3zKMIaC3j)qSK-j+;Ru zHy%r?k@7U3*@8-^mgDvNe_xhQRa)-{IV}%;cre|{!VUxk8Zd08w~VW+s~e%wOdTnb zI3exlI`K?#L4A)np;+!K_E)qKE_7sM3v)B&(kkN70-WT5h{qJrsAwr^e4nR+?}3RFGQc%ovi$iQydG_xjQ9OD)uLCk6k4B8`EmYV1+{jCT>)g zs9psOweRM4`AJY`${1mr6uYLy?0!@f7mHsH@^j?Uc!Z1Cjj~g2ErFL|Rdc{o{+%eq zPtDFOKCk~gf4<*4=hVNj9I|Pi2vhgBDQQ^;$|MJeP)VX{av9xbefy<1(cX2)4;owt%=ifPnEQC zI=*)VbSwNJ8&c8E=BhumwtMe^#yo!Q8Jo1ix4gLt5dNk+O$q;eMOwBFay$O=u=gSI zQ+tjr+yyvczc;&3t1p(^XMbce$F|rx_{b;Tp|a!0r{bliSb31eP^q0;H_~qKhVIzaywkUemNCgRKHlt zQhs$}1>=#*8Yj0M5+M*YUy(U5FwhqApo>>@W8Z@kpA2*@7bw|)dW^&k>Ym}@dj_BD z5X9b<%q^59BWhv%$INVs%+a#55ba{_PX!T?Q(F{g2Ow=H4%9=dk?X)oUmE$?mvGkT z?2(v+H0Jg1QQ(Qs2ton(h2QrXfpj6u-+9#baAWQ4r5 zW1uByDEoS(_BPodj@183m;C5Kx6k2{w(eV89fBEPat7WD?7tsL@W$%NQ$f8~f;%CX z7>dsc)LbuJN$%={#?ZwcJi7cj^)T`8w z)+SUTtb}@N5Per-*zFyFX$C1Tiu>-6`&fASh@Pc4;Lk5DP3F%|m z4Gj%--@Z5DXmSBo1zoXJ@$@GPi{&9Ka6{Xfone^imyAghS+-T`V_x(md+Sd!daIf}E#?JHY6w{~_?hZKYKQ#T z!AM1ykD|f!xk4Dox^!N5ozRuRZee3l(0u-ST?5V-FFDrhJ0Vmn%d)?4WsengCK#RAoIB<{t#*KL2i;l?u^1H1KcHQWw8 z;70Kqe1K~dSE0e9Y(!C+VK?veCM@W%t9z^rb`ICPp0$t9Vbg!aK^uIdbD~)~HA`$G z9u!qgH{qvL#D6tx^_PFiYgt1OM)`P!I&@edQp1P1m=dd$XyM{}o18>{gQwR4yD_ub z#YNQ+m zk`wjM3B>E@q%(p{99i?nK+Y=e?q$Mk(Ve2Sq#=qt>+9>gdwcCuv@3T*wz6Zu8CSUS zVg=s?)!{+{Ffe&aDnOWFz|Bwl#>hAA>L2QsY#iMT+zIyFw^oCoLX1Syz^8I9RjX>Z zu(^fERbDMM-W|sJ4;sjro~%Y19AtlqJ@EM)s})NR z$lTnf_fFqAL9as`h4=wJz5bN;*OIci1)Txoz%#XtoBvoaWgFlv0IaGD)>|m(8AMrx zpfQGsWzapELJY`fd1bnC;+Hum@RZ;nZdSdR`v~fVAAuQ2V2rNp0cQPeu;6`Y1C?)6 zC<1o@-t;>?f}(;#l9Z-)`lod@4q9?Z-$|qc??|JDmk3(3@j|SLQk0u%>eH=N$vTU3 zf+)=vXtI)tQ*qB~#?(|wU7toF8Wq|drrc=eEpf4A;Tkk8hnWZt z=^)1>|4iV!c63SFd7>3;@U|?zx%5F_SG~Io;Y(of$5u>1VOxgG2P&_ewbFlycEDeI zGS?lAoGhrNw}BQ_wRwu(1#o+1ATq4S+oW(}gFz8ns}7_VT?Bda0qH<;t4{Fahh@7* z!#m@D>)mo^S;lf+v-5L%!L}Icb{v8(hI-AZRg;L(<}_AiDfdby`~6dHy|a(uY|=8S z(28*tYJH}a!q#C*d#0MMvu&@aFhJVK#=HvdfU^q8&L9HSKl5T0lerP zx~1K5!sp)K4eJB5pr`TS>Ub07Z8)*I9Xa>y9USuZHxeEG{vk`8w!gHG3UBn7AO_C3 zHZLRtj~7{7BMNpJ+h@3Pz8F5mao+tiL&f4KiqI9eLVW^ZTu>X5XoVDvqhP}MxQunwm( z7w%`Gi+=pR-`J$uwXA4~vwg>XS?pngsKe0Ht?bA53z6+{$tTPX&cE>;EZXoG91#Ig zN7#ci7D+U%0SaqYV8N?0CtttD%b(eia~!PEQ2zFO!NSIF=skJol+7n+>143;g!0qn zI>KF6^ja85+K#z&$z9|fA#i9H;W{YGm!A}Jv#|&V7T$*BJ+>s`V2sr;uT%EbTQee4 zecGiK!tX*i6wl1V1dpDXV2j&bzZl>h5%sLbygVM>ZRd#2soD|Nqxj=$RKnD%r>Jt- z${eS*b*~(Sn=jnHb7f=s#JM}?eWwSiA_mWA2Oa~=XKTVkkg~D!*8Op*pt;&U2NFxs ztvu-J0ye>R)GuWn5GrR2&hZ3XZUudY7(slUj@5xro%86-+OeRY6td(7Z{-<; zs>>53kfG{a2<5mBJpTV|7+?ec|IGLQ+l|)AaM_HQ&mq#k0g!~CYnlcc@6>EV{};dy Bik|=g literal 43972 zcmbq*by!r<*Y2S~x z$KSo*{qA%BxPRQ|f#E!7&e><5z4uz{UGI7~@3b^jNv~bM20;+%!w1Sb5QHrce%T1| z!5Ig~33~{_>habya#OZ;wR~;s>}Koa2tl5yEs4TT!9o1t7 z<8#>=y^Oy;#3^-`Sp z54+4AAYStA&k%QlZ`GKXd@Fq$seL!#`4NoZOO`_cA4IKwJK#vc^_Fw&-&;ma8-ID^ zh~YIQ;?~W&X;Gyt*%@;|`Wp9?rt6=_IFejtN7VihSNuD1QH&odqdlcuMq|ZRpT;7) zB#vzRMTV}1^^kuz+>zA3jg$3$^Mf+Gmh1+8E0Y$NNI%-qjb`q$lR2d zVYS# zY%*q2)L%H`_nXNrkY{LLP{|0I*A8TLum0YOa$#R}idm-VgWJ=InkI2gvxr+&Eq;X& zW9xSAsie?D5F7MRSwYV;b*IJ0*?2r{4>`{^l)yhQF;w|0fs66sn$a0n5`@j+bII2G z9AD`c5$9e9b_s8=kEfX^(S4h2rMjsD5w87rEUCAD*WYI|= z_-aFvFo+HOGs5Ycfq>;`vTWp(_P#b)|9h@1gC#7pqlL6U$>Y&zM{rekW`rS3V4g&^~Z;pnVBhA z&s_vvUi)G5@$)OYyVssS4ONHwM@H^Hf1X8^!l8#=-M?5L)t|x3{E8w9VoT*H#f_Po zeqm$t<;$0@8{-xy1p~_>PvQZ?DPLZT32BfC2)OgBg20WeP~R? z#z7-Na^`qD*wCe`#zTn_jHU&9DeiY1Rn-qsQDm+&!HZXimX&+=^R{;0kmK_<%k#>r zyYDy3xvr5^R#myI4Ks$f5hbh9T^31EJW(D$owSZ-BUHq9;R=A-_fEsqd>{q(->1l9 zng^mQ@^0Yr%@bv&LV^xV2mRYv{o594EKcWK$lWpSc!R6(Y=|v*VZk&m zF_H79#(sN*qk*Yu)WX67<8zpC@{GrV<7~$egB!Q>X&~)#BwucxP{{P#Q};+mDU^>ZsLtNT;rss;vhgF{1K zXTn1c4_|}x52f37x65YzCG$~;cPAHpU!fJP8$oqh7a8Z^+pM}e`uO;GO25|1N~)HY zmZ&#_jfh!crv;h6Cnwp3g^xaecu-JSsOaP*xb`iD`_E-#S(_u$9ZWCx%(hcGD|5#E zgTEAKroz+&ZD1A!bSWGI%pyf?MsBA>t&FiXmP(JKC4I3TFdvgcm4-`erF#P7jFhwQ z{=ny6nf0B2QF-CzW(J=>d6Nozy3&AJ)qz~F7x`Y8GM_197HO^}^sD76q_jkG?ycc= z1{ zuB}JzIIILmnIfc!XcEMN5usZ?PPtRj)iRZct;!P2Vq&%RvYH*YeztbZjironH6iPn zJVO86j|>43+yBpjYS1n=rp1G<6h5D+!FaxJlNo*|j4VigldWsrAwEeDk2SGxlQo>z zojUIA?JcH!{v3fq`RC;3?j{|Pw=L#18A~lqW|x(b*IiXUdB}Nrxv9c0AfP@A9M9>k zl}hwbqM+(Q8Fug2y|bwX*Y)Ai{<&+*-{NISplig$+Io6cEPDtUyBAK5lZOBp-#c zTv07h=R+V68{6AmADASn6IJLX&?gHB=*0hUfcrK~B)fXGWJV}*{>`Kbl&S2?0_LdJ zei|Ek>ENKU+bV?vMZjr=)*RcS|E#Uy!@_XXdfCp_23ZV@jKcMc4AecH#tZe0YF^RG zUH#QWwJ*RKVAG3CE+NlZ4yWsErjf{v`Iy$eX zT9kI5bA3-LC#|Ea`=i1x`R{y;w7Y<%Wsp+Jq%|;84;L3|#-5uls_s*tU7AmbHSDS*um@e@N2$W3Ap4MCo4GqoB zYqu>9Ui?#XzH>O?Ykln4^9o(yopJE=Vf(?M))m1=ZS>86@cOsJit-=0ACzaQxGh}H z`b-x;sXFYota|ZnunA1_D<(p>PYvG*pxZn=+8jaP`4(JUTh7G(ZDydQ7~$RHnH z#GZfXY1$3kZykFjrmKg4hF;p)i7qyI9p#=kmz0nu3Yzs6)_IdA2WL)FY{MuB)t;g+ z{R+|jVESyFqY0qDr>93<=^wBt%fc+;%#ITF5`_pCYYGZ@a%3#`eDEuFb#-+=#>R5a zztGT#x*arriQh@;t>Nc?&7fu64(hNq+%|#PI6G5-31`npRJXG$x+Z!tB!BD_Nj;g4 ztCcE3cgY*UHkz$~YfG8xB{<16KR@r&)YSB2e*VMx(Rwg!Z+CYg<@B|mF&>)~R+&#c z!hAU4(;^hT9{x8f9X?VZNx?FD0H(ipbwrYpk#X&)wN@44` znvu7UPlu(G75fBwb1aYhY6pB4puU8F9(3+0wp@p{^$$%;B}7C--1nE(nIs(9I5{oD z=zF5W3;Ek;{ip52g9CWa0#44yBJD%9woi0a3FP>E<%foctNk)q4b$-M0=JtA=g@6f zKf0t&wqI!W8r;FSh*~`x2AS>QL0}>8;rHKO^~pV!05&^M$Sn!F^lh}ioHc550-b}s z0piL@&mycpJ5BTbF*^HR-Pn5Coyt~0g{kGEb48XGGLN>=yUz?h#m2f^IT?ig6`hzA zd8nx=k>TO)KEq`#K68N83JVQTD;CGQZn;yh?i+PVlhgQ06^lsDM1l_4< zT4T~roL{rEk%xze`Nrjc{`}D~i3I`V<)T+p$x_TYC!tLlCXD6rB@kv?To1{;F;7IU zmTp^Hob&bT^WC`y_P(`|w8-k}yId!_Iy%GaPo6xf?bEOLJ$?&esyS|bb~q&Hu#FxP zY}2zav$=XUwwP9bqI)g#<3~zN*vii4$fh>X(_`b~Bj)7f921z$!JKYxHZJ_|;I^P3 z`8j)jPE*sfNRv)xtt%h$?InqEm*ns#@*z^#f$ceE`dN)AYkpy&uh8J&ASSx;^6_y> zJ-4>z0wel0BFO7#4HFvm_4R++D?ifLrv<08UdttM;%89~jxE(F9mApqyIz0S6`QYnNSnU(L|>(EC1L+S<&Jow0go1-%K`K7lqYW)cz-h@lO+ z9(`GF-_2%@lG)A^8_eshS8qD(ziB+2QE1ejY=G8v45b{(yz`7OpXU0<%tjek)bc4( z1a)HS=HapTt-pVN=ej&c;wb#R{Y{>#nnRS>Bl~HEW7delMtX-=NYeKuN3Q|Mah?s9 zjmLL4yiFvJ*xpuBQo@NaZLk<-l%Cihw#elW-Nm?>>({405YUwiww_^gHE=y$4M=F7 zu`;)llXf$cZ91NK=29cf<_8mk_OEty9$X>)-3QtoS;yfd3_GfQ%)BfBIkOY%?h}q8 zq6R9_!1hk2ETg9dtLvJATF%!}2E~s)I`28Q$(CMno6+l+J@nRm{B4d?8+$yGWY9?q{ON%QQc9!2+Iy?9e=quYR^9N+l ze=wr;4ZI)k-ca&@KI|r@rA`y&oB!_rVIP{M^M3zzK_#DQM)4S`L8Wk43@w&>e`JkV9;lJQPJJ4OhQin z<+4BgaEfXEB%>65?@Ph&Lx_DL~lzTzTn8y_n6UvJd* zx9ZNH5qkV^OLp&U(PvLq&mpO20sOsr>y~1?A7vU#_#r1}@BY3J6*YDI%-0LnzQ|)u z3fyHH0K(Ht;mM)fJ44a$876G87*Fz!T4Rgvb&!|@vxboe74D)6P<;m$|CJ5Y?SqDw z?aYwZp(V^G<}m_)zTZ1*C?F}!x|n?ScIeqro!P?Y(cbhb%wf@;U?$44$eg35m8ZH_ zvr5OTvM%&Ef8DNzhVLwi&bct20Aq7^g>Zv#R(c}oc_{R;^w0}0imPUcAsif>2M-@E zJ0Xk?UyaE*;EfTs-2&&J0O03kJa>py;gPJRP4Qp9e#L^?)}EG1jH8wFQIxJ;Dqs_FBT0m!CTXFNWFKXx8KNA~X%?l0m#Zcy%S{Rb#u@-VQx| z`c%uzEIJ{94w!9w-;V zFIdC2;1|cNhPL~$Zw@bIlW{)2MDMkE_P2kej9X=w`4Fk*t9fGX>3(E<@>A14h~ROn zQ^Mn8h=0b{b`kb`1diT&PjG9f`rf#Y9{SaHZFFi}TpTlWvi9fCK~p=keDt-kQceMZ zZ#R-8HB(1lH?yQmW?1_s;oO>8VZj>Lx{3ylt>wZ)4{G@j+{tkZ0{vKVc@nH}_av>> zL4d$tN45WalLQVi!iK0fXr7*O!>k=|`S(xAO%LX?4>UsjeV zvj1-1HeOJ>lMSEnz~97fK2AZ@1u=%>k!dX3Foe%9jQhD1=d#J%KD-D^=c)rN(Fp z6pvZ2jkgU9zsI7Io*PT~G~8s@)Dhk0M9;kva`nLFXX|`}b*jYE5yy1tW#qs~v)0wD znPpRB%!k4Y?oLiJeBQlYyk|c1F|@z+K^`z#ji&{m2KAq$PoS+SV!>viO&e3s<9lwg)qNKpp18!ZKc`f~Lgkx7&6>`V3yQ4VA|g0K&(| zloaVSUA4inW5Fs`)PC4=0@(I10wFm~XP^M^;_CQc!o z^HvFM85{+A71{f}>09bhUu=R|vyahf3B$&qrBy9q^Zf#30JO-7IP$sQX@BK%a$LPpL^$jO03<@4c;I z!!ZZgjd!k&3W`Cfw0dePs*jSY3m*T;mBS3T;3D4M%?)SFlp$M-vy$3q;Zx&6gFv-Z zSK|Asss}5Pf}i_}ljT;n>CJp8L03S&>wd!BWs7vbdGn^Zn;Q+_HP$Nfw#{C^kfE1J z)frb7X5op?-P{^HJO@UoSG=|NZOsM|?ga_wLJ*e@4T~Bz*ex39Ll;qIRt+ zcAI(%&>Ex=hR4ZrnXwi*w;nkCkZ0z}URYz||K!kbb(7xA%}POh{sdv<8pPPg+Bg8Q z-LobOU}CRLtL5$-6*LX|9e0o6M*X|z?=8L&y|^TC9>&SXq=!yniT_^GJ0?BdQO-La z;~U9INOtsV2w5mdeDW7QjofkiHd#wRKMtoTL~o9xs~uq7s~1g%l_!kQoLBL`sHN?8}tEhuK9pgTM~9pgoY%=EC>4(Vs(X|N2(ikZX) zC?ot>`bgd=zG(mTGYg8+Ez)}hs9?_;R3fJF-9=IcQ`XCW530D}8WhE5Ei%hKp3%J` z0E~qx5N+So_@BP0K4qD9e=~cFFv$5+J;i?*O9~AtdfopZ z5DE=N>~IXTNjRzi4pw435d`Qk z!woK^y7Zoqbi4Yx$OrIC8gKD?{*TG~*&4oBk!Hz_-BR-@-OW~Wq-^}#!wc}1;x_{b zInoIyH+i;5z6GXxC|XAI;>n{Puag$ZYQOLAeN|+;&diVgdbEZAXP$Pr*y*6b@W;W` z8&lUpv{vo`hLlm3>Dargf|b2rDhaN8YeG=`2y)hpw$+@3*rxtiYp;Z^ERJ)?%Zd>` zg~O$Wo(n|trs$!gexct}$tTvWIkh#5naz+dg9YsFWruQqvK}3`C9wJ89LW5PVd0b!>nI<1{r;FR zS0^IsO*qya+VG!;t*1UtN4X=IaU8cxR8)gc^x1^ zbhcmuq}j~eqpU95)KTDa0&W-pOtlHXScdOa|MSj6!0jX?22Zd@FV0LRpJ zz4pueJ7e2l1=gGn1{!4yO^B_-ak5?=WQ~dEqp&1(2wY%z2?+^r0rEK_4_IAMmC1Yg zm_~{B;lqd1!Y_QvHsbfM8()UM>4f8ml+Q3SFiaJBKe{`2H#TCE+wlunA;YO*izXds zadCxe#WA)*^qKY-kCz6xGf2Gj2Eb$4j|Itk9}OK`Y zb8$(s>zSDes+@)YZ$y&o!2D}+l9QX80MHBdM2F1tLnFi&(0i`(q-y<5qqgbTXPS*p*lCobEv#2$U#Slq6I9Q z`2%^pxEChsSfh`m;gvd$;-7ntoyhzPn<*{bir+KV=kd}&nqwF;I zV*rD<^x%30gE>5MkUR~Hz0AY#0VRw*oz-sQT}*s-Cw29vaqjaM*$tr;{F2ryeYXhb zPh2Z^qz@W4mui1G(f-N0Ag@`DNvo%mmpNk$&~bWi{`j1x-zXtP4Du)&-jR@~T4}uo zDQFie;=1f*ynJ@+#Tu>9@qB#wt!P~i<-fN>bK0Mc?T6}lJ|U+5JlW|Gx%|Nd$2Qq{ z;+M^j(s{c)f~<-ob+LKNRzX(^n!#+#i@w2FO*tO44?yw>J?}8IdAF?m^~lU$IDZc& zbs0kTkYTV(_8k6y{16Hd1Tp``4+VUkY}-5t$L4OK1ZH^MhE=_$4N2mg`~0z?>I3{!BXr^5;OSKF;5;-dhw8`UUzrB%B8cSatuERR6{FTSA8`Qc69{X zpD{BJv}60m=H~S5*cc8Z-77;W?d|RTeQd1i6vU+Z^-?3sX4E+qAumG}R|`t18K%7w zBC!HI9!V45)E0Utqx`T!67Pk;Dma!XZ|Zb$B5Y%sOJ`aM@MQFC$ngvaQ9v9|nq_!~ zwKN5VlE{#e2Yn>*zo8$@rfLY4>dfk)pC>yqceg-?*D*bLpsBg|8Q3QRzB zgzmI`e=_zfT=PMXdpnM04S9&80{gWXq6LO`ESVH3QkH?e-K@}q4_F+%)4I0xF7qke z+lPNqbS*($$E>He`!~jQ*`#!r-n|2U3tIR2HLWA>4AKv^su=wk0X3s{z>QYee&!Q> zhQMJk!}Hes`f-#TgbQD>mq)>5Q+0x)=ih^+aIytDmd+u);=31-f(8(e!3+wEO-fPiAp9`jun2>~&M&$szo`lC&j+fhst z=!%tIk%5rCjvQaXV%hln{ib@BeZT0ivxIN^!uZLFR+4qlE-g$l3KXlir$5RVf3H|E zw-RMw`o8{-aXWw;H(;o?;QXS^bf&Xg?Z&np*9HwtY6!48-C5gmoHFvb%Xm9Kf2!*> zEOH+}JQd{Zbc2riuj1cN8&bk)Ekr-BQk9pstmNt^+sJ@miGc$vxJ{u%>NojiURv{F zM@F?AZ{kQCgcdbTgue4bZ4!~Mh-ULSxe<8kV{)kgwdAd&GiHJ0R2Rlk1eLG7+r9*+fxYv6l_7Vf08 zv;525^d+|mlu<5y#N7YvE}SNDL2PDL&D#@N&dCS zM(+(CUiuO}Jv|LUjFTqfBVGZ<<0W(KAk-%$7g=a*aKMUs9O)oMpj(8~Hd?sNz`k{&wo4do-)BgR?+Ct`L3V*_2W zUuu43e}=0~K%ZkdDKdHWT`z8c*IC?Y;XSjoduBt!bTf7AyQ!s;{EdKyGq0tM{An`K zqwkB0WqQ6c85hFadwT@*uz#f;rCP%56V~n`#NtdVi{D@Eow)|;K>7B+*aN@+ZjR;d zS5&_I!Lf-Q9+{Dvc;_>sef=ow%NM0R9lOc@r3ENBqiAtX1>asjxE*9cFaKFq4pT5c z_%XDxLGfnlcj*L3gDq3qzC!`U850cB?mL8DX1Q0+%noc6F|XiY=0FkasOHR9VuE4C zZrUhsq4&jGF{b&}6;~3xdY6Rabl!LhK7lZ#B}_G zK3~S?=HBBG(>+K*%>=I&gDlZkKyLAa*xR$G;u8fDb`2{$cV2t5u-yrAHw;<4sZB+G zgIP=p6n!qWzdC?aB4m4OD=x9)mF}PUhQ&Ps3L4nT7v5ry2R-w7{eafz=j6lzMT?Ey zU3`iiTz${Lbj_=zgOTXj(f)p|JIeV$1yFN>{`puCD`1m|QkH|aJc5mO!RF&hTAire zmCXnECkJHD&h@G*SEO79IYQbgdPtlh@rgNRm{|6wD(o1?eqhzV`}tGHZRcsP9*N@R zOkzU9pg3*9_@42k6m6yV@vEv;B3x{v7VjF7S=DG3JV@6wyq`?5wyGmE$w+)!3rXH% zhcNS4+B0lDq}Ba9zYI5lrV*++ zFD*O4V~@ykN=wP4n7)v8M@21OO^lCc<>uleU)z0s69hh=sH=bQLi9*G(WdR4Oni++ zwdQ)m8^b?j^szXfHXZxrQA+!<;QX4OFL@(0^+61u9%f>gah#h#gk(ZjOoHB^%8H#H+0c8|sm3jhOXfvn4I9D3wO-Ur-IyFsb3Z7XW0YBVRW)zx$6 zyfc*8Wq0nLVKw^CP~w-85_Q|Bt+#z&pN{v~yFT59T7UzGmH=oLh~Hmru$fvkZtJT` z%LpH|%i3;?^r-Wgb0HW6>?$VdJz5`4$@q8=+P`-a6ciL=TUKQ=nq5&r8F1O8#j;-I zd9V_*x|ly;@RYTUXPdC$sPXlmYmnHO^Nm;NRnM%eNZ~u6QroA5KK|;mqUrb?yqhSD zv+C*~l#G~|SShzfBSX%im#gq8&VyzwoPaRY_T#U|m@A2F(amIfL_c8uu2?BBxE$bR z-l9*oi@b3uC}_9Y?aw`wBxat?%vft3X5Th8 zHpXm{CyTSfFI|pm7|!O-?USb&;K;X@;c30eHot#3cB~~ zp~krkr#^8#-bXH?O_QPQlf9A?!BRLiA+GZz{3Jyj=5=@6IDO@V#6rwZ6w0du?**-# zK|RGMo}jZgl0GN=;u-2Lpp~?79Q)&~@t>tF%)3ryxYj~5Sw*%$~1q+th==+rUg&#(BTxh7}MT^>Dt9FNQK`hc^t<%5!zZ>Yz_)S+V&u28WN(U1)T4r5C$j1xrCalqt(h8Gns0*e!e|= zB@^AtA&a%cKNoMd5qp6mSKf+kBXc zii*0TYG+9yqk3od0CUx&b{z5~9AQ}N7liv4;M*`OMtzc)Z6^Bf?nxkE7N_g@qUT-G zBc{g2R&(w>tN-8}iN1H0cAmD|I`{Mhq^xQe)0%SU-PL;lR(Px*Ns`+ql0YX}-jMaC zF+)r0U!?U-!ZgI9SY#udP{OL4%}2m-_k!R1^<)WookJ0UQve+8Y~3bq`t7T#8g|ae zc+!Ot7Tw@sHQ05L)R7zB!G{>b5$}jeD2wC|o+2kHadKyFIT?ad%=k$iYT!%3Pe+*m z7lqj5WLu;htdy5IUDw#S*qU|?guSYj6^ro~n2MF>c1hjvc3N`sySfE$;y8yh5C z^p+1Z=@`Ad4{tnS#sib0N(04lhYX-;2o4Iu22e9?$pUTmPXDJgb`hy*6gao((c0G3 zlu`1es`sQt%x+@I!{hYv6>8;gA~TS=hji7%3ynD*Z;R5M~6t zvoHv#aX3Iq_}l2|)9XNB@^uzJ_XH}iIGUzWGCWCqF!Gq5v@U10FKGJ|+s@v;8#pWr zpGix4w3dOvTU8dX?uw?513Rn-;R2v$Zzlfbjpr& zI&feMSV}i4DJjuG6iw~8HA>h4j!KI?2Llt#~syfH48!P`_# zkWMwyM?nD#2zea#?(A4lyn6NO`_xo8=Cw}{&NC=0>&i}?PAdx=Ag7|OaD=2lUEa9O z-=slZ+RY7BXustMZv-W^TXmV0SKIgJ&Rg2r7EdH8VUpWeuZ?I9j=4Go_N^1&l>@J) zt*eXER3l;$I2(=cXht_7a>apm#fRV$#&_mv2OOMJ0xtKqZ+WUt0v!mblYBO1OJiO- zTy*F2P$(*Yh*(T_w$`bjs!k&ntby-ZuPv~mZqFjs)N-=2p3kf&Ej;=jwB!Z6Z9IbL zR;jPONxTuQU=F-@Z8$j?w6+o^%U1)4Oyi7p@QVA>HW|x##H|H6H%3jb#GW<0<^sZk zIQ-0rNRGqFW~E)<+V=x9_`#f|gaRXNM=AqWPQh5Xc}YOoc+f*{mYI{I>;nmz#T-mL zb5a4;@~K2Np~K-(0LU-&>r z7ETMOVDjIOy2chTrQ)#z+y*(qr&eZ;0>HthltWK#ZF#n~wsLID>qGq-YSaw#?D_ye zek7ukd$^lFL!u)wdc25;AQ2kDR9I+N!e-zUWwq!6e4}wY=S>Sk)nq=AcFB8!CVGvi z~;s^8$g^}_v-$pW*g|k=yM1;%g+`{2acu#T#>r(@H zQVPc7cQ*I}$(CzRwYIjFbY2ShnU+r!lzE~_p+R9N{J%(e3JL7+ro^t2 zfsW|WzhC!D@)taR2-FfeDIgYEK(8pJK}F!?&xA-Tjo*_e(;+H#WGpg-2Yz|d>_1R? z{pC&sX1Jxr#Uy-&rQKkJcBYHk5*$y#=L-P6lC}fFt=S0~K_W<40}o1)8+%5mP3g`Y zk#r?Gjy!OLeLD0#nYMx0{A4K>21<<^UU&M$eN^d}_dtUB+NVP;BzO46J7O&5siTgk z!G6bnxg}%Tw&>uRx6_;3mm{&1U7CYAb1OAAc`DHMAd3gc8 zvWviu^i~Av{Qlwo;m0#}P=kQo3|Jw&<6ayLgO@xa39S-L0Y&oa>gsj@#eQC2&vQ&A z;#5i3+yx^cOqyp)NlXk|F~iI8VF8}k68IwOsP(nA?B6wXnE*A5WZ<^& z&DhK)Ncp#K`GmQb<>=Aj;qa<4MSs-5xp_&)>%Mew+vmOpHXTOlI1nnPt89p^?X<5) z-!w&MWwC=uSRkYh6d97Z>VZ9szSkavXtw2N*3{4@CnvM_iHM3mU#I<~@c8i%?g37F zDpjn*BCkJWezG&&KRleXDTvXU1OXjb2Z5Q~cqeN~a3w#u=VMY5!)tzFVV9uWIv)lL zxIeD}jYl|q#rsRgm%zu+JvyA}0jV$!tZ-9d(oyi2#?qRst!TR_CqZDKDK?TLOVDk27< zhrKT>EbPbl_*Z_4Cv|lLWaHM}g$p*{m*^kq>QaCH{CPNV@Sz;a``YTd2aX<^`atLE zD8(7|p!>ctG23`Ly+qtHXshcEsY(19NKnUD!e$BnmIU7H9LhYr?)-AUO0}2mPePz3 zD9xrPo1*8&I(nk%TVMgAmQJ7n^GlBWOG@Wwg*~HI+Y9+d)M2wrF7lvPFD|1?#k@L8 zKHQ`p-@Zfn@nFhkv)3}?>tnmv%27=cM(0!zT4~#S}UaG(GyjZw4ZJQT6)JCS&m^4M-;GcYbyRDm_iIn+?y0-lt$^;) zdo>R-la^_BWj{J6TY#@|mv6lYfeL}j_-d1NjVFcRY790ks#o09juY`^+J-j)?Na0? z4Km&DKYs=ROLN^SI5Wgj8ux!GLy=Yn13Lk15>$_)_JIs6aT6CkauXxIO<%aCq$-uk zn<7*7NT!#-j3v?1&(JN{9J&5n71j^2b$%f37Hp%v*M)+=ICZJAJ}!_r}z5 zGKkb{_|qw|`yU&%$jVG`&(Sez=$@o#eA$sm!x!2`P(&A)zkEpuT+nTle!JFj3u5V{ zsj)H6Vc7eXC5Lp4@JIDGYILfs4A0AG#NJMMf6f2M>}RgrKmogGCoF>VYR=9(UFmua zwn>b`Up{FzKto?Uq=`VmLGiE9{yI}3755EY+r`}^dvQIk>ry)rMu^B`w#Xw*tIvF{ zZ9svvV(I93X9V_2OX^le=Z#FXgdo3@Ws@D>4!i#5)Wg zJ-YVu=g+t)f&f4dzO1lQX{KvdtIWDMb-$t>`NyUc9zq*+L+s?=J(KfM?>s{=J;0J_ zwd5raCD2oM(cVU}LNRv>e`;V8Ue$5890^C^#s$jL9 zmk1dMsJdwS2s$v-15nTcMeQ;W^VeoH0Gj8_MvpWI4-fC9z5QK8ApoqZBmt*wnTs^0zu&5T6-AC8ZA14@E8~va17bEd3c`?P!)MQkGe-05rB(o&{NMqhy9vlgK*h??BC)H@#>9jfA0Hnq zdaB~+Cx`Yr|JlLx+Z=2bnKXHuq}>9gYamyoSWj75-2XI^A86eNF+T`e@w~S4)5BNI zSC7;z;PJSkG5B5_sN{X+GJb}Ras(!ZB}R9Xvr{*PLM>KibtZN3fov9BrMMLI(i0AZ zXLkA)w^RM5aj~($PrVA^lTdO&R)zkRU%kpNXs0l3>D2`5GEpbL*~5s31vu1t^$e@| zjqA0}J@sJb(mNzFgC!IK_Sv`j(9H z<_t|JqZgcz*7=}h44FM7M-NjeGZuDBSO(8C_&Z3e6h_D~$9_4d^>&lOP~ki9Wkw5A zN1%{=BuTGOY57{t$gX^@V%_(lx4AKH!FwW*EOhQnSACnz6UVc-BF z-t+5FxyQ0ft=p!~(HjQ`0r%?pQZ-M6iRVYz%l)pkZKW_Wo~kx*MXv+qq{Cc2CFFdz z|NN_Uc@e*+@&XhNwL0IxHUfcp&&u^;3$wi()Urssap3alzg9*@mSrsijCq`Cr7goLpZyO}t0Tl|H*Y znW`229tF$gDgQt5mHS(R1I}K2ufUNJ4UBC3cTECOM`opiD^oUMA)Gh5AQgLc|NfFn zx60J@^e4mhgr6J|XDJBUdwcIszu;~U&eC*Hv${|UJk|kI9X#2m2<3^_-jibPpvKK~m?!Q0{I36wyogXoz<(DeWAE%V6p#M$z=ykgD3b$4KqwvrR!is& zUB-}MrmXNs2VICrQ~G(F%+j-r+FJ4WHDhA>00##Lu)ibrC)ploVE-smoJf&N;}k7S zlnJ0Jex~Uq24OEx%q8#0<{^$GGl3XZ6r~#KCtVL|C%+wZD4;V3b7nO`0zoe>KSVIF zIcE3-Ui!C*AeX-*uzq5(hCjr`Tkcd{QzwMMOk6#lABPX?rHEXh>mLTA0ajPU0nAbd zWi-6JRwY7WBe({C=-W5aWE53!R>SQJbB7{5r?@0Mae&-XNOP%7--3N`sWVeN0<>^N z==Gm^f*i0+!1kDZZ3rb-*xj~UU8v&;5otB!{ zu3gj8(h6t^BY&(Jy#C!=H!HuH#j*Zm1uB-J`|gNfGU3^5L(kku5IxB+B$2Wo+(KJE z3N8a-AME%_PG_4o>WQ8Y3bUZ79y^dXzEpk$G^24m70x{SGHlb1@y3kSOX9^WY)=aI zCw{3mk!kKwq@`0;(Za;{MfyK~s>;pWKIwEmb4xPRS)O(0w}zZodr5C{abXdblIGNC zv2?bT1k}{kVe~1N+VOM^(kVvTN`9FPUwm`zutfw^~#x|e~SEb;cyl!Um|UvqF2mbrYki4XerPLW;iZlOpf zQaOR+{VsCpginq&Fh;Q7?F+EqXEQDR3!(JMQT#$C&Ii<+E}c)#CziAu~s;BTmNA+^Ai5oJ%_XpTwEcwGYSn7rjgF7m2ckr@* z))u1{$8GoLkfL|*(u|`4h`hIgN7Vw$KC1w!Esa8el;C%@w?*(fyd0El@><1`%b}DA zRjK}?yI!=WY-PgZ=6pUvj&^pK{bIwDz8A!V8e!Vb<-S0S{bON)49Y!Km07dyE-3J< z?a=;#?&A*t=~$d~;5*y3SnEKnRokt~9nDY@WNelwt!X^sWizvg3{@k7TH)60v5Cqh z(`W#d3I*_Qa}+mr@QQ=W2NkBjPog@Eaic!8B8g_jC7pm z9K$rh#?g#t_F;;QR{E1Ga_*=r6v%!)Q6ZII4!@IRXkur18xAv;#p_+(-cde$(y9^7 zkMxz&FecQNxzp9kESI6VNw%{L!bHgYTD}I=H#tG~ZRPGJzo>e`mEI3b4nuCuK@XWi z5F_8l4qHB9-Qv&)+-xUh;g*OCOq%ZBfv+k;SmB;k+D`xyPRz^XzIE#}d<7^vvPbkd zuC%2ES%;k4M|k(<^5hkQm8@J zJ>gnXaF@h|(VeZH$RHO;%8g^yoO)s5O_$|H@Iy`PuBjjcO+K8i)#iJ z%;0n0FuvS)Y8R&Yra;Y$K+z+3J^v6DZe2cdTr@+P-W9y!R#Nk2wl#cf$x<|YAKUIbp12k8r|4dlZCeHu8`X6#Rmd&Z_B(&BTy(o`-L`o* zz(q6KQw>kTX+hb>hWp=q`0%~&LH{%dJ33duX5z*OpkECuPr>F4Hwx#&x~U;>@ZU3n z34iCu{b^-UP3A@MCei<;1-PnVoy#sJaTk^Z0@vHYo|9i(S?~O)Ws-RwB2n&rUC*24 z)@ea5*BJe?=EFo*_7PAKm*npw{@Xkhg&GaAWktBF~>NFBM#CsY)Z!edZfXE8U> zOX%4|WdLN3N&M1-|Jwm2{XRpi^R((^eKDY)o5RSMuX$AQsh zhl3!;T^6u92AeJkCpmZbDgiWkhQ-mkS53Hl(%@h>{K3=st)KLnzqzkMcMGwgNHQ|O zCCX5!_Y}QS`v%{F8dtdL<21UjnSw(hKZNhHU>CCTQtCc>>d;@yTq-k{P9{iF_mBnb z|Fz;QLQ70VM`;%QPYv$@J|L~wC-jr__u7kRTOFGm`EbCCP|5DwEgMLY!70%0wR0`l_T?l)i9-c;tU>XFy`ia8BTKYT2;lQSoIyH~Qgb=N- zd)h@KrwcwfJUX@HZ2tD~@OjnMyQ1Y$H{>$*)ui6_M`eM}1{KtzlW@O-Kr!7#4zq7v zn;n-nDCDtseI~<%M~H7($RC_$Qej_7=q+2S#;||xLd!q*%r4}@^wp2d0pje(ZZT8r zZZ0{#N%3)U@7wOn>hdT?#gSu5JRK-5>l5&l-h*qsbOKL9e*d;QI&=9YtiQ7AiDwBm z?5u5fbSQwTf9%;irEIdGH6B|K``3iq7R&5aUpcmAX0rYE1l02^j{& zV}*bUE=29|K&2Cg5|4|+%^2mLM_K)DF)k~H8Q4a~Jf7=?#Kgrvny7>1jYH_q zZjtC2G<;yO&i$#WY((q)N`H3MKL63(t?g}xMO|UM+AQ85Kvq@nvU;jO!#cY>7lB3K>G{x)u~KyP}`)ipH*ch{fRL-uxdO3$99#6f?M zmum(ofpl1eKr-QC^Y-7$0b_`cuwyZ8RVoN%0T z&OUqZ^{lm?_3YHv{{0|JpWUe^zioI-K{d{>9(h471%s$HJqNwn;*u4cXaDc^82KvMbQiyD*B2!(e(Jt+#?n zm7H7|^Z3S(0{Rq%^?jG>AU*i7nq!#o!_br9fP`RkQIuXx>**Y zOd8jyMJ(C#G)^1#3Y8jNAxPRGm$wLxfZ8!IQK&O@a?F%&Waz0}D4OOQI*vAO$89Y<80(tb%^~wk+NenMjBgD6aES-6Rm|QVF&P*-Wfw|W-6tjlVPfxrwk*_e_;Uu z0jjt23kw;{`rv1nLA!GBs$xL5YNhlu|Ns2^`NI+)WQe%bpqozZ3W@4V7O}eNU2^3f zE)>^C91%P`Fp%+tTK<8{_*2Y>MO8^=lG+qhylL6o-KZoG?4GDViPHo(jNb^wVh2HP zNDN4CTwQr6S0Mizs^zV=o()Vy~5HpE>90v)4Hj|>iZ6GuofZt>h`U3JScGjeK#DUbFqy-@8sf3qiW&4N9e5>BuZqxk~&_gblPW^PAQed-~Smtz(@J^;X1U_!p0^D zU{zT!P}2-C&*IPKV0U(le-GH6pnpwTgtAaj~PX|s%IZhj}^_sC;4Y~&dZZd14H z!-poJL_YdyXT56km#>Ing)%q9foh5zz86aSgBa4&yHxv+#ZPBMPniW+XFY6ebWHEx z{0BtZHIpapedKkXWUGaq|B}7`rWrAV!N8ebj+<%ZjD419~p zqphE}6~pe8ko5YpHSq1}>+FDwOUwTOhNLH2){zWT&`YAl6%>%J~S8-F)1m$KMiO1~h zTVh8)8NBP*G(4vku-w$11o);^Mt2yZwCL_KMN9!I^!so=b3gmW#h^bv>e%!(jHBr}t=puS z;%mX#ek07;hTHP!u4JMv&0~Mjh3299<8Q^h@)b;%6v{mLEd%#zD_qoWA@NcHb!FLd;44P~RS#)PP5k`F( zyYSY-k%>P|IgJ1yQTz(7lHYlK?HZLUAq8BqSM|c57(G&*_L^CzKrB0gAtX6mxS%B+ zIhk|(KjCCL5dk5V6`6Lz9nI_Llw<`a7Q)c?cs<-WQ^`xRg#8Um+UEHr0?ST&a?enJ zPxfR$egGBH|G&hXqCzlZsFod2-Qm1t{GstXLV8J>QKm?xrkpvj`)lSuwcNwZOwg8! zO08-q4nkVd$Bb*w#p!zM-VOWhW4BSt{x0lg#;;q8vCuJR_|NwT$?WgfZkU#M=w4XH zr%}~i@k1WzQ`y7Dk!-VztxJ+`$!2m+%yXEP#TefiP69eBk5z6>DFYl^cJ);)@os zzlZMhAEcF3w7tC@9~J|Q=C8`i2`}%>A=a$3XbIsi5O)3i`Lj${hCBwXr`_X~>*LgK z8sR{Lrd9#z=vp$e4*MqAZj7RmLKv=F@q;eJ6C7J-$&)m0AW|=1;;Qe4d4Wq@dey}k z0}nOXTkH@W(%RZeR?A|QPB%&gf|8UJtm4?$eDL1M5y5u-urCj|kF*$SkmXNR*2 zA7-m{2-C(=g@YDg4qH#Hv^(|}gHX#&=Vw^sPXy8k)JI%=-9C4#6ZoZzUUo;FCOC8a z=~`9h$E|rfkZ0YkphOi59Xl&1;3pt-zOHZ6$A~@JNZ@D(l);%|$>>pZ@>odM>>G24 zRCAEF{Im9;eA#83Ep0~92emm&gceUVzT5v0=WWDqF*a0hg=*(4%=q@N2RtM>5gOm; z^O^Apf2hJbg*;RQ3a4ckyExjkGo~(((U~K7abH;SSwiU~t=3f-RTa#Z?S?EL9|2 zwFB}`13@K{{e`cgMc@;zruW=FoaQp5F%S7z+AebhGkT0 zV_V3ay&1j0`muD#oSV3GXDM$Vxaz#op~Hr{F*J>=d2{TlH+Il$GW{S!3N5K*9H6pr zz@OI-H#&j2CfTT^m-5zJ8n}_dEg+Iq=eMSL#^8}{! z@j8ELV~aB!bXlvihKmy5lf0ia)a;MeBDDNatthKwq|FWzw>Xmre+-)bo{^%iap5JI zW&dp^jr*`{V?CW(_XcEPg;>}CBK?uFlBI0>w zT^*fo858L6-_OlU$N8VdbO82V4^@Ug{Pe5ZYyS5);WBJfwN9I#tzyAUMI$!o2$b8@ zSc8}(iV|Cs2r4hMPmcQ|joYJ=#R$2sF4xLiNEA@MtW)fU0kF zS@FKHHBv1-JP0V&1h!lTl1Tzq{>?8dZoTT2Fe~2ler%L~*zq0k{}V*TN-ZKsCUK*} ziD%FLMr|zGUmb&hFdz_UAs&6GJO}DLy!l9K8XBh-d=?LQ<;CXKR%t34Aid*Vraa_{ z3BhBOF#<{KySi>%kxu{-75pO95mDmNl%e_dt>_|r?Z)`eCvXnMqSSNavVMEJuMX&9 zLv?!YSLrpJJMJ1dMRtPO4|RSWxTU?25FIoN1kaKG^XK8996g7E-}?KtMrXI3XPC+# z=T+h@g#Xe-TGZ#{w4Vt`NJ#ukM8D_x-$e9+LjY{$kMsP4ZOiTT)bjn4^_=jiIHys; zs*Gd-^Qc{?4M38Tk)-4RkJ!_rXqDGDkg#j4cd9-5a6qmrSiADq&mTWntaaW2ti<92 zxF;jA^|E?R3O{nW$N(QjU+$@{iQlub{)AbxETt*s7dU;G$HMf8j_B@UTRD6C!@&4N z4NU3qB6L6BA%e$XR+amq#;K&-SlKF>vw6fi9A%~Ri6J2%@ljd`J`^J&JO2_O$;neea(y`+x~L5k;x6zW8*7ackJ!>;*e?Km^b#VJh8T7BnK2f?ox@ z2ZcTHb(6Ax>}lP41he^LE5|_G06MW9FfEQ-FIP3Gwj~vLqa=hs6k@9D>RKhpnH~s9 z6AOGbwLQD%tw&pFK8mN)@Bic?8QCxKQ!}IJr}5NW2oW5PHG>GQhmjp3?XEu|lz%_g zs|!4dTfuGLEesx>n0%r95|IB^Wyf@Sbl#EQy$j9#T6oLxpZHtarAB4_ATj#4RB}3( zb<)2wE^7Lvw@qS>{t(~&J3;M;&8P8_}C5oj81jZ4~HWt4`d_Ln68F1L@9slL5! z@Q0%IY9cbWACo_4aN-jit5-2Y=|S|y_^wz3Dx-AWWc>cu@g%>CgSY>^3(v)p$6ya_ z+pE0iu5_mWm^7`9Deq$w(GhT~-^+wJc@xCk-PWY~Z<4-j2PPWv4>&ES(H$n?0bwu@ z*H<|x@(ECWw&^=fgn<^-s{5*S@j7?{^{3u$mhb&(KF+z=G1}Z>+o@k7t~$6`lm#QQpn*` zl2Z^kN+dVVHTZi$x3&Ka3>>H5k2x!LSx}N{GUv3FHrJXp`p1xsfA#*m9t8;8rk9{h z%^n(El(a>tt4R|CWD-OEo5|mR#zg*WXIlMyIGqW#O{S`kSGMiPchA<($POz{Ki(yk z3fvX}@+YBc1TL-%DL{ToL=p)3&_{v6^S!*B0;rO8fKniS9L+-L@)?LxmpJ7eTc&Ca z{?mvAx)=XmpY1dIwc!sZ&d!0g^W&pXz!iMf@v(hKt6$1QyHEl>K>itO3eer%kV3(@ zzWsT&S)289TVoVBD0FeE{2&&kg=#2FP!Q6brI!~%mK6f9|q-fh~|09>G+WC4(K8yasOLfsQ3(E2$pV838C@QsGOop-%ocjN#X zbx7^=)190gmaiqeE}W0MeLW2>GP{HsY`WhDxwRO=L(RKR2Z`ALPHhCUJ5Zwo3T&IcN&jFKEs7;K6c07*8&3%RN>641jIh0CW3kR91Gj%xLNY zLI$=>YXj)qsQS8KIuD$Om>uAp=f=0-V)tV+N7@Kb-^Td}UCML8jpXNr>LY(tWmyFq zTM!Kp;bT*G_jkXhM1pf_KIlUwmXm=FxeuGGU|-um$F3Wim|%2vI@;~^uW``3#geWY zZWf6}{Adx8-|hSI1i!PB1LB))eaR)_P6)ouVBUzv%CxbQJ;??3>}p<3`|om#h+qP_ zz|Yocc1gJy#I_5If|)k_W=&lQpS@&@B2kMCSBP zK~&+D!qee$w1h7SLHIgD@soAPjl}0mzqGRtAig)Zubv|iY|UHo_V@R!m(DH@QFm`Y z#x(;!QOK(gRi;k^(8}XDC1$_F;Q0LS^ZCM|qoLRK2#pV3mb2 zq@vs&f?R9lO!fyGC^A=Mz#jL5`;BfY~@6M*FaLs!` z1={P~P$mpW0zxiW{d(-!@%q*D(IjAe*n@6Tel^ROXSy+~-Bem=fIVPD*WJ}2wcl4o z@J_QcE$@!G747Sa zFrH?dFB+4Gs$M(OFL?xn1mCyc3UOP#GzYZa67U|h$N$(6JgEp4;sj|JU1LkRJ;301bc8|_ z@F?WGqLRuQK$^H0HW~>-F=Q811}{IBje;3nRzWvV5#>DrBI-xLngHC~Pv_X*nq-3# zpNr>kll<;Aut0GWo7DTkAQ7`)3gm~PVSE%qs`U;G3Ty5X|}JZ8jo<2~_GyBYnS6FMx+3xaoh04!Kc& zL@;)Z{Ka3(<^x%PBkPeNJXlx7hN_a9unS_*+r-1o&EXfGo3C5OnesV!`LG(4PIh=s z1T<3ZjEueyDfNe0TxSQV8QN3O_1l=py`M%;4u)T+6D}RpAdT()% zSyMrI?|AK9ynHkF5>jc(ih;Fq|9<*eSJ)8^iS5S{FqrAwS3YsT9t_{@6I*cJ9)sd| zd~?EPKK8@GQ9?&k@p!Q34DfjPp?8Q$82zX4`L1^mlqVmS4yLUR;6z1p__xKZ;yS2Z zuiFa)o~@?KZSx=)ND-d!Irnv1h{F^p#uULXEveiPG*n)#jGVo@Bj3DEMN=D!@blqd z+E@lUK7f4&kpV=}SJQY@5Z%8X8r3-Yx5rjsel`Ea#Z4>)!NRtckCrAqgnNol)Evx@ zOgd8|eZHo9Z*S)KNzk`B-C_EIhChCJdVa1feAdAn{i3(cZRL}kB9S^6-yO4w`CP<^ zS^&L(|6-Q#;4`!d7d4@xDi%@xE>P4yI5CR*uO|nbIa9$ZiP5D8e0(Gilu{Z#zxf)0 za;1prl~aWMfJ`5Uf=r+#(q&k(bQJ{t`9rl8Nhv#@yKc};)+K7Y64y!ZLb68AOB zGVMNpD^Cy%0n)0i&nhCb0?ftgq`tHJyw%aM2NR#=lxD++`sCg(<#&rwBhJ#26JiKj zBRl5>7N8B+dpu#G{`X3?uSb7Ed{@7XQEio8S<}qQipz03qsh z8~KRM`yfCH?Av6u^LEVb5+-WIGp43h(t)8u4C)C&b|`tMw#N!$r|yAiz)ptvyAnaO zRONz74hrC&!dxk9PH5@TeL-|`29CUCfAk0wqI(q;4gMwZF(3J+yK@Mio;~}+g{9!| zRJ%FUq@qS3!r{+miClV|lz#@Z9OLpj8I%JI_Bi{iB(P}#mDVh#v{c+az8Q({{4W-F z@*actiRPP$@_Yk?us-p-awpJk@Ew7Cl>&VB-O9f0W7P5MwZ7JcNJEC-TqG=o$IbOW zsfoLpJRdP3E6TLry~JHJHD5;B?(YO-Ru^Kx_pqQJek7Qlyn9LUf(reN*qE&QUWC0+ zIY(22RSGeGvh(X7c++>y^$K5puylDwKraLol=*x|95@P zbFa!c6l3IxpiFzJ>(vx48l>{v4_n^BAMXpa+WXr4nLBmsobn3W;c|`pZp3?)YnbOG zN>R4x0cqPZsFHlTi`+5&BamIS7npG)6T=9j7j;?4jSKCry-dOLn%y;hmyf*K@YsK- zkW;i{i@bSvwEvyGPKiUG+w(Yz4fX`7lm5R^v3yUU|hQ2$S~bPE0fNcRjc%w&sQ zl(Yw!iZHnx9WQ2kiFvodt49tUHH7t*_>VRruDa+{!mCPsQw>a0JZnIHCcoo0;Gw}eZeQ{ zU?}hRrcZ^Fl%$q@fN@IiZB1dRXm==vXztH~Cn;$kZCNLuW>Pq$~f(ksBd+- zljTR7S{tylxFqzGut=y0w&ZpQdTEzzs*0SpxX+H@*&K5E&bj0OCIo`|w7nVrdT>!P z?Im`6GJx3JIcYF#>?C?7--W&shnLQvJ|JmZXLGmo;JZ?3##K@9M%cF3Sc{03rWxjk zhE5TOaM-WBwI_d`v=I=up^ah%sHo{MKe@QaAb`$td^{`lF{<}fF9gCXNPu2mE zhpyKSOtQ0&Z;D|2sqRwh+o~HwVbcn{`k$gxB)q#~m~}K6Lp(BUN{ekiQmWcB*cBEW zl)A#T4|Q%Ss}Ke?ZiVZm_vq*Zdm(ocNdi;}#wO!UJ#C7e-oC>6AU3r5m}}ax`A6)| zJqC#H!G8WL{yO9(?bNoP4WMkTVoG~r>IFZd2$&Y#o2{YrFQfjpKJdwZZ(qa-0~|DN zc6^qP<#9L{dx-_HTj?NC?ydaY|CLBC%A^b1nPsLu`qaQ=?AQI=f`X4v6RO=d21ro5 z+GRWD!80r>w7vj*?QP#g9LQhb(PL_5SRM+*YjLv{O>ur6C8XtfcGD1@+qEsJ_<|_ z?RLVo4WF3h7ScTNIMeemM&ZaI#MQlox|H%)VJ|9`~+bvLH% zB6sA9i9K*J%)T5IK~0WI-Z@B3hA8zn89ZR~|18iKV}&+4nhkFCPMJFc1AMJhHC+mF zCDxH?4eZlCB=g9O4qSF^yu$G?cE*GVk{}uyXdZ9o{6cE3|(euQfO zd$ah_HXd>P(};UzdjzqOeOL7^yKjZz2yqBxf$HD}ju0q(NFg@^4Ql_6ntyBd>%>;0 z8*$aK4UzJFZ@h$)L(hmTf4ZwVLtZa)wye zhT+7b`=Zqx?VB;f2DewQUPL`uoOjvvKS-gcI7xf0WfVKUvF$113Ex!p(Qy=@xjbS2 zwfFbqs%P}qUsu8%kiz6bZ~H|i2u3*Kmw!LnF{u$Rs8db;6uo8L=|;sSYQ*0!MOq>% zc3D`{3FhS5yaHNK>5x&!20?Y3b~>V?@Vv)>4Nv?$xbHPVgsk09F;UnCvG~}8TvS6#zhD0b4iyGARR9E=kUlP$D-Qs6%G5udVey4<_3(&;0jZJ@ZX?rXTPF^=c zMZl&4jO{mtx_+`ZG+>w)wL&F5ugD*l&k=&9C<4oJlwZ0ciUa-v+e-kqrN$PcvO@Np zT&bI*F4Xub)SOvlKOPfY4E@gw>DzPCd+W>m8*lxGs!mK zBCH2U@Dgh`%T>Rk#`eB&O&P$Ne_coLC#U!4zJ4bYUG~fNDKot?>mOnI^Zn{BN$uFl zpk0?4qHlx_z9C_liS>n1(SBQMeqbYgU3+PFcEX{&%EE+GpD}&dA*>&IBSf0^F`)s3 zZ9$%cb_Jq=<2K_zES>4*olg&=Z$#Mk@PYu6CI~8R6DAB8lJAzo1HfL0_S} z4By_i2}n*PJ9KK;|oZld>r}xv+zes27#YmMvuO&IjbRz-cd^JsMDO(!@;k zsNa1adH=u~ zvsi`~wuqE$>(KF?(?*vL1o1jtORe`jc*NY-tH^SO<(TY_bg*W!W-4f&T0-#6XAVnZ zcWTSCDU`f&q!rq!b8)3!S>M4R$Mj~tmJzCQBYZs{^ju$uOnnQ(lrWP(1{^&#V<7hR z{`PeRg9JmBF9uy5?RGx37YgaS$w&?FAKe;QN$z|8hdbS;ED9SPB%z)@~|US%$1wk5@& zf(}&aOIyhTU1|pq*U5GJvu(-}gKbcV68OBXbJgiwH7G?_?@GJQYw|ZRFoZxH;qD2c z{Tc@~qr+~`*K*DK(xvrOgpyM(l+ck|NIGLj#34-$Zn9%c-Bo>iQde?@@qGUJpGJn1 zS>eQStN^Aa2D4!HFmI8;W65fJ`G9v<3j-Sj2aT_b!}QB&&aNwVE} zz5Zh>A8>a!M}IiUf@Qie6VuWBk{Lu9MMY{#QgepiNS!st1#7-J?CT?}1eH#|5&SkC zp~#H*eh~TsMM{fv=S80171en!#v^Nu8)cS7%6o$)5mbA#&b^}!8E5kZe~?#H-fP@* zCr9>cC$&^~Y0xi1u7nUskIj2OWuG$o=l!Xe5MQ0`ZG}%dhdsBe+Jfha=E+<1_49I& z>X$h~c8lFS3lkMvmz~Iwu4wO{X$BWZ_%A4vIBIkU8Z9g;H9~7;r1VVEyS(?W$0r*a z7=F7rHB3bBtw12C;Z@<{bkTPSO|tTo>red%E;w(eSX|&j_5s-oD!U^SogKgD%7z4w zDXv!tJ&}6a4(w88vb@ZBI4qd*=lE6rA{4T58-A~L^{k55Ymb2Iw%&o-r%Cauo@><) zIoO?&)@=q4Iljx+2KKPb{hZQ+B2TO>R!Ys`zanlolzjL^2u~Z|=3ZaNrm*4ka_ z(YY_WU&y~A23?dWEyyu*T`&DsI`=j`a0>3dqtkiu{aJX#I&hPHgJCPIlNmo02ZU+C z@@=2yV-D{ggARC+UJq|pTP>7%FmtA_qlO=jSgmE;ZgIVT;r4+B0;!&h9jCf|_sZEU zP=L?&t%Nt5Zk-G3@yfgavaVbK!A~XCwt3LRPsI(-b7@0OLIx3$jRnrmbzd*}25(i^ z5HFib6Ujyp+pR^r^&wQp0f$mqyajPWvo+iI1F(JTFMk>|8c53lseTGwrAf}%1Dkq~MgnsTmWI(IW#v`|!s z^iCR|ghFoRP0UPQb!4B>Lvn8uXA$8Ml8%%_U(&D@qM#3Lu|jI$S#GE8JWNm9(`>0k0uTt*y;qf@WGtdEP?@D7U`a886%bRG5+vmeX^VaNLa!R* z5gFe<&1y4$*>!UhC-N^}zx?h+OP!tQQ^kfrGz6pr<}FuFD`wD~BO`eeUNp4w)CWev z&)OU^D5~j~P@`bY*+uGr^7eH%y4%A($_bC*y^NQ>5$*d6g$vK$hRx=(hdY%iRA zh7yOtZI87O7KdkFM}dKn`E+DtgvFF?Bld}a+iuIU(^c44dOeEGleuFzS7!}^Sfw!5Uqo4d;C!X%sK_{!0N?X zsPEr5GrD0-NFmrnS1^V7#b>j+Kar};r<^f<*yR+OZEx2I-*lAD2h z+lID8KxPH}f~QB@r5~7@<#adNeX-*Jm$|a3*`8WB0&&O1%bRUGH}N6*mV?)=6~}No z7;oa+AaoGE8{HTRLkym!k-=}6TmIu}D-y(TCl>8i_dM@6Pxw8Q_jqLXH8wB=zw3R1 z9^E+m{{dT+Tj;7l`$O&h@U6|JuUGL>5Q(`Xvhe4x!g9fRogZp%bS#A>@aN@=i8Nj44y1zT*fEvtZt^u|F*G?ZTe)@ef8qGwda zJ_W6I9e?8DVMt6j1=E|%WqyKS^jU^KZEl2$)@ZEyrH z;s@=3gBaNHKX3{V?JP`!-!DmbcdFjQGV*U8al-?Hq9HjQHC7KzNC6g~zMftAbURE1 zv6#O!#oh`O?OOSZtf1byFVOuR^s0k4*k2AEmTx2cJan*wI;K z!zRGs$Ie(H7??$R3?@PI^9rDcF|Y6CCh2id-W3%TdV&t25`Z;Ui%v4(Heviho^=eA zOi*PQ?eR=OMS(YD3s$K)vo^KY>E7)tq1UW_dQ+Y-tru_b<_)@Lk-jcEMbY`Mw8rhN z9kKU9R0@&OqNza%*%Ugq*K7FQKQvy{^dn}s-q&X3VFJ%OBCE|LRM7sm-sMoY-&8*OR zrqnL%2+Zh}85EM-C|M_OsRncYc?2Z0S!SB9?y)um`d9&Vpzp1IW!cH3@n^)hS z%4LB3C&)joyD>_o1o`27v&F%FPGsMMBj6%x#XpWW~UB*y?ST z0mVtx$GLSZ7waND>RpNv#JZf>wXL<~-w8y`Bz=Z}<5sBPG_4-6R2?4u&GZgIFG=z3 zzl1sXe);mXwD3uv4f`5%7#nB-y>Lp()3h229;}MzZ31Q(8CubGg@tVsbQ}TTWKh-d z+RN)3qhv8#{XxNeCls&;Q=80dSs6Ck1nu?4*argB^U7&G?&&%+V>4DBlC_5}+z8id zWw!slGfJ#K$h}XBY>ZR{W|-3Gz9bt~cl-&l07r)eV3ZX;9l)Y9CtE>H0?itJ56TCKaWFD$(GN~me+EU_blE!? z`J8SGF^Z%G!l(b>H#z!f4S32o_Jv+v>G#bUc*M<*%@D{*O5pwUw0(Cux6F1=Zu!gR zmp`u(aQ`3!l~7=rkuEr#l1IkdTO!5ddt~C(Hs^cF2?KAzL~(B!YJk3%t%`y9Rq^50 zR5K>qA+jfo5y7o{F1ig*5ielE9LjIq}nfUS6{NTcbzxX8P#Z3x5KVr#;4+y&XvqMw7Km9$GNcZAdVATUo z2wv8AnvA*nlpd@wZOK-vbpGLVb4fT>g=BdR8#Rw9^qKkwOWXN^agAkZ!$sOiR;N}v zYRZ0{_&R&sl$lQG+p!|AYWWT`FOL5dlEB9rdAxegvD#A%`nHXJ4MF?3`Ga&(Fk3}& zG?@;A8S7?axgyDg*87HH4ypI#h@^x--P@H!HM`5i5ak$rJ&s=2s z3ZA)u3OgX{9CkfzxW^Eoycu%qFye$`aXN(@-k39e#JL#5q;D zR^F|rRv#gVNv!(DaL5R}yhVxJ+cyDfLF-0JzLa@X*f`^^YJ}~N7M!)W8*x)7wl9!#YnW30wx6O41Nr>=Exzn6A% zh_>mFcbjuYFJ*mQZ_Bz23OV@sVd#oj;^BV%ZpwU0DlY}3fMbgbhg}yZyl~2in=Xwu zqM}x4oY3lWv-0lsh_-5bZOkkFMI`XJkd`v8-9Mveaq!(2Or{@4msO5ntpJ>8@!#U> z-r$o4<>(wcuIt9r^BfgV8}0KX)~9owV) zYDp+D6mnJPN^Nk_4SGQ z^n~I1C&&4z9Q6c{ZG|E!{)#kFAdb_uz_h`2vkohHW*e2H?^<(Avf7_2MhP-`P(%J( zFOa$etj{-Jygqqz-ZLn-x@RIvBY$GD%-$IVYo;WZi#Y}|a&m+bQg2(G-`U-42C0EN`kugGZZ z?H}FcUBaib)CNHC*Q&$>j_(6(X@g%o|4X_Q2gx^#^P#d#jtq{*#>^0MAu^32 zZeGP#k>p>!OLWf)OlVd^nSIF~C_#M1m1*QImR#H0q()u}>a)XVk8Z8tOv_H;3VhY5 zkU*Luo3{Y^_T3vRBzp9#WpGJeaP13&tYg2UX??L)CoxzqzEm47hVOSL4tMICya!Vk zH$p*F2%gQS@+RQT+CRDvVMtbdcn|9SOw!kV?3vuM!r2=h1E+?TAUJ5fN~?9{fA8^l zp2`TgT&-Wht3;VCdo%wODfgILT-lV>fmJWJj}9rtVg2ZV@dk2qIF?U;;MF+W&N4IV zU9=*Wetk_M{ZHSJBVDP*f=(D}Mnq@!g|?l0P^0Bc|uoI;PTRLYY$tNGzY6K%suGJAK_=xsOun zJgN~l1YGU63x)5l#wxN!Ch?>KE(p_4y6QWVFlyK&JxSupNEW_+TLNkHt#MU?tO$BGkDfJ zAidAnDyVt6=EPxW z(;&Ct4(gS4n($lV4c*6ugOSVaC>s^uKeZT=H(~lN-cPi{K@^l=VgQE+^f__5=;oWt z<5!vVG=4qlF#4rKVGv1i<4<-nCD-IQQ)Y{eQDlpsq+bmc?I^C-@*#qEOfLHQr2tVI zD&AN1H5!N|C83(}!M%&>9VJ}YJU%Vq7Q?bw?5*Rr!04{6>17%<*QXaI*4J&8r2*gg z_M>Jk!C>SO#r-xN$B(Z*KoFDUi6$n!jU#o#C%T$%N5+#yo0u1#WQ=}nx3GaNP`vcy zkWPs6$M`Ni0apAjTJzD}RH@{%3Qx`w@${**O~8s%Wr zx6EETl7~4$IVO`CC1zlQ&7P8dj~VdKF|)oa$d@u7!o0zVZ{C(mjHfY z?laL?Fv+X2lttpJ*n)@hu^zqs-BB#fOBD!;luT!t)#yv>-_purZ^IOKT1uGo6E|c2 z;5oEh6lr4rHCg(Ik@C<<%5zVrvoh9L;HpPYw^liUu4<>qLuHHdT8z;JA^Vd~ zL76(x{)Gnhgo!)`g1v%ToT1Y#%k~YdX<){#!0(A=o#w`&N({Bb_MJ8icw@2be_kbm z_6y^B*>Uo$VlU*AH9SIq9c!|LWNbbme;FtH)mJl*s45Hfj&fr#d`le+wVk;rOM#F7 z8@3oht>6Qa>$-EreGf4Lq?3?s#6JrQ1!s}q0T=m0t#-^rO`C3T)Hm8dEIo;15x zjxX#5tnvV^ow4lmv;Nyj{@v*GM_tYj-yDk0@jMl>FW=A9(3sh)<^sisjC#+jD)Ycd z24-zP(0NU6RWZi-^3l9=QS3Mr4=bRpgR*G#K6HUy*X3hFgQ0KdJzU5W0jVW!b^_4^ zOf1^))#xKTHkmjS7y)MEPeHN?@}<+nynJC`kjo?Xx#;fnrmIb+qCx$#*U_K>m@je6JpS_(<}Cf8@EeWV{cFW{IbU!+fxd= zKO1aq+jO)WQ$g5V>CtjU2uAX;rObR8)*3(OVNcG_pUDBM(En`x!KW8e)0R12lV?WS zV6m~d-z=IZ{;Yl6KVEY{ATP3Bw{c-MsFZX@Q7--u7l2+at^v#r!Y#{ohfB}Ex`X|~ ztYIeL+Q!y~e}6MSXG>O+?2}G<*MfX#E+tz9iKQ*+N)4$>Q`YD}+~e=-L_4|2)wP*5&EAS^K7=RXA?i&2#3g?bb-~kll>> zL_IE=|5vKsaCdvWb^UYNUu6XkMPak6MLLpQ2S0BME}X~OyH3)P3Gw%d^-cuca!e`W zw;QUW%vD1BGU=V9&(d3>&-(w|(TOKClFJk$Gk-4f1t?f9Dm8rjlvwY=!)QfHK=Ke;@4A{zesCebU%kv``WO6V$m zaBU859M_d&5_*JIU18wy47+~mW9j)nSVkL7>2$!U&+f^yAr+@INEq|xIm35xT6>1? zim*tCb9Y7T`h)B3H0a2qd8M={Z7J34bTi-oo+jISZAZtDve&%g31B9qM}kowJ%&D( zu}i(`b|4>}?gbvNHXZ*eR56V(dR}|vso7=hZJD#md$8UbSZ@{3XPVmR`jcL=#bz^T z^+bf9cSPY!CqrU`{kkNv@ksgun);Nvi0);G@0>sz)DdoX_U&tKIuWrO#bB*8j77<3 zrvBw-^nI>+Y@#MxBho!*AL1YA$0kR{@9ay^0#q9^#D2w2@DJdI$me`__4~K%h;$s9 z2&m3;OW#w$b_y2ls>}I&cy)eU?IXL&l!q85rBeMQ%kZIP-s!29`%R?HWwrAF8#Q(1 z3oG9BKY0=3bwya-PUEoIBj;`3(s;OQ;x-JGk0QBaPe&O1AYCq#IEv5ou4;vsm;}?O zkkU4GG}XD;+0;SlVb=#Y;d@s(I(4aZ>Oju~q_f!3ESJr7iw=S^US}Nj8$QC;qh;`| z?@IH5dw?em4}*#xOg#2Mp(%Pw&R@DICO?Nb=GV8`$y5t1=(Qc3reNWFF|TQvi2oFL zK_H8E6OUP6RYvFCF!Pz+_|rAz10r z*Rr2y8K5}clNGN#+Ctj@1$AEFnnB$8E0m6UY}j;P+e*X>CF&zGy-gM|uc@7ag=LKt zO_`Hy0}D7Q7?^e6nP*fklY~Cce5U6biz8cQ9AoO5`!pGysi!VUePb_S3U@m$^-;`L zy|(Zu@-@2~?oNa8FbWz1Sb+wSV)_Ju_yXAnt-AFf{^rc)*cU7ryMNTIHaahB!6FD? z-KMw=ztw@WDUPRO1F^?dTMop|P)Mwv$;Q&%YfrQqEJGs}nGRMoRXV(n4fg{`!dv5< zq{x({a-QG_kcJZEezv_uv{~XMG^V65#0w4(j>4@g^^l--n+7FaKn#{2`D3O$6DGflHEA9Wm%EpH!W_4;$d! z5D9I=UrGewEXmWuyz0D( z2p|>@w}LX&!dPLv^TiFF9Sn6b-|7`H>ub$Fv?*Kl0`YH=-44D^y%1ebAMG*n6)@q9 zsljkG7CvWe?ZbC3O?5|0nSEQgE3O-r)p4{V?F%okhrK_Gp$~7&bJD_HLpW10Ggw0i zWJESnps!WWL`)yDW9K79R1A<}5JRcTA?*)@`QHVkmwOZdbOsomef~~hA5mMz0$eP| zBA*##WPS%!l4r}1zwI_PG67CVAK(9aH>@OPF{0`@%%#rgK9GSLzu$%pE zf)*L<+=n=mj(yRqBBSs>7Wqi@grDeHW5~}@O&eQVXuhEBM9;A3g#-mlG~@ZKOQ1(eDaQ|!@HjNz6;1-c8{Hi9zMt2%tFlAHq^aW7q6D;5KVtw|C%#_>%v zB14}Wv=Rz)1}Sz%nKu$9vOMS*KAlJJHk>6k>)NXSdmIqAf)Vdcku;w|$g}vd^i5U( z-;nEOoqViq{9;y=fs_A_<;SDD@y3jgGlmXFSV13INw*Gbp&Ess=H?>@Eu0#T#Mie! zs{BR|%!KQ)km9~zAq6Xkp;zA07Ik7B?@j#87I+YqzhCs0E~@Szm@d4PKe~XAq3Ql( zscfT4KD@Hnbo`1{vM47s-w9l&EwyLNpC&S*Ch1x3N6I^k7n~NUn2aL5YW^NLo1PjN zOVZ7XhCnw~!R1DVhmFNGCpXbd61+eK&^rLE>{@{0D5R)UKT7)2Wn+ePZek)=Q8K}= z@`N2fW$A9fwu7lr>v`oL=4K@y#{Ex!nOjb(M5(2v%YQWte@@iWeW94E?<3i66gJFQx@oTck1`v>37Tfi&3pmkyDTYazSz(T1UbFyfo{ zC7v`Os$c^L=N$7B6=%7F^V6g%ij+K^I{$v>NYbu+2v(Rg3)>!#hv-b^Q5L)~oLo=S zoy13tjQ0EOx@&OdW}pM^Y5joWggR2M_2esFJ5?E>fAeB-=OssWTHG$=QUW_#sikzB z1jBl?(Uv_rfLM%@=SiSHH@}%gX#&}=ZtkXIBNqY+dA=GQyPPNj-h~l$x`fggZ}Ol^ zndgEDRizEOUs>%o`K<>?JWUs3u%zzc9otQEJ$P#_@k-!R>j*L|1zO7eH%~Xr@$Hpr z35zT-TkQe{$I!Q=$2d0r!@I2=uFQgr^xxI89VwF(gQIzkmwi175#0_AkHnzZk3IQ^zi-wuI6t5{uiI7kM~ic;VdWH!`gb71Ct=`BJ*H6?h_`Z9^Yng5dhfWvH+`8Ns{zk;SeAKcZ zxdj6TB5#9=p(%aBI^ZPM%l|;&AFVXdGX`B&oke(R;K|m&qxo^1mwhHI3&*uyGM=}? z;J8u?*#TvG7)_HSeJxWbCEWG{t4?(A&bx$t3rMI*I@T`F<-O{sw1dR!{EkRr5+OGU7|JUrzo}HpZUyVkLI~-Awp=mY~*IHSc!bbDndb=eeKzDJylB`6$peEN(Mw zFMGaP^58(VIqA`lZ(2dXh|J|)a)0JANqlY3d+UM`Ij3~+P>&UGUtZGo?X_j=4QnIL zpNi5DYW5Ddd@j@TuIH*lS0Bw%p-zPvm&DdOf~4h0bUJbxXt@Yb&SHD1`f}vC-kouy zXEr6O*!iWjoBJG@JBj~~Ln8%hz0u^U&}!8OQQUu}l5{01gVTSc(yd1lOPoC)Pb@k7 zx-cfo3(WAmIJ*gC{XGg9-7dC#&S+jYTg_FGci-|N-!}UROQ|UK`)QRHbS_cFK6Kao zqpu1->t6pk8E;`w=-<9L=g@6Rt$gR%wN8uOzQxxoYC3?mRE*_EcAiaOd!;UDSj=JY z2x%kV8R$P+b2jqLSH}A}5A??lM!RSiS<%Xx$CYG-WrrsxzkFEuhGx_(_|4JqfIHH) ze11)w09R6{Hn?Y01gFltW#;O03ZN~6yvaJVLRQGHZpK?HC$IJgOfCwht&Zbxkl4Fs zR8*22qh_Q-2SAa+K%?@wjiZ3tLBnxl>iQy+rI`NI2rDAIzn}Kr$I4aI7%JRix3Zik zk3ksm<&b@D{MbUBtBZP6$6d6NqV9Q?eLARLAo*mJt?62HnOrMBVi?VxDo|<6wKS9R zy4Py@>u$QtkApcEV^O;WEJnU_o=noX^oH~Xi!UXauT++i0%53nvIE9{)g}d=vNdNs z9bu9=$5@w=!>n8E3JD!=nYNf`O7hdKdgQ(S0FFMDJ0&O3FRX z<}2Am$(4tf9Z*c(29c};_*`Fv%Fu>4flY1Ke}YzP0ro;a?>pz-H-V*SO<}l%_B4C+ z_^l3jNhYnYTu5aawBmSzQ@RZnvQYHseOWqZ7sky@D8PO_dc* zlW_@VmcJFgXi>|I^djp#?!Hxs9m5F?pYmfQ2oO|%z8DY5cqrY zzmaAnd1i|1KCOe+oU$UMbHe3ikE1f4@t-iV+8-7S?ST|iWK5`xQEI2AqHiL~pIV+4 zgTwnh_w?jDQ@gI(Rc91u$9u-1FX+g%%K7zl%!(2ov7{=aKOhfYZ(TVWC&g}hU(Q`> zxJT|$WwdW+*SCT}y0oN0RQ#`K-DWM*|LLANua%a#6JkIm6q*cIK~ zkq|0^#XQ<-OUJxKvu*unLbk5~P3BNKZ2GCv=?^ju{R_r((&xfs1Ya(3WYj970`(v8 zDcErbh<@i9-m#I94Cm<;1oVgA{k6aomeWdOHc}ER9(KapkP|X4lOE-mmwwb-fBeto z1v<#KwQpDE({Ac2#Bd67JFd35Yj0qUyM}oXTV;XHx4<1Q*fLBBk`Zj+j7Xd;`bBGc z+v(Rm!XsN=d47A{B4SRf>!`##&qoO{w`@kF^$qAmMpaPJj%Mz0fuC))5p3|u%kHNVa6ZUKoKFipWc#jFTte6-a9-4&_S^KHt_#B3OOZ96p~*pb zU;C&u3Bp+&(xSS6GEBD{sd8a4FZY_OzCWR|cSBwQDRx9MtS0yUfy_Asxl-wGn%HUf zF4zf`{G`3-8|-x^Mv_Ce;TT7CW-23ZrtE6n^(JwYpxoR7S4lO8(P<0+gV@a+$AGx4 zsxDH6fl1bk2I0;B!Y{78tN5Ms)s-AhY6A>Cd~r9b$VMwJ?C%Q? zof&Huu{|`7B&p%5LR_EArdv#B2DcrmJi=a5<%)NvS?_=XP1u92IRi25ij6au$^7of zG_|=yPZgQEX~JgmAC74lCrvzdRQ#ARX&z)A{y=aHpH0H&iB#G7UHo;6h4ac;J$rNi`Gem)9lh9d@+bXYLW4#2U$c%h0rsh3rI?arsS& zF|Rw29Lp_4=V|Mb^@F5Bd)d{>EF%pf(lZFx)N26uH+pbkbOZAjle} zV!WcN30AG*BoJL+cgD~iIg`B($t{_AHYg5|o4YdEU;uYGnVtA)CP`}-_4*aO#y$4apD9np@)dc<$zq}9Z|XI8 zMPZK0XTuc&m?xcA zhyqPLp-ob zMtn2n9#H8g%LeX}KbzQm`WTF)GB_SOI!JOVm}`DcWcpSh1{jVKr@z#!6o_dm&1{)T z7F}Y0>ARGZJj+fk6dPoo_~COWcFvH161VXs=C1Y>KjgOfVWn2aVR;d!BzoBms))v7=lS zvn8CR;C34;ACdEZl-73Av{oKn9A0tAmPaBqGf-&C8#AW6-sPV33bYb@uoMri)F6Yz zn^_9Hef1tw6}q@vV-fiLLsTi<5P4I)8-|_W;!dc3DjA~V&@qs{ZxNfjV-)yi_=Sv3`jOx!kh9V%gAf`K4%tn6?)FW zp;B#JsN zwYG+Ah+6M4@o>iXeZVHg7$=nFIUU8%Yy1Y$?=5&zOn4HJP<)6o?*kGwaj1`{MLnr9D(I_{4vSS?T&VK6uf@Ina zs=ram1pf^!Wod0-HpZ)04q-NGMQ)^pd_Kg08Uf#Zhjs*)af_a%3HXg;GrCnPUR7!D z69jTWfwM>{i@J=oraB{mUz9yi_m`6xSeQ+lJ5OEe6%3}AUss_seOq9d9I+?aFfbiF za0}`9#$R2}h3Zw{f0@njP9f~TvFisUAekbnpee^^E$Sm5pg2S7)(cMF86SRY0aLR= zmglx9v<9#)ISOt~7BrD2zOARQqx*uOGT$9-6UF^cErT z@$e+w-WBGFUM$R3$;i64E6rI(b}S*K2iu5mmXan4%1E)jmY^EQ#fsU_dZ0?_HI^`K zA4L?zyM747ea+8b4t70)R*GlP#;ueG^h|lKM^`@v#t6=BqOQe-NU=y0b#C656=ptE zt}KAf-up-8E^EL_Rk=+l-0Q8Lk!F@bTWMJ-xQ(Co6@RgW=lypF%j(8N(8-m67TdeW zZ#fs}@*;SV6FIhwIY>=OXM6>jDx+6jOVpM{+ceXk$`(6NEgedgae}5^`_xSIjT9k; z;9(c6_7yvG*D0I;$lhjOEoeNrPu_qO~vnWppV&SFa5`*k$7#v%3!W^AEsG-Thv4Q``Rh(Y6Eg zwc;<2-NQqR{ZynnUF__U@a0SuyIJxN?>_NAP`%qkT0Or5sL>7|0u}=zm65Y5Wt=Py zS^s+F2!_b9T`6SlkI?NL7@6*f^8Ve_Hu6{XVv+qt{>R;?QByuB=?{=YQ8?PourBK% zojwP3qTHqw9YV8FpI9HYM4t09Q~JuL#=wgBO@&oPu}6C?vihbJFsnz~+J`-00ha%3 zo%`f{9Z+4%qTc-poxhEfUAabM^W7?J!4bE6MOA!w>m$k_eGi0TcflQJ{#;iW-H$e0 z@4LL0ooxOL{Kgh+S`H_Nq}v^fE`<$Y9+i-s#700P+0%;gvrbr@Ov+(-@t5sJnxt&J zq}Qruwd2f59v-n~;1zzIa|9|$%=TT!m9KUQOI*c7e-}$a{)kw@1cNSib>QkOkz_O}m6UJ_s+Y!Zf#mT9-xhU}J~v;onRD?aFmaViaE zMZzmDE^u#|rTXOF1eh?r0KaMw59NiHj@}dMq3)9R%kbR;166yrSR;M0=i0D|5|4?@OV*CNvx4S_8q-TC@>>XV;cIH@w%VUO6n03 z&eYEC+r9}cox1NO>}Bc68aug5_^gInYHd-WW8b<>yN!xo%4|0=S50rU%LjlivKyK4 zm+s%7_GkNu;gUMMITL8Z@yV`VmM20^^^Wm}jS!7XxmUH90?(dEz;%M5Nec=doeBJJ z)btnh|HhZZR3!a*BQirhpj*r35H3s~LBLN%k>1gq*H4DeZSzrrUSQvdO3Nwij3`iV z0|7Ffs7>f!P;6QSG!TUd*6yF;!y}QOYidD=H!ClmVM>v?v6SX9bfuQHY3|NEK;rdB zxq9SiI7N=yc>sndA8aiE@N?k8cH0?JH{ua-3m4tq>>f97dHeQDfU3Ma^&bAwb#r*R z1?kOOVh~Uv127Loa9EXOg*-tWV|30h@cj{vum*=h2vhGnBXg}={nvh!>f$K)R&X^D z3)>zO>{TzMK>Dax0(nx#bo~CIZa7>vAH>iyKHm4>^+AUqsec29*^k0NA)iY|zkD=H z!QUT}K&YS`K*1}&^`BB&IO8ags0)%M(xk2KCs&qn)G0%NECT(@Cx((NNDkyUqSiz~ zkku|-*AcD5ST2%YiL;iv4!{;0P$anA2CuqY3+Bz%G#ng+l9bBt)G|_PI07-N{^4O- zsmkql)5YALM=0>jpq_;%kcnt(3#TjWqU(yQSygTgr(=7u_6(-13beV+fh5_Q$S!Cm zOFz+QxyW2vdt?=mnCAfk6Wf5BUePN;$XfN#Dkd6;X6}M)!^Z&0_skz5fvFF{;Z$ER zB)9ezV>+wD;m~(yQ%hQ945=k0fI6;G%z;+TU*=Wz%tU!GaUR)1A>``NmXdfL z+9w+;miSogcXdUt-i~9{*49qx5+dl$TqRgE{#~(CB@`CS`P^$|La);ZNaTbGAblk2 zw$YAionuI!pp?%KHSHqfb|#nKrROSmq|H#rd`;{ES$#K^+w44lh?ugD0or~1NN2(? zW5q7CkH*Zf{aGLs{aj%BYtC&D6Z>`S8X)tRKjAZf#rUeee#9&x@c3cjV}C69^~vBG zd@56)^zZ$tz8oL|m>}10zUx3{o*&0A>h@EnRLW;@`w?qP&b%vefYyQ+>ttOX zeg2kt6Th41d&y35O!GZ*n&}}g&JT2|%;dpFktv{=!7nKc0Ft*A;BN7dLG7e(^EP)1{lmI#g{cW$9j%5B3%c1VZeh{AT;dO7 za^pAk>n5<}KoGtSh>*pb!Iw+8a}(p@TEU)GV*DcLWX|$;lHgqN+VN8Dav-jZV5Y6@ zg8Hvlp*%%3%ad9Cw;C*5=tOtWn~Ga>a=w~7Zp%x1Emuc12<0tP72Vp zPE%kyCnrY*hIS->h-;KSjTlF-BT(|$u{C=`l-&@5TATNZ8}363D)ovmLI3 z!VN4(l>`gkF&k-{#{{Mc_4Mz)c1s&W^?2LSY0TlOMdOqknX*@y2FszL^gOc1wK+|9pBXnVP+|<+wFknjb$Vc+btPw(;<(={SQz|T|1dLEMHP(GndE$>#X0zvt zstO>(0j-)i5yU0dwwpc_CrlUR;g@%d9io^1+A|}jr78K%y9Ky!>t`dMi|X+SJgRUT zg?L3pOv|IQ1_vD$LaLihN;fsTNY9-@g{*7v##cdVFOyVgAir!w4Fb^XPCvgsGB=y> zGBPr zd-&*4er@eg|EJY4IxI#Z7>nl^4xqz-z(5W4EKQu{SZCgHFCn_F*-OW5TFX^hfjx=~ zhyYV+;{~3vi@-r*E?6z6XcEzg%ba=I(si;P}9TyXXr|(?g0(<7cck%YHM>x1_#B) zf?a6R(YIb+Dm7Z$8ae53HGv-nolDRh1;+o|ukT<^9|a@rrZT^hm!|mwaF*2*8Q#H5 zI$(dpf;RAi4+@UDVP*QB<{FNl!#OgdS?Ax-2XIx#ULAT*}~5Qa44G}=b|isNhlW)0PW14;d|@Y)U+ zXJ;tyrkW0t031WK@*tQd$%C2p7dU##-SZQGHfjUDx&Hwr&J5*Y0TQ^7wzI^3l?POc zKGVm`K2Jp5rIrx!F$UiA9sLpT8qc*nd^6zC(CZ_iNzE@4Y|ETR@`ivmhMZrGP zD$WdXNP4%b+$X+o0QS|(=l%aF<^RCZK1k4~pdgTSe|!~sOWa>~W-3b*0(Yv8D7;_4VK3iV2z@J_TzVD+T1Y zbpK=8fit)$W`o0oK@J2Ow_QgcRM@Eiir;Zl+CPp3 zPo;@A95&!7%R#RAtSDz&R(21or@G>=0C*6F{PF5FPac?P6twZdFKNDonyOe-E?pS< zdtWKNjQay<&-_@deTb&hwd2E9V!`97n`>}PZ|BiPWqfl9d*s@eS1SlGmt$(xk`DG#{;2{$xhC8Ozz6DSE)l8F$H2_I7ps^-Sukj-vj*yRiZ;MWd|On>D8dDWhtJQm~(AgG1leJX0V;_u_E&beRscuRoQ@8PY=?j>fg`BsCN99`ZUdJg23 zzPj%Qk>!>pl(!HesRJYsnzmxWx{umGlA`GzA$NmD?NxOKLc>r)>i>CTc{6FPD^$A1js>;P3%%*$xDzz=8Nlcf6!7xx1@aDJ z>B-@F4DSO(CaO)h|DLcG-}BnZLpp~cebgy&;c-gJ2ECQhk7GO(Tu*uMZ1~(0q?v}G z12A&*?JN>sVO0IiOrMyX)c>Ttu}~eeskE%@0=-3yB7UK7v=-D8mF}~_WG%7f<&#fI e1^GW`KEf1XRgEV*?wdj2@4D74%?b_Mu>S&>eLt4~ From 1cc9a1decf04c1e8b9c6ec7b20e2879cb42bfbaf Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Tue, 15 Aug 2017 08:06:59 -0600 Subject: [PATCH 176/230] set xeno standard parts to be default --- .../mob/living/carbon/human/species_types/furrypeople.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index ad0cddabf1..123966c453 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -88,7 +88,7 @@ datum/species/mammal default_color = "00FF00" species_traits = list(MUTCOLORS,LIPS,DIGITIGRADE) mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur","mam_body_markings") - default_features = list("xenotail"="xeno","xenohead"="none","xenodorsal"="none","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "xeno") + default_features = list("xenotail"="xeno","xenohead"="standard","xenodorsal"="standard","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "xeno") armor = 15 heatmod = 1.5 no_equip = list(slot_head) From 313ba00dd5cb415b27522644498c8c697b4abbd8 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 15 Aug 2017 09:59:51 -0500 Subject: [PATCH 177/230] Deathsquads no longer get shielded hardsuits --- code/modules/clothing/outfits/standard.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 66b62d3a67..abdb42d5b3 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -338,7 +338,7 @@ name = "Death Commando" uniform = /obj/item/clothing/under/color/green - suit = /obj/item/clothing/suit/space/hardsuit/shielded/swat + suit = /obj/item/clothing/suit/space/hardsuit/deathsquad shoes = /obj/item/clothing/shoes/combat/swat gloves = /obj/item/clothing/gloves/combat mask = /obj/item/clothing/mask/gas/sechailer/swat From f6babfeb8a3a4b506698cd3d1f55ab79cb761ca7 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 15 Aug 2017 10:01:57 -0500 Subject: [PATCH 178/230] Makes IRC status return round id --- code/modules/server_tools/server_tools.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/server_tools/server_tools.dm b/code/modules/server_tools/server_tools.dm index d6a98ad2e5..be8c80ac24 100644 --- a/code/modules/server_tools/server_tools.dm +++ b/code/modules/server_tools/server_tools.dm @@ -73,7 +73,7 @@ GLOBAL_PROTECT(reboot_mode) if(rtod - last_irc_status < IRC_STATUS_THROTTLE) return last_irc_status = rtod - return "[GLOB.clients.len] players on [SSmapping.config.map_name], Mode: [GLOB.master_mode]; Round [SSticker.HasRoundStarted() ? (SSticker.IsRoundInProgress() ? "Active" : "Finishing") : "Starting"] -- [config.server ? config.server : "[world.internet_address]:[world.port]"]" + return "[GLOB.round_id ? "Round #[GLOB.round_id]: " : ""][GLOB.clients.len] players on [SSmapping.config.map_name], Mode: [GLOB.master_mode]; Round [SSticker.HasRoundStarted() ? (SSticker.IsRoundInProgress() ? "Active" : "Finishing") : "Starting"] -- [config.server ? config.server : "[world.internet_address]:[world.port]"]" if(SERVICE_CMD_ADMIN_MSG) return IrcPm(params[SERVICE_CMD_PARAM_TARGET], params[SERVICE_CMD_PARAM_MESSAGE], params[SERVICE_CMD_PARAM_SENDER]) From 6c3b6a261a9b69d1adfe1a7f78cd49f194d42cfa Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 15 Aug 2017 10:12:15 -0500 Subject: [PATCH 179/230] Automatic changelog generation for PR #2376 [ci skip] --- html/changelogs/AutoChangeLog-pr-2376.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2376.yml diff --git a/html/changelogs/AutoChangeLog-pr-2376.yml b/html/changelogs/AutoChangeLog-pr-2376.yml new file mode 100644 index 0000000000..1d1a2007b5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2376.yml @@ -0,0 +1,4 @@ +author: "ShizCalev" +delete-after: True +changes: + - bugfix: "The Singularity, Tesla energy ball, tears in the fabric of reality, and Narsie will no longer be frozen by freon." From 662786ba596f07e9d28d83f656856e581a8938e5 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 15 Aug 2017 10:12:30 -0500 Subject: [PATCH 180/230] Automatic changelog generation for PR #2377 [ci skip] --- html/changelogs/AutoChangeLog-pr-2377.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2377.yml diff --git a/html/changelogs/AutoChangeLog-pr-2377.yml b/html/changelogs/AutoChangeLog-pr-2377.yml new file mode 100644 index 0000000000..4996a03563 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2377.yml @@ -0,0 +1,4 @@ +author: "More Robust Than You" +delete-after: True +changes: + - bugfix: "Fixes mining hardsuit heat_protection" From 93ae8c0e44bbb2e057fdd97bd4aad941efccb3df Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Tue, 15 Aug 2017 09:21:08 -0600 Subject: [PATCH 181/230] did some number crunching in regards to armor and practiced, balanced more, still no shoes from digitgrade --- .../mob/living/carbon/human/species_types/furrypeople.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 123966c453..dc70828960 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -89,8 +89,9 @@ datum/species/mammal species_traits = list(MUTCOLORS,LIPS,DIGITIGRADE) mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur","mam_body_markings") default_features = list("xenotail"="xeno","xenohead"="standard","xenodorsal"="standard","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "xeno") - armor = 15 + armor = 20 heatmod = 1.5 + stunmod = 0.9 no_equip = list(slot_head) attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' From 7eaaa2e6473128f1a0a8265bcb90c9f0f04cebb3 Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Tue, 15 Aug 2017 09:25:51 -0600 Subject: [PATCH 182/230] lowered armor value,in search of fixing digitigradelegs --- .../mob/living/carbon/human/species_types/furrypeople.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index dc70828960..774a81b4bb 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -89,7 +89,7 @@ datum/species/mammal species_traits = list(MUTCOLORS,LIPS,DIGITIGRADE) mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur","mam_body_markings") default_features = list("xenotail"="xeno","xenohead"="standard","xenodorsal"="standard","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "xeno") - armor = 20 + armor = 15 heatmod = 1.5 stunmod = 0.9 no_equip = list(slot_head) From b65234b733f1ae947ff9c047a8f784151f9b5a96 Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Tue, 15 Aug 2017 09:33:31 -0600 Subject: [PATCH 183/230] rebalanced armor downward, removed stunmod, and made more vulnerable to heat thanks to Pierceimmune being added --- .../mob/living/carbon/human/species_types/furrypeople.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 774a81b4bb..26e4fa16fd 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -86,12 +86,11 @@ datum/species/mammal id = "xeno" say_mod = "hisses" default_color = "00FF00" - species_traits = list(MUTCOLORS,LIPS,DIGITIGRADE) + species_traits = list(MUTCOLORS,LIPS,DIGITIGRADE,PIERCEIMMUNE) mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur","mam_body_markings") default_features = list("xenotail"="xeno","xenohead"="standard","xenodorsal"="standard","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "xeno") armor = 15 - heatmod = 1.5 - stunmod = 0.9 + heatmod = 1.7 no_equip = list(slot_head) attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' From 3d83b55cf649da7743112419db7254eb291bbd78 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 15 Aug 2017 10:49:55 -0500 Subject: [PATCH 184/230] Annihilates the colons! --- code/__HELPERS/_lists.dm | 4 +-- code/__HELPERS/icons.dm | 28 ++++++++------- code/datums/mind.dm | 12 +++---- code/game/communications.dm | 2 +- code/game/machinery/overview.dm | 6 ++-- code/game/machinery/robot_fabricator.dm | 36 +++++++++---------- code/game/mecha/mecha.dm | 4 +-- code/game/objects/items/devices/scanners.dm | 2 +- .../objects/items/devices/transfer_valve.dm | 6 ++-- code/modules/admin/DB_ban/functions.dm | 16 ++++----- code/modules/admin/verbs/adminjump.dm | 4 +-- code/modules/admin/verbs/debug.dm | 24 ++++++------- code/modules/admin/verbs/diagnostics.dm | 5 +-- code/modules/assembly/bomb.dm | 3 +- code/modules/hydroponics/grown/chili.dm | 10 +++--- code/modules/mob/living/carbon/carbon.dm | 7 ++-- .../mob/living/silicon/pai/software.dm | 3 +- .../modules/ninja/suit/suit_initialisation.dm | 2 +- code/modules/paperwork/photography.dm | 5 +-- .../chemistry/reagents/food_reagents.dm | 2 +- 20 files changed, 93 insertions(+), 88 deletions(-) diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 9c64fb8b74..9646f03252 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -320,7 +320,7 @@ return r // Returns the key based on the index -#define KEYBYINDEX(L, index) (((index <= L:len) && (index > 0)) ? L[index] : null) +#define KEYBYINDEX(L, index) (((index <= length(L)) && (index > 0)) ? L[index] : null) /proc/count_by_type(list/L, type) var/i = 0 @@ -468,7 +468,7 @@ . |= key_list[key] //Picks from the list, with some safeties, and returns the "default" arg if it fails -#define DEFAULTPICK(L, default) ((islist(L) && L:len) ? pick(L) : default) +#define DEFAULTPICK(L, default) ((islist(L) && length(L)) ? pick(L) : default) #define LAZYINITLIST(L) if (!L) L = list() #define UNSETEMPTY(L) if (L && !L.len) L = null #define LAZYREMOVE(L, I) if(L) { L -= I; if(!L.len) { L = null; } } diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 04ea69a43f..ef20844c91 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -712,7 +712,8 @@ The _flatIcons list is a cache for generated icon files. if(!current) curIndex++ //Try the next layer continue - currentLayer = current:layer + var/image/I = current + currentLayer = I.layer if(currentLayer<0) // Special case for FLY_LAYER if(currentLayer <= -1000) return flat if(pSet == 0) // Underlay @@ -747,22 +748,22 @@ The _flatIcons list is a cache for generated icon files. // Dimensions of overlay being added var/{addX1;addX2;addY1;addY2} - for(var/I in layers) - - if(I:alpha == 0) + for(var/V in layers) + var/image/I = V + if(I.alpha == 0) continue if(I == copy) // 'I' is an /image based on the object being flattened. curblend = BLEND_OVERLAY - add = icon(I:icon, I:icon_state, I:dir) + add = icon(I.icon, I.icon_state, I.dir) else // 'I' is an appearance object. add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend) // Find the new dimensions of the flat icon to fit the added overlay - addX1 = min(flatX1, I:pixel_x+1) - addX2 = max(flatX2, I:pixel_x+add.Width()) - addY1 = min(flatY1, I:pixel_y+1) - addY2 = max(flatY2, I:pixel_y+add.Height()) + addX1 = min(flatX1, I.pixel_x+1) + addX2 = max(flatX2, I.pixel_x+add.Width()) + addY1 = min(flatY1, I.pixel_y+1) + addY2 = max(flatY2, I.pixel_y+add.Height()) if(addX1!=flatX1 || addX2!=flatX2 || addY1!=flatY1 || addY2!=flatY2) // Resize the flattened icon so the new icon fits @@ -771,7 +772,7 @@ The _flatIcons list is a cache for generated icon files. flatY1=addY1;flatY2=addY2 // Blend the overlay into the flattened icon - flat.Blend(add, blendMode2iconMode(curblend), I:pixel_x + 2 - flatX1, I:pixel_y + 2 - flatY1) + flat.Blend(add, blendMode2iconMode(curblend), I.pixel_x + 2 - flatX1, I.pixel_y + 2 - flatY1) if(A.color) flat.Blend(A.color, ICON_MULTIPLY) @@ -782,10 +783,11 @@ The _flatIcons list is a cache for generated icon files. /proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. - for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it. - if(I:layer>A.layer) + for(var/V in A.overlays)//For every image in overlays. var/image/I will not work, don't try it. + var/image/I = V + if(I.layer>A.layer) continue//If layer is greater than what we need, skip it. - var/icon/image_overlay = new(I:icon,I:icon_state)//Blend only works with icon objects. + var/icon/image_overlay = new(I.icon,I.icon_state)//Blend only works with icon objects. //Also, icons cannot directly set icon_state. Slower than changing variables but whatever. alpha_mask.Blend(image_overlay,ICON_OR)//OR so they are lumped together in a nice overlay. return alpha_mask//And now return the mask. diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 7017149d53..d943e417e5 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -805,11 +805,11 @@ possible_targets += possible_target.current var/mob/def_target = null - var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain, /datum/objective/maroon) - if (objective&&(objective.type in objective_list) && objective:target) - def_target = objective:target.current + var/list/objective_list = typecacheof(list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain, /datum/objective/maroon)) + if (is_type_in_typecache(objective, objective_list) && objective.target) + def_target = objective.target.current - var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets + var/mob/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets if (!new_target) return @@ -817,12 +817,12 @@ if (new_target == "Free objective") new_objective = new objective_path new_objective.owner = src - new_objective:target = null + new_objective.target = null new_objective.explanation_text = "Free objective" else new_objective = new objective_path new_objective.owner = src - new_objective:target = new_target:mind + new_objective.target = new_target.mind //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. new_objective.update_explanation_text() diff --git a/code/game/communications.dm b/code/game/communications.dm index 66bb91ef59..19c3f87460 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -292,7 +292,7 @@ GLOBAL_VAR_INIT(RADIO_MAGNETS, "9") /datum/signal/proc/debug_print() if (source) - . = "signal = {source = '[source]' ([source:x],[source:y],[source:z])\n" + . = "signal = {source = '[source]' [COORD(source)]\n" else . = "signal = {source = '[source]' ()\n" for (var/i in data) diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm index ffcb36678a..0cf97586c3 100644 --- a/code/game/machinery/overview.dm +++ b/code/game/machinery/overview.dm @@ -96,7 +96,8 @@ colour2 = rgb(255,128,0) if(ismob(AM)) - if(AM:client) + var/mob/M = AM + if(M.client) colour = rgb(255,0,0) else colour = rgb(255,128,128) @@ -242,7 +243,8 @@ colour = rgb(255,255,0) if(ismob(AM)) - if(AM:client) + var/mob/M = AM + if(M.client) colour = rgb(255,0,0) else colour = rgb(255,128,128) diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index 2183ec6448..20fd729304 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -11,31 +11,29 @@ idle_power_usage = 20 active_power_usage = 5000 -/obj/machinery/robotic_fabricator/attackby(obj/item/O, mob/user, params) +/obj/machinery/robotic_fabricator/attackby(obj/item/O, mob/living/user, params) if (istype(O, /obj/item/stack/sheet/metal)) - if (src.metal_amount < 150000) - var/count = 0 - src.add_overlay("fab-load-metal") - spawn(15) - if(O) - if(!O:amount) - return - while(metal_amount < 150000 && O:amount) - src.metal_amount += O:materials[MAT_METAL] /*O:height * O:width * O:length * 100000*/ - O:amount-- - count++ - - if (O:amount < 1) - qdel(O) - - to_chat(user, "You insert [count] metal sheet\s into \the [src].") - cut_overlay("fab-load-metal") - updateDialog() + if (metal_amount < 150000) + add_overlay("fab-load-metal") + addtimer(CALLBACK(src, .proc/FinishLoadingMetal, O, user), 15) else to_chat(user, "\The [src] is full.") else return ..() +/obj/machinery/robotic_fabricator/proc/FinishLoadingMetal(obj/item/stack/sheet/metal/M, mob/living/user) + cut_overlay("fab-load-metal") + if(QDELETED(M) || QDELETED(user)) + return + var/count = 0 + while(metal_amount < 150000 && !QDELETED(M)) + metal_amount += M.materials[MAT_METAL] + M.use(1) + count++ + + to_chat(user, "You insert [count] metal sheet\s into \the [src].") + updateDialog() + /obj/machinery/robotic_fabricator/power_change() if (powered()) stat &= ~NOPOWER diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 5564cd2c0a..5d5879206b 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -713,8 +713,8 @@ AI.remote_control = src AI.canmove = 1 //Much easier than adding AI checks! Be sure to set this back to 0 if you decide to allow an AI to leave a mech somehow. AI.can_shunt = 0 //ONE AI ENTERS. NO AI LEAVES. - to_chat(AI, "[AI.can_dominate_mechs ? "Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!" \ - : "You have been uploaded to a mech's onboard computer."]") + to_chat(AI, AI.can_dominate_mechs ? "Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!" :\ + "You have been uploaded to a mech's onboard computer.") to_chat(AI, "Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions.") if(interaction == AI_TRANS_FROM_CARD) GrantActions(AI, FALSE) //No eject/return to core action for AI uploaded by card diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 3d7e575215..ae84bd2f2c 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -147,7 +147,7 @@ MASS SPECTROMETER if (M.getCloneLoss()) to_chat(user, "\tSubject appears to have [M.getCloneLoss() > 30 ? "severe" : "minor"] cellular damage.") if (M.reagents && M.reagents.get_reagent_amount("epinephrine")) - to_chat(user, "\tBloodstream analysis located [M.reagents:get_reagent_amount("epinephrine")] units of rejuvenation chemicals.") + to_chat(user, "\tBloodstream analysis located [M.reagents.get_reagent_amount("epinephrine")] units of rejuvenation chemicals.") if (M.getBrainLoss() >= 100 || !M.getorgan(/obj/item/organ/brain)) to_chat(user, "\tSubject brain function is non-existent.") else if (M.getBrainLoss() >= 60) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index c21ff386bd..4663e2142a 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -8,7 +8,7 @@ desc = "Regulates the transfer of air between two tanks" var/obj/item/weapon/tank/tank_one var/obj/item/weapon/tank/tank_two - var/obj/item/device/attached_device + var/obj/item/device/assembly/attached_device var/mob/attacher = null var/valve_open = FALSE var/toggle = 1 @@ -99,8 +99,8 @@ toggle_valve() else if(attached_device) if(href_list["rem_device"]) - attached_device.loc = get_turf(src) - attached_device:holder = null + attached_device.forceMove(get_turf(src)) + attached_device.holder = null attached_device = null update_icon() if(href_list["device"]) diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index 23bf656b8c..e580b306b3 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -83,10 +83,10 @@ var/a_computerid var/a_ip - if(src.owner && istype(src.owner, /client)) - a_ckey = src.owner:ckey - a_computerid = src.owner:computer_id - a_ip = src.owner:address + if(istype(owner)) + a_ckey = owner.ckey + a_computerid = owner.computer_id + a_ip = owner.address if(blockselfban) if(a_ckey == ckey) @@ -309,12 +309,12 @@ to_chat(usr, "Database update failed due to multiple bans having the same ID. Contact the database admin.") return - if(!src.owner || !istype(src.owner, /client)) + if(!istype(owner)) return - var/unban_ckey = src.owner:ckey - var/unban_computerid = src.owner:computer_id - var/unban_ip = src.owner:address + var/unban_ckey = owner.ckey + var/unban_computerid = owner.computer_id + var/unban_ip = owner.address var/sql_update = "UPDATE [format_table_name("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = INET_ATON('[unban_ip]') WHERE id = [id]" var/datum/DBQuery/query_unban = SSdbcore.NewQuery(sql_update) diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 7f4dd3ebb9..ec1091bb3c 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -84,11 +84,11 @@ var/list/keys = list() for(var/mob/M in GLOB.player_list) keys += M.client - var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortKey(keys) + var/client/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortKey(keys) if(!selection) to_chat(src, "No keys found.") return - var/mob/M = selection:mob + var/mob/M = selection.mob log_admin("[key_name(usr)] jumped to [key_name(M)]") message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]") diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index c69628c625..66438d1fac 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -316,10 +316,8 @@ GLOBAL_PROTECT(AdminProcCallCount) alert("Wait until the game starts") return if(ishuman(M)) - log_admin("[key_name(src)] has alienized [M.key].") - spawn(0) - M:Alienize() - SSblackbox.add_details("admin_verb","Make Alien") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + INVOKE_ASYNC(M, /mob/living/carbon/human/proc/Alienize) + SSblackbox.add_details("admin_verb","Make Alien") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] made [key_name(M)] into an alien.") message_admins("[key_name_admin(usr)] made [key_name(M)] into an alien.") else @@ -333,10 +331,8 @@ GLOBAL_PROTECT(AdminProcCallCount) alert("Wait until the game starts") return if(ishuman(M)) - log_admin("[key_name(src)] has slimeized [M.key].") - spawn(0) - M:slimeize() - SSblackbox.add_details("admin_verb","Make Slime") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + INVOKE_ASYNC(M, /mob/living/carbon/human/proc/slimeize) + SSblackbox.add_details("admin_verb","Make Slime") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] made [key_name(M)] into a slime.") message_admins("[key_name_admin(usr)] made [key_name(M)] into a slime.") else @@ -461,12 +457,14 @@ GLOBAL_PROTECT(AdminProcCallCount) if(worn) if(istype(worn, /obj/item/device/pda)) - worn:id = id - id.loc = worn + var/obj/item/device/pda/PDA = worn + PDA.id = id + id.forceMove(PDA) else if(istype(worn, /obj/item/weapon/storage/wallet)) - worn:front_id = id - id.loc = worn - worn.update_icon() + var/obj/item/weapon/storage/wallet/W = worn + W.front_id = id + id.forceMove(W) + W.update_icon() else H.equip_to_slot(id,slot_wear_id) diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index 15b619f653..a4482154d8 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -78,8 +78,9 @@ continue output += "  [filters[filter]]: [f.len]
    " for (var/device in f) - if (isobj(device)) - output += "    [device] ([device:x],[device:y],[device:z] in area [get_area(device:loc)])
    " + if (istype(device, /atom)) + var/atom/A = device + output += "    [device] ([A.x],[A.y],[A.z] in area [get_area(device)])
    " else output += "    [device]
    " diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 2853fefcbf..f0fa90aa20 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -44,7 +44,8 @@ qdel(src) return - if((istype(W, /obj/item/weapon/weldingtool) && W:welding)) + var/obj/item/weapon/weldingtool/WT = W + if((istype(WT) && WT.welding)) if(!status) status = TRUE GLOB.bombers += "[key_name(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]" diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index 7707a4d438..66bd823a89 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -71,21 +71,21 @@ name = "ghost chili" desc = "It seems to be vibrating gently." icon_state = "ghostchilipepper" - var/mob/held_mob + var/mob/living/carbon/human/held_mob filling_color = "#F8F8FF" bitesize_mod = 4 origin_tech = "biotech=4;magnets=5" /obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili/attack_hand(mob/user) ..() - if( ismob(src.loc) ) - held_mob = src.loc + if( ismob(loc) ) + held_mob = loc START_PROCESSING(SSobj, src) /obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili/process() - if(held_mob && src.loc == held_mob) + if(held_mob && loc == held_mob) if(held_mob.is_holding(src)) - if(hasvar(held_mob,"gloves") && held_mob:gloves) + if(istype(held_mob) && held_mob.gloves) return held_mob.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT if(prob(10)) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 9179221137..8f5720164e 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -51,9 +51,10 @@ var/obj/item/item_in_hand = src.get_active_held_item() if(item_in_hand) //this segment checks if the item in your hand is twohanded. - if(istype(item_in_hand, /obj/item/weapon/twohanded)) - if(item_in_hand:wielded == 1) - to_chat(usr, "Your other hand is too busy holding the [item_in_hand.name]") + var/obj/item/weapon/twohanded/TH = item_in_hand + if(istype(TH)) + if(TH.wielded == 1) + to_chat(usr, "Your other hand is too busy holding [TH]") return var/oindex = active_hand_index active_hand_index = held_index diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 77874ad403..719b17c734 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -619,7 +619,8 @@ src.paiInterface() if(hackprogress >= 100) src.hackprogress = 0 - src.cable.machine:open() + var/obj/machinery/door/D = cable.machine + D.open() sleep(50) // Update every 5 seconds // Digital Messenger diff --git a/code/modules/ninja/suit/suit_initialisation.dm b/code/modules/ninja/suit/suit_initialisation.dm index b723ade381..5fb3fe8a62 100644 --- a/code/modules/ninja/suit/suit_initialisation.dm +++ b/code/modules/ninja/suit/suit_initialisation.dm @@ -70,7 +70,7 @@ addtimer(CALLBACK(src, .proc/deinitialize_three, delay, U), delay) /obj/item/clothing/suit/space/space_ninja/proc/deinitialize_three(delay, mob/living/carbon/human/U) - to_chat(U, "Logging off, [U:real_name]. Shutting down SpiderOS.") + to_chat(U, "Logging off, [U.real_name]. Shutting down SpiderOS.") addtimer(CALLBACK(src, .proc/deinitialize_four, delay, U), delay) /obj/item/clothing/suit/space/space_ninja/proc/deinitialize_four(delay, mob/living/carbon/human/U) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index b1896f930a..4755f3d64a 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -222,8 +222,9 @@ var/offX = 32 * (A.x - center.x) + A.pixel_x + 33 var/offY = 32 * (A.y - center.y) + A.pixel_y + 33 if(ismovableatom(A)) - offX += A:step_x - offY += A:step_y + var/atom/movable/AM = A + offX += AM.step_x + offY += AM.step_y res.Blend(img, blendMode2iconMode(A.blend_mode), offX, offY) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 1fae98e2f3..72001d5ca9 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -390,7 +390,7 @@ T.MakeSlippery(min_wet_time = 10, wet_time_to_add = reac_volume*2) var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T) if(hotspot) - var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) + var/datum/gas_mixture/lowertemp = T.remove_air(T.air.total_moles()) lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) lowertemp.react() T.assume_air(lowertemp) From 67cd217681b306bfc3c39748b6ecab69f4708d59 Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Tue, 15 Aug 2017 10:19:38 -0600 Subject: [PATCH 185/230] bumped heat damage after calculating armor --- .../mob/living/carbon/human/species_types/furrypeople.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 26e4fa16fd..3d494a5a05 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -90,7 +90,7 @@ datum/species/mammal mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur","mam_body_markings") default_features = list("xenotail"="xeno","xenohead"="standard","xenodorsal"="standard","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "xeno") armor = 15 - heatmod = 1.7 + heatmod = 1.9 no_equip = list(slot_head) attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' From 41c9cf3a4a5609f7c7569a7cb5056c89e1068972 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Tue, 15 Aug 2017 18:53:10 -0500 Subject: [PATCH 186/230] Update machinery.dm --- code/game/machinery/machinery.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index f5958843fc..cf51158356 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -439,7 +439,7 @@ Class Procs: /obj/machinery/proc/display_parts(mob/user) to_chat(user, "Following parts detected in the machine:") for(var/obj/item/C in component_parts) - to_chat(user, "[bicon(C)] [C.name]") + to_chat(user, "[icon2html(C, user)] [C.name]") /obj/machinery/examine(mob/user) ..() From 24be45e6fac2d8490ccc59cbc1ca749099991771 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Tue, 15 Aug 2017 18:56:57 -0500 Subject: [PATCH 187/230] Update sound.dm --- code/game/sound.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/game/sound.dm b/code/game/sound.dm index f0891eaefb..ff35915b08 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -175,7 +175,3 @@ 'sound/vore/prey/death_07.ogg','sound/vore/prey/death_08.ogg','sound/vore/prey/death_09.ogg', 'sound/vore/prey/death_10.ogg') return soundin - -/proc/playsound_global(file, repeat = 0, wait, channel, volume) - for(var/V in GLOB.clients) - V << sound(file, repeat, wait, channel, volume) From d133510288a26dcc079bb78015aa96afebc2acf9 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Tue, 15 Aug 2017 19:06:41 -0500 Subject: [PATCH 188/230] Update preferences_savefile.dm --- code/modules/client/preferences_savefile.dm | 142 ++++++++++---------- 1 file changed, 71 insertions(+), 71 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index d7cfcf92cc..244afc69f3 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -226,34 +226,34 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return 0 S.cd = "/" - S["version"] << SAVEFILE_VERSION_MAX //updates (or failing that the sanity checks) will ensure data is not invalid at load. Assume up-to-date + WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //updates (or failing that the sanity checks) will ensure data is not invalid at load. Assume up-to-date //general preferences - S["ooccolor"] << ooccolor - S["lastchangelog"] << lastchangelog - S["UI_style"] << UI_style - S["hotkeys"] << hotkeys - S["tgui_fancy"] << tgui_fancy - S["tgui_lock"] << tgui_lock - S["windowflash"] << windowflashing - S["be_special"] << be_special - S["default_slot"] << default_slot - S["toggles"] << toggles - S["chat_toggles"] << chat_toggles - S["ghost_form"] << ghost_form - S["ghost_orbit"] << ghost_orbit - S["ghost_accs"] << ghost_accs - S["ghost_others"] << ghost_others - S["preferred_map"] << preferred_map - S["ignoring"] << ignoring - S["ghost_hud"] << ghost_hud - S["inquisitive_ghost"] << inquisitive_ghost - S["uses_glasses_colour"]<< uses_glasses_colour - S["clientfps"] << clientfps - S["parallax"] << parallax - S["menuoptions"] << menuoptions - S["enable_tips"] << enable_tips - S["tip_delay"] << tip_delay + WRITE_FILE(S["ooccolor"], ooccolor) + WRITE_FILE(S["lastchangelog"], lastchangelog) + WRITE_FILE(S["UI_style"], UI_style) + WRITE_FILE(S["hotkeys"], hotkeys) + WRITE_FILE(S["tgui_fancy"], tgui_fancy) + WRITE_FILE(S["tgui_lock"], tgui_lock) + WRITE_FILE(S["windowflash"], windowflashing) + WRITE_FILE(S["be_special"], be_special) + WRITE_FILE(S["default_slot"], default_slot) + WRITE_FILE(S["toggles"], toggles) + WRITE_FILE(S["chat_toggles"], chat_toggles) + WRITE_FILE(S["ghost_form"], ghost_form) + WRITE_FILE(S["ghost_orbit"], ghost_orbit) + WRITE_FILE(S["ghost_accs"], ghost_accs) + WRITE_FILE(S["ghost_others"], ghost_others) + WRITE_FILE(S["preferred_map"], preferred_map) + WRITE_FILE(S["ignoring"], ignoring) + WRITE_FILE(S["ghost_hud"], ghost_hud) + WRITE_FILE(S["inquisitive_ghost"], inquisitive_ghost) + WRITE_FILE(S["uses_glasses_colour"], uses_glasses_colour) + WRITE_FILE(S["clientfps"], clientfps) + WRITE_FILE(S["parallax"], parallax) + WRITE_FILE(S["menuoptions"], menuoptions) + WRITE_FILE(S["enable_tips"], enable_tips) + WRITE_FILE(S["tip_delay"], tip_delay) //citadel code S["arousable"] << arousable @@ -470,53 +470,53 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["version"] << SAVEFILE_VERSION_MAX //load_character will sanitize any bad data, so assume up-to-date. //Character - S["OOC_Notes"] << metadata - S["real_name"] << real_name - S["name_is_always_random"] << be_random_name - S["body_is_always_random"] << be_random_body - S["gender"] << gender - S["age"] << age - S["hair_color"] << hair_color - S["facial_hair_color"] << facial_hair_color - S["eye_color"] << eye_color - S["skin_tone"] << skin_tone - S["hair_style_name"] << hair_style - S["facial_style_name"] << facial_hair_style - S["underwear"] << underwear - S["undershirt"] << undershirt - S["socks"] << socks - S["backbag"] << backbag - S["uplink_loc"] << uplink_spawn_loc - S["species"] << pref_species.id - S["feature_mcolor"] << features["mcolor"] - S["feature_lizard_tail"] << features["tail_lizard"] - S["feature_human_tail"] << features["tail_human"] - S["feature_lizard_snout"] << features["snout"] - S["feature_lizard_horns"] << features["horns"] - S["feature_human_ears"] << features["ears"] - S["feature_lizard_frills"] << features["frills"] - S["feature_lizard_spines"] << features["spines"] - S["feature_lizard_body_markings"] << features["body_markings"] - S["feature_lizard_legs"] << features["legs"] - S["clown_name"] << custom_names["clown"] - S["mime_name"] << custom_names["mime"] - S["ai_name"] << custom_names["ai"] - S["cyborg_name"] << custom_names["cyborg"] - S["religion_name"] << custom_names["religion"] - S["deity_name"] << custom_names["deity"] - S["prefered_security_department"] << prefered_security_department + WRITE_FILE(S["OOC_Notes"] , metadata) + WRITE_FILE(S["real_name"] , real_name) + WRITE_FILE(S["name_is_always_random"] , be_random_name) + WRITE_FILE(S["body_is_always_random"] , be_random_body) + WRITE_FILE(S["gender"] , gender) + WRITE_FILE(S["age"] , age) + WRITE_FILE(S["hair_color"] , hair_color) + WRITE_FILE(S["facial_hair_color"] , facial_hair_color) + WRITE_FILE(S["eye_color"] , eye_color) + WRITE_FILE(S["skin_tone"] , skin_tone) + WRITE_FILE(S["hair_style_name"] , hair_style) + WRITE_FILE(S["facial_style_name"] , facial_hair_style) + WRITE_FILE(S["underwear"] , underwear) + WRITE_FILE(S["undershirt"] , undershirt) + WRITE_FILE(S["socks"] , socks) + WRITE_FILE(S["backbag"] , backbag) + WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc) + WRITE_FILE(S["species"] , pref_species.id) + WRITE_FILE(S["feature_mcolor"] , features["mcolor"]) + WRITE_FILE(S["feature_lizard_tail"] , features["tail_lizard"]) + WRITE_FILE(S["feature_human_tail"] , features["tail_human"]) + WRITE_FILE(S["feature_lizard_snout"] , features["snout"]) + WRITE_FILE(S["feature_lizard_horns"] , features["horns"]) + WRITE_FILE(S["feature_human_ears"] , features["ears"]) + WRITE_FILE(S["feature_lizard_frills"] , features["frills"]) + WRITE_FILE(S["feature_lizard_spines"] , features["spines"]) + WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"]) + WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) + WRITE_FILE(S["clown_name"] , custom_names["clown"]) + WRITE_FILE(S["mime_name"] , custom_names["mime"]) + WRITE_FILE(S["ai_name"] , custom_names["ai"]) + WRITE_FILE(S["cyborg_name"] , custom_names["cyborg"]) + WRITE_FILE(S["religion_name"] , custom_names["religion"]) + WRITE_FILE(S["deity_name"] , custom_names["deity"]) + WRITE_FILE(S["prefered_security_department"] , prefered_security_department) //Jobs - S["joblessrole"] << joblessrole - S["job_civilian_high"] << job_civilian_high - S["job_civilian_med"] << job_civilian_med - S["job_civilian_low"] << job_civilian_low - S["job_medsci_high"] << job_medsci_high - S["job_medsci_med"] << job_medsci_med - S["job_medsci_low"] << job_medsci_low - S["job_engsec_high"] << job_engsec_high - S["job_engsec_med"] << job_engsec_med - S["job_engsec_low"] << job_engsec_low + WRITE_FILE(S["joblessrole"] , joblessrole) + WRITE_FILE(S["job_civilian_high"] , job_civilian_high) + WRITE_FILE(S["job_civilian_med"] , job_civilian_med) + WRITE_FILE(S["job_civilian_low"] , job_civilian_low) + WRITE_FILE(S["job_medsci_high"] , job_medsci_high) + WRITE_FILE(S["job_medsci_med"] , job_medsci_med) + WRITE_FILE(S["job_medsci_low"] , job_medsci_low) + WRITE_FILE(S["job_engsec_high"] , job_engsec_high) + WRITE_FILE(S["job_engsec_med"] , job_engsec_med) + WRITE_FILE(S["job_engsec_low"] , job_engsec_low) //Citadel S["feature_exhibitionist"] << features["exhibitionist"] From 865c56afbf452339765e000667b96bb8cd8723d6 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Tue, 15 Aug 2017 19:08:05 -0500 Subject: [PATCH 189/230] Update areas.dm --- code/game/area/areas.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 8e87ffe0c3..218cb59f41 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -439,7 +439,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) // Ambience goes down here -- make sure to list each area separately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch if(L.client && !L.client.ambience_playing && L.client.prefs.toggles & SOUND_SHIP_AMBIENCE) L.client.ambience_playing = 1 - L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = CHANNEL_BUZZ) + SEND_SOUND(L, sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = CHANNEL_BUZZ)) if(!(L.client && (L.client.prefs.toggles & SOUND_AMBIENCE))) return //General ambience check is below the ship ambience so one can play without the other From 95cfe5baa0ee5afa3a14f3824f7fb6628f17435f Mon Sep 17 00:00:00 2001 From: LetterJay Date: Tue, 15 Aug 2017 19:48:26 -0500 Subject: [PATCH 190/230] Update browserOutput.dm --- code/modules/goonchat/browserOutput.dm | 51 -------------------------- 1 file changed, 51 deletions(-) diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index ebdc7ab421..85770f618a 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -165,57 +165,6 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic log_world("\[[time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")]\] Client: [(src.owner.key ? src.owner.key : src.owner)] triggered JS error: [error]") //Global chat procs -//Converts an icon to base64. Operates by putting the icon in the iconCache savefile, -// exporting it as text, and then parsing the base64 from that. -// (This relies on byond automatically storing icons in savefiles as base64) -/proc/icon2base64(icon/icon, iconKey = "misc") - if (!isicon(icon)) - return FALSE - WRITE_FILE(GLOB.iconCache[iconKey], icon) - var/iconData = GLOB.iconCache.ExportText(iconKey) - var/list/partial = splittext(iconData, "{") - return replacetext(copytext(partial[2], 3, -5), "\n", "") - -/proc/bicon(thing) - if (!thing) - return - var/static/list/bicon_cache = list() - if (isicon(thing)) - var/icon/I = thing - var/icon_md5 = md5(I) - if (!bicon_cache[icon_md5]) // Doesn't exist yet, make it. - I = icon(I) //copy it - I.Scale(16,16) //scale it - bicon_cache[icon_md5] = icon2base64(thing) //base64 it - return "" - - // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. - var/atom/A = thing - var/key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" - - - if (!bicon_cache[key]) // Doesn't exist, make it. - var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) - I.Scale(16,16) - if (ishuman(thing)) // Shitty workaround for a BYOND issue. - var/icon/temp = I - I = icon() - I.Insert(temp, dir = SOUTH) - bicon_cache[key] = icon2base64(I, key) - - return "" - -//Costlier version of bicon() that uses getFlatIcon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs. -/proc/costly_bicon(thing) - if (!thing) - return - - if (isicon(thing)) - return bicon(thing) - - var/icon/I = getFlatIcon(thing) - return bicon(I) - /proc/to_chat(target, message) if(!target) return From 90e1bbd3e13541ace554898d595c6f4e19ddcabd Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 16 Aug 2017 01:01:06 -0500 Subject: [PATCH 191/230] Megafauna will now always show up in the orbit list --- code/__HELPERS/unsorted.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index f3d67905de..8cb34e23b5 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -289,7 +289,7 @@ Turf and target are separate in case you want to teleport some distance from a t var/list/pois = list() for(var/mob/M in mobs) if(skip_mindless && (!M.mind && !M.ckey)) - if(!isbot(M) && !istype(M, /mob/camera/)) + if(!isbot(M) && !istype(M, /mob/camera) && !ismegafauna(M)) continue if(M.client && M.client.holder && M.client.holder.fakekey) //stealthmins continue From 96acbf98534b714e39ba04665eebfabee5027bf9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 16 Aug 2017 01:11:29 -0500 Subject: [PATCH 192/230] fixes a blue tile on delta --- _maps/map_files/Deltastation/DeltaStation2.dmm | 3 --- 1 file changed, 3 deletions(-) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index b0265ad94b..72f9a75ebd 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -7457,9 +7457,6 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aqr" = ( -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 From cff50c57715a590c35069d0db833353fe6bdb392 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Wed, 16 Aug 2017 09:25:32 -0500 Subject: [PATCH 193/230] Revert "Revert "[MIRROR] The wiki button now asks what page you want to be taken to"" --- interface/interface.dm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/interface/interface.dm b/interface/interface.dm index 253738064b..64e39587ce 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -1,12 +1,14 @@ //Please use mob or src (not usr) in these procs. This way they can be called in the same fashion as procs. -/client/verb/wiki() +/client/verb/wiki(query as text | null) set name = "wiki" - set desc = "Visit the wiki." + set desc = "Type what you want to know about. This will open the wiki on your web browser. Type nothing to go to the main page." set hidden = 1 if(config.wikiurl) - if(alert("This will open the wiki in your browser. Are you sure?",,"Yes","No")=="No") - return - src << link(config.wikiurl) + if(query) + var/output = config.wikiurl + "/index.php?title=Special%3ASearch&profile=default&search=" + query + src << link(output) + else if (query != null) + src << link(config.wikiurl) else to_chat(src, "The wiki URL is not set in the server configuration.") return From dd00a614665a4d99a5b20215b42fecc96d29af11 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Wed, 16 Aug 2017 09:26:58 -0500 Subject: [PATCH 194/230] Update interface.dm --- interface/interface.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/interface.dm b/interface/interface.dm index 64e39587ce..9ee5309585 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -1,7 +1,7 @@ //Please use mob or src (not usr) in these procs. This way they can be called in the same fashion as procs. -/client/verb/wiki(query as text | null) +/client/verb/wiki(query as text) set name = "wiki" - set desc = "Type what you want to know about. This will open the wiki on your web browser. Type nothing to go to the main page." + set desc = "Type what you want to know about. This will open the wiki in your web browser. Type nothing to go to the main page." set hidden = 1 if(config.wikiurl) if(query) From b3e984af5bf19493447793e9afe364d31187564a Mon Sep 17 00:00:00 2001 From: LetterJay Date: Wed, 16 Aug 2017 09:41:55 -0500 Subject: [PATCH 195/230] Update furrypeople.dm --- .../mob/living/carbon/human/species_types/furrypeople.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 26e4fa16fd..c2ff6eebd8 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -99,7 +99,7 @@ datum/species/mammal skinned_type = /obj/item/stack/sheet/animalhide/xeno exotic_bloodtype = "L" damage_overlay_type = "xeno" - roundstart = 1 + roundstart = 0 //Praise the Omnissiah, A challange worthy of my skills - HS @@ -241,4 +241,4 @@ datum/species/guilmon attack_verb = "claw" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - roundstart = 1 \ No newline at end of file + roundstart = 1 From e06288d41abb8313a7ab45d36c47ef8d70357b1f Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Wed, 16 Aug 2017 10:31:03 -0600 Subject: [PATCH 196/230] Xenonerfs --- .../mob/living/carbon/human/species_types/furrypeople.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 3d494a5a05..68520b9ae0 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -89,8 +89,8 @@ datum/species/mammal species_traits = list(MUTCOLORS,LIPS,DIGITIGRADE,PIERCEIMMUNE) mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur","mam_body_markings") default_features = list("xenotail"="xeno","xenohead"="standard","xenodorsal"="standard","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "xeno") - armor = 15 - heatmod = 1.9 + armor = 5 + heatmod = 1.4 no_equip = list(slot_head) attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' From bd48741a45d6a0121f27257cfc02e92b776fb380 Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Wed, 16 Aug 2017 11:22:57 -0600 Subject: [PATCH 197/230] Xeno nerfs fixed --- icons/mob/human_parts_greyscale.dmi | Bin 44525 -> 44523 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index e7309556354492f8e627ff9200c8a627397d5ac9..225a61e143b85612f8f56d55d20e3067344ce213 100644 GIT binary patch delta 2313 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 delta 2288 zcmVOvZeH%w9TVF8LrHjiF<-#Dy*;6f|W?5qO9pHVBslFB$X< z=BkS7P}`60l@$Gd@X{uI-kg(rMRI(6bY*INRM8a#fy`zz@jOp#+m>pzDwbtM`RJkw z-*_G>uKKrHt)_o1zKDq9I7%|Um5Cqzb(BW_x<)H*Y z5X~T)kY)~rFMt6+2lb29_x-F>S&Q%c+Pc8WU-!KYaKgzVFL)I+fksU1>I(^8NdF`S|gp))y(s zagTTh*u+SZiodM;YU&8Kv~x(c0Pgqu;mOH~(O0U;`Cm?e0Fai!U?8?_8@Z`04X*2k z^?E&eOEgXDev2<(zNk+bU6Wp~7v}xvd)n(?wCjJ*^d7mc8(v>u%k}lOG#U*fzyE_E zkY=+f)9F;2&1TdEHARiYWHpYotOIOn{2`u$$ny^HCOM>f4)EUIUYcKSB^MVL(ch=j zsqy##Ua$TAeW_NfQm@yuPGu$adR?m3s_gIYYm0Gwd@PMd!}yvMq5GWn`WNl`GrdRk zdR>1SjfNZ_9~+CQimu(=-De-0qRt;yM-s-5CDh4v-LTba{qg;p{QlK=(Xt#`t=8J- zAg5XYpP!$n`Q=vf>C-1UKR=hxpFbOq4d8V!})UK@iB@-JOw#P)sHh@qItK=}-NA zGMN~ASV|BCG8hb^S>zxHj68%xQ8yxrNR-E>UHHO32t#D?wu=bk4*=4oeyA7W?Po=I z&gzk{MOqV+(p>){UVo;k!ch0`f7JmU4u{dPW9nEkbpnCTeNy8!p65xY(}`w))tD}f ziJK*pCsCM;9nT@Y4l0jLekQ$&0vG@QK$rNjbe`u$$8o7q1l>2HCF9p>HIk?tH7uS$ zmxqpXuh$FJERw0mK&zPB+uI@{a({m>rf+`i_xqumIiJtx^3Om2WU?0~uZb-7`X!T5 zsEdE%$i0V$2h(AfDr*N=?SB@>AD*0?Y&|?YYd0nvI008_q6u=wETM;~;&oj$uZ*Ncf{l1X{u;cFU?`3Ca zCl`BRGKVbpdYQewJ-NTXHy$^B3IqTE>!N=EUQztGtGspKR6dPHBYG%^391;|+1W8x z1YcfWhW&m&+}YVN5pE?W)<2KeUvmF1FE5Q;18V>C_F@14P#hG%D|r9@eRy$kA*0bq zy4|jvotr4^{`KouCNbZ)oha2zKZ!_X}cIRJkE02I|)1+W@Dc&P&%1cBB9OvP6nVAXY2AM1`UvgkIy zG=ibK_|8)f0000*wQ>R6Znw9RbGRal8{kaL-^Sy=)B)B#|0^QTy3KK>JHX3kw>zDV z))5c@0D#wE<(uFXbrM7ThB(!AG%-9qQ0z~Bz z?*KCc3}6-91P7q3HaZ9R@bEAiH)yq5Vp*24&SSk^k8S|7ZCgYZoloEQjl_Sc`)YFZ zpjN9b&4C$U004l$+xS5kmSsu&Gy;><(O;hDMMr>{pvExb9pE4cjJ^O+mUVz{Zf@xQ z0ssK~#s4<_KL$Y{wOW5of*?pUpOvVizf=cUeXN`7x}oZLXDyk7Wm(c{wW1Lf0000i zxAv3ZCX-3j^;8|;AP8hKnP@+QHhvRcvIFdSo{Yz1BWK{oAG{&5=*Au%9vV9bSgm<7 z2LJ#7{N36k5NZb2aU5|RCo05D&7az~9TmQ+1FVi?8;{3YV<&%4q7X5E^I1HH_$Y>{ z8vy|T0E%wy5eUn&#J26I`#2m9#kOr@V*#r09SjCCola#i7>I4##>OB-o_AYkvzhV2 zv)yiQ)oL}F&1Oq;0ssKO%Qij+P2_hsGX8OTsjU|O>gpt|BUIz{eU;t&c@hK1h002M{QIoW-AsvMR7ytkOrSdPVDrON38q^p70000< KMNUMnLSTZDm|SB3 From aaaecf731c8273d4f4fae93edd08336f3c2375dc Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Wed, 16 Aug 2017 11:35:36 -0600 Subject: [PATCH 198/230] xenonerfs --- .../mob/living/carbon/human/species_types/furrypeople.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 68520b9ae0..d6f2a08abc 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -89,8 +89,7 @@ datum/species/mammal species_traits = list(MUTCOLORS,LIPS,DIGITIGRADE,PIERCEIMMUNE) mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur","mam_body_markings") default_features = list("xenotail"="xeno","xenohead"="standard","xenodorsal"="standard","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "xeno") - armor = 5 - heatmod = 1.4 + heatmod = 1.3 no_equip = list(slot_head) attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' From 6f20e222d3d7d7bdf7b84820c7b50bfe6b636bf4 Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Wed, 16 Aug 2017 11:55:40 -0600 Subject: [PATCH 199/230] xenofix --- .../modules/mob/living/carbon/human/species_types/furrypeople.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index d6f2a08abc..ddc3d84534 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -90,7 +90,6 @@ datum/species/mammal mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur","mam_body_markings") default_features = list("xenotail"="xeno","xenohead"="standard","xenodorsal"="standard","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "xeno") heatmod = 1.3 - no_equip = list(slot_head) attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' From 472e1c59c93604d4e2470bdf11e3b6543c0f51b1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 16 Aug 2017 13:08:39 -0500 Subject: [PATCH 200/230] Fixed mop inhand, adds new inhand for the advanced mop --- .../inhands/equipment/custodial_lefthand.dmi | Bin 1284 -> 1578 bytes .../inhands/equipment/custodial_righthand.dmi | Bin 1317 -> 1603 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/inhands/equipment/custodial_lefthand.dmi b/icons/mob/inhands/equipment/custodial_lefthand.dmi index 80c77cf8dfe4d1ebfdb07797897b9fa551087103..b099ee15243fc4cb14d7d0fd443694ba4da44453 100644 GIT binary patch delta 1483 zcmX|>c|6n$5Ws)JI&y4F>rVNEM7u0DS6M!e=gN|#C}J&<^&Gk0vaTdK)=}$N(xTS6 zh1znpS~+SRMOyb2`p_y=uDpG#_j>ck%zS4)GoP9HW0FOy#E3Ey3}Jo%0DSk6^?8Px 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 v`S$i|K9%*=X7j#zFRp!TKepS39Q*;wjz Date: Wed, 16 Aug 2017 15:06:16 -0500 Subject: [PATCH 201/230] bonesless pizza --- .../mob/living/carbon/human/species_types/furrypeople.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 4aefe45878..32d6a89494 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -97,7 +97,7 @@ datum/species/mammal skinned_type = /obj/item/stack/sheet/animalhide/xeno exotic_bloodtype = "L" damage_overlay_type = "xeno" - roundstart = 0 + roundstart = 1 //Praise the Omnissiah, A challange worthy of my skills - HS From 55c021b386bf09260837872efb92ac6afda58a28 Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Wed, 16 Aug 2017 15:08:43 -0500 Subject: [PATCH 202/230] Update furrypeople.dm --- .../mob/living/carbon/human/species_types/furrypeople.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 55993487d2..32d6a89494 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -79,7 +79,6 @@ datum/species/mammal return TRUE //HERBIVOROUS// - //Alien// /datum/species/xeno // A cloning mistake, crossing human and xenomorph DNA @@ -240,4 +239,4 @@ datum/species/guilmon attack_verb = "claw" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - roundstart = 1 \ No newline at end of file + roundstart = 1 From 564d2aef7ad7ff4320c44882a46105fe59e2ae57 Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Wed, 16 Aug 2017 15:08:39 -0600 Subject: [PATCH 203/230] attempting to correct and make xenos roundstart --- .../modules/mob/living/carbon/human/species_types/furrypeople.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index ddc3d84534..55993487d2 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -79,6 +79,7 @@ datum/species/mammal return TRUE //HERBIVOROUS// + //Alien// /datum/species/xeno // A cloning mistake, crossing human and xenomorph DNA From 46c43c7ae76b3ba70ca18c85999193f7512867d6 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 16 Aug 2017 17:49:13 -0500 Subject: [PATCH 204/230] Removes out of date colon operator log --- .../2015-10-25-colon_operator_log.txt | 434 ------------------ 1 file changed, 434 deletions(-) delete mode 100644 tools/ColonCatcher/2015-10-25-colon_operator_log.txt diff --git a/tools/ColonCatcher/2015-10-25-colon_operator_log.txt b/tools/ColonCatcher/2015-10-25-colon_operator_log.txt deleted file mode 100644 index f8908a0fda..0000000000 --- a/tools/ColonCatcher/2015-10-25-colon_operator_log.txt +++ /dev/null @@ -1,434 +0,0 @@ -..code\world.dm Lines: 27, 28, 98?, 102?, 119?, 149?, 230? Total Colons: 7 -..code\ATMOSPHERICS\atmospherics.dm Lines: 213? Total Colons: 1 -..code\ATMOSPHERICS\components\binary_devices\dp_vent_pump.dm Lines: 137? Total Colons: 1 -..code\ATMOSPHERICS\components\binary_devices\passive_gate.dm Lines: 134?, 163? Total Colons: 2 -..code\ATMOSPHERICS\components\binary_devices\pump.dm Lines: 43?, 139?, 167? Total Colons: 3 -..code\ATMOSPHERICS\components\binary_devices\valve.dm Lines: 25?, 33?, 38? Total Colons: 3 -..code\ATMOSPHERICS\components\binary_devices\volume_pump.dm Lines: 42?, 136?, 163? Total Colons: 3 -..code\ATMOSPHERICS\components\trinary_devices\filter.dm Lines: 66?, 69?, 214? Total Colons: 3 -..code\ATMOSPHERICS\components\trinary_devices\mixer.dm Lines: 36?, 39?, 151? Total Colons: 3 -..code\ATMOSPHERICS\components\unary_devices\cryo.dm Lines: 152?, 187?, 189, 190, 312?, 313? Total Colons: 7 -..code\ATMOSPHERICS\components\unary_devices\Freezer.dm Lines: 82?, 205? Total Colons: 2 -..code\ATMOSPHERICS\components\unary_devices\vent_pump.dm Lines: 175?, 196?, 197?, 228? Total Colons: 4 -..code\ATMOSPHERICS\components\unary_devices\vent_scrubber.dm Lines: 140?, 141? Total Colons: 2 -..code\ATMOSPHERICS\pipes\manifold.dm Lines: 28? Total Colons: 1 -..code\ATMOSPHERICS\pipes\manifold4w.dm Lines: 19? Total Colons: 1 -..code\ATMOSPHERICS\pipes\pipes.dm Lines: 30?, 32?, 33?, 34?, 43? Total Colons: 5 -..code\ATMOSPHERICS\pipes\heat_exchange\manifold.dm Lines: 25?, 51? Total Colons: 2 -..code\controllers\subsystem\air.dm Lines: 100 Total Colons: 1 -..code\controllers\subsystem\bots.dm Lines: 18, 20 Total Colons: 2 -..code\controllers\subsystem\diseases.dm Lines: 18 Total Colons: 1 -..code\controllers\subsystem\events.dm Lines: 41, 199?, 200? Total Colons: 3 -..code\controllers\subsystem\jobs.dm Lines: 370? Total Colons: 1 -..code\controllers\subsystem\machines.dm Lines: 41, 42, 43 Total Colons: 3 -..code\controllers\subsystem\mobs.dm Lines: 20 Total Colons: 1 -..code\controllers\subsystem\objects.dm Lines: 37 Total Colons: 1 -..code\controllers\subsystem\shuttles.dm Lines: 251?, 253, 261?, 262?, 284, 285 Total Colons: 6 -..code\controllers\subsystem\ticker.dm Lines: 382?, 405? Total Colons: 4 -..code\controllers\subsystem\voting.dm Lines: 203?, 211? Total Colons: 2 -..code\controllers\subsystem\shuttles\emergency.dm Lines: 52?, 65? Total Colons: 4 -..code\controllers\subsystem\shuttles\supply.dm Lines: 97, 316?, 347?, 488?, 505? Total Colons: 10 -..code\datums\browser.dm Lines: 79? Total Colons: 1 -..code\datums\datacore.dm Lines: 91?, 127?, 132?, 137?, 142?, 147?, 152?, 157?, 163?, 169?, 259? Total Colons: 23 -..code\datums\datumvars.dm Lines: 57?, 93 Total Colons: 3 -..code\datums\material_container.dm Lines: 194? Total Colons: 1 -..code\datums\mind.dm Lines: 228?, 229?, 290?, 581?, 633, 634, 643, 648, 720?, 1243, 1244, 1245 Total Colons: 13 -..code\datums\mutations.dm Lines: 34?, 135?, 329? Total Colons: 3 -..code\datums\recipe.dm Lines: 52?, 114?, 115? Total Colons: 3 -..code\datums\diseases\_disease.dm Lines: 125? Total Colons: 1 -..code\datums\helper_datums\teleport.dm Lines: 63?, 64?, 74?, 75? Total Colons: 4 -..code\datums\helper_datums\topic_input.dm Lines: 23?, 27?, 31?, 35?, 42?, 46?, 50?, 56?, 60? Total Colons: 9 -..code\datums\spells\dumbfire.dm Lines: 43 Total Colons: 1 -..code\datums\spells\knock.dm Lines: 21 Total Colons: 1 -..code\datums\spells\projectile.dm Lines: 35 Total Colons: 1 -..code\datums\wires\airlock.dm Lines: 37?, 38?, 39?, 40?, 41?, 42?, 43? Total Colons: 7 -..code\datums\wires\alarm.dm Lines: 21? Total Colons: 3 -..code\datums\wires\apc.dm Lines: 13? Total Colons: 3 -..code\datums\wires\autolathe.dm Lines: 13? Total Colons: 3 -..code\datums\wires\particle_accelerator.dm Lines: 50? Total Colons: 1 -..code\datums\wires\pizza_bomb.dm Lines: 45?, 46? Total Colons: 2 -..code\datums\wires\robot.dm Lines: 16?, 17?, 18? Total Colons: 4 -..code\datums\wires\r_n_d.dm Lines: 48?, 49?, 50? Total Colons: 3 -..code\datums\wires\syndicatebomb.dm Lines: 46?, 75? Total Colons: 2 -..code\datums\wires\vending.dm Lines: 28?, 29?, 30?, 31? Total Colons: 4 -..code\datums\wires\wires.dm Lines: 119?, 121? Total Colons: 2 -..code\game\atoms.dm Lines: 297? Total Colons: 1 -..code\game\atoms_movable.dm Lines: 181?, 182?, 216? Total Colons: 3 -..code\game\communications.dm Lines: 288 Total Colons: 3 -..code\game\data_huds.dm Lines: 35? Total Colons: 1 -..code\game\dna.dm Lines: 231? Total Colons: 1 -..code\game\say.dm Lines: 45?, 49? Total Colons: 2 -..code\game\sound.dm Lines: 72? Total Colons: 1 -..code\game\gamemodes\antag_spawner.dm Lines: 103, 104 Total Colons: 3 -..code\game\gamemodes\objective.dm Lines: 84?, 112?, 139?, 172?, 201?, 433, 806 Total Colons: 7 -..code\game\gamemodes\abduction\abduction_gear.dm Lines: 159? Total Colons: 1 -..code\game\gamemodes\abduction\machinery\experiment.dm Lines: 41?, 107? Total Colons: 2 -..code\game\gamemodes\blob\blob_finish.dm Lines: 47? Total Colons: 1 -..code\game\gamemodes\blob\blob_report.dm Lines: 64, 70, 76, 85 Total Colons: 4 -..code\game\gamemodes\changeling\evolution_menu.dm Lines: 59? Total Colons: 3 -..code\game\gamemodes\changeling\powers\adrenaline.dm Lines: 12? Total Colons: 1 -..code\game\gamemodes\changeling\powers\mutations.dm Lines: 83? Total Colons: 1 -..code\game\gamemodes\cult\cult.dm Lines: 44? Total Colons: 1 -..code\game\gamemodes\cult\runes.dm Lines: 705?, 706? Total Colons: 2 -..code\game\gamemodes\gang\dominator.dm Lines: 101?, 187? Total Colons: 2 -..code\game\gamemodes\gang\gang.dm Lines: 261?, 266? Total Colons: 2 -..code\game\gamemodes\gang\gang_datum.dm Lines: 43?, 53?, 121? Total Colons: 3 -..code\game\gamemodes\gang\gang_pen.dm Lines: 59? Total Colons: 1 -..code\game\gamemodes\gang\recaller.dm Lines: 48?, 51? Total Colons: 4 -..code\game\gamemodes\malfunction\malfunction.dm Lines: 63, 64, 65, 185, 188, 189, 192, 204, 205, 216, 218, 219, 221, 233, 234 Total Colons: 15 -..code\game\gamemodes\meteor\meteors.dm Lines: 177? Total Colons: 2 -..code\game\gamemodes\nuclear\nuclearbomb.dm Lines: 197?, 212?, 215?, 217?, 220?, 222?, 265?, 359, 359?, 360, 365, 383? Total Colons: 25 -..code\game\gamemodes\revolution\revolution.dm Lines: 265?, 266?, 286? Total Colons: 3 -..code\game\gamemodes\shadowling\shadowling.dm Lines: 304? Total Colons: 1 -..code\game\gamemodes\traitor\traitor.dm Lines: 335? Total Colons: 1 -..code\game\gamemodes\wizard\artefact.dm Lines: 148? Total Colons: 1 -..code\game\gamemodes\wizard\rightandwrong.dm Lines: 9?, 10?, 11? Total Colons: 3 -..code\game\gamemodes\wizard\soulstone.dm Lines: 123, 195 Total Colons: 2 -..code\game\gamemodes\wizard\spellbook.dm Lines: 93?, 512?, 533? Total Colons: 3 -..code\game\gamemodes\wizard\wizard.dm Lines: 183?, 258, 261, 264, 278? Total Colons: 5 -..code\game\machinery\airlock_control.dm Lines: 59?, 60? Total Colons: 2 -..code\game\machinery\ai_slipper.dm Lines: 39?, 67, 77?, 93? Total Colons: 5 -..code\game\machinery\alarm.dm Lines: 134?, 135?, 730?, 742?, 895?, 934?, 1056?, 1071?, 1127?, 1128? Total Colons: 16 -..code\game\machinery\announcement_system.dm Lines: 45?, 47?, 136?, 137? Total Colons: 4 -..code\game\machinery\atmo_control.dm Lines: 273?, 284?, 396? Total Colons: 3 -..code\game\machinery\autolathe.dm Lines: 139?, 178?, 187?, 295?, 322?, 336?, 345? Total Colons: 10 -..code\game\machinery\Beacon.dm Lines: 31? Total Colons: 1 -..code\game\machinery\buttons.dm Lines: 22?, 23? Total Colons: 4 -..code\game\machinery\cell_charger.dm Lines: 15?, 31?, 64? Total Colons: 4 -..code\game\machinery\cloning.dm Lines: 88?, 92? Total Colons: 2 -..code\game\machinery\constructable_frame.dm Lines: 48?, 90?, 94?, 99?, 102?, 475? Total Colons: 8 -..code\game\machinery\deployable.dm Lines: 92 Total Colons: 1 -..code\game\machinery\dna_scanner.dm Lines: 44?, 48?, 57? Total Colons: 3 -..code\game\machinery\droneDispenser.dm Lines: 190? Total Colons: 1 -..code\game\machinery\iv_drip.dm Lines: 192?, 200?, 210? Total Colons: 3 -..code\game\machinery\lightswitch.dm Lines: 41? Total Colons: 1 -..code\game\machinery\machinery.dm Lines: 372?, 375? Total Colons: 2 -..code\game\machinery\magnet.dm Lines: 53?, 275?, 279? Total Colons: 3 -..code\game\machinery\navbeacon.dm Lines: 63?, 84?, 92?, 122?, 130? Total Colons: 6 -..code\game\machinery\newscaster.dm Lines: 205?, 206?, 291?, 304?, 311?, 318?, 319?, 372, 391?, 409?, 420?, 423, 424?, 430?, 431?, 436, 460?, 465?, 486, 614?, 724?, 727?, 922 Total Colons: 27 -..code\game\machinery\overview.dm Lines: 98, 167?, 243, 292? Total Colons: 4 -..code\game\machinery\portable_turret.dm Lines: 162?, 164?, 169?, 170?, 171?, 172?, 173?, 183?, 285?, 862?, 864?, 869?, 870?, 871?, 872?, 873?, 877?, 889?, 891?, 896?, 897?, 898?, 899?, 900?, 910?, 968?, 1049?, 1085, 1097?, 1098? Total Colons: 32 -..code\game\machinery\recharger.dm Lines: 19? Total Colons: 1 -..code\game\machinery\rechargestation.dm Lines: 122?, 124? Total Colons: 2 -..code\game\machinery\recycler.dm Lines: 43?, 44?, 45?, 84? Total Colons: 4 -..code\game\machinery\requests_console.dm Lines: 201?, 202?, 212?, 213? Total Colons: 4 -..code\game\machinery\robot_fabricator.dm Lines: 21, 23, 24, 25, 28 Total Colons: 5 -..code\game\machinery\shieldgen.dm Lines: 247?, 261?, 263?, 441? Total Colons: 4 -..code\game\machinery\Sleeper.dm Lines: 142?, 156?, 162? Total Colons: 4 -..code\game\machinery\slotmachine.dm Lines: 219?, 265?, 271? Total Colons: 3 -..code\game\machinery\spaceheater.dm Lines: 33?, 35?, 37?, 69?, 89?, 107? Total Colons: 9 -..code\game\machinery\status_display.dm Lines: 167 Total Colons: 4 -..code\game\machinery\suit_storage_unit.dm Lines: 199?, 200?, 212?, 215?, 218?, 221?, 227?, 231?, 232?, 519? Total Colons: 12 -..code\game\machinery\syndicatebeacon.dm Lines: 151? Total Colons: 1 -..code\game\machinery\syndicatebomb.dm Lines: 22?, 53?, 77?, 323?, 326? Total Colons: 6 -..code\game\machinery\teleporter.dm Lines: 69?, 442? Total Colons: 3 -..code\game\machinery\turrets.dm Lines: 542?, 578, 590?, 591? Total Colons: 6 -..code\game\machinery\vending.dm Lines: 248?, 323? Total Colons: 2 -..code\game\machinery\atmoalter\canister.dm Lines: 248, 289?, 290?, 291?, 292?, 295?, 297? Total Colons: 7 -..code\game\machinery\atmoalter\pump.dm Lines: 109? Total Colons: 3 -..code\game\machinery\atmoalter\scrubber.dm Lines: 127?, 203? Total Colons: 3 -..code\game\machinery\bots\bots.dm Lines: 244?, 337?, 338?, 340?, 416?, 481? Total Colons: 6 -..code\game\machinery\bots\cleanbot.dm Lines: 84?, 85?, 87?, 88?, 109? Total Colons: 6 -..code\game\machinery\bots\ed209bot.dm Lines: 107?, 109?, 115?, 116?, 117?, 118?, 119?, 120?, 155?, 258?, 456? Total Colons: 12 -..code\game\machinery\bots\floorbot.dm Lines: 104?, 105?, 107?, 109?, 110?, 111?, 112?, 113?, 114?, 115?, 116?, 147?, 360? Total Colons: 13 -..code\game\machinery\bots\medbot.dm Lines: 147?, 148?, 154?, 171?, 173?, 174?, 175?, 176?, 177?, 231?, 320?, 532? Total Colons: 12 -..code\game\machinery\bots\mulebot.dm Lines: 99?, 147?, 187?, 209?, 210?, 211?, 225?, 226?, 227?, 228?, 249?, 282?, 346?, 354?, 363?, 535? Total Colons: 17 -..code\game\machinery\bots\secbot.dm Lines: 97?, 99?, 104?, 105?, 106?, 107?, 108?, 109?, 142?, 222? Total Colons: 11 -..code\game\machinery\camera\camera.dm Lines: 141?, 151?, 152? Total Colons: 3 -..code\game\machinery\camera\tracking.dm Lines: 19?, 83? Total Colons: 2 -..code\game\machinery\computer\arcade.dm Lines: 860?, 862?, 863?, 871? Total Colons: 6 -..code\game\machinery\computer\camera.dm Lines: 56? Total Colons: 1 -..code\game\machinery\computer\camera_advanced.dm Lines: 154? Total Colons: 1 -..code\game\machinery\computer\card.dm Lines: 148?, 164?, 209?, 364?, 372?, 390? Total Colons: 6 -..code\game\machinery\computer\cloning.dm Lines: 146? Total Colons: 1 -..code\game\machinery\computer\communications.dm Lines: 106, 148?, 272?, 428?, 429?, 430, 453?, 468?, 531?, 532?, 533, 554? Total Colons: 12 -..code\game\machinery\computer\crew.dm Lines: 153?, 158?, 169? Total Colons: 3 -..code\game\machinery\computer\dna_console.dm Lines: 94?, 139?, 141?, 143?, 181? Total Colons: 5 -..code\game\machinery\computer\medical.dm Lines: 40?, 46, 153? Total Colons: 4 -..code\game\machinery\computer\message.dm Lines: 73?, 76?, 131?, 150? Total Colons: 4 -..code\game\machinery\computer\Operating.dm Lines: 50? Total Colons: 1 -..code\game\machinery\computer\pod.dm Lines: 56? Total Colons: 2 -..code\game\machinery\computer\robot.dm Lines: 65?, 107?, 109?, 110?, 112?, 114? Total Colons: 6 -..code\game\machinery\computer\security.dm Lines: 49?, 62, 117, 130, 275, 285 Total Colons: 7 -..code\game\machinery\computer\shuttle.dm Lines: 24, 25, 28, 30, 33, 34, 47, 48, 60 Total Colons: 9 -..code\game\machinery\computer\station_alert.dm Lines: 73? Total Colons: 1 -..code\game\machinery\doors\airlock.dm Lines: 790?, 791?, 800?, 801?, 809?, 877, 888 Total Colons: 7 -..code\game\machinery\doors\airlock_electronics.dm Lines: 81 Total Colons: 1 -..code\game\machinery\doors\brigdoors.dm Lines: 123?, 158?, 247 Total Colons: 7 -..code\game\machinery\doors\firedoor.dm Lines: 49?, 69 Total Colons: 2 -..code\game\machinery\doors\windowdoor.dm Lines: 188?, 200, 276? Total Colons: 3 -..code\game\machinery\embedded_controller\access_controller.dm Lines: 295?, 297? Total Colons: 2 -..code\game\machinery\embedded_controller\airlock_controller.dm Lines: 258?, 259?, 260?, 261? Total Colons: 4 -..code\game\machinery\pipe\construction.dm Lines: 134?, 162? Total Colons: 2 -..code\game\machinery\telecomms\machine_interactions.dm Lines: 57?, 64?, 159?, 160?, 161?, 184?, 220? Total Colons: 7 -..code\game\mecha\mecha.dm Lines: 561?, 582?, 838?, 843?, 935?, 936?, 937?, 986?, 987? Total Colons: 11 -..code\game\mecha\mecha_control_console.dm Lines: 72? Total Colons: 1 -..code\game\mecha\mecha_topic.dm Lines: 33?, 34?, 36?, 40?, 90?, 164?, 168?, 190?, 197? Total Colons: 21 -..code\game\mecha\mecha_wreckage.dm Lines: 25?, 42? Total Colons: 2 -..code\game\mecha\mech_fabricator.dm Lines: 120?, 132?, 237? Total Colons: 6 -..code\game\mecha\combat\combat.dm Lines: 65?, 67? Total Colons: 3 -..code\game\mecha\combat\durand.dm Lines: 38?, 50? Total Colons: 2 -..code\game\mecha\combat\gygax.dm Lines: 69?, 74?, 105? Total Colons: 3 -..code\game\mecha\combat\honker.dm Lines: 32?, 33?, 35? Total Colons: 14 -..code\game\mecha\combat\marauder.dm Lines: 70?, 158?, 160? Total Colons: 5 -..code\game\mecha\combat\phazon.dm Lines: 39?, 97?, 98? Total Colons: 3 -..code\game\mecha\equipment\mecha_equipment.dm Lines: 57? Total Colons: 3 -..code\game\mecha\equipment\tools\medical_tools.dm Lines: 96, 96?, 129?, 249?, 333?, 366, 370?, 371? Total Colons: 20 -..code\game\mecha\equipment\tools\mining_tools.dm Lines: 40, 51 Total Colons: 2 -..code\game\mecha\equipment\tools\other_tools.dm Lines: 132?, 160?, 182?, 222?, 328?, 406, 406?, 446? Total Colons: 10 -..code\game\mecha\equipment\tools\work_tools.dm Lines: 329?, 350?, 351?, 368, 368? Total Colons: 7 -..code\game\mecha\equipment\weapons\weapons.dm Lines: 208? Total Colons: 1 -..code\game\mecha\working\ripley.dm Lines: 53?, 55? Total Colons: 2 -..code\game\objects\explosion.dm Lines: 11?, 12?, 68? Total Colons: 5 -..code\game\objects\items.dm Lines: 213? Total Colons: 1 -..code\game\objects\items\candle.dm Lines: 23? Total Colons: 1 -..code\game\objects\items\crayons.dm Lines: 117, 171?, 172?, 173?, 210? Total Colons: 5 -..code\game\objects\items\toys.dm Lines: 133?, 187?, 234?, 452?, 471? Total Colons: 6 -..code\game\objects\items\devices\aicard.dm Lines: 83?, 85?, 129?, 138? Total Colons: 4 -..code\game\objects\items\devices\flashlight.dm Lines: 60? Total Colons: 2 -..code\game\objects\items\devices\geiger_counter.dm Lines: 93? Total Colons: 1 -..code\game\objects\items\devices\paicard.dm Lines: 40?, 41? Total Colons: 2 -..code\game\objects\items\devices\scanners.dm Lines: 123?, 137?, 139?, 141?, 143?, 147?, 149, 164?, 212?, 396? Total Colons: 11 -..code\game\objects\items\devices\taperecorder.dm Lines: 28?, 97, 117, 142 Total Colons: 4 -..code\game\objects\items\devices\transfer_valve.dm Lines: 69?, 102 Total Colons: 6 -..code\game\objects\items\devices\PDA\cart.dm Lines: 241, 245, 275, 292?, 293?, 294, 348?, 424, 435, 473?, 499?, 533?, 546?, 557?, 585, 594, 601, 605, 606, 609, 610, 611, 612, 631, 642?, 649?, 702?, 703?, 705?, 706?, 707?, 708?, 709?, 711, 712, 713, 716, 717, 718 Total Colons: 44 -..code\game\objects\items\devices\PDA\PDA.dm Lines: 298?, 299?, 330?, 356?, 358?, 360?, 364?, 378?, 382?, 383?, 388, 390, 392, 618, 619, 631, 632, 692, 693, 918, 1010?, 1036, 1039, 1131?, 1143? Total Colons: 25 -..code\game\objects\items\devices\radio\electropack.dm Lines: 129? Total Colons: 1 -..code\game\objects\items\devices\radio\radio.dm Lines: 136?, 137, 137?, 138, 138?, 139, 140, 141, 143, 144, 146, 147?, 148, 148?, 149, 150, 151, 153, 154, 155 Total Colons: 22 -..code\game\objects\items\robot\robot_parts.dm Lines: 137, 143, 150, 258?, 259?, 261?, 262?, 263?, 264? Total Colons: 11 -..code\game\objects\items\robot\robot_upgrades.dm Lines: 250? Total Colons: 1 -..code\game\objects\items\stacks\sheets\glass.dm Lines: 303? Total Colons: 1 -..code\game\objects\items\weapons\AI_modules.dm Lines: 37?, 72?, 73?, 74? Total Colons: 4 -..code\game\objects\items\weapons\cards_ids.dm Lines: 115?, 118?, 148? Total Colons: 6 -..code\game\objects\items\weapons\cigs_lighters.dm Lines: 479?, 496? Total Colons: 2 -..code\game\objects\items\weapons\cosmetics.dm Lines: 36?, 54? Total Colons: 2 -..code\game\objects\items\weapons\defib.dm Lines: 470?, 485?, 487?, 489?, 491?, 508?, 527?, 530? Total Colons: 8 -..code\game\objects\items\weapons\explosives.dm Lines: 57? Total Colons: 1 -..code\game\objects\items\weapons\extinguisher.dm Lines: 45?, 46? Total Colons: 2 -..code\game\objects\items\weapons\flamethrower.dm Lines: 90?, 128? Total Colons: 2 -..code\game\objects\items\weapons\handcuffs.dm Lines: 208? Total Colons: 1 -..code\game\objects\items\weapons\RCD.dm Lines: 500, 505 Total Colons: 4 -..code\game\objects\items\weapons\singularityhammer.dm Lines: 42 Total Colons: 1 -..code\game\objects\items\weapons\stunbaton.dm Lines: 94? Total Colons: 1 -..code\game\objects\items\weapons\grenades\chem_grenade.dm Lines: 60? Total Colons: 1 -..code\game\objects\items\weapons\grenades\grenade.dm Lines: 49? Total Colons: 1 -..code\game\objects\items\weapons\implants\implantchair.dm Lines: 46?, 47?, 49? Total Colons: 5 -..code\game\objects\items\weapons\implants\implantpad.dm Lines: 56 Total Colons: 1 -..code\game\objects\items\weapons\storage\book.dm Lines: 180 Total Colons: 1 -..code\game\objects\items\weapons\storage\fancy.dm Lines: 39? Total Colons: 1 -..code\game\objects\items\weapons\storage\secure.dm Lines: 32?, 39?, 84? Total Colons: 3 -..code\game\objects\items\weapons\storage\storage.dm Lines: 177? Total Colons: 1 -..code\game\objects\items\weapons\tanks\jetpack.dm Lines: 26?, 44?, 151? Total Colons: 3 -..code\game\objects\items\weapons\tanks\tanks.dm Lines: 121?, 122? Total Colons: 2 -..code\game\objects\items\weapons\tanks\watertank.dm Lines: 177?, 178? Total Colons: 2 -..code\game\objects\structures\ai_core.dm Lines: 212?, 213? Total Colons: 2 -..code\game\objects\structures\displaycase.dm Lines: 119?, 128?, 130? Total Colons: 3 -..code\game\objects\structures\fireaxe.dm Lines: 129? Total Colons: 1 -..code\game\objects\structures\grille.dm Lines: 148?, 149? Total Colons: 2 -..code\game\objects\structures\musician.dm Lines: 50?, 130?, 132? Total Colons: 3 -..code\game\objects\structures\safe.dm Lines: 78?, 98?, 104?, 188? Total Colons: 4 -..code\game\objects\structures\tank_dispenser.dm Lines: 43?, 44? Total Colons: 2 -..code\game\objects\structures\watercloset.dm Lines: 51?, 54? Total Colons: 3 -..code\game\objects\structures\windoor_assembly.dm Lines: 50? Total Colons: 1 -..code\game\objects\structures\window.dm Lines: 197?, 199?, 201?, 206?, 207?, 211?, 215?, 218?, 222?, 223?, 425? Total Colons: 11 -..code\game\objects\structures\beds_chairs\bed.dm Lines: 129? Total Colons: 1 -..code\game\objects\structures\crates_lockers\closets.dm Lines: 66?, 234?, 241?, 243?, 392? Total Colons: 6 -..code\game\objects\structures\transit_tubes\station.dm Lines: 130? Total Colons: 1 -..code\game\objects\structures\transit_tubes\transit_tube_construction.dm Lines: 41?, 43? Total Colons: 2 -..code\game\turfs\turf.dm Lines: 137, 248?, 250? Total Colons: 4 -..code\game\turfs\space\space.dm Lines: 114?, 125? Total Colons: 2 -..code\game\verbs\ooc.dm Lines: 44?, 53?, 55?, 57?, 69? Total Colons: 6 -..code\LINDA\LINDA_turf_tile.dm Lines: 458?, 463? Total Colons: 2 -..code\modules\admin\admin.dm Lines: 30?, 62?, 63?, 64?, 65?, 66?, 67?, 122, 129, 141, 192?, 205?, 212?, 246, 262?, 277?, 288?, 292, 293?, 300?, 301?, 306, 334?, 352, 415?, 442?, 550?, 551?, 676?, 677?, 696? Total Colons: 35 -..code\modules\admin\admin_verbs.dm Lines: 441?, 442? Total Colons: 2 -..code\modules\admin\create_poll.dm Lines: 25?, 26?, 94?, 95? Total Colons: 4 -..code\modules\admin\newbanjob.dm Lines: 216? Total Colons: 2 -..code\modules\admin\player_panel.dm Lines: 111?, 113?, 119?, 123?, 129?, 155?, 160?, 166?, 181?, 186?, 195?, 207?, 219?, 228?, 240?, 249?, 258?, 269?, 284?, 297? Total Colons: 36 -..code\modules\admin\sql_notes.dm Lines: 153 Total Colons: 2 -..code\modules\admin\topic.dm Lines: 299?, 310?, 341?, 348?, 349?, 447?, 986?, 1559?, 1561?, 1589?, 1796?, 1797?, 1798?, 1800?, 1982?, 2093?, 2096?, 2101?, 2102? Total Colons: 21 -..code\modules\admin\DB ban\functions.dm Lines: 93, 94, 95, 127?, 131?, 304, 305, 306, 441? Total Colons: 20 -..code\modules\admin\verbs\adminjump.dm Lines: 91, 127 Total Colons: 2 -..code\modules\admin\verbs\deadsay.dm Lines: 24? Total Colons: 1 -..code\modules\admin\verbs\debug.dm Lines: 82?, 86?, 89?, 112?, 116?, 289, 306, 498, 501 Total Colons: 9 -..code\modules\admin\verbs\diagnostics.dm Lines: 15?, 81 Total Colons: 5 -..code\modules\admin\verbs\massmodvar.dm Lines: 132 Total Colons: 1 -..code\modules\admin\verbs\modifyvariables.dm Lines: 542 Total Colons: 1 -..code\modules\admin\verbs\one_click_antag.dm Lines: 333?, 478?, 481?, 484?, 487?, 490?, 493?, 496?, 517? Total Colons: 9 -..code\modules\admin\verbs\panicbunker.dm Lines: 10?, 11? Total Colons: 2 -..code\modules\admin\verbs\randomverbs.dm Lines: 38?, 114?, 116?, 117?, 189?, 212?, 409?, 448?, 721?, 722?, 799, 804, 810, 816, 822, 828, 834, 840, 846, 852, 858, 864, 870, 876, 882, 888, 894, 900 Total Colons: 28 -..code\modules\assembly\bomb.dm Lines: 44 Total Colons: 1 -..code\modules\assembly\doorcontrol.dm Lines: 62? Total Colons: 1 -..code\modules\assembly\health.dm Lines: 77? Total Colons: 1 -..code\modules\assembly\infrared.dm Lines: 24?, 110? Total Colons: 3 -..code\modules\assembly\mousetrap.dm Lines: 30?, 127? Total Colons: 2 -..code\modules\assembly\proximity.dm Lines: 26?, 109?, 110? Total Colons: 3 -..code\modules\assembly\signaler.dm Lines: 142? Total Colons: 1 -..code\modules\assembly\timer.dm Lines: 75? Total Colons: 1 -..code\modules\assembly\voice.dm Lines: 32? Total Colons: 1 -..code\modules\awaymissions\maploader\reader.dm Lines: 262? Total Colons: 1 -..code\modules\awaymissions\maploader\swapmaps.dm Lines: 152, 153, 154, 161?, 162?, 163?, 343?, 356?, 362?, 385? Total Colons: 19 -..code\modules\client\client procs.dm Lines: 36, 36?, 177? Total Colons: 3 -..code\modules\client\preferences.dm Lines: 129?, 130?, 151?, 161?, 166?, 186?, 335?, 336?, 337?, 338?, 339?, 340?, 341?, 342?, 343?, 349?, 350?, 353?, 356?, 397?, 523? Total Colons: 21 -..code\modules\client\preferences_toggles.dm Lines: 7?, 16?, 25?, 34?, 43?, 54?, 64?, 74?, 83?, 92?, 113?, 122?, 172?, 226?, 235?, 259? Total Colons: 16 -..code\modules\clothing\clothing.dm Lines: 357? Total Colons: 1 -..code\modules\clothing\glasses\engine_goggles.dm Lines: 83?, 108? Total Colons: 2 -..code\modules\clothing\head\helmet.dm Lines: 240? Total Colons: 1 -..code\modules\clothing\head\soft_caps.dm Lines: 45? Total Colons: 1 -..code\modules\clothing\masks\gasmask.dm Lines: 66? Total Colons: 1 -..code\modules\clothing\masks\miscellaneous.dm Lines: 56? Total Colons: 1 -..code\modules\clothing\shoes\bananashoes.dm Lines: 59?, 65? Total Colons: 3 -..code\modules\clothing\shoes\magboots.dm Lines: 32?, 41? Total Colons: 2 -..code\modules\clothing\spacesuits\chronosuit.dm Lines: 146, 151, 152, 153, 158, 172, 175, 176, 177 Total Colons: 9 -..code\modules\crafting\table.dm Lines: 15, 59, 113, 126, 143, 167 Total Colons: 6 -..code\modules\detectivework\detective_work.dm Lines: 16? Total Colons: 1 -..code\modules\events\event.dm Lines: 37 Total Colons: 2 -..code\modules\events\shuttle_loan.dm Lines: 195, 196 Total Colons: 2 -..code\modules\flufftext\Hallucination.dm Lines: 47?, 49?, 51? Total Colons: 3 -..code\modules\food&drinks\food\customizables.dm Lines: 37? Total Colons: 1 -..code\modules\food&drinks\kitchen machinery\gibber.dm Lines: 165? Total Colons: 1 -..code\modules\food&drinks\kitchen machinery\monkeyrecycler.dm Lines: 72? Total Colons: 1 -..code\modules\food&drinks\kitchen machinery\processor.dm Lines: 198? Total Colons: 1 -..code\modules\games\cards.dm Lines: 177?, 211?, 225? Total Colons: 3 -..code\modules\holiday\easter.dm Lines: 77? Total Colons: 1 -..code\modules\html_interface\html_interface.dm Lines: 292? Total Colons: 1 -..code\modules\hydroponics\grown.dm Lines: 704 Total Colons: 1 -..code\modules\hydroponics\growninedible.dm Lines: 71, 194? Total Colons: 2 -..code\modules\hydroponics\hydroponics.dm Lines: 642?, 836? Total Colons: 2 -..code\modules\hydroponics\seeds.dm Lines: 1377?, 1378? Total Colons: 2 -..code\modules\library\lib_items.dm Lines: 186? Total Colons: 1 -..code\modules\library\lib_machines.dm Lines: 519 Total Colons: 1 -..code\modules\lighting\lighting_system.dm Lines: 254 Total Colons: 1 -..code\modules\mob\inventory.dm Lines: 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 170 Total Colons: 22 -..code\modules\mob\login.dm Lines: 6? Total Colons: 1 -..code\modules\mob\mob.dm Lines: 329?, 599?, 690, 756? Total Colons: 5 -..code\modules\mob\mob_helpers.dm Lines: 485? Total Colons: 2 -..code\modules\mob\transform_procs.dm Lines: 295 Total Colons: 1 -..code\modules\mob\dead\observer\observer.dm Lines: 285? Total Colons: 1 -..code\modules\mob\living\living.dm Lines: 181?, 359?, 402 Total Colons: 3 -..code\modules\mob\living\say.dm Lines: 116? Total Colons: 1 -..code\modules\mob\living\carbon\carbon.dm Lines: 114, 286?, 288?, 291?, 310?, 311?, 322?, 323?, 566? Total Colons: 12 -..code\modules\mob\living\carbon\life.dm Lines: 468? Total Colons: 1 -..code\modules\mob\living\carbon\alien\humanoid\emote.dm Lines: 60? Total Colons: 1 -..code\modules\mob\living\carbon\alien\humanoid\humanoid.dm Lines: 93? Total Colons: 2 -..code\modules\mob\living\carbon\alien\humanoid\caste\hunter.dm Lines: 43?, 46? Total Colons: 2 -..code\modules\mob\living\carbon\alien\larva\emote.dm Lines: 79? Total Colons: 1 -..code\modules\mob\living\carbon\brain\MMI.dm Lines: 131?, 132? Total Colons: 2 -..code\modules\mob\living\carbon\human\examine.dm Lines: 48?, 55?, 62?, 69?, 76?, 83?, 90?, 97?, 115?, 122?, 129?, 136? Total Colons: 12 -..code\modules\mob\living\carbon\human\human.dm Lines: 87?, 96?, 192?, 194?, 196?, 200?, 205?, 210?, 215?, 219?, 221?, 223?, 231?, 236?, 241?, 248?, 250?, 252?, 253?, 254?, 324?, 325?, 341?, 563?, 734? Total Colons: 26 -..code\modules\mob\living\carbon\human\human_attackalien.dm Lines: 10? Total Colons: 1 -..code\modules\mob\living\carbon\human\inventory.dm Lines: 223?, 234?, 238?, 246?, 250?, 254? Total Colons: 6 -..code\modules\mob\living\carbon\human\species.dm Lines: 115?, 117?, 126?, 329?, 673? Total Colons: 5 -..code\modules\mob\living\carbon\human\update_icons.dm Lines: 112?, 186?, 479? Total Colons: 4 -..code\modules\mob\living\carbon\human\whisper.dm Lines: 43? Total Colons: 1 -..code\modules\mob\living\carbon\monkey\emote.dm Lines: 60? Total Colons: 1 -..code\modules\mob\living\silicon\silicon.dm Lines: 129, 324? Total Colons: 2 -..code\modules\mob\living\silicon\ai\ai.dm Lines: 255?, 280?, 281?, 341?, 530?, 532?, 585?, 593? Total Colons: 9 -..code\modules\mob\living\silicon\ai\life.dm Lines: 73, 75, 78, 80, 96, 97, 121, 145, 150, 166 Total Colons: 10 -..code\modules\mob\living\silicon\ai\say.dm Lines: 15? Total Colons: 2 -..code\modules\mob\living\silicon\ai\freelook\eye.dm Lines: 106? Total Colons: 1 -..code\modules\mob\living\silicon\pai\pai.dm Lines: 161, 181 Total Colons: 2 -..code\modules\mob\living\silicon\pai\software.dm Lines: 220?, 277?, 279?, 281?, 317?, 410?, 415?, 422?, 434, 434?, 435, 436, 436?, 437, 437?, 438, 438?, 439, 439?, 440, 442, 443, 444, 445, 446, 550, 557? Total Colons: 29 -..code\modules\mob\living\silicon\robot\examine.dm Lines: 29?, 31? Total Colons: 2 -..code\modules\mob\living\silicon\robot\inventory.dm Lines: 54, 62, 70 Total Colons: 3 -..code\modules\mob\living\silicon\robot\laws.dm Lines: 47? Total Colons: 1 -..code\modules\mob\living\silicon\robot\life.dm Lines: 173, 175, 177 Total Colons: 3 -..code\modules\mob\living\silicon\robot\robot.dm Lines: 259?, 393?, 492?, 545?, 806?, 1034? Total Colons: 8 -..code\modules\mob\living\simple_animal\parrot.dm Lines: 412?, 414? Total Colons: 2 -..code\modules\mob\living\simple_animal\worm.dm Lines: 74? Total Colons: 1 -..code\modules\mob\living\simple_animal\friendly\drone\interaction.dm Lines: 103? Total Colons: 2 -..code\modules\mob\living\simple_animal\friendly\drone\verbs.dm Lines: 25? Total Colons: 1 -..code\modules\mob\living\simple_animal\friendly\drone\_drone.dm Lines: 123?, 130?, 137?, 144? Total Colons: 4 -..code\modules\mob\living\simple_animal\hostile\hostile.dm Lines: 255, 256 Total Colons: 4 -..code\modules\mob\living\simple_animal\morph\morph.dm Lines: 183? Total Colons: 1 -..code\modules\mob\living\simple_animal\slime\death.dm Lines: 15? Total Colons: 1 -..code\modules\mob\living\simple_animal\slime\life.dm Lines: 190? Total Colons: 1 -..code\modules\mob\living\simple_animal\slime\powers.dm Lines: 75? Total Colons: 1 -..code\modules\mob\living\simple_animal\slime\slime.dm Lines: 79?, 80?, 90? Total Colons: 3 -..code\modules\mob\new_player\new_player.dm Lines: 27, 29, 44?, 69?, 73? Total Colons: 5 -..code\modules\mob\new_player\poll.dm Lines: 12?, 29?, 478? Total Colons: 3 -..code\modules\nano\JSON Reader.dm Lines: 71 Total Colons: 2 -..code\modules\nano\nanoui.dm Lines: 304? Total Colons: 1 -..code\modules\ninja\admin_ninja_verbs.dm Lines: 30, 32 Total Colons: 2 -..code\modules\ninja\ninja_event.dm Lines: 141? Total Colons: 1 -..code\modules\ninja\suit\gloves.dm Lines: 80?, 87? Total Colons: 2 -..code\modules\ninja\suit\mask.dm Lines: 116?, 129?, 132?, 139? Total Colons: 4 -..code\modules\ninja\suit\ninjaDrainAct.dm Lines: 128?, 159? Total Colons: 2 -..code\modules\ninja\suit\suit.dm Lines: 75?, 79?, 116?, 172? Total Colons: 4 -..code\modules\ninja\suit\suit_attackby.dm Lines: 10?, 12?, 19? Total Colons: 3 -..code\modules\ninja\suit\suit_initialisation.dm Lines: 84 Total Colons: 1 -..code\modules\ninja\suit\n_suit_verbs\energy_net_nets.dm Lines: 64, 65, 112?, 131 Total Colons: 4 -..code\modules\ninja\suit\n_suit_verbs\ninja_stars.dm Lines: 12? Total Colons: 1 -..code\modules\paperwork\filingcabinet.dm Lines: 57? Total Colons: 1 -..code\modules\paperwork\folders.dm Lines: 43? Total Colons: 1 -..code\modules\paperwork\paper.dm Lines: 86? Total Colons: 1 -..code\modules\paperwork\paperbin.dm Lines: 97? Total Colons: 1 -..code\modules\paperwork\photocopier.dm Lines: 123?, 264?, 268? Total Colons: 5 -..code\modules\paperwork\photography.dm Lines: 66?, 67?, 79?, 183, 184, 189, 190, 217, 217?, 219, 219? Total Colons: 14 -..code\modules\power\apc.dm Lines: 128?, 129?, 133, 148, 199?, 201?, 202?, 262?, 454?, 469?, 474, 647, 647?, 664?, 671?, 715?, 838, 839, 840, 1184, 1221? Total Colons: 25 -..code\modules\power\cable.dm Lines: 108?, 293?, 564? Total Colons: 3 -..code\modules\power\generator.dm Lines: 117? Total Colons: 2 -..code\modules\power\gravitygenerator.dm Lines: 230?, 250?, 258?, 264?, 279?, 280?, 287? Total Colons: 7 -..code\modules\power\lighting.dm Lines: 261?, 440? Total Colons: 2 -..code\modules\power\port_gen.dm Lines: 89?, 273? Total Colons: 2 -..code\modules\power\smes.dm Lines: 57, 419? Total Colons: 4 -..code\modules\power\solar.dm Lines: 388?, 391? Total Colons: 2 -..code\modules\power\turbine.dm Lines: 308?, 365?, 367?, 369? Total Colons: 5 -..code\modules\power\antimatter\control.dm Lines: 267? Total Colons: 1 -..code\modules\power\antimatter\shielding.dm Lines: 119 Total Colons: 1 -..code\modules\power\singularity\collector.dm Lines: 44?, 45?, 46?, 98? Total Colons: 6 -..code\modules\power\singularity\emitter.dm Lines: 252? Total Colons: 1 -..code\modules\power\singularity\singularity.dm Lines: 117?, 236? Total Colons: 2 -..code\modules\power\singularity\particle_accelerator\particle.dm Lines: 42 Total Colons: 1 -..code\modules\power\singularity\particle_accelerator\particle_accelerator.dm Lines: 364 Total Colons: 1 -..code\modules\power\singularity\particle_accelerator\particle_control.dm Lines: 215?, 216?, 217? Total Colons: 6 -..code\modules\procedural mapping\mapGenerator.dm Lines: 153? Total Colons: 1 -..code\modules\projectiles\ammunition.dm Lines: 29?, 30?, 155? Total Colons: 3 -..code\modules\projectiles\gun.dm Lines: 108?, 110?, 310? Total Colons: 3 -..code\modules\projectiles\ammunition\magazines.dm Lines: 173? Total Colons: 1 -..code\modules\projectiles\guns\magic\wand.dm Lines: 25? Total Colons: 1 -..code\modules\projectiles\guns\projectile\automatic.dm Lines: 28?, 109?, 127?, 160?, 165?, 250? Total Colons: 11 -..code\modules\projectiles\guns\projectile\launchers.dm Lines: 49? Total Colons: 1 -..code\modules\projectiles\guns\projectile\pistol.dm Lines: 15?, 36? Total Colons: 3 -..code\modules\projectiles\guns\projectile\shotgun.dm Lines: 30?, 63?, 114?, 282? Total Colons: 4 -..code\modules\projectiles\guns\projectile\toy.dm Lines: 33? Total Colons: 1 -..code\modules\reagents\Chemistry-Machinery.dm Lines: 85?, 89, 90, 97, 330?, 350?, 367?, 368?, 512?, 551?, 665?, 705?, 708?, 788, 867?, 910?, 1248?, 1286?, 1508?, 1510?, 1511?, 1512? Total Colons: 24 -..code\modules\reagents\Chemistry-Recipes.dm Lines: 46? Total Colons: 1 -..code\modules\reagents\reagent_containers.dm Lines: 64? Total Colons: 1 -..code\modules\reagents\Chemistry-Reagents\Consumable-Reagents\Food-Reagents.dm Lines: 331 Total Colons: 2 -..code\modules\reagents\reagent_containers\spray.dm Lines: 97?, 98?, 99?, 177? Total Colons: 4 -..code\modules\recycling\disposal-construction.dm Lines: 86?, 91? Total Colons: 2 -..code\modules\recycling\disposal-structures.dm Lines: 240? Total Colons: 1 -..code\modules\recycling\disposal-unit.dm Lines: 82? Total Colons: 1 -..code\modules\recycling\sortingmachinery.dm Lines: 217? Total Colons: 1 -..code\modules\research\experimentor.dm Lines: 253? Total Colons: 1 -..code\modules\research\message_server.dm Lines: 130? Total Colons: 2 -..code\modules\shuttle\shuttle.dm Lines: 266?, 270?, 515?, 522?, 547?, 564? Total Colons: 8 -..code\modules\surgery\organs\augments_internal.dm Lines: 33?, 76?, 77?, 94? Total Colons: 4 -..code\modules\telesci\telesci_computer.dm Lines: 46?, 122?, 269? Total Colons: 4 -..code\modules\tooltip\tooltip.dm Lines: 90? Total Colons: 1 -..code\modules\vehicles\VehicleBase.dm Lines: 101?, 103?, 105?, 107? Total Colons: 4 -..code\modules\vehicles\VehicleClickInteractions.dm Lines: 128?, 157?, 186?, 214?, 252?, 254?, 257?, 259?, 262?, 264?, 267?, 269?, 272?, 274? Total Colons: 14 -..code\modules\vehicles\VehicleDefense.dm Lines: 31? Total Colons: 1 -..code\orphaned procs\dbcore.dm Lines: 79? Total Colons: 5 -..code\orphaned procs\statistics.dm Lines: 63, 64, 98, 99 Total Colons: 4 -..code\_onclick\other_mobs.dm Lines: 89 Total Colons: 1 -..code\_onclick\hud\action.dm Lines: 184? Total Colons: 1 -..code\_onclick\hud\alien.dm Lines: 90? Total Colons: 1 -..code\_onclick\hud\alien_larva.dm Lines: 16? Total Colons: 1 -..code\_onclick\hud\human.dm Lines: 59? Total Colons: 1 -..code\_onclick\hud\monkey.dm Lines: 17? Total Colons: 1 -..code\__DATASTRUCTURES\priority_queue.dm Lines: 33? Total Colons: 1 -..code\__DATASTRUCTURES\stacks.dm Lines: 29? Total Colons: 1 -..code\__HELPERS\game.dm Lines: 216? Total Colons: 1 -..code\__HELPERS\icons.dm Lines: 216?, 233?, 386?, 389?, 392?, 425?, 439?, 456?, 526?, 557?, 559?, 601?, 607?, 635?, 636?, 637?, 638?, 715, 752, 757, 762, 763, 764, 765, 774, 786, 787, 809?, 828?, 839? Total Colons: 38 -..code\__HELPERS\icon_smoothing.dm Lines: 176?, 178? Total Colons: 2 -..code\__HELPERS\lists.dm Lines: 201?, 206?, 214? Total Colons: 3 -..code\__HELPERS\maths.dm Lines: 13?, 18?, 35?, 39? Total Colons: 4 -..code\__HELPERS\mobs.dm Lines: 137?, 139?, 140? Total Colons: 11 -..code\__HELPERS\names.dm Lines: 63?, 174? Total Colons: 3 -..code\__HELPERS\sanitize_values.dm Lines: 34? Total Colons: 1 -..code\__HELPERS\text.dm Lines: 157?, 350? Total Colons: 2 -..code\__HELPERS\type2type.dm Lines: 68?, 143?, 381? Total Colons: 5 -..code\__HELPERS\unsorted.dm Lines: 41?, 573, 904, 991? Total Colons: 4 -..code\__HELPERS\sorts\__main.dm Lines: 2?, 57?, 391, 491, 585? Total Colons: 5 -433/1564 files have colons in them \ No newline at end of file From c2d335b7da7bdc1a956b124174ec800f8cac81bb Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 16 Aug 2017 17:50:28 -0500 Subject: [PATCH 205/230] [s] Fixes MG turret firing while the user is stunned/cuffed/unconscious --- code/game/objects/structures/manned_turret.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/game/objects/structures/manned_turret.dm b/code/game/objects/structures/manned_turret.dm index 323927af77..7448aa128f 100644 --- a/code/game/objects/structures/manned_turret.dm +++ b/code/game/objects/structures/manned_turret.dm @@ -85,7 +85,7 @@ calculated_projectile_vars = calculate_projectile_angle_and_pixel_offsets(controller, C.mouseParams) /obj/machinery/manned_turret/proc/direction_track(mob/user, atom/targeted) - if(user.stat != CONSCIOUS) + if(user.incapacitated()) return setDir(get_dir(src,targeted)) user.setDir(dir) @@ -125,7 +125,7 @@ /obj/machinery/manned_turret/proc/checkfire(atom/targeted_atom, mob/user) target = targeted_atom - if(target == user || target == get_turf(src)) + if(target == user || user.incapacitated() || target == get_turf(src)) return if(world.time < cooldown) if(!warned && world.time > (cooldown - cooldown_duration + rate_of_fire*number_of_shots)) // To capture the window where one is done firing @@ -143,6 +143,8 @@ addtimer(CALLBACK(src, /obj/machinery/manned_turret/.proc/fire_helper, user), i*rate_of_fire) /obj/machinery/manned_turret/proc/fire_helper(mob/user) + if(user.incapacitated()) + return update_positioning() //REFRESH MOUSE TRACKING!! var/turf/targets_from = get_turf(src) if(QDELETED(target)) From afbe4be50c6fe7c6301f017a87944593ef8f0f30 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 16 Aug 2017 17:51:33 -0500 Subject: [PATCH 206/230] Moves most of world.dm --- code/__DEFINES/server_tools.dm | 5 +- code/_compile_options.dm | 2 - code/game/world.dm | 292 +++++++++++++++++++++++++++++++ code/world.dm | 3 + code/world.dm.rej | 309 ++++++++++++++++++++++++++++++++- tgstation.dme | 1 + 6 files changed, 600 insertions(+), 12 deletions(-) create mode 100644 code/game/world.dm diff --git a/code/__DEFINES/server_tools.dm b/code/__DEFINES/server_tools.dm index 4624c5914f..a4afa58a87 100644 --- a/code/__DEFINES/server_tools.dm +++ b/code/__DEFINES/server_tools.dm @@ -4,6 +4,9 @@ #define IRC_STATUS_THROTTLE 5 +#define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round + //This makes sure that a single person can only spam 3 reopens and 3 closes before being ignored + //keep these in sync with TGS3 #define SERVICE_WORLD_PARAM "server_service" #define SERVICE_PR_TEST_JSON "..\\..\\prtestjob.json" @@ -17,7 +20,7 @@ #define SERVICE_CMD_NAME_CHECK "namecheck" #define SERVICE_CMD_ADMIN_WHO "adminwho" -//#define SERVICE_CMD_PARAM_KEY //defined in __compile_options.dm +#define SERVICE_CMD_PARAM_KEY "serviceCommsKey" #define SERVICE_CMD_PARAM_COMMAND "command" #define SERVICE_CMD_PARAM_MESSAGE "message" #define SERVICE_CMD_PARAM_TARGET "target" diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 964c956eca..a669f1b4f5 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -69,8 +69,6 @@ #error You need version 511 or higher #endif - #define SERVICE_CMD_PARAM_KEY "serviceCommsKey" - //Update this whenever the db schema changes //make sure you add an update to the schema_version stable in the db changelog #define DB_MAJOR_VERSION 3 diff --git a/code/game/world.dm b/code/game/world.dm new file mode 100644 index 0000000000..f5b45a46ca --- /dev/null +++ b/code/game/world.dm @@ -0,0 +1,292 @@ +/world/New() + log_world("World loaded at [time_stamp()]") + + SetupExternalRSC() + + GLOB.config_error_log = GLOB.world_href_log = GLOB.world_runtime_log = GLOB.world_attack_log = GLOB.world_game_log = file("data/logs/config_error.log") //temporary file used to record errors with loading config, moved to log directory once logging is set bl + + make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) + + config = new + + CheckSchemaVersion() + SetRoundID() + + SetupLogs() + + if(!RunningService()) //tgs2 support + GLOB.revdata.DownloadPRDetails() + + load_motd() + load_admins() + LoadVerbs(/datum/verbs/menu) + if(config.usewhitelist) + load_whitelist() + LoadBans() + + GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 + + Master.Initialize(10, FALSE) + + if(config.irc_announce_new_game) + IRCBroadcast("New round starting on [SSmapping.config.map_name]!") + +/world/proc/SetupExternalRSC() +#if (PRELOAD_RSC == 0) + external_rsc_urls = world.file2list("config/external_rsc_urls.txt","\n") + var/i=1 + while(i<=external_rsc_urls.len) + if(external_rsc_urls[i]) + i++ + else + external_rsc_urls.Cut(i,i+1) +#endif + +/world/proc/CheckSchemaVersion() + if(config.sql_enabled) + if(SSdbcore.Connect()) + log_world("Database connection established.") + var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_revision")] ORDER BY date DESC LIMIT 1") + query_db_version.Execute() + if(query_db_version.NextRow()) + var/db_major = text2num(query_db_version.item[1]) + var/db_minor = text2num(query_db_version.item[2]) + if(db_major < DB_MAJOR_VERSION || db_minor < DB_MINOR_VERSION) + message_admins("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") + log_sql("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") + else + message_admins("Could not get schema version from database") + else + log_world("Your server failed to establish a connection with the database.") + +/world/proc/SetRoundID() + if(config.sql_enabled) + if(SSdbcore.Connect()) + var/datum/DBQuery/query_round_start = SSdbcore.NewQuery("INSERT INTO [format_table_name("round")] (start_datetime, server_ip, server_port) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]')") + query_round_start.Execute() + var/datum/DBQuery/query_round_last_id = SSdbcore.NewQuery("SELECT LAST_INSERT_ID()") + query_round_last_id.Execute() + if(query_round_last_id.NextRow()) + GLOB.round_id = query_round_last_id.item[1] + +/world/proc/SetupLogs() + GLOB.log_directory = "data/logs/[time2text(world.realtime, "YYYY/MM/DD")]/round-" + if(GLOB.round_id) + GLOB.log_directory += "[GLOB.round_id]" + else + GLOB.log_directory += "[replacetext(time_stamp(), ":", ".")]" + GLOB.world_game_log = file("[GLOB.log_directory]/game.log") + GLOB.world_attack_log = file("[GLOB.log_directory]/attack.log") + GLOB.world_runtime_log = file("[GLOB.log_directory]/runtime.log") + GLOB.world_href_log = file("[GLOB.log_directory]/hrefs.html") + WRITE_FILE(GLOB.world_game_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------") + WRITE_FILE(GLOB.world_attack_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------") + WRITE_FILE(GLOB.world_runtime_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------") + GLOB.changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently + if(fexists(GLOB.config_error_log)) + fcopy(GLOB.config_error_log, "[GLOB.log_directory]/config_error.log") + fdel(GLOB.config_error_log) + + if(GLOB.round_id) + log_game("Round ID: [GLOB.round_id]") + +/world/Topic(T, addr, master, key) + var/list/input = params2list(T) + + var/pinging = ("ping" in input) + var/playing = ("players" in input) + + if(!pinging && !playing && config && config.log_world_topic) + WRITE_FILE(GLOB.world_game_log, "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]") + + if(input[SERVICE_CMD_PARAM_KEY]) + return ServiceCommand(input) + var/key_valid = (global.comms_allowed && input["key"] == global.comms_key) + + if(pinging) + var/x = 1 + for (var/client/C in GLOB.clients) + x++ + return x + + else if(playing) + var/n = 0 + for(var/mob/M in GLOB.player_list) + if(M.client) + n++ + return n + + else if("ircstatus" in input) //tgs2 support + var/static/last_irc_status = 0 + if(world.time - last_irc_status < 50) + return + var/list/adm = get_admin_counts() + var/list/allmins = adm["total"] + var/status = "Admins: [allmins.len] (Active: [english_list(adm["present"])] AFK: [english_list(adm["afk"])] Stealth: [english_list(adm["stealth"])] Skipped: [english_list(adm["noflags"])]). " + status += "Players: [GLOB.clients.len] (Active: [get_active_player_count(0,1,0)]). Mode: [SSticker.mode.name]." + send2irc("Status", status) + last_irc_status = world.time + + else if("status" in input) + var/list/s = list() + s["version"] = GLOB.game_version + s["mode"] = GLOB.master_mode + s["respawn"] = config ? GLOB.abandon_allowed : 0 + s["enter"] = GLOB.enter_allowed + s["vote"] = config.allow_vote_mode + s["ai"] = config.allow_ai + s["host"] = host ? host : null + s["active_players"] = get_active_player_count() + s["players"] = GLOB.clients.len + s["revision"] = GLOB.revdata.commit + s["revision_date"] = GLOB.revdata.date + + var/list/adm = get_admin_counts() + var/list/presentmins = adm["present"] + var/list/afkmins = adm["afk"] + s["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho + s["gamestate"] = SSticker.current_state + + s["map_name"] = SSmapping.config.map_name + + if(key_valid && SSticker.HasRoundStarted()) + s["real_mode"] = SSticker.mode.name + // Key-authed callers may know the truth behind the "secret" + + s["security_level"] = get_security_level() + s["round_duration"] = SSticker ? round((world.time-SSticker.round_start_time)/10) : 0 + // Amount of world's ticks in seconds, useful for calculating round duration + + if(SSshuttle && SSshuttle.emergency) + s["shuttle_mode"] = SSshuttle.emergency.mode + // Shuttle status, see /__DEFINES/stat.dm + s["shuttle_timer"] = SSshuttle.emergency.timeLeft() + // Shuttle timer, in seconds + + return list2params(s) + + else if("announce" in input) + if(!key_valid) + return "Bad Key" + else + AnnouncePR(input["announce"], json_decode(input["payload"])) + + else if("crossmessage" in input) + if(!key_valid) + return + else + if(input["crossmessage"] == "Ahelp") + relay_msg_admins("HELP: [input["source"]] [input["message_sender"]]: [input["message"]]") + if(input["crossmessage"] == "Comms_Console") + minor_announce(input["message"], "Incoming message from [input["message_sender"]]") + for(var/obj/machinery/computer/communications/CM in GLOB.machines) + CM.overrideCooldown() + if(input["crossmessage"] == "News_Report") + minor_announce(input["message"], "Breaking Update From [input["message_sender"]]") + + else if("adminmsg" in input) //tgs2 support + if(!key_valid) + return "Bad Key" + else + return IrcPm(input["adminmsg"],input["msg"],input["sender"]) + + else if("namecheck" in input) //tgs2 support + if(!key_valid) + return "Bad Key" + else + log_admin("IRC Name Check: [input["sender"]] on [input["namecheck"]]") + message_admins("IRC name checking on [input["namecheck"]] from [input["sender"]]") + return keywords_lookup(input["namecheck"],1) + else if("adminwho" in input) //tgs2 support + if(!key_valid) + return "Bad Key" + else + return ircadminwho() + else if("server_hop" in input) + show_server_hop_transfer_screen(input["server_hop"]) + +/world/proc/AnnouncePR(announcement, list/payload) + var/static/list/PRcounts = list() //PR id -> number of times announced this round + var/id = "[payload["pull_request"]["id"]]" + if(!PRcounts[id]) + PRcounts[id] = 1 + else + ++PRcounts[id] + if(PRcounts[id] > PR_ANNOUNCEMENTS_PER_ROUND) + return + + var/final_composed = "PR: [announcement]" + for(var/client/C in GLOB.clients) + C.AnnouncePR(final_composed) + +/world/Reboot(reason = 0, fast_track = FALSE) + ServiceReboot() //handles alternative actions if necessary + if (reason || fast_track) //special reboot, do none of the normal stuff + if (usr) + log_admin("[key_name(usr)] Has requested an immediate world restart via client side debugging tools") + message_admins("[key_name_admin(usr)] Has requested an immediate world restart via client side debugging tools") + to_chat(world, "Rebooting World immediately due to host request") + else + to_chat(world, "Rebooting world...") + Master.Shutdown() //run SS shutdowns + log_world("World rebooted at [time_stamp()]") + ..() + +/world/proc/load_motd() + GLOB.join_motd = file2text("config/motd.txt") + "
    " + GLOB.revdata.GetTestMergeInfo() + +/world/proc/update_status() + var/s = "" + + if (config && config.server_name) + s += "[config.server_name] — " + + s += "[station_name()]"; + s += " (" + s += "" //Change this to wherever you want the hub to link to. + s += "Default" //Replace this with something else. Or ever better, delete it and uncomment the game version. + s += "" + s += ")" + + var/list/features = list() + + if(GLOB.master_mode) + features += GLOB.master_mode + + if (!GLOB.enter_allowed) + features += "closed" + + features += GLOB.abandon_allowed ? "respawn" : "no respawn" + + if (config && config.allow_vote_mode) + features += "vote" + + if (config && config.allow_ai) + features += "AI allowed" + + var/n = 0 + for (var/mob/M in GLOB.player_list) + if (M.client) + n++ + + if (n > 1) + features += "~[n] players" + else if (n > 0) + features += "~[n] player" + + if (!host && config && config.hostedby) + features += "hosted by [config.hostedby]" + + if (features) + s += ": [jointext(features, ", ")]" + + status = s + +/world/proc/update_hub_visibility(new_visibility) + if(new_visibility == GLOB.hub_visibility) + return + GLOB.hub_visibility = new_visibility + if(GLOB.hub_visibility) + hub_password = "kMZy3U5jJHSiBQjr" + else + hub_password = "SORRYNOPASSWORD" diff --git a/code/world.dm b/code/world.dm index a0c5ae43f8..7e17e579b1 100644 --- a/code/world.dm +++ b/code/world.dm @@ -1,3 +1,6 @@ +//This file is just for the necessary /world definition +//Try looking in game/world.dm + /world mob = /mob/dead/new_player turf = /turf/open/space/basic diff --git a/code/world.dm.rej b/code/world.dm.rej index cde7698a21..e82c17e503 100644 --- a/code/world.dm.rej +++ b/code/world.dm.rej @@ -1,10 +1,301 @@ diff a/code/world.dm b/code/world.dm (rejected hunks) -@@ -59,7 +59,7 @@ - if(config.sql_enabled) - if(SSdbcore.Connect()) - log_world("Database connection established.") -- var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_version")] ORDER BY date DESC LIMIT 1") -+ var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_revision")] ORDER BY date DESC LIMIT 1") - query_db_version.Execute() - if(query_db_version.NextRow()) - var/db_major = query_db_version.item[1] +@@ -10,299 +13,3 @@ + #ifdef GC_FAILURE_HARD_LOOKUP + loop_checks = FALSE + #endif +- +-/world/New() +- log_world("World loaded at [time_stamp()]") +- +- SetupExternalRSC() +- +- GLOB.config_error_log = GLOB.world_href_log = GLOB.world_runtime_log = GLOB.world_attack_log = GLOB.world_game_log = file("data/logs/config_error.log") //temporary file used to record errors with loading config, moved to log directory once logging is set bl +- +- make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) +- +- config = new +- +- CheckSchemaVersion() +- SetRoundID() +- +- SetupLogs() +- +- if(!RunningService()) //tgs2 support +- GLOB.revdata.DownloadPRDetails() +- +- load_motd() +- load_admins() +- LoadVerbs(/datum/verbs/menu) +- if(config.usewhitelist) +- load_whitelist() +- LoadBans() +- +- GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 +- +- Master.Initialize(10, FALSE) +- +- if(config.irc_announce_new_game) +- IRCBroadcast("New round starting on [SSmapping.config.map_name]!") +- +-/world/proc/SetupExternalRSC() +-#if (PRELOAD_RSC == 0) +- external_rsc_urls = world.file2list("config/external_rsc_urls.txt","\n") +- var/i=1 +- while(i<=external_rsc_urls.len) +- if(external_rsc_urls[i]) +- i++ +- else +- external_rsc_urls.Cut(i,i+1) +-#endif +- +-/world/proc/CheckSchemaVersion() +- if(config.sql_enabled) +- if(SSdbcore.Connect()) +- log_world("Database connection established.") +- var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_revision")] ORDER BY date DESC LIMIT 1") +- query_db_version.Execute() +- if(query_db_version.NextRow()) +- var/db_major = text2num(query_db_version.item[1]) +- var/db_minor = text2num(query_db_version.item[2]) +- if(db_major < DB_MAJOR_VERSION || db_minor < DB_MINOR_VERSION) +- message_admins("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") +- log_sql("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") +- else +- message_admins("Could not get schema version from database") +- else +- log_world("Your server failed to establish a connection with the database.") +- +-/world/proc/SetRoundID() +- if(config.sql_enabled) +- if(SSdbcore.Connect()) +- var/datum/DBQuery/query_round_start = SSdbcore.NewQuery("INSERT INTO [format_table_name("round")] (start_datetime, server_ip, server_port) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]')") +- query_round_start.Execute() +- var/datum/DBQuery/query_round_last_id = SSdbcore.NewQuery("SELECT LAST_INSERT_ID()") +- query_round_last_id.Execute() +- if(query_round_last_id.NextRow()) +- GLOB.round_id = query_round_last_id.item[1] +- +-/world/proc/SetupLogs() +- GLOB.log_directory = "data/logs/[time2text(world.realtime, "YYYY/MM/DD")]/round-" +- if(GLOB.round_id) +- GLOB.log_directory += "[GLOB.round_id]" +- else +- GLOB.log_directory += "[replacetext(time_stamp(), ":", ".")]" +- GLOB.world_game_log = file("[GLOB.log_directory]/game.log") +- GLOB.world_attack_log = file("[GLOB.log_directory]/attack.log") +- GLOB.world_runtime_log = file("[GLOB.log_directory]/runtime.log") +- GLOB.world_href_log = file("[GLOB.log_directory]/hrefs.html") +- GLOB.world_game_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" +- GLOB.world_attack_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" +- GLOB.world_runtime_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" +- GLOB.changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently +- if(fexists(GLOB.config_error_log)) +- fcopy(GLOB.config_error_log, "[GLOB.log_directory]/config_error.log") +- fdel(GLOB.config_error_log) +- +- if(GLOB.round_id) +- log_game("Round ID: [GLOB.round_id]") +- +-/world/Topic(T, addr, master, key) +- var/list/input = params2list(T) +- +- var/pinging = ("ping" in input) +- var/playing = ("players" in input) +- +- if(!pinging && !playing && config && config.log_world_topic) +- GLOB.world_game_log << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]" +- +- if(input[SERVICE_CMD_PARAM_KEY]) +- return ServiceCommand(input) +- var/key_valid = (global.comms_allowed && input["key"] == global.comms_key) +- +- if(pinging) +- var/x = 1 +- for (var/client/C in GLOB.clients) +- x++ +- return x +- +- else if(playing) +- var/n = 0 +- for(var/mob/M in GLOB.player_list) +- if(M.client) +- n++ +- return n +- +- else if("ircstatus" in input) //tgs2 support +- var/static/last_irc_status = 0 +- if(world.time - last_irc_status < 50) +- return +- var/list/adm = get_admin_counts() +- var/list/allmins = adm["total"] +- var/status = "Admins: [allmins.len] (Active: [english_list(adm["present"])] AFK: [english_list(adm["afk"])] Stealth: [english_list(adm["stealth"])] Skipped: [english_list(adm["noflags"])]). " +- status += "Players: [GLOB.clients.len] (Active: [get_active_player_count(0,1,0)]). Mode: [SSticker.mode.name]." +- send2irc("Status", status) +- last_irc_status = world.time +- +- else if("status" in input) +- var/list/s = list() +- s["version"] = GLOB.game_version +- s["mode"] = GLOB.master_mode +- s["respawn"] = config ? GLOB.abandon_allowed : 0 +- s["enter"] = GLOB.enter_allowed +- s["vote"] = config.allow_vote_mode +- s["ai"] = config.allow_ai +- s["host"] = host ? host : null +- s["active_players"] = get_active_player_count() +- s["players"] = GLOB.clients.len +- s["revision"] = GLOB.revdata.commit +- s["revision_date"] = GLOB.revdata.date +- +- var/list/adm = get_admin_counts() +- var/list/presentmins = adm["present"] +- var/list/afkmins = adm["afk"] +- s["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho +- s["gamestate"] = SSticker.current_state +- +- s["map_name"] = SSmapping.config.map_name +- +- if(key_valid && SSticker.HasRoundStarted()) +- s["real_mode"] = SSticker.mode.name +- // Key-authed callers may know the truth behind the "secret" +- +- s["security_level"] = get_security_level() +- s["round_duration"] = SSticker ? round((world.time-SSticker.round_start_time)/10) : 0 +- // Amount of world's ticks in seconds, useful for calculating round duration +- +- if(SSshuttle && SSshuttle.emergency) +- s["shuttle_mode"] = SSshuttle.emergency.mode +- // Shuttle status, see /__DEFINES/stat.dm +- s["shuttle_timer"] = SSshuttle.emergency.timeLeft() +- // Shuttle timer, in seconds +- +- return list2params(s) +- +- else if("announce" in input) +- if(!key_valid) +- return "Bad Key" +- else +- AnnouncePR(input["announce"], json_decode(input["payload"])) +- +- else if("crossmessage" in input) +- if(!key_valid) +- return +- else +- if(input["crossmessage"] == "Ahelp") +- relay_msg_admins("HELP: [input["source"]] [input["message_sender"]]: [input["message"]]") +- if(input["crossmessage"] == "Comms_Console") +- minor_announce(input["message"], "Incoming message from [input["message_sender"]]") +- for(var/obj/machinery/computer/communications/CM in GLOB.machines) +- CM.overrideCooldown() +- if(input["crossmessage"] == "News_Report") +- minor_announce(input["message"], "Breaking Update From [input["message_sender"]]") +- +- else if("adminmsg" in input) //tgs2 support +- if(!key_valid) +- return "Bad Key" +- else +- return IrcPm(input["adminmsg"],input["msg"],input["sender"]) +- +- else if("namecheck" in input) //tgs2 support +- if(!key_valid) +- return "Bad Key" +- else +- log_admin("IRC Name Check: [input["sender"]] on [input["namecheck"]]") +- message_admins("IRC name checking on [input["namecheck"]] from [input["sender"]]") +- return keywords_lookup(input["namecheck"],1) +- else if("adminwho" in input) //tgs2 support +- if(!key_valid) +- return "Bad Key" +- else +- return ircadminwho() +- else if("server_hop" in input) +- show_server_hop_transfer_screen(input["server_hop"]) +- +-#define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round +- //This makes sure that a single person can only spam 3 reopens and 3 closes before being ignored +- +-/world/proc/AnnouncePR(announcement, list/payload) +- var/static/list/PRcounts = list() //PR id -> number of times announced this round +- var/id = "[payload["pull_request"]["id"]]" +- if(!PRcounts[id]) +- PRcounts[id] = 1 +- else +- ++PRcounts[id] +- if(PRcounts[id] > PR_ANNOUNCEMENTS_PER_ROUND) +- return +- +- var/final_composed = "PR: [announcement]" +- for(var/client/C in GLOB.clients) +- C.AnnouncePR(final_composed) +- +-/world/Reboot(reason = 0, fast_track = FALSE) +- ServiceReboot() //handles alternative actions if necessary +- if (reason || fast_track) //special reboot, do none of the normal stuff +- if (usr) +- log_admin("[key_name(usr)] Has requested an immediate world restart via client side debugging tools") +- message_admins("[key_name_admin(usr)] Has requested an immediate world restart via client side debugging tools") +- to_chat(world, "Rebooting World immediately due to host request") +- else +- to_chat(world, "Rebooting world...") +- Master.Shutdown() //run SS shutdowns +- log_world("World rebooted at [time_stamp()]") +- ..() +- +-/world/proc/load_motd() +- GLOB.join_motd = file2text("config/motd.txt") + "
    " + GLOB.revdata.GetTestMergeInfo() +- +-/world/proc/update_status() +- var/s = "" +- +- if (config && config.server_name) +- s += "[config.server_name] — " +- +- s += "[station_name()]"; +- s += " (" +- s += "" //Change this to wherever you want the hub to link to. +- s += "Default" //Replace this with something else. Or ever better, delete it and uncomment the game version. +- s += "" +- s += ")" +- +- var/list/features = list() +- +- if(GLOB.master_mode) +- features += GLOB.master_mode +- +- if (!GLOB.enter_allowed) +- features += "closed" +- +- features += GLOB.abandon_allowed ? "respawn" : "no respawn" +- +- if (config && config.allow_vote_mode) +- features += "vote" +- +- if (config && config.allow_ai) +- features += "AI allowed" +- +- var/n = 0 +- for (var/mob/M in GLOB.player_list) +- if (M.client) +- n++ +- +- if (n > 1) +- features += "~[n] players" +- else if (n > 0) +- features += "~[n] player" +- +- if (!host && config && config.hostedby) +- features += "hosted by [config.hostedby]" +- +- if (features) +- s += ": [jointext(features, ", ")]" +- +- status = s +- +-/world/proc/update_hub_visibility(new_visibility) +- if(new_visibility == GLOB.hub_visibility) +- return +- GLOB.hub_visibility = new_visibility +- if(GLOB.hub_visibility) +- hub_password = "kMZy3U5jJHSiBQjr" +- else +- hub_password = "SORRYNOPASSWORD" diff --git a/tgstation.dme b/tgstation.dme index 23ffe1fef1..1475d2335c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -375,6 +375,7 @@ #include "code\game\shuttle_engines.dm" #include "code\game\skincmd.dm" #include "code\game\sound.dm" +#include "code\game\world.dm" #include "code\game\area\ai_monitored.dm" #include "code\game\area\areas.dm" #include "code\game\area\Space_Station_13_areas.dm" From e5b7eefffe4f785ccb12ec96fe34325f0de0d008 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 16 Aug 2017 17:53:39 -0500 Subject: [PATCH 207/230] Nerfs L6 SAW Hollow Point Bullets from -10 armour penetration to -60 armour penetration. --- code/modules/projectiles/projectile/bullets.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 54e0ed7e12..f7aedb00fc 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -356,7 +356,7 @@ /obj/item/projectile/bullet/saw/hollow damage = 60 - armour_penetration = -10 + armour_penetration = -60 /obj/item/projectile/bullet/saw/ap damage = 40 From 9176bbc1298791095a68fe26f324df3ba626bfd2 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 16 Aug 2017 17:59:48 -0500 Subject: [PATCH 208/230] Removes meth explosion syringes --- code/modules/reagents/chemistry/recipes/pyrotechnics.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index dc361467a7..dcafef247b 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -140,7 +140,7 @@ name = "Meth explosion" id = "methboom1" results = list("methboom1" = 1) - required_temp = 380 //slightly above the meth mix time. + required_temp = 420 //high enough to not blow up in the meth syringes required_reagents = list("methamphetamine" = 1) strengthdiv = 6 modifier = 1 @@ -154,7 +154,7 @@ /datum/chemical_reaction/reagent_explosion/methsplosion/methboom2 required_reagents = list("diethylamine" = 1, "iodine" = 1, "phosphorus" = 1, "hydrogen" = 1) //diethylamine is often left over from mixing the ephedrine. - required_temp = 300 //room temperature, chilling it even a little will prevent the explosion + required_temp = 420 results = list("methboom1" = 4) // this is ugly. Sorry goof. /datum/chemical_reaction/sorium From 4bd5e318c2d87a608c544ba154255c031443f1a4 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 16 Aug 2017 18:00:54 -0500 Subject: [PATCH 209/230] Blobs can now sense loving cuddles! --- code/game/gamemodes/blob/theblob.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 9bce7319f8..f6cdd64bb6 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -24,6 +24,7 @@ M.changeNext_move(CLICK_CD_MELEE) var/a = pick("gently stroke", "nuzzle", "affectionatly pet", "cuddle") M.visible_message("[M] [a]s [src]!", "You [a] [src]!") + to_chat(overmind, "[M] [a]s you!") playsound(src, 'sound/effects/blobattack.ogg', 50, 1) //SQUISH SQUISH From 27d466bda4e9bec2bb8a2b3baecedcf653afe32f Mon Sep 17 00:00:00 2001 From: Haresay <15344918+sirelgate@users.noreply.github.com> Date: Wed, 16 Aug 2017 17:25:55 -0600 Subject: [PATCH 210/230] handsidefix --- icons/mob/human_parts_greyscale.dmi | Bin 44523 -> 44541 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index 225a61e143b85612f8f56d55d20e3067344ce213..a06f490fa754582313a8aa464ebfae100989215d 100644 GIT binary patch delta 2165 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 Date: Wed, 16 Aug 2017 19:40:40 -0500 Subject: [PATCH 211/230] Update world.dm --- code/world.dm | 296 +------------------------------------------------- 1 file changed, 1 insertion(+), 295 deletions(-) diff --git a/code/world.dm b/code/world.dm index 7e17e579b1..955d19c6c4 100644 --- a/code/world.dm +++ b/code/world.dm @@ -1,3 +1,4 @@ + //This file is just for the necessary /world definition //Try looking in game/world.dm @@ -13,298 +14,3 @@ #ifdef GC_FAILURE_HARD_LOOKUP loop_checks = FALSE #endif - -/world/New() - log_world("World loaded at [time_stamp()]") - - SetupExternalRSC() - - GLOB.config_error_log = GLOB.world_href_log = GLOB.world_runtime_log = GLOB.world_attack_log = GLOB.world_game_log = file("data/logs/config_error.log") //temporary file used to record errors with loading config, moved to log directory once logging is set bl - - make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) - - config = new - - CheckSchemaVersion() - SetRoundID() - - SetupLogs() - - if(!RunningService()) //tgs2 support - GLOB.revdata.DownloadPRDetails() - - load_motd() - load_admins() - LoadVerbs(/datum/verbs/menu) - if(config.usewhitelist) - load_whitelist() - LoadBans() - - GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 - - Master.Initialize(10, FALSE) - - if(config.irc_announce_new_game) - IRCBroadcast("New round starting on [SSmapping.config.map_name]!") - -/world/proc/SetupExternalRSC() -#if (PRELOAD_RSC == 0) - external_rsc_urls = world.file2list("config/external_rsc_urls.txt","\n") - var/i=1 - while(i<=external_rsc_urls.len) - if(external_rsc_urls[i]) - i++ - else - external_rsc_urls.Cut(i,i+1) -#endif - -/world/proc/CheckSchemaVersion() - if(config.sql_enabled) - if(SSdbcore.Connect()) - var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_revision")] ORDER BY date DESC LIMIT 1") - query_db_version.Execute() - if(query_db_version.NextRow()) - var/db_major = text2num(query_db_version.item[1]) - var/db_minor = text2num(query_db_version.item[2]) - if(db_major < DB_MAJOR_VERSION || db_minor < DB_MINOR_VERSION) - message_admins("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") - log_sql("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") - else - message_admins("Could not get schema version from database") - else - log_world("Your server failed to establish a connection with the database.") - -/world/proc/SetRoundID() - if(config.sql_enabled) - if(SSdbcore.Connect()) - var/datum/DBQuery/query_round_start = SSdbcore.NewQuery("INSERT INTO [format_table_name("round")] (start_datetime, server_ip, server_port) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]')") - query_round_start.Execute() - var/datum/DBQuery/query_round_last_id = SSdbcore.NewQuery("SELECT LAST_INSERT_ID()") - query_round_last_id.Execute() - if(query_round_last_id.NextRow()) - GLOB.round_id = query_round_last_id.item[1] - -/world/proc/SetupLogs() - GLOB.log_directory = "data/logs/[time2text(world.realtime, "YYYY/MM/DD")]/round-" - if(GLOB.round_id) - GLOB.log_directory += "[GLOB.round_id]" - else - GLOB.log_directory += "[replacetext(time_stamp(), ":", ".")]" - GLOB.world_game_log = file("[GLOB.log_directory]/game.log") - GLOB.world_attack_log = file("[GLOB.log_directory]/attack.log") - GLOB.world_runtime_log = file("[GLOB.log_directory]/runtime.log") - GLOB.world_href_log = file("[GLOB.log_directory]/hrefs.html") - GLOB.world_game_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" - GLOB.world_attack_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" - GLOB.world_runtime_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" - GLOB.changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently - if(fexists(GLOB.config_error_log)) - fcopy(GLOB.config_error_log, "[GLOB.log_directory]/config_error.log") - fdel(GLOB.config_error_log) - - if(GLOB.round_id) - log_game("Round ID: [GLOB.round_id]") - -/world/Topic(T, addr, master, key) - var/list/input = params2list(T) - - var/pinging = ("ping" in input) - var/playing = ("players" in input) - - if(!pinging && !playing && config && config.log_world_topic) - GLOB.world_game_log << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]" - - if(input[SERVICE_CMD_PARAM_KEY]) - return ServiceCommand(input) - var/key_valid = (global.comms_allowed && input["key"] == global.comms_key) - - if(pinging) - var/x = 1 - for (var/client/C in GLOB.clients) - x++ - return x - - else if(playing) - var/n = 0 - for(var/mob/M in GLOB.player_list) - if(M.client) - n++ - return n - - else if("ircstatus" in input) //tgs2 support - var/static/last_irc_status = 0 - if(world.time - last_irc_status < 50) - return - var/list/adm = get_admin_counts() - var/list/allmins = adm["total"] - var/status = "Admins: [allmins.len] (Active: [english_list(adm["present"])] AFK: [english_list(adm["afk"])] Stealth: [english_list(adm["stealth"])] Skipped: [english_list(adm["noflags"])]). " - status += "Players: [GLOB.clients.len] (Active: [get_active_player_count(0,1,0)]). Mode: [SSticker.mode.name]." - send2irc("Status", status) - last_irc_status = world.time - - else if("status" in input) - var/list/s = list() - s["version"] = GLOB.game_version - s["mode"] = GLOB.master_mode - s["respawn"] = config ? GLOB.abandon_allowed : 0 - s["enter"] = GLOB.enter_allowed - s["vote"] = config.allow_vote_mode - s["ai"] = config.allow_ai - s["host"] = host ? host : null - s["active_players"] = get_active_player_count() - s["players"] = GLOB.clients.len - s["revision"] = GLOB.revdata.commit - s["revision_date"] = GLOB.revdata.date - - var/list/adm = get_admin_counts() - var/list/presentmins = adm["present"] - var/list/afkmins = adm["afk"] - s["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho - s["gamestate"] = SSticker.current_state - - s["map_name"] = SSmapping.config.map_name - - if(key_valid && SSticker.HasRoundStarted()) - s["real_mode"] = SSticker.mode.name - // Key-authed callers may know the truth behind the "secret" - - s["security_level"] = get_security_level() - s["round_duration"] = SSticker ? round((world.time-SSticker.round_start_time)/10) : 0 - // Amount of world's ticks in seconds, useful for calculating round duration - - if(SSshuttle && SSshuttle.emergency) - s["shuttle_mode"] = SSshuttle.emergency.mode - // Shuttle status, see /__DEFINES/stat.dm - s["shuttle_timer"] = SSshuttle.emergency.timeLeft() - // Shuttle timer, in seconds - - return list2params(s) - - else if("announce" in input) - if(!key_valid) - return "Bad Key" - else - AnnouncePR(input["announce"], json_decode(input["payload"])) - - else if("crossmessage" in input) - if(!key_valid) - return - else - if(input["crossmessage"] == "Ahelp") - relay_msg_admins("HELP: [input["source"]] [input["message_sender"]]: [input["message"]]") - if(input["crossmessage"] == "Comms_Console") - minor_announce(input["message"], "Incoming message from [input["message_sender"]]") - for(var/obj/machinery/computer/communications/CM in GLOB.machines) - CM.overrideCooldown() - if(input["crossmessage"] == "News_Report") - minor_announce(input["message"], "Breaking Update From [input["message_sender"]]") - - else if("adminmsg" in input) //tgs2 support - if(!key_valid) - return "Bad Key" - else - return IrcPm(input["adminmsg"],input["msg"],input["sender"]) - - else if("namecheck" in input) //tgs2 support - if(!key_valid) - return "Bad Key" - else - log_admin("IRC Name Check: [input["sender"]] on [input["namecheck"]]") - message_admins("IRC name checking on [input["namecheck"]] from [input["sender"]]") - return keywords_lookup(input["namecheck"],1) - else if("adminwho" in input) //tgs2 support - if(!key_valid) - return "Bad Key" - else - return ircadminwho() - else if("server_hop" in input) - show_server_hop_transfer_screen(input["server_hop"]) - -#define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round - //This makes sure that a single person can only spam 3 reopens and 3 closes before being ignored - -/world/proc/AnnouncePR(announcement, list/payload) - var/static/list/PRcounts = list() //PR id -> number of times announced this round - var/id = "[payload["pull_request"]["id"]]" - if(!PRcounts[id]) - PRcounts[id] = 1 - else - ++PRcounts[id] - if(PRcounts[id] > PR_ANNOUNCEMENTS_PER_ROUND) - return - - var/final_composed = "PR: [announcement]" - for(var/client/C in GLOB.clients) - C.AnnouncePR(final_composed) - -/world/Reboot(reason = 0, fast_track = FALSE) - ServiceReboot() //handles alternative actions if necessary - if (reason || fast_track) //special reboot, do none of the normal stuff - if (usr) - log_admin("[key_name(usr)] Has requested an immediate world restart via client side debugging tools") - message_admins("[key_name_admin(usr)] Has requested an immediate world restart via client side debugging tools") - to_chat(world, "Rebooting World immediately due to host request") - else - to_chat(world, "Rebooting world...") - Master.Shutdown() //run SS shutdowns - log_world("World rebooted at [time_stamp()]") - ..() - -/world/proc/load_motd() - GLOB.join_motd = file2text("config/motd.txt") + "
    " + GLOB.revdata.GetTestMergeInfo() - -/world/proc/update_status() - var/s = "" - - if (config && config.server_name) - s += "[config.server_name] — " - - s += "[station_name()]"; - s += " (" - s += "" //Change this to wherever you want the hub to link to. - s += "Default" //Replace this with something else. Or ever better, delete it and uncomment the game version. - s += "" - s += ")" - - var/list/features = list() - - if(GLOB.master_mode) - features += GLOB.master_mode - - if (!GLOB.enter_allowed) - features += "closed" - - features += GLOB.abandon_allowed ? "respawn" : "no respawn" - - if (config && config.allow_vote_mode) - features += "vote" - - if (config && config.allow_ai) - features += "AI allowed" - - var/n = 0 - for (var/mob/M in GLOB.player_list) - if (M.client) - n++ - - if (n > 1) - features += "~[n] players" - else if (n > 0) - features += "~[n] player" - - if (!host && config && config.hostedby) - features += "hosted by [config.hostedby]" - - if (features) - s += ": [jointext(features, ", ")]" - - status = s - -/world/proc/update_hub_visibility(new_visibility) - if(new_visibility == GLOB.hub_visibility) - return - GLOB.hub_visibility = new_visibility - if(GLOB.hub_visibility) - hub_password = "kMZy3U5jJHSiBQjr" - else - hub_password = "SORRYNOPASSWORD" From 68830dac71c32afbe5ece2ff0d8ff04b3cb33ace Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 16 Aug 2017 20:02:24 -0500 Subject: [PATCH 212/230] Changes smes, cells, cell charger, terminals and apcs icons --- code/game/machinery/cell_charger.dm | 23 ++++++++++------------- code/modules/power/apc.dm | 4 ++-- icons/obj/power.dmi | Bin 36328 -> 36770 bytes 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 1e72707e86..2fe15a99d8 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -2,7 +2,7 @@ name = "cell charger" desc = "It charges power cells." icon = 'icons/obj/power.dmi' - icon_state = "ccharger0" + icon_state = "ccharger" anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 5 @@ -12,19 +12,16 @@ var/chargelevel = -1 /obj/machinery/cell_charger/proc/updateicon() - icon_state = "ccharger[charging ? 1 : 0]" + cut_overlays() - if(charging && !(stat & (BROKEN|NOPOWER))) - var/newlevel = round(charging.percent() * 4 / 100) - - if(chargelevel != newlevel) - chargelevel = newlevel - - cut_overlays() - add_overlay("ccharger-o[newlevel]") - - else - cut_overlays() + if(charging) + add_overlay(image(charging.icon, charging.icon_state)) + add_overlay("ccharger-on") + if(!(stat & (BROKEN|NOPOWER))) + var/newlevel = round(charging.percent() * 4 / 100) + if(chargelevel != newlevel) + chargelevel = newlevel + add_overlay("ccharger-o[newlevel]") /obj/machinery/cell_charger/examine(mob/user) ..() diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 6b5203ce84..d01516e312 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -120,8 +120,8 @@ if(auto_name) name = "\improper [get_area(src)] APC" - pixel_x = (src.tdir & 3)? 0 : (src.tdir == 4 ? 24 : -25) - pixel_y = (src.tdir & 3)? (src.tdir ==1 ? 23 : -24) : 0 + pixel_x = (src.tdir & 3)? 0 : (src.tdir == 4 ? 26 : -27) + pixel_y = (src.tdir & 3)? (src.tdir == 1 ? 25 : -25) : 0 if (building) area = get_area(src) opened = 1 diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index 6b2ae5535153f3404d30a653b05a81f6027872f7..e1604715ac5f9cbbe4a7f99346ce50df630942af 100644 GIT binary patch literal 36770 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 V<(D5j#Q7P3z|+;wWt~$(696vg+pz!u From 5a1123e09b9c55f256fb506c3d54fb4b4cbedd8a Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 16 Aug 2017 21:05:49 -0500 Subject: [PATCH 213/230] New telecomm sprites --- icons/obj/machines/telecomms.dmi | Bin 23547 -> 20556 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/machines/telecomms.dmi b/icons/obj/machines/telecomms.dmi index 7f5f05e3aff7341313167493b78a2e3c00d08b44..4a6988f88e4c96aecd5ba92ec5dca2ecaf2aa7fc 100644 GIT binary patch literal 20556 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 literal 23547 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 Date: Wed, 16 Aug 2017 21:50:13 -0500 Subject: [PATCH 214/230] Automatic changelog generation for PR #2402 [ci skip] --- html/changelogs/AutoChangeLog-pr-2402.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2402.yml diff --git a/html/changelogs/AutoChangeLog-pr-2402.yml b/html/changelogs/AutoChangeLog-pr-2402.yml new file mode 100644 index 0000000000..0ef97907fd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2402.yml @@ -0,0 +1,5 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - imageadd: "Nanotrasen redesigned the area power controllers!" + - imageadd: "Thanks Xhuis for the contrast tweak on APCs" From 0c957efee137844b8ff94cdd7680048e610b2a2f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 17 Aug 2017 09:18:58 -0500 Subject: [PATCH 215/230] The station explosion cinematic now uses the old "far explosion" sound --- code/controllers/subsystem/ticker.dm | 16 ++++++++-------- sound/effects/explosion_distant.ogg | Bin 0 -> 15355 bytes 2 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 sound/effects/explosion_distant.ogg diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index c7c50f4d04..e07d2db001 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -300,7 +300,7 @@ SUBSYSTEM_DEF(ticker) if("nuclear emergency") //Nuke wasn't on station when it blew up flick("intro_nuke",cinematic) sleep(35) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) flick("station_intact_fade_red",cinematic) cinematic.icon_state = "summary_nukefail" @@ -329,13 +329,13 @@ SUBSYSTEM_DEF(ticker) else flick("intro_nuke",cinematic) sleep(35) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) if(NUKE_MISS_STATION || NUKE_SYNDICATE_BASE) //nuke was nowhere nearby //TODO: a really distant explosion animation sleep(50) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) actually_blew_up = station_missed == NUKE_SYNDICATE_BASE //don't kill everyone on station if it detonated off station else //station was destroyed @@ -346,28 +346,28 @@ SUBSYSTEM_DEF(ticker) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red",cinematic) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) cinematic.icon_state = "summary_nukewin" if("AI malfunction") //Malf (screen,explosion,summary) flick("intro_malf",cinematic) sleep(76) flick("station_explode_fade_red",cinematic) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) //TODO: If we ever decide to actually detonate the vault bomb cinematic.icon_state = "summary_malf" if("blob") //Station nuked (nuke,explosion,summary) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red",cinematic) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) //TODO: no idea what this case could be cinematic.icon_state = "summary_selfdes" if("cult") //Station nuked (nuke,explosion,summary) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red",cinematic) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) //TODO: no idea what this case could be cinematic.icon_state = "summary_cult" if("no_core") //Nuke failed to detonate as it had no core @@ -381,7 +381,7 @@ SUBSYSTEM_DEF(ticker) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red", cinematic) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) cinematic.icon_state = "summary_selfdes" //If its actually the end of the round, wait for it to end. diff --git a/sound/effects/explosion_distant.ogg b/sound/effects/explosion_distant.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d9976c51fe7e1e24872450112074dad799ef4902 GIT binary patch literal 15355 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 KF(0Bt!2bbLssK^| literal 0 HcmV?d00001 From 2a2e4b2af4c70d0142175607343ae468aef865ae Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 17 Aug 2017 09:19:05 -0500 Subject: [PATCH 216/230] Improves attack logging of pulling / grabbing / throwing --- code/modules/mob/living/carbon/carbon.dm | 1 + code/modules/mob/living/living.dm | 2 ++ code/modules/mob/living/living_defense.dm | 7 +++++-- code/modules/mob/mob.dm | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 8f5720164e..feef638fdc 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -171,6 +171,7 @@ if(thrown_thing) visible_message("[src] has thrown [thrown_thing].") + add_logs(src, thrown_thing, "has thrown") newtonian_move(get_dir(target, src)) thrown_thing.throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed, src) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index edf54e547a..9684e44ac9 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -550,6 +550,7 @@ if(!restrained(ignore_grab = 1) && pulledby) visible_message("[src] resists against [pulledby]'s grip!") resist_grab() + add_logs(pulledby, src, "resisted grab") return //unbuckling yourself @@ -587,6 +588,7 @@ if(pulledby.grab_state) if(prob(30/pulledby.grab_state)) visible_message("[src] has broken free of [pulledby]'s grip!") + add_logs(pulledby, src, "broke grab") pulledby.stop_pulling() return 0 if(moving_resist && client) //we resisted by trying to move diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 578eaec93e..01dca7f00e 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -89,7 +89,7 @@ var/armor = run_armor_check(zone, "melee", "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].",I.armour_penetration) apply_damage(I.throwforce, dtype, zone, armor) if(I.thrownby) - add_logs(I.thrownby, src, "hit", I) + add_logs(I.thrownby, src, "threw and hit", I) else return 1 else @@ -150,6 +150,7 @@ var/grab_upgrade_time = 30 visible_message("[user] starts to tighten [user.p_their()] grip on [src]!", \ "[user] starts to tighten [user.p_their()] grip on you!") + add_logs(user, src, "attempted to strangle", addition="grab") if(!do_mob(user, src, grab_upgrade_time)) return 0 if(!user.pulling || user.pulling != src || user.grab_state != old_grab_state || user.a_intent != INTENT_GRAB) @@ -157,18 +158,20 @@ user.grab_state++ switch(user.grab_state) if(GRAB_AGGRESSIVE) - add_logs(user, src, "grabbed", addition="aggressively") + add_logs(user, src, "grabbed", addition="aggressive grab") visible_message("[user] has grabbed [src] aggressively!", \ "[user] has grabbed [src] aggressively!") drop_all_held_items() stop_pulling() if(GRAB_NECK) + add_logs(user, src, "grabbed", addition="neck grab") visible_message("[user] has grabbed [src] by the neck!",\ "[user] has grabbed you by the neck!") update_canmove() //we fall down if(!buckled && !density) Move(user.loc) if(GRAB_KILL) + add_logs(user, src, "strangled", addition="grab") visible_message("[user] is strangling [src]!", \ "[user] is strangling you!") update_canmove() //we fall down diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 26b22d964e..d612611ea6 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -327,6 +327,7 @@ if(AM.pulledby) if(!supress_message) visible_message("[src] has pulled [AM] from [AM.pulledby]'s grip.") + add_logs(AM, AM.pulledby, "pulled from", src) AM.pulledby.stop_pulling() //an object can't be pulled by two mobs at once. pulling = AM @@ -337,6 +338,7 @@ if(ismob(AM)) var/mob/M = AM + add_logs(src, M, "grabbed", addition="passive grab") if(!supress_message) visible_message("[src] has grabbed [M] passively!") if(!iscarbon(src)) From 72cf7083f6c765291b895f4a52c98c01f514c345 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 17 Aug 2017 09:19:09 -0500 Subject: [PATCH 217/230] Fixes leathercrafting recipies trying to build on the floor. --- code/game/objects/items/stacks/sheets/leather.dm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 285225d6f1..1bd66b6a38 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -12,7 +12,7 @@ novariants = FALSE GLOBAL_LIST_INIT(human_recipes, list( \ - new/datum/stack_recipe("bloated human costume", /obj/item/clothing/suit/hooded/bloated_human, 5, on_floor = 1), \ + new/datum/stack_recipe("bloated human costume", /obj/item/clothing/suit/hooded/bloated_human, 5), \ )) /obj/item/stack/sheet/animalhide/human/Initialize(mapload, new_amount, merge = TRUE) @@ -33,7 +33,7 @@ GLOBAL_LIST_INIT(human_recipes, list( \ icon_state = "sheet-corgi" GLOBAL_LIST_INIT(corgi_recipes, list ( \ - new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3, on_floor = 1), \ + new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3), \ )) /obj/item/stack/sheet/animalhide/corgi/Initialize(mapload, new_amount, merge = TRUE) @@ -53,8 +53,8 @@ GLOBAL_LIST_INIT(corgi_recipes, list ( \ icon_state = "sheet-monkey" GLOBAL_LIST_INIT(monkey_recipes, list ( \ - new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1, on_floor = 1), \ - new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/monkeysuit, 2, on_floor = 1), \ + new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1), \ + new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/monkeysuit, 2), \ )) /obj/item/stack/sheet/animalhide/monkey/Initialize(mapload, new_amount, merge = TRUE) @@ -74,8 +74,8 @@ GLOBAL_LIST_INIT(monkey_recipes, list ( \ icon_state = "sheet-xeno" GLOBAL_LIST_INIT(xeno_recipes, list ( \ - new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/xenos, 1, on_floor = 1), \ - new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/xenos, 2, on_floor = 1), \ + new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/xenos, 1), \ + new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/xenos, 2), \ )) /obj/item/stack/sheet/animalhide/xeno/Initialize(mapload, new_amount, merge = TRUE) @@ -161,7 +161,7 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \ GLOBAL_LIST_INIT(sinew_recipes, list ( \ - new/datum/stack_recipe("sinew restraints", /obj/item/weapon/restraints/handcuffs/sinew, 1, on_floor = 1), \ + new/datum/stack_recipe("sinew restraints", /obj/item/weapon/restraints/handcuffs/sinew, 1), \ )) /obj/item/stack/sheet/sinew/Initialize(mapload, new_amount, merge = TRUE) From 51a615f5c6cb82cf0511d39c8458fc8fedc16a85 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 17 Aug 2017 10:07:39 -0500 Subject: [PATCH 218/230] Automatic changelog generation for PR #2399 [ci skip] --- html/changelogs/AutoChangeLog-pr-2399.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2399.yml diff --git a/html/changelogs/AutoChangeLog-pr-2399.yml b/html/changelogs/AutoChangeLog-pr-2399.yml new file mode 100644 index 0000000000..2d162a5edf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2399.yml @@ -0,0 +1,4 @@ +author: "More Robust Than You" +delete-after: True +changes: + - rscadd: "Blobs can now sense when they're being cuddled!" From 3b55852c5ee76753485430fc258d36054bb285b4 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 17 Aug 2017 10:08:14 -0500 Subject: [PATCH 219/230] Automatic changelog generation for PR #2408 [ci skip] --- html/changelogs/AutoChangeLog-pr-2408.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2408.yml diff --git a/html/changelogs/AutoChangeLog-pr-2408.yml b/html/changelogs/AutoChangeLog-pr-2408.yml new file mode 100644 index 0000000000..92f33a9292 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2408.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - soundadd: "The station's explosion now uses a new (or old) sound." From 7ab92ade3c9a29aa1068fe6dc8b48e54695a4ef7 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 18 Aug 2017 11:13:45 -0500 Subject: [PATCH 220/230] Update lavaland_surface_xeno_nest.dmm --- _maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm index d139ee641b..fed94448d0 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm @@ -269,7 +269,7 @@ "W" = ( /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/xenonest) From 3c91fba8e32157334fdf614e509e0cabfa157a4a Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 18 Aug 2017 11:16:30 -0500 Subject: [PATCH 221/230] Update turf.dm --- code/game/turfs/turf.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index b204406d05..0a7951c075 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -162,6 +162,12 @@ /turf/Entered(atom/movable/AM) if(explosion_level && AM.ex_check(explosion_id)) AM.ex_act(explosion_level) + + // If an opaque movable atom moves around we need to potentially update visibility. + if (AM.opacity) + has_opaque_atom = TRUE // Make sure to do this before reconsider_lights(), incase we're on instant updates. Guaranteed to be on in this case. + reconsider_lights() + /turf/open/Entered(atom/movable/AM) ..() From db3622ca128c1435e3faecafc2057d9d5768d774 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 18 Aug 2017 11:18:33 -0500 Subject: [PATCH 222/230] Update signs.dm --- code/game/objects/structures/signs.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 9a25da9019..f6b044a0da 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -321,6 +321,6 @@ icon_state = "direction_bridge" /obj/structure/sign/logo - name = "station logo" - desc = "A sign: SPACE STATION 13." - icon_state = "ss13sign-1" \ No newline at end of file + name = "nanotrasen logo" + desc = "The Nanotrasen corporate logo." + icon_state = "ss13sign-1" From 8a7c0e657f4d111207bdf09b760d78f9086ab113 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 18 Aug 2017 11:20:36 -0500 Subject: [PATCH 223/230] Update powers.dm --- code/game/gamemodes/blob/powers.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index deef4367e0..36707d9791 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -175,7 +175,7 @@ blobber << 'sound/effects/attackblob.ogg' to_chat(blobber, "You are a blobbernaut!") to_chat(blobber, "You are powerful, hard to kill, and slowly regenerate near nodes and cores, but will slowly die if not near the blob or if the factory that made you is killed.") - to_chat(blobber, "You can communicate with other blobbernauts and GLOB.overminds via :b") + to_chat(blobber, "You can communicate with other blobbernauts and overminds via :b") to_chat(blobber, "Your overmind's blob reagent is: [blob_reagent_datum.name]!") to_chat(blobber, "The [blob_reagent_datum.name] reagent [blob_reagent_datum.shortdesc ? "[blob_reagent_datum.shortdesc]" : "[blob_reagent_datum.description]"]") if(blobber) From b4431f384011a4452fb6eb078424b5907aeac990 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 18 Aug 2017 13:41:38 -0500 Subject: [PATCH 224/230] Automatic changelog generation for PR #2362 [ci skip] --- html/changelogs/AutoChangeLog-pr-2362.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2362.yml diff --git a/html/changelogs/AutoChangeLog-pr-2362.yml b/html/changelogs/AutoChangeLog-pr-2362.yml new file mode 100644 index 0000000000..5bdc603b06 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2362.yml @@ -0,0 +1,4 @@ +author: "More Robust Than You" +delete-after: True +changes: + - bugfix: "Fixes a typo in the blobbernaut spawn text" From 2c33ef3ab080a2f1381834c66acb9002632cdae0 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 18 Aug 2017 13:56:47 -0500 Subject: [PATCH 225/230] Update component.dm --- code/datums/components/component.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/datums/components/component.dm b/code/datums/components/component.dm index 5e25a581f8..4d5fae2115 100644 --- a/code/datums/components/component.dm +++ b/code/datums/components/component.dm @@ -117,8 +117,6 @@ . += current_type current_type = type2parent(current_type) -/datum/var/list/datum_components //special typecache of /datum/component - /datum/proc/SendSignal(sigtype, ...) var/list/comps = datum_components . = FALSE From 61d7ad4e82621ba90616cd7e690cc26d65e1086b Mon Sep 17 00:00:00 2001 From: Cactus Date: Fri, 18 Aug 2017 15:35:08 -0400 Subject: [PATCH 226/230] Stylesheet and Wolves (#2389) * organizes the mam_bodyparts file by species * Revert "organizes the mam_bodyparts file by species" This reverts commit ab692973ba20c282becf0d69514b1ac03d5447f8. * stylesheet fix * wolf sprite edits * conflict resolution * wolf accessories readded --- .../browserassets/css/browserOutput.css | 3 +++ .../new_player/sprite_accessories_Citadel.dm | 6 +++--- icons/mob/mam_body_markings.dmi | Bin 45530 -> 45337 bytes icons/mob/mam_bodyparts.dmi | Bin 38375 -> 38666 bytes interface/stylesheet.dm | 2 ++ 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/modules/goonchat/browserassets/css/browserOutput.css b/code/modules/goonchat/browserassets/css/browserOutput.css index 7c42972a10..36640db74e 100644 --- a/code/modules/goonchat/browserassets/css/browserOutput.css +++ b/code/modules/goonchat/browserassets/css/browserOutput.css @@ -371,6 +371,9 @@ h1.alert, h2.alert {color: #000000;} .swarmer {color: #2C75FF;} .resonate {color: #298F85;} +.love {color: #FF69Bf;} +.lovebold {color: #FF69Bf; font-weight: bold;} + .connectionClosed, .fatalError {background: red; color: white; padding: 5px;} .connectionClosed.restored {background: green;} .internal.boldnshit {color: blue; font-weight: bold;} diff --git a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm index 0b21852a8e..fc99a87eaf 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm @@ -150,8 +150,7 @@ /datum/sprite_accessory/ears/wolf name = "Wolf" icon_state = "wolf" - hasinner = 1 - icon = 'icons/mob/mam_bodyparts.dmi' + extra = 1 /datum/sprite_accessory/tails/human/wolf name = "Wolf" @@ -191,6 +190,7 @@ /datum/sprite_accessory/mam_tails_animated icon = 'icons/mob/mam_bodyparts.dmi' + /datum/sprite_accessory/mam_tails_animated/none name = "None" @@ -436,7 +436,7 @@ /datum/sprite_accessory/mam_ears/wolf name = "Wolf" icon_state = "wolf" - hasinner = 1 + extra = 1 /datum/sprite_accessory/mam_tails/wolf name = "Wolf" diff --git a/icons/mob/mam_body_markings.dmi b/icons/mob/mam_body_markings.dmi index 737fa15c4276828ae4f9b4c2493a2721865494df..fdb97490c85b2cb980f6466df831936b308e4b52 100644 GIT binary patch delta 20882 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 Z;SUJi5^R?*4FV6|1ExpuImXTr{|1u+q4WR% delta 21076 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 diff --git a/icons/mob/mam_bodyparts.dmi b/icons/mob/mam_bodyparts.dmi index c9f1ba70e89616558a049949aea4de052e6d5938..7de9b40734b0bd70fe918db43421a168f150f464 100644 GIT binary patch literal 38666 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 Iu310*Z&WXiv;Y7A literal 38375 zcmce;2|Sc>zc+l5>>({w7_CyWXU~X)h*D%C`)!zA=%gLj3s0bA^T3q z48}6da=ri2ecsP~-t(O2oag?W=k=MHYs_5Nf4hFa?{EA5=hZE3wFAt@nIQ-|prL+E z7lP=(+kKOa^x%*~VT%C&@cZ61aKHA@&C1oz+1<{`5rVvvzQ)~jIxfcXqWe#N0cWPb z;Ukd&vvnU2+G(cW5?u1X+|HJBq*&9z={(t?P} zA{i* z+fU@{BJW=J9;junl$Daym9O(|d%*~je`x$aH%c+?`3CxCG zwyA2bCq@lS5A3PW)(;L<*dEx>O#R`g zxT)ipnlgW5-fl#)|NfF#HFK=oF@452hLh+e#|~ZcS+-j zeM0B!Qw(mEAC+~PFY*O_40hy~M9bWBiv4}1=|P%#ouGQFF5?3C@5jYa%tp#_Q8y*| zn^opG&}%QphF)B7mlMxwF!@%(rhY!}SgvG!Mr6!6onuj4>6<>+#C&cWJ@Ao*%wpKw z)bvak7k-Ah;yMcik3b2xE-{vz(K9h;?G_nN%Bt98ezWiHLo-BoLC?bS zazDdPyPOqDBnO5XmX<4v4zQb{^;|=iS!)ZI)!^!z~W!~|q-7;FfF>)A^BH>4fH#42QQ#E{q*bRLlxWUS4<8^->fsgyW&lCw1E~-I9af^H9+>&5 zmqGjAQeXe$Wp2N58_OQCmhp}l_bM!SKO!=wotM%s^aQ)YX9uU=u=DzSF&)7T_r>(G z#|aMxSdh?Kj$|cb_qjRGSV$(FqKz5<^-H~SEu(_myW%U#9sK6a8&Pi70n?;I_V4|B zu3B{cqoHk%-V}n`rAp!SjeRqy$|T~`HDr|uctwdz z(t)IbgW~?x>A2yp=H})b*b6yEY=0XMgExfMcM)^L>|t=! z(63)If6SA$1rh@|o~JcGyNd8qZyEmz(-i)|KMxqOXi#tS2B_C)({O z(i9snV)}@O1d}8WTjQaLC#QDmMCfKv`W0I=E2wIdVKcCB^g;FSSPj{X=Mr37DXO6z zwDaRzCv9Pk8@9wAPaRoC?n}f|yY5W>bp*8Vf}#bf`&_BdA7j}~ni-VTzqLc@sAPHj z3ES`J@nnX7ALy+3*SbWOti`T8S?;S`a|is1Az=Ga8S_0AMv>=o!Ea|v(T28r)6nt5 zy;`E6N0E_ZUFl@5cOOMQvIkp`bfWMiCsOxkS!{Q}^5gykW2)pueNjq8tQ+D7rEjix z%M(h{&FEty5{ZTmG+|xfq!?p*=iA2csTFj%Y8lEzosB*yz1GCm6f9{N>~0H3^-x;+ zD2oQyi4$-X(W81fae4q}M_uq^)CDiWU=UJLQVkRer82bW@S4vc!8J6xlvb)3)$S{$ zMl6fnLZi3P+W+B=aO_t8(#6&i`{lIq%kyc|?ZPh_EjgX&&6*~i__9|PtjvZ{yM@C6 ziu38@48(uygBh8BC?+t&{}b8@8u?e0{6Ai1@rZVEOS5blXm2f5ZT0pWMMt+QW>d70 zBb8$Do+4460(9iSeY-R#e>3p>U~iMusnXGcMgtZ-uW++AG&f)8W~I*{6Ycwio`h=z z{sjTi-z=$P?P+67SCNx}0ZNR!Gz=R-;+-Q{t3%K>JR88P%orN6ihq;1n zEPLz`Kn%@T;pZHDKLr^IdsJj>PY2bq4%cW6Cv$AT^HzcoQVeb|RooG3G|G;JxJ`1OmC z`VI+nFH*C^)wdZ*oz$;izrMTrxBsC6-#FumlfevP#;>Ix%T}m{!G-dWDyOg{T

    B9_81wl5^9X$eXVr>d$%_y<0RU9P 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 SRFWwDr=qB#kbm9$`TqwYxM;cn diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 8576be384b..7ad30fb7b5 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -161,4 +161,6 @@ h1.alert, h2.alert {color: #000000;} .monkey {color: #975032;} .swarmer {color: #2C75FF;} .resonate {color: #298F85;} +.love {color: #FF69Bf;} +.lovebold {color: #FF69Bf; font-weight: bold;} "} From ad8af9f9ecfa86a3274c60d1b7cd748844e53572 Mon Sep 17 00:00:00 2001 From: Cactus Date: Fri, 18 Aug 2017 17:27:07 -0400 Subject: [PATCH 227/230] fixes shark tail color husky ears moved to extra instead of inner, in line with wolf ears --- .../mob/dead/new_player/sprite_accessories_Citadel.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm index fc99a87eaf..ab4b044cb9 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm @@ -122,7 +122,7 @@ /datum/sprite_accessory/tails/human/shark name = "Shark" icon_state = "shark" - color_src = 0 + color_src = MUTCOLORS icon = 'icons/mob/mam_bodyparts.dmi' /datum/sprite_accessory/tails/human/shark/datashark @@ -326,7 +326,6 @@ /datum/sprite_accessory/mam_ears/husky name = "Husky" icon_state = "wolf" - hasinner = 1 icon = 'icons/mob/mam_bodyparts.dmi' extra = 1 @@ -390,7 +389,7 @@ /datum/sprite_accessory/mam_tails/shark name = "Shark" icon_state = "shark" - color_src = 0 + color_src = MUTCOLORS /datum/sprite_accessory/mam_tails_animated/shark name = "Shark" From 45d6ece7a8fa6ceea2e7a3c8264339af9c877143 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 18 Aug 2017 18:57:53 -0500 Subject: [PATCH 228/230] Adds a warning to the traitor panel for the last headrev --- code/datums/mind.dm | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index d943e417e5..a31aab8607 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -400,7 +400,15 @@ if (assigned_role in GLOB.command_positions) text += "HEAD|loyal|employee|headrev|rev" else if (src in SSticker.mode.head_revolutionaries) - text += "head|loyal|employee|HEADREV|rev" + var/last_healthy_headrev = TRUE + for(var/I in SSticker.mode.head_revolutionaries) + if(I == src) + continue + var/mob/M = I + if(M.z == ZLEVEL_STATION && !M.stat) + last_healthy_headrev = FALSE + break + text += "head|loyal|employee|[last_healthy_headrev ? "LAST " : ""]HEADREV|rev" text += "
    Flash: give" var/list/L = current.get_contents() From f7bde6a76a393f93187577fdb8bbd38100ea7100 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 18 Aug 2017 18:59:58 -0500 Subject: [PATCH 229/230] Makes mixing meth dangerous again --- .../food_and_drinks/recipes/food_mixtures.dm | 6 +++--- code/modules/reagents/chemistry/holder.dm | 5 ++--- code/modules/reagents/chemistry/recipes.dm | 2 +- .../modules/reagents/chemistry/recipes/others.dm | 16 ++++++++-------- .../reagents/chemistry/recipes/pyrotechnics.dm | 7 ++++--- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index 17662feb6e..bfa8b8bebd 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -13,7 +13,7 @@ id = "tofu" required_reagents = list("soymilk" = 10) required_catalysts = list("enzyme" = 5) - mob_react=1 + mob_react = FALSE /datum/chemical_reaction/tofu/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -37,7 +37,7 @@ name = "Chocolate Bar" id = "chocolate_bar" required_reagents = list("chocolate_milk" = 4, "sugar" = 2) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/chocolate_bar2/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -91,7 +91,7 @@ name = "synthmeat" id = "synthmeat" required_reagents = list("blood" = 5, "cryoxadone" = 1) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/synthmeat/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index a062d5c614..54d17497f3 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -370,9 +370,8 @@ else if(cached_my_atom.type == C.required_container) matching_container = 1 - if (isliving(cached_my_atom)) //Makes it so certain chemical reactions don't occur in mobs - if (C.mob_react) - return + if (isliving(cached_my_atom) && !C.mob_react) //Makes it so certain chemical reactions don't occur in mobs + return if(!C.required_other) matching_other = 1 diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index c13ff096e4..428c10e24a 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -10,7 +10,7 @@ var/required_other = 0 // an integer required for the reaction to happen var/secondary = 0 // set to nonzero if secondary reaction - var/mob_react = 0 //Determines if a chemical reaction can occur inside a mob + var/mob_react = TRUE //Determines if a chemical reaction can occur inside a mob var/required_temp = 0 var/is_cold_recipe = 0 // Set to 1 if you want the recipe to only react when it's BELOW the required temp. diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 4151a2695e..01195333fb 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -51,7 +51,7 @@ name = "Solid Plasma" id = "solidplasma" required_reagents = list("iron" = 5, "frostoil" = 5, "plasma" = 20) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/plasmasolidification/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -62,7 +62,7 @@ name = "Solid Gold" id = "solidgold" required_reagents = list("frostoil" = 5, "gold" = 20, "iron" = 1) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/goldsolidification/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -80,7 +80,7 @@ id = "soapification" required_reagents = list("liquidgibs" = 10, "lye" = 10) // requires two scooped gib tiles required_temp = 374 - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -92,7 +92,7 @@ id = "candlefication" required_reagents = list("liquidgibs" = 5, "oxygen" = 5) // required_temp = 374 - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/candlefication/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -103,7 +103,7 @@ name = "Meatification" id = "meatification" required_reagents = list("liquidgibs" = 10, "nutriment" = 10, "carbon" = 10) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -436,7 +436,7 @@ name = "Foam" id = "foam" required_reagents = list("fluorosurfactant" = 1, "water" = 1) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -453,7 +453,7 @@ name = "Metal Foam" id = "metalfoam" required_reagents = list("aluminium" = 3, "foaming_agent" = 1, "facid" = 1) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/metalfoam/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -470,7 +470,7 @@ name = "Iron Foam" id = "ironlfoam" required_reagents = list("iron" = 3, "foaming_agent" = 1, "facid" = 1) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index dcafef247b..8ca65a6588 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -140,10 +140,11 @@ name = "Meth explosion" id = "methboom1" results = list("methboom1" = 1) - required_temp = 420 //high enough to not blow up in the meth syringes + required_temp = 380 //slightly above the meth mix time. required_reagents = list("methamphetamine" = 1) strengthdiv = 6 modifier = 1 + mob_react = FALSE /datum/chemical_reaction/reagent_explosion/methsplosion/on_reaction(datum/reagents/holder, created_volume) var/turf/T = get_turf(holder.my_atom) @@ -154,7 +155,7 @@ /datum/chemical_reaction/reagent_explosion/methsplosion/methboom2 required_reagents = list("diethylamine" = 1, "iodine" = 1, "phosphorus" = 1, "hydrogen" = 1) //diethylamine is often left over from mixing the ephedrine. - required_temp = 420 + required_temp = 300 //room temperature, chilling it even a little will prevent the explosion results = list("methboom1" = 4) // this is ugly. Sorry goof. /datum/chemical_reaction/sorium @@ -269,7 +270,7 @@ required_reagents = list("smoke_powder" = 1) required_temp = 374 secondary = 1 - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/smoke_powder_smoke/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) From da6e3d7c8e1d68543f4e4cea043b3ee0f9f3563c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 19 Aug 2017 06:45:50 -0500 Subject: [PATCH 230/230] readds toggle_hear_radio admin verb --- code/modules/admin/admin_verbs.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index a839b35b3c..3276a319db 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -12,6 +12,7 @@ GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault()) /client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/ /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/ /client/proc/secrets, + /client/proc/toggle_hear_radio, /*allows admins to hide all radio output*/ /client/proc/reload_admins, /client/proc/reestablish_db_connection, /*reattempt a connection to the database*/ /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/