diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index bf30b547fe..b79f1c2e59 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -121,7 +121,15 @@ #define COMPONENT_CANCEL_THROW 1 #define COMSIG_MOVABLE_POST_THROW "movable_post_throw" //from base of atom/movable/throw_at(): (datum/thrownthing, spin) #define COMSIG_MOVABLE_Z_CHANGED "movable_ztransit" //from base of atom/movable/onTransitZ(): (old_z, new_z) +#define COMSIG_MOVABLE_SECLUDED_LOCATION "movable_secluded" //called when the movable is placed in an unaccessible area, used for stationloving: () #define COMSIG_MOVABLE_HEAR "movable_hear" //from base of atom/movable/Hear(): (message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + #define HEARING_MESSAGE 1 + #define HEARING_SPEAKER 2 +// #define HEARING_LANGUAGE 3 + #define HEARING_RAW_MESSAGE 4 + /* #define HEARING_RADIO_FREQ 5 + #define HEARING_SPANS 6 + #define HEARING_MESSAGE_MODE 7 */ #define COMSIG_MOVABLE_DISPOSING "movable_disposing" //called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source) #define COMSIG_MOVABLE_TELEPORTED "movable_teleported" //from base of do_teleport(): (channel, turf/origin, turf/destination) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 632e4adef9..f5ea8d835f 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -4,9 +4,9 @@ #define WEIGHT_CLASS_TINY 1 //Usually items smaller then a human hand, ex: Playing Cards, Lighter, Scalpel, Coins/Money #define WEIGHT_CLASS_SMALL 2 //Pockets can hold small and tiny items, ex: Flashlight, Multitool, Grenades, GPS Device #define WEIGHT_CLASS_NORMAL 3 //Standard backpacks can carry tiny, small & normal items, ex: Fire extinguisher, Stunbaton, Gas Mask, Metal Sheets -#define WEIGHT_CLASS_BULKY 4 //Items that can be weilded or equipped but not stored in an inventory, ex: Defibrillator, Backpack, Space Suits -#define WEIGHT_CLASS_HUGE 5 //Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons -#define WEIGHT_CLASS_GIGANTIC 6 //Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe +#define WEIGHT_CLASS_BULKY 4 //Items that can be weilded or equipped but not stored in a normal bag, ex: Defibrillator, Backpack, Space Suits +#define WEIGHT_CLASS_HUGE 5 //Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons - Can not fit in Boh +#define WEIGHT_CLASS_GIGANTIC 6 //Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe - Can not fit in Boh //Inventory depth: limits how many nested storage items you can access directly. //1: stuff in mob, 2: stuff in backpack, 3: stuff in box in backpack, etc diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 1ce5b88945..db13c21c44 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -100,3 +100,8 @@ #define NUKE_OFF_UNLOCKED 1 #define NUKE_ON_TIMING 2 #define NUKE_ON_EXPLODING 3 + + +//these flags are used to tell the DNA modifier if a plant gene cannot be extracted or modified. +#define PLANT_GENE_REMOVABLE (1<<0) +#define PLANT_GENE_EXTRACTABLE (1<<1) \ No newline at end of file diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index ff19976cff..0f1a36d663 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -7,6 +7,8 @@ #define STATUS_EFFECT_REPLACE 2 //if it allows only one, but new instances replace +#define STATUS_EFFECT_REFRESH 3 // if it only allows one, and new instances just instead refresh the timer + /////////// // BUFFS // /////////// @@ -74,6 +76,8 @@ #define STATUS_EFFECT_ICHORIAL_STAIN /datum/status_effect/ichorial_stain //Prevents a servant from being revived by vitality matrices for one minute. +#define STATUS_EFFECT_SPASMS /datum/status_effect/spasms //causes random muscle spasms + #define STATUS_EFFECT_BREASTS_ENLARGEMENT /datum/status_effect/chem/breast_enlarger //Applied slowdown due to the ominous bulk. #define STATUS_EFFECT_PENIS_ENLARGEMENT /datum/status_effect/chem/penis_enlarger //More applied slowdown, just like the above. diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 2382e0e444..60212385f8 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -109,6 +109,7 @@ #define TRAIT_NOHARDCRIT "nohardcrit" #define TRAIT_NOSOFTCRIT "nosoftcrit" #define TRAIT_MINDSHIELD "mindshield" +#define TRAIT_SIXTHSENSE "sixthsense" #define TRAIT_DISSECTED "dissected" #define TRAIT_FEARLESS "fearless" #define TRAIT_UNSTABLE "unstable" @@ -117,6 +118,7 @@ #define TRAIT_PARALYSIS_L_LEG "para-l-leg" #define TRAIT_PARALYSIS_R_LEG "para-r-leg" #define TRAIT_UNINTELLIGIBLE_SPEECH "unintelligible-speech" +#define TRAIT_SOOTHED_THROAT "soothed-throat" #define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism" #define TRAIT_STRONG_GRABBER "strong_grabber" #define TRAIT_CALCIUM_HEALER "calcium_healer" @@ -179,6 +181,7 @@ #define CULT_TRAIT "cult" #define CURSED_ITEM_TRAIT "cursed-item" // The item is magically cursed #define ABSTRACT_ITEM_TRAIT "abstract-item" +#define STATUS_EFFECT_TRAIT "status-effect" #define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention // unique trait sources, still defines @@ -213,4 +216,4 @@ #define NINJA_SUIT_TRAIT "ninja-suit" #define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant" #define ABDUCTOR_ANTAGONIST "abductor-antagonist" -#define MADE_UNCLONEABLE "made-uncloneable" +#define MADE_UNCLONEABLE "made-uncloneable" \ No newline at end of file diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 8e7938a312..0d6345dae2 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -522,12 +522,14 @@ GLOBAL_LIST_EMPTY(species_list) else prefs = new - var/adminoverride = 0 + var/override = FALSE if(M.client && M.client.holder && (prefs.chat_toggles & CHAT_DEAD)) - adminoverride = 1 - if(isnewplayer(M) && !adminoverride) + override = TRUE + if(HAS_TRAIT(M, TRAIT_SIXTHSENSE)) + override = TRUE + if(isnewplayer(M) && !override) continue - if(M.stat != DEAD && !adminoverride) + if(M.stat != DEAD && !override) continue if(speaker_key && speaker_key in prefs.ignoring) continue diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 0ac8a61183..e2705ad49f 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -46,10 +46,15 @@ GLOBAL_LIST_INIT(ai_core_display_screens, list( ":thinking:", "Alien", "Angel", + "Angryface", + "AtlantisCZE", "Banned", "Bliss", "Blue", - "Clown", + "Boy", + "Boy-Malf", + "Girl", + "Girl-Malf", "Database", "Dorf", "Firewall", @@ -61,26 +66,44 @@ GLOBAL_LIST_INIT(ai_core_display_screens, list( "Hades", "Heartline", "Helios", + "Hotdog", + "Hourglass", "House", "Inverted", + "Jack", "Matrix", "Monochrome", + "Mothman", "Murica", "Nanotrasen", "Not Malf", + "Patriot", + "Pirate", "President", - "Random", "Rainbow", - "Red", + "Clown", + "Random", + "Ravensdale", "Red October", + "Red", + "Royal", + "Searif", + "Serithi", + "SilveryFerret", + "Smiley", "Static", "Syndicat Meow", "TechDemon", + "Terminal", "Text", "Too Deep", "Triumvirate", "Triumvirate-M", - "Weird")) + "Wasp", + "Weird", + "Xerxes", + "Yes-Man" + )) /proc/resolve_ai_icon(input) if(!input || !(input in GLOB.ai_core_display_screens)) diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm index 3a026d2aa5..e30ce1d1ed 100644 --- a/code/_globalvars/lists/poll_ignore.dm +++ b/code/_globalvars/lists/poll_ignore.dm @@ -13,6 +13,8 @@ #define POLL_IGNORE_GOLEM "golem" #define POLL_IGNORE_SWARMER "swarmer" #define POLL_IGNORE_DRONE "drone" +#define POLL_IGNORE_IMAGINARYFRIEND "imaginary_friend" +#define POLL_IGNORE_SPLITPERSONALITY "split_personality" #define POLL_IGNORE_DEMON "demon" #define POLL_IGNORE_WIZARD "wizard" #define POLL_IGNORE_CLONE "clone" @@ -31,6 +33,8 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list( POLL_IGNORE_GOLEM = "Golems", POLL_IGNORE_SWARMER = "Swarmer shells", POLL_IGNORE_DRONE = "Drone shells", + POLL_IGNORE_IMAGINARYFRIEND = "Imaginary Friend", + POLL_IGNORE_SPLITPERSONALITY = "Split Personality", POLL_IGNORE_DEMON = "Demons", POLL_IGNORE_WIZARD = "Wizards", POLL_IGNORE_CLONE = "Defective/SDGF clones" diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index cc183dd6d3..391e86f390 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -213,6 +213,12 @@ or something covering your eyes." desc = "Whoa man, you're tripping balls! Careful you don't get addicted... if you aren't already." icon_state = "high" +/obj/screen/alert/hypnosis + name = "Hypnosis" + desc = "Something's hypnotizing you, but you're not really sure about what." + icon_state = "hypnosis" + var/phrase + /obj/screen/alert/drunk //Not implemented name = "Drunk" desc = "All that alcohol you've been drinking is impairing your speech, motor skills, and mental cognition. Make sure to act like it." diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index f796f75407..5f128ff76d 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -25,7 +25,7 @@ return ..() /obj/screen/examine(mob/user) - return + return list() /obj/screen/orbit() return diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 12b1ca2784..ecd34b7840 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -106,9 +106,8 @@ /obj/item/tk_grab/examine(user) if (focus) - focus.examine(user) - else - ..() + return focus.examine(user) + return ..() /obj/item/tk_grab/attack_self(mob/user) if(!focus) diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index 1b7cade71f..c3db8552c6 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -12,6 +12,7 @@ SUBSYSTEM_DEF(persistence) var/list/obj/structure/chisel_message/chisel_messages = list() var/list/saved_messages = list() var/list/saved_modes = list(1,2,3) + var/list/saved_threat_levels = list(1,1,1) var/list/saved_maps var/list/saved_trophies = list() var/list/spawned_objects = list() @@ -27,6 +28,7 @@ SUBSYSTEM_DEF(persistence) LoadChiselMessages() LoadTrophies() LoadRecentModes() + LoadRecentThreats() LoadRecentMaps() LoadPhotoPersistence() if(CONFIG_GET(flag/use_antag_rep)) @@ -166,6 +168,15 @@ SUBSYSTEM_DEF(persistence) return saved_modes = json["data"] +/datum/controller/subsystem/persistence/proc/LoadRecentThreats() + var/json_file = file("data/RecentThreatLevels.json") + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + saved_threat_levels = json["data"] + /datum/controller/subsystem/persistence/proc/LoadRecentMaps() var/json_file = file("data/RecentMaps.json") if(!fexists(json_file)) @@ -216,6 +227,7 @@ SUBSYSTEM_DEF(persistence) CollectSecretSatchels() CollectTrophies() CollectRoundtype() + CollectThreatLevel() RecordMaps() SavePhotoPersistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION. if(CONFIG_GET(flag/use_antag_rep)) @@ -372,6 +384,18 @@ SUBSYSTEM_DEF(persistence) fdel(json_file) WRITE_FILE(json_file, json_encode(file_data)) +/datum/controller/subsystem/persistence/proc/CollectThreatLevel() + if(istype(SSticker.mode, /datum/game_mode/dynamic)) + var/datum/game_mode/dynamic/mode = SSticker.mode + saved_threat_levels[3] = saved_threat_levels[2] + saved_threat_levels[2] = saved_threat_levels [1] + saved_threat_levels[1] = mode.threat_level + var/json_file = file("data/RecentThreatLevels.json") + var/list/file_data = list() + file_data["data"] = saved_threat_levels + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) + /datum/controller/subsystem/persistence/proc/RecordMaps() saved_maps = saved_maps?.len ? list("[SSmapping.config.map_name]") | saved_maps : list("[SSmapping.config.map_name]") var/json_file = file("data/RecentMaps.json") diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 50be61f91d..dee10e4998 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -153,6 +153,10 @@ SUBSYSTEM_DEF(vote) if(SSticker.current_state > GAME_STATE_PREGAME)//Don't change the mode if the round already started. return message_admins("A vote has tried to change the gamemode, but the game has already started. Aborting.") GLOB.master_mode = "dynamic" + if("extended" in choices) + if(. == "extended") + GLOB.dynamic_forced_extended = TRUE // we still do the rest of the stuff + choices[PEACE] += choices["extended"] var/mean = 0 var/voters = 0 for(var/client/c in GLOB.clients) @@ -253,7 +257,11 @@ SUBSYSTEM_DEF(vote) if("roundtype") //CIT CHANGE - adds the roundstart secret/extended vote choices.Add("secret", "extended") if("dynamic") - choices.Add(PEACE,CHAOS) + var/saved_threats = SSpersistence.saved_threat_levels + if((saved_threats[1]+saved_threats[2]+saved_threats[3])>150) + choices.Add("extended",PEACE,CHAOS) + else + choices.Add(PEACE,CHAOS) if("custom") question = stripped_input(usr,"What is the vote for?") if(!question) diff --git a/code/datums/brain_damage/brain_trauma.dm b/code/datums/brain_damage/brain_trauma.dm index 56a3f3969b..1aa1341c9c 100644 --- a/code/datums/brain_damage/brain_trauma.dm +++ b/code/datums/brain_damage/brain_trauma.dm @@ -1,10 +1,12 @@ //Brain Traumas are the new actual brain damage. Brain damage itself acts as a way to acquire traumas: every time brain damage is dealt, there's a chance of receiving a trauma. //This chance gets higher the higher the mob's brainloss is. Removing traumas is a separate thing from removing brain damage: you can get restored to full brain operativity, -//but keep the quirks, until repaired by mannitol (for mild/special ones) or brain surgery (for severe ones). +// but keep the quirks, until repaired by neurine, surgery, lobotomy or magic; depending on the resilience +// of the trauma. + /datum/brain_trauma var/name = "Brain Trauma" var/desc = "A trauma caused by brain damage, which causes issues to the patient." - var/scan_desc = "a generic brain trauma" //description when detected by a health scanner + var/scan_desc = "generic brain trauma" //description when detected by a health scanner var/mob/living/carbon/owner //the poor bastard var/obj/item/organ/brain/brain //the poor bastard's brain var/gain_text = "You feel traumatized." @@ -12,15 +14,21 @@ var/can_gain = TRUE var/random_gain = TRUE //can this be gained through random traumas? var/resilience = TRAUMA_RESILIENCE_BASIC //how hard is this to cure? + var/clonable = TRUE // will this transfer if the brain is cloned? /datum/brain_trauma/Destroy() - brain.traumas -= src + if(brain && brain.traumas) + brain.traumas -= src if(owner) on_lose() brain = null owner = null return ..() +/datum/brain_trauma/proc/on_clone() + if(clonable) + return new type + //Called on life ticks /datum/brain_trauma/proc/on_life() return @@ -33,17 +41,24 @@ /datum/brain_trauma/proc/on_gain() to_chat(owner, gain_text) RegisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech) + RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/handle_hearing) //Called when removed from a mob /datum/brain_trauma/proc/on_lose(silent) if(!silent) to_chat(owner, lose_text) UnregisterSignal(owner, COMSIG_MOB_SAY) + UnregisterSignal(owner, COMSIG_MOVABLE_HEAR) //Called when hearing a spoken message -/datum/brain_trauma/proc/on_hear(message, speaker, message_language, raw_message, radio_freq) - return message +/datum/brain_trauma/proc/handle_hearing(datum/source, list/hearing_args) + UnregisterSignal(owner, COMSIG_MOVABLE_HEAR) //Called when speaking /datum/brain_trauma/proc/handle_speech(datum/source, list/speech_args) UnregisterSignal(owner, COMSIG_MOB_SAY) + + +//Called when hugging. expand into generally interacting, where future coders could switch the intent? +/datum/brain_trauma/proc/on_hug(mob/living/hugger, mob/living/hugged) + return diff --git a/code/datums/brain_damage/hypnosis.dm b/code/datums/brain_damage/hypnosis.dm index 8909d1b85f..f937c19658 100644 --- a/code/datums/brain_damage/hypnosis.dm +++ b/code/datums/brain_damage/hypnosis.dm @@ -5,6 +5,7 @@ gain_text = "" lose_text = "" resilience = TRAUMA_RESILIENCE_SURGERY + var/hypnotic_phrase = "" var/regex/target_phrase @@ -44,18 +45,17 @@ "You feel a part of your mind repeating this over and over. You need to follow these words.",\ "Something about this sounds... right, for some reason. You feel like you should follow these words.",\ "These words keep echoing in your mind. You find yourself completely fascinated by them.")]") - if(!HAS_TRAIT(owner, "hypnotherapy")) - to_chat(owner, "You've been hypnotized by this sentence. You must follow these words. If it isn't a clear order, you can freely interpret how to do so,\ + to_chat(owner, "You've been hypnotized by this sentence. You must follow these words. If it isn't a clear order, you can freely interpret how to do so,\ as long as you act like the words are your highest priority.") - else - to_chat(owner, "You've been hypnotized by this sentence. You feel an incredible desire to follow these words, but are able to resist it somewhat. If it isn't a clear order, you can freely interpret how to do so,\ - however this does not take precedence over your other objectives.") + var/obj/screen/alert/hypnosis/hypno_alert = owner.throw_alert("hypnosis", /obj/screen/alert/hypnosis) + hypno_alert.desc = "\"[hypnotic_phrase]\"... your mind seems to be fixated on this concept." ..() /datum/brain_trauma/hypnosis/on_lose() message_admins("[ADMIN_LOOKUPFLW(owner)] is no longer hypnotized with the phrase '[hypnotic_phrase]'.") log_game("[key_name(owner)] is no longer hypnotized with the phrase '[hypnotic_phrase]'.") - to_chat(owner, "You suddenly snap out of your fixation. The phrase '[hypnotic_phrase]' no longer feels important to you.") + to_chat(owner, "You suddenly snap out of your hypnosis. The phrase '[hypnotic_phrase]' no longer feels important to you.") + owner.clear_alert("hypnosis") ..() /datum/brain_trauma/hypnosis/on_life() @@ -67,6 +67,5 @@ if(2) new /datum/hallucination/chat(owner, TRUE, FALSE, "[hypnotic_phrase]") -/datum/brain_trauma/hypnosis/on_hear(message, speaker, message_language, raw_message, radio_freq) - message = target_phrase.Replace(message, "$1") - return message +/datum/brain_trauma/hypnosis/handle_hearing(datum/source, list/hearing_args) + hearing_args[HEARING_MESSAGE] = target_phrase.Replace(hearing_args[HEARING_MESSAGE], "$1") diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 5bbc5de4a5..8337a8e4d5 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -8,6 +8,10 @@ var/friend_initialized = FALSE /datum/brain_trauma/special/imaginary_friend/on_gain() + var/mob/living/M = owner + if(M.stat == DEAD || !M.client) + qdel(src) + return ..() make_friend() get_ghost() @@ -43,7 +47,7 @@ /datum/brain_trauma/special/imaginary_friend/proc/get_ghost() set waitfor = FALSE - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s imaginary friend?", ROLE_PAI, null, null, 75, friend) + var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s imaginary friend?", ROLE_PAI, null, null, 75, friend, POLL_IGNORE_IMAGINARYFRIEND) if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) C.transfer_ckey(friend, FALSE) @@ -74,26 +78,34 @@ /mob/camera/imaginary_friend/Login() ..() - to_chat(src, "You are the imaginary friend of [owner]!") - to_chat(src, "You are absolutely loyal to your friend, no matter what.") - to_chat(src, "You cannot directly influence the world around you, but you can see what [owner] cannot.") + greet() Show() +/mob/camera/imaginary_friend/proc/greet() + to_chat(src, "You are the imaginary friend of [owner]!") + to_chat(src, "You are absolutely loyal to your friend, no matter what.") + to_chat(src, "You cannot directly influence the world around you, but you can see what [owner] cannot.") + /mob/camera/imaginary_friend/Initialize(mapload, _trauma) . = ..() - var/gender = pick(MALE, FEMALE) - real_name = random_unique_name(gender) - name = real_name + trauma = _trauma owner = trauma.owner copy_known_languages_from(owner, TRUE) - human_image = get_flat_human_icon(null, pick(SSjob.occupations)) + + setup_friend() join = new join.Grant(src) hide = new hide.Grant(src) +/mob/camera/imaginary_friend/proc/setup_friend() + var/gender = pick(MALE, FEMALE) + real_name = random_unique_name(gender) + name = real_name + human_image = get_flat_human_icon(null, pick(SSjob.occupations)) + /mob/camera/imaginary_friend/proc/Show() if(!client) //nobody home return @@ -132,7 +144,7 @@ if(client.prefs.muted & MUTE_IC) to_chat(src, "You cannot send IC messages (muted).") return - if (src.client.handle_spam_prevention(message,MUTE_IC)) + if (!(ignore_spam || forced) && src.client.handle_spam_prevention(message,MUTE_IC)) return friend_talk(message) @@ -218,4 +230,42 @@ var/mob/camera/imaginary_friend/I = owner I.hidden = !I.hidden I.Show() - update_status() \ No newline at end of file + update_status() + +//down here is the trapped mind +//like imaginary friend but a lot less imagination and more like mind prison// + +/datum/brain_trauma/special/imaginary_friend/trapped_owner + name = "Trapped Victim" + desc = "Patient appears to be targeted by an invisible entity." + gain_text = "" + lose_text = "" + random_gain = FALSE + +/datum/brain_trauma/special/imaginary_friend/trapped_owner/make_friend() + friend = new /mob/camera/imaginary_friend/trapped(get_turf(owner), src) + +/datum/brain_trauma/special/imaginary_friend/trapped_owner/reroll_friend() //no rerolling- it's just the last owner's hell + if(friend.client) //reconnected + return + friend_initialized = FALSE + QDEL_NULL(friend) + qdel(src) + +/datum/brain_trauma/special/imaginary_friend/trapped_owner/get_ghost() //no randoms + return + +/mob/camera/imaginary_friend/trapped + name = "figment of imagination?" + real_name = "figment of imagination?" + desc = "The previous host of this body." + +/mob/camera/imaginary_friend/trapped/greet() + to_chat(src, "You have managed to hold on as a figment of the new host's imagination!") + to_chat(src, "All hope is lost for you, but at least you may interact with your host. You do not have to be loyal to them.") + to_chat(src, "You cannot directly influence the world around you, but you can see what the host cannot.") + +/mob/camera/imaginary_friend/trapped/setup_friend() + real_name = "[owner.real_name]?" + name = real_name + human_image = icon('icons/mob/lavaland/lavaland_monsters.dmi', icon_state = "curseblob") diff --git a/code/datums/brain_damage/mild.dm b/code/datums/brain_damage/mild.dm index c049a7db33..012f771a29 100644 --- a/code/datums/brain_damage/mild.dm +++ b/code/datums/brain_damage/mild.dm @@ -64,21 +64,21 @@ name = "Speech Impediment" desc = "Patient is unable to form coherent sentences." scan_desc = "communication disorder" - gain_text = "" //mutation will handle the text - lose_text = "" + gain_text = "You can't seem to form any coherent thoughts!" + lose_text = "Your mind feels more clear." /datum/brain_trauma/mild/speech_impediment/on_gain() ADD_TRAIT(owner, TRAIT_UNINTELLIGIBLE_SPEECH, TRAUMA_TRAIT) - . = ..() + ..() /datum/brain_trauma/mild/speech_impediment/on_lose() REMOVE_TRAIT(owner, TRAIT_UNINTELLIGIBLE_SPEECH, TRAUMA_TRAIT) - . = ..() + ..() /datum/brain_trauma/mild/concussion name = "Concussion" desc = "Patient's brain is concussed." - scan_desc = "a concussion" + scan_desc = "concussion" gain_text = "Your head hurts!" lose_text = "The pressure inside your head starts fading." @@ -157,54 +157,108 @@ gain_text = "Your muscles feel oddly faint." lose_text = "You feel in control of your muscles again." -/datum/brain_trauma/mild/muscle_spasms/on_life() - if(prob(7)) - switch(rand(1,5)) - if(1) - if(owner.canmove && !isspaceturf(owner.loc)) - to_chat(owner, "Your leg spasms!") - step(owner, pick(GLOB.cardinals)) - if(2) - if(owner.incapacitated()) - return - var/obj/item/I = owner.get_active_held_item() - if(I) - to_chat(owner, "Your fingers spasm!") - owner.log_message("used [I] due to a Muscle Spasm", LOG_ATTACK) - I.attack_self(owner) - if(3) - var/prev_intent = owner.a_intent - owner.a_intent = INTENT_HARM - - var/range = 1 - if(istype(owner.get_active_held_item(), /obj/item/gun)) //get targets to shoot at - range = 7 - - var/list/mob/living/targets = list() - for(var/mob/M in oview(owner, range)) - if(isliving(M)) - targets += M - if(LAZYLEN(targets)) - to_chat(owner, "Your arm spasms!") - owner.log_message(" attacked someone due to a Muscle Spasm") //the following attack will log itself - owner.ClickOn(pick(targets)) - owner.a_intent = prev_intent - if(4) - var/prev_intent = owner.a_intent - owner.a_intent = INTENT_HARM - to_chat(owner, "Your arm spasms!") - owner.log_message("attacked [owner.p_them()]self to a Muscle Spasm", LOG_ATTACK) - owner.ClickOn(owner) - owner.a_intent = prev_intent - if(5) - if(owner.incapacitated()) - return - var/obj/item/I = owner.get_active_held_item() - var/list/turf/targets = list() - for(var/turf/T in oview(owner, 3)) - targets += T - if(LAZYLEN(targets) && I) - to_chat(owner, "Your arm spasms!") - owner.log_message("threw [I] due to a Muscle Spasm", LOG_ATTACK) - owner.throw_item(pick(targets)) +/datum/brain_trauma/mild/muscle_spasms/on_gain() + owner.apply_status_effect(STATUS_EFFECT_SPASMS) ..() + +/datum/brain_trauma/mild/muscle_spasms/on_lose() + owner.remove_status_effect(STATUS_EFFECT_SPASMS) + ..() + +/datum/brain_trauma/mild/nervous_cough + name = "Nervous Cough" + desc = "Patient feels a constant need to cough." + scan_desc = "nervous cough" + gain_text = "Your throat itches incessantly..." + lose_text = "Your throat stops itching." + +/datum/brain_trauma/mild/nervous_cough/on_life() + if(prob(12) && !HAS_TRAIT(owner, TRAIT_SOOTHED_THROAT)) + if(prob(5)) + to_chat(owner, "[pick("You have a coughing fit!", "You can't stop coughing!")]") + owner.Stun(20) + owner.emote("cough") + addtimer(CALLBACK(owner, /mob/.proc/emote, "cough"), 6) + addtimer(CALLBACK(owner, /mob/.proc/emote, "cough"), 12) + owner.emote("cough") + ..() + +/datum/brain_trauma/mild/expressive_aphasia + name = "Expressive Aphasia" + desc = "Patient is affected by partial loss of speech leading to a reduced vocabulary." + scan_desc = "inability to form complex sentences" + gain_text = "You lose your grasp on complex words." + lose_text = "You feel your vocabulary returning to normal again." + + var/static/list/common_words = world.file2list("strings/1000_most_common.txt") + +/datum/brain_trauma/mild/expressive_aphasia/handle_speech(datum/source, list/speech_args) + var/message = speech_args[SPEECH_MESSAGE] + if(message) + var/list/message_split = splittext(message, " ") + var/list/new_message = list() + + for(var/word in message_split) + var/suffix = copytext(word,-1) + + // Check if we have a suffix and break it out of the word + if(suffix in list("." , "," , ";" , "!" , ":" , "?")) + word = copytext(word,1,-1) + else + suffix = "" + + word = html_decode(word) + + if(lowertext(word) in common_words) + new_message += word + suffix + else + if(prob(30) && message_split.len > 2) + new_message += pick("uh","erm") + break + else + var/list/charlist = string2charlist(word) // Stupid shit code + shuffle_inplace(charlist) + charlist.len = round(charlist.len * 0.5,1) + new_message += html_encode(jointext(charlist,"")) + suffix + + message = jointext(new_message, " ") + + speech_args[SPEECH_MESSAGE] = trim(message) + +/datum/brain_trauma/mild/mind_echo + name = "Mind Echo" + desc = "Patient's language neurons do not terminate properly, causing previous speech patterns to occasionally resurface spontaneously." + scan_desc = "looping neural pattern" + gain_text = "You feel a faint echo of your thoughts..." + lose_text = "The faint echo fades away." + var/list/hear_dejavu = list() + var/list/speak_dejavu = list() + +/datum/brain_trauma/mild/mind_echo/handle_hearing(datum/source, list/hearing_args) + if(owner == hearing_args[HEARING_SPEAKER]) + return + if(hear_dejavu.len >= 5) + if(prob(25)) + var/deja_vu = pick_n_take(hear_dejavu) + var/static/regex/quoted_spoken_message = regex("\".+\"", "gi") + hearing_args[HEARING_MESSAGE] = quoted_spoken_message.Replace(hearing_args[HEARING_MESSAGE], "\"[deja_vu]\"") //Quotes included to avoid cases where someone says part of their name + return + if(hear_dejavu.len >= 15) + if(prob(50)) + popleft(hear_dejavu) //Remove the oldest + hear_dejavu += hearing_args[HEARING_RAW_MESSAGE] + else + hear_dejavu += hearing_args[HEARING_RAW_MESSAGE] + +/datum/brain_trauma/mild/mind_echo/handle_speech(datum/source, list/speech_args) + if(speak_dejavu.len >= 5) + if(prob(25)) + var/deja_vu = pick_n_take(speak_dejavu) + speech_args[SPEECH_MESSAGE] = deja_vu + return + if(speak_dejavu.len >= 15) + if(prob(50)) + popleft(speak_dejavu) //Remove the oldest + speak_dejavu += speech_args[SPEECH_MESSAGE] + else + speak_dejavu += speech_args[SPEECH_MESSAGE] \ No newline at end of file diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm index f802555c7e..034f2baaaf 100644 --- a/code/datums/brain_damage/phobia.dm +++ b/code/datums/brain_damage/phobia.dm @@ -2,8 +2,8 @@ name = "Phobia" desc = "Patient is unreasonably afraid of something." scan_desc = "phobia" - gain_text = "" - lose_text = "" + gain_text = "You start finding default values very unnerving..." + lose_text = "You no longer feel afraid of default values." var/phobia_type var/next_check = 0 var/next_scare = 0 @@ -14,8 +14,10 @@ var/list/trigger_turfs var/list/trigger_species -/datum/brain_trauma/mild/phobia/New(specific_type) - phobia_type = specific_type +/datum/brain_trauma/mild/phobia/New(new_phobia_type) + if(new_phobia_type) + phobia_type = new_phobia_type + if(!phobia_type) phobia_type = pick(SStraumas.phobia_types) @@ -29,6 +31,11 @@ trigger_species = SStraumas.phobia_species[phobia_type] ..() + +/datum/brain_trauma/mild/phobia/on_clone() + if(clonable) + return new type(phobia_type) + /datum/brain_trauma/mild/phobia/on_life() ..() if(HAS_TRAIT(owner, TRAIT_FEARLESS)) @@ -44,6 +51,12 @@ if(is_type_in_typecache(O, trigger_objs)) freak_out(O) return + for(var/mob/living/carbon/human/HU in seen_atoms) //check equipment for trigger items + for(var/X in HU.get_all_slots() | HU.held_items) + var/obj/I = X + if(!QDELETED(I) && is_type_in_typecache(I, trigger_objs)) + freak_out(I) + return if(LAZYLEN(trigger_turfs)) for(var/turf/T in seen_atoms) @@ -51,45 +64,41 @@ freak_out(T) return - if(LAZYLEN(trigger_mobs) || LAZYLEN(trigger_objs)) + seen_atoms -= owner //make sure they aren't afraid of themselves. + if(LAZYLEN(trigger_mobs) || LAZYLEN(trigger_species)) for(var/mob/M in seen_atoms) if(is_type_in_typecache(M, trigger_mobs)) freak_out(M) return - else if(ishuman(M)) //check their equipment for trigger items + else if(ishuman(M)) //check their species var/mob/living/carbon/human/H = M if(LAZYLEN(trigger_species) && H.dna && H.dna.species && is_type_in_typecache(H.dna.species, trigger_species)) freak_out(H) + return - for(var/X in H.get_all_slots() | H.held_items) - var/obj/I = X - if(!QDELETED(I) && is_type_in_typecache(I, trigger_objs)) - freak_out(I) - return - -/datum/brain_trauma/mild/phobia/on_hear(message, speaker, message_language, raw_message, radio_freq) +/datum/brain_trauma/mild/phobia/handle_hearing(datum/source, list/hearing_args) if(!owner.can_hear() || world.time < next_scare) //words can't trigger you if you can't hear them *taps head* - return message + return if(HAS_TRAIT(owner, TRAIT_FEARLESS)) - return message + return for(var/word in trigger_words) - var/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i") + var/regex/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i") - if(findtext(raw_message, reg)) + if(findtext(hearing_args[HEARING_RAW_MESSAGE], reg)) addtimer(CALLBACK(src, .proc/freak_out, null, word), 10) //to react AFTER the chat message + hearing_args[HEARING_MESSAGE] = reg.Replace(hearing_args[HEARING_MESSAGE], "$1") break - return message /datum/brain_trauma/mild/phobia/handle_speech(datum/source, list/speech_args) if(HAS_TRAIT(owner, TRAIT_FEARLESS)) return for(var/word in trigger_words) - var/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i") + var/regex/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i") if(findtext(speech_args[SPEECH_MESSAGE], reg)) - to_chat(owner, "You can't bring yourself to say the word \"[word]\"!") + to_chat(owner, "You can't bring yourself to say the word \"[word]\"!") speech_args[SPEECH_MESSAGE] = "" /datum/brain_trauma/mild/phobia/proc/freak_out(atom/reason, trigger_word) @@ -125,6 +134,76 @@ owner.Jitter(10) owner.stuttering += 10 +// Defined phobia types for badminry, not included in the RNG trauma pool to avoid diluting. + +/datum/brain_trauma/mild/phobia/spiders + phobia_type = "spiders" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/space + phobia_type = "space" + random_gain = FALSE + /datum/brain_trauma/mild/phobia/security phobia_type = "security" random_gain = FALSE + +/datum/brain_trauma/mild/phobia/clowns + phobia_type = "clowns" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/greytide + phobia_type = "greytide" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/lizards + phobia_type = "lizards" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/skeletons + phobia_type = "skeletons" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/snakes + phobia_type = "snakes" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/robots + phobia_type = "robots" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/doctors + phobia_type = "doctors" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/authority + phobia_type = "authority" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/supernatural + phobia_type = "the supernatural" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/aliens + phobia_type = "aliens" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/strangers + phobia_type = "strangers" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/birds + phobia_type = "birds" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/falling + phobia_type = "falling" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/anime + phobia_type = "anime" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/conspiracies + phobia_type = "conspiracies" + random_gain = FALSE diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm index 890e9cf903..0e08c4cd15 100644 --- a/code/datums/brain_damage/severe.dm +++ b/code/datums/brain_damage/severe.dm @@ -119,7 +119,7 @@ owner.update_disabled_bodyparts() /datum/brain_trauma/severe/paralysis/paraplegic - //can_gain = FALSE maybe breaks. + random_gain = FALSE paralysis_type = "legs" resilience = TRAUMA_RESILIENCE_ABSOLUTE @@ -149,7 +149,7 @@ /datum/brain_trauma/severe/monophobia name = "Monophobia" desc = "Patient feels sick and distressed when not around other people, leading to potentially lethal levels of stress." - scan_desc = "severe monophobia" + scan_desc = "monophobia" gain_text = "" lose_text = "You feel like you could be safe on your own." var/stress = 0 @@ -168,7 +168,7 @@ if(stress > 10 && (prob(5))) stress_reaction() else - stress -= 4 + stress = max(stress - 4, 0) /datum/brain_trauma/severe/monophobia/proc/check_alone() if(HAS_TRAIT(owner, TRAIT_BLIND)) diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index d9e6f00643..b52c7d391c 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -22,6 +22,14 @@ else speak("neutral", prob(25)) +/datum/brain_trauma/special/godwoken/on_gain() + ADD_TRAIT(owner, TRAIT_HOLY, TRAUMA_TRAIT) + ..() + +/datum/brain_trauma/special/godwoken/on_lose() + REMOVE_TRAIT(owner, TRAIT_HOLY, TRAUMA_TRAIT) + ..() + /datum/brain_trauma/special/godwoken/proc/speak(type, include_owner = FALSE) var/message switch(type) @@ -36,7 +44,7 @@ else message = pick_list_replacements(BRAIN_DAMAGE_FILE, "god_neutral") - playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 200, 1, 5) + playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 200, TRUE, 5) voice_of_god(message, owner, list("colossus","yell"), 2.5, include_owner, FALSE) /datum/brain_trauma/special/bluespace_prophet @@ -134,7 +142,101 @@ /datum/brain_trauma/special/psychotic_brawling/bath_salts name = "Chemical Violent Psychosis" - random_gain = FALSE + clonable = FALSE + +/datum/brain_trauma/special/tenacity + name = "Tenacity" + desc = "Patient is psychologically unaffected by pain and injuries, and can remain standing far longer than a normal person." + scan_desc = "traumatic neuropathy" + gain_text = "You suddenly stop feeling pain." + lose_text = "You realize you can feel pain again." + +/datum/brain_trauma/special/tenacity/on_gain() + ADD_TRAIT(owner, TRAIT_NOSOFTCRIT, TRAUMA_TRAIT) + ADD_TRAIT(owner, TRAIT_NOHARDCRIT, TRAUMA_TRAIT) + ..() + +/datum/brain_trauma/special/tenacity/on_lose() + REMOVE_TRAIT(owner, TRAIT_NOSOFTCRIT, TRAUMA_TRAIT) + REMOVE_TRAIT(owner, TRAIT_NOHARDCRIT, TRAUMA_TRAIT) + ..() + +/datum/brain_trauma/special/death_whispers + name = "Functional Cerebral Necrosis" + desc = "Patient's brain is stuck in a functional near-death state, causing occasional moments of lucid hallucinations, which are often interpreted as the voices of the dead." + scan_desc = "chronic functional necrosis" + gain_text = "You feel dead inside." + lose_text = "You feel alive again." + var/active = FALSE + +/datum/brain_trauma/special/death_whispers/on_life() + ..() + if(!active && prob(2)) + whispering() + +/datum/brain_trauma/special/death_whispers/on_lose() + if(active) + cease_whispering() + ..() + +/datum/brain_trauma/special/death_whispers/proc/whispering() + ADD_TRAIT(owner, TRAIT_SIXTHSENSE, TRAUMA_TRAIT) + active = TRUE + addtimer(CALLBACK(src, .proc/cease_whispering), rand(50, 300)) + +/datum/brain_trauma/special/death_whispers/proc/cease_whispering() + REMOVE_TRAIT(owner, TRAIT_SIXTHSENSE, TRAUMA_TRAIT) + active = FALSE + +/datum/brain_trauma/special/existential_crisis + name = "Existential Crisis" + desc = "Patient's hold on reality becomes faint, causing occasional bouts of non-existence." + scan_desc = "existential crisis" + gain_text = "You feel less real." + lose_text = "You feel more substantial again." + var/obj/effect/abstract/sync_holder/veil/veil + var/next_crisis = 0 + +/datum/brain_trauma/special/existential_crisis/on_life() + ..() + if(!veil && world.time > next_crisis && prob(3)) + if(isturf(owner.loc)) + fade_out() + +/datum/brain_trauma/special/existential_crisis/on_lose() + if(veil) + fade_in() + ..() + +/datum/brain_trauma/special/existential_crisis/proc/fade_out() + if(veil) + return + var/duration = rand(50, 450) + veil = new(owner.drop_location()) + to_chat(owner, "[pick("You stop thinking for a moment. Therefore you are not.",\ + "To be or not to be...",\ + "Why exist?",\ + "You stop keeping it real.",\ + "Your grip on existence slips.",\ + "Do you even exist?",\ + "You simply fade away.")]") + owner.forceMove(veil) + SEND_SIGNAL(owner, COMSIG_MOVABLE_SECLUDED_LOCATION) + for(var/thing in owner) + var/atom/movable/AM = thing + SEND_SIGNAL(AM, COMSIG_MOVABLE_SECLUDED_LOCATION) + next_crisis = world.time + 600 + addtimer(CALLBACK(src, .proc/fade_in), duration) + +/datum/brain_trauma/special/existential_crisis/proc/fade_in() + QDEL_NULL(veil) + to_chat(owner, "You fade back into reality.") + next_crisis = world.time + 600 + +//base sync holder is in desynchronizer.dm +/obj/effect/abstract/sync_holder/veil + name = "non-existence" + desc = "Existence is just a state of mind." /datum/brain_trauma/special/beepsky name = "Criminal" @@ -142,6 +244,7 @@ scan_desc = "criminal mind" gain_text = "Justice is coming for you." lose_text = "You were absolved for your crimes." + clonable = FALSE random_gain = FALSE var/obj/effect/hallucination/simple/securitron/beepsky @@ -201,4 +304,4 @@ /obj/effect/hallucination/simple/securitron/Destroy() STOP_PROCESSING(SSfastprocess,src) - return ..() \ No newline at end of file + return ..() diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm index 1a26ea7a14..dfe63ce141 100644 --- a/code/datums/brain_damage/split_personality.dm +++ b/code/datums/brain_damage/split_personality.dm @@ -13,6 +13,10 @@ var/mob/living/split_personality/owner_backseat /datum/brain_trauma/severe/split_personality/on_gain() + var/mob/living/M = owner + if(M.stat == DEAD) //No use assigning people to a corpse + qdel(src) + return ..() make_backseats() get_ghost() @@ -23,7 +27,7 @@ /datum/brain_trauma/severe/split_personality/proc/get_ghost() set waitfor = FALSE - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s split personality?", ROLE_PAI, null, null, 75, stranger_backseat) + var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s split personality?", ROLE_PAI, null, null, 75, stranger_backseat, POLL_IGNORE_SPLITPERSONALITY) if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) C.transfer_ckey(stranger_backseat, FALSE) @@ -191,13 +195,13 @@ /datum/brain_trauma/severe/split_personality/brainwashing/on_life() return //no random switching -/datum/brain_trauma/severe/split_personality/brainwashing/on_hear(message, speaker, message_language, raw_message, radio_freq) - if(HAS_TRAIT(owner, TRAIT_DEAF) || owner == speaker) - return message +/datum/brain_trauma/severe/split_personality/brainwashing/handle_hearing(datum/source, list/hearing_args) + if(HAS_TRAIT(owner, TRAIT_DEAF) || owner == hearing_args[HEARING_SPEAKER]) + return + var/message = hearing_args[HEARING_MESSAGE] if(findtext(message, codeword)) - message = replacetext(message, codeword, "[codeword]") + hearing_args[HEARING_MESSAGE] = replacetext(message, codeword, "[codeword]") addtimer(CALLBACK(src, /datum/brain_trauma/severe/split_personality.proc/switch_personalities), 10) - return message /datum/brain_trauma/severe/split_personality/brainwashing/handle_speech(datum/source, list/speech_args) if(findtext(speech_args[SPEECH_MESSAGE], codeword)) diff --git a/code/datums/components/armor_plate.dm b/code/datums/components/armor_plate.dm index 53c8c280a9..975b52dcb9 100644 --- a/code/datums/components/armor_plate.dm +++ b/code/datums/components/armor_plate.dm @@ -29,21 +29,21 @@ var/obj/item/typecast = upgrade_item upgrade_name = initial(typecast.name) -/datum/component/armor_plate/proc/examine(datum/source, mob/user) +/datum/component/armor_plate/proc/examine(datum/source, mob/user, list/examine_list) //upgrade_item could also be typecast here instead if(ismecha(parent)) if(amount) if(amount < maxamount) - to_chat(user, "Its armor is enhanced with [amount] [upgrade_name].") + examine_list += "Its armor is enhanced with [amount] [upgrade_name]." else - to_chat(user, "It's wearing a fearsome carapace entirely composed of [upgrade_name] - its pilot must be an experienced monster hunter.") + examine_list += "It's wearing a fearsome carapace entirely composed of [upgrade_name] - its pilot must be an experienced monster hunter." else - to_chat(user, "It has attachment points for strapping monster hide on for added protection.") + examine_list += "It has attachment points for strapping monster hide on for added protection." else if(amount) - to_chat(user, "It has been strengthened with [amount]/[maxamount] [upgrade_name].") + examine_list += "It has been strengthened with [amount]/[maxamount] [upgrade_name]." else - to_chat(user, "It can be strengthened with up to [maxamount] [upgrade_name].") + examine_list += "It can be strengthened with up to [maxamount] [upgrade_name]." /datum/component/armor_plate/proc/applyplate(datum/source, obj/item/I, mob/user, params) if(!istype(I,upgrade_item)) diff --git a/code/datums/components/construction.dm b/code/datums/components/construction.dm index 3b64d68486..01df44752c 100644 --- a/code/datums/components/construction.dm +++ b/code/datums/components/construction.dm @@ -19,9 +19,9 @@ RegisterSignal(parent, COMSIG_PARENT_ATTACKBY,.proc/action) update_parent(index) -/datum/component/construction/proc/examine(datum/source, mob/user) +/datum/component/construction/proc/examine(datum/source, mob/user, list/examine_list) if(desc) - to_chat(user, desc) + examine_list += desc /datum/component/construction/proc/on_step() if(index > steps.len) diff --git a/code/datums/components/decal.dm b/code/datums/components/decal.dm index bdc1d3a2f6..641dbdb1cf 100644 --- a/code/datums/components/decal.dm +++ b/code/datums/components/decal.dm @@ -71,5 +71,5 @@ if(strength >= cleanable) qdel(src) -/datum/component/decal/proc/examine(datum/source, mob/user) - to_chat(user, description) \ No newline at end of file +/datum/component/decal/proc/examine(datum/source, mob/user, list/examine_list) + examine_list += description \ No newline at end of file diff --git a/code/datums/components/magnetic_catch.dm b/code/datums/components/magnetic_catch.dm index fb68b89ebf..c7e59e0ead 100644 --- a/code/datums/components/magnetic_catch.dm +++ b/code/datums/components/magnetic_catch.dm @@ -15,8 +15,8 @@ for(var/i in parent) RegisterSignal(i, COMSIG_MOVABLE_PRE_THROW, .proc/throw_react) -/datum/component/magnetic_catch/proc/examine(datum/source, mob/user) - to_chat(user, "It has been installed with inertia dampening to prevent coffee spills.") +/datum/component/magnetic_catch/proc/examine(datum/source, mob/user, list/examine_list) + examine_list += "It has been installed with inertia dampening to prevent coffee spills." /datum/component/magnetic_catch/proc/crossed_react(datum/source, atom/movable/thing) RegisterSignal(thing, COMSIG_MOVABLE_PRE_THROW, .proc/throw_react, TRUE) diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index 48fa758db1..25094518b8 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -49,13 +49,13 @@ var/mat_path = possible_mats[id] materials[id] = new mat_path() -/datum/component/material_container/proc/OnExamine(datum/source, mob/user) +/datum/component/material_container/proc/OnExamine(datum/source, mob/user, list/examine_list) if(show_on_examine) for(var/I in materials) var/datum/material/M = materials[I] var/amt = amount(M.id) if(amt) - to_chat(user, "It has [amt] units of [lowertext(M.name)] stored.") + examine_list += "It has [amt] units of [lowertext(M.name)] stored." /datum/component/material_container/proc/OnAttackBy(datum/source, obj/item/I, mob/living/user) var/list/tc = allowed_typecache diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm index 3f7f794435..362961a24f 100644 --- a/code/datums/components/nanites.dm +++ b/code/datums/components/nanites.dm @@ -53,7 +53,6 @@ RegisterSignal(parent, COMSIG_MOB_ALLOWED, .proc/check_access) RegisterSignal(parent, COMSIG_LIVING_ELECTROCUTE_ACT, .proc/on_shock) RegisterSignal(parent, COMSIG_LIVING_MINOR_SHOCK, .proc/on_minor_shock) - RegisterSignal(parent, COMSIG_MOVABLE_HEAR, .proc/on_hear) RegisterSignal(parent, COMSIG_SPECIES_GAIN, .proc/check_viable_biotype) RegisterSignal(parent, COMSIG_NANITE_SIGNAL, .proc/receive_signal) @@ -191,11 +190,6 @@ var/datum/nanite_program/NP = X NP.on_death(gibbed) -/datum/component/nanites/proc/on_hear(datum/source, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - for(var/X in programs) - var/datum/nanite_program/NP = X - NP.on_hear(message, speaker, message_language, raw_message, radio_freq, spans, message_mode) - /datum/component/nanites/proc/receive_signal(datum/source, code, source = "an unidentified source") for(var/X in programs) var/datum/nanite_program/NP = X diff --git a/code/datums/components/radioactive.dm b/code/datums/components/radioactive.dm index bf47793f81..9dac20d94f 100644 --- a/code/datums/components/radioactive.dm +++ b/code/datums/components/radioactive.dm @@ -18,7 +18,7 @@ hl3_release_date = _half_life can_contaminate = _can_contaminate - if(istype(parent, /atom)) + if(istype(parent, /atom)) RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/rad_examine) if(istype(parent, /obj/item)) RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/rad_attack) @@ -58,7 +58,7 @@ else strength = max(strength, arguments[1]) -/datum/component/radioactive/proc/rad_examine(datum/source, mob/user, atom/thing) +/datum/component/radioactive/proc/rad_examine(datum/source, mob/user, list/examine_list) var/atom/master = parent var/list/out = list() if(get_dist(master, user) <= 1) @@ -72,7 +72,7 @@ out += "[out ? " and it " : "[master] "]hurts to look at." else out += "." - to_chat(user, out.Join()) + examine_list += out.Join() /datum/component/radioactive/proc/rad_attack(datum/source, atom/movable/target, mob/living/user) radiation_pulse(parent, strength/20) diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm index a044ca301e..81ff2d517d 100644 --- a/code/datums/components/rotation.dm +++ b/code/datums/components/rotation.dm @@ -98,9 +98,9 @@ remove_verbs() . = ..() -/datum/component/simple_rotation/proc/ExamineMessage(datum/source, mob/user) +/datum/component/simple_rotation/proc/ExamineMessage(datum/source, mob/user, list/examine_list) if(rotation_flags & ROTATION_ALTCLICK) - to_chat(user, "Alt-click to rotate it clockwise.") + examine_list += "Alt-click to rotate it clockwise." /datum/component/simple_rotation/proc/HandRot(datum/source, mob/user, rotation = default_rotation_direction) if(!can_be_rotated.Invoke(user, rotation) || !can_user_rotate.Invoke(user, rotation)) diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm index bbcb0d88a6..91928656e1 100644 --- a/code/datums/components/stationloving.dm +++ b/code/datums/components/stationloving.dm @@ -8,6 +8,7 @@ if(!ismovableatom(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, list(COMSIG_MOVABLE_Z_CHANGED), .proc/check_in_bounds) + RegisterSignal(parent, list(COMSIG_MOVABLE_SECLUDED_LOCATION), .proc/relocate) RegisterSignal(parent, list(COMSIG_PARENT_PREQDELETED), .proc/check_deletion) RegisterSignal(parent, list(COMSIG_ITEM_IMBUE_SOUL), .proc/check_soul_imbue) src.inform_admins = inform_admins @@ -32,6 +33,7 @@ var/atom/movable/AM = parent AM.forceMove(targetturf) + to_chat(get(parent, /mob), "You can't help but feel that you just lost something back there...") // move the disc, so ghosts remain orbiting it even if it's "destroyed" return targetturf @@ -40,7 +42,6 @@ return else var/turf/currentturf = get_turf(src) - to_chat(get(parent, /mob), "You can't help but feel that you just lost something back there...") var/turf/targetturf = relocate() log_game("[parent] has been moved out of bounds in [loc_name(currentturf)]. Moving it to [loc_name(targetturf)].") if(inform_admins) diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index fb636f6911..84ed012b82 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -567,8 +567,7 @@ datum/status_effect/pacify tick_interval = 10 examine_text = "SUBJECTPRONOUN seems slow and unfocused." var/stun = TRUE - var/triggered = FALSE - alert_type = null + alert_type = /obj/screen/alert/status_effect/trance /obj/screen/alert/status_effect/trance name = "Trance" @@ -576,17 +575,6 @@ datum/status_effect/pacify icon_state = "high" /datum/status_effect/trance/tick() - if(HAS_TRAIT(owner, "hypnotherapy")) - if(triggered == TRUE) - UnregisterSignal(owner, COMSIG_MOVABLE_HEAR) - RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/hypnotize) - ADD_TRAIT(owner, TRAIT_MUTE, "trance") - if(!owner.has_quirk(/datum/quirk/monochromatic)) - owner.add_client_colour(/datum/client_colour/monochrome) - to_chat(owner, "[pick("You feel your thoughts slow down...", "You suddenly feel extremely dizzy...", "You feel like you're in the middle of a dream...","You feel incredibly relaxed...")]") - triggered = FALSE - else - return if(stun) owner.Stun(60, TRUE, TRUE) owner.dizziness = 20 @@ -594,47 +582,88 @@ datum/status_effect/pacify /datum/status_effect/trance/on_apply() if(!iscarbon(owner)) return FALSE - if(HAS_TRAIT(owner, "hypnotherapy")) - RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/listen) - return TRUE - alert_type = /obj/screen/alert/status_effect/trance RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/hypnotize) ADD_TRAIT(owner, TRAIT_MUTE, "trance") - if(!owner.has_quirk(/datum/quirk/monochromatic)) - owner.add_client_colour(/datum/client_colour/monochrome) + owner.add_client_colour(/datum/client_colour/monochrome/trance) owner.visible_message("[stun ? "[owner] stands still as [owner.p_their()] eyes seem to focus on a distant point." : ""]", \ "[pick("You feel your thoughts slow down...", "You suddenly feel extremely dizzy...", "You feel like you're in the middle of a dream...","You feel incredibly relaxed...")]") return TRUE -/datum/status_effect/trance/on_creation(mob/living/new_owner, _duration, _stun = TRUE, source_quirk = FALSE)//hypnoquirk makes no visible message, prevents self antag messages, and places phrase below objectives. +/datum/status_effect/trance/on_creation(mob/living/new_owner, _duration, _stun = TRUE) duration = _duration stun = _stun - if(source_quirk == FALSE && HAS_TRAIT(owner, "hypnotherapy")) - REMOVE_TRAIT(owner, "hypnotherapy", ROUNDSTART_TRAIT) return ..() /datum/status_effect/trance/on_remove() UnregisterSignal(owner, COMSIG_MOVABLE_HEAR) REMOVE_TRAIT(owner, TRAIT_MUTE, "trance") owner.dizziness = 0 - if(!owner.has_quirk(/datum/quirk/monochromatic)) - owner.remove_client_colour(/datum/client_colour/monochrome) + owner.remove_client_colour(/datum/client_colour/monochrome/trance) to_chat(owner, "You snap out of your trance!") -/datum/status_effect/trance/proc/listen(datum/source, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - to_chat(owner, "[speaker] accidentally sets off your implanted trigger, sending you into a hypnotic daze!") - triggered = TRUE - -/datum/status_effect/trance/proc/hypnotize(datum/source, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) +/datum/status_effect/trance/proc/hypnotize(datum/source, list/hearing_args) if(!owner.can_hear()) return - if(speaker == owner) + if(hearing_args[HEARING_SPEAKER] == owner) return var/mob/living/carbon/C = owner C.cure_trauma_type(/datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY) //clear previous hypnosis - if(HAS_TRAIT(C, "hypnotherapy")) - addtimer(CALLBACK(C, /mob/living/carbon.proc/gain_trauma, /datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY, raw_message, TRUE), 10) - else - addtimer(CALLBACK(C, /mob/living/carbon.proc/gain_trauma, /datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY, raw_message), 10) + addtimer(CALLBACK(C, /mob/living/carbon.proc/gain_trauma, /datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY, hearing_args[HEARING_RAW_MESSAGE]), 10) addtimer(CALLBACK(C, /mob/living.proc/Stun, 60, TRUE, TRUE), 15) //Take some time to think about it qdel(src) + +/datum/status_effect/spasms + id = "spasms" + status_type = STATUS_EFFECT_MULTIPLE + alert_type = null + +/datum/status_effect/spasms/tick() + if(prob(15)) + switch(rand(1,5)) + if(1) + if((!owner.lying && !owner.buckled) && isturf(owner.loc)) + to_chat(owner, "Your leg spasms!") + step(owner, pick(GLOB.cardinals)) + if(2) + if(owner.incapacitated()) + return + var/obj/item/I = owner.get_active_held_item() + if(I) + to_chat(owner, "Your fingers spasm!") + owner.log_message("used [I] due to a Muscle Spasm", LOG_ATTACK) + I.attack_self(owner) + if(3) + var/prev_intent = owner.a_intent + owner.a_intent = INTENT_HARM + + var/range = 1 + if(istype(owner.get_active_held_item(), /obj/item/gun)) //get targets to shoot at + range = 7 + + var/list/mob/living/targets = list() + for(var/mob/M in oview(owner, range)) + if(isliving(M)) + targets += M + if(LAZYLEN(targets)) + to_chat(owner, "Your arm spasms!") + owner.log_message(" attacked someone due to a Muscle Spasm", LOG_ATTACK) //the following attack will log itself + owner.ClickOn(pick(targets)) + owner.a_intent = prev_intent + if(4) + var/prev_intent = owner.a_intent + owner.a_intent = INTENT_HARM + to_chat(owner, "Your arm spasms!") + owner.log_message("attacked [owner.p_them()]self to a Muscle Spasm", LOG_ATTACK) + owner.ClickOn(owner) + owner.a_intent = prev_intent + if(5) + if(owner.incapacitated()) + return + var/obj/item/I = owner.get_active_held_item() + var/list/turf/targets = list() + for(var/turf/T in oview(owner, 3)) + targets += T + if(LAZYLEN(targets) && I) + to_chat(owner, "Your arm spasms!") + owner.log_message("threw [I] due to a Muscle Spasm", LOG_ATTACK) + owner.throw_item(pick(targets)) \ No newline at end of file diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 655863e0e0..cb2b4174b5 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -69,3 +69,17 @@ /datum/status_effect/in_love/tick() if(date) new /obj/effect/temp_visual/love_heart/invisible(get_turf(date.loc), owner) + +/datum/status_effect/throat_soothed + id = "throat_soothed" + duration = 60 SECONDS + status_type = STATUS_EFFECT_REFRESH + alert_type = null + +/datum/status_effect/throat_soothed/on_apply() + . = ..() + ADD_TRAIT(owner, TRAIT_SOOTHED_THROAT, "[STATUS_EFFECT_TRAIT]_[id]") + +/datum/status_effect/throat_soothed/on_remove() + . = ..() + REMOVE_TRAIT(owner, TRAIT_SOOTHED_THROAT, "[STATUS_EFFECT_TRAIT]_[id]") \ No newline at end of file diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index bc1cfba112..0d84aab763 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -64,6 +64,12 @@ owner = null qdel(src) +/datum/status_effect/proc/refresh() + var/original_duration = initial(duration) + if(original_duration == -1) + return + duration = world.time + original_duration + //clickdelay/nextmove modifiers! /datum/status_effect/proc/nextmove_modifier() return 1 @@ -92,6 +98,9 @@ if(S.id == initial(S1.id) && S.status_type) if(S.status_type == STATUS_EFFECT_REPLACE) S.be_replaced() + else if(S.status_type == STATUS_EFFECT_REFRESH) + S.refresh() + return else return var/list/arguments = args.Copy() diff --git a/code/game/atoms.dm b/code/game/atoms.dm index e8651ba93d..6f633f7c6d 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -280,35 +280,35 @@ ///Generate the full examine string of this atom (including icon for goonchat) /atom/proc/get_examine_string(mob/user, thats = FALSE) - . = "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]" + return "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]" /atom/proc/examine(mob/user) - to_chat(user, "[get_examine_string(user, TRUE)].") + . = list("[get_examine_string(user, TRUE)].") if(desc) - to_chat(user, desc) + . += desc if(reagents) if(reagents.reagents_holder_flags & TRANSPARENT) - to_chat(user, "It contains:") - if(reagents.reagent_list.len) + . += "It contains:" + if(length(reagents.reagent_list)) if(user.can_see_reagents()) //Show each individual reagent for(var/datum/reagent/R in reagents.reagent_list) - to_chat(user, "[R.volume] units of [R.name]") + . += "[R.volume] units of [R.name]" else //Otherwise, just show the total volume var/total_volume = 0 for(var/datum/reagent/R in reagents.reagent_list) total_volume += R.volume - to_chat(user, "[total_volume] units of various reagents") + . += "[total_volume] units of various reagents" else - to_chat(user, "Nothing.") + . += "Nothing." else if(reagents.reagents_holder_flags & AMOUNT_VISIBLE) if(reagents.total_volume) - to_chat(user, "It has [reagents.total_volume] unit\s left.") + . += "It has [reagents.total_volume] unit\s left." else - to_chat(user, "It's empty.") + . += "It's empty." - SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user) + SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .) /atom/proc/relaymove(mob/user) if(buckle_message_cooldown <= world.time) @@ -660,7 +660,7 @@ var/atom/L = loc if(!L) return null - return L.AllowDrop() ? L : get_turf(L) + return L.AllowDrop() ? L : L.drop_location() /atom/Entered(atom/movable/AM, atom/oldLoc) SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, AM, oldLoc) diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 30e53cdee8..a76e8234ba 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -349,7 +349,7 @@ Credit where due: changelog_contents += "
  • [entry]
  • " info = replacetext(info, "CLOCKCULTCHANGELOG", changelog_contents) -/obj/item/paper/servant_primer/examine(mob/user) - if(!is_servant_of_ratvar(user) && !isobserver(user)) - to_chat(user, "You can't understand any of the words on [src].") - ..() +/obj/item/paper/servant_primer/oui_getcontent(mob/target) + if(!is_servant_of_ratvar(target) && !isobserver(target)) + return "[name][stars(info)]
    [stamps]" + return ..() diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index 83a3debfdc..25edd0c68b 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -409,7 +409,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) message_admins("Drafting players for forced ruleset [rule.name].") log_game("DYNAMIC: Drafting players for forced ruleset [rule.name].") rule.mode = src - rule.acceptable(GLOB.player_list.len, threat_level) // Assigns some vars in the modes, running it here for consistency + rule.acceptable(roundstart_pop_ready, threat_level) // Assigns some vars in the modes, running it here for consistency rule.candidates = candidates.Copy() rule.trim_candidates() if (rule.ready(TRUE)) @@ -421,7 +421,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) return TRUE var/list/drafted_rules = list() for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules) - if (rule.acceptable(GLOB.player_list.len, threat_level) && threat >= rule.cost) // If we got the population and threat required + if (rule.acceptable(roundstart_pop_ready, threat_level) && threat >= rule.cost) // If we got the population and threat required rule.candidates = candidates.Copy() rule.trim_candidates() if (rule.ready() && rule.candidates.len > 0) @@ -429,12 +429,12 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if(!drafted_rules.len) message_admins("Not enough threat level for roundstart antags!") log_game("DYNAMIC: Not enough threat level for roundstart antags!") - var/indice_pop = min(10,round(GLOB.player_list.len/pop_per_requirement)+1) + var/indice_pop = min(10,round(roundstart_pop_ready/pop_per_requirement)+1) extra_rulesets_amount = 0 if (GLOB.dynamic_classic_secret) extra_rulesets_amount = 0 else - if (GLOB.player_list.len > GLOB.dynamic_high_pop_limit) + if (roundstart_pop_ready > GLOB.dynamic_high_pop_limit) message_admins("High Population Override is in effect! Threat Level will have more impact on which roles will appear, and player population less.") log_game("DYNAMIC: High Population Override is in effect! Threat Level will have more impact on which roles will appear, and player population less.") if (threat_level > high_pop_second_rule_req) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 41de85f7ee..8cda402ebf 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -41,6 +41,9 @@ if (!istype(M, required_type)) trimmed_list.Remove(M) continue + if (M.GetComponent(/datum/component/virtual_reality)) + trimmed_list.Remove(M) + continue if (!M.client) // Are they connected? trimmed_list.Remove(M) continue diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 58f551c648..6d681f8108 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -167,7 +167,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event /obj/effect/meteor/examine(mob/user) if(!(flags_1 & ADMIN_SPAWNED_1) && isliving(user)) SSmedals.UnlockMedal(MEDAL_METEOR, user.client) - ..() + return ..() /obj/effect/meteor/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_MINING) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 513fea4360..68f7327551 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -12,6 +12,7 @@ density = FALSE state_open = TRUE circuit = /obj/item/circuitboard/machine/sleeper + req_access = list(ACCESS_CMO) //Used for reagent deletion and addition of non medicines var/efficiency = 1 var/min_health = -25 var/list/available_chems @@ -28,9 +29,28 @@ /obj/machinery/sleeper/Initialize() . = ..() + create_reagents(500, NO_REACT) occupant_typecache = GLOB.typecache_living update_icon() reset_chem_buttons() + RefreshParts() + add_inital_chems() + +/obj/machinery/sleeper/Destroy() + var/obj/item/reagent_containers/sleeper_buffer/buffer = new /obj/item/reagent_containers/sleeper_buffer(loc) + buffer.volume = reagents.maximum_volume + buffer.reagents.maximum_volume = reagents.maximum_volume + reagents.trans_to(buffer.reagents, reagents.total_volume) + ..() + +/obj/machinery/sleeper/proc/add_inital_chems() + for(var/i in available_chems) + var/datum/reagent/R = reagents.has_reagent(i) + if(!R) + reagents.add_reagent(i, (20)) + continue + if(R.volume < 20) + reagents.add_reagent(i, (20 - R.volume)) /obj/machinery/sleeper/RefreshParts() var/E @@ -47,6 +67,11 @@ available_chems |= possible_chems[i] reset_chem_buttons() + //Total container size 500 - 2000u + if(reagents) + reagents.maximum_volume = (500*E) + + /obj/machinery/sleeper/update_icon() icon_state = initial(icon_state) if(state_open) @@ -81,7 +106,42 @@ if (. & EMP_PROTECT_SELF) return if(is_operational() && occupant) + var/datum/reagent/R = pick(reagents.reagent_list) + inject_chem(R.id, occupant) open_machine() + //Is this too much? + if(severity == EMP_HEAVY) + var/chem = pick(available_chems) + available_chems -= chem + available_chems += get_random_reagent_id() + reset_chem_buttons() + +/obj/machinery/sleeper/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/reagent_containers/sleeper_buffer)) + var/obj/item/reagent_containers/sleeper_buffer/SB = I + if((SB.reagents.total_volume + reagents.total_volume) < reagents.maximum_volume) + SB.reagents.trans_to(reagents, SB.reagents.total_volume) + visible_message("[user] places the [SB] into the [src].") + qdel(SB) + return + else + SB.reagents.trans_to(reagents, SB.reagents.total_volume) + visible_message("[user] adds as much as they can to the [src] from the [SB].") + return + if(istype(I, /obj/item/reagent_containers)) + var/obj/item/reagent_containers/RC = I + if(RC.reagents.total_volume == 0) + to_chat(user, "The [I] is empty!") + for(var/datum/reagent/R in RC.reagents.reagent_list) + if((obj_flags & EMAGGED) || (allowed(usr))) + break + if(!istype(R, /datum/reagent/medicine)) + visible_message("The [src] gives out a hearty boop and rejects the [I]. The Sleeper's screen flashes with a pompous \"Medicines only, please.\"") + return + RC.reagents.trans_to(reagents, 1000) + visible_message("[user] adds as much as they can to the [src] from the [I].") + return + /obj/machinery/sleeper/MouseDrop_T(mob/target, mob/user) if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) @@ -130,8 +190,8 @@ open_machine() /obj/machinery/sleeper/examine(mob/user) - ..() - to_chat(user, "Alt-click [src] to [state_open ? "close" : "open"] it.") + . = ..() + . += "Alt-click [src] to [state_open ? "close" : "open"] it." /obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) @@ -141,18 +201,24 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "sleeper", name, 375, 550, master_ui, state) + ui = new(user, src, ui_key, "sleeper", name, 550, 700, master_ui, state) ui.open() /obj/machinery/sleeper/ui_data() var/list/data = list() data["occupied"] = occupant ? 1 : 0 data["open"] = state_open + data["efficiency"] = efficiency + data["current_vol"] = reagents.total_volume + data["tot_capacity"] = reagents.maximum_volume data["chems"] = list() for(var/chem in available_chems) - var/datum/reagent/R = GLOB.chemical_reagents_list[chem] - data["chems"] += list(list("name" = R.name, "id" = R.id, "allowed" = chem_allowed(chem))) + var/datum/reagent/R = reagents.has_reagent(chem) + R = GLOB.chemical_reagents_list[chem] + data["synthchems"] += list(list("name" = R.name, "id" = R.id, "synth_allowed" = synth_allowed(chem))) + for(var/datum/reagent/R in reagents.reagent_list) + data["chems"] += list(list("name" = R.name, "id" = R.id, "vol" = R.volume, "purity" = R.purity, "allowed" = chem_allowed(R.id))) data["occupant"] = list() var/mob/living/mob_occupant = occupant @@ -184,8 +250,15 @@ if(mob_occupant.reagents && mob_occupant.reagents.reagent_list.len) for(var/datum/reagent/R in mob_occupant.reagents.reagent_list) data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume)) + data["occupant"]["failing_organs"] = list() + var/mob/living/carbon/C = mob_occupant + if(C) + for(var/obj/item/organ/Or in C.getFailingOrgans()) + if(istype(Or, /obj/item/organ/brain)) + continue + data["occupant"]["failing_organs"] += list(list("name" = Or.name)) + if(mob_occupant.has_dna()) // Blood-stuff is mostly a copy-paste from the healthscanner. - var/mob/living/carbon/C = mob_occupant var/blood_id = C.get_blood_id() if(blood_id) data["occupant"]["blood"] = list() // We can start populating this list. @@ -196,7 +269,7 @@ blood_type = R.name else blood_type = blood_id - data["occupant"]["blood"]["maxBloodVolume"] = BLOOD_VOLUME_NORMAL + data["occupant"]["blood"]["maxBloodVolume"] = (BLOOD_VOLUME_NORMAL*C.blood_ratio) data["occupant"]["blood"]["currentBloodVolume"] = C.blood_volume data["occupant"]["blood"]["dangerBloodVolume"] = BLOOD_VOLUME_SAFE data["occupant"]["blood"]["bloodType"] = blood_type @@ -216,24 +289,49 @@ . = TRUE if("inject") var/chem = params["chem"] + var/amount = text2num(params["volume"]) if(!is_operational() || !mob_occupant) return if(mob_occupant.health < min_health && chem != "epinephrine") return - if(inject_chem(chem, usr)) + if(inject_chem(chem, usr, amount)) . = TRUE if(scrambled_chems && prob(5)) to_chat(usr, "Chemical system re-route detected, results may not be as expected!") + if("synth") + var/chem = params["chem"] + if(!is_operational()) + return + reagents.add_reagent(chem_buttons[chem], 10) //other_purity = 0.75 for when the mechanics are in + if("purge") + var/chem = params["chem"] + if(allowed(usr)) + if(!is_operational()) + return + reagents.remove_reagent(chem, 10) + return + if(chem in available_chems) + if(!is_operational()) + return + /*var/datum/reagent/R = reagents.has_reagent(chem) //For when purity effects are in + if(R.purity < 0.8)*/ + reagents.remove_reagent(chem, 10) + else + visible_message("Access Denied.") + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + /obj/machinery/sleeper/emag_act(mob/user) . = ..() + obj_flags |= EMAGGED scramble_chem_buttons() to_chat(user, "You scramble the sleeper's user interface!") return TRUE -/obj/machinery/sleeper/proc/inject_chem(chem, mob/user) - if((chem in available_chems) && chem_allowed(chem)) - occupant.reagents.add_reagent(chem_buttons[chem], 10) //emag effect kicks in here so that the "intended" chem is used for all checks, for extra FUUU +//trans to +/obj/machinery/sleeper/proc/inject_chem(chem, mob/user, volume = 10) + if(chem_allowed(chem)) + reagents.trans_id_to(occupant, chem, volume)//emag effect kicks in here so that the "intended" chem is used for all checks, for extra FUUU if(user) log_combat(user, occupant, "injected [chem] into", addition = "via [src]") return TRUE @@ -246,6 +344,14 @@ var/occ_health = mob_occupant.health > min_health || chem == "epinephrine" return amount && occ_health +/obj/machinery/sleeper/proc/synth_allowed(chem) + var/datum/reagent/R = reagents.has_reagent(chem) + if(!R) + return TRUE + if(R.volume < 50) + return TRUE + return FALSE + /obj/machinery/sleeper/proc/reset_chem_buttons() scrambled_chems = FALSE LAZYINITLIST(chem_buttons) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index e2dcf552c1..ff7383cd9e 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -454,20 +454,20 @@ Class Procs: /obj/machinery/examine(mob/user) . = ..() if(stat & BROKEN) - to_chat(user, "It looks broken and non-functional.") + . += "It looks broken and non-functional." if(!(resistance_flags & INDESTRUCTIBLE)) if(resistance_flags & ON_FIRE) - to_chat(user, "It's on fire!") + . += "It's on fire!" var/healthpercent = (obj_integrity/max_integrity) * 100 switch(healthpercent) if(50 to 99) - to_chat(user, "It looks slightly damaged.") + . += "It looks slightly damaged." if(25 to 50) - to_chat(user, "It appears heavily damaged.") + . += "It appears heavily damaged." if(0 to 25) - to_chat(user, "It's falling apart!") + . += "It's falling apart!" if(user.research_scanner && component_parts) - to_chat(user, display_parts(user, TRUE)) + . += display_parts(user, TRUE) //called on machinery construction (i.e from frame to machinery) but not on initialization /obj/machinery/proc/on_construction() diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index cac29404d2..1703ce57d1 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -14,8 +14,8 @@ req_access = list(ACCESS_AI_UPLOAD) /obj/machinery/ai_slipper/examine(mob/user) - ..() - to_chat(user, "It has [uses] uses of foam remaining.") + . = ..() + . += "It has [uses] uses of foam remaining." /obj/machinery/ai_slipper/power_change() if(stat & BROKEN) diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index 8419f5803c..b9d63e5771 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -11,9 +11,9 @@ var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi') /obj/machinery/aug_manipulator/examine(mob/user) - ..() + . = ..() if(storedpart) - to_chat(user, "Alt-click to eject the limb.") + . += "Alt-click to eject the limb." /obj/machinery/aug_manipulator/Initialize() initial_icon_state = initial(icon_state) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index fb384d55ae..1839e44e3b 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -24,10 +24,10 @@ add_overlay("ccharger-o[newlevel]") /obj/machinery/cell_charger/examine(mob/user) - ..() - to_chat(user, "There's [charging ? "a" : "no"] cell in the charger.") + . = ..() + . += "There's [charging ? "a" : "no"] cell in the charger." if(charging) - to_chat(user, "Current charge: [round(charging.percent(), 1)]%.") + . += "Current charge: [round(charging.percent(), 1)]%." /obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/stock_parts/cell) && !panel_open) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index e65da0fcff..e683d67be2 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -93,20 +93,20 @@ to_chat(user, "You flip the write-protect tab to [read_only ? "protected" : "unprotected"].") /obj/item/disk/data/examine(mob/user) - ..() - to_chat(user, "The write-protect tab is set to [read_only ? "protected" : "unprotected"].") + . = ..() + . += "The write-protect tab is set to [read_only ? "protected" : "unprotected"]." //Clonepod /obj/machinery/clonepod/examine(mob/user) - ..() + . = ..() var/mob/living/mob_occupant = occupant if(mess) - to_chat(user, "It's filled with blood and viscera. You swear you can see it moving...") + . += "It's filled with blood and viscera. You swear you can see it moving..." if(is_operational() && mob_occupant) if(mob_occupant.stat != DEAD) - to_chat(user, "Current clone cycle is [round(get_completion())]% complete.") + . += "Current clone cycle is [round(get_completion())]% complete." /obj/machinery/clonepod/return_air() // We want to simulate the clone not being in contact with diff --git a/code/game/machinery/computer/arcade/orion_trail.dm b/code/game/machinery/computer/arcade/orion_trail.dm index 023b1048ce..c8c7bc1319 100644 --- a/code/game/machinery/computer/arcade/orion_trail.dm +++ b/code/game/machinery/computer/arcade/orion_trail.dm @@ -762,13 +762,13 @@ var/active = 0 //if the ship is on /obj/item/orion_ship/examine(mob/user) - ..() + . = ..() if(!(in_range(user, src))) return if(!active) - to_chat(user, "There's a little switch on the bottom. It's flipped down.") + . += "There's a little switch on the bottom. It's flipped down." else - to_chat(user, "There's a little switch on the bottom. It's flipped up.") + . += "There's a little switch on the bottom. It's flipped up." /obj/item/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse if(active) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 11935e2bfc..1bafa73aaa 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -17,13 +17,7 @@ network += lowertext(i) /obj/machinery/computer/security/check_eye(mob/user) - if(CHECK_BITFIELD(stat, NOPOWER|BROKEN) || is_blind(user) || !in_view_range(user, src) || !user.canUseTopic(src, !issilicon(user), FALSE)) - user.unset_machine() - return - if(!(user in watchers)) - user.unset_machine() - return - if(!watchers[user]) + if(!can_interact(user) || !(user in watchers) || !watchers[user]) user.unset_machine() return var/obj/machinery/camera/C = watchers[user] @@ -41,55 +35,50 @@ M.unset_machine() //to properly reset the view of the users if the console is deleted. return ..() -/obj/machinery/computer/security/attack_hand(mob/user) +/obj/machinery/computer/security/can_interact(mob/user) + if((!issilicon(user) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src)) + return FALSE + return ..() + +/obj/machinery/computer/security/interact(mob/user, special_state) . = ..() - if(.) - return - if(stat) + if (ismob(user) && !isliving(user)) // ghosts don't need cameras return if (!network) - throw EXCEPTION("No camera network") + CRASH("No camera network") user.unset_machine() - return + return FALSE if (!(islist(network))) - throw EXCEPTION("Camera network is not a list") + CRASH("Camera network is not a list") user.unset_machine() - return - if(..()) - user.unset_machine() - return + return FALSE var/list/camera_list = get_available_cameras() if(!(user in watchers)) for(var/Num in camera_list) var/obj/machinery/camera/CAM = camera_list[Num] - if(istype(CAM)) - if(CAM.can_use()) - watchers[user] = CAM //let's give the user the first usable camera, and then let him change to the camera he wants. - break + if(istype(CAM) && CAM.can_use()) + watchers[user] = CAM //let's give the user the first usable camera, and then let him change to the camera he wants. + break if(!(user in watchers)) user.unset_machine() // no usable camera on the network, we disconnect the user from the computer. - return + return FALSE playsound(src, 'sound/machines/terminal_prompt.ogg', 25, 0) use_camera_console(user) /obj/machinery/computer/security/proc/use_camera_console(mob/user) var/list/camera_list = get_available_cameras() var/t = input(user, "Which camera should you change to?") as null|anything in camera_list - if(user.machine != src) //while we were choosing we got disconnected from our computer or are using another machine. + if(!src || user.machine != src) //while we were choosing we got disconnected from our computer or are using another machine. return - if(!t) + if(!t || t == "Cancel") user.unset_machine() playsound(src, 'sound/machines/terminal_off.ogg', 25, 0) return var/obj/machinery/camera/C = camera_list[t] - if(t == "Cancel") - user.unset_machine() - playsound(src, 'sound/machines/terminal_off.ogg', 25, 0) - return - if(!C || !C.can_use() || CHECK_BITFIELD(stat, NOPOWER|BROKEN) || is_blind(user) || !in_view_range(user, src) || !user.canUseTopic(src, !issilicon(user), FALSE)) + if(!C || !C.can_use() || !can_interact(user)) user.unset_machine() return FALSE diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index fa0cf367d9..e8e8e1cdd6 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -63,7 +63,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) /obj/machinery/computer/card/examine(mob/user) . = ..() if(inserted_scan_id || inserted_modify_id) - to_chat(user, "Alt-click to eject the ID card.") + . += "Alt-click to eject the ID card." /obj/machinery/computer/card/attackby(obj/I, mob/user, params) if(isidcard(I)) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index de5022d751..7a39e73ad3 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -8,9 +8,9 @@ var/state = 1 /obj/structure/frame/examine(user) - ..() + . = ..() if(circuit) - to_chat(user, "It has \a [circuit] installed.") + . += "It has \a [circuit] installed." /obj/structure/frame/deconstruct(disassembled = TRUE) @@ -29,7 +29,7 @@ var/list/req_component_names = null // user-friendly names of components /obj/structure/frame/machine/examine(user) - ..() + . = ..() if(state == 3 && req_components && req_component_names) var/hasContent = 0 var/requires = "It requires" @@ -44,9 +44,9 @@ hasContent = 1 if(hasContent) - to_chat(user, requires + ".") + . += requires + "." else - to_chat(user, "It does not require any more components.") + . += "It does not require any more components." /obj/structure/frame/machine/proc/update_namelist() if(!req_components) diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm index 4210435f33..97cc0f5748 100644 --- a/code/game/machinery/defibrillator_mount.dm +++ b/code/game/machinery/defibrillator_mount.dm @@ -24,13 +24,13 @@ . = ..() /obj/machinery/defibrillator_mount/examine(mob/user) - ..() + . = ..() if(defib) - to_chat(user, "There is a defib unit hooked up. Alt-click to remove it.") + . += "There is a defib unit hooked up. Alt-click to remove it." if(GLOB.security_level >= SEC_LEVEL_RED) - to_chat(user, "Due to a security situation, its locking clamps can be toggled by swiping any ID.") + . += "Due to a security situation, its locking clamps can be toggled by swiping any ID." else - to_chat(user, "Its locking clamps can be [clamps_locked ? "dis" : ""]engaged by swiping an ID with access.") + . += "Its locking clamps can be [clamps_locked ? "dis" : ""]engaged by swiping an ID with access." /obj/machinery/defibrillator_mount/process() if(defib && defib.cell && defib.cell.charge < defib.cell.maxcharge && is_operational()) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index eaf8faef12..b94dbad2de 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -149,8 +149,8 @@ var/mode = SINGLE /obj/item/grenade/barrier/examine(mob/user) - ..() - to_chat(user, "Alt-click to toggle modes.") + . = ..() + . += "Alt-click to toggle modes." /obj/item/grenade/barrier/AltClick(mob/living/carbon/user) if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index 66aa1347cb..3aad8d874c 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -27,9 +27,9 @@ RefreshParts() /obj/machinery/dish_drive/examine(mob/user) - ..() + . = ..() if(user.Adjacent(src)) - to_chat(user, "Alt-click it to beam its contents to any nearby disposal bins.") + . += "Alt-click it to beam its contents to any nearby disposal bins." /obj/machinery/dish_drive/attack_hand(mob/living/user) if(!contents.len) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index f85fb3f310..52b52eb288 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -640,47 +640,47 @@ update_icon(AIRLOCK_CLOSED) /obj/machinery/door/airlock/examine(mob/user) - ..() + . = ..() if(obj_flags & EMAGGED) - to_chat(user, "Its access panel is smoking slightly.") + . += "Its access panel is smoking slightly." if(charge && !panel_open && in_range(user, src)) - to_chat(user, "The maintenance panel seems haphazardly fastened.") + . += "The maintenance panel seems haphazardly fastened." if(charge && panel_open) - to_chat(user, "Something is wired up to the airlock's electronics!") + . += "Something is wired up to the airlock's electronics!" if(note) if(!in_range(user, src)) - to_chat(user, "There's a [note.name] pinned to the front. You can't read it from here.") + . += "There's a [note.name] pinned to the front. You can't read it from here." else - to_chat(user, "There's a [note.name] pinned to the front...") - note.examine(user) + . += "There's a [note.name] pinned to the front..." + . += note.examine(user) if(panel_open) switch(security_level) if(AIRLOCK_SECURITY_NONE) - to_chat(user, "Its wires are exposed!") + . += "Its wires are exposed!" if(AIRLOCK_SECURITY_METAL) - to_chat(user, "Its wires are hidden behind a welded metal cover.") + . += "Its wires are hidden behind a welded metal cover." if(AIRLOCK_SECURITY_PLASTEEL_I_S) - to_chat(user, "There is some shredded plasteel inside.") + . += "There is some shredded plasteel inside." if(AIRLOCK_SECURITY_PLASTEEL_I) - to_chat(user, "Its wires are behind an inner layer of plasteel.") + . += "Its wires are behind an inner layer of plasteel." if(AIRLOCK_SECURITY_PLASTEEL_O_S) - to_chat(user, "There is some shredded plasteel inside.") + . += "There is some shredded plasteel inside." if(AIRLOCK_SECURITY_PLASTEEL_O) - to_chat(user, "There is a welded plasteel cover hiding its wires.") + . += "There is a welded plasteel cover hiding its wires." if(AIRLOCK_SECURITY_PLASTEEL) - to_chat(user, "There is a protective grille over its panel.") + . += "There is a protective grille over its panel." else if(security_level) if(security_level == AIRLOCK_SECURITY_METAL) - to_chat(user, "It looks a bit stronger.") + . += "It looks a bit stronger." else - to_chat(user, "It looks very robust.") + . += "It looks very robust." if(issilicon(user) && (!stat & BROKEN)) - to_chat(user, "Shift-click [src] to [ density ? "open" : "close"] it.") - to_chat(user, "Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts.") - to_chat(user, "Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it.") - to_chat(user, "Ctrl-Shift-click [src] to [ emergency ? "disable" : "enable"] emergency access.") + . += "Shift-click [src] to [ density ? "open" : "close"] it." + . += "Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts." + . += "Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it." + . += "Ctrl-Shift-click [src] to [ emergency ? "disable" : "enable"] emergency access." /obj/machinery/door/airlock/attack_ai(mob/user) if(!src.canAIControl(user)) diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index cfaa94b842..54774a8f99 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -7,8 +7,8 @@ var/unres_sides = 0 //unrestricted sides, or sides of the airlock that will open regardless of access /obj/item/electronics/airlock/examine(mob/user) - ..() - to_chat(user, "Has a neat selection menu for modifying airlock access levels.") + . = ..() + . += "Has a neat selection menu for modifying airlock access levels." /obj/item/electronics/airlock/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 59b49d5828..50ae7dab18 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -593,14 +593,12 @@ return ..() /obj/machinery/door/airlock/clockwork/examine(mob/user) - ..() - var/gear_text = "The cogwheel is flickering and twisting wildly. Report this to a coder." + . = ..() switch(construction_state) if(GEAR_SECURE) - gear_text = "The cogwheel is solidly wrenched to the brass around it." + . += "The cogwheel is solidly wrenched to the brass around it." if(GEAR_LOOSE) - gear_text = "The cogwheel has been loosened, but remains connected loosely to the door!" - to_chat(user, gear_text) + . += "The cogwheel has been loosened, but remains connected loosely to the door!" /obj/machinery/door/airlock/clockwork/emp_act(severity) if(prob(80/severity)) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 3ac386e1fb..ee8742e84f 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -37,14 +37,14 @@ var/unres_sides = 0 //Unrestricted sides. A bitflag for which direction (if any) can open the door with no access /obj/machinery/door/examine(mob/user) - ..() + . = ..() if(red_alert_access) if(GLOB.security_level >= SEC_LEVEL_RED) - to_chat(user, "Due to a security threat, its access requirements have been lifted!") + . += "Due to a security threat, its access requirements have been lifted!" else - to_chat(user, "In the event of a red alert, its access requirements will automatically lift.") + . += "In the event of a red alert, its access requirements will automatically lift." if(!poddoor) - to_chat(user, "Its maintenance panel is screwed in place.") + . += "Its maintenance panel is screwed in place." /obj/machinery/door/check_access_list(list/access_list) if(red_alert_access && GLOB.security_level >= SEC_LEVEL_RED) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 507769f9a3..dec41b0a59 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -34,13 +34,13 @@ /obj/machinery/door/firedoor/examine(mob/user) ..() if(!density) - to_chat(user, "It is open, but could be pried closed.") + . += "It is open, but could be pried closed." else if(!welded) - to_chat(user, "It is closed, but could be pried open. Deconstruction would require it to be welded shut.") + . += "It is closed, but could be pried open. Deconstruction would require it to be welded shut." else if(boltslocked) - to_chat(user, "It is welded shut. The floor bolts have been locked by screws.") + . += "It is welded shut. The floor bolts have been locked by screws." else - to_chat(user, "The bolt locks have been unscrewed, but the bolts themselves are still wrenched to the floor.") + . += "The bolt locks have been unscrewed, but the bolts themselves are still wrenched to the floor." /obj/machinery/door/firedoor/proc/CalculateAffectingAreas() remove_from_areas() @@ -270,18 +270,18 @@ var/reinforced = 0 /obj/structure/firelock_frame/examine(mob/user) - ..() + . = ..() switch(constructionStep) if(CONSTRUCTION_PANEL_OPEN) - to_chat(user, "It is unbolted from the floor. A small loosely connected metal plate is covering the wires.") + . += "It is unbolted from the floor. A small loosely connected metal plate is covering the wires." if(!reinforced) - to_chat(user, "It could be reinforced with plasteel.") + . += "It could be reinforced with plasteel." if(CONSTRUCTION_WIRES_EXPOSED) - to_chat(user, "The maintenance plate has been pried away, and wires are trailing.") + . += "The maintenance plate has been pried away, and wires are trailing." if(CONSTRUCTION_GUTTED) - to_chat(user, "The maintenance panel is missing wires and the circuit board is loosely connected.") + . += "The maintenance panel is missing wires and the circuit board is loosely connected." if(CONSTRUCTION_NOCIRCUIT) - to_chat(user, "There are no firelock electronics in the frame. The frame could be cut apart.") + . += "There are no firelock electronics in the frame. The frame could be cut apart." /obj/structure/firelock_frame/update_icon() ..() diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 7fb240c711..1c25c7b242 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -22,8 +22,8 @@ GLOBAL_LIST_EMPTY(doppler_arrays) return ..() /obj/machinery/doppler_array/examine(mob/user) - ..() - to_chat(user, "Its dish is facing to the [dir2text(dir)].") + . = ..() + . += "Its dish is facing to the [dir2text(dir)]." /obj/machinery/doppler_array/process() return PROCESS_KILL @@ -114,13 +114,13 @@ GLOBAL_LIST_EMPTY(doppler_arrays) return var/point_gain = 0 - + /*****The Point Calculator*****/ - + if(orig_light < 10) say("Explosion not large enough for research calculations.") return - else if(orig_light < 4500) + else if(orig_light < 4500) point_gain = (83300 * orig_light) / (orig_light + 3000) else point_gain = TECHWEB_BOMB_POINTCAP diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index b121057315..96ac8981c9 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -129,9 +129,9 @@ break_message = "slowly falls dark, lights stuttering." /obj/machinery/droneDispenser/examine(mob/user) - ..() + . = ..() if((mode == DRONE_RECHARGING) && !stat && recharging_text) - to_chat(user, "[recharging_text]") + . += "[recharging_text]" /obj/machinery/droneDispenser/power_change() ..() diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 5e20e5ee0e..def530a14d 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -196,8 +196,8 @@ var/id = null /obj/item/wallframe/flasher/examine(mob/user) - ..() - to_chat(user, "Its channel ID is '[id]'.") + . = ..() + . += "Its channel ID is '[id]'." /obj/item/wallframe/flasher/after_attach(var/obj/O) ..() diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm index db015eb7c1..e6b8fe3b88 100644 --- a/code/game/machinery/harvester.dm +++ b/code/game/machinery/harvester.dm @@ -183,10 +183,10 @@ container_resist(user) /obj/machinery/harvester/examine(mob/user) - ..() + . = ..() if(stat & BROKEN) return if(state_open) - to_chat(user, "[src] must be closed before harvesting.") + . += "[src] must be closed before harvesting." else if(!harvesting) - to_chat(user, "Alt-click [src] to start harvesting.") \ No newline at end of file + . += "Alt-click [src] to start harvesting." \ No newline at end of file diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 621ca266bb..aee1cf4f69 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -221,7 +221,6 @@ . += "\tNo chemicals are attached.\n" . += "\t[attached ? attached : "No one"] is attached." - to_chat(user,.) #undef IV_TAKING #undef IV_INJECTING \ No newline at end of file diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index cbb9b4f253..694df02eb5 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -33,8 +33,8 @@ icon_state = "light0" /obj/machinery/light_switch/examine(mob/user) - ..() - to_chat(user, "It is [on? "on" : "off"].") + . = ..() + . += "It is [on? "on" : "off"]." /obj/machinery/light_switch/interact(mob/user) . = ..() diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 289f075302..8c2a04bfbc 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -838,10 +838,10 @@ T.cp = src /obj/machinery/turretid/examine(mob/user) - ..() + . = ..() if(issilicon(user) && (!stat & BROKEN)) - to_chat(user, "Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets.") - to_chat(user, "Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"].") + . += "Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets." + . += "Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"]." /obj/machinery/turretid/attackby(obj/item/I, mob/user, params) if(stat & BROKEN) diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index b5ef38b42c..f9fda50daf 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -30,12 +30,12 @@ return ..() /obj/machinery/quantumpad/examine(mob/user) - ..() - to_chat(user, "It is [ linked_pad ? "currently" : "not"] linked to another pad.") + . = ..() + . += "It is [ linked_pad ? "currently" : "not"] linked to another pad." if(!panel_open) - to_chat(user, "The panel is screwed in, obstructing the linking device.") + . += "The panel is screwed in, obstructing the linking device." else - to_chat(user, "The linking device is now able to be scanned with a multitool.") + . += "The linking device is now able to be scanned with a multitool." /obj/machinery/quantumpad/RefreshParts() var/E = 0 diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 73aadc99d0..d39de4d37d 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -40,10 +40,10 @@ butchering.bonus_modifier = amount_produced/5 /obj/machinery/recycler/examine(mob/user) - ..() - to_chat(user, "The power light is [(stat & NOPOWER) ? "off" : "on"].") - to_chat(user, "The safety-mode light is [safety_mode ? "on" : "off"].") - to_chat(user, "The safety-sensors status light is [obj_flags & EMAGGED ? "off" : "on"].") + . = ..() + . += "The power light is [(stat & NOPOWER) ? "off" : "on"]." + . += "The safety-mode light is [safety_mode ? "on" : "off"]." + . += "The safety-sensors status light is [obj_flags & EMAGGED ? "off" : "on"]." /obj/machinery/recycler/power_change() ..() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index ce325505e2..984a911d32 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -46,12 +46,12 @@ return ..() /obj/machinery/space_heater/examine(mob/user) - ..() - to_chat(user, "\The [src] is [on ? "on" : "off"], and the hatch is [panel_open ? "open" : "closed"].") + . = ..() + . += "\The [src] is [on ? "on" : "off"], and the hatch is [panel_open ? "open" : "closed"]." if(cell) - to_chat(user, "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%.") + . += "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%." else - to_chat(user, "There is no power cell installed.") + . += "There is no power cell installed." /obj/machinery/space_heater/update_icon() if(on) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index ec53cc3210..af5f50f28d 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -114,12 +114,11 @@ /obj/machinery/status_display/examine(mob/user) . = ..() if (message1 || message2) - var/list/msg = list("The display says:") + . += "The display says:" if (message1) - msg += "
    \t[html_encode(message1)]" + . += "\t[html_encode(message1)]" if (message2) - msg += "
    \t[html_encode(message2)]" - to_chat(user, msg.Join()) + . += "\t[html_encode(message2)]" // Helper procs for child display types. /obj/machinery/status_display/proc/display_shuttle_status(obj/docking_port/mobile/shuttle) @@ -146,9 +145,9 @@ modestr = "
    \t[modestr]: [shuttle.getTimerStr()]" else modestr = "
    \t[modestr]" - to_chat(user, "The display says:
    \t[shuttle.name][modestr]") + return "The display says:
    \t[shuttle.name][modestr]" else - to_chat(user, "The display says:
    \tShuttle missing!") + return "The display says:
    \tShuttle missing!" /// Evac display which shows shuttle timer or message set by Command. @@ -195,9 +194,9 @@ /obj/machinery/status_display/evac/examine(mob/user) . = ..() if(mode == SD_EMERGENCY) - examine_shuttle(user, SSshuttle.emergency) + . += examine_shuttle(user, SSshuttle.emergency) else if(!message1 && !message2) - to_chat(user, "The display is blank.") + . += "The display is blank." /obj/machinery/status_display/evac/receive_signal(datum/signal/signal) switch(signal.data["command"]) @@ -257,9 +256,9 @@ else shuttleMsg = "[shuttle.getModeStr()]: [shuttle.getTimerStr()]" if (shuttleMsg) - to_chat(user, "The display says:
    \t[shuttleMsg]") + . += "The display says:
    \t[shuttleMsg]" else - to_chat(user, "The display is blank.") + . += "The display is blank." /// General-purpose shuttle status display. @@ -278,9 +277,9 @@ /obj/machinery/status_display/shuttle/examine(mob/user) . = ..() if(shuttle_id) - examine_shuttle(user, SSshuttle.getShuttle(shuttle_id)) + . += examine_shuttle(user, SSshuttle.getShuttle(shuttle_id)) else - to_chat(user, "The display is blank.") + . += "The display is blank." /obj/machinery/status_display/shuttle/vv_edit_var(var_name, var_value) . = ..() diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 4a97aa1775..ebc2533124 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -99,8 +99,8 @@ return ..() /obj/machinery/syndicatebomb/examine(mob/user) - ..() - to_chat(user, "A digital display on it reads \"[seconds_remaining()]\".") + . = ..() + . += "A digital display on it reads \"[seconds_remaining()]\"." /obj/machinery/syndicatebomb/update_icon() icon_state = "[initial(icon_state)][active ? "-active" : "-inactive"][open_panel ? "-wires" : ""]" diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 1ebe8cb463..3ff2424d83 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -28,7 +28,7 @@ /obj/machinery/transformer/examine(mob/user) . = ..() if(cooldown && (issilicon(user) || isobserver(user))) - to_chat(user, "It will be ready in [DisplayTimeText(cooldown_timer - world.time)].") + . += "It will be ready in [DisplayTimeText(cooldown_timer - world.time)]." /obj/machinery/transformer/Destroy() QDEL_NULL(countdown) diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 8be079656b..081d91e56f 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -12,8 +12,8 @@ var/max_wash_capacity = 5 /obj/machinery/washing_machine/examine(mob/user) - ..() - to_chat(user, "Alt-click it to start a wash cycle.") + . = ..() + . += "Alt-click it to start a wash cycle." /obj/machinery/washing_machine/AltClick(mob/user) if(!user.canUseTopic(src)) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 717c94362c..fe0ec33ed6 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -270,23 +270,23 @@ //////////////////////////////////////////////////////////////////////////////// /obj/mecha/examine(mob/user) - ..() + . = ..() var/integrity = obj_integrity*100/max_integrity switch(integrity) if(85 to 100) - to_chat(user, "It's fully intact.") + . += "It's fully intact." if(65 to 85) - to_chat(user, "It's slightly damaged.") + . += "It's slightly damaged." if(45 to 65) - to_chat(user, "It's badly damaged.") + . += "It's badly damaged." if(25 to 45) - to_chat(user, "It's heavily damaged.") + . += "It's heavily damaged." else - to_chat(user, "It's falling apart.") + . += "It's falling apart." if(equipment && equipment.len) - to_chat(user, "It's equipped with:") + . += "It's equipped with:" for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) - to_chat(user, "[icon2html(ME, user)] \A [ME].") + . += "[icon2html(ME, user)] \A [ME]." //processing internal damage, temperature, air regulation, alert updates, lights power use. /obj/mecha/process() diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 645c13292b..d6ba08e021 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -30,9 +30,9 @@ AI.remote_control = null /obj/structure/mecha_wreckage/examine(mob/user) - ..() + . = ..() if(AI) - to_chat(user, "The AI recovery beacon is active.") + . += "The AI recovery beacon is active." /obj/structure/mecha_wreckage/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weldingtool)) diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm index eea6b6ba39..6017e8fc07 100644 --- a/code/game/objects/effects/countdown.dm +++ b/code/game/objects/effects/countdown.dm @@ -20,7 +20,7 @@ /obj/effect/countdown/examine(mob/user) . = ..() - to_chat(user, "This countdown is displaying: [displayed_text].") + . += "This countdown is displaying: [displayed_text]." /obj/effect/countdown/proc/attach(atom/A) attached_to = A diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 842b230b53..4eab5e826b 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -130,12 +130,10 @@ /obj/effect/decal/cleanable/blood/footprints/examine(mob/user) . = ..() if(shoe_types.len) - . += "You recognise the footprints as belonging to:\n" + . += "You recognise the footprints as belonging to:" for(var/shoe in shoe_types) var/obj/item/clothing/shoes/S = shoe - . += "some [initial(S.name)] [icon2html(initial(S.icon), user)]\n" - - to_chat(user, .) + . += "some [initial(S.name)] [icon2html(initial(S.icon), user)]" /obj/effect/decal/cleanable/blood/footprints/replace_decal(obj/effect/decal/cleanable/C) if(blood_state != C.blood_state) //We only replace footprints of the same type as us diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index c009d3ec79..9a498c9a70 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -36,7 +36,7 @@ /obj/structure/glowshroom/examine(mob/user) . = ..() - to_chat(user, "This is a [generation]\th generation [name]!") + . += "This is a [generation]\th generation [name]!" /obj/structure/glowshroom/Destroy() if(myseed) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index fbad000098..0990486ae3 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -315,6 +315,11 @@ randomdir = 0 duration = 6 +/obj/effect/temp_visual/desynchronizer + name = "desynchronizer field" + icon_state = "chronofield" + duration = 3 + /obj/effect/temp_visual/impact_effect icon_state = "impact_bullet" duration = 5 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 4f472c6477..1c9ea1edcb 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -183,14 +183,24 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) src.loc = T /obj/item/examine(mob/user) //This might be spammy. Remove? - ..() - var/pronoun - if(src.gender == PLURAL) - pronoun = "They are" + . = ..() + + . += "[gender == PLURAL ? "They are" : "It is"] a [weightclass2text(w_class)] item." + + if(resistance_flags & INDESTRUCTIBLE) + . += "[src] seems extremely robust! It'll probably withstand anything that could happen to it!" else - pronoun = "It is" - var/size = weightclass2text(src.w_class) - to_chat(user, "[pronoun] a [size] item." ) + if(resistance_flags & LAVA_PROOF) + . += "[src] is made of an extremely heat-resistant material, it'd probably be able to withstand lava!" + if(resistance_flags & (ACID_PROOF | UNACIDABLE)) + . += "[src] looks pretty robust! It'd probably be able to withstand acid!" + if(resistance_flags & FREEZE_PROOF) + . += "[src] is made of cold-resistant materials." + if(resistance_flags & FIRE_PROOF) + . += "[src] is made of fire-retardant materials." + + + if(!user.research_scanner) return @@ -227,7 +237,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) else research_msg += "None" research_msg += "." - to_chat(user, research_msg.Join()) + . += research_msg.Join() /obj/item/interact(mob/user) add_fingerprint(user) diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm index a8d0bed2aa..15881ab2a5 100644 --- a/code/game/objects/items/AI_modules.dm +++ b/code/game/objects/items/AI_modules.dm @@ -25,7 +25,7 @@ AI MODULES materials = list(MAT_GOLD=50) /obj/item/aiModule/examine(var/mob/user as mob) - ..() + . = ..() if(Adjacent(user)) show_laws(user) diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 19cd5d66c4..016bfb5e8b 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -46,8 +46,8 @@ RLD spark_system.attach(src) /obj/item/construction/examine(mob/user) - ..() - to_chat(user, "\A [src]. It currently holds [matter]/[max_matter] matter-units." ) + . = ..() + . += "\A [src]. It currently holds [matter]/[max_matter] matter-units." /obj/item/construction/Destroy() QDEL_NULL(spark_system) diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm index 93293155a3..0eb97a8dee 100644 --- a/code/game/objects/items/RCL.dm +++ b/code/game/objects/items/RCL.dm @@ -79,9 +79,9 @@ ..() /obj/item/twohanded/rcl/examine(mob/user) - ..() + . = ..() if(loaded) - to_chat(user, "It contains [loaded.amount]/[max_amount] cables.") + . += "It contains [loaded.amount]/[max_amount] cables." /obj/item/twohanded/rcl/Destroy() QDEL_NULL(loaded) diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm index 9c343c2e06..a68f2ecff6 100644 --- a/code/game/objects/items/RSF.dm +++ b/code/game/objects/items/RSF.dm @@ -20,8 +20,8 @@ RSF w_class = WEIGHT_CLASS_NORMAL /obj/item/rsf/examine(mob/user) - ..() - to_chat(user, "It currently holds [matter]/30 fabrication-units.") + . = ..() + . += "It currently holds [matter]/30 fabrication-units." /obj/item/rsf/cyborg matter = 30 @@ -127,8 +127,8 @@ RSF w_class = WEIGHT_CLASS_NORMAL /obj/item/cookiesynth/examine(mob/user) - ..() - to_chat(user, "It currently holds [matter]/10 cookie-units.") + . = ..() + . += "It currently holds [matter]/10 cookie-units." /obj/item/cookiesynth/attackby() return diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index afb2b22076..d8a21de35a 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -91,9 +91,9 @@ /obj/item/airlock_painter/examine(mob/user) - ..() + . = ..() if(!ink) - to_chat(user, "It doesn't have a toner cartridge installed.") + . += "It doesn't have a toner cartridge installed." return var/ink_level = "high" if(ink.charges < 1) @@ -102,7 +102,7 @@ ink_level = "low" else if((ink.charges/ink.max_charges) > 1) //Over 100% (admin var edit) ink_level = "dangerously high" - to_chat(user, "Its ink levels look [ink_level].") + . += "Its ink levels look [ink_level]." /obj/item/airlock_painter/attackby(obj/item/W, mob/user, params) diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index d0b732cf42..b591d6d64c 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -46,10 +46,10 @@ /obj/item/bodybag/bluespace/examine(mob/user) - ..() + . = ..() if(contents.len) var/s = contents.len == 1 ? "" : "s" - to_chat(user, "You can make out the shape[s] of [contents.len] object[s] through the fabric.") + . += "You can make out the shape[s] of [contents.len] object[s] through the fabric." /obj/item/bodybag/bluespace/Destroy() for(var/atom/movable/A in contents) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 09a119eeb4..97f5989eb4 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -113,7 +113,7 @@ /obj/item/card/emag/examine(mob/user) . = ..() - to_chat(user, "It has [uses ? uses : "no"] charges left.") + . += "It has [uses ? uses : "no"] charges left." /obj/item/card/emag/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/emagrecharge)) @@ -139,9 +139,9 @@ /obj/item/emagrecharge/examine(mob/user) . = ..() if(uses) - to_chat(user, "It can add up to [uses] charges to compatible devices") + . += "It can add up to [uses] charges to compatible devices" else - to_chat(user, "It has a small, red, blinking light coming from inside of it. It's spent.") + . += "It has a small, red, blinking light coming from inside of it. It's spent." /obj/item/card/emagfake desc = "It's a card with a magnetic strip attached to some circuitry. Closer inspection shows that this card is a poorly made replica, with a \"DonkCo\" logo stamped on the back." @@ -193,9 +193,9 @@ return /obj/item/card/id/examine(mob/user) - ..() + . = ..() if(mining_points) - to_chat(user, "There's [mining_points] mining equipment redemption point\s loaded onto this card.") + . += "There's [mining_points] mining equipment redemption point\s loaded onto this card." /obj/item/card/id/GetAccess() return access @@ -405,13 +405,13 @@ update_label("John Doe", "Clowny") /obj/item/card/id/prisoner/examine(mob/user) . = ..() if(sentence && world.time < sentence) - to_chat(user, "You're currently serving a sentence for [crime]. [DisplayTimeText(sentence - world.time)] left.") + . += "You're currently serving a sentence for [crime]. [DisplayTimeText(sentence - world.time)] left." else if(goal) - to_chat(user, "You have accumulated [points] out of the [goal] points you need for freedom.") + . += "You have accumulated [points] out of the [goal] points you need for freedom." else if(!sentence) - to_chat(user, "You are currently serving a permanent sentence for [crime].") + . += "You are currently serving a permanent sentence for [crime]." else - to_chat(user, "Your sentence is up! You're free!") + . += "Your sentence is up! You're free!" /obj/item/card/id/prisoner/one name = "Prisoner #13-001" @@ -533,8 +533,8 @@ update_label("John Doe", "Clowny") update_icon() /obj/item/card/id/knight/examine(mob/user) - ..() - to_chat(user, "Alt-click to recolor it.") + . = ..() + . += "Alt-click to recolor it." /obj/item/card/id/knight/blue id_color = "#0000FF" diff --git a/code/game/objects/items/circuitboards/circuitboard.dm b/code/game/objects/items/circuitboards/circuitboard.dm index 26c13263d2..8106733ac6 100644 --- a/code/game/objects/items/circuitboards/circuitboard.dm +++ b/code/game/objects/items/circuitboards/circuitboard.dm @@ -56,7 +56,7 @@ micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. M.RefreshParts() /obj/item/circuitboard/machine/examine(mob/user) - ..() + . = ..() if(LAZYLEN(req_components)) var/list/nice_list = list() for(var/B in req_components) @@ -64,4 +64,4 @@ micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. if(!ispath(A)) continue nice_list += list("[req_components[A]] [initial(A.name)]") - to_chat(user,"Required components: [english_list(nice_list)].") + . += "Required components: [english_list(nice_list)]." diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index ac7879f9ec..32c879e2d2 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -69,8 +69,8 @@ return ..() /obj/item/circuitboard/computer/card/minor/examine(user) - ..() - to_chat(user, "Currently set to \"[dept_list[target_dept]]\".") + . = ..() + . += "Currently set to \"[dept_list[target_dept]]\"." //obj/item/circuitboard/computer/shield // name = "Shield Control (Computer Board)" diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 6989557127..ccd96525a3 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -429,8 +429,8 @@ return ..() /obj/item/circuitboard/machine/smartfridge/examine(mob/user) - ..() - to_chat(user, "[src] is set to [fridges_name_paths[build_path]]. You can use a screwdriver to reconfigure it.") + . = ..() + . += "[src] is set to [fridges_name_paths[build_path]]. You can use a screwdriver to reconfigure it." /obj/item/circuitboard/machine/biogenerator name = "Biogenerator (Machine Board)" @@ -775,7 +775,7 @@ /obj/item/circuitboard/machine/public_nanite_chamber/examine(mob/user) . = ..() - to_chat(user, "Cloud ID is currently set to [cloud_id].") + . += "Cloud ID is currently set to [cloud_id]." /obj/item/circuitboard/machine/nanite_program_hub name = "Nanite Program Hub (Machine Board)" @@ -936,9 +936,9 @@ needs_anchored = FALSE /obj/item/circuitboard/machine/dish_drive/examine(mob/user) - ..() - to_chat(user, "Its suction function is [suction ? "enabled" : "disabled"]. Use it in-hand to switch.") - to_chat(user, "Its disposal auto-transmit function is [transmit ? "enabled" : "disabled"]. Alt-click it to switch.") + . = ..() + . += "Its suction function is [suction ? "enabled" : "disabled"]. Use it in-hand to switch." + . += "Its disposal auto-transmit function is [transmit ? "enabled" : "disabled"]. Alt-click it to switch." /obj/item/circuitboard/machine/dish_drive/attack_self(mob/living/user) suction = !suction @@ -991,4 +991,4 @@ /obj/item/stack/sheet/glass = 2, /obj/item/stock_parts/capacitor = 1, /obj/item/stack/cable_coil = 5, - /obj/item/reagent_containers/glass/beaker = 6) //So it can hold lots of chems \ No newline at end of file + /obj/item/reagent_containers/glass/beaker = 6) //So it can hold lots of chems diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index d86354f195..0ff54d884f 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -112,11 +112,11 @@ throw_range = 7 attack_verb = list("HONKED") var/moodlet = "honk" //used to define which kind of moodlet is added to the honked target - var/honksound = 'sound/items/bikehorn.ogg' + var/list/honksounds = list('sound/items/bikehorn.ogg' = 1) -/obj/item/bikehorn/Initialize() +/obj/item/bikehorn/ComponentInitialize() . = ..() - AddComponent(/datum/component/squeak, list(honksound=1), 50) + AddComponent(/datum/component/squeak, honksounds, 50) /obj/item/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user) SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, moodlet, /datum/mood_event/honk) @@ -124,7 +124,7 @@ /obj/item/bikehorn/suicide_act(mob/user) user.visible_message("[user] solemnly points the horn at [user.p_their()] temple! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(src, 'sound/items/bikehorn.ogg', 50, 1) + playsound(src, pickweight(honksounds), 50, 1) return (BRUTELOSS) //air horn @@ -132,7 +132,7 @@ name = "air horn" desc = "Damn son, where'd you find this?" icon_state = "air_horn" - honksound = 'sound/items/airhorn2.ogg' + honksounds = list('sound/items/airhorn2.ogg' = 1) //golden bikehorn /obj/item/bikehorn/golden diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index d014f70315..2a7b5d24cd 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -665,10 +665,10 @@ /obj/item/toy/crayon/spraycan/examine(mob/user) . = ..() if(charges_left) - to_chat(user, "It has [charges_left] use\s left.") + . += "It has [charges_left] use\s left." else - to_chat(user, "It is empty.") - to_chat(user, "Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"].") + . += "It is empty." + . += "Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"]." /obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity, params) if(!proximity) @@ -829,7 +829,7 @@ /obj/item/toy/crayon/spraycan/gang/examine(mob/user) . = ..() if(user.mind && user.mind.has_antag_datum(/datum/antagonist/gang) || isobserver(user)) - to_chat(user, "This spraycan has been specially modified with a stage 2 nozzle kit, making it faster.") + . += "This spraycan has been specially modified with a stage 2 nozzle kit, making it faster." /obj/item/toy/crayon/spraycan/infinite name = "infinite spraycan" diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 246dba9cb9..37d2c77373 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -103,12 +103,11 @@ GLOBAL_LIST_EMPTY(PDAs) /obj/item/pda/examine(mob/user) . = ..() - var/dat = id ? "Alt-click to remove the id." : "" + . += id ? "Alt-click to remove the id." : "" if(inserted_item && (!isturf(loc))) - dat += "\nCtrl-click to remove [inserted_item]." + . += "Ctrl-click to remove [inserted_item]." if(LAZYLEN(GLOB.pda_reskins)) - dat += "\nCtrl-shift-click it to reskin it." - to_chat(user, dat) + . += "Ctrl-shift-click it to reskin it." /obj/item/pda/Initialize() . = ..() diff --git a/code/game/objects/items/devices/compressionkit.dm b/code/game/objects/items/devices/compressionkit.dm index a5a9377690..6e62c389c7 100644 --- a/code/game/objects/items/devices/compressionkit.dm +++ b/code/game/objects/items/devices/compressionkit.dm @@ -12,9 +12,9 @@ var/mode = 0 /obj/item/compressionkit/examine(mob/user) - ..() - to_chat(user, "It has [charges] charges left. Recharge with bluespace crystals.") - to_chat(user, "Use in-hand to swap toggle compress/expand mode (expand mode not yet implemented).") + . = ..() + . += "It has [charges] charges left. Recharge with bluespace crystals." + . += "Use in-hand to swap toggle compress/expand mode (expand mode not yet implemented)." /obj/item/compressionkit/attack_self(mob/user) if(mode == 0) diff --git a/code/game/objects/items/devices/desynchronizer.dm b/code/game/objects/items/devices/desynchronizer.dm new file mode 100644 index 0000000000..4a6e2d5a46 --- /dev/null +++ b/code/game/objects/items/devices/desynchronizer.dm @@ -0,0 +1,87 @@ +/obj/item/desynchronizer + name = "desynchronizer" + desc = "An experimental device that can temporarily desynchronize the user from spacetime, effectively making them disappear while it's active." + icon = 'icons/obj/device.dmi' + icon_state = "desynchronizer" + item_state = "electronic" + w_class = WEIGHT_CLASS_SMALL + item_flags = NOBLUDGEON + lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + materials = list(MAT_METAL = 250, MAT_GLASS = 500) + var/max_duration = 3000 + var/duration = 300 + var/last_use = 0 + var/next_use = 0 + var/obj/effect/abstract/sync_holder/sync_holder + +/obj/item/desynchronizer/attack_self(mob/living/user) + if(world.time < next_use) + to_chat(user, "[src] is still recharging.") + return + if(!sync_holder) + desync(user) + else + resync() + +/obj/item/desynchronizer/examine(mob/user) + . = ..() + if(world.time < next_use) + . += "Time left to recharge: [DisplayTimeText(next_use - world.time)]" + . += "Alt-click to customize the duration. Current duration: [DisplayTimeText(duration)]." + . += "Can be used again to interrupt the effect early. The recharge time is the same as the time spent in desync." + +/obj/item/desynchronizer/AltClick(mob/living/user) + if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + return + var/new_duration = input(user, "Set the duration (5-300):", "Desynchronizer", duration / 10) as null|num + if(new_duration) + new_duration = new_duration SECONDS + new_duration = CLAMP(new_duration, 50, max_duration) + duration = new_duration + to_chat(user, "You set the duration to [DisplayTimeText(duration)].") + +/obj/item/desynchronizer/proc/desync(mob/living/user) + if(sync_holder) + return + sync_holder = new(drop_location()) + new /obj/effect/temp_visual/desynchronizer(drop_location()) + to_chat(user, "You activate [src], desynchronizing yourself from the present. You can still see your surroundings, but you feel eerily dissociated from reality.") + user.forceMove(sync_holder) + SEND_SIGNAL(user, COMSIG_MOVABLE_SECLUDED_LOCATION) + for(var/thing in user) + var/atom/movable/AM = thing + SEND_SIGNAL(AM, COMSIG_MOVABLE_SECLUDED_LOCATION) + last_use = world.time + icon_state = "desynchronizer-on" + addtimer(CALLBACK(src, .proc/resync), duration) + +/obj/item/desynchronizer/proc/resync() + new /obj/effect/temp_visual/desynchronizer(sync_holder.drop_location()) + QDEL_NULL(sync_holder) + icon_state = initial(icon_state) + next_use = world.time + (world.time - last_use) // Could be 2*world.time-last_use but that would just be confusing + +/obj/item/desynchronizer/Destroy() + resync() + return ..() + +/obj/effect/abstract/sync_holder + name = "desyncronized pocket" + desc = "A pocket in spacetime, keeping the user a fraction of a second in the future." + icon = null + icon_state = null + alpha = 0 + invisibility = INVISIBILITY_ABSTRACT + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + anchored = TRUE + resistance_flags = INDESTRUCTIBLE + +/obj/effect/abstract/sync_holder/Destroy() + for(var/I in contents) + var/atom/movable/AM = I + AM.forceMove(drop_location()) + return ..() + +/obj/effect/abstract/sync_holder/AllowDrop() + return TRUE //no dropping spaghetti out of your spacetime pocket \ No newline at end of file diff --git a/code/game/objects/items/devices/doorCharge.dm b/code/game/objects/items/devices/doorCharge.dm index 9b009da7a4..8def1d5ca3 100644 --- a/code/game/objects/items/devices/doorCharge.dm +++ b/code/game/objects/items/devices/doorCharge.dm @@ -35,8 +35,8 @@ return ..() /obj/item/doorCharge/examine(mob/user) - ..() + . = ..() if(user.mind && user.mind.has_antag_datum(/datum/antagonist/traitor)) //No nuke ops because the device is excluded from nuclear - to_chat(user, "A small explosive device that can be used to sabotage airlocks to cause an explosion upon opening. To apply, remove the airlock's maintenance panel and place it within.") + . += "A small explosive device that can be used to sabotage airlocks to cause an explosion upon opening. To apply, remove the airlock's maintenance panel and place it within." else - to_chat(user, "A small, suspicious object that feels lukewarm when held.") + . += "A small, suspicious object that feels lukewarm when held." diff --git a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm index b909e7a1e8..97392ca71e 100644 --- a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm +++ b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm @@ -16,11 +16,11 @@ maptext = "[circuits]" /obj/item/electroadaptive_pseudocircuit/examine(mob/user) - ..() + . = ..() if(iscyborg(user)) - to_chat(user, "It has material for [circuits] circuit[circuits == 1 ? "" : "s"]. Use the pseudocircuit on existing circuits to gain material.") - to_chat(user, "Serves as a substitute for fire/air alarm, firelock, and APC electronics.") - to_chat(user, "It can also be used on an APC with no power cell to fabricate a low-capacity cell at a high power cost.") + . += "It has material for [circuits] circuit[circuits == 1 ? "" : "s"]. Use the pseudocircuit on existing circuits to gain material." + . += "Serves as a substitute for fire/air alarm, firelock, and APC electronics." + . += "It can also be used on an APC with no power cell to fabricate a low-capacity cell at a high power cost." /obj/item/electroadaptive_pseudocircuit/proc/adapt_circuit(mob/living/silicon/robot/R, circuit_cost = 0) if(QDELETED(R) || !istype(R)) diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index de62869e7e..0c73d829ff 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -52,9 +52,9 @@ qdel(F) /obj/item/forcefield_projector/examine(mob/user) - ..() + . = ..() var/percent_charge = round((shield_integrity/max_shield_integrity)*100) - to_chat(user, "It is currently sustaining [LAZYLEN(current_fields)]/[max_fields] fields, and it's [percent_charge]% charged.") + . += "It is currently sustaining [LAZYLEN(current_fields)]/[max_fields] fields, and it's [percent_charge]% charged." /obj/item/forcefield_projector/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 110676de1b..e6044ceadf 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -63,28 +63,28 @@ current_tick_amount = 0 /obj/item/geiger_counter/examine(mob/user) - ..() + . = ..() if(!scanning) - return 1 - to_chat(user, "Alt-click it to clear stored radiation levels.") + return + . += "Alt-click it to clear stored radiation levels." if(obj_flags & EMAGGED) - to_chat(user, "The display seems to be incomprehensible.") - return 1 + . += "The display seems to be incomprehensible." + return switch(radiation_count) if(-INFINITY to RAD_LEVEL_NORMAL) - to_chat(user, "Ambient radiation level count reports that all is well.") + . += "Ambient radiation level count reports that all is well." if(RAD_LEVEL_NORMAL + 1 to RAD_LEVEL_MODERATE) - to_chat(user, "Ambient radiation levels slightly above average.") + . += "Ambient radiation levels slightly above average." if(RAD_LEVEL_MODERATE + 1 to RAD_LEVEL_HIGH) - to_chat(user, "Ambient radiation levels above average.") + . += "Ambient radiation levels above average." if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH) - to_chat(user, "Ambient radiation levels highly above average.") + . += "Ambient radiation levels highly above average." if(RAD_LEVEL_VERY_HIGH + 1 to RAD_LEVEL_CRITICAL) - to_chat(user, "Ambient radiation levels nearing critical level.") + . += "Ambient radiation levels nearing critical level." if(RAD_LEVEL_CRITICAL + 1 to INFINITY) - to_chat(user, "Ambient radiation levels above critical level!") + . += "Ambient radiation levels above critical level!" - to_chat(user, "The last radiation amount detected was [last_tick_amount]") + . += "The last radiation amount detected was [last_tick_amount]" /obj/item/geiger_counter/update_icon() if(!scanning) diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 1ba0e525fa..2368cdc4f0 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -14,10 +14,10 @@ GLOBAL_LIST_EMPTY(GPS_list) var/global_mode = TRUE //If disabled, only GPS signals of the same Z level are shown /obj/item/gps/examine(mob/user) - ..() + . = ..() var/turf/curr = get_turf(src) - to_chat(user, "The screen says: [get_area_name(curr, TRUE)] ([curr.x], [curr.y], [curr.z])") - to_chat(user, "Alt-click to switch it [tracking ? "off":"on"].") + . += "The screen says: [get_area_name(curr, TRUE)] ([curr.x], [curr.y], [curr.z])" + . += "Alt-click to switch it [tracking ? "off":"on"]." /obj/item/gps/Initialize() . = ..() diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 1e31f14cfd..2352a34e23 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -73,8 +73,8 @@ ..() /obj/item/lightreplacer/examine(mob/user) - ..() - to_chat(user, status_string()) + . = ..() + . += status_string() /obj/item/lightreplacer/attackby(obj/item/W, mob/user, params) diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 6afce03455..f3b53ba352 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -51,11 +51,11 @@ AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE) /obj/item/multitool/examine(mob/user) - ..() + . = ..() if(selected_io) - to_chat(user, "Activate [src] to detach the data wire.") + . += "Activate [src] to detach the data wire." if(buffer) - to_chat(user, "Its buffer contains [buffer].") + . += "Its buffer contains [buffer]." /obj/item/multitool/suicide_act(mob/living/carbon/user) user.visible_message("[user] puts the [src] to [user.p_their()] chest. It looks like [user.p_theyre()] trying to pulse [user.p_their()] heart off!") diff --git a/code/game/objects/items/devices/pipe_painter.dm b/code/game/objects/items/devices/pipe_painter.dm index 567cb0c73d..2d0af2cf3c 100644 --- a/code/game/objects/items/devices/pipe_painter.dm +++ b/code/game/objects/items/devices/pipe_painter.dm @@ -26,5 +26,5 @@ paint_color = input("Which colour do you want to use?","Pipe painter") in GLOB.pipe_paint_colors /obj/item/pipe_painter/examine(mob/user) - ..() - to_chat(user, "It is set to [paint_color].") + . = ..() + . += "It is set to [paint_color]." diff --git a/code/game/objects/items/devices/quantum_keycard.dm b/code/game/objects/items/devices/quantum_keycard.dm index 37079722c0..fc9ccddaf9 100644 --- a/code/game/objects/items/devices/quantum_keycard.dm +++ b/code/game/objects/items/devices/quantum_keycard.dm @@ -10,12 +10,12 @@ var/obj/machinery/quantumpad/qpad /obj/item/quantum_keycard/examine(mob/user) - ..() + . = ..() if(qpad) - to_chat(user, "It's currently linked to a quantum pad.") - to_chat(user, "Alt-click to unlink the keycard.") + . += "It's currently linked to a quantum pad." + . += "Alt-click to unlink the keycard." else - to_chat(user, "Insert [src] into an active quantum pad to link it.") + . += "Insert [src] into an active quantum pad to link it." /obj/item/quantum_keycard/AltClick(mob/living/user) if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 9adc0488aa..4d91fee9aa 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -21,7 +21,7 @@ for(var/i in channels) examine_text_list += "[GLOB.channel_tokens[i]] - [lowertext(i)]" - to_chat(user, "It can access the following channels; [jointext(examine_text_list, ", ")].") + . += "It can access the following channels; [jointext(examine_text_list, ", ")]." /obj/item/encryptionkey/syndicate name = "syndicate encryption key" diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index cca5eb4217..9f371f1ddb 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -32,7 +32,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( return TOXLOSS /obj/item/radio/headset/examine(mob/user) - ..() + . = ..() if(item_flags & IN_INVENTORY && loc == user) // construction of frequency description @@ -45,12 +45,12 @@ GLOBAL_LIST_INIT(channel_tokens, list( avail_chans += "use [MODE_TOKEN_DEPARTMENT] or [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]" else avail_chans += "use [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]" - to_chat(user, "A small screen on the headset displays the following available frequencies:\n[english_list(avail_chans)].") + . += "A small screen on the headset displays the following available frequencies:\n[english_list(avail_chans)]." if(command) - to_chat(user, "Alt-click to toggle the high-volume mode.") + . += "Alt-click to toggle the high-volume mode." else - to_chat(user, "A small screen on the headset flashes, it's too small to read without holding or wearing the headset.") + . += "A small screen on the headset flashes, it's too small to read without holding or wearing the headset." /obj/item/radio/headset/Initialize() . = ..() diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index eb0271c1b9..c8118e615f 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -49,11 +49,11 @@ return ..() /obj/item/radio/intercom/examine(mob/user) - ..() + . = ..() if(!unfastened) - to_chat(user, "It's screwed and secured to the wall.") + . += "It's screwed and secured to the wall." else - to_chat(user, "It's unscrewed from the wall, and can be detached.") + . += "It's unscrewed from the wall, and can be detached." /obj/item/radio/intercom/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/screwdriver)) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 926810cfbf..55858e217a 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -319,11 +319,11 @@ /obj/item/radio/examine(mob/user) - ..() + . = ..() if (unscrewed) - to_chat(user, "It can be attached and modified.") + . += "It can be attached and modified." else - to_chat(user, "It cannot be modified or attached.") + . += "It cannot be modified or attached." /obj/item/radio/attackby(obj/item/W, mob/user, params) add_fingerprint(user) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index d6737b94e9..40052bcee5 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -382,7 +382,7 @@ SLIME SCANNER else if (S.mutantstomach != initial(S.mutantstomach)) mutant = TRUE - msg += "\tReported Species: [H.dna.custom_species ? H.dna.custom_species : S.name]\n" + msg += "\tReported Species: [H.dna.custom_species ? H.dna.custom_species : S.name]\n" msg += "\tBase Species: [S.name]\n" if(mutant) msg += "\tSubject has mutations present.\n" @@ -523,7 +523,7 @@ SLIME SCANNER /obj/item/analyzer/examine(mob/user) . = ..() - to_chat(user, "Alt-click [src] to activate the barometer function.") + . += "Alt-click [src] to activate the barometer function." /obj/item/analyzer/suicide_act(mob/living/carbon/user) user.visible_message("[user] begins to analyze [user.p_them()]self with [src]! The display shows that [user.p_theyre()] dead!") diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 2df7892f61..5a9a2027a0 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -29,8 +29,8 @@ /obj/item/taperecorder/examine(mob/user) - ..() - to_chat(user, "The wire panel is [open_panel ? "opened" : "closed"].") + . = ..() + . += "The wire panel is [open_panel ? "opened" : "closed"]." /obj/item/taperecorder/attackby(obj/item/I, mob/user, params) diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index 9fb4206845..b69d32617f 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -106,11 +106,11 @@ return ..() /obj/item/extinguisher/examine(mob/user) - ..() - to_chat(user, "The safety is [safety ? "on" : "off"].") + . = ..() + . += "The safety is [safety ? "on" : "off"]." if(reagents.total_volume) - to_chat(user, "You can loose its screws to empty it.") + . += "You can loose its screws to empty it." /obj/item/extinguisher/proc/AttemptRefill(atom/target, mob/user) if(istype(target, tanktype) && target.Adjacent(user)) diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index fd51ecf26b..d9525ab931 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -145,9 +145,9 @@ update_icon() /obj/item/flamethrower/examine(mob/user) - ..() + . = ..() if(ptank) - to_chat(user, "\The [src] has \a [ptank] attached. Alt-click to remove it.") + . += "\The [src] has \a [ptank] attached. Alt-click to remove it." /obj/item/flamethrower/proc/toggle_igniter(mob/user) if(!ptank) diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index 7a0c5fd8df..76d3a9fbf5 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -27,19 +27,19 @@ /obj/item/grenade/chem_grenade/examine(mob/user) display_timer = (stage == READY && !nadeassembly) //show/hide the timer based on assembly state - ..() + . = ..() if(user.can_see_reagents()) var/count = 0 if(beakers.len) - to_chat(user, "You scan the grenade and detect the following reagents:") + . += "You scan the grenade and detect the following reagents:" for(var/obj/item/reagent_containers/glass/G in beakers) var/textcount = thtotext(++count) for(var/datum/reagent/R in G.reagents.reagent_list) - to_chat(user, "[R.volume] units of [R.name] in the [textcount] beaker.") + . += "[R.volume] units of [R.name] in the [textcount] beaker." if(beakers.len == 1) - to_chat(user, "You detect no second beaker in the grenade.") + . += "You detect no second beaker in the grenade." else - to_chat(user, "You scan the grenade, but detect nothing.") + . += "You scan the grenade, but detect nothing." /obj/item/grenade/chem_grenade/attack_self(mob/user) diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm index d450764702..2d3d5e69b6 100644 --- a/code/game/objects/items/grenades/ghettobomb.dm +++ b/code/game/objects/items/grenades/ghettobomb.dm @@ -56,5 +56,5 @@ qdel(src) /obj/item/grenade/iedcasing/examine(mob/user) - ..() - to_chat(user, "You can't tell when it will explode!") + . = ..() + . += "You can't tell when it will explode!" diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm index 28d8739369..98a1aed4c1 100644 --- a/code/game/objects/items/grenades/grenade.dm +++ b/code/game/objects/items/grenades/grenade.dm @@ -47,12 +47,12 @@ /obj/item/grenade/examine(mob/user) - ..() + . = ..() if(display_timer) if(det_time > 1) - to_chat(user, "The timer is set to [DisplayTimeText(det_time)].") + . += "The timer is set to [DisplayTimeText(det_time)]." else - to_chat(user, "\The [src] is set for instant detonation.") + . += "\The [src] is set for instant detonation." /obj/item/grenade/attack_self(mob/user) diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm index 7e7dddefb6..da572d4d61 100644 --- a/code/game/objects/items/his_grace.dm +++ b/code/game/objects/items/his_grace.dm @@ -52,23 +52,23 @@ return /obj/item/his_grace/examine(mob/user) - ..() + . = ..() if(awakened) switch(bloodthirst) if(HIS_GRACE_SATIATED to HIS_GRACE_PECKISH) - to_chat(user, "[src] isn't very hungry. Not yet.") + . += "[src] isn't very hungry. Not yet." if(HIS_GRACE_PECKISH to HIS_GRACE_HUNGRY) - to_chat(user, "[src] would like a snack.") + . += "[src] would like a snack." if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED) - to_chat(user, "[src] is quite hungry now.") + . += "[src] is quite hungry now." if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING) - to_chat(user, "[src] is openly salivating at the sight of you. Be careful.") + . += "[src] is openly salivating at the sight of you. Be careful." if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER) - to_chat(user, "You walk a fine line. [src] is very close to devouring you.") + . += "You walk a fine line. [src] is very close to devouring you." if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP) - to_chat(user, "[src] is shaking violently and staring directly at you.") + . += "[src] is shaking violently and staring directly at you." else - to_chat(user, "[src] is latched closed.") + . += "[src] is latched closed." /obj/item/his_grace/relaymove(mob/living/user) //Allows changelings, etc. to climb out of Him after they revive, provided He isn't active if(!awakened) diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm index e7b05d7a01..40f2741a17 100644 --- a/code/game/objects/items/hot_potato.dm +++ b/code/game/objects/items/hot_potato.dm @@ -81,9 +81,9 @@ /obj/item/hot_potato/examine(mob/user) . = ..() if(active) - to_chat(user, "[src] is flashing red-hot! You should probably get rid of it!") + . += "[src] is flashing red-hot! You should probably get rid of it!" if(show_timer) - to_chat(user, "[src]'s timer looks to be at [DisplayTimeText(activation_time - world.time)]!") + . += "[src]'s timer looks to be at [DisplayTimeText(activation_time - world.time)]!" /obj/item/hot_potato/equipped(mob/user) . = ..() diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm index bbd2e67464..19dbf4fea3 100644 --- a/code/game/objects/items/inducer.dm +++ b/code/game/objects/items/inducer.dm @@ -155,13 +155,13 @@ /obj/item/inducer/examine(mob/living/M) - ..() + . = ..() if(cell) - to_chat(M, "Its display shows: [DisplayEnergy(cell.charge)].") + . += "Its display shows: [DisplayEnergy(cell.charge)]." else - to_chat(M,"Its display is dark.") + . += "Its display is dark." if(opened) - to_chat(M,"Its battery compartment is open.") + . += "Its battery compartment is open." /obj/item/inducer/update_icon() cut_overlays() diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 51fd2c50d8..561af8ded6 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -334,8 +334,8 @@ update_light() /obj/item/melee/transforming/energy/sword/cx/examine(mob/user) - ..() - to_chat(user, "Alt-click to recolor it.") + . = ..() + . += "Alt-click to recolor it." /obj/item/melee/transforming/energy/sword/cx/worn_overlays(isinhands, icon_file) . = ..() diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index 3f7fe7ee8d..5d384a9346 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -119,8 +119,8 @@ reagents.add_reagent(refill_reagent, refill_rate) /obj/item/mop/advanced/examine(mob/user) - ..() - to_chat(user, "The condenser switch is set to [refill_enabled ? "ON" : "OFF"].") + . = ..() + . += "The condenser switch is set to [refill_enabled ? "ON" : "OFF"]." /obj/item/mop/advanced/Destroy() if(refill_enabled) diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index 30442d7304..9d1a1ff4f9 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -43,17 +43,17 @@ ..() /obj/item/pet_carrier/examine(mob/user) - ..() + . = ..() if(occupants.len) for(var/V in occupants) var/mob/living/L = V - to_chat(user, "It has [L] inside.") + . += "It has [L] inside." else - to_chat(user, "It has nothing inside.") + . += "It has nothing inside." if(user.canUseTopic(src)) - to_chat(user, "Activate it in your hand to [open ? "close" : "open"] its door.") + . += "Activate it in your hand to [open ? "close" : "open"] its door." if(!open) - to_chat(user, "Alt-click to [locked ? "unlock" : "lock"] its door.") + . += "Alt-click to [locked ? "unlock" : "lock"] its door." /obj/item/pet_carrier/attack_self(mob/living/user) if(open) diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index bd301c36f7..72d27ae544 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -55,17 +55,15 @@ return automatic /obj/item/pneumatic_cannon/examine(mob/user) - ..() - var/list/out = list() + . = ..() if(!in_range(user, src)) - out += "You'll need to get closer to see any more." + . += "You'll need to get closer to see any more." return for(var/obj/item/I in loadedItems) - out += "[icon2html(I, user)] It has \a [I] loaded." + . += "[icon2html(I, user)] It has \a [I] loaded." CHECK_TICK if(tank) - out += "[icon2html(tank, user)] It has \a [tank] mounted onto it." - to_chat(user, out.Join("
    ")) + . += "[icon2html(tank, user)] It has \a [tank] mounted onto it." /obj/item/pneumatic_cannon/attackby(obj/item/W, mob/user, params) if(user.a_intent == INTENT_HARM) diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm index f02e92bb3c..27ed0f82e3 100644 --- a/code/game/objects/items/powerfist.dm +++ b/code/game/objects/items/powerfist.dm @@ -20,12 +20,12 @@ /obj/item/melee/powerfist/examine(mob/user) - ..() + . = ..() if(!in_range(user, src)) - to_chat(user, "You'll need to get closer to see any more.") + . += "You'll need to get closer to see any more." return if(tank) - to_chat(user, "[icon2html(tank, user)] It has \a [tank] mounted onto it.") + . += "[icon2html(tank, user)] It has \a [tank] mounted onto it." /obj/item/melee/powerfist/attackby(obj/item/W, mob/user, params) diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index 7b3dcb1e00..ddc49a456c 100644 --- a/code/game/objects/items/religion.dm +++ b/code/game/objects/items/religion.dm @@ -16,9 +16,9 @@ var/warcry /obj/item/banner/examine(mob/user) - ..() + . = ..() if(inspiration_available) - to_chat(user, "Activate it in your hand to inspire nearby allies of this banner's allegiance!") + . += "Activate it in your hand to inspire nearby allies of this banner's allegiance!" /obj/item/banner/attack_self(mob/living/carbon/human/user) if(!inspiration_available) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 7654199cf5..965e78036a 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -76,23 +76,23 @@ . = ..() /obj/item/stack/examine(mob/user) - ..() + . = ..() if (is_cyborg) if(singular_name) - to_chat(user, "There is enough energy for [get_amount()] [singular_name]\s.") + . += "There is enough energy for [get_amount()] [singular_name]\s." else - to_chat(user, "There is enough energy for [get_amount()].") + . += "There is enough energy for [get_amount()]." return if(singular_name) if(get_amount()>1) - to_chat(user, "There are [get_amount()] [singular_name]\s in the stack.") + . += "There are [get_amount()] [singular_name]\s in the stack." else - to_chat(user, "There is [get_amount()] [singular_name] in the stack.") + . += "There is [get_amount()] [singular_name] in the stack." else if(get_amount()>1) - to_chat(user, "There are [get_amount()] in the stack.") + . += "There are [get_amount()] in the stack." else - to_chat(user, "There is [get_amount()] in the stack.") - to_chat(user, "Alt-click to take a custom amount.") + . += "There is [get_amount()] in the stack." + . += "Alt-click to take a custom amount." /obj/item/stack/proc/get_amount() if(is_cyborg) diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 847e1b521e..3fc9bd9535 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -73,6 +73,15 @@ turf_type = /turf/open/floor/grass resistance_flags = FLAMMABLE +//Fairygrass +/obj/item/stack/tile/fairygrass + name = "fairygrass tile" + singular_name = "fairygrass floor tile" + desc = "A patch of odd, glowing blue grass." + icon_state = "tile_fairygrass" + item_state = "tile-fairygrass" + turf_type = /turf/open/floor/grass/fairy + resistance_flags = FLAMMABLE //Wood /obj/item/stack/tile/wood diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index a79eb299da..f6e169a4d5 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -60,7 +60,7 @@ . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.allow_big_nesting = TRUE - STR.max_w_class = WEIGHT_CLASS_GIGANTIC + STR.max_w_class = WEIGHT_CLASS_BULKY STR.max_combined_w_class = 35 /obj/item/storage/backpack/holding/suicide_act(mob/living/user) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 713dbe4133..e6e4b31547 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -757,9 +757,9 @@ STR.can_hold = typecacheof(fitting_swords) /obj/item/storage/belt/sabre/examine(mob/user) - ..() + . = ..() if(length(contents)) - to_chat(user, "Alt-click it to quickly draw the blade.") + . += "Alt-click it to quickly draw the blade." /obj/item/storage/belt/sabre/AltClick(mob/user) if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 44e122e4b9..6cc2cb6882 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -36,12 +36,12 @@ icon_state = "[icon_type]box" /obj/item/storage/fancy/examine(mob/user) - ..() + . = ..() if(fancy_open) if(length(contents) == 1) - to_chat(user, "There is one [icon_type] left.") + . += "There is one [icon_type] left." else - to_chat(user, "There are [contents.len <= 0 ? "no" : "[contents.len]"] [icon_type]s left.") + . += "There are [contents.len <= 0 ? "no" : "[contents.len]"] [icon_type]s left." /obj/item/storage/fancy/attack_self(mob/user) fancy_open = !fancy_open @@ -143,8 +143,8 @@ STR.can_hold = typecacheof(list(/obj/item/clothing/mask/cigarette, /obj/item/lighter)) /obj/item/storage/fancy/cigarettes/examine(mob/user) - ..() - to_chat(user, "Alt-click to extract contents.") + . = ..() + . += "Alt-click to extract contents." /obj/item/storage/fancy/cigarettes/AltClick(mob/living/carbon/user) if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm index 1607b19c2f..bd234d8188 100644 --- a/code/game/objects/items/storage/lockbox.dm +++ b/code/game/objects/items/storage/lockbox.dm @@ -108,10 +108,10 @@ STR.can_hold = typecacheof(list(/obj/item/clothing/accessory/medal)) /obj/item/storage/lockbox/medal/examine(mob/user) - ..() + . = ..() var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) if(!locked) - to_chat(user, "Alt-click to [open ? "close":"open"] it.") + . += "Alt-click to [open ? "close":"open"] it." /obj/item/storage/lockbox/medal/AltClick(mob/user) if(user.canUseTopic(src, BE_CLOSE)) diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm index 8618e4c3ae..a2bf5773d1 100644 --- a/code/game/objects/items/storage/secure.dm +++ b/code/game/objects/items/storage/secure.dm @@ -31,8 +31,8 @@ STR.max_combined_w_class = 14 /obj/item/storage/secure/examine(mob/user) - ..() - to_chat(user, text("The service panel is currently [open ? "unscrewed" : "screwed shut"].")) + . = ..() + . += "The service panel is currently [open ? "unscrewed" : "screwed shut"]." /obj/item/storage/secure/attackby(obj/item/W, mob/user, params) if(SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index 47d9af2795..484b9862ff 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -91,9 +91,9 @@ . = ..() var/obj/item/stock_parts/cell/copper_top = get_cell() if(copper_top) - to_chat(user, "\The [src] is [round(copper_top.percent())]% charged.") + . += "\The [src] is [round(copper_top.percent())]% charged." else - to_chat(user, "\The [src] does not have a power source installed.") + . += "\The [src] does not have a power source installed." /obj/item/melee/baton/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/stock_parts/cell)) diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index d409e40575..f763fe87fc 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -74,15 +74,15 @@ /obj/item/tank/examine(mob/user) var/obj/icon = src - ..() + . = ..() if (istype(src.loc, /obj/item/assembly)) icon = src.loc if(!in_range(src, user)) if (icon == src) - to_chat(user, "If you want any more information you'll need to get closer.") + . += "If you want any more information you'll need to get closer." return - to_chat(user, "The pressure gauge reads [round(src.air_contents.return_pressure(),0.01)] kPa.") + . += "The pressure gauge reads [round(src.air_contents.return_pressure(),0.01)] kPa." var/celsius_temperature = src.air_contents.temperature-T0C var/descriptive @@ -100,7 +100,7 @@ else descriptive = "furiously hot" - to_chat(user, "It feels [descriptive].") + . += "It feels [descriptive]." /obj/item/tank/blob_act(obj/structure/blob/B) if(B && B.loc == loc) diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index d7c00fe5fe..65b240c528 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -220,8 +220,8 @@ /obj/item/weldingtool/examine(mob/user) - ..() - to_chat(user, "It contains [get_fuel()] unit\s of fuel out of [max_fuel].") + . = ..() + . += "It contains [get_fuel()] unit\s of fuel out of [max_fuel]." /obj/item/weldingtool/get_temperature() return welding * heat diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index d78338d390..c5b62f0f33 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -148,8 +148,8 @@ var/bullets = 7 /obj/item/toy/gun/examine(mob/user) - ..() - to_chat(user, "There [bullets == 1 ? "is" : "are"] [bullets] cap\s left.") + . = ..() + . += "There [bullets == 1 ? "is" : "are"] [bullets] cap\s left." /obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A, mob/user, params) @@ -204,8 +204,8 @@ src.icon_state = text("357OLD-[]", src.amount_left) /obj/item/toy/ammo/gun/examine(mob/user) - ..() - to_chat(user, "There [amount_left == 1 ? "is" : "are"] [amount_left] cap\s left.") + . = ..() + . += "There [amount_left == 1 ? "is" : "are"] [amount_left] cap\s left." /* * Toy swords @@ -373,8 +373,8 @@ return ..() /obj/item/toy/sword/cx/examine(mob/user) - ..() - to_chat(user, "Alt-click to recolor it.") + . = ..() + . += "Alt-click to recolor it." /* * Foam armblade @@ -994,8 +994,7 @@ if(cardUser.is_holding(src)) cardUser.visible_message("[cardUser] checks [cardUser.p_their()] card.", "The card reads: [cardname].") else - to_chat(cardUser, "You need to have the card in your hand to check it!") - + . += "You need to have the card in your hand to check it!" /obj/item/toy/cards/singlecard/verb/Flip() set name = "Flip Card" @@ -1221,8 +1220,8 @@ to_chat(user, "The cogwheels are already turning!") /obj/item/toy/clockwork_watch/examine(mob/user) - ..() - to_chat(user, "Station Time: [STATION_TIME_TIMESTAMP("hh:mm:ss")]") + . = ..() + . += "Station Time: [STATION_TIME_TIMESTAMP("hh:mm:ss")]" /* * Toy Dagger diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index 14f924a27e..f559d2801d 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -566,9 +566,9 @@ . += blade_inhand /obj/item/twohanded/dualsaber/hypereutactic/examine(mob/user) - ..() + . = ..() if(!hacked) - to_chat(user, "Alt-click to recolor it.") + . += "Alt-click to recolor it." /obj/item/twohanded/dualsaber/hypereutactic/rainbow_process() . = ..() @@ -634,9 +634,9 @@ AddComponent(/datum/component/jousting) /obj/item/twohanded/spear/examine(mob/user) - ..() + . = ..() if(explosive) - to_chat(user, "Use in your hands to activate the attached explosive.
    Alt-click to set your war cry.
    Right-click in combat mode to wield") + . += "Use in your hands to activate the attached explosive.
    Alt-click to set your war cry.
    Right-click in combat mode to wield" /obj/item/twohanded/spear/update_icon() if(explosive) diff --git a/code/game/objects/items/vending_items.dm b/code/game/objects/items/vending_items.dm index 3be12abf4f..af647550ea 100755 --- a/code/game/objects/items/vending_items.dm +++ b/code/game/objects/items/vending_items.dm @@ -30,14 +30,14 @@ name = "\improper [machine_name] restocking unit" /obj/item/vending_refill/examine(mob/user) - ..() + . = ..() var/num = get_part_rating() if (num == INFINITY) - to_chat(user, "It's sealed tight, completely full of supplies.") + . += "It's sealed tight, completely full of supplies." else if (num == 0) - to_chat(user, "It's empty!") + . += "It's empty!" else - to_chat(user, "It can restock [num] item\s.") + . += "It can restock [num] item\s." /obj/item/vending_refill/get_part_rating() if (!products || !contraband || !premium) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index fec17cfa69..fe1086eb6e 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -125,10 +125,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 qdel(src) //If this ever happens, it's because you lost an arm /obj/item/claymore/highlander/examine(mob/user) - ..() - to_chat(user, "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade.") + . = ..() + . += "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade." if(nuke_disk) - to_chat(user, "It's holding the nuke disk!") + . += "It's holding the nuke disk!" /obj/item/claymore/highlander/attack(mob/living/target, mob/living/user) . = ..() @@ -216,7 +216,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK force = 40 throwforce = 10 - w_class = WEIGHT_CLASS_HUGE + w_class = WEIGHT_CLASS_BULKY hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") block_chance = 50 @@ -427,7 +427,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE + w_class = WEIGHT_CLASS_BULKY force = 24 throwforce = 0 throw_range = 0 @@ -512,7 +512,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 force = 10 throwforce = 12 attack_verb = list("beat", "smacked") - w_class = WEIGHT_CLASS_HUGE + w_class = WEIGHT_CLASS_BULKY var/homerun_ready = 0 var/homerun_able = 0 total_mass = 2.7 //a regular wooden major league baseball bat weighs somewhere between 2 to 3.4 pounds, according to google diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 6dd8a43130..e6c7f987d5 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -224,11 +224,11 @@ .["Modify armor values"] = "?_src_=vars;[HrefToken()];modarmor=[REF(src)]" /obj/examine(mob/user) - ..() + . = ..() if(obj_flags & UNIQUE_RENAME) - to_chat(user, "Use a pen on it to rename it or change its description.") + . += "Use a pen on it to rename it or change its description." if(unique_reskin && (!current_skin || always_reskinnable)) - to_chat(user, "Alt-click it to reskin it.") + . += "Alt-click it to reskin it." /obj/AltClick(mob/user) . = ..() diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 7526807eeb..cf050f62d1 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -89,15 +89,15 @@ structureclimber = null /obj/structure/examine(mob/user) - ..() + . = ..() if(!(resistance_flags & INDESTRUCTIBLE)) if(resistance_flags & ON_FIRE) - to_chat(user, "It's on fire!") + . += "It's on fire!" if(broken) - to_chat(user, "It appears to be broken.") + . += "It appears to be broken." var/examine_status = examine_status(user) if(examine_status) - to_chat(user, examine_status) + . += examine_status /obj/structure/proc/examine_status(mob/user) //An overridable proc, mostly for falsewalls. var/healthpercent = (obj_integrity/max_integrity) * 100 diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index be26567c7e..8964d1ca41 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -39,7 +39,7 @@ /obj/structure/AIcore/latejoin_inactive/examine(mob/user) . = ..() - to_chat(user, "Its transmitter seems to be [active? "on" : "off"].") + . += "Its transmitter seems to be [active? "on" : "off"]." /obj/structure/AIcore/latejoin_inactive/proc/is_available() //If people still manage to use this feature to spawn-kill AI latejoins ahelp them. if(!available) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 12dcb97903..e9e09ddc91 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -23,9 +23,9 @@ var/bolts = TRUE /obj/structure/bed/examine(mob/user) - ..() + . = ..() if(bolts) - to_chat(user, "It's held together by a couple of bolts.") + . += "It's held together by a couple of bolts." /obj/structure/bed/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) @@ -148,8 +148,8 @@ ..() /obj/item/roller/robo/examine(mob/user) - ..() - to_chat(user, "The dock is [loaded ? "loaded" : "empty"].") + . = ..() + . += "The dock is [loaded ? "loaded" : "empty"]." /obj/item/roller/robo/deploy_roller(mob/user, atom/location) if(loaded) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index cec97d5d8b..d19e76d238 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -15,10 +15,10 @@ layer = OBJ_LAYER /obj/structure/chair/examine(mob/user) - ..() - to_chat(user, "It's held together by a couple of bolts.") + . = ..() + . += "It's held together by a couple of bolts." if(!has_buckled_mobs()) - to_chat(user, "Drag your sprite to sit in it.") + . += "Drag your sprite to sit in it." /obj/structure/chair/Initialize() . = ..() diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 1e1fee0bfe..82a0c4d32f 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -294,13 +294,13 @@ LINEN BINS var/obj/item/hidden = null /obj/structure/bedsheetbin/examine(mob/user) - ..() + . = ..() if(amount < 1) - to_chat(user, "There are no sheets in the bin.") + . += "There are no sheets in the bin." else if(amount == 1) - to_chat(user, "There is one sheet in the bin.") + . += "There is one sheet in the bin." else - to_chat(user, "There are [amount] sheets in the bin.") + . += "There are [amount] sheets in the bin." /obj/structure/bedsheetbin/update_icon() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index b9b08802d0..0f8963012f 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -84,22 +84,22 @@ add_overlay("unlocked") /obj/structure/closet/examine(mob/user) - ..() + . = ..() if(welded) - to_chat(user, "It's welded shut.") + . += "It's welded shut." if(anchored) - to_chat(user, "It is bolted to the ground.") + . += "It is bolted to the ground." if(opened) - to_chat(user, "The parts are welded together.") + . += "The parts are welded together." else if(secure && !opened) else if(broken) - to_chat(user, "The lock is screwed in.") + . += "The lock is screwed in." else if(secure) - to_chat(user, "Alt-click to [locked ? "unlock" : "lock"].") + . += "Alt-click to [locked ? "unlock" : "lock"]." if(isliving(user)) var/mob/living/L = user if(HAS_TRAIT(L, TRAIT_SKITTISH)) - to_chat(user, "Ctrl-Shift-click [src] to jump inside.") + . += "Ctrl-Shift-click [src] to jump inside." /obj/structure/closet/CanPass(atom/movable/mover, turf/target) if(wall_mounted) diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm index ad493dd6f5..0adfe77853 100644 --- a/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm @@ -12,6 +12,9 @@ new /obj/item/clothing/under/shorts/blue(src) new /obj/item/clothing/under/shorts/green(src) new /obj/item/clothing/under/jabroni(src) + new /obj/item/clothing/under/polychromic/shortpants(src) + new /obj/item/clothing/under/polychromic/shortpants(src) + new /obj/item/clothing/under/polychromic/shortpants(src) /obj/structure/closet/boxinggloves diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index b49d0a77d5..9deca71269 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -352,6 +352,7 @@ icon_door = "black" /obj/structure/closet/wardrobe/curator/PopulateContents() + new /obj/item/clothing/accessory/pocketprotector/full(src) new /obj/item/clothing/head/fedora/curator(src) new /obj/item/clothing/suit/curator(src) new /obj/item/clothing/under/rank/curator/treasure_hunter(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 0b5dad5ca3..b06073812a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -11,7 +11,7 @@ new /obj/item/clothing/under/rank/cargo(src) new /obj/item/clothing/under/rank/cargo/skirt(src) new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/radio/headset/headset_cargo(src) + new /obj/item/radio/headset/heads/qm(src) new /obj/item/clothing/suit/fire/firefighter(src) new /obj/item/clothing/gloves/fingerless(src) new /obj/item/megaphone/cargo(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 9abd81b787..8da50d488f 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -35,6 +35,7 @@ new /obj/item/storage/lockbox/medal/engineering(src) new /obj/item/construction/rcd/loaded/upgraded(src) new /obj/item/clothing/suit/hooded/wintercoat/ce(src) + new /obj/item/clothing/head/beret/ce/white(src) /obj/structure/closet/secure_closet/engineering_electrical name = "electrical supplies locker" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index d4c876c767..ead133e22b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -71,7 +71,7 @@ new /obj/item/storage/belt/medical(src) new /obj/item/healthanalyzer/advanced(src) new /obj/item/assembly/flash/handheld(src) -// new /obj/item/reagent_containers/hypospray/CMO(src) // CITADEL EDIT comments out the hypospray mk I. the MK II kit is modularized + new /obj/item/storage/hypospraykit/cmo(src) new /obj/item/autosurgeon/cmo(src) new /obj/item/door_remote/chief_medical_officer(src) new /obj/item/clothing/neck/petcollar(src) @@ -82,6 +82,7 @@ new /obj/item/storage/photo_album/CMO(src) new /obj/item/storage/lockbox/medal/medical(src) new /obj/item/clothing/suit/hooded/wintercoat/cmo(src) + new /obj/item/clothing/head/beret/cmo/blue(src) /obj/structure/closet/secure_closet/animal name = "animal control" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index e44d3c9079..bb70532ecc 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -5,9 +5,9 @@ var/registered_name = null /obj/structure/closet/secure_closet/personal/examine(mob/user) - ..() + . = ..() if(registered_name) - to_chat(user, "The display reads, \"Owned by [registered_name]\".") + . += "The display reads, \"Owned by [registered_name]\"." /obj/structure/closet/secure_closet/personal/check_access(obj/item/card/id/I) . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 97c0c8f3e2..4e1ca9a77d 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -31,3 +31,4 @@ new /obj/item/circuitboard/machine/techfab/department/science(src) new /obj/item/storage/photo_album/RD(src) new /obj/item/clothing/suit/hooded/wintercoat/rd(src) + diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index e87cb22f31..a50ee6988c 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -34,6 +34,8 @@ new /obj/item/gun/energy/e_gun(src) new /obj/item/door_remote/captain(src) new /obj/item/storage/photo_album/Captain(src) + new /obj/item/clothing/head/caphat/beret/white(src) + /obj/structure/closet/secure_closet/hop name = "\proper head of personnel's locker" req_access = list(ACCESS_HOP) @@ -62,6 +64,8 @@ new /obj/item/circuitboard/machine/techfab/department/service(src) new /obj/item/storage/photo_album/HoP(src) new /obj/item/clothing/suit/hooded/wintercoat/hop(src) + new /obj/item/clothing/head/hopcap/beret/white(src) + /obj/structure/closet/secure_closet/hos name = "\proper head of security's locker" req_access = list(ACCESS_HOS) @@ -120,6 +124,7 @@ new /obj/item/clothing/gloves/krav_maga/sec(src) new /obj/item/door_remote/head_of_security(src) new /obj/item/gun/ballistic/shotgun/automatic/combat/compact(src) + new /obj/item/clothing/head/beret/sec/corporatewarden(src) /obj/structure/closet/secure_closet/security name = "security officer's locker" req_access = list(ACCESS_SECURITY) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index d83922d708..9d554181eb 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -142,28 +142,21 @@ new /obj/item/clothing/suit/jacket(src) if(prob(40)) new /obj/item/clothing/suit/jacket(src) - new /obj/item/clothing/under/color/white(src) - new /obj/item/clothing/under/skirt/color/white(src) - new /obj/item/clothing/under/color/blue(src) - new /obj/item/clothing/under/skirt/color/blue(src) - new /obj/item/clothing/under/color/yellow(src) - new /obj/item/clothing/under/skirt/color/yellow(src) - new /obj/item/clothing/under/color/green(src) - new /obj/item/clothing/under/skirt/color/green(src) - new /obj/item/clothing/under/color/orange(src) - new /obj/item/clothing/under/skirt/color/orange(src) - new /obj/item/clothing/under/color/pink(src) - new /obj/item/clothing/under/skirt/color/pink(src) - new /obj/item/clothing/under/color/red(src) - new /obj/item/clothing/under/skirt/color/red(src) - new /obj/item/clothing/under/color/darkblue(src) - new /obj/item/clothing/under/skirt/color/darkblue(src) - new /obj/item/clothing/under/color/teal(src) - new /obj/item/clothing/under/skirt/color/teal(src) - new /obj/item/clothing/under/color/lightpurple(src) - new /obj/item/clothing/under/skirt/color/lightpurple(src) - new /obj/item/clothing/under/color/green(src) - new /obj/item/clothing/under/skirt/color/green(src) + new /obj/item/clothing/under/polychromic/jumpsuit(src) + new /obj/item/clothing/under/polychromic/jumpsuit(src) + new /obj/item/clothing/under/polychromic/jumpsuit(src) + new /obj/item/clothing/under/polychromic/shirt(src) + new /obj/item/clothing/under/polychromic/shirt(src) + new /obj/item/clothing/under/polychromic/shirt(src) + new /obj/item/clothing/under/polychromic/kilt(src) + new /obj/item/clothing/under/polychromic/kilt(src) + new /obj/item/clothing/under/polychromic/kilt(src) + new /obj/item/clothing/under/polychromic/skirt(src) + new /obj/item/clothing/under/polychromic/skirt(src) + new /obj/item/clothing/under/polychromic/skirt(src) + new /obj/item/clothing/under/polychromic/shorts(src) + new /obj/item/clothing/under/polychromic/shorts(src) + new /obj/item/clothing/under/polychromic/shorts(src) new /obj/item/clothing/mask/bandana/red(src) new /obj/item/clothing/mask/bandana/red(src) new /obj/item/clothing/mask/bandana/blue(src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index bcb025d14b..771b4bc04e 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -38,14 +38,14 @@ return ..() /obj/structure/displaycase/examine(mob/user) - ..() + . = ..() if(alert) - to_chat(user, "Hooked up with an anti-theft system.") + . += "Hooked up with an anti-theft system." if(showpiece) - to_chat(user, "There's [showpiece] inside.") + . += "There's [showpiece] inside." if(trophy_message) - to_chat(user, "The plaque reads:") - to_chat(user, trophy_message) + . += "The plaque reads:" + . += trophy_message /obj/structure/displaycase/proc/dump() diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 915d45be78..07a66505e7 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -26,28 +26,28 @@ ..() /obj/structure/door_assembly/examine(mob/user) - ..() + . = ..() var/doorname = "" if(created_name) doorname = ", written on it is '[created_name]'" switch(state) if(AIRLOCK_ASSEMBLY_NEEDS_WIRES) if(anchored) - to_chat(user, "The anchoring bolts are wrenched in place, but the maintenance panel lacks wiring.") + . += "The anchoring bolts are wrenched in place, but the maintenance panel lacks wiring." else - to_chat(user, "The assembly is welded together, but the anchoring bolts are unwrenched.") + . += "The assembly is welded together, but the anchoring bolts are unwrenched." if(AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS) - to_chat(user, "The maintenance panel is wired, but the circuit slot is empty.") + . += "The maintenance panel is wired, but the circuit slot is empty." if(AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) - to_chat(user, "The circuit is connected loosely to its slot, but the maintenance panel is unscrewed and open.") + . += "The circuit is connected loosely to its slot, but the maintenance panel is unscrewed and open." if(!mineral && !glass && !noglass) - to_chat(user, "There is a small paper placard on the assembly[doorname]. There are empty slots for glass windows and mineral covers.") + . += "There is a small paper placard on the assembly[doorname]. There are empty slots for glass windows and mineral covers." else if(!mineral && glass && !noglass) - to_chat(user, "There is a small paper placard on the assembly[doorname]. There are empty slots for mineral covers.") + . += "There is a small paper placard on the assembly[doorname]. There are empty slots for mineral covers." else if(mineral && !glass && !noglass) - to_chat(user, "There is a small paper placard on the assembly[doorname]. There are empty slots for glass windows.") + . += "There is a small paper placard on the assembly[doorname]. There are empty slots for glass windows." else - to_chat(user, "There is a small paper placard on the assembly[doorname].") + . += "There is a small paper placard on the assembly[doorname]." /obj/structure/door_assembly/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/pen)) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index d4e097e450..23643ae9cd 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -22,8 +22,8 @@ stored_extinguisher = new /obj/item/extinguisher(src) /obj/structure/extinguisher_cabinet/examine(mob/user) - ..() - to_chat(user, "Alt-click to [opened ? "close":"open"] it.") + . = ..() + . += "Alt-click to [opened ? "close":"open"] it." /obj/structure/extinguisher_cabinet/Destroy() if(stored_extinguisher) diff --git a/code/game/objects/structures/femur_breaker.dm b/code/game/objects/structures/femur_breaker.dm index e3002a8fae..7331285161 100644 --- a/code/game/objects/structures/femur_breaker.dm +++ b/code/game/objects/structures/femur_breaker.dm @@ -23,24 +23,14 @@ var/current_action = 0 // What's currently happening to the femur breaker /obj/structure/femur_breaker/examine(mob/user) - ..() - - var/msg = "" - - msg += "It is [anchored ? "secured to the floor." : "unsecured."]
    " - + . = ..() + . += "It is [anchored ? "secured to the floor." : "unsecured."]" if (slat_status == BREAKER_SLAT_RAISED) - msg += "The breaker slat is in a neutral position." + . += "The breaker slat is in a neutral position." else - msg += "The breaker slat is lowered, and must be raised." - + . += "The breaker slat is lowered, and must be raised." if (LAZYLEN(buckled_mobs)) - msg += "
    " - msg += "Someone appears to be strapped in. You can help them unbuckle, or activate the femur breaker." - - to_chat(user, msg) - - return msg + . += "Someone appears to be strapped in. You can help them unbuckle, or activate the femur breaker." /obj/structure/femur_breaker/attack_hand(mob/user) add_fingerprint(user) diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm index 19103c71ec..35891fa607 100644 --- a/code/game/objects/structures/fence.dm +++ b/code/game/objects/structures/fence.dm @@ -29,13 +29,12 @@ update_cut_status() /obj/structure/fence/examine(mob/user) - .=..() - + . = ..() switch(hole_size) if(MEDIUM_HOLE) - user.show_message("There is a large hole in \the [src].") + . += "There is a large hole in \the [src]." if(LARGE_HOLE) - user.show_message("\The [src] has been completely cut through.") + . += "\The [src] has been completely cut through." /obj/structure/fence/end icon_state = "end" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 31bf9318ce..94619e1858 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -15,16 +15,16 @@ . = ..() switch(state) if(GIRDER_REINF) - to_chat(user, "The support struts are screwed in place.") + . += "The support struts are screwed in place." if(GIRDER_REINF_STRUTS) - to_chat(user, "The support struts are unscrewed and the inner grille is intact.") + . += "The support struts are unscrewed and the inner grille is intact." if(GIRDER_NORMAL) if(can_displace) - to_chat(user, "The bolts are wrenched in place.") + . += "The bolts are wrenched in place." if(GIRDER_DISPLACED) - to_chat(user, "The bolts are loosened, but the screws are holding [src] together.") + . += "The bolts are loosened, but the screws are holding [src] together." if(GIRDER_DISASSEMBLED) - to_chat(user, "[src] is disassembled! You probably shouldn't be able to see this examine message.") + . += "[src] is disassembled! You probably shouldn't be able to see this examine message." /obj/structure/girder/attackby(obj/item/W, mob/user, params) add_fingerprint(user) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 00d1690d86..c0519f2504 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -37,11 +37,11 @@ icon_state = "grille50_[rand(0,3)]" /obj/structure/grille/examine(mob/user) - ..() + . = ..() if(anchored) - to_chat(user, "It's secured in place with screws. The rods look like they could be cut through.") - if(!anchored) - to_chat(user, "The anchoring screws are unscrewed. The rods look like they could be cut through.") + . += "It's secured in place with screws. The rods look like they could be cut through." + else + . += "The anchoring screws are unscrewed. The rods look like they could be cut through." /obj/structure/grille/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) switch(the_rcd.mode) diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm index 8714722f4b..3b4bbea559 100644 --- a/code/game/objects/structures/guillotine.dm +++ b/code/game/objects/structures/guillotine.dm @@ -34,29 +34,22 @@ . = ..() /obj/structure/guillotine/examine(mob/user) - ..() - - var/msg = "" - - msg += "It is [anchored ? "wrenched to the floor." : "unsecured. A wrench should fix that."]
    " + . = ..() + . += "It is [anchored ? "wrenched to the floor." : "unsecured. A wrench should fix that."]" if (blade_status == GUILLOTINE_BLADE_RAISED) - msg += "The blade is raised, ready to fall, and" + var/msg = "The blade is raised, ready to fall, and" if (blade_sharpness >= GUILLOTINE_DECAP_MIN_SHARP) msg += " looks sharp enough to decapitate without any resistance." else msg += " doesn't look particularly sharp. Perhaps a whetstone can be used to sharpen it." + . += msg else - msg += "The blade is hidden inside the stocks." + . += "The blade is hidden inside the stocks." if (LAZYLEN(buckled_mobs)) - msg += "
    " - msg += "Someone appears to be strapped in. You can help them out, or you can harm them by activating the guillotine." - - to_chat(user, msg) - - return msg + . += "Someone appears to be strapped in. You can help them out, or you can harm them by activating the guillotine." /obj/structure/guillotine/attack_hand(mob/user) add_fingerprint(user) diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index 4d56b1ef6f..4c6b9732d0 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -104,8 +104,8 @@ var/buzzcd = 0 /obj/structure/holosign/barrier/medical/examine(mob/user) - ..() - to_chat(user,"The biometric scanners are [force_allaccess ? "off" : "on"].") + . = ..() + . += "The biometric scanners are [force_allaccess ? "off" : "on"]." /obj/structure/holosign/barrier/medical/CanPass(atom/movable/mover, turf/target) icon_state = "holo_medical" diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index a6ba6424b1..b946a06432 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -19,10 +19,10 @@ /obj/structure/lattice/examine(mob/user) ..() - deconstruction_hints(user) + . += deconstruction_hints(user) /obj/structure/lattice/proc/deconstruction_hints(mob/user) - to_chat(user, "The rods look like they could be cut. There's space for more rods or a tile.") + return "The rods look like they could be cut. There's space for more rods or a tile." /obj/structure/lattice/Initialize(mapload) . = ..() diff --git a/code/game/objects/structures/life_candle.dm b/code/game/objects/structures/life_candle.dm index e1480b32b3..0ae0e29459 100644 --- a/code/game/objects/structures/life_candle.dm +++ b/code/game/objects/structures/life_candle.dm @@ -55,9 +55,9 @@ /obj/structure/life_candle/examine(mob/user) . = ..() if(linked_minds.len) - to_chat(user, "[src] is active, and linked to [linked_minds.len] souls.") + . += "[src] is active, and linked to [linked_minds.len] souls." else - to_chat(user, "It is static, still, unmoving.") + . += "It is static, still, unmoving." /obj/structure/life_candle/process() if(!linked_minds.len) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index e7be30520e..1a1ff0843a 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -163,8 +163,8 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an ..() /obj/structure/bodycontainer/morgue/examine(mob/user) - ..() - to_chat(user, "The speaker is [beeper ? "enabled" : "disabled"]. Alt-click to toggle it.") + . = ..() + . += "The speaker is [beeper ? "enabled" : "disabled"]. Alt-click to toggle it." /obj/structure/bodycontainer/morgue/AltClick(mob/user) ..() diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index fd4f3abf15..a07e9a26d5 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -19,9 +19,9 @@ /obj/structure/plasticflaps/examine(mob/user) . = ..() if(anchored) - to_chat(user, "[src] are screwed to the floor.") + . += "[src] are screwed to the floor." else - to_chat(user, "[src] are no longer screwed to the floor, and the flaps can be cut apart.") + . += "[src] are no longer screwed to the floor, and the flaps can be cut apart." /obj/structure/plasticflaps/screwdriver_act(mob/living/user, obj/item/W) if(..()) diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index 419502e2b0..77aad5a9dd 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -34,14 +34,14 @@ can_rotate = FALSE /obj/structure/reflector/examine(mob/user) - ..() + . = ..() if(finished) - to_chat(user, "It is set to [rotation_angle] degrees, and the rotation is [can_rotate ? "unlocked" : "locked"].") + . += "It is set to [rotation_angle] degrees, and the rotation is [can_rotate ? "unlocked" : "locked"]." if(!admin) if(can_rotate) - to_chat(user, "Alt-click to adjust its direction.") + . += "Alt-click to adjust its direction." else - to_chat(user, "Use screwdriver to unlock the rotation.") + . += "Use screwdriver to unlock the rotation." /obj/structure/reflector/proc/setAngle(new_angle) if(can_rotate) diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm index 5de3f0fc9a..b0427274a4 100644 --- a/code/game/objects/structures/showcase.dm +++ b/code/game/objects/structures/showcase.dm @@ -131,12 +131,11 @@ //Feedback is given in examine because showcases can basically have any sprite assigned to them /obj/structure/showcase/examine(mob/user) - ..() - + . = ..() switch(deconstruction_state) if(SHOWCASE_CONSTRUCTED) - to_chat(user, "The showcase is fully constructed.") + . += "The showcase is fully constructed." if(SHOWCASE_SCREWDRIVERED) - to_chat(user, "The showcase has its screws loosened.") + . += "The showcase has its screws loosened." else - to_chat(user, "If you see this, something is wrong.") + . += "If you see this, something is wrong." diff --git a/code/game/objects/structures/spirit_board.dm b/code/game/objects/structures/spirit_board.dm index c35d16ab73..4a9a1bdce6 100644 --- a/code/game/objects/structures/spirit_board.dm +++ b/code/game/objects/structures/spirit_board.dm @@ -12,7 +12,7 @@ /obj/structure/spirit_board/examine() desc = "[initial(desc)] The planchette is sitting at \"[planchette]\"." - ..() + return ..() /obj/structure/spirit_board/attack_hand(mob/user) . = ..() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index b12a26cd00..99f8875aef 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -36,11 +36,11 @@ canSmoothWith = list(/obj/structure/table, /obj/structure/table/reinforced) /obj/structure/table/examine(mob/user) - ..() - deconstruction_hints(user) + . = ..() + . += deconstruction_hints(user) /obj/structure/table/proc/deconstruction_hints(mob/user) - to_chat(user, "The top is screwed on, but the main bolts are also visible.") + return "The top is screwed on, but the main bolts are also visible." /obj/structure/table/update_icon() if(smooth) @@ -452,9 +452,8 @@ /obj/structure/table/reinforced/deconstruction_hints(mob/user) if(deconstruction_ready) - to_chat(user, "The top cover has been welded loose and the main frame's bolts are exposed.") - else - to_chat(user, "The top cover is firmly welded on.") + return "The top cover has been welded loose and the main frame's bolts are exposed." + return "The top cover is firmly welded on." /obj/structure/table/reinforced/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weldingtool)) @@ -582,8 +581,8 @@ max_integrity = 20 /obj/structure/rack/examine(mob/user) - ..() - to_chat(user, "It's held together by a couple of bolts.") + . = ..() + . += "It's held together by a couple of bolts." /obj/structure/rack/CanPass(atom/movable/mover, turf/target) if(src.density == 0) //Because broken racks -Agouri |TODO: SPRITE!| diff --git a/code/game/objects/structures/traps.dm b/code/game/objects/structures/traps.dm index 176779abd7..9c1859df08 100644 --- a/code/game/objects/structures/traps.dm +++ b/code/game/objects/structures/traps.dm @@ -38,7 +38,7 @@ if(user.mind && user.mind in immune_minds) return if(get_dist(user, src) <= 1) - to_chat(user, "You reveal [src]!") + . += "You reveal [src]!" flare() /obj/structure/trap/proc/flare() diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 794776cfa5..9dee1e26cc 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -29,21 +29,21 @@ rad_flags = RAD_PROTECT_CONTENTS /obj/structure/window/examine(mob/user) - ..() + . = ..() if(reinf) if(anchored && state == WINDOW_SCREWED_TO_FRAME) - to_chat(user, "The window is screwed to the frame.") + . += "The window is screwed to the frame." else if(anchored && state == WINDOW_IN_FRAME) - to_chat(user, "The window is unscrewed but pried into the frame.") + . += "The window is unscrewed but pried into the frame." else if(anchored && state == WINDOW_OUT_OF_FRAME) - to_chat(user, "The window is out of the frame, but could be pried in. It is screwed to the floor.") + . += "The window is out of the frame, but could be pried in. It is screwed to the floor." else if(!anchored) - to_chat(user, "The window is unscrewed from the floor, and could be deconstructed by wrenching.") + . += "The window is unscrewed from the floor, and could be deconstructed by wrenching." else if(anchored) - to_chat(user, "The window is screwed to the floor.") + . += "The window is screwed to the floor." else - to_chat(user, "The window is unscrewed from the floor, and could be deconstructed by wrenching.") + . += "The window is unscrewed from the floor, and could be deconstructed by wrenching." /obj/structure/window/Initialize(mapload, direct) . = ..() diff --git a/code/game/say.dm b/code/game/say.dm index 4ce1d3c710..60189618be 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -29,7 +29,7 @@ GLOBAL_LIST_INIT(freqtospan, list( send_speech(message, 7, src, , spans, message_language=language) /atom/movable/proc/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - SEND_SIGNAL(src, COMSIG_MOVABLE_HEAR, message, speaker, message_language, raw_message, radio_freq, spans, message_mode) + SEND_SIGNAL(src, COMSIG_MOVABLE_HEAR, args) /atom/movable/proc/can_speak() return 1 diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index 43fce2e516..a8e6baf3fb 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -19,8 +19,8 @@ tiled_dirt = FALSE /turf/open/floor/wood/examine(mob/user) - ..() - to_chat(user, "There's a few screws and a small crack visible.") + . = ..() + . += "There's a few screws and a small crack visible." /turf/open/floor/wood/screwdriver_act(mob/living/user, obj/item/I) if(..()) @@ -96,6 +96,15 @@ if(..()) return +/turf/open/floor/grass/fairy //like grass but fae-er + name = "fairygrass patch" + desc = "Something about this grass makes you want to frolic. Or get high." + icon_state = "fairygrass" + floor_tile = /obj/item/stack/tile/fairygrass + light_range = 2 + light_power = 0.80 + light_color = "#33CCFF" + /turf/open/floor/grass/snow gender = PLURAL name = "snow" @@ -174,8 +183,8 @@ tiled_dirt = FALSE /turf/open/floor/carpet/examine(mob/user) - ..() - to_chat(user, "There's a small crack on the edge of it.") + . = ..() + . += "There's a small crack on the edge of it." /turf/open/floor/carpet/Initialize() . = ..() diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index 6e896b5e56..f9376c0672 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -14,8 +14,8 @@ /turf/open/floor/light/examine(mob/user) - ..() - to_chat(user, "There's a small crack on the edge of it.") + . = ..() + . += "There's a small crack on the edge of it." /turf/open/floor/light/Initialize() . = ..() diff --git a/code/game/turfs/simulated/floor/plasteel_floor.dm b/code/game/turfs/simulated/floor/plasteel_floor.dm index 2d2911c334..a3a92e7898 100644 --- a/code/game/turfs/simulated/floor/plasteel_floor.dm +++ b/code/game/turfs/simulated/floor/plasteel_floor.dm @@ -5,8 +5,8 @@ burnt_states = list("floorscorched1", "floorscorched2") /turf/open/floor/plasteel/examine(mob/user) - ..() - to_chat(user, "There's a small crack on the edge of it.") + . = ..() + . += "There's a small crack on the edge of it." /turf/open/floor/plasteel/update_icon() if(!..()) diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 191d9b0242..ae67edf073 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -20,14 +20,14 @@ var/attachment_holes = TRUE /turf/open/floor/plating/examine(mob/user) - ..() + . = ..() if(broken || burnt) - to_chat(user, "It looks like the dents could be welded smooth.") + . += "It looks like the dents could be welded smooth." return if(attachment_holes) - to_chat(user, "There are a few attachment holes for a new tile or reinforcement rods.") + . += "There are a few attachment holes for a new tile or reinforcement rods." else - to_chat(user, "You might be able to build ontop of it with some tiles...") + . += "You might be able to build ontop of it with some tiles..." /turf/open/floor/plating/Initialize() if (!broken_states) diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm index d48bdb489b..b04f89f8be 100644 --- a/code/game/turfs/simulated/floor/reinf_floor.dm +++ b/code/game/turfs/simulated/floor/reinf_floor.dm @@ -13,8 +13,8 @@ tiled_dirt = FALSE /turf/open/floor/engine/examine(mob/user) - ..() - to_chat(user, "The reinforcement rods are wrenched firmly in place.") + . = ..() + . += "The reinforcement rods are wrenched firmly in place." /turf/open/floor/engine/airless initial_gas_mix = AIRLESS_ATMOS diff --git a/code/game/turfs/simulated/wall/reinf_walls.dm b/code/game/turfs/simulated/wall/reinf_walls.dm index 0d9bff1bdf..b4e84648c2 100644 --- a/code/game/turfs/simulated/wall/reinf_walls.dm +++ b/code/game/turfs/simulated/wall/reinf_walls.dm @@ -17,19 +17,19 @@ /turf/closed/wall/r_wall/deconstruction_hints(mob/user) switch(d_state) if(INTACT) - to_chat(user, "The outer grille is fully intact.") + return "The outer grille is fully intact." if(SUPPORT_LINES) - to_chat(user, "The outer grille has been cut, and the support lines are screwed securely to the outer cover.") + return "The outer grille has been cut, and the support lines are screwed securely to the outer cover." if(COVER) - to_chat(user, "The support lines have been unscrewed, and the metal cover is welded firmly in place.") + return "The support lines have been unscrewed, and the metal cover is welded firmly in place." if(CUT_COVER) - to_chat(user, "The metal cover has been sliced through, and is connected loosely to the girder.") + return "The metal cover has been sliced through, and is connected loosely to the girder." if(ANCHOR_BOLTS) - to_chat(user, "The outer cover has been pried away, and the bolts anchoring the support rods are wrenched in place.") + return "The outer cover has been pried away, and the bolts anchoring the support rods are wrenched in place." if(SUPPORT_RODS) - to_chat(user, "The bolts anchoring the support rods have been loosened, but are still welded firmly to the girder.") + return "The bolts anchoring the support rods have been loosened, but are still welded firmly to the girder." if(SHEATH) - to_chat(user, "The support rods have been sliced through, and the outer sheath is connected loosely to the girder.") + return "The support rods have been sliced through, and the outer sheath is connected loosely to the girder." /turf/closed/wall/r_wall/devastate_wall() new sheet_type(src, sheet_amount) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index b18fbb50f6..460c6a52c9 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -32,11 +32,11 @@ var/list/dent_decals /turf/closed/wall/examine(mob/user) - ..() + . = ..() deconstruction_hints(user) /turf/closed/wall/proc/deconstruction_hints(mob/user) - to_chat(user, "The outer plating is welded firmly in place.") + return "The outer plating is welded firmly in place." /turf/closed/wall/attack_tk() return diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm index 028af313b0..2901659ce9 100644 --- a/code/modules/admin/sound_emitter.dm +++ b/code/modules/admin/sound_emitter.dm @@ -34,15 +34,15 @@ return /obj/effect/sound_emitter/examine(mob/user) - ..() + . = ..() if(!isobserver(user)) return - to_chat(user, "Sound File: [sound_file ? sound_file : "None chosen"]") - to_chat(user, "Mode: [motus_operandi]
    ") - to_chat(user, "Range: [emitter_range]
    ") - to_chat(user, "Sound is playing at [sound_volume]% volume.") + . += "Sound File: [sound_file ? sound_file : "None chosen"]" + . += "Mode: [motus_operandi]
    " + . += "Range: [emitter_range]
    " + . += "Sound is playing at [sound_volume]% volume." if(user.client.holder) - to_chat(user, "Alt-click it to quickly activate it!") + . += "Alt-click it to quickly activate it!" //ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/effect/sound_emitter/attack_ghost(mob/user) diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index 37652d1887..b708c59ef7 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -611,16 +611,16 @@ . = ..() /obj/item/abductor_baton/examine(mob/user) - ..() + . = ..() switch(mode) if(BATON_STUN) - to_chat(user, "The baton is in stun mode.") + . += "The baton is in stun mode." if(BATON_SLEEP) - to_chat(user, "The baton is in sleep inducement mode.") + . += "The baton is in sleep inducement mode." if(BATON_CUFF) - to_chat(user, "The baton is in restraining mode.") + . += "The baton is in restraining mode." if(BATON_PROBE) - to_chat(user, "The baton is in probing mode.") + . += "The baton is in probing mode." /obj/item/radio/headset/abductor name = "alien headset" diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm index e9a815ac38..f7b49e1cf4 100644 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ b/code/modules/antagonists/abductor/equipment/gland.dm @@ -20,7 +20,7 @@ /obj/item/organ/heart/gland/examine(mob/user) . = ..() if((user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_SCIENTIST_TRAINING)) || isobserver(user)) - to_chat(user, "It is \a [true_name].") + . += "It is \a [true_name]." /obj/item/organ/heart/gland/proc/ownerCheck() if(ishuman(owner)) diff --git a/code/modules/antagonists/blob/blob/overmind.dm b/code/modules/antagonists/blob/blob/overmind.dm index fa7b64591f..f094fa83db 100644 --- a/code/modules/antagonists/blob/blob/overmind.dm +++ b/code/modules/antagonists/blob/blob/overmind.dm @@ -170,9 +170,9 @@ GLOBAL_LIST_EMPTY(blob_nodes) add_points(0) /mob/camera/blob/examine(mob/user) - ..() + . = ..() if(blob_reagent_datum) - to_chat(user, "Its chemical is [blob_reagent_datum.name].") + . += "Its chemical is [blob_reagent_datum.name]." /mob/camera/blob/update_health_hud() if(blob_core) diff --git a/code/modules/antagonists/blob/blob/theblob.dm b/code/modules/antagonists/blob/blob/theblob.dm index dc7aa821d6..b37c007664 100644 --- a/code/modules/antagonists/blob/blob/theblob.dm +++ b/code/modules/antagonists/blob/blob/theblob.dm @@ -243,18 +243,19 @@ else return ..() -/obj/structure/blob/proc/chemeffectreport(mob/user) +/obj/structure/blob/proc/chemeffectreport() + . = list() if(overmind) - to_chat(user, "Material: [overmind.blob_reagent_datum.name].") - to_chat(user, "Material Effects: [overmind.blob_reagent_datum.analyzerdescdamage]") - to_chat(user, "Material Properties: [overmind.blob_reagent_datum.analyzerdesceffect]
    ") + . += "Material: [overmind.blob_reagent_datum.name]." + . += "Material Effects: [overmind.blob_reagent_datum.analyzerdescdamage]" + . += "Material Properties: [overmind.blob_reagent_datum.analyzerdesceffect]
    " else - to_chat(user, "No Material Detected!
    ") + . += "No Material Detected!
    " -/obj/structure/blob/proc/typereport(mob/user) - to_chat(user, "Blob Type: [uppertext(initial(name))]") - to_chat(user, "Health: [obj_integrity]/[max_integrity]") - to_chat(user, "Effects: [scannerreport()]") +/obj/structure/blob/proc/typereport() + . = list("Blob Type: [uppertext(initial(name))]") + . += "Health: [obj_integrity]/[max_integrity]" + . += "Effects: [scannerreport()]" /obj/structure/blob/attack_animal(mob/living/simple_animal/M) if(ROLE_BLOB in M.faction) //sorry, but you can't kill the blob as a blobbernaut @@ -310,20 +311,20 @@ return B /obj/structure/blob/examine(mob/user) - ..() + . = ..() var/datum/atom_hud/hud_to_check = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] if(user.research_scanner || hud_to_check.hudusers[user]) - to_chat(user, "Your HUD displays an extensive report...
    ") + . += "Your HUD displays an extensive report...
    " if(overmind) - to_chat(user, "Progress to Critical Mass: [overmind.blobs_legit.len]/[overmind.blobwincount].") + . += "Progress to Critical Mass: [overmind.blobs_legit.len]/[overmind.blobwincount]." else - to_chat(user, "Core neutralized. Critical mass no longer attainable.") - chemeffectreport(user) - typereport(user) + . += "Core neutralized. Critical mass no longer attainable." + . += chemeffectreport() + . += typereport() else if(isobserver(user) && overmind) - to_chat(user, "Progress to Critical Mass: [overmind.blobs_legit.len]/[overmind.blobwincount].") - to_chat(user, "It seems to be made of [get_chem_name()].") + . += "Progress to Critical Mass: [overmind.blobs_legit.len]/[overmind.blobwincount]." + . += "It seems to be made of [get_chem_name()]." /obj/structure/blob/proc/scannerreport() return "A generic blob. Looks like someone forgot to override this proc, adminhelp this." diff --git a/code/modules/antagonists/clockcult/clock_effect.dm b/code/modules/antagonists/clockcult/clock_effect.dm index b9de95b030..5fbfa03290 100644 --- a/code/modules/antagonists/clockcult/clock_effect.dm +++ b/code/modules/antagonists/clockcult/clock_effect.dm @@ -21,5 +21,5 @@ /obj/effect/clockwork/examine(mob/user) if((is_servant_of_ratvar(user) || isobserver(user)) && clockwork_desc) desc = clockwork_desc - ..() + . = ..() desc = initial(desc) \ No newline at end of file diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm b/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm index 34a986aa97..c18e46790e 100644 --- a/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm +++ b/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm @@ -6,6 +6,7 @@ /obj/effect/clockwork/overlay/examine(mob/user) if(linked) linked.examine(user) + return ..() /obj/effect/clockwork/overlay/ex_act() return FALSE diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm index b5a218131b..0125dc7cf5 100644 --- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm +++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm @@ -196,15 +196,15 @@ ..() /obj/effect/clockwork/sigil/transmission/examine(mob/user) - ..() + . = ..() if(is_servant_of_ratvar(user) || isobserver(user)) var/structure_number = 0 for(var/obj/structure/destructible/clockwork/powered/P in range(SIGIL_ACCESS_RANGE, src)) structure_number++ - to_chat(user, "It is storing [DisplayPower(get_clockwork_power())] of shared power, \ - and [structure_number] clockwork structure[structure_number == 1 ? " is":"s are"] in range.") + . += "It is storing [DisplayPower(get_clockwork_power())] of shared power, \ + and [structure_number] clockwork structure[structure_number == 1 ? " is":"s are"] in range." if(iscyborg(user)) - to_chat(user, "You can recharge from the [sigil_name] by crossing it.") + . += "You can recharge from the [sigil_name] by crossing it." /obj/effect/clockwork/sigil/transmission/sigil_effects(mob/living/L) if(is_servant_of_ratvar(L)) @@ -279,13 +279,13 @@ var/static/list/damage_heal_order = list(CLONE, TOX, BURN, BRUTE, OXY) //we heal damage in this order /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":GLOB.clockwork_vitality] units of vitality.") + . += "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!") + . += "It can revive Servants at no cost!" else - to_chat(user, "It can revive Servants at a cost of [revive_cost] vitality.") + . += "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) diff --git a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm index 5cf7ab7923..36aaa27716 100644 --- a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm +++ b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm @@ -53,9 +53,9 @@ return TRUE /obj/effect/clockwork/spatial_gateway/examine(mob/user) - ..() + . = ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "It has [uses] use\s remaining.") + . += "It has [uses] use\s remaining." //ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/effect/clockwork/spatial_gateway/attack_ghost(mob/user) diff --git a/code/modules/antagonists/clockcult/clock_item.dm b/code/modules/antagonists/clockcult/clock_item.dm index f403b6f9f1..7c8e877fb3 100644 --- a/code/modules/antagonists/clockcult/clock_item.dm +++ b/code/modules/antagonists/clockcult/clock_item.dm @@ -20,5 +20,5 @@ /obj/item/clockwork/examine(mob/user) if((is_servant_of_ratvar(user) || isobserver(user)) && clockwork_desc) desc = clockwork_desc - ..() + . = ..() desc = initial(desc) diff --git a/code/modules/antagonists/clockcult/clock_items/clock_components.dm b/code/modules/antagonists/clockcult/clock_items/clock_components.dm index 561d49e9ac..a9307f15e1 100644 --- a/code/modules/antagonists/clockcult/clock_items/clock_components.dm +++ b/code/modules/antagonists/clockcult/clock_items/clock_components.dm @@ -12,7 +12,7 @@ /obj/item/clockwork/component/examine(mob/user) . = ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "You can activate this in your hand to break it down for power.") + . += "You can activate this in your hand to break it down for power." /obj/item/clockwork/component/attack_self(mob/living/user) if(is_servant_of_ratvar(user)) @@ -181,9 +181,9 @@ pixel_y = rand(-sprite_shift, sprite_shift) /obj/item/clockwork/alloy_shards/examine(mob/user) - ..() + . = ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "Can be consumed by a replica fabricator as a source of power.") + . += "Can be consumed by a replica fabricator as a source of power." /obj/item/clockwork/alloy_shards/proc/replace_name_desc() name = "replicant alloy shard" diff --git a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm index 07b4366194..a7fcf0a3b0 100644 --- a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm +++ b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm @@ -27,11 +27,11 @@ armour_penetration = initial(armour_penetration) /obj/item/clockwork/weapon/ratvarian_spear/examine(mob/user) - ..() + . = ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "Attacks on living non-Servants will generate [bonus_burn] units of vitality.") + . += "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.") + . += "Throwing the spear will do massive damage, break the spear, and knock down the target." /obj/item/clockwork/weapon/ratvarian_spear/attack(mob/living/target, mob/living/carbon/human/user) . = ..() diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm index 7066109979..58835e0cd4 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm @@ -121,15 +121,15 @@ adjust_clockwork_power(0.1) //Slabs serve as very weak power generators on their own (no, not enough to justify spamming them) /obj/item/clockwork/slab/examine(mob/user) - ..() + . = ..() if(is_servant_of_ratvar(user) || isobserver(user)) if(LAZYLEN(quickbound)) for(var/i in 1 to quickbound.len) if(!quickbound[i]) continue var/datum/clockwork_scripture/quickbind_slot = quickbound[i] - to_chat(user, "Quickbind button: [initial(quickbind_slot.name)].") - to_chat(user, "Available power: [DisplayPower(get_clockwork_power())].") + . += "Quickbind button: [initial(quickbind_slot.name)]." + . += "Available power: [DisplayPower(get_clockwork_power())]." //Slab actions; Hierophant, Quickbind /obj/item/clockwork/slab/ui_action_click(mob/user, action) diff --git a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm index f53796f02a..43c05b8556 100644 --- a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm +++ b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm @@ -28,7 +28,7 @@ /obj/item/clockwork/construct_chassis/examine(mob/user) clockwork_desc = "[clockwork_desc]
    [construct_desc]" - ..() + . = ..() clockwork_desc = initial(clockwork_desc) //ATTACK HAND IGNORING PARENT RETURN VALUE diff --git a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm index 741b251a4f..0365ae63af 100644 --- a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm +++ b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm @@ -44,16 +44,16 @@ speed_multiplier = initial(speed_multiplier) /obj/item/clockwork/replica_fabricator/examine(mob/living/user) - ..() + . = ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "Can be used to replace walls, floors, tables, windows, windoors, and airlocks with Clockwork variants.") - to_chat(user, "Can construct Clockwork Walls on Clockwork Floors and deconstruct Clockwork Walls to Clockwork Floors.") + . += "Can be used to replace walls, floors, tables, windows, windoors, and airlocks with Clockwork variants." + . += "Can construct Clockwork Walls on Clockwork Floors and deconstruct Clockwork Walls to Clockwork Floors." if(uses_power) - to_chat(user, "It can consume floor tiles, rods, metal, and plasteel for power at rates of 2:[DisplayPower(POWER_ROD)], 1:[DisplayPower(POWER_ROD)], 1:[DisplayPower(POWER_METAL)], \ - and 1:[DisplayPower(POWER_PLASTEEL)], respectively.") - to_chat(user, "It can also consume brass sheets for power at a rate of 1:[DisplayPower(POWER_FLOOR)].") - to_chat(user, "Use it in-hand to produce 5 brass sheets at a cost of [DisplayPower(POWER_WALL_TOTAL)] power.") - to_chat(user, "It has access to [DisplayPower(get_clockwork_power())] of power.") + . += "It can consume floor tiles, rods, metal, and plasteel for power at rates of 2:[DisplayPower(POWER_ROD)], 1:[DisplayPower(POWER_ROD)], 1:[DisplayPower(POWER_METAL)], \ + and 1:[DisplayPower(POWER_PLASTEEL)], respectively." + . += "It can also consume brass sheets for power at a rate of 1:[DisplayPower(POWER_FLOOR)]." + . += "Use it in-hand to produce 5 brass sheets at a cost of [DisplayPower(POWER_WALL_TOTAL)] power." + . += "It has access to [DisplayPower(get_clockwork_power())] of power." /obj/item/clockwork/replica_fabricator/attack_self(mob/living/user) if(is_servant_of_ratvar(user)) diff --git a/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm b/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm index d47bf4f316..d84338faea 100644 --- a/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm +++ b/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm @@ -39,7 +39,7 @@ /obj/item/mmi/posibrain/soul_vessel/examine(mob/user) if((is_servant_of_ratvar(user) || isobserver(user)) && clockwork_desc) desc = clockwork_desc - ..() + . = ..() desc = initial(desc) /obj/item/mmi/posibrain/soul_vessel/transfer_personality(mob/candidate) diff --git a/code/modules/antagonists/clockcult/clock_mobs.dm b/code/modules/antagonists/clockcult/clock_mobs.dm index 6268d15d44..9bdf03cbc7 100644 --- a/code/modules/antagonists/clockcult/clock_mobs.dm +++ b/code/modules/antagonists/clockcult/clock_mobs.dm @@ -57,7 +57,7 @@ msg += "[addendum]\n" msg += "*---------*
    " - to_chat(user, msg) + return list(msg) /mob/living/simple_animal/hostile/clockwork/proc/examine_info() //Override this on a by-mob basis to have unique examine info return diff --git a/code/modules/antagonists/clockcult/clock_structure.dm b/code/modules/antagonists/clockcult/clock_structure.dm index 300e85e380..13da9c5a42 100644 --- a/code/modules/antagonists/clockcult/clock_structure.dm +++ b/code/modules/antagonists/clockcult/clock_structure.dm @@ -43,10 +43,10 @@ var/can_see_clockwork = is_servant_of_ratvar(user) || isobserver(user) if(can_see_clockwork && clockwork_desc) desc = clockwork_desc - ..() + . = ..() desc = initial(desc) if(unanchored_icon) - to_chat(user, "[src] is [anchored ? "":"not "]secured to the floor.") + . += "[src] is [anchored ? "":"not "]secured to the floor." /obj/structure/destructible/clockwork/examine_status(mob/user) if(is_servant_of_ratvar(user) || isobserver(user)) @@ -155,12 +155,12 @@ var/inactive_icon = null //icon_state while process() isn't being called /obj/structure/destructible/clockwork/powered/examine(mob/user) - ..() + . = ..() if(is_servant_of_ratvar(user) || isobserver(user)) if(!can_access_clockwork_power(src)) - to_chat(user, "It has no access to the power network! Create a sigil of transmission nearby.") + . += "It has no access to the power network! Create a sigil of transmission nearby." else - to_chat(user, "It has access to [DisplayPower(get_clockwork_power())] of power.") + . += "It has access to [DisplayPower(get_clockwork_power())] of power." /obj/structure/destructible/clockwork/powered/Destroy() SSfastprocess.processing -= src diff --git a/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm b/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm index 491f1d24b3..47a37583ba 100644 --- a/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm +++ b/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm @@ -16,16 +16,16 @@ return ..() /obj/structure/destructible/clockwork/trap/examine(mob/user) - ..() + . = ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "It's wired to:") + . += "It's wired to:" if(!wired_to.len) - to_chat(user, "Nothing.") + . += "Nothing." else for(var/V in wired_to) var/obj/O = V var/distance = get_dist(src, O) - to_chat(user, "[O] ([distance == 0 ? "same tile" : "[distance] tiles [dir2text(get_dir(src, O))]"])") + . += "[O] ([distance == 0 ? "same tile" : "[distance] tiles [dir2text(get_dir(src, O))]"])" /obj/structure/destructible/clockwork/trap/wrench_act(mob/living/user, obj/item/I) if(!is_servant_of_ratvar(user)) diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm index f735d6bb29..297856f531 100644 --- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm @@ -223,34 +223,34 @@ /obj/structure/destructible/clockwork/massive/celestial_gateway/examine(mob/user) icon_state = "spatial_gateway" //cheat wildly by pretending to have an icon - ..() + . = ..() icon_state = initial(icon_state) if(is_servant_of_ratvar(user) || isobserver(user)) if(!active) - to_chat(user, "Time until the Ark's activation: [DisplayTimeText(get_arrival_time())]") + . += "Time until the Ark's activation: [DisplayTimeText(get_arrival_time())]" else if(grace_period) - to_chat(user, "Crew grace period time remaining: [DisplayTimeText(get_arrival_time())]") + . += "Crew grace period time remaining: [DisplayTimeText(get_arrival_time())]" else - to_chat(user, "Time until Ratvar's arrival: [DisplayTimeText(get_arrival_time())]") + . += "Time until Ratvar's arrival: [DisplayTimeText(get_arrival_time())]" switch(progress_in_seconds) if(-INFINITY to GATEWAY_REEBE_FOUND) - to_chat(user, "The Ark is feeding power into the bluespace field.") + . += "The Ark is feeding power into the bluespace field." if(GATEWAY_REEBE_FOUND to GATEWAY_RATVAR_COMING) - to_chat(user, "The field is ripping open a copy of itself in Ratvar's prison.") + . += "The field is ripping open a copy of itself in Ratvar's prison." if(GATEWAY_RATVAR_COMING to INFINITY) - to_chat(user, "With the bluespace field established, Ratvar is preparing to come through!") + . += "With the bluespace field established, Ratvar is preparing to come through!" else if(!active) - to_chat(user, "Whatever it is, it doesn't seem to be active.") + . += "Whatever it is, it doesn't seem to be active." else switch(progress_in_seconds) if(-INFINITY to GATEWAY_REEBE_FOUND) - to_chat(user, "You see a swirling bluespace anomaly steadily growing in intensity.") + . += "You see a swirling bluespace anomaly steadily growing in intensity." if(GATEWAY_REEBE_FOUND to GATEWAY_RATVAR_COMING) - to_chat(user, "The anomaly is stable, and you can see flashes of something from it.") + . += "The anomaly is stable, and you can see flashes of something from it." if(GATEWAY_RATVAR_COMING to INFINITY) - to_chat(user, "The anomaly is stable! Something is coming through!") + . += "The anomaly is stable! Something is coming through!" /obj/structure/destructible/clockwork/massive/celestial_gateway/process() if(seconds_until_activation == -1) //we never do anything diff --git a/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm b/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm index cb13fdd616..058bd9d24e 100644 --- a/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm +++ b/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm @@ -21,9 +21,9 @@ toggle(1) /obj/structure/destructible/clockwork/powered/clockwork_obelisk/examine(mob/user) - ..() + . = ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "It requires [DisplayPower(hierophant_cost)] to broadcast over the Hierophant Network, and [DisplayPower(gateway_cost)] to open a Spatial Gateway.") + . += "It requires [DisplayPower(hierophant_cost)] to broadcast over the Hierophant Network, and [DisplayPower(gateway_cost)] to open a Spatial Gateway." /obj/structure/destructible/clockwork/powered/clockwork_obelisk/can_be_unfasten_wrench(mob/user, silent) if(active) diff --git a/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm b/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm index 3a461b7745..7d8b206f41 100644 --- a/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm +++ b/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm @@ -47,16 +47,16 @@ STOP_PROCESSING(SSprocessing, src) /obj/structure/destructible/clockwork/heralds_beacon/examine(mob/user) - ..() + . = ..() if(isobserver(user) || is_servant_of_ratvar(user)) if(!available) if(!GLOB.ratvar_approaches) - to_chat(user, "It can no longer be activated.") + . += "It can no longer be activated." else - to_chat(user, "It has been activated!") + . += "It has been activated!" else - to_chat(user, "There are [time_remaining] second[time_remaining != 1 ? "s" : ""] remaining to vote.") - to_chat(user, "There are [voters.len]/[votes_needed] votes to activate the beacon!") + . += "There are [time_remaining] second[time_remaining != 1 ? "s" : ""] remaining to vote." + . += "There are [voters.len]/[votes_needed] votes to activate the beacon!" /obj/structure/destructible/clockwork/heralds_beacon/attack_hand(mob/living/user) . = ..() diff --git a/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm index df1231442a..9b4ac8085c 100644 --- a/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm +++ b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm @@ -17,9 +17,9 @@ var/mania_cost = 150 /obj/structure/destructible/clockwork/powered/mania_motor/examine(mob/user) - ..() + . = ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "It requires [DisplayPower(mania_cost)] to run.") + . += "It requires [DisplayPower(mania_cost)] to run." /obj/structure/destructible/clockwork/powered/mania_motor/forced_disable(bad_effects) if(active) diff --git a/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm b/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm index 35c1ea7bdd..d0940ebb7a 100644 --- a/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm @@ -25,8 +25,8 @@ return ..() /obj/structure/destructible/clockwork/ocular_warden/examine(mob/user) - ..() - to_chat(user, "[target ? "It's fixated on [target]!" : "Its gaze is wandering aimlessly."]") + . = ..() + . += "[target ? "It's fixated on [target]!" : "Its gaze is wandering aimlessly."]" /obj/structure/destructible/clockwork/ocular_warden/hulk_damage() return 25 diff --git a/code/modules/antagonists/clockcult/clock_structures/stargazer.dm b/code/modules/antagonists/clockcult/clock_structures/stargazer.dm index 57f83c55aa..fbaee79959 100644 --- a/code/modules/antagonists/clockcult/clock_structures/stargazer.dm +++ b/code/modules/antagonists/clockcult/clock_structures/stargazer.dm @@ -25,11 +25,11 @@ . = ..() /obj/structure/destructible/clockwork/stargazer/examine(mob/user) - ..() + . = ..() if(is_servant_of_ratvar(user)) - to_chat(user, "Generates [DisplayPower(STARGAZER_POWER)] per second while viewing starlight within [STARGAZER_RANGE] tiles.") + . += "Generates [DisplayPower(STARGAZER_POWER)] per second while viewing starlight within [STARGAZER_RANGE] tiles." if(star_light_star_bright) - to_chat(user, "[is_servant_of_ratvar(user) ? "It can see starlight!" : "It's shining brilliantly!"]") + . += "[is_servant_of_ratvar(user) ? "It can see starlight!" : "It's shining brilliantly!"]" /obj/structure/destructible/clockwork/stargazer/process() star_light_star_bright = check_starlight() diff --git a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm index ebfb219c9a..2f0db73bfc 100644 --- a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm +++ b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm @@ -113,7 +113,7 @@ "You start tenderly lifting [skewee] off of [src]...") if(!do_after(user, 60, target = skewee)) skewee.visible_message("[skewee] painfully slides back down [src].") - skewee.emote("moan") + skewee.say("Oof, ouch owwie!!", forced = "fail brass skewer removal") return skewee.visible_message("[skewee] comes free of [src] with a squelching pop!", \ "You come free of [src]!") diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index fc4d945d51..beea67e596 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -651,7 +651,7 @@ /obj/item/melee/blood_magic/manipulator/examine(mob/user) . = ..() if(iscultist(user)) - to_chat(user, "The [name] currently has [uses] blood charges left.") + . += "The [name] currently has [uses] blood charges left." /obj/item/melee/blood_magic/manipulator/afterattack(atom/target, mob/living/carbon/human/user, proximity) if(proximity) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 943e76b4ee..5fe941d32f 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -119,10 +119,11 @@ AddComponent(/datum/component/butchering, 50, 80) /obj/item/twohanded/required/cult_bastard/examine(mob/user) + . = ..() if(contents.len) - desc+="
    There are [contents.len] souls trapped within the sword's core." + . += "
    There are [contents.len] souls trapped within the sword's core." else - desc+="
    The sword appears to be quite lifeless." + . += "
    The sword appears to be quite lifeless." /obj/item/twohanded/required/cult_bastard/can_be_pulled(user) return FALSE @@ -557,11 +558,11 @@ var/uses = 4 /obj/item/cult_shift/examine(mob/user) - ..() + . = ..() if(uses) - to_chat(user, "It has [uses] use\s remaining.") + . += "It has [uses] use\s remaining." else - to_chat(user, "It seems drained.") + . += "It seems drained." /obj/item/cult_shift/proc/handle_teleport_grab(turf/T, mob/user) var/mob/living/carbon/C = user diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 0dd6b08c4d..f38f379abe 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -29,10 +29,10 @@ /obj/structure/destructible/cult/examine(mob/user) - ..() - to_chat(user, "\The [src] is [anchored ? "":"not "]secured to the floor.") + . = ..() + . += "\The [src] is [anchored ? "":"not "]secured to the floor." if((iscultist(user) || isobserver(user)) && cooldowntime > world.time) - to_chat(user, "The magic in [src] is too weak, [p_they()] will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") + . += "The magic in [src] is too weak, [p_they()] will be ready to use again in [DisplayTimeText(cooldowntime - world.time)]." /obj/structure/destructible/cult/examine_status(mob/user) if(iscultist(user) || isobserver(user)) diff --git a/code/modules/antagonists/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm index b9e4da8677..ff12a835ef 100644 --- a/code/modules/antagonists/cult/ritual.dm +++ b/code/modules/antagonists/cult/ritual.dm @@ -15,12 +15,12 @@ This file contains the cult dagger and rune list code GLOB.rune_types[initial(R.cultist_name)] = R //Uses the cultist name for displaying purposes /obj/item/melee/cultblade/dagger/examine(mob/user) - ..() + . = ..() if(iscultist(user) || isobserver(user)) - to_chat(user, "The scriptures of the Geometer. Allows the scribing of runes and access to the knowledge archives of the cult of Nar'Sie.") - to_chat(user, "Striking a cult structure will unanchor or reanchor it.") - to_chat(user, "Striking another cultist with it will purge holy water from them.") - to_chat(user, "Striking a noncultist, however, will tear their flesh.") + . += "The scriptures of the Geometer. Allows the scribing of runes and access to the knowledge archives of the cult of Nar'Sie." + . += "Striking a cult structure will unanchor or reanchor it." + . += "Striking another cultist with it will purge holy water from them." + . += "Striking a noncultist, however, will tear their flesh." /obj/item/melee/cultblade/dagger/attack(mob/living/M, mob/living/user) if(iscultist(M)) diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 1cbf267277..da002e568c 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -47,13 +47,13 @@ Runes can either be invoked by one's self or with many different cultists. Each add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "cult_runes", I) /obj/effect/rune/examine(mob/user) - ..() + . = ..() if(iscultist(user) || user.stat == DEAD) //If they're a cultist or a ghost, tell them the effects - to_chat(user, "Name: [cultist_name]") - to_chat(user, "Effects: [capitalize(cultist_desc)]") - to_chat(user, "Required Acolytes: [req_cultists_text ? "[req_cultists_text]":"[req_cultists]"]") + . += "Name: [cultist_name]" + . += "Effects: [capitalize(cultist_desc)]" + . += "Required Acolytes: [req_cultists_text ? "[req_cultists_text]":"[req_cultists]"]" if(req_keyword && keyword) - to_chat(user, "Keyword: [keyword]") + . += "Keyword: [keyword]" /obj/effect/rune/attackby(obj/I, mob/user, params) if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user)) @@ -525,10 +525,10 @@ structure_check() searches for nearby cultist structures required for the invoca var/static/revives_used = -SOULS_TO_REVIVE // Cultists get one "free" revive /obj/effect/rune/raise_dead/examine(mob/user) - ..() + . = ..() if(iscultist(user) || user.stat == DEAD) var/revive_number = LAZYLEN(GLOB.sacrificed) - revives_used - to_chat(user, "Revives Remaining: [revive_number]") + . += "Revives Remaining: [revive_number]" /obj/effect/rune/raise_dead/invoke(var/list/invokers) var/turf/T = get_turf(src) @@ -622,11 +622,11 @@ structure_check() searches for nearby cultist structures required for the invoca GLOB.wall_runes += src /obj/effect/rune/wall/examine(mob/user) - ..() + . = ..() if(density && iscultist(user)) var/datum/timedevent/TMR = active_timers[1] if(TMR) - to_chat(user, "The air above this rune has hardened into a barrier that will last [DisplayTimeText(TMR.timeToRun - world.time)].") + . += "The air above this rune has hardened into a barrier that will last [DisplayTimeText(TMR.timeToRun - world.time)]." /obj/effect/rune/wall/Destroy() GLOB.wall_runes -= src diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm index 06200073bb..fc50a0ecf5 100644 --- a/code/modules/antagonists/devil/true_devil/_true_devil.dm +++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm @@ -64,26 +64,25 @@ /mob/living/carbon/true_devil/examine(mob/user) - var/msg = "*---------*\nThis is [icon2html(src, user)] [src]!\n" + . = list("*---------*\nThis is [icon2html(src, user)] [src]!") //Left hand items for(var/obj/item/I in held_items) if(!(I.item_flags & ABSTRACT)) - msg += "It is holding [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" + . += "It is holding [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))]." //Braindead if(!client && stat != DEAD) - msg += "The devil seems to be in deep contemplation.\n" + . += "The devil seems to be in deep contemplation." //Damaged if(stat == DEAD) - msg += "The hellfire seems to have been extinguished, for now at least.\n" + . += "The hellfire seems to have been extinguished, for now at least." else if(health < (maxHealth/10)) - msg += "You can see hellfire inside its gaping wounds.\n" + . += "You can see hellfire inside its gaping wounds." else if(health < (maxHealth/2)) - msg += "You can see hellfire inside its wounds.\n" - msg += "*---------*" - to_chat(user, msg) + . += "You can see hellfire inside its wounds." + . += "*---------*" /mob/living/carbon/true_devil/IsAdvancedToolUser() return 1 diff --git a/code/modules/antagonists/disease/disease_mob.dm b/code/modules/antagonists/disease/disease_mob.dm index 836b71b89a..6ac3f93764 100644 --- a/code/modules/antagonists/disease/disease_mob.dm +++ b/code/modules/antagonists/disease/disease_mob.dm @@ -97,14 +97,14 @@ the new instance inside the host to be updated to the template's stats. /mob/camera/disease/examine(mob/user) - ..() + . = ..() if(isobserver(user)) - to_chat(user, "[src] has [points]/[total_points] adaptation points.") - to_chat(user, "[src] has the following unlocked:") + . += "[src] has [points]/[total_points] adaptation points." + . += "[src] has the following unlocked:" for(var/A in purchased_abilities) var/datum/disease_ability/B = A if(istype(B)) - to_chat(user, "[B.name]") + . += "[B.name]" /mob/camera/disease/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) return diff --git a/code/modules/antagonists/morph/morph.dm b/code/modules/antagonists/morph/morph.dm index 12f8d22897..ad2eb4792a 100644 --- a/code/modules/antagonists/morph/morph.dm +++ b/code/modules/antagonists/morph/morph.dm @@ -52,12 +52,11 @@ /mob/living/simple_animal/hostile/morph/examine(mob/user) if(morphed) - form.examine(user) // Refactor examine to return desc so it's static? Not sure if worth it + . = form.examine(user) if(get_dist(user,src)<=3) - to_chat(user, "It doesn't look quite right...") + . += "It doesn't look quite right..." else - ..() - return + . = ..() /mob/living/simple_animal/hostile/morph/med_hud_set_health() if(morphed && !isliving(form)) diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index d0e6dafbc1..8021ee5f08 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -55,9 +55,9 @@ /obj/machinery/nuclearbomb/examine(mob/user) . = ..() if(exploding) - to_chat(user, "It is in the process of exploding. Perhaps reviewing your affairs is in order.") + . += "It is in the process of exploding. Perhaps reviewing your affairs is in order." if(timing) - to_chat(user, "There are [get_time_left()] seconds until detonation.") + . += "There are [get_time_left()] seconds until detonation." /obj/machinery/nuclearbomb/selfdestruct name = "station self-destruct terminal" @@ -472,9 +472,9 @@ /obj/machinery/nuclearbomb/beer/examine(mob/user) . = ..() if(keg.reagents.total_volume) - to_chat(user, "It has [keg.reagents.total_volume] unit\s left.") + . += "It has [keg.reagents.total_volume] unit\s left." else - to_chat(user, "It's empty.") + . += "It's empty." /obj/machinery/nuclearbomb/beer/attackby(obj/item/W, mob/user, params) if(W.is_refillable()) @@ -615,7 +615,7 @@ This is here to make the tiles around the station mininuke change when it's arme var/captain = user.mind && user.mind.assigned_role == "Captain" var/nukie = user.mind && user.mind.has_antag_datum(/datum/antagonist/nukeop) if(ghost || captain || nukie) - to_chat(user, "The serial numbers on [src] are incorrect.") + . += "The serial numbers on [src] are incorrect." /obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/claymore/highlander) && !fake) diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm index 538feba008..db9ff4e609 100644 --- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm +++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm @@ -2,7 +2,7 @@ var/mode = TRACK_NUKE_DISK /obj/item/pinpointer/nuke/examine(mob/user) - ..() + . = ..() var/msg = "Its tracking indicator reads " switch(mode) if(TRACK_NUKE_DISK) @@ -13,10 +13,10 @@ msg += "\"vasvygengbefuvc\"." else msg = "Its tracking indicator is blank." - to_chat(user, msg) + . += msg for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines) if(bomb.timing) - to_chat(user, "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()].") + . += "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()]." /obj/item/pinpointer/nuke/process() ..() diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm index b43024fb31..d7d88a9b6a 100644 --- a/code/modules/antagonists/revenant/revenant.dm +++ b/code/modules/antagonists/revenant/revenant.dm @@ -368,11 +368,11 @@ scatter() /obj/item/ectoplasm/revenant/examine(mob/user) - ..() + . = ..() if(inert) - to_chat(user, "It seems inert.") + . += "It seems inert." else if(reforming) - to_chat(user, "It is shifting and distorted. It would be wise to destroy this.") + . += "It is shifting and distorted. It would be wise to destroy this." /obj/item/ectoplasm/revenant/proc/reform() if(QDELETED(src) || QDELETED(revenant) || inert) diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 26eea3f59e..8c0f61bb1d 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -49,6 +49,12 @@ A.malf_picker.remove_malf_verbs(A) qdel(A.malf_picker) +/datum/antagonist/traitor/proc/handle_hearing(datum/source, list/hearing_args) + var/message = hearing_args[HEARING_MESSAGE] + message = GLOB.syndicate_code_phrase_regex.Replace(message, "$1") + message = GLOB.syndicate_code_response_regex.Replace(message, "$1") + hearing_args[HEARING_MESSAGE] = message + SSticker.mode.traitors -= owner if(!silent && owner.current) to_chat(owner.current," You are no longer the [special_role]! ") diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 6f4c3fca10..962c2b2da4 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -35,15 +35,15 @@ to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly.") /obj/item/soulstone/examine(mob/user) - ..() + . = ..() if(usability || iscultist(user) || iswizard(user) || isobserver(user)) if (old_shard) - to_chat(user, "A soulstone, used to capture a soul, either from dead humans or from freed shades.") + . += "A soulstone, used to capture a soul, either from dead humans or from freed shades." else - to_chat(user, "A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades.") - to_chat(user, "The captured soul can be placed into a construct shell to produce a construct, or released from the stone as a shade.") + . += "A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades." + . += "The captured soul can be placed into a construct shell to produce a construct, or released from the stone as a shade." if(spent) - to_chat(user, "This shard is spent; it is now just a creepy rock.") + . += "This shard is spent; it is now just a creepy rock." /obj/item/soulstone/Destroy() //Stops the shade from being qdel'd immediately and their ghost being sent back to the arrival shuttle. for(var/mob/living/simple_animal/shade/A in src) @@ -102,13 +102,13 @@ desc = "A wicked machine used by those skilled in magical arts. It is inactive." /obj/structure/constructshell/examine(mob/user) - ..() + . = ..() if(iscultist(user) || iswizard(user) || user.stat == DEAD) - to_chat(user, "A construct shell, used to house bound souls from a soulstone.") - to_chat(user, "Placing a soulstone with a soul into this shell allows you to produce your choice of the following:") - to_chat(user, "An Artificer, which can produce more shells and soulstones, as well as fortifications.") - to_chat(user, "A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.") - to_chat(user, "A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow.") + . += "A construct shell, used to house bound souls from a soulstone." + . += "Placing a soulstone with a soul into this shell allows you to produce your choice of the following:" + . += "An Artificer, which can produce more shells and soulstones, as well as fortifications." + . += "A Wraith, which does high damage and can jaunt through walls, though it is quite fragile." + . += "A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow." /obj/structure/constructshell/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/soulstone)) diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index a5917f4b96..c5308cf0c0 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -602,11 +602,11 @@ var/list/categories = list() /obj/item/spellbook/examine(mob/user) - ..() + . = ..() if(owner) - to_chat(user, "There is a small signature on the front cover: \"[owner]\".") + . += "There is a small signature on the front cover: \"[owner]\"." else - to_chat(user, "It appears to have no author.") + . += "It appears to have no author." /obj/item/spellbook/Initialize() . = ..() diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 1e7a9b7c15..d9a61ee2f3 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -112,8 +112,8 @@ return TRUE /obj/item/assembly/examine(mob/user) - ..() - to_chat(user, "\The [src] [secured? "is secured and ready to be used!" : "can be attached to other things."]") + . = ..() + . += "\The [src] [secured? "is secured and ready to be used!" : "can be attached to other things."]" /obj/item/assembly/attack_self(mob/user) diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 04b4e3ed3c..1c9c1a0203 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -8,9 +8,9 @@ var/cooldown = FALSE //Door cooldowns /obj/item/assembly/control/examine(mob/user) - ..() + . = ..() if(id) - to_chat(user, "Its channel ID is '[id]'.") + . += "Its channel ID is '[id]'." /obj/item/assembly/control/activate() cooldown = TRUE diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 782d729ce4..3fca066f86 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -11,8 +11,8 @@ var/alarm_health = HEALTH_THRESHOLD_CRIT /obj/item/assembly/health/examine(mob/user) - ..() - to_chat(user, "Use a multitool to swap between \"detect death\" mode and \"detect critical state\" mode.") + . = ..() + . += "Use a multitool to swap between \"detect death\" mode and \"detect critical state\" mode." /obj/item/assembly/health/activate() if(!..()) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index caa8418fc9..707ebcbb1a 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -38,8 +38,8 @@ . = ..() /obj/item/assembly/infra/examine(mob/user) - ..() - to_chat(user, "The infrared trigger is [on?"on":"off"].") + . = ..() + . += "The infrared trigger is [on?"on":"off"]." /obj/item/assembly/infra/activate() if(!..()) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index a2a9fb0105..950c0dd109 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -9,8 +9,8 @@ /obj/item/assembly/mousetrap/examine(mob/user) - ..() - to_chat(user, "The pressure plate is [armed?"primed":"safe"].") + . = ..() + . += "The pressure plate is [armed?"primed":"safe"]." /obj/item/assembly/mousetrap/activate() if(..()) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 97b4543a05..97359f07fc 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -21,8 +21,8 @@ . = ..() /obj/item/assembly/prox_sensor/examine(mob/user) - ..() - to_chat(user, "The proximity sensor is [timing ? "arming" : (scanning ? "armed" : "disarmed")].") + . = ..() + . += "The proximity sensor is [timing ? "arming" : (scanning ? "armed" : "disarmed")]." /obj/item/assembly/prox_sensor/activate() if(!..()) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 8ba703d7fa..7377ab318e 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -169,8 +169,8 @@ Code: return TRUE /obj/item/assembly/signaler/receiver/examine(mob/user) - ..() - to_chat(user, "The radio receiver is [on?"on":"off"].") + . = ..() + . += "The radio receiver is [on?"on":"off"]." /obj/item/assembly/signaler/receiver/receive_signal(datum/signal/signal) if(!on) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 993bf134e6..660ff39c6c 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -31,8 +31,8 @@ . = ..() /obj/item/assembly/timer/examine(mob/user) - ..() - to_chat(user, "The timer is [timing ? "counting down from [time]":"set for [time] seconds"].") + . = ..() + . += "The timer is [timing ? "counting down from [time]":"set for [time] seconds"]." /obj/item/assembly/timer/activate() if(!..()) diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 32148abc21..7ad5f827e1 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -22,8 +22,8 @@ "voice sensor") /obj/item/assembly/voice/examine(mob/user) - ..() - to_chat(user, "Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.") + . = ..() + . += "Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode." /obj/item/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) . = ..() diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 6ca25c0d80..58ab9c6183 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -222,11 +222,11 @@ . = ..() switch(buildstage) if(0) - to_chat(user, "It is missing air alarm electronics.") + . += "It is missing air alarm electronics." if(1) - to_chat(user, "It is missing wiring.") + . += "It is missing wiring." if(2) - to_chat(user, "Alt-click to [locked ? "unlock" : "lock"] the interface.") + . += "Alt-click to [locked ? "unlock" : "lock"] the interface." /obj/machinery/airalarm/ui_status(mob/user) if(user.has_unlimited_silicon_privilege && aidisabled) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 702c31b55c..2e4cccf5a3 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -41,11 +41,11 @@ Pipelines + Other Objects -> Pipe network var/on = FALSE /obj/machinery/atmospherics/examine(mob/user) - ..() + . = ..() if(is_type_in_list(src, GLOB.ventcrawl_machinery) && isliving(user)) var/mob/living/L = user if(L.ventcrawler) - to_chat(L, "Alt-click to crawl through it.") + . += "Alt-click to crawl through it." /obj/machinery/atmospherics/New(loc, process = TRUE, setdir) if(!isnull(setdir)) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 1de5b93332..b95b15efbd 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -30,8 +30,8 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/components/binary/pump/examine(mob/user) . = ..() - to_chat(user,"You can hold Ctrl and click on it to toggle it on and off.") - to_chat(user,"You can hold Alt and click on it to maximize its pressure.") + . += "You can hold Ctrl and click on it to toggle it on and off." + . += "You can hold Alt and click on it to maximize its pressure." /obj/machinery/atmospherics/components/binary/pump/CtrlClick(mob/user) var/area/A = get_area(src) 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 3a2321c395..e9fa52fd23 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -30,8 +30,8 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/components/binary/volume_pump/examine(mob/user) . = ..() - to_chat(user,"You can hold Ctrl and click on it to toggle it on and off.") - to_chat(user,"You can hold Alt and click on it to maximize its pressure.") + . += "You can hold Ctrl and click on it to toggle it on and off." + . += "You can hold Alt and click on it to maximize its pressure." /obj/machinery/atmospherics/components/binary/volume_pump/CtrlClick(mob/user) var/area/A = get_area(src) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index ac05c94a78..6b0465d589 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -14,8 +14,8 @@ /obj/machinery/atmospherics/components/trinary/filter/examine(mob/user) . = ..() - to_chat(user,"You can hold Ctrl and click on it to toggle it on and off.") - to_chat(user,"You can hold Alt and click on it to maximize its pressure.") + . += "You can hold Ctrl and click on it to toggle it on and off." + . += "You can hold Alt and click on it to maximize its pressure." /obj/machinery/atmospherics/components/trinary/filter/CtrlClick(mob/user) var/area/A = get_area(src) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index fc866c3d6a..9e4deaf3d8 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -16,8 +16,8 @@ //node 3 is the outlet, nodes 1 & 2 are intakes /obj/machinery/atmospherics/components/trinary/mixer/examine(mob/user) . = ..() - to_chat(user,"You can hold Ctrl and click on it to toggle it on and off.") - to_chat(user,"You can hold Alt and click on it to maximize its pressure.") + . += "You can hold Ctrl and click on it to toggle it on and off." + . += "You can hold Alt and click on it to maximize its pressure." /obj/machinery/atmospherics/components/trinary/mixer/CtrlClick(mob/user) var/area/A = get_area(src) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index f52453e2c8..ca8b21593f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -262,14 +262,14 @@ open_machine() /obj/machinery/atmospherics/components/unary/cryo_cell/examine(mob/user) - ..() + . = ..() if(occupant) if(on) - to_chat(user, "Someone's inside [src]!") + . += "Someone's inside [src]!" else - to_chat(user, "You can barely make out a form floating in [src].") + . += "You can barely make out a form floating in [src]." else - to_chat(user, "[src] seems empty.") + . += "[src] seems empty." /obj/machinery/atmospherics/components/unary/cryo_cell/MouseDrop_T(mob/target, mob/user) if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) 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 5b37242c78..75f2a60f80 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -424,9 +424,9 @@ return FALSE /obj/machinery/atmospherics/components/unary/vent_pump/examine(mob/user) - ..() + . = ..() if(welded) - to_chat(user, "It seems welded shut.") + . += "It seems welded shut." /obj/machinery/atmospherics/components/unary/vent_pump/power_change() ..() 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 7f40630a86..8585471ea4 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -118,7 +118,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/proc/broadcast_status() if(!radio_connection) return FALSE - + var/list/f_types = list() for(var/path in GLOB.meta_gas_ids) f_types += list(list("gas_id" = GLOB.meta_gas_ids[path], "gas_name" = GLOB.meta_gas_names[path], "enabled" = (path in filter_types))) @@ -205,7 +205,7 @@ air_contents.merge(filtered_out) tile.assume_air(removed) tile.air_update_turf() - + else //Just siphoning all air var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume) @@ -303,11 +303,11 @@ if(. && on && is_operational()) to_chat(user, "You cannot unwrench [src], turn it off first!") return FALSE - + /obj/machinery/atmospherics/components/unary/vent_scrubber/examine(mob/user) - ..() + . = ..() if(welded) - to_chat(user, "It seems welded shut.") + . += "It seems welded shut." /obj/machinery/atmospherics/components/unary/vent_scrubber/can_crawl_through() return !welded diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index b10ff85ba0..d0c78d21b3 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -111,8 +111,8 @@ . = "The connect error light is blinking." /obj/machinery/meter/examine(mob/user) - ..() - to_chat(user, status()) + . = ..() + . += status() /obj/machinery/meter/wrench_act(mob/user, obj/item/I) to_chat(user, "You begin to unfasten \the [src]...") diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm index adb17b4e94..c90d388a1d 100644 --- a/code/modules/atmospherics/machinery/other/miner.dm +++ b/code/modules/atmospherics/machinery/other/miner.dm @@ -33,9 +33,9 @@ set_active(active) //Force overlay update. /obj/machinery/atmospherics/miner/examine(mob/user) - ..() + . = ..() if(broken) - to_chat(user, "Its debug output is printing \"[broken_message]\".") + . += "Its debug output is printing \"[broken_message]\"." /obj/machinery/atmospherics/miner/proc/check_operation() if(!active) diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index b575639246..81540b0698 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -88,10 +88,10 @@ replace_tank(user, TRUE) /obj/machinery/portable_atmospherics/examine(mob/user) - ..() + . = ..() if(holding) - to_chat(user, "\The [src] contains [holding]. Alt-click [src] to remove it.") - to_chat(user, "Click [src] with another gas tank to hot swap [holding].") + . += "\The [src] contains [holding]. Alt-click [src] to remove it." + . += "Click [src] with another gas tank to hot swap [holding]." /obj/machinery/portable_atmospherics/proc/replace_tank(mob/living/user, close_valve, obj/item/tank/new_tank) if(holding) diff --git a/code/modules/cargo/export_scanner.dm b/code/modules/cargo/export_scanner.dm index 42b6016552..9c523c194f 100644 --- a/code/modules/cargo/export_scanner.dm +++ b/code/modules/cargo/export_scanner.dm @@ -12,9 +12,9 @@ var/obj/machinery/computer/cargo/cargo_console = null /obj/item/export_scanner/examine(user) - ..() + . = ..() if(!cargo_console) - to_chat(user, "[src] is not currently linked to a cargo console.") + . += "[src] is not currently linked to a cargo console." /obj/item/export_scanner/afterattack(obj/O, mob/user, proximity) . = ..() diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm index 3c82722f69..915d671fe8 100644 --- a/code/modules/cargo/supplypod_beacon.dm +++ b/code/modules/cargo/supplypod_beacon.dm @@ -45,11 +45,11 @@ update_status() /obj/item/supplypod_beacon/examine(user) - ..() + . = ..() if(!express_console) - to_chat(user, "[src] is not currently linked to a Express Supply console.") + . += "[src] is not currently linked to a Express Supply console." else - to_chat(user, "Alt-click to unlink it from the Express Supply console.") + . += "Alt-click to unlink it from the Express Supply console." /obj/item/supplypod_beacon/Destroy() if(express_console) @@ -61,7 +61,7 @@ express_console.beacon = null express_console = null update_status(SP_UNLINK) - update_status(SP_UNREADY) + update_status(SP_UNREADY) /obj/item/supplypod_beacon/proc/link_console(obj/machinery/computer/cargo/express/C, mob/living/user) if (C.beacon)//if new console has a beacon, then... @@ -91,5 +91,5 @@ if(new_beacon_name) name += " ([tag])" return - else + else return ..() diff --git a/code/modules/client/client_colour.dm b/code/modules/client/client_colour.dm index f1477fb4d2..22b15ea868 100644 --- a/code/modules/client/client_colour.dm +++ b/code/modules/client/client_colour.dm @@ -111,3 +111,6 @@ /datum/client_colour/monochrome colour = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) priority = INFINITY //we can't see colors anyway! + +/datum/client_colour/monochrome/trance + priority = 1 \ No newline at end of file diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm index 90c692c60e..2e643cc05d 100644 --- a/code/modules/client/verbs/suicide.dm +++ b/code/modules/client/verbs/suicide.dm @@ -49,7 +49,7 @@ if(!(damagetype & (BRUTELOSS | FIRELOSS | TOXLOSS | OXYLOSS) )) adjustOxyLoss(max(200 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) - death(FALSE, penalize = TRUE) + death(FALSE) return diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 7e7f8b4285..d142699a21 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -120,9 +120,9 @@ user.vv_edit_var(variable, user_vars_to_edit[variable]) /obj/item/clothing/examine(mob/user) - ..() + . = ..() if(damaged_clothes) - to_chat(user, "It looks damaged!") + . += "It looks damaged!" var/datum/component/storage/pockets = GetComponent(/datum/component/storage) if(pockets) var/list/how_cool_are_your_threads = list("") @@ -137,7 +137,7 @@ if(pockets.silent) how_cool_are_your_threads += "Adding or removing items from [src] makes no noise.\n" how_cool_are_your_threads += "" - to_chat(user, how_cool_are_your_threads.Join()) + . += how_cool_are_your_threads.Join() /obj/item/clothing/obj_break(damage_flag) if(!damaged_clothes) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index f140fb3074..608f71cf11 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -23,9 +23,9 @@ return BRUTELOSS /obj/item/clothing/glasses/examine(mob/user) - ..() + . = ..() if(glass_colour_type && ishuman(user)) - to_chat(user, "Alt-click to toggle its colors.") + . += "Alt-click to toggle its colors." /obj/item/clothing/glasses/visor_toggling() ..() @@ -362,7 +362,7 @@ desc = replacetext(desc, "person", "man") else if(user.gender == FEMALE) desc = replacetext(desc, "person", "woman") - ..() + . = ..() desc = desk /obj/item/clothing/glasses/thermal/eyepatch diff --git a/code/modules/clothing/glasses/phantomthief.dm b/code/modules/clothing/glasses/phantomthief.dm index 353b0afb14..f5a15f7900 100644 --- a/code/modules/clothing/glasses/phantomthief.dm +++ b/code/modules/clothing/glasses/phantomthief.dm @@ -19,9 +19,9 @@ . = ..() if(user.get_item_by_slot(SLOT_GLASSES) == src) if(world.time >= nextadrenalinepop) - to_chat(user, "The built-in adrenaline injector is ready for use.") + . += "The built-in adrenaline injector is ready for use." else - to_chat(user, "[DisplayTimeText(nextadrenalinepop - world.time)] left before the adrenaline injector can be used again.") + . += "[DisplayTimeText(nextadrenalinepop - world.time)] left before the adrenaline injector can be used again." /obj/item/clothing/glasses/phantomthief/syndicate/proc/injectadrenaline(mob/user, combatmodestate) if(istype(user) && combatmodestate && world.time >= nextadrenalinepop) diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 298510564c..8ff6fe8bd1 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -51,6 +51,11 @@ dog_fashion = null +/obj/item/clothing/head/caphat/beret/white + name = "captain's white beret" + desc = "A white beret fit for a leader." + icon_state = "beret_captain_white" + //Head of Personnel /obj/item/clothing/head/hopcap name = "head of personnel's cap" @@ -67,6 +72,11 @@ dog_fashion = null +/obj/item/clothing/head/hopcap/beret/white + name = "head of personnel's white beret" + desc = "The symbol of true bureaucratic micromanagement, although in a fancy form." + icon_state = "beret_white_hop" + //Chaplain /obj/item/clothing/head/nun_hood name = "nun hood" @@ -90,8 +100,8 @@ new /obj/item/reagent_containers/food/drinks/flask/det(src) /obj/item/clothing/head/fedora/det_hat/examine(mob/user) - ..() - to_chat(user, "Alt-click to take a candy corn.") + . = ..() + . += "Alt-click to take a candy corn." /obj/item/clothing/head/fedora/det_hat/AltClick(mob/user) if(user.canUseTopic(src, BE_CLOSE, ismonkey(user))) @@ -119,6 +129,16 @@ desc = "A black beret, perfect for war veterans and dark, brooding, anti-hero mimes." icon_state = "beretblack" +/obj/item/clothing/head/beret/purple + name = "purple beret" + desc = "A purple beret." + icon_state = "beret_purple" + +/obj/item/clothing/head/beret/blue + name = "blue beret" + desc = "A blue beret" + icon_state = "beret_blue" + /obj/item/clothing/head/beret/highlander desc = "That was white fabric. Was." dog_fashion = null //THIS IS FOR SLAUGHTER, NOT PUPPIES @@ -146,6 +166,11 @@ desc = "A robust beret for the Head of Security, for looking stylish while not sacrificing protection." icon_state = "hosberetblack" +/obj/item/clothing/head/HoS/beret/officer + name = "head of security officer beret" + desc = "A robust beret for the Head of Security, for looking stylish while not sacrificing protection." + icon_state = "beret_centcom_officer" + /obj/item/clothing/head/HoS/beret/syndicate name = "syndicate beret" desc = "A black beret with thick armor padding inside. Stylish and robust." @@ -242,8 +267,11 @@ name = "warden's beret" desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class." icon_state = "wardenberet" - armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - strip_delay = 60 + +/obj/item/clothing/head/beret/sec/corporatewarden + name = "warden's corporate beret" + desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class." + icon_state = "beret_corporate_warden" /obj/item/clothing/head/beret/sec/navyofficer desc = "A special beret with the security insignia emblazoned on it. For officers with class." @@ -261,18 +289,71 @@ desc = "A fancy beret with a green cross, signifying your status in the station's medbay." icon_state = "cmoberet" +/obj/item/clothing/head/beret/cmo/blue + name = "chief medical officer's blue beret" + desc = "A fancy beret with a blue and white cross, try not to be chief malpractice officer in it." + icon_state = "beret_blue_cmo" + +//Medical +/obj/item/clothing/head/beret/med + name = "medical officer's beret" + desc = "A fancy beret with a blue cross, smells sterile" + icon_state = "beret_med" + +/obj/item/clothing/head/beret/chem + name = "chemist's beret" + desc = "A fancy beret with a orange beaker, you're not sure if you should smell it" + icon_state = "beret_chem" + +/obj/item/clothing/head/beret/viro + name = "virologist's beret" + desc = "A fancy beret with a green gross, hopefully it's virus free!" + icon_state = "beret_viro" + //Research Director /obj/item/clothing/head/beret/rd name = "research director's beret" desc = "A beret worn only by highly intelligent people." icon_state = "rdberet" + + +//Scientist +/obj/item/clothing/head/beret/sci + name = "scientist's beret" + desc = "A Scientist's beret, looks like it's covered in slime." + icon_state = "beret_sci" + +//Roboticist +/obj/item/clothing/head/beret/robo + name = "roboticist's beret" + desc = "A Roboticist's beret, almost more oil than hat." + icon_state = "beret_robot" + + //Chief Engineer /obj/item/clothing/head/beret/ce name = "chief engineer's beret" desc = "A beret that will surely make you look way cooler than a hard hat, although lack of protection is the price." icon_state = "ceberet" +/obj/item/clothing/head/beret/ce/white + name = "chief engineer's white beret" + desc = "A beret that will surely make you look way cooler than a hard hat, although lack of protection is the price." + icon_state = "beret_ce_white" + +//Atmos +/obj/item/clothing/head/beret/atmos + name = "atmospheric technician's beret" + desc = "An Atmospheric Technician's beret. Smells like plasma fire." + icon_state = "beret_atmos" + +//Engineer +/obj/item/clothing/head/beret/eng + name = "engineer's beret" + desc = "An Engineer's beret, try not to lose it to space wind." + icon_state = "beret_engineering" + //Quartermaster /obj/item/clothing/head/beret/qm name = "quartermaster's beret" diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index b14b0575f9..8754c89511 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -41,8 +41,8 @@ usr.update_inv_head() //so our mob-overlays update /obj/item/clothing/head/soft/examine(mob/user) - ..() - to_chat(user, "Alt-click the cap to flip it [flipped ? "forwards" : "backwards"].") + . = ..() + . += "Alt-click the cap to flip it [flipped ? "forwards" : "backwards"]." /obj/item/clothing/head/soft/red name = "red cap" diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 947aa048c4..7d0c4a455e 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -30,8 +30,8 @@ adjustmask(user) /obj/item/clothing/mask/breath/examine(mob/user) - ..() - to_chat(user, "Alt-click [src] to adjust it.") + . = ..() + . += "Alt-click [src] to adjust it." /obj/item/clothing/mask/breath/medical desc = "A close-fitting sterile mask that can be connected to an air supply." diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 91d8d51801..a8406e3b12 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -66,7 +66,7 @@ if(adjusted == NORMAL_STYLE) . += mutable_appearance('icons/effects/blood.dmi', "shoeblood", color = blood_DNA_to_color()) else - . += mutable_appearance('modular_citadel/icons/mob/digishoes.dmi', "shoeblood", color = blood_DNA_to_color()) + . += mutable_appearance('icons/mob/feet_digi.dmi', "shoeblood", color = blood_DNA_to_color()) /obj/item/clothing/shoes/equipped(mob/user, slot) . = ..() diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm index d13e655d43..c4d06ea14c 100644 --- a/code/modules/clothing/shoes/bananashoes.dm +++ b/code/modules/clothing/shoes/bananashoes.dm @@ -38,8 +38,8 @@ to_chat(user, "You cannot retrieve any bananium from the prototype shoes.") /obj/item/clothing/shoes/clown_shoes/banana_shoes/examine(mob/user) - ..() - to_chat(user, "The shoes are [on ? "enabled" : "disabled"].") + . = ..() + . += "The shoes are [on ? "enabled" : "disabled"]." /obj/item/clothing/shoes/clown_shoes/banana_shoes/ui_action_click(mob/user) var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 0f5b381326..70dde1e217 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -40,8 +40,8 @@ return clothing_flags & NOSLIP /obj/item/clothing/shoes/magboots/examine(mob/user) - ..() - to_chat(user, "Its mag-pulse traction system appears to be [magpulse ? "enabled" : "disabled"].") + . = ..() + . += "Its mag-pulse traction system appears to be [magpulse ? "enabled" : "disabled"]." /obj/item/clothing/shoes/magboots/advance diff --git a/code/modules/clothing/spacesuits/flightsuit.dm b/code/modules/clothing/spacesuits/flightsuit.dm index 7ead462b1e..04aacfc3f5 100644 --- a/code/modules/clothing/spacesuits/flightsuit.dm +++ b/code/modules/clothing/spacesuits/flightsuit.dm @@ -799,10 +799,10 @@ to_chat(targ, "[icon2html(src, targ)]|[message]") /obj/item/clothing/suit/space/hardsuit/flightsuit/examine(mob/user) - ..() - to_chat(user, "SUIT: [locked ? "LOCKED" : "UNLOCKED"]") - to_chat(user, "FLIGHTPACK: [deployedpack ? "ENGAGED" : "DISENGAGED"] FLIGHTSHOES : [deployedshoes ? "ENGAGED" : "DISENGAGED"] HELMET : [suittoggled ? "ENGAGED" : "DISENGAGED"]") - to_chat(user, "Its maintainence panel is [maint_panel ? "OPEN" : "CLOSED"]") + . = ..() + . += "SUIT: [locked ? "LOCKED" : "UNLOCKED"]" + . += "FLIGHTPACK: [deployedpack ? "ENGAGED" : "DISENGAGED"] FLIGHTSHOES : [deployedshoes ? "ENGAGED" : "DISENGAGED"] HELMET : [suittoggled ? "ENGAGED" : "DISENGAGED"]" + . += "Its maintainence panel is [maint_panel ? "OPEN" : "CLOSED"]" /obj/item/clothing/suit/space/hardsuit/flightsuit/Destroy() dropped() diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index fa6b01415e..e7032ead13 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -958,14 +958,7 @@ /obj/item/clothing/suit/space/hardsuit/lavaknight/worn_overlays(isinhands = FALSE, icon_file) . = ..() if(!isinhands) - var/mutable_appearance/energy_overlay - if(taurmode == SNEK_TAURIC) - energy_overlay = mutable_appearance('modular_citadel/icons/mob/taur_naga.dmi', "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER) - else if(taurmode == PAW_TAURIC) - energy_overlay = mutable_appearance('modular_citadel/icons/mob/taur_canine.dmi', "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER) - else - energy_overlay = mutable_appearance(icon_file, "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER) - + var/mutable_appearance/energy_overlay = mutable_appearance(icon_file, "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER) energy_overlay.plane = ABOVE_LIGHTING_LAYER energy_overlay.color = energy_color . += energy_overlay @@ -995,5 +988,5 @@ update_light() /obj/item/clothing/suit/space/hardsuit/lavaknight/examine(mob/user) - ..() - to_chat(user, "Alt-click to recolor it.") + . = ..() + . += "Alt-click to recolor it." diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 0b07aafa5d..7c829e7570 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -15,8 +15,8 @@ mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/suit/space/eva/plasmaman/examine(mob/user) - ..() - to_chat(user, "There [extinguishes_left == 1 ? "is" : "are"] [extinguishes_left] extinguisher charge\s left in this suit.") + . = ..() + . += "There [extinguishes_left == 1 ? "is" : "are"] [extinguishes_left] extinguisher charge\s left in this suit." /obj/item/clothing/suit/space/eva/plasmaman/proc/Extinguish(mob/living/carbon/human/H) diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index cc983dbb0f..f869eb5d44 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -120,8 +120,8 @@ A.UpdateButtonIcon() /obj/item/clothing/suit/toggle/examine(mob/user) - ..() - to_chat(user, "Alt-click on [src] to toggle the [togglename].") + . = ..() + . += "Alt-click on [src] to toggle the [togglename]." //Hardsuit toggle code /obj/item/clothing/suit/space/hardsuit/Initialize() diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index eda0e31e93..bb5f909521 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -137,23 +137,23 @@ /obj/item/clothing/under/examine(mob/user) - ..() + . = ..() if(can_adjust) if(adjusted == ALT_STYLE) - to_chat(user, "Alt-click on [src] to wear it normally.") + . += "Alt-click on [src] to wear it normally." else - to_chat(user, "Alt-click on [src] to wear it casually.") + . += "Alt-click on [src] to wear it casually." if (has_sensor == BROKEN_SENSORS) - to_chat(user, "Its sensors appear to be shorted out.") + . += "Its sensors appear to be shorted out." else if(has_sensor > NO_SENSORS) switch(sensor_mode) if(SENSOR_OFF) - to_chat(user, "Its sensors appear to be disabled.") + . += "Its sensors appear to be disabled." if(SENSOR_LIVING) - to_chat(user, "Its binary life sensors appear to be enabled.") + . += "Its binary life sensors appear to be enabled." if(SENSOR_VITALS) - to_chat(user, "Its vital tracker appears to be enabled.") + . += "Its vital tracker appears to be enabled." if(SENSOR_COORDS) - to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.") + . += "Its vital tracker and tracking beacon appear to be enabled." if(attached_accessory) - to_chat(user, "\A [attached_accessory] is attached to it.") \ No newline at end of file + . += "\A [attached_accessory] is attached to it." \ No newline at end of file diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 706f7edb0a..0a0499b5f9 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -73,10 +73,10 @@ to_chat(user, "[src] will be worn [above_suit ? "above" : "below"] your suit.") /obj/item/clothing/accessory/examine(mob/user) - ..() - to_chat(user, "\The [src] can be attached to a uniform. Alt-click to remove it once attached.") + . = ..() + . += "\The [src] can be attached to a uniform. Alt-click to remove it once attached." if(initial(above_suit)) - to_chat(user, "\The [src] can be worn above or below your suit. Alt-click to toggle.") + . += "\The [src] can be worn above or below your suit. Alt-click to toggle." /obj/item/clothing/accessory/waistcoat name = "waistcoat" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 6f188d513f..b4ad844f4d 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -607,8 +607,9 @@ var/extinguishes_left = 5 /obj/item/clothing/under/plasmaman/examine(mob/user) - ..() - to_chat(user, "There are [extinguishes_left] extinguisher charges left in this suit.") + . = ..() + . += "There are [extinguishes_left] extinguisher charges left in this suit." + /obj/item/clothing/under/plasmaman/proc/Extinguish(mob/living/carbon/human/H) if(!istype(H)) return diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index c578d5b4d4..eaa31c01bf 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -200,9 +200,9 @@ log = list() /obj/item/detective_scanner/examine(mob/user) - ..() + . = ..() if(LAZYLEN(log) && !scanning) - to_chat(user, "Alt-click to clear scanner logs.") + . += "Alt-click to clear scanner logs." /obj/item/detective_scanner/proc/displayDetectiveScanResults(mob/living/user) // No need for can-use checks since the action button should do proper checks diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm index 815f640fde..e2125964e4 100644 --- a/code/modules/events/_event.dm +++ b/code/modules/events/_event.dm @@ -57,7 +57,7 @@ /datum/round_event_control/wizard/canSpawnEvent(var/players_amt, var/gamemode) if(istype(SSticker.mode, /datum/game_mode/dynamic)) - var/var/datum/game_mode/dynamic/mode = SSticker.mode + var/datum/game_mode/dynamic/mode = SSticker.mode if (locate(/datum/dynamic_ruleset/midround/from_ghosts/wizard) in mode.executed_rules) return can_be_midround_wizard && ..() return ..() diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm index dec55ed8ff..0f1a7452df 100644 --- a/code/modules/events/holiday/vday.dm +++ b/code/modules/events/holiday/vday.dm @@ -138,6 +138,7 @@ name = "valentine - To: [recipient] From: [sender]" /obj/item/valentine/examine(mob/user) + . = ..() if(in_range(user, src) || isobserver(user)) if( !(ishuman(user) || isobserver(user) || issilicon(user)) ) user << browse("[name][stars(message)]", "window=[name]") @@ -146,7 +147,7 @@ user << browse("[name][message]", "window=[name]") onclose(user, "[name]") else - to_chat(user, "It is too far away.") + . += "It is too far away." /obj/item/valentine/attack_self(mob/user) user.examinate(src) diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index cb25446e4a..77600cdefe 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -292,7 +292,7 @@ add_atom_colour("#ffffff", FIXED_COLOUR_PRIORITY) /obj/structure/spacevine/examine(mob/user) - ..() + . = ..() var/text = "This one is a" if(mutations.len) for(var/A in mutations) @@ -301,7 +301,7 @@ else text += " normal" text += " vine." - to_chat(user, text) + . += text /obj/structure/spacevine/Destroy() for(var/datum/spacevine_mutation/SM in mutations) diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 3eeb5b9417..df5e6a87fd 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -22,7 +22,7 @@ var/customname = "custom" /obj/item/reagent_containers/food/snacks/customizable/examine(mob/user) - ..() + . = ..() var/ingredients_listed = "" for(var/obj/item/reagent_containers/food/snacks/ING in ingredients) ingredients_listed += "[ING.name], " @@ -33,7 +33,7 @@ size = "big" if(ingredients.len>8) size = "monster" - to_chat(user, "It contains [ingredients.len?"[ingredients_listed]":"no ingredient, "]making a [size]-sized [initial(name)].") + . += "It contains [ingredients.len?"[ingredients_listed]":"no ingredient, "]making a [size]-sized [initial(name)]." /obj/item/reagent_containers/food/snacks/customizable/attackby(obj/item/I, mob/user, params) if(!istype(I, /obj/item/reagent_containers/food/snacks/customizable) && istype(I, /obj/item/reagent_containers/food/snacks)) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 637e0b929c..d838b31aba 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -151,15 +151,15 @@ All foods are distributed among various categories. Use common sense. return 0 /obj/item/reagent_containers/food/snacks/examine(mob/user) - ..() + . = ..() if(bitecount == 0) return else if(bitecount == 1) - to_chat(user, "[src] was bitten by someone!") + . += "[src] was bitten by someone!" else if(bitecount <= 3) - to_chat(user, "[src] was bitten [bitecount] times!") + . += "[src] was bitten [bitecount] times!" else - to_chat(user, "[src] was bitten multiple times!") + . += "[src] was bitten multiple times!" /obj/item/reagent_containers/food/snacks/attackby(obj/item/W, mob/user, params) diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index b468b6b1d1..c3fc942b83 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -447,11 +447,11 @@ if (pancakeCount) var/obj/item/reagent_containers/food/snacks/S = contents[pancakeCount] bitecount = S.bitecount - ..() + . = ..() if (pancakeCount) for(var/obj/item/reagent_containers/food/snacks/pancakes/ING in contents) ingredients_listed += "[ING.name], " - to_chat(user, "It contains [contents.len?"[ingredients_listed]":"no ingredient, "]on top of a [initial(name)].") + . += "It contains [contents.len?"[ingredients_listed]":"no ingredient, "]on top of a [initial(name)]." bitecount = originalBites /obj/item/reagent_containers/food/snacks/pancakes/attackby(obj/item/I, mob/living/user, params) diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index dd33f696c9..3183b3b2b4 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -67,9 +67,9 @@ God bless America. fry_speed = oil_efficiency /obj/machinery/deepfryer/examine() - ..() + . = ..() if(frying) - to_chat(usr, "You can make out \a [frying] in the oil.") + . += "You can make out \a [frying] in the oil." /obj/machinery/deepfryer/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/reagent_containers/pill)) diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index 6fcc5c9cec..e67de92773 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -53,20 +53,20 @@ /obj/machinery/microwave/examine(mob/user) . = ..() if(!operating) - to_chat(user, "Alt-click [src] to turn it on.") + . += "Alt-click [src] to turn it on." if(!in_range(user, src) && !issilicon(user) && !isobserver(user)) - to_chat(user, "You're too far away to examine [src]'s contents and display!") + . += "You're too far away to examine [src]'s contents and display!" return if(operating) - to_chat(user, "\The [src] is operating.") + . += "\The [src] is operating." return if(length(ingredients)) if(issilicon(user)) - to_chat(user, "\The [src] camera shows:") + . += "\The [src] camera shows:" else - to_chat(user, "\The [src] contains:") + . += "\The [src] contains:" var/list/items_counts = new for(var/i in ingredients) if(istype(i, /obj/item/stack)) @@ -76,14 +76,14 @@ var/atom/movable/AM = i items_counts[AM.name]++ for(var/O in items_counts) - to_chat(user, "- [items_counts[O]]x [O].") + . += "- [items_counts[O]]x [O]." else - to_chat(user, "\The [src] is empty.") + . += "\The [src] is empty." if(!(stat & (NOPOWER|BROKEN))) - to_chat(user, "The status display reads:") - to_chat(user, "- Capacity: [max_n_of_items] items.") - to_chat(user, "- Cook time reduced by [(efficiency - 1) * 25]%.") + . += "The status display reads:" + . += "- Capacity: [max_n_of_items] items." + . += "- Cook time reduced by [(efficiency - 1) * 25]%." /obj/machinery/microwave/update_icon() if(broken) diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index 057dc0d192..355660ecec 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -319,9 +319,9 @@ pizza_preferences = list() /obj/item/pizzabox/infinite/examine(mob/user) - ..() + . = ..() if(isobserver(user)) - to_chat(user, "This pizza box is anomalous, and will produce infinite pizza.") + . += "This pizza box is anomalous, and will produce infinite pizza." /obj/item/pizzabox/infinite/attack_self(mob/living/user) QDEL_NULL(pizza) diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index c83048e4b1..9dbddfb519 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -382,7 +382,7 @@ results = list("neurotoxin" = 2) required_reagents = list("gargleblaster" = 1, "morphine" = 1) //FermiChem vars: Easy to make, but hard to make potent - OptimalTempMin = 200 // Lower area of bell curve for determining heat based rate reactions + OptimalTempMin = 100 // Lower area of bell curve for determining heat based rate reactions OptimalTempMax = 950 // Upper end for above ExplodeTemp = 999 //Temperature at which reaction explodes OptimalpHMin = 4.6 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase) diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm index 8953753a89..fe038ce3f1 100644 --- a/code/modules/games/cas.dm +++ b/code/modules/games/cas.dm @@ -107,14 +107,14 @@ var/buffertext = "A funny bit of text." /obj/item/toy/cards/singlecard/cas/examine(mob/user) - ..() + . = ..() if (flipped) - to_chat(user, "The card is face down.") + . += "The card is face down." else if (blank) - to_chat(user, "The card is blank. Write on it with a pen.") + . += "The card is blank. Write on it with a pen." else - to_chat(user, "The card reads: [name]") - to_chat(user, "Alt-click to flip it.") + . += "The card reads: [name]" + . += "Alt-click to flip it." /obj/item/toy/cards/singlecard/cas/Flip() set name = "Flip Card" diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index e26dab07b4..3c4ed776b7 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -123,26 +123,25 @@ /obj/structure/beebox/examine(mob/user) - ..() + . = ..() if(!queen_bee) - to_chat(user, "There is no queen bee! There won't bee any honeycomb without a queen!") + . += "There is no queen bee! There won't bee any honeycomb without a queen!" var/half_bee = get_max_bees()*0.5 if(half_bee && (bees.len >= half_bee)) - to_chat(user, "This place is aBUZZ with activity... there are lots of bees!") + . += "This place is aBUZZ with activity... there are lots of bees!" - to_chat(user, "[bee_resources]/100 resource supply.") - to_chat(user, "[bee_resources]% towards a new honeycomb.") - to_chat(user, "[bee_resources*2]% towards a new bee.") + . += "[bee_resources]/100 resource supply." + . += "[bee_resources]% towards a new honeycomb." + . += "[bee_resources*2]% towards a new bee." if(honeycombs.len) var/plural = honeycombs.len > 1 - to_chat(user, "There [plural? "are" : "is"] [honeycombs.len] uncollected honeycomb[plural ? "s":""] in the apiary.") + . += "There [plural? "are" : "is"] [honeycombs.len] uncollected honeycomb[plural ? "s":""] in the apiary." if(honeycombs.len >= get_max_honeycomb()) - to_chat(user, "There's no room for more honeycomb!") - + . += "There's no room for more honeycomb!" /obj/structure/beebox/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/honey_frame)) diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index 313d998685..e9001322d3 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -16,7 +16,7 @@ /obj/structure/fermenting_barrel/examine(mob/user) . = ..() - to_chat(user, "It is currently [open?"open, letting you pour liquids in.":"closed, letting you draw liquids from the tap."]") + . += "It is currently [open?"open, letting you pour liquids in.":"closed, letting you draw liquids from the tap."]" /obj/structure/fermenting_barrel/proc/makeWine(obj/item/reagent_containers/food/snacks/grown/fruit) if(fruit.reagents) diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 79a23014b0..3376bac1cc 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -201,9 +201,9 @@ if(!G) continue dat += "[G.get_name()]" - if(can_extract) + if(can_extract && G.mutability_flags & PLANT_GENE_EXTRACTABLE) dat += "Extract" - if(can_insert && istype(disk.gene, G.type)) + if(can_insert && istype(disk.gene, G.type) && G.mutability_flags & PLANT_GENE_REMOVABLE) dat += "Replace" dat += "" dat += "" @@ -232,9 +232,10 @@ for(var/a in trait_genes) var/datum/plant_gene/G = a dat += "[G.get_name()]" - if(can_extract) + if(can_extract && G.mutability_flags & PLANT_GENE_EXTRACTABLE) dat += "Extract" - dat += "Remove" + if(G.mutability_flags & PLANT_GENE_REMOVABLE) + dat += "Remove" dat += "" dat += "" else @@ -439,7 +440,7 @@ to_chat(user, "You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"].") /obj/item/disk/plantgene/examine(mob/user) - ..() + . = ..() if(gene && (istype(gene, /datum/plant_gene/core/potency))) - to_chat(user,"Percent is relative to potency, not maximum volume of the plant.") - to_chat(user, "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"].") + . += "Percent is relative to potency, not maximum volume of the plant." + . += "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"]." diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 096c7b5b2b..660f1e17e4 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -56,11 +56,11 @@ return 0 /obj/item/reagent_containers/food/snacks/grown/examine(user) - ..() + . = ..() if(seed) for(var/datum/plant_gene/trait/T in seed.genes) if(T.examine_line) - to_chat(user, T.examine_line) + . += T.examine_line /obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params) ..() @@ -131,7 +131,7 @@ ..() /obj/item/reagent_containers/food/snacks/grown/generate_trash(atom/location) - if(trash && ispath(trash, /obj/item/grown)) + if(trash && (ispath(trash, /obj/item/grown) || ispath(trash, /obj/item/reagent_containers/food/snacks/grown))) . = new trash(location, seed) trash = null return diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index ef019387e8..94dbc74499 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -90,7 +90,7 @@ lifespan = 30 endurance = 25 mutatelist = list() - genes = list(/datum/plant_gene/trait/glow/berry , /datum/plant_gene/trait/noreact, /datum/plant_gene/trait/repeated_harvest) + genes = list(/datum/plant_gene/trait/glow/white, /datum/plant_gene/trait/noreact, /datum/plant_gene/trait/repeated_harvest) reagents_add = list("uranium" = 0.25, "iodine" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1) rarity = 20 @@ -121,8 +121,9 @@ growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' icon_grow = "cherry-grow" icon_dead = "cherry-dead" + icon_harvest = "cherry-harvest" genes = list(/datum/plant_gene/trait/repeated_harvest) - mutatelist = list(/obj/item/seeds/cherry/blue) + mutatelist = list(/obj/item/seeds/cherry/blue, /obj/item/seeds/cherry/bulb) reagents_add = list("nutriment" = 0.07, "sugar" = 0.07) /obj/item/reagent_containers/food/snacks/grown/cherries @@ -162,6 +163,31 @@ tastes = list("blue cherry" = 1) wine_power = 50 +//Cherry Bulbs +/obj/item/seeds/cherry/bulb + name = "pack of cherry bulb pits" + desc = "The glowy kind of cherries." + icon_state = "seed-cherrybulb" + species = "cherrybulb" + plantname = "Cherry Bulb Tree" + product = /obj/item/reagent_containers/food/snacks/grown/cherrybulbs + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/pink) + mutatelist = list() + reagents_add = list("nutriment" = 0.07, "sugar" = 0.07) + rarity = 10 + +/obj/item/reagent_containers/food/snacks/grown/cherrybulbs + seed = /obj/item/seeds/cherry/bulb + name = "cherry bulbs" + desc = "They're like little Space Christmas lights!" + icon_state = "cherry_bulb" + filling_color = "#FF0000" + bitesize_mod = 2 + foodtype = FRUIT + grind_results = list("cherryjelly" = 0) + tastes = list("cherry" = 1) + wine_power = 50 + // Grapes /obj/item/seeds/grape name = "pack of grape seeds" diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm index 67c5e61dcf..6ce3558bc3 100644 --- a/code/modules/hydroponics/grown/cannabis.dm +++ b/code/modules/hydroponics/grown/cannabis.dm @@ -61,6 +61,7 @@ species = "ocannabis" plantname = "Omega Weed" product = /obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/green) mutatelist = list() reagents_add = list("space_drugs" = 0.3, "mindbreaker" = 0.3, diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index 97b30aec06..7355aa5ab1 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -33,6 +33,26 @@ filling_color = "#00FF00" juice_results = list("limejuice" = 0) +// Electric Lime +/obj/item/seeds/lime/electric + name = "pack of electric lime seeds" + desc = "Electrically sour seeds." + icon_state = "seed-electriclime" + species = "electric lime" + plantname = "Electric Lime Tree" + growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' + icon_grow = "lime-grow" + icon_dead = "lime-dead" + icon_harvest = "lime-harvest" + product = /obj/item/reagent_containers/food/snacks/grown/citrus/lime/electric + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/glow/green) + +/obj/item/reagent_containers/food/snacks/grown/citrus/lime/electric + seed = /obj/item/seeds/lime/electric + name = "electric lime" + desc = "It's so sour, you'll be shocked!" + icon_state = "electriclime" + // Orange /obj/item/seeds/orange name = "pack of orange seeds" @@ -49,7 +69,7 @@ icon_grow = "lime-grow" icon_dead = "lime-dead" genes = list(/datum/plant_gene/trait/repeated_harvest) - mutatelist = list(/obj/item/seeds/lime) + mutatelist = list(/obj/item/seeds/lime, /obj/item/seeds/orange_3d) reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05) /obj/item/reagent_containers/food/snacks/grown/citrus/orange @@ -61,6 +81,43 @@ juice_results = list("orangejuice" = 0) distill_reagent = "triple_sec" + +//3D Orange +/obj/item/seeds/orange_3d + name = "pack of extradimensional orange seeds" + desc = "Polygonal seeds." + icon_state = "seed-orange" + species = "orange" + plantname = "Extradimensional Orange Tree" + product = /obj/item/reagent_containers/food/snacks/grown/citrus/orange + lifespan = 60 + endurance = 50 + yield = 5 + potency = 20 + growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' + icon_grow = "lime-grow" + icon_dead = "lime-dead" + genes = list(/datum/plant_gene/trait/repeated_harvest) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05) + +/obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d + seed = /obj/item/seeds/orange + name = "extradminesional orange" + desc = "You can hardly wrap your head around this thing." + icon_state = "orang" + filling_color = "#FFA500" + juice_results = list("orangejuice" = 0) + distill_reagent = "triple_sec" + tastes = list("polygons" = 1, "oranges" = 1) + +/obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d/pickup(mob/user) + . = ..() + icon_state = "orange" + +/obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d/dropped(mob/user) + . = ..() + icon_state = "orang" + // Lemon /obj/item/seeds/lemon name = "pack of lemon seeds" diff --git a/code/modules/hydroponics/grown/cocoa_vanilla.dm b/code/modules/hydroponics/grown/cocoa_vanilla.dm index ea1b9716bd..44373515c6 100644 --- a/code/modules/hydroponics/grown/cocoa_vanilla.dm +++ b/code/modules/hydroponics/grown/cocoa_vanilla.dm @@ -15,7 +15,7 @@ icon_grow = "cocoapod-grow" icon_dead = "cocoapod-dead" genes = list(/datum/plant_gene/trait/repeated_harvest) - mutatelist = list(/obj/item/seeds/cocoapod/vanillapod) + mutatelist = list(/obj/item/seeds/cocoapod/vanillapod, /obj/item/seeds/cocoapod/bungotree) reagents_add = list("cocoa" = 0.25, "nutriment" = 0.1) /obj/item/reagent_containers/food/snacks/grown/cocoapod @@ -50,3 +50,54 @@ foodtype = FRUIT tastes = list("vanilla" = 1) distill_reagent = "vanilla" //Takes longer, but you can get even more vanilla from it. + +/obj/item/seeds/cocoapod/bungotree + name = "pack of bungo tree seeds" + desc = "These seeds grow into bungo trees. They appear to be heavy and almost perfectly spherical." + icon_state = "seed-bungotree" + species = "bungotree" + plantname = "Bungo Tree" + product = /obj/item/reagent_containers/food/snacks/grown/bungofruit + lifespan = 30 + maturation = 4 + yield = 3 + production = 7 + genes = list(/datum/plant_gene/trait/repeated_harvest) + mutatelist = list() + reagents_add = list("enzyme" = 0.1, "nutriment" = 0.1) + growthstages = 4 + growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' + icon_grow = "bungotree-grow" + icon_dead = "bungotree-dead" + rarity = 15 + +/obj/item/reagent_containers/food/snacks/grown/bungofruit + seed = /obj/item/seeds/cocoapod/bungotree + name = "bungo fruit" + desc = "A strange fruit, tough leathery skin protects its juicy flesh and large poisonous seed." + icon_state = "bungo" + trash = /obj/item/reagent_containers/food/snacks/grown/bungopit + filling_color = "#E8C22F" + foodtype = FRUIT + tastes = list("bungo" = 2, "tropical fruitiness" = 1) + distill_reagent = null + +/obj/item/reagent_containers/food/snacks/grown/bungopit + seed = /obj/item/seeds/cocoapod/bungotree + name = "bungo pit" + icon_state = "bungopit" + desc = "A large seed, it is said to be potent enough to be able to stop a mans heart." + w_class = WEIGHT_CLASS_TINY + throwforce = 5 + throw_speed = 3 + throw_range = 7 + foodtype = TOXIC + tastes = list("acrid bitterness" = 1) + +/obj/item/reagent_containers/food/snacks/grown/bungopit/Initialize() + . =..() + reagents.clear_reagents() + reagents.add_reagent("bungotoxin", seed.potency * 0.10) //More than this will kill at too low potency + reagents.add_reagent("nutriment", seed.potency * 0.04) + + diff --git a/code/modules/hydroponics/grown/cotton.dm b/code/modules/hydroponics/grown/cotton.dm index 045839d0de..4787d62230 100644 --- a/code/modules/hydroponics/grown/cotton.dm +++ b/code/modules/hydroponics/grown/cotton.dm @@ -1,79 +1,79 @@ -/obj/item/seeds/cotton - name = "pack of cotton seeds" - desc = "A pack of seeds that'll grow into a cotton plant. Assistants make good free labor if neccesary." - icon_state = "seed-cotton" - species = "cotton" - plantname = "Cotton" - icon_harvest = "cotton-harvest" - product = /obj/item/grown/cotton - lifespan = 35 - endurance = 25 - maturation = 15 - production = 1 - yield = 2 - potency = 50 - growthstages = 3 - growing_icon = 'icons/obj/hydroponics/growing.dmi' - icon_dead = "cotton-dead" - mutatelist = list(/obj/item/seeds/cotton/durathread) - -/obj/item/grown/cotton - seed = /obj/item/seeds/cotton - name = "cotton bundle" - desc = "A fluffy bundle of cotton." - icon_state = "cotton" - force = 0 - throwforce = 0 - w_class = WEIGHT_CLASS_TINY - throw_speed = 2 - throw_range = 3 - attack_verb = list("pomfed") - var/cotton_type = /obj/item/stack/sheet/cotton - var/cotton_name = "raw cotton" - -/obj/item/grown/cotton/attack_self(mob/user) - user.show_message("You pull some [cotton_name] out of the [name]!", 1) - var/seed_modifier = 0 - if(seed) - seed_modifier = round(seed.potency / 25) - var/obj/item/stack/cotton = new cotton_type(user.loc, 1 + seed_modifier) - var/old_cotton_amount = cotton.amount - for(var/obj/item/stack/ST in user.loc) - if(ST != cotton && istype(ST, cotton_type) && ST.amount < ST.max_amount) - ST.attackby(cotton, user) - if(cotton.amount > old_cotton_amount) - to_chat(user, "You add the newly-formed [cotton_name] to the stack. It now contains [cotton.amount] [cotton_name].") - qdel(src) - -//reinforced mutated variant -/obj/item/seeds/cotton/durathread - name = "pack of durathread seeds" - desc = "A pack of seeds that'll grow into an extremely durable thread that could easily rival plasteel if woven properly." - icon_state = "seed-durathread" - species = "durathread" - plantname = "Durathread" - icon_harvest = "durathread-harvest" - product = /obj/item/grown/cotton/durathread - lifespan = 80 - endurance = 50 - maturation = 15 - production = 1 - yield = 2 - potency = 50 - growthstages = 3 - growing_icon = 'icons/obj/hydroponics/growing.dmi' - icon_dead = "cotton-dead" - -/obj/item/grown/cotton/durathread - seed = /obj/item/seeds/cotton/durathread - name = "durathread bundle" - desc = "A tough bundle of durathread, good luck unraveling this." - icon_state = "durathread" - force = 5 - throwforce = 5 - w_class = WEIGHT_CLASS_NORMAL - throw_speed = 2 - throw_range = 3 - attack_verb = list("bashed", "battered", "bludgeoned", "whacked") - cotton_type = /obj/item/stack/sheet/cotton/durathread - cotton_name = "raw durathread" \ No newline at end of file +/obj/item/seeds/cotton + name = "pack of cotton seeds" + desc = "A pack of seeds that'll grow into a cotton plant. Assistants make good free labor if neccesary." + icon_state = "seed-cotton" + species = "cotton" + plantname = "Cotton" + icon_harvest = "cotton-harvest" + product = /obj/item/grown/cotton + lifespan = 35 + endurance = 25 + maturation = 15 + production = 1 + yield = 2 + potency = 50 + growthstages = 3 + growing_icon = 'icons/obj/hydroponics/growing.dmi' + icon_dead = "cotton-dead" + mutatelist = list(/obj/item/seeds/cotton/durathread) + +/obj/item/grown/cotton + seed = /obj/item/seeds/cotton + name = "cotton bundle" + desc = "A fluffy bundle of cotton." + icon_state = "cotton" + force = 0 + throwforce = 0 + w_class = WEIGHT_CLASS_TINY + throw_speed = 2 + throw_range = 3 + attack_verb = list("pomfed") + var/cotton_type = /obj/item/stack/sheet/cotton + var/cotton_name = "raw cotton" + +/obj/item/grown/cotton/attack_self(mob/user) + user.show_message("You pull some [cotton_name] out of the [name]!", 1) + var/seed_modifier = 0 + if(seed) + seed_modifier = round(seed.potency / 25) + var/obj/item/stack/cotton = new cotton_type(user.loc, 1 + seed_modifier) + var/old_cotton_amount = cotton.amount + for(var/obj/item/stack/ST in user.loc) + if(ST != cotton && istype(ST, cotton_type) && ST.amount < ST.max_amount) + ST.attackby(cotton, user) + if(cotton.amount > old_cotton_amount) + to_chat(user, "You add the newly-formed [cotton_name] to the stack. It now contains [cotton.amount] [cotton_name].") + qdel(src) + +//reinforced mutated variant +/obj/item/seeds/cotton/durathread + name = "pack of durathread seeds" + desc = "A pack of seeds that'll grow into an extremely durable thread that could easily rival plasteel if woven properly." + icon_state = "seed-durathread" + species = "durathread" + plantname = "Durathread" + icon_harvest = "durathread-harvest" + product = /obj/item/grown/cotton/durathread + lifespan = 80 + endurance = 50 + maturation = 15 + production = 1 + yield = 2 + potency = 50 + growthstages = 3 + growing_icon = 'icons/obj/hydroponics/growing.dmi' + icon_dead = "cotton-dead" + +/obj/item/grown/cotton/durathread + seed = /obj/item/seeds/cotton/durathread + name = "durathread bundle" + desc = "A tough bundle of durathread, good luck unraveling this." + icon_state = "durathread" + force = 5 + throwforce = 5 + w_class = WEIGHT_CLASS_NORMAL + throw_speed = 2 + throw_range = 3 + attack_verb = list("bashed", "battered", "bludgeoned", "whacked") + cotton_type = /obj/item/stack/sheet/cotton/durathread + cotton_name = "raw durathread" diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm index af5919969c..beecb258a7 100644 --- a/code/modules/hydroponics/grown/flowers.dm +++ b/code/modules/hydroponics/grown/flowers.dm @@ -37,7 +37,7 @@ species = "lily" plantname = "Lily Plants" product = /obj/item/reagent_containers/food/snacks/grown/poppy/lily - mutatelist = list(/obj/item/seeds/bee_balm) + mutatelist = list(/obj/item/seeds/bee_balm, /obj/item/seeds/poppy/lily/trumpet) /obj/item/reagent_containers/food/snacks/grown/poppy/lily seed = /obj/item/seeds/poppy/lily @@ -47,6 +47,43 @@ tastes = list("pelts " = 1) filling_color = "#FFA500" +/obj/item/seeds/poppy/lily/trumpet + name = "pack of spaceman's trumpet seeds" + desc = "A plant sculped by extensive genetic engineering. The spaceman's trumpet is said to bear no resemblance to its wild ancestors. Inside NT AgriSci circles it is better known as NTPW-0372." + icon_state = "seed-trumpet" + species = "spacemanstrumpet" + plantname = "Spaceman's Trumpet Plant" + product = /obj/item/reagent_containers/food/snacks/grown/trumpet + lifespan = 80 + production = 5 + endurance = 10 + maturation = 12 + yield = 4 + potency = 20 + growthstages = 4 + weed_rate = 2 + weed_chance = 10 + growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi' + icon_grow = "spacemanstrumpet-grow" + icon_dead = "spacemanstrumpet-dead" + mutatelist = list() + genes = list(/datum/plant_gene/reagent/polypyr) + reagents_add = list("nutriment" = 0.05) + rarity = 30 + +/obj/item/seeds/poppy/lily/trumpet/Initialize() + ..() + unset_mutability(/datum/plant_gene/reagent/polypyr, PLANT_GENE_EXTRACTABLE) + +/obj/item/reagent_containers/food/snacks/grown/trumpet + seed = /obj/item/seeds/poppy/lily/trumpet + name = "spaceman's trumpet" + desc = "A vivid flower that smells faintly of freshly cut grass. Touching the flower seems to stain the skin some time after contact, yet most other surfaces seem to be unaffected by this phenomenon." + icon_state = "spacemanstrumpet" + filling_color = "#FF6347" + bitesize_mod = 3 + foodtype = VEGETABLES + // Geranium /obj/item/seeds/poppy/geranium name = "pack of geranium seeds" @@ -145,6 +182,7 @@ icon_grow = "moonflower-grow" icon_dead = "sunflower-dead" product = /obj/item/reagent_containers/food/snacks/grown/moonflower + genes = list(/datum/plant_gene/trait/glow/purple) mutatelist = list() reagents_add = list("moonshine" = 0.2, "vitamin" = 0.02, "nutriment" = 0.02) rarity = 15 diff --git a/code/modules/hydroponics/grown/grass_carpet.dm b/code/modules/hydroponics/grown/grass_carpet.dm index 1a1c2ac07f..08ce71ad37 100644 --- a/code/modules/hydroponics/grown/grass_carpet.dm +++ b/code/modules/hydroponics/grown/grass_carpet.dm @@ -15,7 +15,7 @@ icon_grow = "grass-grow" icon_dead = "grass-dead" genes = list(/datum/plant_gene/trait/repeated_harvest) - mutatelist = list(/obj/item/seeds/grass/carpet) + mutatelist = list(/obj/item/seeds/grass/carpet, /obj/item/seeds/grass/fairy) reagents_add = list("nutriment" = 0.02, "hydrogen" = 0.05) /obj/item/reagent_containers/food/snacks/grown/grass @@ -40,6 +40,27 @@ new stacktype(user.drop_location(), grassAmt) qdel(src) +//Fairygrass +/obj/item/seeds/grass/fairy + name = "pack of fairygrass seeds" + desc = "These seeds grow into a more mystical grass." + icon_state = "seed-fairygrass" + species = "fairygrass" + plantname = "Fairygrass" + product = /obj/item/reagent_containers/food/snacks/grown/grass/fairy + icon_grow = "fairygrass-grow" + icon_dead = "fairygrass-dead" + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/blue) + reagents_add = list("nutriment" = 0.02, "hydrogen" = 0.05, "space_drugs" = 0.15) + +/obj/item/reagent_containers/food/snacks/grown/grass/fairy + seed = /obj/item/seeds/grass/fairy + name = "fairygrass" + desc = "Blue, glowing, and smells fainly of mushrooms." + icon_state = "fairygrassclump" + filling_color = "#3399ff" + stacktype = /obj/item/stack/tile/fairygrass + // Carpet /obj/item/seeds/grass/carpet name = "pack of carpet seeds" diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm index 87db12d892..e85a36f4b6 100644 --- a/code/modules/hydroponics/grown/melon.dm +++ b/code/modules/hydroponics/grown/melon.dm @@ -44,6 +44,7 @@ species = "holymelon" plantname = "Holy Melon Vines" product = /obj/item/reagent_containers/food/snacks/grown/holymelon + genes = list(/datum/plant_gene/trait/glow/yellow) mutatelist = list() reagents_add = list("holywater" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1) rarity = 20 diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm index 0902052a11..9d91d028ba 100644 --- a/code/modules/hydroponics/grown/misc.dm +++ b/code/modules/hydroponics/grown/misc.dm @@ -15,7 +15,7 @@ grind_results = list("mustardgrind" = 1) growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi' genes = list(/datum/plant_gene/trait/plant_type/weed_hardy) - mutatelist = list(/obj/item/seeds/harebell) + mutatelist = list(/obj/item/seeds/starthistle/corpse_flower, /obj/item/seeds/galaxythistle) /obj/item/seeds/starthistle/harvest(mob/user) var/obj/machinery/hydroponics/parent = loc @@ -29,6 +29,76 @@ parent.update_tray() +// Corpse flower +/obj/item/seeds/starthistle/corpse_flower + name = "pack of corpse flower seeds" + desc = "A species of plant that emits a horrible odor. The odor stops being produced in difficult atmospheric conditions." + icon_state = "seed-corpse-flower" + species = "corpse-flower" + plantname = "Corpse flower" + production = 2 + growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi' + genes = list() + mutatelist = list() + +/obj/item/seeds/starthistle/corpse_flower/pre_attack(obj/machinery/hydroponics/I) + if(istype(I, /obj/machinery/hydroponics)) + if(!I.myseed) + START_PROCESSING(SSobj, src) + return ..() + +/obj/item/seeds/starthistle/corpse_flower/process() + var/obj/machinery/hydroponics/parent = loc + if(parent.age < maturation) // Start a little before it blooms + return + + var/turf/open/T = get_turf(parent) + if(abs(ONE_ATMOSPHERE - T.return_air().return_pressure()) > (potency/10 + 10)) // clouds can begin showing at around 50-60 potency in standard atmos + return + + var/datum/gas_mixture/stank = new + stank.gases[/datum/gas/miasma] = (yield + 6)*7*0.02 // this process is only being called about 2/7 as much as corpses so this is 12-32 times a corpses + stank.temperature = T20C // without this the room would eventually freeze and miasma mining would be easier + T.assume_air(stank) + T.air_update_turf() + +//Galaxy Thistle +/obj/item/seeds/galaxythistle + name = "pack of galaxythistle seeds" + desc = "An impressive species of weed that is thought to have evolved from the simple milk thistle. Contains flavolignans that can help repair a damaged liver." + icon_state = "seed-galaxythistle" + species = "galaxythistle" + plantname = "Galaxythistle" + product = /obj/item/reagent_containers/food/snacks/grown/galaxythistle + lifespan = 70 + endurance = 40 + maturation = 3 + production = 2 + yield = 2 + potency = 25 + growthstages = 3 + growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi' + genes = list(/datum/plant_gene/trait/plant_type/weed_hardy, /datum/plant_gene/trait/invasive) + mutatelist = list() + reagents_add = list("nutriment" = 0.05, "silibinin" = 0.1) + +/obj/item/seeds/galaxythistle/Initialize() + ..() + unset_mutability(/datum/plant_gene/trait/invasive, PLANT_GENE_REMOVABLE) + +/obj/item/reagent_containers/food/snacks/grown/galaxythistle + seed = /obj/item/seeds/galaxythistle + name = "galaxythistle flower head" + desc = "This spiny cluster of florets reminds you of the highlands." + icon_state = "galaxythistle" + filling_color = "#1E7549" + bitesize_mod = 3 + foodtype = VEGETABLES + wine_power = 35 + tastes = list("thistle" = 2, "artichoke" = 1) + + + // Cabbage /obj/item/seeds/cabbage name = "pack of cabbage seeds" diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index fe2beb896c..c8e97c78de 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -191,6 +191,7 @@ genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("nutriment" = 0.1) + mutatelist = list(/obj/item/seeds/chanterelle/jupitercup) /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle seed = /obj/item/seeds/chanter @@ -199,6 +200,34 @@ icon_state = "chanterelle" filling_color = "#FFA500" +//Jupiter Cup +/obj/item/seeds/chanterelle/jupitercup + name = "pack of jupiter cup mycelium" + desc = "This mycelium grows into jupiter cups. Zeus would be envious at the power at your fingertips." + icon_state = "mycelium-jupitercup" + species = "jupitercup" + plantname = "Jupiter Cups" + product = /obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup + lifespan = 40 + production = 4 + endurance = 8 + yield = 4 + growthstages = 2 + genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/reagent/liquidelectricity, /datum/plant_gene/trait/plant_type/carnivory) + growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' + reagents_add = list("nutriment" = 0.1) + +/obj/item/seeds/chanterelle/jupitercup/Initialize() + ..() + unset_mutability(/datum/plant_gene/reagent/liquidelectricity, PLANT_GENE_EXTRACTABLE) + unset_mutability(/datum/plant_gene/trait/plant_type/carnivory, PLANT_GENE_REMOVABLE) + +/obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup + seed = /obj/item/seeds/chanterelle/jupitercup + name = "jupiter cup" + desc = "A strange red mushroom, its surface is moist and slick. You wonder how many tiny worms have met their fate inside." + icon_state = "jupitercup" + filling_color = "#B5003D" // Glowshroom /obj/item/seeds/glowshroom diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index f464fccf91..f45b6bc517 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -169,8 +169,27 @@ //Pests & Weeds////////////////////////////////////////////////////////// - else if(pestlevel >= 5) - adjustHealth(-1 / rating) + if(pestlevel >= 8) + if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory)) + adjustHealth(-2 / rating) + + else + adjustHealth(2 / rating) + adjustPests(-1 / rating) + + else if(pestlevel >= 4) + if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory)) + adjustHealth(-1 / rating) + + else + adjustHealth(1 / rating) + if(prob(50)) + adjustPests(-1 / rating) + + else if(pestlevel < 4 && myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory)) + adjustHealth(-2 / rating) + if(prob(5)) + adjustPests(-1 / rating) // If it's a weed, it doesn't stunt the growth if(weedlevel >= 5 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy)) @@ -210,6 +229,12 @@ needs_update = 1 if (needs_update) update_icon() + + if(myseed && prob(5 * (11-myseed.production))) + for(var/g in myseed.genes) + if(istype(g, /datum/plant_gene/trait)) + var/datum/plant_gene/trait/selectedtrait = g + selectedtrait.on_grow(src) return /obj/machinery/hydroponics/proc/nutrimentMutation() @@ -294,32 +319,31 @@ /obj/machinery/hydroponics/examine(user) - ..() + . = ..() if(myseed) - to_chat(user, "It has [myseed.plantname] planted.") + . += "It has [myseed.plantname] planted." if (dead) - to_chat(user, "It's dead!") + . += "It's dead!" else if (harvest) - to_chat(user, "It's ready to harvest.") + . += "It's ready to harvest." else if (plant_health <= (myseed.endurance / 2)) - to_chat(user, "It looks unhealthy.") + . += "It looks unhealthy." else - to_chat(user, "It's empty.") + . += "It's empty." if(!self_sustaining) - to_chat(user, "Water: [waterlevel]/[maxwater].") - to_chat(user, "Nutrient: [nutrilevel]/[maxnutri].") + . += "Water: [waterlevel]/[maxwater]." + . += "Nutrient: [nutrilevel]/[maxnutri]." if(self_sufficiency_progress > 0) var/percent_progress = round(self_sufficiency_progress * 100 / self_sufficiency_req) - to_chat(user, "Treatment for self-sustenance are [percent_progress]% complete.") + . += "Treatment for self-sustenance are [percent_progress]% complete." else - to_chat(user, "It doesn't require any water or nutrients.") + . += "It doesn't require any water or nutrients." if(weedlevel >= 5) - to_chat(user, "It's filled with weeds!") + . += "It's filled with weeds!" if(pestlevel >= 5) - to_chat(user, "It's filled with tiny worms!") - to_chat(user, "" ) + . += "It's filled with tiny worms!" /obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, this happens. diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index db529e8ffb..74185e9b3f 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -1,8 +1,18 @@ /datum/plant_gene var/name + var/mutability_flags = PLANT_GENE_EXTRACTABLE | PLANT_GENE_REMOVABLE ///These flags tells the genemodder if we want the gene to be extractable, only removable or neither. /datum/plant_gene/proc/get_name() // Used for manipulator display and gene disk name. - return name + var/formatted_name + if(!(mutability_flags & PLANT_GENE_REMOVABLE && mutability_flags & PLANT_GENE_EXTRACTABLE)) + if(mutability_flags & PLANT_GENE_REMOVABLE) + formatted_name += "Fragile " + else if(mutability_flags & PLANT_GENE_EXTRACTABLE) + formatted_name += "Essential " + else + formatted_name += "Immutable " + formatted_name += name + return formatted_name /datum/plant_gene/proc/can_add(obj/item/seeds/S) return !istype(S, /obj/item/seeds/sample) // Samples can't accept new genes @@ -101,7 +111,18 @@ var/rate = 0.04 /datum/plant_gene/reagent/get_name() - return "[name] production [rate*100]%" + var/formatted_name + if(!(mutability_flags & PLANT_GENE_REMOVABLE && mutability_flags & PLANT_GENE_EXTRACTABLE)) + if(mutability_flags & PLANT_GENE_REMOVABLE) + formatted_name += "Fragile " + else if(mutability_flags & PLANT_GENE_EXTRACTABLE) + formatted_name += "Essential " + else + formatted_name += "Immutable " + formatted_name += "[name] production [rate*100]%" + return formatted_name + + /datum/plant_gene/reagent/proc/set_reagent(reag_id) reagent_id = reag_id @@ -132,6 +153,15 @@ return FALSE return TRUE +/datum/plant_gene/reagent/polypyr + name = "Polypyrylium Oligomers" + reagent_id = "polypyr" + rate = 0.15 + +/datum/plant_gene/reagent/liquidelectricity + name = "Liquid Electricity" + reagent_id = "liquidelectricity" + rate = 0.1 // Various traits affecting the product. Each must be somehow useful. /datum/plant_gene/trait @@ -173,6 +203,10 @@ /datum/plant_gene/trait/proc/on_throw_impact(obj/item/reagent_containers/food/snacks/grown/G, atom/target) return +///This proc triggers when the tray processes and a roll is sucessful, the success chance scales with production. +/datum/plant_gene/trait/proc/on_grow(obj/machinery/hydroponics/H) + return + /datum/plant_gene/trait/squash // Allows the plant to be squashed when thrown or slipped on, leaving a colored mess and trash type item behind. // Also splashes everything in target turf with reagents and applies other trait effects (teleporting, etc) to the target by on_squash. @@ -261,22 +295,44 @@ /datum/plant_gene/trait/glow/shadow //makes plant emit slightly purple shadows - //adds -potency*(rate*0.2) light power to products name = "Shadow Emission" rate = 0.04 glow_color = "#AAD84B" -/datum/plant_gene/trait/glow/shadow/glow_power(obj/item/seeds/S) - return -max(S.potency*(rate*0.2), 0.2) +datum/plant_gene/trait/glow/white + name = "White Bioluminescence" + glow_color = "#FFFFFF" /datum/plant_gene/trait/glow/red - name = "Red Electrical Glow" - glow_color = LIGHT_COLOR_RED + //Colored versions of bioluminescence. + name = "Red Bioluminescence" + glow_color = "#FF3333" + +/datum/plant_gene/trait/glow/yellow + //not the disgusting glowshroom yellow hopefully + name = "Yellow Bioluminescence" + glow_color = "#FFFF66" + +/datum/plant_gene/trait/glow/green + //oh no, now i'm radioactive + name = "Green Bioluminescence" + glow_color = "#99FF99" + +/datum/plant_gene/trait/glow/blue + //the best one + name = "Blue Bioluminescence" + glow_color = "#6699FF" + +/datum/plant_gene/trait/glow/purple + //did you know that notepad++ doesnt think bioluminescence is a word + name = "Purple Bioluminescence" + glow_color = "#D966FF" + +/datum/plant_gene/trait/glow/pink + //gay tide station pride + name = "Pink Bioluminescence" + glow_color = "#FFB3DA" -/datum/plant_gene/trait/glow/berry - name = "Strong Bioluminescence" - rate = 0.05 - glow_color = null /datum/plant_gene/trait/teleport @@ -400,6 +456,30 @@ if(!(G.resistance_flags & FIRE_PROOF)) G.resistance_flags |= FIRE_PROOF +//Invasive spreading lets the plant jump to other trays, the spreadinhg plant won't replace plants of the same type. +/datum/plant_gene/trait/invasive + name = "Invasive Spreading" + +/datum/plant_gene/trait/invasive/on_grow(obj/machinery/hydroponics/H) + for(var/step_dir in GLOB.alldirs) + var/obj/machinery/hydroponics/HY = locate() in get_step(H, step_dir) + if(HY && prob(15)) + if(HY.myseed) // check if there is something in the tray. + if(HY.myseed.type == H.myseed.type && HY.dead != 0) + continue //It should not destroy its owm kind. + qdel(HY.myseed) + HY.myseed = null + HY.myseed = H.myseed.Copy() + HY.age = 0 + HY.dead = 0 + HY.plant_health = HY.myseed.endurance + HY.lastcycle = world.time + HY.harvest = 0 + HY.weedlevel = 0 // Reset + HY.pestlevel = 0 // Reset + HY.update_icon() + HY.visible_message("The [H.myseed.plantname] spreads!") + /datum/plant_gene/trait/plant_type // Parent type name = "you shouldn't see this" trait_id = "plant_type" @@ -412,3 +492,7 @@ /datum/plant_gene/trait/plant_type/alien_properties name ="?????" + +/datum/plant_gene/trait/plant_type/carnivory + name = "Obligate Carnivory" + diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 2a28b7b097..16863b0aa4 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -67,6 +67,7 @@ for(var/reag_id in reagents_add) genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id]) + reagents_from_genes() //quality coding /obj/item/seeds/proc/Copy() var/obj/item/seeds/S = new type(null, 1) @@ -94,6 +95,18 @@ for(var/datum/plant_gene/reagent/R in genes) reagents_add[R.reagent_id] = R.rate +///This proc adds a mutability_flag to a gene +/obj/item/seeds/proc/set_mutability(typepath, mutability) + var/datum/plant_gene/g = get_gene(typepath) + if(g) + g.mutability_flags |= mutability + +///This proc removes a mutability_flag from a gene +/obj/item/seeds/proc/unset_mutability(typepath, mutability) + var/datum/plant_gene/g = get_gene(typepath) + if(g) + g.mutability_flags &= ~mutability + /obj/item/seeds/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0) adjust_lifespan(rand(-lifemut,lifemut)) adjust_endurance(rand(-endmut,endmut)) diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index ae134c2415..93ddedebc0 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -70,16 +70,16 @@ /obj/item/electronic_assembly/examine(mob/user) . = ..() if(can_anchor) - to_chat(user, "The anchoring bolts [anchored ? "are" : "can be"] wrenched in place and the maintenance panel [opened ? "can be" : "is"] screwed in place.") + . += "The anchoring bolts [anchored ? "are" : "can be"] wrenched in place and the maintenance panel [opened ? "can be" : "is"] screwed in place." else - to_chat(user, "The maintenance panel [opened ? "can be" : "is"] screwed in place.") + . += "The maintenance panel [opened ? "can be" : "is"] screwed in place." if((isobserver(user) && ckeys_allowed_to_scan[user.ckey]) || IsAdminGhost(user)) - to_chat(user, "You can scan this circuit.") + . += "You can scan this circuit." for(var/I in assembly_components) var/obj/item/integrated_circuit/IC = I - IC.external_examine(user) + . += IC.external_examine(user) if(opened) interact(user) diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm index 60b2d0486e..cec3e2348e 100644 --- a/code/modules/integrated_electronics/core/integrated_circuit.dm +++ b/code/modules/integrated_electronics/core/integrated_circuit.dm @@ -26,8 +26,8 @@ var/displayed_name = "" var/demands_object_input = FALSE var/can_input_object_when_closed = FALSE - - + + /* Integrated circuits are essentially modular machines. Each circuit has a specific function, and combining them inside Electronic Assemblies allows a creative player the means to solve many problems. Circuits are held inside an electronic assembly, and are wired using special tools. @@ -35,8 +35,8 @@ a creative player the means to solve many problems. Circuits are held inside an /obj/item/integrated_circuit/examine(mob/user) interact(user) - external_examine(user) . = ..() + . += external_examine(user) // Can be called via electronic_assembly/attackby() /obj/item/integrated_circuit/proc/additem(var/obj/item/I, var/mob/living/user) @@ -62,7 +62,7 @@ a creative player the means to solve many problems. Circuits are held inside an // This should be used when someone is examining from an 'outside' perspective, e.g. reading a screen or LED. /obj/item/integrated_circuit/proc/external_examine(mob/user) - any_examine(user) + return any_examine(user) /obj/item/integrated_circuit/proc/any_examine(mob/user) return diff --git a/code/modules/integrated_electronics/subtypes/memory.dm b/code/modules/integrated_electronics/subtypes/memory.dm index 93d800807a..34c36883d1 100644 --- a/code/modules/integrated_electronics/subtypes/memory.dm +++ b/code/modules/integrated_electronics/subtypes/memory.dm @@ -19,7 +19,7 @@ . = ..() /obj/item/integrated_circuit/memory/examine(mob/user) - ..() + . = ..() var/i for(i = 1, i <= outputs.len, i++) var/datum/integrated_io/O = outputs[i] @@ -30,7 +30,7 @@ data = "[d]" else if(!isnull(O.data)) data = O.data - to_chat(user, "\The [src] has [data] saved to address [i].") + . += "\The [src] has [data] saved to address [i]." /obj/item/integrated_circuit/memory/do_work() for(var/i = 1 to inputs.len) diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index 3975da18b6..6005709dde 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -23,7 +23,7 @@ if(displayed_name && displayed_name != name) shown_label = " labeled '[displayed_name]'" - to_chat(user, "There is \a [src][shown_label], which displays [!isnull(stuff_to_display) ? "'[stuff_to_display]'" : "nothing"].") + return "There is \a [src][shown_label], which displays [!isnull(stuff_to_display) ? "'[stuff_to_display]'" : "nothing"]." /obj/item/integrated_circuit/output/screen/do_work() var/datum/integrated_io/I = inputs[1] @@ -345,14 +345,13 @@ set_pin_data(IC_INPUT, 1, FALSE) /obj/item/integrated_circuit/output/led/external_examine(mob/user) - var/text_output = "There is " + . = "There is " if(name == displayed_name) - text_output += "\an [name]" + . += "\an [name]" else - text_output += "\an ["\improper[name]"] labeled '[displayed_name]'" - text_output += " which is currently [get_pin_data(IC_INPUT, 1) ? "lit *" : "unlit"]." - to_chat(user, text_output) + . += "\an ["\improper[name]"] labeled '[displayed_name]'" + . += " which is currently [get_pin_data(IC_INPUT, 1) ? "lit *" : "unlit"]." /obj/item/integrated_circuit/output/diagnostic_hud name = "AR interface" diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 7dc4fd17b9..06a988d109 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -25,18 +25,18 @@ var/list/allowed_books = list(/obj/item/book, /obj/item/spellbook, /obj/item/storage/book) //Things allowed in the bookcase /obj/structure/bookcase/examine(mob/user) - ..() + . = ..() if(!anchored) - to_chat(user, "The bolts on the bottom are unsecured.") + . += "The bolts on the bottom are unsecured." if(anchored) - to_chat(user, "It's secured in place with bolts.") + . += "It's secured in place with bolts." switch(state) if(0) - to_chat(user, "There's a small crack visible on the back panel.") + . += "There's a small crack visible on the back panel." if(1) - to_chat(user, "There's space inside for a wooden shelf.") + . += "There's space inside for a wooden shelf." if(2) - to_chat(user, "There's a small crack visible on the shelf.") + . += "There's a small crack visible on the shelf." /obj/structure/bookcase/Initialize(mapload) . = ..() diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm index 88d1248a28..295fc816e2 100644 --- a/code/modules/library/soapstone.dm +++ b/code/modules/library/soapstone.dm @@ -16,7 +16,7 @@ /obj/item/soapstone/examine(mob/user) . = ..() if(remaining_uses != -1) - to_chat(user, "It has [remaining_uses] uses left.") + . += "It has [remaining_uses] uses left." /obj/item/soapstone/afterattack(atom/target, mob/user, proximity) . = ..() @@ -193,7 +193,7 @@ update_icon() /obj/structure/chisel_message/examine(mob/user) - ..() + . = ..() ui_interact(user) /obj/structure/chisel_message/Destroy() diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 7a311c6f18..eb3e6a5b58 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -38,12 +38,12 @@ return ..() /obj/item/twohanded/kinetic_crusher/examine(mob/living/user) - ..() - to_chat(user, "Mark a large creature with the destabilizing force, then hit them in melee to do [force_wielded + detonation_damage] damage.") - to_chat(user, "Does [force_wielded + detonation_damage + backstab_bonus] damage if the target is backstabbed, instead of [force_wielded + detonation_damage].") + . = ..() + . += "Mark a large creature with the destabilizing force, then hit them in melee to do [force_wielded + detonation_damage] damage." + . += "Does [force_wielded + detonation_damage + backstab_bonus] damage if the target is backstabbed, instead of [force_wielded + detonation_damage]." for(var/t in trophies) var/obj/item/crusher_trophy/T = t - to_chat(user, "It has \a [T] attached, which causes [T.effect_desc()].") + . += "It has \a [T] attached, which causes [T.effect_desc()]." /obj/item/twohanded/kinetic_crusher/attackby(obj/item/I, mob/living/user) if(istype(I, /obj/item/crowbar)) @@ -201,8 +201,8 @@ var/denied_type = /obj/item/crusher_trophy /obj/item/crusher_trophy/examine(mob/living/user) - ..() - to_chat(user, "Causes [effect_desc()] when attached to a kinetic crusher.") + . = ..() + . += "Causes [effect_desc()] when attached to a kinetic crusher." /obj/item/crusher_trophy/proc/effect_desc() return "errors" diff --git a/code/modules/mining/equipment/lazarus_injector.dm b/code/modules/mining/equipment/lazarus_injector.dm index b2a2e3357d..f8b155cb9f 100644 --- a/code/modules/mining/equipment/lazarus_injector.dm +++ b/code/modules/mining/equipment/lazarus_injector.dm @@ -59,8 +59,8 @@ malfunctioning = 1 /obj/item/lazarus_injector/examine(mob/user) - ..() + . = ..() if(!loaded) - to_chat(user, "[src] is empty.") + . += "[src] is empty." if(malfunctioning) - to_chat(user, "The display on [src] seems to be flickering.") + . += "The display on [src] seems to be flickering." diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index c735c9d637..00ce37b79a 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -36,9 +36,9 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( update_icon() /obj/item/stack/marker_beacon/examine(mob/user) - ..() - to_chat(user, "Use in-hand to place a [singular_name].") - to_chat(user, "Alt-click to select a color. Current color is [picked_color].") + . = ..() + . += "Use in-hand to place a [singular_name]." + . += "Alt-click to select a color. Current color is [picked_color]." /obj/item/stack/marker_beacon/update_icon() icon_state = "[initial(icon_state)][lowertext(picked_color)]" @@ -93,8 +93,8 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( qdel(src) /obj/structure/marker_beacon/examine(mob/user) - ..() - to_chat(user, "Alt-click to select a color. Current color is [picked_color].") + . = ..() + . += "Alt-click to select a color. Current color is [picked_color]." /obj/structure/marker_beacon/update_icon() while(!picked_color || !GLOB.marker_beacon_colors[picked_color]) diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm index d6e99f7361..4429c8426f 100644 --- a/code/modules/mining/equipment/regenerative_core.dm +++ b/code/modules/mining/equipment/regenerative_core.dm @@ -59,6 +59,7 @@ to_chat(owner, "[src] breaks down as it tries to activate.") else owner.revive(full_heal = 1) + owner.log_message("[owner] used an implanted [src] to heal themselves! Keep fighting, it's just a flesh wound!", LOG_ATTACK, color="green") //Logging for implanted legion core use qdel(src) /obj/item/organ/regenerative_core/on_life() @@ -85,6 +86,21 @@ SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "self")) H.revive(full_heal = 1) qdel(src) + user.log_message("[user] used [src] to heal [H]! Wake the fuck up, Samurai!", LOG_ATTACK, color="green") //Logging for 'old' style legion core use, when clicking on a sprite of yourself or another. + +/obj/item/organ/regenerative_core/attack_self(mob/user) //Knouli's first hack! Allows for the use of the core in hand rather than needing to click on the target, yourself, to selfheal. Its a rip of the proc just above - but skips on distance check and only uses 'user' rather than 'target' + if(ishuman(user)) //Check if user is human, no need for distance check as it's self heal + var/mob/living/carbon/human/H = user //Set H to user rather than target + if(inert) //Inert cores are useless + to_chat(user, "[src] has decayed and can no longer be used to heal.") + return + else //Skip on check if the target to be healed is dead as, if you are dead, you're not going to be able to use it on yourself! + to_chat(user, "You start to smear [src] on yourself. It feels and smells disgusting, but you feel amazingly refreshed in mere moments.") + SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "self")) + H.revive(full_heal = 1) + qdel(src) + H.log_message("[H] used [src] to heal themselves! Making use of Knouli's sexy and intelligent use-in-hand proc!", LOG_ATTACK, color="green") //Logging for 'new' style legion core use, when using the core in-hand. + /obj/item/organ/regenerative_core/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) . = ..() diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 715ecc906a..356c4913b9 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -33,8 +33,8 @@ /obj/item/survivalcapsule/examine(mob/user) . = ..() get_template() - to_chat(user, "This capsule has the [template.name] stored.") - to_chat(user, template.description) + . += "This capsule has the [template.name] stored." + . += template.description /obj/item/survivalcapsule/attack_self() //Can't grab when capsule is New() because templates aren't loaded then diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index f97d3612a8..f46f4f785c 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -14,7 +14,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) /obj/item/extraction_pack/examine() . = ..() - usr.show_message("It has [uses_left] use\s remaining.", 1) + . += "It has [uses_left] use\s remaining." /obj/item/extraction_pack/attack_self(mob/user) var/list/possible_beacons = list() diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index fde856c4fb..054103e8dc 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -645,10 +645,10 @@ total_mass_on = 5 /obj/item/melee/transforming/cleaving_saw/examine(mob/user) - ..() - to_chat(user, "It is [active ? "open, and will cleave enemies in a wide arc":"closed, and can be used for rapid consecutive attacks that cause beastly enemies to bleed"].
    \ + . = ..() + . += "It is [active ? "open, and will cleave enemies in a wide arc":"closed, and can be used for rapid consecutive attacks that cause beastly enemies to bleed"].
    \ Both modes will build up existing bleed effects, doing a burst of high damage if the bleed is built up high enough.
    \ - Transforming it immediately after an attack causes the next attack to come out faster.
    ") + Transforming it immediately after an attack causes the next attack to come out faster.
    " /obj/item/melee/transforming/cleaving_saw/suicide_act(mob/user) user.visible_message("[user] is [active ? "closing [src] on [user.p_their()] neck" : "opening [src] into [user.p_their()] chest"]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -1073,8 +1073,8 @@ var/friendly_fire_check = FALSE //if the blasts we make will consider our faction against the faction of hit targets /obj/item/hierophant_club/examine(mob/user) - ..() - to_chat(user, "The[beacon ? " beacon is not currently":"re is a beacon"] attached.") + . = ..() + . += "The[beacon ? " beacon is not currently":"re is a beacon"] attached." /obj/item/hierophant_club/suicide_act(mob/living/user) say("Xverwpsgexmrk...", forced = "hierophant club suicide") diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index d0232fc4f0..d98f00ede7 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -181,8 +181,8 @@ GLOBAL_LIST_EMPTY(silo_access_logs) flick("silo_active", src) /obj/machinery/ore_silo/examine(mob/user) - ..() - to_chat(user, "[src] can be linked to techfabs, circuit printers and protolathes with a multitool.") + . = ..() + . += "[src] can be linked to techfabs, circuit printers and protolathes with a multitool." /datum/ore_silo_log var/name // for VV diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 5a48538161..a8e867cef0 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -260,8 +260,8 @@ ..() /obj/item/card/mining_point_card/examine(mob/user) - ..() - to_chat(user, "There's [points] point\s on the card.") + . = ..() + . += "There's [points] point\s on the card." ///Conscript kit /obj/item/card/mining_access_card diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 997b117b25..0c8aef51a8 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -68,22 +68,22 @@ check_friendly_fire = 0 /mob/living/simple_animal/hostile/mining_drone/examine(mob/user) - ..() + . = ..() var/t_He = p_they(TRUE) var/t_him = p_them() var/t_s = p_s() if(health < maxHealth) if(health >= maxHealth * 0.5) - to_chat(user, "[t_He] look[t_s] slightly dented.") + . += "[t_He] look[t_s] slightly dented." else - to_chat(user, "[t_He] look[t_s] severely dented!") - to_chat(user, "Using a mining scanner on [t_him] will instruct [t_him] to drop stored ore. [max(0, LAZYLEN(contents) - 1)] Stored Ore\n\ - Field repairs can be done with a welder.") + . += "[t_He] look[t_s] severely dented!" + . += "Using a mining scanner on [t_him] will instruct [t_him] to drop stored ore. [max(0, LAZYLEN(contents) - 1)] Stored Ore\n\ + Field repairs can be done with a welder." if(stored_gun && stored_gun.max_mod_capacity) - to_chat(user, "[stored_gun.get_remaining_mod_capacity()]% mod capacity remaining.") + . += "[stored_gun.get_remaining_mod_capacity()]% mod capacity remaining." for(var/A in stored_gun.get_modkits()) var/obj/item/borg/upgrade/modkit/M = A - to_chat(user, "There is \a [M] installed, using [M.cost]% capacity.") + . += "There is \a [M] installed, using [M.cost]% capacity." /mob/living/simple_animal/hostile/mining_drone/welder_act(mob/living/user, obj/item/I) . = TRUE diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 69361e8685..c3a33f36f5 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -348,9 +348,9 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ pixel_y = rand(0,8)-8 /obj/item/coin/examine(mob/user) - ..() + . = ..() if(value) - to_chat(user, "It's worth [value] credit\s.") + . += "It's worth [value] credit\s." /obj/item/coin/gold name = "gold coin" diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index b158815dac..3e9588d7dd 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -29,7 +29,7 @@ /obj/structure/ore_box/examine(mob/living/user) if(Adjacent(user) && istype(user)) show_contents(user) - . = ..() + return ..() /obj/structure/ore_box/attack_hand(mob/user) . = ..() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 8ea295c6c4..fbbd43bbe1 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -264,6 +264,7 @@ Works together with spawning an observer, noted above. */ /mob/proc/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE) + penalize = suiciding || penalize // suicide squad. if(!key || cmptext(copytext(key,1,2),"@") || (!special && SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, can_reenter_corpse) & COMPONENT_BLOCK_GHOSTING)) return //mob has no key, is an aghost or some component hijacked. stop_sound_channel(CHANNEL_HEARTBEAT) //Stop heartbeat sounds because You Are A Ghost Now @@ -861,9 +862,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp change_mob_type( /mob/living/carbon/human , null, null, TRUE) //always delmob, ghosts shouldn't be left lingering /mob/dead/observer/examine(mob/user) - ..() + . = ..() if(!invisibility) - to_chat(user, "It seems extremely obvious.") + . += "It seems extremely obvious." /mob/dead/observer/proc/set_invisibility(value) invisibility = value diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index d84ba0d7a1..aa3c209016 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -188,17 +188,17 @@ qdel(src) /obj/item/mmi/examine(mob/user) - ..() + . = ..() if(brainmob) var/mob/living/brain/B = brainmob if(!B.key || !B.mind || B.stat == DEAD) - to_chat(user, "The MMI indicates the brain is completely unresponsive.") + . += "The MMI indicates the brain is completely unresponsive." else if(!B.client) - to_chat(user, "The MMI indicates the brain is currently inactive; it might change.") + . += "The MMI indicates the brain is currently inactive; it might change." else - to_chat(user, "The MMI indicates the brain is active.") + . += "The MMI indicates the brain is active." /obj/item/mmi/relaymove(mob/user) return //so that the MMI won't get a warning about not being able to move if it tries to move diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index decf8d24eb..48e79a9050 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -157,7 +157,7 @@ -/obj/item/organ/brain/examine(mob/user)//BUG_PROBABLE_CAUSE to_chats changed to . += +/obj/item/organ/brain/examine(mob/user) . = ..() if(user.suiciding) diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index 4ad7793250..e2d6b095fe 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -161,7 +161,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) else msg = "[dead_message]" - to_chat(user, msg) + . += msg /obj/item/mmi/posibrain/Initialize() . = ..() diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index e66d70f492..1cea4a6e82 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -71,16 +71,16 @@ Leap(M) /obj/item/clothing/mask/facehugger/examine(mob/user) - ..() + . = ..() if(!real)//So that giant red text about probisci doesn't show up. return switch(stat) if(DEAD,UNCONSCIOUS) - to_chat(user, "[src] is not moving.") + . += "[src] is not moving." if(CONSCIOUS) - to_chat(user, "[src] seems to be active!") + . += "[src] seems to be active!" if (sterile) - to_chat(user, "It looks like the proboscis has been removed.") + . += "It looks like the proboscis has been removed." /obj/item/clothing/mask/facehugger/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index a8a69be0f1..21541e8c28 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -157,6 +157,11 @@ O.applyOrganDamage(amount, maximum) O.onDamage(amount, maximum) +/mob/living/carbon/proc/getFailingOrgans() + .=list() + for(var/obj/item/organ/O in internal_organs) + if(O.organ_flags & ORGAN_FAILING) + .+=O //////////////////////////////////////////// diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index 5634d21775..eba925a659 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -6,39 +6,39 @@ var/t_has = p_have() var/t_is = p_are() - var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src]!\n" + . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!") if (handcuffed) - msg += "[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!\n" + . += "[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!" if (head) - msg += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head. \n" + . += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head." if (wear_mask) - msg += "[t_He] [t_is] wearing [wear_mask.get_examine_string(user)] on [t_his] face.\n" + . += "[t_He] [t_is] wearing [wear_mask.get_examine_string(user)] on [t_his] face." if (wear_neck) - msg += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n" + . += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck." for(var/obj/item/I in held_items) if(!(I.item_flags & ABSTRACT)) - msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" + . += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))]." if (back) - msg += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back.\n" + . += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back." var/appears_dead = 0 if (stat == DEAD) appears_dead = 1 if(getorgan(/obj/item/organ/brain)) - msg += "[t_He] [t_is] limp and unresponsive, with no signs of life.\n" + . += "[t_He] [t_is] limp and unresponsive, with no signs of life." else if(get_bodypart(BODY_ZONE_HEAD)) - msg += "It appears that [t_his] brain is missing...\n" + . += "It appears that [t_his] brain is missing..." var/list/missing = get_missing_limbs() for(var/t in missing) if(t==BODY_ZONE_HEAD) - msg += "[t_His] [parse_zone(t)] is missing!\n" + . += "[t_His] [parse_zone(t)] is missing!" continue - msg += "[t_His] [parse_zone(t)] is missing!\n" + . += "[t_His] [parse_zone(t)] is missing!" - msg += "" + var/list/msg = list("") var/temp = getBruteLoss() if(!(user == src && src.hal_screwyhud == SCREWYHUD_HEALTHY)) //fake healthy if(temp) @@ -80,35 +80,37 @@ msg += "" + . += msg.Join("") + if(!appears_dead) if(stat == UNCONSCIOUS) - msg += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep.\n" + . += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep." else if(InCritical()) - msg += "[t_His] breathing is shallow and labored.\n" + . += "[t_His] breathing is shallow and labored." if(digitalcamo) - msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly unsimian manner.\n" + . += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly unsimian manner." if(combatmode) - msg += "[t_He] [t_is] visibly tense[resting ? "." : ", and [t_is] standing in combative stance."]\n" - msg += common_trait_examine() + . += "[t_He] [t_is] visibly tense[resting ? "." : ", and [t_is] standing in combative stance."]" + + var/trait_exam = common_trait_examine() + if (!isnull(trait_exam)) + . += trait_exam var/datum/component/mood/mood = src.GetComponent(/datum/component/mood) if(mood) switch(mood.shown_mood) if(-INFINITY to MOOD_LEVEL_SAD4) - msg += "[t_He] look[p_s()] depressed.\n" + . += "[t_He] look[p_s()] depressed." if(MOOD_LEVEL_SAD4 to MOOD_LEVEL_SAD3) - msg += "[t_He] look[p_s()] very sad.\n" + . += "[t_He] look[p_s()] very sad." if(MOOD_LEVEL_SAD3 to MOOD_LEVEL_SAD2) - msg += "[t_He] look[p_s()] a bit down.\n" + . += "[t_He] look[p_s()] a bit down." if(MOOD_LEVEL_HAPPY2 to MOOD_LEVEL_HAPPY3) - msg += "[t_He] look[p_s()] quite happy.\n" + . += "[t_He] look[p_s()] quite happy." if(MOOD_LEVEL_HAPPY3 to MOOD_LEVEL_HAPPY4) - msg += "[t_He] look[p_s()] very happy.\n" + . += "[t_He] look[p_s()] very happy." if(MOOD_LEVEL_HAPPY4 to INFINITY) - msg += "[t_He] look[p_s()] ecstatic.\n" - msg += "*---------*" - - to_chat(user, msg) - return msg \ No newline at end of file + . += "[t_He] look[p_s()] ecstatic." + . += "*---------*" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 7b0fb74f44..c9e2bbb29b 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -13,7 +13,7 @@ if(HAS_TRAIT(L, TRAIT_PROSOPAGNOSIA)) obscure_name = TRUE - var/msg = "*---------*\nThis is [!obscure_name ? name : "Unknown"]!\n" + . = list("*---------*\nThis is [!obscure_name ? name : "Unknown"]!") var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) @@ -22,11 +22,11 @@ var/mob/living/carbon/human/H = src var/datum/species/pref_species = H.dna.species if(get_visible_name() == "Unknown") // same as flavor text, but hey it works. - msg += "You can't make out what species they are.\n" + . += "You can't make out what species they are." else if(skipface) - msg += "You can't make out what species they are.\n" + . += "You can't make out what species they are." else - msg += "[t_He] [t_is] a [H.dna.custom_species ? H.dna.custom_species : pref_species.name]!\n" + . += "[t_He] [t_is] a [H.dna.custom_species ? H.dna.custom_species : pref_species.name]!" //uniform if(w_uniform && !(SLOT_W_UNIFORM in obscured)) @@ -37,121 +37,113 @@ if(U.attached_accessory) accessory_msg += " with [icon2html(U.attached_accessory, user)] \a [U.attached_accessory]" - msg += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg].\n" + . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg]." //head if(head) - msg += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head.\n" + . += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head." //suit/armor if(wear_suit) - msg += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)].\n" + . += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]." //suit/armor storage if(s_store && !(SLOT_S_STORE in obscured)) - msg += "[t_He] [t_is] carrying [s_store.get_examine_string(user)] on [t_his] [wear_suit.name].\n" + . += "[t_He] [t_is] carrying [s_store.get_examine_string(user)] on [t_his] [wear_suit.name]." //back if(back) - msg += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back.\n" + . += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back." //Hands for(var/obj/item/I in held_items) if(!(I.item_flags & ABSTRACT)) - msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" + . += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))]." //gloves if(gloves && !(SLOT_GLOVES in obscured)) - msg += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands.\n" + . += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands." else if(length(blood_DNA)) var/hand_number = get_num_arms(FALSE) if(hand_number) - msg += "[t_He] [t_has] [hand_number > 1 ? "" : "a"] blood-stained hand[hand_number > 1 ? "s" : ""]!\n" - - //handcuffed? + . += "[t_He] [t_has] [hand_number > 1 ? "" : "a"] blood-stained hand[hand_number > 1 ? "s" : ""]!" //handcuffed? if(handcuffed) if(istype(handcuffed, /obj/item/restraints/handcuffs/cable)) - msg += "[t_He] [t_is] [icon2html(handcuffed, user)] restrained with cable!\n" + . += "[t_He] [t_is] [icon2html(handcuffed, user)] restrained with cable!" else - msg += "[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!\n" + . += "[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!" //belt if(belt) - msg += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist.\n" + . += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist." //shoes if(shoes && !(SLOT_SHOES in obscured)) - msg += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet.\n" + . += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet." //mask if(wear_mask && !(SLOT_WEAR_MASK in obscured)) - msg += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face.\n" + . += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face." if(wear_neck && !(SLOT_NECK in obscured)) - msg += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n" + . += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck." //eyes if(!(SLOT_GLASSES in obscured)) if(glasses) - msg += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes.\n" + . += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes." else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES)) - msg += "[t_His] eyes are glowing an unnatural red!\n" + . += "[t_His] eyes are glowing an unnatural red!" //ears if(ears && !(SLOT_EARS in obscured)) - msg += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears.\n" + . += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears." //ID if(wear_id) - msg += "[t_He] [t_is] wearing [wear_id.get_examine_string(user)].\n" + . += "[t_He] [t_is] wearing [wear_id.get_examine_string(user)]." //Status effects - msg += status_effect_examines() + var/effects_exam = status_effect_examines() + if(!isnull(effects_exam)) + . += effects_exam //CIT CHANGES START HERE - adds genital details to examine text if(LAZYLEN(internal_organs)) for(var/obj/item/organ/genital/dicc in internal_organs) if(istype(dicc) && dicc.is_exposed()) - msg += "[dicc.desc]\n" + . += "[dicc.desc]" - msg += attempt_vr(src,"examine_bellies",args) //vore Code + var/cursed_stuff = attempt_vr(src,"examine_bellies",args) //vore Code + if(!isnull(cursed_stuff)) + . += cursed_stuff //END OF CIT CHANGES //Jitters switch(jitteriness) if(300 to INFINITY) - msg += "[t_He] [t_is] convulsing violently!\n" + . += "[t_He] [t_is] convulsing violently!" if(200 to 300) - msg += "[t_He] [t_is] extremely jittery.\n" + . += "[t_He] [t_is] extremely jittery." if(100 to 200) - msg += "[t_He] [t_is] twitching ever so slightly.\n" + . += "[t_He] [t_is] twitching ever so slightly." var/appears_dead = 0 if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH))) appears_dead = 1 if(suiciding) - msg += "[t_He] appear[p_s()] to have committed suicide... there is no hope of recovery.\n" + . += "[t_He] appear[p_s()] to have committed suicide... there is no hope of recovery." if(hellbound) - msg += "[t_His] soul seems to have been ripped out of [t_his] body. Revival is impossible.\n" - msg += "[t_He] [t_is] limp and unresponsive; there are no signs of life" - if(getorgan(/obj/item/organ/brain)) - if(!key) - var/foundghost = 0 - if(mind) - for(var/mob/dead/observer/G in GLOB.player_list) - if(G.mind == mind) - foundghost = 1 - if (G.can_reenter_corpse == 0) - foundghost = 0 - break - if(!foundghost) - msg += " and [t_his] soul has departed" - msg += "...\n" + . += "[t_His] soul seems to have been ripped out of [t_his] body. Revival is impossible." + if(getorgan(/obj/item/organ/brain) && !key && !get_ghost(FALSE, TRUE)) + . += "[t_He] [t_is] limp and unresponsive; there are no signs of life and [t_his] soul has departed..." + else + . += "[t_He] [t_is] limp and unresponsive; there are no signs of life..." if(get_bodypart(BODY_ZONE_HEAD) && !getorgan(/obj/item/organ/brain)) - msg += "It appears that [t_his] brain is missing...\n" + . += "It appears that [t_his] brain is missing..." var/temp = getBruteLoss() //no need to calculate each of these twice - msg += "" //Everything below gets this span + var/list/msg = list() var/list/missing = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) var/list/disabled = list() @@ -169,8 +161,7 @@ if(!(BP.get_damage(include_stamina = FALSE) >= BP.max_damage)) //Stamina is disabling the limb damage_text = "limp and lifeless" else - var/more_brute = BP.brute_dam >= BP.burn_dam - damage_text = more_brute ? "broken and mangled" : "burnt and blistered" + damage_text = (BP.brute_dam >= BP.burn_dam) ? BP.heavy_brute_msg : BP.heavy_burn_msg msg += "[capitalize(t_his)] [BP.name] is [damage_text]!\n" //stores missing limbs @@ -281,11 +272,11 @@ msg += "[t_He] [t_is] a shitfaced, slobbering wreck.\n" if(reagents.has_reagent("astral")) - msg += "[t_He] have wild, spacey eyes" + msg += "[t_He] has wild, spacey eyes" if(mind) - msg += " and have a strange, abnormal look to them.\n" + msg += " and they have a strange, abnormal look to them.\n" else - msg += " and don't look like they're all there.\n" + msg += " and they don't look like they're all there.\n" if(isliving(user)) var/mob/living/L = user @@ -334,7 +325,13 @@ if(digitalcamo) msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly inhuman manner.\n" - msg += common_trait_examine() + + if (length(msg)) + . += "[msg.Join("")]" + + var/trait_exam = common_trait_examine() + if (!isnull(trait_exam)) + . += trait_exam var/traitstring = get_trait_string() if(ishuman(user)) @@ -345,28 +342,25 @@ if(perpname) var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.general) if(R) - msg += "Rank: [R.fields["rank"]]
    " - msg += "\[Front photo\] " - msg += "\[Side photo\]
    " + . += "Rank: [R.fields["rank"]]\n\[Front photo\]\[Side photo\]" if(istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(CIH, /obj/item/organ/cyberimp/eyes/hud/medical)) var/cyberimp_detect for(var/obj/item/organ/cyberimp/CI in internal_organs) if(CI.status == ORGAN_ROBOTIC && !CI.syndicate_implant) - cyberimp_detect += "[name] is modified with a [CI.name].
    " + cyberimp_detect += "[name] is modified with a [CI.name]." if(cyberimp_detect) - msg += "Detected cybernetic modifications:
    " - msg += cyberimp_detect + . += "Detected cybernetic modifications:" + . += cyberimp_detect if(R) var/health_r = R.fields["p_stat"] - msg += "\[[health_r]\]" + . += "\[[health_r]\]" health_r = R.fields["m_stat"] - msg += "\[[health_r]\]
    " + . += "\[[health_r]\]" R = find_record("name", perpname, GLOB.data_core.medical) if(R) - msg += "\[Medical evaluation\]
    " + . += "\[Medical evaluation\]" if(traitstring) - msg += "Detected physiological traits:
    " - msg += "[traitstring]
    " + . += "Detected physiological traits:\n[traitstring]" @@ -379,25 +373,22 @@ if(R) criminal = R.fields["criminal"] - msg += "Criminal status: \[[criminal]\]\n" - msg += "Security record: \[View\] " - msg += "\[Add crime\] " - msg += "\[View comment log\] " - msg += "\[Add comment\]\n" + . += jointext(list("Criminal status: \[[criminal]\]", + "Security record: \[View\]", + "\[Add crime\]", + "\[View comment log\]", + "\[Add comment\]"), "") else if(isobserver(user) && traitstring) - msg += "Traits: [traitstring]
    " + . += "Traits: [traitstring]" if(print_flavor_text()) if(get_visible_name() == "Unknown") //Are we sure we know who this is? Don't show flavor text unless we can recognize them. Prevents certain metagaming with impersonation. - msg += "...?
    " + . += "...?" else if(skipface) //Sometimes we're not unknown, but impersonating someone in a hardsuit, let's not reveal our flavor text then either. - msg += "...?
    " + . += "...?" else - msg += "[print_flavor_text()]\n" - msg += "*---------*
    " - - to_chat(user, msg) - return msg + . += "[print_flavor_text()]" + . += "*---------*
    " /mob/living/proc/status_effect_examines(pronoun_replacement) //You can include this in any mob's examine() to show the examine texts of status effects! var/list/dat = list() diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm index d264f11b73..02163eaaed 100644 --- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm @@ -1,9 +1,8 @@ /datum/species/insect name = "Anthromorphic Insect" id = "insect" - say_mod = "flutters" default_color = "00FF00" - species_traits = list(LIPS,NOEYES,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR,WINGCOLOR) + species_traits = list(LIPS,EYECOLOR,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR,WINGCOLOR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG) mutant_bodyparts = list("mam_ears", "mam_snout", "mam_tail", "taur", "insect_wings", "mam_snouts", "insect_fluff","horns") default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", @@ -12,54 +11,36 @@ attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect - liked_food = VEGETABLES | DAIRY - disliked_food = FRUIT | GROSS - toxic_food = MEAT | RAW - mutanteyes = /obj/item/organ/eyes/insect + liked_food = MEAT | FRUIT + disliked_food = TOXIC should_draw_citadel = TRUE - exotic_bloodtype = "BUG" -/datum/species/insect/on_species_gain(mob/living/carbon/C) +/datum/species/insect/spec_death(gibbed, mob/living/carbon/human/H) + if(H) + stop_wagging_tail(H) + +/datum/species/insect/spec_stun(mob/living/carbon/human/H,amount) + if(H) + stop_wagging_tail(H) . = ..() - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(!H.dna.features["insect_wings"]) - H.dna.features["insect_wings"] = "[(H.client && H.client.prefs && LAZYLEN(H.client.prefs.features) && H.client.prefs.features["insect_wings"]) ? H.client.prefs.features["insect_wings"] : "None"]" - handle_mutant_bodyparts(H) -/datum/species/insect/random_name(gender,unique,lastname) - if(unique) - return random_unique_moth_name() +/datum/species/insect/can_wag_tail(mob/living/carbon/human/H) + return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts) - var/randname = moth_name() +/datum/species/insect/is_wagging_tail(mob/living/carbon/human/H) + return ("mam_waggingtail" in mutant_bodyparts) - if(lastname) - randname += " [lastname]" +/datum/species/insect/start_wagging_tail(mob/living/carbon/human/H) + if("mam_tail" in mutant_bodyparts) + mutant_bodyparts -= "mam_tail" + mutant_bodyparts |= "mam_waggingtail" + H.update_body() - return randname +/datum/species/insect/stop_wagging_tail(mob/living/carbon/human/H) + if("mam_waggingtail" in mutant_bodyparts) + mutant_bodyparts -= "mam_waggingtail" + mutant_bodyparts |= "mam_tail" + H.update_body() -/datum/species/insect/handle_fire(mob/living/carbon/human/H, no_protection = FALSE) - ..() - if(H.dna.features["insect_wings"] != "Burnt Off" && H.dna.features["insect_wings"] != "None" && H.bodytemperature >= 800 && H.fire_stacks > 0) //do not go into the extremely hot light. you will not survive - to_chat(H, "Your precious wings burn to a crisp!") - if(H.dna.features["insect_wings"] != "None") - H.dna.features["insect_wings"] = "Burnt Off" - handle_mutant_bodyparts(H) - -/datum/species/insect/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - . = ..() - if(chem.id == "pestkiller") - H.adjustToxLoss(3) - H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) - -/datum/species/insect/check_weakness(obj/item/weapon, mob/living/attacker) - if(istype(weapon, /obj/item/melee/flyswatter)) - return 9 //flyswatters deal 10x damage to insects - return 0 - -/datum/species/insect/space_move(mob/living/carbon/human/H) - . = ..() - if(H.loc && !isspaceturf(H.loc) && (H.dna.features["insect_wings"] != "Burnt Off" && H.dna.features["insect_wings"] != "None")) - var/datum/gas_mixture/current = H.loc.return_air() - if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible - return TRUE +/datum/species/insect/qualifies_for_rank(rank, list/features) + return TRUE \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 5e22c30292..ae69d5dc90 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -126,7 +126,7 @@ There are several things that need to be remembered: var/alt_worn = U.alternate_worn_icon if(!U.force_alternate_icon && U.mutantrace_variation && U.suit_style == DIGITIGRADE_SUIT_STYLE) - alt_worn = 'modular_citadel/icons/mob/uniform_digi.dmi' + alt_worn = 'icons/mob/uniform_digi.dmi' var/mutable_appearance/uniform_overlay @@ -306,7 +306,7 @@ There are several things that need to be remembered: update_observer_view(shoes,1) if(S.mutantrace_variation) if(S.adjusted == ALT_STYLE) - S.alternate_worn_icon = 'modular_citadel/icons/mob/digishoes.dmi' + S.alternate_worn_icon = 'icons/mob/feet_digi.dmi' else S.alternate_worn_icon = null var/t_state = shoes.item_state @@ -352,7 +352,7 @@ There are several things that need to be remembered: var/obj/item/clothing/head/H = head if(H.mutantrace_variation) if(H.muzzle_var == ALT_STYLE) - H.alternate_worn_icon = 'modular_citadel/icons/mob/muzzled_helmet.dmi' + H.alternate_worn_icon = 'icons/mob/head_muzzled.dmi' else H.alternate_worn_icon = null @@ -412,17 +412,17 @@ There are several things that need to be remembered: if(!item_level_support && !S.force_alternate_icon) if(S.mutantrace_variation) //Just make sure we've got this checked too if(S.taurmode == NOT_TAURIC && S.adjusted == ALT_STYLE) //are we not a taur, but we have Digitigrade legs? Run this check first, then. - S.alternate_worn_icon = 'modular_citadel/icons/mob/suit_digi.dmi' + S.alternate_worn_icon = 'icons/mob/suit_digi.dmi' else S.alternate_worn_icon = null if(S.tauric == TRUE) //Are we a suit with tauric mode possible? if(S.taurmode == SNEK_TAURIC) - S.alternate_worn_icon = 'modular_citadel/icons/mob/taur_naga.dmi' + S.alternate_worn_icon = 'icons/mob/taur_naga.dmi' if(S.taurmode == PAW_TAURIC) - S.alternate_worn_icon = 'modular_citadel/icons/mob/taur_canine.dmi' + S.alternate_worn_icon = 'icons/mob/taur_canine.dmi' if(S.taurmode == NOT_TAURIC && S.adjusted == ALT_STYLE) - S.alternate_worn_icon = 'modular_citadel/icons/mob/suit_digi.dmi' + S.alternate_worn_icon = 'icons/mob/suit_digi.dmi' else if(S.taurmode == NOT_TAURIC && S.adjusted == NORMAL_STYLE) S.alternate_worn_icon = null @@ -470,7 +470,7 @@ There are several things that need to be remembered: remove_overlay(FACEMASK_LAYER) if(M.mutantrace_variation) if(M.muzzle_var == ALT_STYLE) - M.alternate_worn_icon = 'modular_citadel/icons/mob/muzzled_mask.dmi' + M.alternate_worn_icon = 'icons/mob/mask_muzzled.dmi' else M.alternate_worn_icon = null diff --git a/code/modules/mob/living/carbon/say.dm b/code/modules/mob/living/carbon/say.dm index 452c8f8b78..30c962f9a5 100644 --- a/code/modules/mob/living/carbon/say.dm +++ b/code/modules/mob/living/carbon/say.dm @@ -17,18 +17,4 @@ if(T) . = T.could_speak_in_language(dt) else - . = initial(dt.flags) & TONGUELESS_SPEECH - -/mob/living/carbon/hear_intercept(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) - . = ..() - if(!client) - return - for(var/T in get_traumas()) - var/datum/brain_trauma/trauma = T - message = trauma.on_hear(message, speaker, message_language, raw_message, radio_freq) - - if (src.mind.has_antag_datum(/datum/antagonist/traitor)) - message = GLOB.syndicate_code_phrase_regex.Replace(message, "$1") - message = GLOB.syndicate_code_response_regex.Replace(message, "$1") - - return message + . = initial(dt.flags) & TONGUELESS_SPEECH \ No newline at end of file diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index df711a6dca..6c1a2cfec9 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -58,9 +58,9 @@ message = "coughs!" emote_type = EMOTE_AUDIBLE -/datum/emote/living/cough/can_run_emote(mob/user, status_check = TRUE) +/datum/emote/living/cough/can_run_emote(mob/user, status_check = TRUE , intentional) . = ..() - if(user.reagents && (user.reagents.get_reagent("menthol") || user.reagents.get_reagent("peppermint_patty"))) + if(HAS_TRAIT(user, TRAIT_SOOTHED_THROAT)) return FALSE /datum/emote/living/dance diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 1835d2464a..cc0e7c6cda 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -36,7 +36,7 @@ var/can_be_carded = TRUE var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list(), "Camera"=list(), "Burglar"=list()) var/viewalerts = 0 - var/icon/holo_icon//Default is assigned when AI is created. + var/icon/holo_icon//Female is assigned when AI is created. var/obj/mecha/controlled_mech //For controlled_mech a mech, to determine whether to relaymove or use the AI eye. var/radio_enabled = TRUE //Determins if a carded AI can speak with its built in radio or not. radiomod = ";" //AIs will, by default, state their laws on the internal radio. @@ -130,7 +130,7 @@ set_core_display_icon() - holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"default")) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"female")) spark_system = new /datum/effect_system/spark_spread() spark_system.set_up(5, 0, src) @@ -670,10 +670,13 @@ holo_icon = getHologramIcon(icon(icon_list[input], input)) else var/list/icon_list = list( - "default" = 'icons/mob/ai.dmi', + "female" = 'icons/mob/ai.dmi', + "male" = 'icons/mob/ai.dmi', "floating face" = 'icons/mob/ai.dmi', + "green face" = 'icons/mob/ai.dmi', "xeno queen" = 'icons/mob/alien.dmi', - "horror" = 'icons/mob/ai.dmi' + "horror" = 'icons/mob/ai.dmi', + "creature" = 'icons/mob/ai.dmi' ) input = input("Please select a hologram:") as null|anything in icon_list diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index fb345e10ba..5e40a5a7eb 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -1,26 +1,24 @@ /mob/living/silicon/ai/examine(mob/user) - var/msg = "*---------*\nThis is [icon2html(src, user)] [src]!\n" + . = list("*---------*\nThis is [icon2html(src, user)] [src]!") if (stat == DEAD) - msg += "It appears to be powered-down.\n" + . += "It appears to be powered-down." else - msg += "" + . += "" if (getBruteLoss()) if (getBruteLoss() < 30) - msg += "It looks slightly dented.\n" + . += "It looks slightly dented." else - msg += "It looks severely dented!\n" + . += "It looks severely dented!" if (getFireLoss()) if (getFireLoss() < 30) - msg += "It looks slightly charred.\n" + . += "It looks slightly charred." else - msg += "Its casing is melted and heat-warped!\n" - msg += "" + . += "Its casing is melted and heat-warped!" + . += "" if(deployed_shell) - msg += "The wireless networking light is blinking.\n" + . += "The wireless networking light is blinking." else if (!shunted && !client) - msg += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem...\n" - msg += "*---------*" + . += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem..." + . += "*---------*" - to_chat(user, msg) - ..() - return msg \ No newline at end of file + . += ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/examine.dm b/code/modules/mob/living/silicon/examine.dm index c26af70d4a..37107f2d9c 100644 --- a/code/modules/mob/living/silicon/examine.dm +++ b/code/modules/mob/living/silicon/examine.dm @@ -1,4 +1,6 @@ /mob/living/silicon/examine(mob/user) //Displays a silicon's laws to ghosts + . = ..() if(laws && isobserver(user)) - to_chat(user, "[src] has the following laws:") - laws.show_laws(user) \ No newline at end of file + . += "[src] has the following laws:" + for(var/law in laws.get_law_list(include_zeroth = TRUE)) + . += law \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 371e92413b..7ec63cf415 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -269,8 +269,8 @@ return TRUE /mob/living/silicon/pai/examine(mob/user) - ..() - to_chat(user, "A personal AI in holochassis mode. Its master ID string seems to be [master].") + . = ..() + . += "A personal AI in holochassis mode. Its master ID string seems to be [master]." /mob/living/silicon/pai/Life() if(stat == DEAD) diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index 49fb5e416c..63b275a416 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -1,55 +1,53 @@ /mob/living/silicon/robot/examine(mob/user) - var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src], a [src.module.name] unit!\n" + . = list("*---------*\nThis is [icon2html(src, user)] \a [src], a [src.module.name] unit!") if(desc) - msg += "[desc]\n" + . += "[desc]" var/obj/act_module = get_active_held_item() if(act_module) - msg += "It is holding [icon2html(act_module, user)] \a [act_module].\n" - msg += status_effect_examines() - msg += "" - if (src.getBruteLoss()) - if (src.getBruteLoss() < maxHealth*0.5) - msg += "It looks slightly dented.\n" + . += "It is holding [icon2html(act_module, user)] \a [act_module]." + var/effects_exam = status_effect_examines() + if(!isnull(effects_exam)) + . += effects_exam + if (getBruteLoss()) + if (getBruteLoss() < maxHealth*0.5) + . += "It looks slightly dented." else - msg += "It looks severely dented!\n" + . += "It looks severely dented!" if (getFireLoss() || getToxLoss()) var/overall_fireloss = getFireLoss() + getToxLoss() if (overall_fireloss < maxHealth * 0.5) - msg += "It looks slightly charred.\n" + . += "It looks slightly charred." else - msg += "It looks severely burnt and heat-warped!\n" - if (src.health < -maxHealth*0.5) - msg += "It looks barely operational.\n" - if (src.fire_stacks < 0) - msg += "It's covered in water.\n" - else if (src.fire_stacks > 0) - msg += "It's coated in something flammable.\n" - msg += "" + . += "It looks slightly charred." + if (health < -maxHealth*0.5) + . += "It looks barely operational." + if (fire_stacks < 0) + . += "It's covered in water." + else if (fire_stacks > 0) + . += "It's coated in something flammable." if(opened) - msg += "Its cover is open and the power cell is [cell ? "installed" : "missing"].\n" + . += "Its cover is open and the power cell is [cell ? "installed" : "missing"]." else - msg += "Its cover is closed[locked ? "" : ", and looks unlocked"].\n" + . += "Its cover is closed[locked ? "" : ", and looks unlocked"]." if(cell && cell.charge <= 0) - msg += "Its battery indicator is blinking red!\n" + . += "Its battery indicator is blinking red!" if(is_servant_of_ratvar(src) && get_dist(user, src) <= 1 && !stat) //To counter pseudo-stealth by using headlamps - msg += "Its eyes are glowing a blazing yellow!\n" + . += "Its eyes are glowing a blazing yellow!" switch(stat) if(CONSCIOUS) if(shell) - msg += "It appears to be an [deployed ? "active" : "empty"] AI shell.\n" + . += "It appears to be an [deployed ? "active" : "empty"] AI shell." else if(!client) - msg += "It appears to be in stand-by mode.\n" //afk + . += "It appears to be in stand-by mode." //afk if(UNCONSCIOUS) - msg += "It doesn't seem to be responding.\n" + . += "It doesn't seem to be responding." if(DEAD) - msg += "It looks like its system is corrupted and requires a reset.\n" - msg += "*---------*" + . += "It looks like its system is corrupted and requires a reset." + . += "*---------*" - to_chat(user, msg) - ..() - return msg + . += ..() diff --git a/code/modules/mob/living/simple_animal/astral.dm b/code/modules/mob/living/simple_animal/astral.dm index 9bac53ef22..2aafedb149 100644 --- a/code/modules/mob/living/simple_animal/astral.dm +++ b/code/modules/mob/living/simple_animal/astral.dm @@ -57,3 +57,9 @@ return to_chat(A, "[src] projects into your mind, \"[message]\"") log_game("FERMICHEM: [src] has astrally transmitted [message] into [A]") + +//Delete the mob if there's no mind! Pay that mob no mind. +/mob/living/simple_animal/astral/Life() + if(!mind) + qdel(src) + . = ..() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index a5943aa0e6..105cdaf5b0 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -37,6 +37,7 @@ var/obj/item/paicard/paicard // Inserted pai card. var/allow_pai = 1 // Are we even allowed to insert a pai card. var/bot_name + var/oil_spill_type = /obj/effect/decal/cleanable/oil var/list/player_access = list() //Additonal access the bots gets when player controlled var/emagged = FALSE @@ -206,19 +207,19 @@ return TRUE /mob/living/simple_animal/bot/examine(mob/user) - ..() + . = ..() if(health < maxHealth) if(health > maxHealth/3) - to_chat(user, "[src]'s parts look loose.") + . += "[src]'s parts look loose." else - to_chat(user, "[src]'s parts look very loose!") + . += "[src]'s parts look very loose!" else - to_chat(user, "[src] is in pristine condition.") + . += "[src] is in pristine condition." /mob/living/simple_animal/bot/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - if(amount>0 && prob(10)) - new /obj/effect/decal/cleanable/oil(loc) . = ..() + if(. && prob(10)) + new oil_spill_type(loc) /mob/living/simple_animal/bot/updatehealth() ..() diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 1c19cd82a1..724abea214 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -16,6 +16,7 @@ bot_core_type = /obj/machinery/bot_core/honkbot window_id = "autohonk" window_name = "Honkomatic Bike Horn Unit v1.0.7" + oil_spill_type = /obj/effect/decal/cleanable/oil/slippery //slip and slide fun for the whole family data_hud_type = DATA_HUD_SECURITY_BASIC // show jobs path_image_color = "#FF69B4" diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 3cc8822d02..b7067f8904 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -69,18 +69,13 @@ /mob/living/simple_animal/hostile/construct/examine(mob/user) var/t_He = p_they(TRUE) var/t_s = p_s() - var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src]!\n" - msg += "[desc]\n" + . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!\n[desc]") if(health < maxHealth) - msg += "" if(health >= maxHealth/2) - msg += "[t_He] look[t_s] slightly dented.\n" + . += "[t_He] look[t_s] slightly dented." else - msg += "[t_He] look[t_s] severely dented!\n" - msg += "" - msg += "*---------*" - - to_chat(user, msg) + . += "[t_He] look[t_s] severely dented!" + . += "*---------*" /mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/M) if(isconstruct(M)) //is it a construct? diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 3a21a04bf9..58d8a3ccca 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -310,6 +310,7 @@ emote_see = list("looks at you eagerly for pets!", "wiggles enthusiastically.") gold_core_spawnable = NO_SPAWN var/pseudo_death = FALSE + var/mob/living/carbon/human/origin /mob/living/simple_animal/pet/cat/custom_cat/death() if (pseudo_death == TRUE) //secret cat chem 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 d7d4d1b9f2..387973b979 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -165,44 +165,43 @@ /mob/living/simple_animal/drone/examine(mob/user) - var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src]!\n" + . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!") //Hands for(var/obj/item/I in held_items) if(!(I.item_flags & ABSTRACT)) - msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" + . += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))]." //Internal storage if(internal_storage && !(internal_storage.item_flags & ABSTRACT)) - msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n" + . += "It is holding [internal_storage.get_examine_string(user)] in its internal storage." //Cosmetic hat - provides no function other than looks if(head && !(head.item_flags & ABSTRACT)) - msg += "It is wearing [head.get_examine_string(user)] on its head.\n" + . += "It is wearing [head.get_examine_string(user)] on its head." //Braindead if(!client && stat != DEAD) - msg += "Its status LED is blinking at a steady rate.\n" + . += "Its status LED is blinking at a steady rate." //Hacked if(hacked) - msg += "Its display is glowing red!\n" + . += "Its display is glowing red!" //Damaged if(health != maxHealth) if(health > maxHealth * 0.33) //Between maxHealth and about a third of maxHealth, between 30 and 10 for normal drones - msg += "Its screws are slightly loose.\n" + . += "Its screws are slightly loose." else //otherwise, below about 33% - msg += "Its screws are very loose!\n" + . += "Its screws are very loose!" //Dead if(stat == DEAD) if(client) - msg += "A message repeatedly flashes on its display: \"REBOOT -- REQUIRED\".\n" + . += "A message repeatedly flashes on its display: \"REBOOT -- REQUIRED\"." else - msg += "A message repeatedly flashes on its display: \"ERROR -- OFFLINE\".\n" - msg += "*---------*" - to_chat(user, msg) + . += "A message repeatedly flashes on its display: \"ERROR -- OFFLINE\"." + . += "*---------*" /mob/living/simple_animal/drone/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) //Secbots won't hunt maintenance drones. 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 52a007e24c..b4865c4337 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm @@ -18,18 +18,16 @@ /mob/living/simple_animal/hostile/guardian/dextrous/examine(mob/user) if(dextrous) - var/msg = "*---------*\nThis is [icon2html(src)] \a [src]!\n" - msg += "[desc]\n" + . = list("*---------*\nThis is [icon2html(src)] \a [src]!\n[desc]") for(var/obj/item/I in held_items) if(!(I.item_flags & ABSTRACT)) - msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" + . += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))]." if(internal_storage && !(internal_storage.item_flags & ABSTRACT)) - msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n" - msg += "*---------*" - to_chat(user, msg) + . += "It is holding [internal_storage.get_examine_string(user)] in its internal storage." + . += "*---------*" else - ..() + return ..() /mob/living/simple_animal/hostile/guardian/dextrous/Recall(forced) if(!summoner || loc == summoner || (cooldown > world.time && !forced)) diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm index 531c513819..b1af34eb02 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm @@ -90,6 +90,6 @@ detonate(user) /obj/guardian_bomb/examine(mob/user) - stored_obj.examine(user) + . = stored_obj.examine(user) if(get_dist(user,src)<=2) - to_chat(user, "It glows with a strange light!") + . += "It glows with a strange light!" diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index c7b46e6aed..89c4f70f69 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -77,11 +77,9 @@ /mob/living/simple_animal/hostile/poison/bees/examine(mob/user) - ..() - + . = ..() if(!beehome) - to_chat(user, "This bee is homeless!") - + . += "This bee is homeless!" /mob/living/simple_animal/hostile/poison/bees/proc/generate_bee_visuals() cut_overlays() @@ -295,7 +293,7 @@ forceMove(beehome.drop_location()) else ..() - + /mob/living/simple_animal/hostile/poison/bees/short desc = "These bees seem unstable and won't survive for long." diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm index d31af79c19..2b5b5236ed 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm @@ -130,7 +130,7 @@ qdel(copy) /mob/living/simple_animal/hostile/boss/paper_wizard/copy/examine(mob/user) - ..() + . = ..() qdel(src) //I see through your ruse! //fancy effects diff --git a/code/modules/mob/living/simple_animal/hostile/illusion.dm b/code/modules/mob/living/simple_animal/hostile/illusion.dm index f78f7f7d82..5ee2549054 100644 --- a/code/modules/mob/living/simple_animal/hostile/illusion.dm +++ b/code/modules/mob/living/simple_animal/hostile/illusion.dm @@ -44,9 +44,8 @@ /mob/living/simple_animal/hostile/illusion/examine(mob/user) if(parent_mob) - parent_mob.examine(user) - else - return ..() + return parent_mob.examine(user) + return ..() /mob/living/simple_animal/hostile/illusion/AttackingTarget() 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 b9102cf220..de5732941f 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -373,8 +373,8 @@ Difficulty: Very Hard /obj/machinery/anomalous_crystal/examine(mob/user) . = ..() if(isobserver(user)) - to_chat(user, observer_desc) - to_chat(user, "It is activated by [activation_method].") + . += observer_desc + . += "It is activated by [activation_method]." /obj/machinery/anomalous_crystal/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode) ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index dbaa8ab5fa..514edf896b 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -38,11 +38,11 @@ var/static/mutable_appearance/cap_dead /mob/living/simple_animal/hostile/mushroom/examine(mob/user) - ..() + . = ..() if(health >= maxHealth) - to_chat(user, "It looks healthy.") + . += "It looks healthy." else - to_chat(user, "It looks like it's been roughed up.") + . += "It looks like it's been roughed up." /mob/living/simple_animal/hostile/mushroom/Life() ..() diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 5e2798cc8e..5f9c8700bd 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -119,9 +119,9 @@ /mob/living/simple_animal/parrot/examine(mob/user) - ..() + . = ..() if(stat) - to_chat(user, pick("This parrot is no more.", "This is a late parrot.", "This is an ex-parrot.")) + . += pick("This parrot is no more.", "This is a late parrot.", "This is an ex-parrot.") /mob/living/simple_animal/parrot/death(gibbed) if(held_item) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 2001c61e12..185d717a00 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -61,7 +61,7 @@ var/mood = "" // To show its face var/mutator_used = FALSE //So you can't shove a dozen mutators into a single slime var/force_stasis = FALSE - + do_footstep = TRUE var/static/regex/slime_name_regex = new("\\w+ (baby|adult) slime \\(\\d+\\)") @@ -408,37 +408,32 @@ return /mob/living/simple_animal/slime/examine(mob/user) - - var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src]!\n" + . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!") if (src.stat == DEAD) - msg += "It is limp and unresponsive.\n" + . += "It is limp and unresponsive." else if (stat == UNCONSCIOUS) // Slime stasis - msg += "It appears to be alive but unresponsive.\n" - if (src.getBruteLoss()) - msg += "" - if (src.getBruteLoss() < 40) - msg += "It has some punctures in its flesh!" + . += "It appears to be alive but unresponsive." + if (getBruteLoss()) + if (getBruteLoss() < 40) + . += "It has some punctures in its flesh!" else - msg += "It has severe punctures and tears in its flesh!" - msg += "\n" + . += "It has severe punctures and tears in its flesh!" switch(powerlevel) if(2 to 3) - msg += "It is flickering gently with a little electrical activity.\n" + . += "It is flickering gently with a little electrical activity." if(4 to 5) - msg += "It is glowing gently with moderate levels of electrical activity.\n" + . += "It is glowing gently with moderate levels of electrical activity." if(6 to 9) - msg += "It is glowing brightly with high levels of electrical activity.\n" + . += "It is glowing brightly with high levels of electrical activity." if(10) - msg += "It is radiating with massive levels of electrical activity!\n" + . += "It is radiating with massive levels of electrical activity!" - msg += "*---------*" - to_chat(user, msg) - return + . += "*---------*" /mob/living/simple_animal/slime/proc/discipline_slime(mob/user) if(stat) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 215b4ec44f..e3daa8e3c1 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -319,7 +319,8 @@ return face_atom(A) - A.examine(src) + var/list/result = A.examine(src) + to_chat(src, result.Join("\n")) //same as above //note: ghosts can point, this is intended diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 550593e316..c18fc36e9a 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -522,10 +522,10 @@ It's fairly easy to fix if dealing with single letters but not so much with comp //gets ID card object from special clothes slot or null. /mob/proc/get_idcard(hand_first = TRUE) var/obj/item/held_item = get_active_held_item() - . = held_item?.GetID() + . = held_item ? held_item.GetID() : null if(!.) //If so, then check the inactive hand held_item = get_inactive_held_item() - . = held_item?.GetID() + . = held_item ? held_item.GetID() : null /mob/proc/get_id_in_hand() var/obj/item/held_item = get_active_held_item() diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index ce2c49cb32..1b3501f78b 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -202,11 +202,11 @@ return TRUE /obj/item/modular_computer/examine(mob/user) - ..() + . = ..() if(obj_integrity <= integrity_failure) - to_chat(user, "It is heavily damaged!") + . += "It is heavily damaged!" else if(obj_integrity < max_integrity) - to_chat(user, "It is damaged.") + . += "It is damaged." /obj/item/modular_computer/update_icon() cut_overlays() diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm index 3106a9e510..4d4dee1b8c 100644 --- a/code/modules/modular_computers/computers/item/laptop.dm +++ b/code/modules/modular_computers/computers/item/laptop.dm @@ -22,9 +22,9 @@ var/slowdown_open = TRUE /obj/item/modular_computer/laptop/examine(mob/user) - ..() + . = ..() if(screen_on) - to_chat(user, "Alt-click to close it.") + . += "Alt-click to close it." /obj/item/modular_computer/laptop/Initialize() . = ..() diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm index 8b70fd246c..f83442b137 100644 --- a/code/modules/modular_computers/computers/machinery/console_presets.dm +++ b/code/modules/modular_computers/computers/machinery/console_presets.dm @@ -47,8 +47,8 @@ _has_ai = TRUE /obj/machinery/modular_computer/console/preset/research/examine(mob/user) - ..() - to_chat(user, "Alt-click to eject the intelliCard.") + . = ..() + . += "Alt-click to eject the intelliCard." /obj/machinery/modular_computer/console/preset/research/install_programs() var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD] @@ -67,8 +67,8 @@ _has_printer = TRUE /obj/machinery/modular_computer/console/preset/command/examine(mob/user) - ..() - to_chat(user, "Alt-click [src] to eject the identification card.") + . = ..() + . += "Alt-click [src] to eject the identification card." /obj/machinery/modular_computer/console/preset/command/install_programs() var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD] diff --git a/code/modules/modular_computers/hardware/_hardware.dm b/code/modules/modular_computers/hardware/_hardware.dm index 56efec379a..744db1572f 100644 --- a/code/modules/modular_computers/hardware/_hardware.dm +++ b/code/modules/modular_computers/hardware/_hardware.dm @@ -76,11 +76,11 @@ /obj/item/computer_hardware/examine(var/mob/user) . = ..() if(damage > damage_failure) - to_chat(user, "It seems to be severely damaged!") + . += "It seems to be severely damaged!" else if(damage > damage_malfunction) - to_chat(user, "It seems to be damaged!") + . += "It seems to be damaged!" else if(damage) - to_chat(user, "It seems to be slightly damaged.") + . += "It seems to be slightly damaged." // Component-side compatibility check. /obj/item/computer_hardware/proc/can_install(obj/item/modular_computer/M, mob/living/user = null) diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm index 5dee122544..47cbbff418 100644 --- a/code/modules/modular_computers/hardware/ai_slot.dm +++ b/code/modules/modular_computers/hardware/ai_slot.dm @@ -11,9 +11,9 @@ /obj/item/computer_hardware/ai_slot/examine(mob/user) - ..() + . = ..() if(stored_card) - to_chat(user, "There appears to be an intelliCard loaded. There appears to be a pinhole protecting a manual eject button. A screwdriver could probably press it.") + . += "There appears to be an intelliCard loaded. There appears to be a pinhole protecting a manual eject button. A screwdriver could probably press it." /obj/item/computer_hardware/ai_slot/on_install(obj/item/modular_computer/M, mob/living/user = null) M.add_verb(device_type) diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm index 725df2fdb8..c68e1ad119 100644 --- a/code/modules/modular_computers/hardware/card_slot.dm +++ b/code/modules/modular_computers/hardware/card_slot.dm @@ -117,6 +117,6 @@ return /obj/item/computer_hardware/card_slot/examine(mob/user) - ..() + . = ..() if(stored_card || stored_card2) - to_chat(user, "There appears to be something loaded in the card slots.") + . += "There appears to be something loaded in the card slots." diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm index 1e3c517351..4109b2c3f0 100644 --- a/code/modules/modular_computers/hardware/hard_drive.dm +++ b/code/modules/modular_computers/hardware/hard_drive.dm @@ -19,8 +19,8 @@ store_file(new/datum/computer_file/program/filemanager(src)) // File manager, allows text editor functions and basic file manipulation. /obj/item/computer_hardware/hard_drive/examine(user) - ..() - to_chat(user, "It has [max_capacity] GQ of storage capacity.") + . = ..() + . += "It has [max_capacity] GQ of storage capacity." /obj/item/computer_hardware/hard_drive/diagnostics(var/mob/user) ..() @@ -121,7 +121,7 @@ return ..() /obj/item/computer_hardware/hard_drive/Initialize() - . = ..() + . = ..() install_default_programs() diff --git a/code/modules/modular_computers/hardware/printer.dm b/code/modules/modular_computers/hardware/printer.dm index b000c353b0..44383822cc 100644 --- a/code/modules/modular_computers/hardware/printer.dm +++ b/code/modules/modular_computers/hardware/printer.dm @@ -13,8 +13,8 @@ to_chat(user, "Paper level: [stored_paper]/[max_paper].") /obj/item/computer_hardware/printer/examine(mob/user) - ..() - to_chat(user, "Paper level: [stored_paper]/[max_paper].") + . = ..() + . += "Paper level: [stored_paper]/[max_paper]." /obj/item/computer_hardware/printer/proc/print_text(var/text_to_print, var/paper_title = "") diff --git a/code/modules/ninja/suit/gloves.dm b/code/modules/ninja/suit/gloves.dm index 276de652bc..e819fe55fd 100644 --- a/code/modules/ninja/suit/gloves.dm +++ b/code/modules/ninja/suit/gloves.dm @@ -78,6 +78,6 @@ candrain=!candrain /obj/item/clothing/gloves/space_ninja/examine(mob/user) - ..() + . = ..() if(HAS_TRAIT_FROM(src, TRAIT_NODROP, NINJA_SUIT_TRAIT)) - to_chat(user, "The energy drain mechanism is [candrain?"active":"inactive"].") + . += "The energy drain mechanism is [candrain?"active":"inactive"]." diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index d89bb9edf2..03fc7a2ed2 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -149,12 +149,12 @@ Contents: /obj/item/clothing/suit/space/space_ninja/examine(mob/user) - ..() + . = ..() if(s_initialized && user == affecting) - to_chat(user, "All systems operational. Current energy capacity: [DisplayEnergy(cell.charge)].\n\ + . += "All systems operational. Current energy capacity: [DisplayEnergy(cell.charge)].\n\ The CLOAK-tech device is [stealth?"active":"inactive"].\n\ There are [s_bombs] smoke bomb\s remaining.\n\ - There are [a_boost] adrenaline booster\s remaining.") + There are [a_boost] adrenaline booster\s remaining." /obj/item/clothing/suit/space/space_ninja/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/initialize_ninja_suit)) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 1d6326a3ed..c9b7fb7b57 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -90,12 +90,12 @@ /obj/item/paper/examine(mob/user) - ..() - to_chat(user, "Alt-click to fold it.") + . = ..() + . += "Alt-click to fold it." if(oui_canview(user)) ui.render(user) else - to_chat(user, "You're too far away to read it!") + . += "You're too far away to read it!" /obj/item/paper/proc/show_content(mob/user) user.examinate(src) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 6d9c6373ba..7318af0e32 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -116,11 +116,11 @@ return ..() /obj/item/paper_bin/examine(mob/user) - ..() + . = ..() if(total_paper) - to_chat(user, "It contains " + (total_paper > 1 ? "[total_paper] papers" : " one paper")+".") + . += "It contains [total_paper > 1 ? "[total_paper] papers" : " one paper"]." else - to_chat(user, "It doesn't contain anything.") + . += "It doesn't contain anything." /obj/item/paper_bin/update_icon() diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index b547089aef..ecef5a703a 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -118,8 +118,8 @@ H.emote("scream") /obj/item/paper/examine(mob/user) - ..() - to_chat(user, "Alt-click [src] to fold it into a paper plane.") + . = ..() + . += "Alt-click [src] to fold it into a paper plane." /obj/item/paper/AltClick(mob/living/carbon/user, obj/item/I) if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user), NO_TK)) diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index 8c51fd31ea..9d01eca0cf 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -43,7 +43,7 @@ /obj/item/camera/examine(mob/user) . = ..() - to_chat(user, "Alt-click to change its focusing, allowing you to set how big of an area it will capture.") + . += "Alt-click to change its focusing, allowing you to set how big of an area it will capture." /obj/item/camera/AltClick(mob/user) if(!user.canUseTopic(src, BE_CLOSE)) @@ -81,8 +81,8 @@ ..() /obj/item/camera/examine(mob/user) - ..() - to_chat(user, "It has [pictures_left] photos left.") + . = ..() + . += "It has [pictures_left] photos left." //user can be atom or mob /obj/item/camera/proc/can_target(atom/target, mob/user, prox_flag) diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm index 6469a1091b..5986da1ce8 100644 --- a/code/modules/photography/photos/frame.dm +++ b/code/modules/photography/photos/frame.dm @@ -40,8 +40,8 @@ /obj/item/wallframe/picture/examine(mob/user) if(user.is_holding(src) && displayed) displayed.show(user) - else - ..() + return list() + return ..() /obj/item/wallframe/picture/update_icon() cut_overlays() @@ -109,8 +109,8 @@ /obj/structure/sign/picture_frame/examine(mob/user) if(in_range(src, user) && framed) framed.show(user) - else - ..() + return list() + return ..() /obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user, params) if(can_decon && (istype(I, /obj/item/screwdriver) || istype(I, /obj/item/wrench))) diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm index 99e61cf3f0..5682c333c7 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -62,12 +62,11 @@ ..() /obj/item/photo/examine(mob/user) - ..() - + . = ..() if(in_range(src, user)) show(user) else - to_chat(user, "You need to get closer to get a good look at this photo!") + . += "You need to get closer to get a good look at this photo!" /obj/item/photo/proc/show(mob/user) if(!istype(picture) || !picture.picture_image) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 5fc29cb813..5e3888a8c5 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -243,33 +243,33 @@ addtimer(CALLBACK(src, .proc/update), 5) /obj/machinery/power/apc/examine(mob/user) - ..() + . = ..() if(stat & BROKEN) return if(opened) if(has_electronics && terminal) - to_chat(user, "The cover is [opened==APC_COVER_REMOVED?"removed":"open"] and the power cell is [ cell ? "installed" : "missing"].") + . += "The cover is [opened==APC_COVER_REMOVED?"removed":"open"] and the power cell is [ cell ? "installed" : "missing"]." else - to_chat(user, "It's [ !terminal ? "not" : "" ] wired up.") - to_chat(user, "The electronics are[!has_electronics?"n't":""] installed.") + . += "It's [ !terminal ? "not" : "" ] wired up." + . += "The electronics are[!has_electronics?"n't":""] installed." if(user.Adjacent(src) && integration_cog) - to_chat(user, "[src]'s innards have been replaced by strange brass machinery!") + . += "[src]'s innards have been replaced by strange brass machinery!" else if (stat & MAINT) - to_chat(user, "The cover is closed. Something is wrong with it. It doesn't work.") + . += "The cover is closed. Something is wrong with it. It doesn't work." else if (malfhack) - to_chat(user, "The cover is broken. It may be hard to force it open.") + . += "The cover is broken. It may be hard to force it open." else - to_chat(user, "The cover is closed.") + . += "The cover is closed." if(integration_cog && is_servant_of_ratvar(user)) - to_chat(user, "There is an integration cog installed!") + . += "There is an integration cog installed!" - to_chat(user, "Alt-Click the APC to [ locked ? "unlock" : "lock"] the interface.") + . += "Alt-Click the APC to [ locked ? "unlock" : "lock"] the interface." if(issilicon(user)) - to_chat(user, "Ctrl-Click the APC to switch the breaker [ operating ? "off" : "on"].") + . += "Ctrl-Click the APC to switch the breaker [ operating ? "off" : "on"]." // update the APC icon to show the three base states // also add overlays for indicator lights diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index bbbf8edae5..2855e3c321 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -94,11 +94,11 @@ return power_used /obj/item/stock_parts/cell/examine(mob/user) - ..() + . = ..() if(rigged) - to_chat(user, "This power cell seems to be faulty!") + . += "This power cell seems to be faulty!" else - to_chat(user, "The charge meter reads [round(src.percent() )]%.") + . += "The charge meter reads [round(src.percent() )]%." /obj/item/stock_parts/cell/suicide_act(mob/user) user.visible_message("[user] is licking the electrodes of [src]! It looks like [user.p_theyre()] trying to commit suicide!") diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index b5ee0b2da4..cdbaa29a3b 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -66,22 +66,21 @@ return cell /obj/structure/light_construct/examine(mob/user) - ..() + . = ..() switch(src.stage) if(1) - to_chat(user, "It's an empty frame.") + . += "It's an empty frame." if(2) - to_chat(user, "It's wired.") + . += "It's wired." if(3) - to_chat(user, "The casing is closed.") + . += "The casing is closed." if(cell_connectors) if(cell) - to_chat(user, "You see [cell] inside the casing.") + . += "You see [cell] inside the casing." else - to_chat(user, "The casing has no power cell for backup power.") + . += "The casing has no power cell for backup power." else - to_chat(user, "This casing doesn't support power cells for backup power.") - return + . += "This casing doesn't support power cells for backup power." /obj/structure/light_construct/attackby(obj/item/W, mob/user, params) add_fingerprint(user) @@ -393,18 +392,18 @@ // examine verb /obj/machinery/light/examine(mob/user) - ..() + . = ..() switch(status) if(LIGHT_OK) - to_chat(user, "It is turned [on? "on" : "off"].") + . += "It is turned [on? "on" : "off"]." if(LIGHT_EMPTY) - to_chat(user, "The [fitting] has been removed.") + . += "The [fitting] has been removed." if(LIGHT_BURNED) - to_chat(user, "The [fitting] is burnt out.") + . += "The [fitting] is burnt out." if(LIGHT_BROKEN) - to_chat(user, "The [fitting] has been smashed.") + . += "The [fitting] has been smashed." if(cell) - to_chat(user, "Its backup power charge meter reads [round((cell.charge / cell.maxcharge) * 100, 0.1)]%.") + . += "Its backup power charge meter reads [round((cell.charge / cell.maxcharge) * 100, 0.1)]%." diff --git a/code/modules/power/monitor.dm b/code/modules/power/monitor.dm index a934d08997..28843e14e0 100644 --- a/code/modules/power/monitor.dm +++ b/code/modules/power/monitor.dm @@ -27,8 +27,8 @@ is_secret_monitor = TRUE /obj/machinery/computer/monitor/secret/examine(mob/user) - ..() - to_chat(user, "It's operating system seems quite outdated... It doesn't seem like it'd be compatible with the latest remote NTOS monitoring systems.") + . = ..() + . += "It's operating system seems quite outdated... It doesn't seem like it'd be compatible with the latest remote NTOS monitoring systems." /obj/machinery/computer/monitor/Initialize() . = ..() diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 7375a3e17a..a9cd97c331 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -56,8 +56,8 @@ soundloop.stop() /obj/machinery/power/port_gen/examine(mob/user) - ..() - to_chat(user, "It is[!active?"n't":""] running.") + . = ..() + . += "It is[!active?"n't":""] running." /obj/machinery/power/port_gen/pacman name = "\improper P.A.C.M.A.N.-type portable generator" @@ -99,10 +99,10 @@ consumption = consumption_coeff /obj/machinery/power/port_gen/pacman/examine(mob/user) - ..() - to_chat(user, "The generator has [sheets] units of [sheet_name] fuel left, producing [power_gen] per cycle.") + . = ..() + . += "The generator has [sheets] units of [sheet_name] fuel left, producing [power_gen] per cycle." if(crit_fail) - to_chat(user, "The generator seems to have broken down.") + . += "The generator seems to have broken down." /obj/machinery/power/port_gen/pacman/HasFuel() if(sheets >= 1 / (time_per_sheet / power_output) - sheet_left) diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 974b210648..b1b0d2d718 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -171,14 +171,14 @@ . = ..() if(active) if(!bitcoinmining) - to_chat(user, "[src]'s display states that it has stored [DisplayPower(stored_power)], and is processing [DisplayPower((RAD_COLLECTOR_OUTPUT)*((60 SECONDS)/SSmachines.wait))] per minute.
    The plasma within it's tank is being irradiated into tritium.
    ") + . += "[src]'s display states that it has stored [DisplayPower(stored_power)], and is processing [DisplayPower((RAD_COLLECTOR_OUTPUT)*((60 SECONDS)/SSmachines.wait))] per minute.
    The plasma within it's tank is being irradiated into tritium.
    " else - to_chat(user, "[src]'s display states that it's producing a total of [(last_push*RAD_COLLECTOR_MINING_CONVERSION_RATE)*((60 SECONDS)/SSmachines.wait)] research points per minute.
    The tritium and oxygen within it's tank is being combusted into carbon dioxide.
    ") + . += "[src]'s display states that it's producing a total of [(last_push*RAD_COLLECTOR_MINING_CONVERSION_RATE)*((60 SECONDS)/SSmachines.wait)] research points per minute.
    The tritium and oxygen within it's tank is being combusted into carbon dioxide.
    " else if(!bitcoinmining) - to_chat(user,"[src]'s display displays the words: \"Power production mode. Please insert Plasma. Use a multitool to change production modes.\"") + . += "[src]'s display displays the words: \"Power production mode. Please insert Plasma. Use a multitool to change production modes.\"" else - to_chat(user,"[src]'s display displays the words: \"Research point production mode. Please insert Tritium and Oxygen. Use a multitool to change production modes.\"") + . += "[src]'s display displays the words: \"Research point production mode. Please insert Tritium and Oxygen. Use a multitool to change production modes.\"" /obj/machinery/power/rad_collector/obj_break(damage_flag) if(!(stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 9f7c3ba05a..82d33e59ff 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -36,15 +36,14 @@ var/strength = null /obj/structure/particle_accelerator/examine(mob/user) - ..() - + . = ..() switch(construction_state) if(PA_CONSTRUCTION_UNSECURED) - to_chat(user, "Looks like it's not attached to the flooring.") + . += "Looks like it's not attached to the flooring." if(PA_CONSTRUCTION_UNWIRED) - to_chat(user, "It is missing some cables.") + . += "It is missing some cables." if(PA_CONSTRUCTION_PANEL_OPEN) - to_chat(user, "The panel is open.") + . += "The panel is open." /obj/structure/particle_accelerator/Destroy() construction_state = PA_CONSTRUCTION_UNSECURED diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 66870d73e8..685030d4e6 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -257,14 +257,14 @@ popup.open() /obj/machinery/particle_accelerator/control_box/examine(mob/user) - ..() + . = ..() switch(construction_state) if(PA_CONSTRUCTION_UNSECURED) - to_chat(user, "Looks like it's not attached to the flooring.") + . += "Looks like it's not attached to the flooring." if(PA_CONSTRUCTION_UNWIRED) - to_chat(user, "It is missing some cables.") + . += "It is missing some cables." if(PA_CONSTRUCTION_PANEL_OPEN) - to_chat(user, "The panel is open.") + . += "The panel is open." /obj/machinery/particle_accelerator/control_box/attackby(obj/item/W, mob/user, params) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 3637bf38f7..774f7ba14d 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -39,9 +39,9 @@ var/obj/machinery/power/terminal/terminal = null /obj/machinery/power/smes/examine(user) - ..() + . = ..() if(!terminal) - to_chat(user, "This SMES has no power terminal!") + . += "This SMES has no power terminal!" /obj/machinery/power/smes/Initialize() . = ..() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 4cbb88fe6b..9184c7e4eb 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -187,17 +187,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) return ..() /obj/machinery/power/supermatter_crystal/examine(mob/user) - ..() - if(!ishuman(user)) - return - - var/range = HALLUCINATION_RANGE(power) - for(var/mob/living/carbon/human/H in viewers(range, src)) - if(H != user) - continue - if(!istype(H.glasses, /obj/item/clothing/glasses/meson)) - to_chat(H, "You get headaches just from looking at it.") - return + . = ..() + if (iscarbon(user)) + var/mob/living/carbon/C = user + if (!istype(C.glasses, /obj/item/clothing/glasses/meson) && (get_dist(user, src) < HALLUCINATION_RANGE(power))) + . += "You get headaches just from looking at it." /obj/machinery/power/supermatter_crystal/proc/get_status() var/turf/T = get_turf(src) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 9a5486dfe2..f8d25c0c9c 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -71,9 +71,9 @@ energy = 0 // ensure we dont have miniballs of miniballs /obj/singularity/energy_ball/examine(mob/user) - ..() + . = ..() if(orbiting_balls.len) - to_chat(user, "The amount of orbiting mini-balls is [orbiting_balls.len].") + . += "The amount of orbiting mini-balls is [orbiting_balls.len]." /obj/singularity/energy_ball/proc/move_the_basket_ball(var/move_amount) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 96b396243b..026f725e2f 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -86,11 +86,11 @@ qdel(src) /obj/item/gun/examine(mob/user) - ..() + . = ..() if(pin) - to_chat(user, "It has \a [pin] installed.") + . += "It has \a [pin] installed." else - to_chat(user, "It doesn't have a firing pin installed, and won't fire.") + . += "It doesn't have a firing pin installed, and won't fire." /obj/item/gun/equipped(mob/living/user, slot) . = ..() diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index a5262da7a3..fd40f437ca 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -139,8 +139,8 @@ /obj/item/gun/ballistic/examine(mob/user) - ..() - to_chat(user, "It has [get_ammo()] round\s remaining.") + . = ..() + . += "It has [get_ammo()] round\s remaining." /obj/item/gun/ballistic/proc/get_ammo(countchambered = 1) var/boolets = 0 //mature var names for mature people diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 5182c96671..bcb212a031 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -309,9 +309,9 @@ pin = /obj/item/firing_pin /obj/item/gun/ballistic/automatic/l6_saw/examine(mob/user) - ..() + . = ..() if(cover_open && magazine) - to_chat(user, "It seems like you could use an empty hand to remove the magazine.") + . += "It seems like you could use an empty hand to remove the magazine." /obj/item/gun/ballistic/automatic/l6_saw/attack_self(mob/user) cover_open = !cover_open diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 25a50f3e03..d1a5f12888 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -81,8 +81,8 @@ return boolets /obj/item/gun/ballistic/revolver/examine(mob/user) - ..() - to_chat(user, "[get_ammo(0,0)] of those are live rounds.") + . = ..() + . += "[get_ammo(0,0)] of those are live rounds." /obj/item/gun/ballistic/revolver/detective name = "\improper .38 Mars Special" diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 47ccb6076f..1e1b518849 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -74,9 +74,9 @@ chambered = AC /obj/item/gun/ballistic/shotgun/examine(mob/user) - ..() + . = ..() if (chambered) - to_chat(user, "A [chambered.BB ? "live" : "spent"] one is in the chamber.") + . += "A [chambered.BB ? "live" : "spent"] one is in the chamber." /obj/item/gun/ballistic/shotgun/lethal mag_type = /obj/item/ammo_box/magazine/internal/shot/lethal @@ -143,8 +143,8 @@ . = ..() /obj/item/gun/ballistic/shotgun/boltaction/examine(mob/user) - ..() - to_chat(user, "The bolt is [bolt_open ? "open" : "closed"].") + . = ..() + . += "The bolt is [bolt_open ? "open" : "closed"]." /obj/item/gun/ballistic/shotgun/boltaction/enchanted name = "enchanted bolt action rifle" @@ -231,8 +231,8 @@ . = ..() /obj/item/gun/ballistic/shotgun/automatic/combat/compact/examine(mob/user) - ..() - to_chat(user, "Alt-click to toggle the stock.") + . = ..() + . += "Alt-click to toggle the stock." /obj/item/gun/ballistic/shotgun/automatic/combat/compact/proc/toggle_stock(mob/living/user) stock = !stock @@ -263,9 +263,8 @@ var/obj/item/ammo_box/magazine/internal/shot/alternate_magazine /obj/item/gun/ballistic/shotgun/automatic/dual_tube/examine(mob/user) - ..() - to_chat(user, "Alt-click to pump it.") . = ..() + . += "Alt-click to pump it." /obj/item/gun/ballistic/shotgun/automatic/dual_tube/Initialize() . = ..() diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 646b4bd57d..b216d8d536 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -61,12 +61,12 @@ cut_overlays() /obj/item/gun/energy/kinetic_accelerator/examine(mob/user) - ..() + . = ..() if(max_mod_capacity) - to_chat(user, "[get_remaining_mod_capacity()]% mod capacity remaining.") + . += "[get_remaining_mod_capacity()]% mod capacity remaining." for(var/A in get_modkits()) var/obj/item/borg/upgrade/modkit/M = A - to_chat(user, "There is \a [M] installed, using [M.cost]% capacity.") + . += "There is \a [M] installed, using [M.cost]% capacity." /obj/item/gun/energy/kinetic_accelerator/crowbar_act(mob/living/user, obj/item/I) . = TRUE @@ -276,8 +276,8 @@ var/minebot_exclusive = FALSE /obj/item/borg/upgrade/modkit/examine(mob/user) - ..() - to_chat(user, "Occupies [cost]% of mod capacity.") + . = ..() + . += "Occupies [cost]% of mod capacity." /obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user) if(istype(A, /obj/item/gun/energy/kinetic_accelerator) && !issilicon(user)) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 87bfd578bc..a61654142c 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -135,9 +135,9 @@ AddComponent(/datum/component/butchering, 25, 105, 0, 'sound/weapons/plasma_cutter.ogg') /obj/item/gun/energy/plasmacutter/examine(mob/user) - ..() + . = ..() if(cell) - to_chat(user, "[src] is [round(cell.percent())]% charged.") + . += "[src] is [round(cell.percent())]% charged." /obj/item/gun/energy/plasmacutter/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/stack/sheet/mineral/plasma)) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index 4cdfc6d70d..95809f5044 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -18,8 +18,8 @@ return ..() /obj/item/gun/magic/wand/examine(mob/user) - ..() - to_chat(user, "Has [charges] charge\s remaining.") + . = ..() + . += "Has [charges] charge\s remaining." /obj/item/gun/magic/wand/update_icon() icon_state = "[initial(icon_state)][charges ? "" : "-drained"]" diff --git a/code/modules/projectiles/guns/misc/grenade_launcher.dm b/code/modules/projectiles/guns/misc/grenade_launcher.dm index eb36438a6c..dc44a1f4ff 100644 --- a/code/modules/projectiles/guns/misc/grenade_launcher.dm +++ b/code/modules/projectiles/guns/misc/grenade_launcher.dm @@ -13,8 +13,8 @@ materials = list(MAT_METAL=2000) /obj/item/gun/grenadelauncher/examine(mob/user) - ..() - to_chat(user, "[grenades.len] / [max_grenades] grenades loaded.") + . = ..() + . += "[grenades.len] / [max_grenades] grenades loaded." /obj/item/gun/grenadelauncher/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm index 342ceecbc2..8a9d1c5b6b 100644 --- a/code/modules/projectiles/guns/misc/syringe_gun.dm +++ b/code/modules/projectiles/guns/misc/syringe_gun.dm @@ -30,8 +30,8 @@ recharge_newshot() /obj/item/gun/syringe/examine(mob/user) - ..() - to_chat(user, "Can hold [max_syringes] syringe\s. Has [syringes.len] syringe\s remaining.") + . = ..() + . += "Can hold [max_syringes] syringe\s. Has [syringes.len] syringe\s remaining." /obj/item/gun/syringe/attack_self(mob/living/user) if(!syringes.len) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 1eb75e042b..7e5cb21822 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -88,20 +88,21 @@ return ..() /obj/machinery/chem_dispenser/examine(mob/user) - ..() + . = ..() if(panel_open) - to_chat(user, "[src]'s maintenance hatch is open!") + . += "[src]'s maintenance hatch is open!" if(in_range(user, src) || isobserver(user)) - to_chat(user, "The status display reads:
    Recharging [recharge_amount] power units per interval.
    Power efficiency increased by [(powerefficiency*1000)-100]%.") + . += "The status display reads:
    Recharging [recharge_amount] power units per interval.
    Power efficiency increased by [(powerefficiency*1000)-100]%." switch(macrotier) if(1) - to_chat(user, "Macro granularity at 5u.") + . += "Macro granularity at 5u." if(2) - to_chat(user, "Macro granularity at 3u.") + . += "Macro granularity at 3u." if(3) - to_chat(user, "Macro granularity at 2u.") + . += "Macro granularity at 2u." if(4) - to_chat(user, "Macro granularity at 1u.") + . += "Macro granularity at 1u." + /obj/machinery/chem_dispenser/process() if (recharge_counter >= 4) if(!is_operational()) @@ -382,9 +383,10 @@ /obj/machinery/chem_dispenser/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) if(beaker) - beaker.forceMove(drop_location()) + var/obj/item/reagent_containers/B = beaker + B.forceMove(drop_location()) if(user && Adjacent(user) && !issiliconoradminghost(user)) - user.put_in_hands(beaker) + user.put_in_hands(B) if(new_beaker) beaker = new_beaker else @@ -396,7 +398,6 @@ cell = null if(beaker) beaker.forceMove(drop_location()) - beaker = null return ..() /obj/machinery/chem_dispenser/proc/get_macro_resolution() diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 1847f1f722..98cfd877b2 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -191,27 +191,27 @@ /obj/machinery/reagentgrinder/examine(mob/user) . = ..() if(!in_range(user, src) && !issilicon(user) && !isobserver(user)) - to_chat(user, "You're too far away to examine [src]'s contents and display!") + . += "You're too far away to examine [src]'s contents and display!" return if(operating) - to_chat(user, "\The [src] is operating.") + . += "\The [src] is operating." return if(beaker || length(holdingitems)) - to_chat(user, "\The [src] contains:") + . += "\The [src] contains:" if(beaker) - to_chat(user, "- \A [beaker].") + . += "- \A [beaker]." for(var/i in holdingitems) var/obj/item/O = i - to_chat(user, "- \A [O.name].") + . += "- \A [O.name]." if(!(stat & (NOPOWER|BROKEN))) - to_chat(user, "The status display reads:") - to_chat(user, "- Grinding reagents at [speed*100]%.") + . += "The status display reads:" + . += "- Grinding reagents at [speed*100]%." if(beaker) for(var/datum/reagent/R in beaker.reagents.reagent_list) - to_chat(user, "- [R.volume] units of [R.name].") + . += "- [R.volume] units of [R.name]." /obj/machinery/reagentgrinder/proc/eject(mob/user) for(var/i in holdingitems) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index fdb8dde232..bd60880324 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1830,6 +1830,7 @@ All effects don't start immediately, but rather get worse over time; the rate is value = 2 /datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/carbon/M) + M.apply_status_effect(/datum/status_effect/throat_soothed) M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL) ..() diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index 7cecfc016d..80dac84f18 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -217,6 +217,7 @@ glass_icon_state = "glass_white" glass_name = "glass of milk" glass_desc = "White and nutritious goodness!" + pH = 6.5 /datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M) if(HAS_TRAIT(M, TRAIT_CALCIUM_HEALER)) @@ -786,6 +787,10 @@ glass_name = "glass of menthol" glass_desc = "Tastes naturally minty, and imparts a very mild numbing sensation." +/datum/reagent/consumable/menthol/on_mob_life(mob/living/L) + L.apply_status_effect(/datum/status_effect/throat_soothed) + ..() + /datum/reagent/consumable/grenadine name = "Grenadine" id = "grenadine" diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 547f610d11..4d02706a3c 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -756,6 +756,30 @@ taste_description = "mournful honking" pH = 9.2 +/datum/reagent/consumable/liquidelectricity + name = "Liquid Electricity" + id = "liquidelectricity" + description = "The blood of Ethereals, and the stuff that keeps them going. Great for them, horrid for anyone else." + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#97ee63" + taste_description = "pure electricity" + +/* //We don't have ethereals here, so I'll just comment it out. +/datum/reagent/consumable/liquidelectricity/reaction_mob(mob/living/M, method=TOUCH, reac_volume) //can't be on life because of the way blood works. + if((method == INGEST || method == INJECT || method == PATCH) && iscarbon(M)) + + var/mob/living/carbon/C = M + var/obj/item/organ/stomach/ethereal/stomach = C.getorganslot(ORGAN_SLOT_STOMACH) + if(istype(stomach)) + stomach.adjust_charge(reac_volume * REM) +*/ + +/datum/reagent/consumable/liquidelectricity/on_mob_life(mob/living/carbon/M) + if(prob(25)) // && !isethereal(M)) + M.electrocute_act(rand(10,15), "Liquid Electricity in their body", 1) //lmao at the newbs who eat energy bars + playsound(M, "sparks", 50, TRUE) + return ..() + /datum/reagent/consumable/astrotame name = "Astrotame" id = "astrotame" diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index c4decc081d..6700c6c006 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1464,3 +1464,50 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) M.adjustToxLoss(1, 0) ..() . = 1 + +/datum/reagent/medicine/silibinin + name = "Silibinin" + id = "silibinin" + description = "A thistle derrived hepatoprotective flavolignan mixture that help reverse damage to the liver." + reagent_state = SOLID + color = "#FFFFD0" + metabolization_rate = 1.5 * REAGENTS_METABOLISM + +/datum/reagent/medicine/silibinin/on_mob_life(mob/living/carbon/M) + M.adjustOrganLoss(ORGAN_SLOT_LIVER, -2)//Add a chance to cure liver trauma once implemented. + ..() + . = 1 + +/datum/reagent/medicine/polypyr //This is intended to be an ingredient in advanced chems. + name = "Polypyrylium Oligomers" + id = "polypyr" + description = "A�purple mixture of short polyelectrolyte chains not easily synthesized in the laboratory. It is valued as an intermediate in the synthesis of the cutting edge pharmaceuticals." + reagent_state = SOLID + color = "#9423FF" + metabolization_rate = 0.25 * REAGENTS_METABOLISM + overdose_threshold = 50 + taste_description = "numbing bitterness" + +/datum/reagent/medicine/polypyr/on_mob_life(mob/living/carbon/M) //I w�nted a collection of small positive effects, this is as hard to obtain as coniine after all. + M.adjustOrganLoss(ORGAN_SLOT_LUNGS, -0.25) + M.adjustBruteLoss(-0.35, 0) + if(prob(50)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.bleed_rate = max(H.bleed_rate - 1, 0) + ..() + . = 1 + +/datum/reagent/medicine/polypyr/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + if(method == TOUCH || method == VAPOR) + if(M && ishuman(M) && reac_volume >= 0.5) + var/mob/living/carbon/human/H = M + H.hair_color = "92f" + H.facial_hair_color = "92f" + H.update_hair() + +/datum/reagent/medicine/polypyr/overdose_process(mob/living/M) + M.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.5) + ..() + . = 1 + diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 2b50ecc0f1..e77cf5b9dc 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -967,3 +967,23 @@ else M.gain_trauma_type(BRAIN_TRAUMA_SPECIAL) ..() + +/datum/reagent/toxin/bungotoxin + name = "Bungotoxin" + id = "bungotoxin" + description = "A horrible cardiotoxin that protects the humble bungo pit." + //silent_toxin = TRUE //I guess we don't really have the entire tox system ported. + color = "#EBFF8E" + metabolization_rate = 0.5 * REAGENTS_METABOLISM + toxpwr = 0 + taste_description = "tannin" + +/datum/reagent/toxin/bungotoxin/on_mob_life(mob/living/carbon/M) + M.adjustOrganLoss(ORGAN_SLOT_HEART, 3) + M.confused = M.dizziness //add a tertiary effect here if this is isn't an effective poison. + if(current_cycle >= 12 && prob(8)) + var/tox_message = pick("You feel your heart spasm in your chest.", "You feel faint.","You feel you need to catch your breath.","You feel a prickle of pain in your chest.") + to_chat(M, "[tox_message]") + . = 1 + ..() + diff --git a/code/modules/reagents/chemistry/recipes/special.dm b/code/modules/reagents/chemistry/recipes/special.dm index 153372101e..59394e6e4b 100644 --- a/code/modules/reagents/chemistry/recipes/special.dm +++ b/code/modules/reagents/chemistry/recipes/special.dm @@ -173,7 +173,7 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related /obj/item/paper/secretrecipe/examine(mob/user) //Extra secret if(isobserver(user)) - return + return list() . = ..() /obj/item/paper/secretrecipe/Initialize() diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 631e5ee281..2bd5fb2d9f 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -124,9 +124,8 @@ Borg Hypospray return /obj/item/reagent_containers/borghypo/examine(mob/user) - usr = user - ..() - DescribeContents() //Because using the standardized reagents datum was just too cool for whatever fuckwit wrote this + . = ..() + . += DescribeContents() //Because using the standardized reagents datum was just too cool for whatever fuckwit wrote this /obj/item/reagent_containers/borghypo/proc/DescribeContents() var/empty = 1 @@ -134,11 +133,11 @@ Borg Hypospray for(var/datum/reagents/RS in reagent_list) var/datum/reagent/R = locate() in RS.reagent_list if(R) - to_chat(usr, "It currently has [R.volume] unit\s of [R.name] stored.") + . += "It currently has [R.volume] unit\s of [R.name] stored." empty = 0 if(empty) - to_chat(usr, "It is currently empty! Allow some time for the internal syntheszier to produce more.") + . += "It is currently empty! Allow some time for the internal syntheszier to produce more." /obj/item/reagent_containers/borghypo/hacked icon_state = "borghypo_s" diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 432b9289dd..85cb544667 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -121,11 +121,11 @@ icon_state = "[initial(icon_state)]0" /obj/item/reagent_containers/hypospray/medipen/examine() - ..() + . = ..() if(reagents && reagents.reagent_list.len) - to_chat(usr, "It is currently loaded.") + . += "It is currently loaded." else - to_chat(usr, "It is spent.") + . += "It is spent." /obj/item/reagent_containers/hypospray/medipen/stimulants name = "illegal stimpack medipen" @@ -296,10 +296,10 @@ /obj/item/hypospray/mkii/examine(mob/user) . = ..() if(vial) - to_chat(user, "[vial] has [vial.reagents.total_volume]u remaining.") + . += "[vial] has [vial.reagents.total_volume]u remaining." else - to_chat(user, "It has no vial loaded in.") - to_chat(user, "[src] is set to [mode ? "Inject" : "Spray"] contents on application.") + . += "It has no vial loaded in." + . += "[src] is set to [mode ? "Inject" : "Spray"] contents on application." /obj/item/hypospray/mkii/proc/unload_hypo(obj/item/I, mob/user) if((istype(I, /obj/item/reagent_containers/glass/bottle/vial))) diff --git a/code/modules/reagents/reagent_containers/rags.dm b/code/modules/reagents/reagent_containers/rags.dm index 92a4b155d8..8d44a2a406 100644 --- a/code/modules/reagents/reagent_containers/rags.dm +++ b/code/modules/reagents/reagent_containers/rags.dm @@ -23,7 +23,7 @@ /obj/item/reagent_containers/rag/examine(mob/user) . = ..() if(reagents.total_volume) - to_chat(user, "Alt-Click to squeeze the liquids out of it.") + . += "Alt-Click to squeeze the liquids out of it." /obj/item/reagent_containers/rag/afterattack(atom/A as obj|turf|area, mob/user,proximity) . = ..() diff --git a/code/modules/reagents/reagent_containers/sleeper_buffer.dm b/code/modules/reagents/reagent_containers/sleeper_buffer.dm new file mode 100644 index 0000000000..044dab2924 --- /dev/null +++ b/code/modules/reagents/reagent_containers/sleeper_buffer.dm @@ -0,0 +1,11 @@ +//Created if a sleeper is deconstructed, to contain the reagents within it. +/obj/item/reagent_containers/sleeper_buffer + name = "Sleeper buffer container" + desc = "A closed container for insertion in the Medical Sleepers." + icon_state = "sleeper_buffer" + volume = 500 + reagent_flags = NO_REACT + spillable = TRUE + resistance_flags = ACID_PROOF + amount_per_transfer_from_this = 0 + possible_transfer_amounts = list(0) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index c44ffa4373..0964b67490 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -71,13 +71,13 @@ var/paper_cups = 25 //Paper cups left from the cooler /obj/structure/reagent_dispensers/water_cooler/examine(mob/user) - ..() + . = ..() if (paper_cups > 1) - to_chat(user, "There are [paper_cups] paper cups left.") + . += "There are [paper_cups] paper cups left." else if (paper_cups == 1) - to_chat(user, "There is one paper cup left.") + . += "There is one paper cup left." else - to_chat(user, "There are no paper cups left.") + . += "There are no paper cups left." /obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/living/user) . = ..() diff --git a/code/modules/recycling/disposal/pipe_sorting.dm b/code/modules/recycling/disposal/pipe_sorting.dm index d85c4bca78..2d40ec64eb 100644 --- a/code/modules/recycling/disposal/pipe_sorting.dm +++ b/code/modules/recycling/disposal/pipe_sorting.dm @@ -50,13 +50,13 @@ sortTypes |= n /obj/structure/disposalpipe/sorting/mail/examine(mob/user) - ..() + . = ..() if(sortTypes.len) - to_chat(user, "It is tagged with the following tags:") + . += "It is tagged with the following tags:" for(var/t in sortTypes) - to_chat(user, "\t[GLOB.TAGGERLOCATIONS[t]].") + . += "\t[GLOB.TAGGERLOCATIONS[t]]." else - to_chat(user, "It has no sorting tags set.") + . += "It has no sorting tags set." /obj/structure/disposalpipe/sorting/mail/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm index c9d11a5a3e..ec4309b69e 100644 --- a/code/modules/research/designs/bluespace_designs.dm +++ b/code/modules/research/designs/bluespace_designs.dm @@ -65,6 +65,16 @@ category = list("Bluespace Designs") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO +/datum/design/desynchronizer + name = "Desynchronizer" + desc = "A device that can desynchronize the user from spacetime." + id = "desynchronizer" + build_type = PROTOLATHE + materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_SILVER = 1500, MAT_BLUESPACE = 1000) + build_path = /obj/item/desynchronizer + category = list("Bluespace Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + /datum/design/miningsatchel_holding name = "Mining Satchel of Holding" desc = "A mining satchel that can hold an infinite amount of ores." diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 77eebca696..5f7648b245 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -504,7 +504,7 @@ desc = "A a electrode attached to a small circuit box that will tell you the pH of a solution." id = "pHmeter" build_type = PROTOLATHE - materials = list(MAT_METAL = 1000, MAT_SILVER = 100, MAT_DIAMOND = 100) + materials = list(MAT_METAL = 1000, MAT_SILVER = 100, MAT_PLASTIC = 100) build_path = /obj/item/fermichem/pHmeter category = list("Equipment") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/nanites/nanite_hijacker.dm b/code/modules/research/nanites/nanite_hijacker.dm index dba47a4ac2..88779df447 100644 --- a/code/modules/research/nanites/nanite_hijacker.dm +++ b/code/modules/research/nanites/nanite_hijacker.dm @@ -18,7 +18,7 @@ /obj/item/nanite_hijacker/examine(mob/user) . = ..() if(disk) - to_chat(user, "Alt-click [src] to eject the disk.") + . += "Alt-click [src] to eject the disk." /obj/item/nanite_hijacker/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/disk/nanite_program)) diff --git a/code/modules/research/nanites/nanite_programs.dm b/code/modules/research/nanites/nanite_programs.dm index a06311f26f..2a6563fe52 100644 --- a/code/modules/research/nanites/nanite_programs.dm +++ b/code/modules/research/nanites/nanite_programs.dm @@ -208,9 +208,6 @@ datum/nanite_program/proc/on_mob_remove() /datum/nanite_program/proc/on_death() return -/datum/nanite_program/proc/on_hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - return - /datum/nanite_program/proc/software_error(type) if(!type) type = rand(1,5) diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm index 1113f11e87..50fb5efcb0 100644 --- a/code/modules/research/nanites/nanite_programs/healing.dm +++ b/code/modules/research/nanites/nanite_programs/healing.dm @@ -61,6 +61,9 @@ /datum/nanite_program/purging/active_effect() host_mob.adjustToxLoss(-1) for(var/datum/reagent/R in host_mob.reagents.reagent_list) + if(R.id == "nanite_b_gone") + host_mob.adjustToxLoss(4) + continue host_mob.reagents.remove_reagent(R.id,1) /datum/nanite_program/brain_heal diff --git a/code/modules/research/nanites/nanite_programs/sensor.dm b/code/modules/research/nanites/nanite_programs/sensor.dm index d494ec8cdf..535b92c6e1 100644 --- a/code/modules/research/nanites/nanite_programs/sensor.dm +++ b/code/modules/research/nanites/nanite_programs/sensor.dm @@ -345,6 +345,14 @@ var/sentence = "" var/inclusive = TRUE + +/datum/nanite_program/sensor/voice/on_mob_add() + . = ..() + RegisterSignal(host_mob, COMSIG_MOVABLE_HEAR, .proc/on_hear) + +/datum/nanite_program/sensor/voice/on_mob_remove() + UnregisterSignal(host_mob, COMSIG_MOVABLE_HEAR, .proc/on_hear) + /datum/nanite_program/sensor/voice/set_extra_setting(user, setting) if(setting == "Sent Code") var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num @@ -378,15 +386,12 @@ target.sentence = sentence target.inclusive = inclusive -/datum/nanite_program/sensor/voice/on_hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) +/datum/nanite_program/sensor/voice/proc/on_hear(datum/source, list/hearing_args) if(!sentence) return - //To make it not case sensitive - var/low_message = lowertext(raw_message) - var/low_sentence = lowertext(sentence) if(inclusive) - if(findtext(low_message, low_sentence)) + if(findtextEx(hearing_args[HEARING_RAW_MESSAGE], sentence)) send_code() else - if(low_message == low_sentence) + if(hearing_args[HEARING_RAW_MESSAGE] == sentence) send_code() \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_remote.dm b/code/modules/research/nanites/nanite_remote.dm index 824d033bf4..3b242d28df 100644 --- a/code/modules/research/nanites/nanite_remote.dm +++ b/code/modules/research/nanites/nanite_remote.dm @@ -22,7 +22,7 @@ /obj/item/nanite_remote/examine(mob/user) . = ..() if(locked) - to_chat(user, "Alt-click to unlock.") + . += "Alt-click to unlock." /obj/item/nanite_remote/AltClick(mob/user) . = ..() diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index a2482c49a8..c0aa4a3127 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -322,6 +322,15 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 +/datum/techweb_node/unregulated_bluespace + id = "unregulated_bluespace" + display_name = "Unregulated Bluespace Research" + description = "Bluespace technology using unstable or unbalanced procedures, prone to damaging the fabric of bluespace. Outlawed by galactic conventions." + prereq_ids = list("bluespace_warping", "syndicate_basic") + design_ids = list("desynchronizer") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + export_price = 2500 + /////////////////////////plasma tech///////////////////////// /datum/techweb_node/basic_plasma id = "basic_plasma" diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm index 4d39d956e7..a21fddb6cf 100644 --- a/code/modules/research/xenobiology/crossbreeding/industrial.dm +++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm @@ -13,8 +13,8 @@ Industrial extracts: var/itemamount = 1 //How many items to spawn /obj/item/slimecross/industrial/examine(mob/user) - ..() - to_chat(user, "It currently has [plasmaabsorbed] units of plasma floating inside the outer shell, out of [plasmarequired] units.") + . = ..() + . += "It currently has [plasmaabsorbed] units of plasma floating inside the outer shell, out of [plasmarequired] units." /obj/item/slimecross/industrial/proc/do_after_spawn(obj/item/spawned) return diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 2894ce2108..ab0db8c4a7 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -18,9 +18,9 @@ var/recurring = FALSE /obj/item/slime_extract/examine(mob/user) - ..() + . = ..() if(Uses > 1) - to_chat(user,"It has [Uses] uses remaining.") + . += "It has [Uses] uses remaining." /obj/item/slime_extract/attackby(obj/item/O, mob/user) if(istype(O, /obj/item/slimepotion/enhancer)) diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 3fba237c23..82790c1304 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -70,11 +70,11 @@ var/heavy_burn_msg = "peeling away" /obj/item/bodypart/examine(mob/user) - ..() + . = ..() if(brute_dam > DAMAGE_PRECISION) - to_chat(user, "This limb has [brute_dam > 30 ? "severe" : "minor"] bruising.") + . += "This limb has [brute_dam > 30 ? "severe" : "minor"] bruising." if(burn_dam > DAMAGE_PRECISION) - to_chat(user, "This limb has [burn_dam > 30 ? "severe" : "minor"] burns.") + . += "This limb has [burn_dam > 30 ? "severe" : "minor"] burns." /obj/item/bodypart/blob_act() take_damage(max_damage) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index e42fc91d47..503bf4ddd0 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -38,8 +38,8 @@ transform = matrix(-1, 0, 0, 0, 1, 0) /obj/item/organ/cyberimp/arm/examine(mob/user) - ..() - to_chat(user, "[src] is assembled in the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it.") + . = ..() + . += "[src] is assembled in the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it." /obj/item/organ/cyberimp/arm/screwdriver_act(mob/living/user, obj/item/I) . = ..() diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 72925b854e..83b0eb4d17 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -749,17 +749,17 @@ to_chat(world, "[user]'s power is [power_multiplier].") //Mixables - var/static/regex/enthral_words = regex("relax|obey|love|serve|docile|so easy|ara ara") - var/static/regex/reward_words = regex("good boy|good girl|good pet|good job") - var/static/regex/punish_words = regex("bad boy|bad girl|bad pet|bad job") + var/static/regex/enthral_words = regex("relax|obey|love|serve|so easy|ara ara") + var/static/regex/reward_words = regex("good boy|good girl|good pet|good job|splendid|jolly good|bloody brilliant") + var/static/regex/punish_words = regex("bad boy|bad girl|bad pet|bad job|spot of bother|gone and done it now|blast it|buggered it up") //phase 0 var/static/regex/saymyname_words = regex("say my name|who am i|whoami") - var/static/regex/wakeup_words = regex("revert|awaken|snap") //works + var/static/regex/wakeup_words = regex("revert|awaken|snap|attention") //phase1 var/static/regex/petstatus_words = regex("how are you|what is your status|are you okay") var/static/regex/silence_words = regex("shut up|silence|be silent|ssh|quiet|hush") var/static/regex/speak_words = regex("talk to me|speak") - var/static/regex/antiresist_words = regex("unable to resist|give in")//useful if you think your target is resisting a lot + var/static/regex/antiresist_words = regex("unable to resist|give in|stop being difficult")//useful if you think your target is resisting a lot var/static/regex/resist_words = regex("resist|snap out of it|fight")//useful if two enthrallers are fighting var/static/regex/forget_words = regex("forget|muddled|awake and forget") var/static/regex/attract_words = regex("come here|come to me|get over here|attract") @@ -768,11 +768,11 @@ var/static/regex/awoo_words = regex("howl|awoo|bark") var/static/regex/nya_words = regex("nya|meow|mewl") var/static/regex/sleep_words = regex("sleep|slumber|rest") - var/static/regex/strip_words = regex("strip|derobe|nude") + var/static/regex/strip_words = regex("strip|derobe|nude|at ease|suit off") var/static/regex/walk_words = regex("slow down|walk") var/static/regex/run_words = regex("run|speed up") - var/static/regex/liedown_words = regex("lie down") //TO ADD - var/static/regex/knockdown_words = regex("drop|fall|trip|knockdown|kneel") + var/static/regex/liedown_words = regex("lie down") + var/static/regex/knockdown_words = regex("drop|fall|trip|knockdown|kneel|army crawl") //phase 3 var/static/regex/statecustom_words = regex("state triggers|state your triggers") var/static/regex/custom_words = regex("new trigger|listen to me") @@ -780,14 +780,14 @@ var/static/regex/custom_echo = regex("obsess|fills your mind|loop") var/static/regex/instill_words = regex("feel|entice|overwhel") var/static/regex/recognise_words = regex("recognise me|did you miss me?") - var/static/regex/objective_words = regex("new objective|obey this command|unable to resist|compulsed") - var/static/regex/heal_words = regex("live|heal|survive|mend|life|pets never die") + var/static/regex/objective_words = regex("new objective|obey this command|unable to resist|compulsed|word from hq") + var/static/regex/heal_words = regex("live|heal|survive|mend|life|pets never die|heroes never die") var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt") - var/static/regex/hallucinate_words = regex("get high|hallucinate") + var/static/regex/hallucinate_words = regex("get high|hallucinate|trip balls") var/static/regex/hot_words = regex("heat|hot|hell") var/static/regex/cold_words = regex("cold|cool down|chill|freeze") - var/static/regex/getup_words = regex("get up") - var/static/regex/pacify_words = regex("more and more docile|complaisant|friendly|pacifist") + var/static/regex/getup_words = regex("get up|hop to it") + var/static/regex/pacify_words = regex("docile|complaisant|friendly|pacifist") var/static/regex/charge_words = regex("charge|oorah|attack") var/distancelist = list(2,2,1.5,1.3,1.15,1,0.8,0.6,0.5,0.25) @@ -1013,7 +1013,7 @@ speaktrigger += "I'm really, really horny, " //collar - if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) + if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar) && H.client?.prefs.lewdchem) speaktrigger += "I love the collar you gave me, " //End if(H.client?.prefs.lewdchem) @@ -1249,6 +1249,9 @@ if (get_dist(user, H) > 1)//Requires user to be next to their pet. to_chat(user, "You need to be next to your pet to give them a new trigger!") continue + if(!H.client?.prefs.lewdchem) + to_chat(user, "[H] seems incapable of being implanted with triggers.") + continue else user.emote("me", 1, "puts their hands upon [H.name]'s head and looks deep into their eyes, whispering something to them.") user.SetStun(1000)//Hands are handy, so you have to stay still @@ -1287,6 +1290,9 @@ if (get_dist(user, H) > 1)//Requires user to be next to their pet. to_chat(user, "You need to be next to your pet to give them a new echophrase!") continue + if(!H.client?.prefs.lewdchem) + to_chat(user, "[H] seems incapable of being implanted with an echoing phrase.") + continue else user.emote("me", 1, "puts their hands upon [H.name]'s head and looks deep into their eyes, whispering something to them.") user.SetStun(1000)//Hands are handy, so you have to stay still @@ -1342,8 +1348,8 @@ for(var/V in listeners) var/mob/living/carbon/human/H = V var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall) - if(E.phase == 3 && H.client?.prefs.lewdchem) - var/instill = stripped_input(user, "Instill an emotion in your [(user.client?.prefs.lewdchem?"Your pet":"listener")].", MAX_MESSAGE_LEN) + if(E.phase >= 3 && H.client?.prefs.lewdchem) + var/instill = stripped_input(user, "Instill an emotion in [H].", MAX_MESSAGE_LEN) to_chat(H, "[instill]") to_chat(user, "You sucessfully instill a feeling in [H]") log_game("FERMICHEM: [H] has been instilled by [user] with [instill] via MKUltra.") diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 001ef8d0e6..f4adfd265a 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -30,7 +30,7 @@ /obj/item/retractor/advanced/examine(mob/living/user) . = ..() - to_chat(user, " It resembles a [tool_behaviour == TOOL_RETRACTOR ? "retractor" : "hemostat"]. " /obj/item/retractor/augment name = "retractor" @@ -133,7 +133,7 @@ /obj/item/surgicaldrill/advanced/examine(mob/living/user) . = ..() - to_chat(user, "") + . += "" /obj/item/surgicaldrill/augment name = "surgical drill" @@ -206,7 +206,7 @@ /obj/item/scalpel/advanced/examine(mob/living/user) . = ..() - to_chat(user, "") + . += "" /obj/item/scalpel/augment name = "scalpel" diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm index 54bc03bcf3..e4cb090448 100644 --- a/code/modules/vehicles/_vehicle.dm +++ b/code/modules/vehicles/_vehicle.dm @@ -32,17 +32,17 @@ generate_actions() /obj/vehicle/examine(mob/user) - ..() + . = ..() if(resistance_flags & ON_FIRE) - to_chat(user, "It's on fire!") + . += "It's on fire!" var/healthpercent = obj_integrity/max_integrity * 100 switch(healthpercent) if(50 to 99) - to_chat(user, "It looks slightly damaged.") + . += "It looks slightly damaged." if(25 to 50) - to_chat(user, "It appears heavily damaged.") + . += "It appears heavily damaged." if(0 to 25) - to_chat(user, "It's falling apart!") + . += "It's falling apart!" /obj/vehicle/proc/is_key(obj/item/I) return I? (key_type_exact? (I.type == key_type) : istype(I, key_type)) : FALSE diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index 53f60788fe..31d0a243e7 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -29,9 +29,9 @@ icon_state = "upgrade" /obj/vehicle/ridden/janicart/examine(mob/user) - ..() + . = ..() if(floorbuffer) - to_chat(user, "It has been upgraded with a floor buffer.") + . += "It has been upgraded with a floor buffer." /obj/vehicle/ridden/janicart/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/storage/bag/trash)) diff --git a/code/modules/vehicles/ridden.dm b/code/modules/vehicles/ridden.dm index 8fe7322579..27da0f6cea 100644 --- a/code/modules/vehicles/ridden.dm +++ b/code/modules/vehicles/ridden.dm @@ -15,9 +15,9 @@ . = ..() if(key_type) if(!inserted_key) - to_chat(user, "Put a key inside it by clicking it with the key.") + . += "Put a key inside it by clicking it with the key." else - to_chat(user, "Alt-click [src] to remove the key.") + . += "Alt-click [src] to remove the key." /obj/vehicle/ridden/generate_action_type(actiontype) var/datum/action/vehicle/ridden/A = ..() diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index c66e350af6..0d1fe7f047 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -8,6 +8,10 @@ vend_reply = "Thank you for using the ClothesMate!" products = list(/obj/item/clothing/head/that = 4, /obj/item/clothing/head/fedora = 3, + /obj/item/clothing/head/beret = 3, + /obj/item/clothing/head/beret/black = 3, + /obj/item/clothing/head/beret/purple = 3, + /obj/item/clothing/head/beret/blue = 3, /obj/item/clothing/glasses/monocle = 3, /obj/item/clothing/suit/jacket = 4, /obj/item/clothing/suit/jacket/puffer/vest = 4, diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index adaa56fc6d..dd0129346f 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -34,6 +34,7 @@ product_ads = "Make those blood stains look fashionable!!" vend_reply = "Thank you for using the MediDrobe!" products = list(/obj/item/clothing/accessory/pocketprotector = 3, + /obj/item/clothing/head/beret/med = 3, /obj/item/storage/backpack/duffelbag/med = 3, /obj/item/storage/backpack/medic = 3, /obj/item/storage/backpack/satchel/med = 3, @@ -63,6 +64,7 @@ product_ads = "Guaranteed to protect your feet from industrial accidents!;Afraid of radiation? Then wear yellow!" vend_reply = "Thank you for using the EngiDrobe!" products = list(/obj/item/clothing/accessory/pocketprotector = 5, + /obj/item/clothing/head/beret/eng = 3, /obj/item/storage/backpack/duffelbag/engineering = 3, /obj/item/storage/backpack/industrial = 3, /obj/item/storage/backpack/satchel/eng = 3, @@ -85,6 +87,7 @@ product_ads = "Get your inflammable clothing right here!!!" vend_reply = "Thank you for using the AtmosDrobe!" products = list(/obj/item/clothing/accessory/pocketprotector = 3, + /obj/item/clothing/head/beret/atmos = 3, /obj/item/storage/backpack/duffelbag/engineering = 3, /obj/item/storage/backpack/satchel/eng = 3, /obj/item/storage/backpack/industrial = 3, @@ -123,6 +126,7 @@ product_ads = "You turn me TRUE, use defines!;0110001101101100011011110111010001101000011001010111001101101000011001010111001001100101" vend_reply = "Thank you for using the RoboDrobe!" products = list(/obj/item/clothing/glasses/hud/diagnostic = 3, + /obj/item/clothing/head/beret/robo = 3, /obj/item/clothing/under/rank/roboticist = 3, /obj/item/clothing/under/rank/roboticist/skirt = 3, /obj/item/clothing/suit/hooded/wintercoat/robotics = 3, @@ -145,6 +149,7 @@ product_ads = "Longing for the smell of flesh plasma? Buy your science clothing now!;Made with 10% Auxetics, so you don't have to worry losing your arm!" vend_reply = "Thank you for using the SciDrobe!" products = list(/obj/item/clothing/accessory/pocketprotector = 5, + /obj/item/clothing/head/beret/sci = 3, /obj/item/storage/backpack/science = 3, /obj/item/storage/backpack/satchel/tox = 3, /obj/item/clothing/suit/hooded/wintercoat/science = 3, @@ -341,6 +346,7 @@ product_ads = "Our clothes are 0.5% more resistant to acid spills! Get yours now!" vend_reply = "Thank you for using the ChemDrobe!" products = list(/obj/item/clothing/under/rank/chemist = 3, + /obj/item/clothing/head/beret/chem = 3, /obj/item/clothing/under/rank/chemist/skirt = 3, /obj/item/clothing/suit/hooded/wintercoat/chemistry = 3, /obj/item/clothing/shoes/sneakers/white = 3, @@ -378,7 +384,8 @@ icon_state = "virodrobe" product_ads = " Viruses getting you down? Then upgrade to sterilized clothing today!" vend_reply = "Thank you for using the ViroDrobe" - products = list(/obj/item/clothing/under/rank/virologist = 3, + products = list(/obj/item/clothing/head/beret/viro = 3, + /obj/item/clothing/under/rank/virologist = 3, /obj/item/clothing/under/rank/virologist/skirt = 3, /obj/item/clothing/suit/hooded/wintercoat/viro = 3, /obj/item/clothing/shoes/sneakers/white = 3, diff --git a/code/modules/vore/resizing/holder_micro_vr.dm b/code/modules/vore/resizing/holder_micro_vr.dm index 8eea2737cf..1f1aacf98d 100644 --- a/code/modules/vore/resizing/holder_micro_vr.dm +++ b/code/modules/vore/resizing/holder_micro_vr.dm @@ -10,8 +10,9 @@ pixel_y = 0 // Override value from parent. /obj/item/holder/micro/examine(var/mob/user) + . = list() for(var/mob/living/M in contents) - M.examine(user) + . += M.examine(user) /obj/item/holder/MouseDrop(mob/M as mob) ..() diff --git a/html/changelogs/AutoChangeLog-pr-9268.yml b/html/changelogs/AutoChangeLog-pr-9268.yml new file mode 100644 index 0000000000..3d856b6842 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9268.yml @@ -0,0 +1,5 @@ +author: "Fermis" +delete-after: True +changes: + - tweak: "Purity, Astral, RNG, MK, SMilk, SDGF, furranium, hatmium, eigen, nanite." + - bugfix: "Eigen and purity." diff --git a/html/changelogs/AutoChangeLog-pr-9749.yml b/html/changelogs/AutoChangeLog-pr-9749.yml new file mode 100644 index 0000000000..3113fa08c3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9749.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - balance: "Boh cant hold WEIGHT_CLASS_GIGANTIC, just Bulky. Makes katana, chainsaw and base ball bat into bulky items so they may fit" diff --git a/html/changelogs/AutoChangeLog-pr-9864.yml b/html/changelogs/AutoChangeLog-pr-9864.yml new file mode 100644 index 0000000000..ff1f4f6508 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9864.yml @@ -0,0 +1,5 @@ +author: "Knouli" +delete-after: True +changes: + - rscadd: "attack_self proc for the legion core which triggers a self-heal al la the previous 'afterattack' proc, as if clicking on the character's own sprite to self-heal" + - rscadd: "admin logging for all three use cases of legion core healing - afterattack, attack_self, and implanted ui_action_click" diff --git a/html/changelogs/AutoChangeLog-pr-9867.yml b/html/changelogs/AutoChangeLog-pr-9867.yml new file mode 100644 index 0000000000..4333d5eb73 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9867.yml @@ -0,0 +1,6 @@ +author: "Naksu, ShizCalev" +delete-after: True +changes: + - refactor: "Refactored examine-code" + - bugfix: "Examining a human with a burned prosthetic limb will no longer tell you that the limb is blistered." + - tweak: "Items will now inform you if they are resistant to frost, fire, acid, and lava when examined." diff --git a/html/changelogs/AutoChangeLog-pr-9874.yml b/html/changelogs/AutoChangeLog-pr-9874.yml new file mode 100644 index 0000000000..2e932c458b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9874.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - rscadd: "Honkbot oil spills are of the slippery kind now. Honk." diff --git a/html/changelogs/AutoChangeLog-pr-9881.yml b/html/changelogs/AutoChangeLog-pr-9881.yml new file mode 100644 index 0000000000..3ff9081e66 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9881.yml @@ -0,0 +1,4 @@ +author: "Putnam" +delete-after: True +changes: + - rscadd: "Dynamic voting now features extended, if recent rounds have been chaotic." diff --git a/html/changelogs/AutoChangeLog-pr-9882.yml b/html/changelogs/AutoChangeLog-pr-9882.yml new file mode 100644 index 0000000000..581149a51f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9882.yml @@ -0,0 +1,4 @@ +author: "Fermis" +delete-after: True +changes: + - refactor: "refactored sleepers!" diff --git a/html/changelogs/AutoChangeLog-pr-9886.yml b/html/changelogs/AutoChangeLog-pr-9886.yml new file mode 100644 index 0000000000..64c011e37c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9886.yml @@ -0,0 +1,5 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "chem dispenser beakers end up in your hand yet again." + - bugfix: "Bikehorns squeak yet again, the world is safe." diff --git a/html/changelogs/AutoChangeLog-pr-9891.yml b/html/changelogs/AutoChangeLog-pr-9891.yml new file mode 100644 index 0000000000..105749ea29 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9891.yml @@ -0,0 +1,4 @@ +author: "Putnam" +delete-after: True +changes: + - tweak: "Roundstart rulesets now scale on population ready rather than total population." diff --git a/html/changelogs/AutoChangeLog-pr-9896.yml b/html/changelogs/AutoChangeLog-pr-9896.yml new file mode 100644 index 0000000000..378129d227 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9896.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Cyborgs can now actually use cameras from a distance." diff --git a/html/changelogs/AutoChangeLog-pr-9898.yml b/html/changelogs/AutoChangeLog-pr-9898.yml new file mode 100644 index 0000000000..002e3b544d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9898.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Suicides are yet again painful and instant and won't throw people in deep crit from full health." diff --git a/html/changelogs/AutoChangeLog-pr-9902.yml b/html/changelogs/AutoChangeLog-pr-9902.yml new file mode 100644 index 0000000000..9a9d7f4597 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9902.yml @@ -0,0 +1,6 @@ +author: "Useroth" +delete-after: True +changes: + - rscadd: "A bunch of newer tg plants" + - rscadd: "A bunch of newer tg plant traits" + - rscadd: "A couple of newer tg plant reagents" diff --git a/html/changelogs/AutoChangeLog-pr-9906.yml b/html/changelogs/AutoChangeLog-pr-9906.yml new file mode 100644 index 0000000000..67c5c20b58 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9906.yml @@ -0,0 +1,4 @@ +author: "Xantholne" +delete-after: True +changes: + - rscadd: "New Berets for most heads and departments available in their autodrobes or lockers" diff --git a/html/changelogs/AutoChangeLog-pr-9907.yml b/html/changelogs/AutoChangeLog-pr-9907.yml new file mode 100644 index 0000000000..6bd27c6e50 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9907.yml @@ -0,0 +1,4 @@ +author: "Putnam" +delete-after: True +changes: + - bugfix: "VR mobs can no longer be dynamic midround antags." diff --git a/html/changelogs/AutoChangeLog-pr-9908.yml b/html/changelogs/AutoChangeLog-pr-9908.yml new file mode 100644 index 0000000000..fb0ae06238 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9908.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "fixed rogue pixels on the energy gu- ahem blaster carbine... and a few apc lights states being neigh-indistinguishable." diff --git a/html/changelogs/AutoChangeLog-pr-9909.yml b/html/changelogs/AutoChangeLog-pr-9909.yml new file mode 100644 index 0000000000..7cfb6ce5b2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9909.yml @@ -0,0 +1,5 @@ +author: "kiwedespars" +delete-after: True +changes: + - rscdel: "removed moth fluff coloring you like your wings" + - balance: "made insect not so bad." diff --git a/html/changelogs/AutoChangeLog-pr-9920.yml b/html/changelogs/AutoChangeLog-pr-9920.yml new file mode 100644 index 0000000000..68e336f042 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9920.yml @@ -0,0 +1,4 @@ +author: "YakumoChen" +delete-after: True +changes: + - imageadd: "New AI Holograms and Displays! Ported from /vg/station." diff --git a/html/changelogs/AutoChangeLog-pr-9922.yml b/html/changelogs/AutoChangeLog-pr-9922.yml new file mode 100644 index 0000000000..3c293c742c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9922.yml @@ -0,0 +1,6 @@ +author: "GrayRachnid" +delete-after: True +changes: + - rscadd: "Added traumas" + - rscadd: "Added science powergame tool" + - tweak: "a few hearing args" diff --git a/html/changelogs/AutoChangeLog-pr-9942.yml b/html/changelogs/AutoChangeLog-pr-9942.yml new file mode 100644 index 0000000000..3b6925289b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9942.yml @@ -0,0 +1,4 @@ +author: "Useroth" +delete-after: True +changes: + - bugfix: "the new plants now properly get their reagents and reagent genes instead of being empty with UNKNOWN reagents listed in the DNA machine" diff --git a/icons/mob/AI.dmi b/icons/mob/AI.dmi index bdf54e36e5..39f4d12268 100644 Binary files a/icons/mob/AI.dmi and b/icons/mob/AI.dmi differ diff --git a/modular_citadel/icons/mob/digishoes.dmi b/icons/mob/feet_digi.dmi similarity index 100% rename from modular_citadel/icons/mob/digishoes.dmi rename to icons/mob/feet_digi.dmi diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index f1397e70ea..900a4e8230 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/modular_citadel/icons/mob/muzzled_helmet.dmi b/icons/mob/head_muzzled.dmi similarity index 100% rename from modular_citadel/icons/mob/muzzled_helmet.dmi rename to icons/mob/head_muzzled.dmi diff --git a/modular_citadel/icons/mob/muzzled_mask.dmi b/icons/mob/mask_muzzled.dmi similarity index 100% rename from modular_citadel/icons/mob/muzzled_mask.dmi rename to icons/mob/mask_muzzled.dmi diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index d724747a50..30b8eb8f9a 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/modular_citadel/icons/mob/suit_digi.dmi b/icons/mob/suit_digi.dmi similarity index 100% rename from modular_citadel/icons/mob/suit_digi.dmi rename to icons/mob/suit_digi.dmi diff --git a/modular_citadel/icons/mob/taur_canine.dmi b/icons/mob/taur_canine.dmi similarity index 100% rename from modular_citadel/icons/mob/taur_canine.dmi rename to icons/mob/taur_canine.dmi diff --git a/modular_citadel/icons/mob/taur_hooved.dmi b/icons/mob/taur_hooved.dmi similarity index 100% rename from modular_citadel/icons/mob/taur_hooved.dmi rename to icons/mob/taur_hooved.dmi diff --git a/modular_citadel/icons/mob/taur_naga.dmi b/icons/mob/taur_naga.dmi similarity index 100% rename from modular_citadel/icons/mob/taur_naga.dmi rename to icons/mob/taur_naga.dmi diff --git a/modular_citadel/icons/mob/uniform_digi.dmi b/icons/mob/uniform_digi.dmi similarity index 100% rename from modular_citadel/icons/mob/uniform_digi.dmi rename to icons/mob/uniform_digi.dmi diff --git a/icons/mob/wings.dmi b/icons/mob/wings.dmi index 105da7d865..7d95805dc5 100644 Binary files a/icons/mob/wings.dmi and b/icons/mob/wings.dmi differ diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index 701c3a2467..74a5164844 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index aa8f7bb7e5..d88fb99b9e 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index db0e5a301a..f467da6fbf 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index ca339b5262..d23af6c9b4 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/icons/obj/hydroponics/growing.dmi b/icons/obj/hydroponics/growing.dmi index e7dee2290d..45e73c9281 100644 Binary files a/icons/obj/hydroponics/growing.dmi and b/icons/obj/hydroponics/growing.dmi differ diff --git a/icons/obj/hydroponics/growing_flowers.dmi b/icons/obj/hydroponics/growing_flowers.dmi index 245841a6b4..98d9af2ce6 100644 Binary files a/icons/obj/hydroponics/growing_flowers.dmi and b/icons/obj/hydroponics/growing_flowers.dmi differ diff --git a/icons/obj/hydroponics/growing_fruits.dmi b/icons/obj/hydroponics/growing_fruits.dmi index dfcb54b7b9..6630da1478 100644 Binary files a/icons/obj/hydroponics/growing_fruits.dmi and b/icons/obj/hydroponics/growing_fruits.dmi differ diff --git a/icons/obj/hydroponics/growing_mushrooms.dmi b/icons/obj/hydroponics/growing_mushrooms.dmi index aa24b394f2..20633cf85b 100644 Binary files a/icons/obj/hydroponics/growing_mushrooms.dmi and b/icons/obj/hydroponics/growing_mushrooms.dmi differ diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi index 63dc8b98fd..9d4eefc3bb 100644 Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi index 3c625cbe40..7bc9ac1fe3 100644 Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index 3273c518d7..1ba953d284 100644 Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index 3aa6912da7..90d648d0be 100644 Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 2a56a03e66..18ebd6b91e 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index abf68cc398..0b48b68e31 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -26,8 +26,8 @@ /datum/status_effect/chem/SGDF/on_remove(mob/living/carbon/M) log_game("FERMICHEM: SGDF mind shift applied. [owner] is now playing as their clone and should not have memories after their clone split (look up SGDF status applied). ID: [owner.key]") originalmind.transfer_to(fermi_Clone) - to_chat(owner, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. curiously, you find that you memories are blank after you ingested the sythetic serum, leaving you to wonder where the other you is.") - to_chat(M, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. curiously, you find that you memories are blank after you ingested the sythetic serum, leaving you to wonder where the other you is.") + to_chat(owner, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. Curiously, you find that you memories are blank after you ingested the synthetic serum, leaving you to wonder where the other you is.") + to_chat(M, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. Curiously, you find that you memories are blank after you ingested the synthetic serum, leaving you to wonder where the other you is.") fermi_Clone = null //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -165,17 +165,49 @@ owner.remove_movespeed_modifier(DICK_MOVEMENT_SPEED) owner.ResetBloodVol() +/////////////////////////////////////////////// +// Astral INSURANCE +/////////////////////////////////////////////// +//Makes sure people can't get trapped in each other's bodies if lag causes a deync between proc calls. + + +/datum/status_effect/chem/astral_insurance + id = "astral_insurance" + var/mob/living/original + var/datum/mind/originalmind + alert_type = null + +/datum/status_effect/chem/astral_insurance/tick(mob/living/carbon/M) + . = ..() + if(owner.reagents.has_reagent("astral")) + return + if(owner.mind == originalmind) //If they're home, let the chem deal with deletion. + return + if(owner.mind) + var/mob/living/simple_animal/astral/G = new(get_turf(M.loc)) + owner.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end. + to_chat(G, "[M]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'") + log_game("FERMICHEM: [M]'s possesser has been booted out into a astral ghost!") + originalmind.transfer_to(original) + +/datum/status_effect/chem/astral_insurance/on_remove(mob/living/carbon/M) //God damnit get them home! + if(owner.mind == originalmind) //If they're home, HOORAY + return + if(owner.mind) + var/mob/living/simple_animal/astral/G = new(get_turf(M.loc)) + owner.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end. + to_chat(G, "[M]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'") + log_game("FERMICHEM: [M]'s possesser has been booted out into a astral ghost!") + originalmind.transfer_to(original) + + /*////////////////////////////////////////// - Mind control functions + Mind control functions! /////////////////////////////////////////// */ //Preamble -/* -/mob/living - var/lewd = TRUE -*/ /mob/living/verb/toggle_lewd() set category = "IC" @@ -596,7 +628,6 @@ saytext += " You find yourself fully believing in the validity of what you just said and don't think to question it." addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "[saytext]"), 5) addtimer(CALLBACK(C, /atom/movable/proc/say, "[customTriggers[trigger][2]]"), 5) - //(C.say(customTriggers[trigger][2]))//trigger3 log_game("FERMICHEM: MKULTRA: [owner] ckey: [owner.key] has been forced to say: \"[customTriggers[trigger][2]]\" from previous trigger.") @@ -711,7 +742,7 @@ deltaResist *= 1.25 if (owner.reagents.has_reagent("neurine")) deltaResist *= 1.5 - if (!HAS_TRAIT(owner, TRAIT_CROCRIN_IMMUNE) && M.canbearoused) + if (!HAS_TRAIT(owner, TRAIT_CROCRIN_IMMUNE) && M.canbearoused && owner.client?.prefs.lewdchem) if (owner.reagents.has_reagent("anaphro")) deltaResist *= 1.5 if (owner.reagents.has_reagent("anaphro+")) @@ -720,7 +751,6 @@ deltaResist *= 0.75 if (owner.reagents.has_reagent("aphro+")) deltaResist *= 0.5 - //Antag resistance //cultists are already brainwashed by their god if(iscultist(owner)) diff --git a/modular_citadel/code/game/gamemodes/gangs/dominator.dm b/modular_citadel/code/game/gamemodes/gangs/dominator.dm index c590baf62e..8c1272dcbd 100644 --- a/modular_citadel/code/game/gamemodes/gangs/dominator.dm +++ b/modular_citadel/code/game/gamemodes/gangs/dominator.dm @@ -66,18 +66,18 @@ add_overlay("damage") /obj/machinery/dominator/examine(mob/user) - ..() + . = ..() if(stat & BROKEN) return if(gang && gang.domination_time != NOT_DOMINATING) if(gang.domination_time > world.time) - to_chat(user, "Hostile Takeover in progress. Estimated [gang.domination_time_remaining()] seconds remain.") + . += "Hostile Takeover in progress. Estimated [gang.domination_time_remaining()] seconds remain." else - to_chat(user, "Hostile Takeover of [station_name()] successful. Have a great day.") + . += "Hostile Takeover of [station_name()] successful. Have a great day." else - to_chat(user, "System on standby.") - to_chat(user, "System Integrity: [round((obj_integrity/max_integrity)*100,1)]%") + . += "System on standby." + . += "System Integrity: [round((obj_integrity/max_integrity)*100,1)]%" /obj/machinery/dominator/process() ..() diff --git a/modular_citadel/code/game/objects/structures/crates_lockers/closets/fitness.dm b/modular_citadel/code/game/objects/structures/crates_lockers/closets/fitness.dm deleted file mode 100644 index 1ef2285878..0000000000 --- a/modular_citadel/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/structure/closet/athletic_mixed/PopulateContents() - ..() - new /obj/item/clothing/under/polychromic/shortpants(src) - new /obj/item/clothing/under/polychromic/shortpants(src) - new /obj/item/clothing/under/polychromic/shortpants(src) \ No newline at end of file diff --git a/modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/citadel_lockers.dm b/modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/citadel_lockers.dm deleted file mode 100644 index 40a8224627..0000000000 --- a/modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/citadel_lockers.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/structure/closet/secure_closet/quartermaster/PopulateContents() - ..() - new /obj/item/radio/headset/heads/qm(src) - -/obj/structure/closet/secure_closet/CMO/PopulateContents() - ..() - new /obj/item/storage/hypospraykit/cmo(src) \ No newline at end of file diff --git a/modular_citadel/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/modular_citadel/code/game/objects/structures/crates_lockers/closets/wardrobe.dm deleted file mode 100644 index ba4fa3787b..0000000000 --- a/modular_citadel/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ /dev/null @@ -1,37 +0,0 @@ -/obj/structure/closet/wardrobe/mixed/PopulateContents() - if(prob(40)) - new /obj/item/clothing/suit/jacket(src) - if(prob(40)) - new /obj/item/clothing/suit/jacket(src) - new /obj/item/clothing/under/polychromic/jumpsuit(src) - new /obj/item/clothing/under/polychromic/jumpsuit(src) - new /obj/item/clothing/under/polychromic/jumpsuit(src) - new /obj/item/clothing/under/polychromic/shirt(src) - new /obj/item/clothing/under/polychromic/shirt(src) - new /obj/item/clothing/under/polychromic/shirt(src) - new /obj/item/clothing/under/polychromic/kilt(src) - new /obj/item/clothing/under/polychromic/kilt(src) - new /obj/item/clothing/under/polychromic/kilt(src) - new /obj/item/clothing/under/polychromic/skirt(src) - new /obj/item/clothing/under/polychromic/skirt(src) - new /obj/item/clothing/under/polychromic/skirt(src) - new /obj/item/clothing/under/polychromic/shorts(src) - new /obj/item/clothing/under/polychromic/shorts(src) - new /obj/item/clothing/under/polychromic/shorts(src) - new /obj/item/clothing/mask/bandana/red(src) - new /obj/item/clothing/mask/bandana/red(src) - new /obj/item/clothing/mask/bandana/blue(src) - new /obj/item/clothing/mask/bandana/blue(src) - new /obj/item/clothing/mask/bandana/gold(src) - new /obj/item/clothing/mask/bandana/gold(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/clothing/shoes/sneakers/white(src) - if(prob(30)) - new /obj/item/clothing/suit/hooded/wintercoat(src) - new /obj/item/clothing/shoes/winterboots(src) - return - -/obj/structure/closet/wardrobe/curator/PopulateContents() - ..() - new /obj/item/clothing/accessory/pocketprotector/full(src) \ No newline at end of file diff --git a/modular_citadel/code/modules/arousal/genitals.dm b/modular_citadel/code/modules/arousal/genitals.dm index 9ecf67e4b0..9fa6d66d98 100644 --- a/modular_citadel/code/modules/arousal/genitals.dm +++ b/modular_citadel/code/modules/arousal/genitals.dm @@ -106,6 +106,10 @@ return /obj/item/organ/genital/proc/modify_size(modifier, min = -INFINITY, max = INFINITY) + fluid_max_volume += modifier*2.5 + fluid_rate += modifier/10 + if(reagents) + reagents.maximum_volume = fluid_max_volume return /obj/item/organ/genital/proc/update_size() @@ -336,4 +340,3 @@ for(var/L in relevant_layers) H.apply_overlay(L) - diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm index 6299f68b6c..a82d02703d 100644 --- a/modular_citadel/code/modules/arousal/organs/breasts.dm +++ b/modular_citadel/code/modules/arousal/organs/breasts.dm @@ -73,6 +73,7 @@ prev_size = cached_size cached_size = new_value update() + ..() /obj/item/organ/genital/breasts/update_size()//wah var/rounded_cached = round(cached_size) diff --git a/modular_citadel/code/modules/arousal/organs/penis.dm b/modular_citadel/code/modules/arousal/organs/penis.dm index 17cd35c144..408d6521d0 100644 --- a/modular_citadel/code/modules/arousal/organs/penis.dm +++ b/modular_citadel/code/modules/arousal/organs/penis.dm @@ -23,6 +23,7 @@ prev_length = length length = CLAMP(length + modifier, min, max) update() + ..() /obj/item/organ/genital/penis/update_size(modified = FALSE) if(length < 0)//I don't actually know what round() does to negative numbers, so to be safe!! diff --git a/modular_citadel/code/modules/arousal/toys/dildos.dm b/modular_citadel/code/modules/arousal/toys/dildos.dm index 4b0a7ad919..24c8de1b60 100644 --- a/modular_citadel/code/modules/arousal/toys/dildos.dm +++ b/modular_citadel/code/modules/arousal/toys/dildos.dm @@ -93,9 +93,9 @@ pixel_x = rand(-7,7) /obj/item/dildo/examine(mob/user) - ..() + . = ..() if(can_customize) - user << "Alt-Click \the [src.name] to customize it." + . += "Alt-Click \the [src.name] to customize it." /obj/item/dildo/random//totally random name = "random dildo"//this name will show up in vendors and shit so you know what you're vending(or don't, i guess :^)) diff --git a/modular_citadel/code/modules/client/preferences.dm b/modular_citadel/code/modules/client/preferences.dm index 1caa4cfed7..29f8a113e8 100644 --- a/modular_citadel/code/modules/client/preferences.dm +++ b/modular_citadel/code/modules/client/preferences.dm @@ -15,7 +15,7 @@ var/arousable = TRUE var/widescreenpref = TRUE var/autostand = TRUE - var/lewdchem = TRUE + var/lewdchem = FALSE //vore prefs var/toggleeatingnoise = TRUE diff --git a/modular_citadel/code/modules/clothing/clothing.dm b/modular_citadel/code/modules/clothing/clothing.dm index 7f366ecf35..b23e805f92 100644 --- a/modular_citadel/code/modules/clothing/clothing.dm +++ b/modular_citadel/code/modules/clothing/clothing.dm @@ -80,9 +80,9 @@ user.regenerate_icons() /obj/item/clothing/examine(mob/user) - ..() + . = ..() if(hasprimary | hassecondary | hastertiary) - to_chat(user, "Alt-click to recolor it.") // so people don't "OOC how do you use polychromic clothes????" + . += "Alt-click to recolor it." /obj/item/clothing/Initialize() ..() diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 11dbb4dc80..d32fd78a44 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -2,7 +2,7 @@ //For custom items. // Unless there's a digitigrade version make sure you add mutantrace_variation = NO_MUTANTRACE_VARIATION to all clothing/under and shoes - Pooj -// Digitigrade stuff is uniform_digi.dmi and digishoes.dmi in modular_citadel/icons/mob +// Digitigrade stuff is uniform_digi.dmi and digishoes.dmi in icons/mob /obj/item/custom/ceb_soap name = "Cebutris' Soap" diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm index b11c7d4988..17def26f1d 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @@ -20,7 +20,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! /obj/item/dogborg/jaws/examine(mob/user) . = ..() if(!CONFIG_GET(flag/weaken_secborg)) - to_chat(user, "Use help intent to attempt to non-lethally incapacitate the target by latching on with your maw. This is more effective against exhausted and resting targets.") + . += "Use help intent to attempt to non-lethally incapacitate the target by latching on with your maw. This is more effective against exhausted and resting targets." /obj/item/dogborg/jaws/big name = "combat jaws" @@ -322,7 +322,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! /obj/item/soap/tongue/flavour/afterattack(atom/target, mob/user, proximity) if(!proximity) return - var/mob/living/silicon/robot.R = user + var/mob/living/silicon/robot/R = user if(ishuman(target)) var/mob/living/L = target if(status == 0 && check_zone(R.zone_selected) == "head") diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm index 7e6a8b3389..f847d04e9e 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm @@ -178,9 +178,9 @@ /obj/item/gun/ballistic/automatic/magrifle_e/examine(mob/user) . = ..() if(cell) - to_chat(user, "[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full.") + . += "[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full." else - to_chat(user, "[src] doesn't seem to have a cell!") + . += "[src] doesn't seem to have a cell!" /obj/item/gun/ballistic/automatic/magrifle_e/can_shoot() if(QDELETED(cell)) @@ -241,9 +241,9 @@ /obj/item/gun/ballistic/automatic/pistol/mag_e/examine(mob/user) . = ..() if(cell) - to_chat(user, "[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full.") + . += "[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full." else - to_chat(user, "[src] doesn't seem to have a cell!") + . += "[src] doesn't seem to have a cell!" /obj/item/gun/ballistic/automatic/pistol/mag_e/can_shoot() if(QDELETED(cell)) diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm index 1e0e0afc87..e40ccfe6ea 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm @@ -218,8 +218,8 @@ body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1) update_icon() /obj/item/gun/ballistic/automatic/AM4B/examine(mob/user) - ..() - to_chat(user, "Alt-click to recolor it.") + . = ..() + . += "Alt-click to recolor it." /obj/item/ammo_box/magazine/toy/AM4C name = "foam force AM4-C magazine" diff --git a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm index aef47a648e..be070ff7b5 100644 --- a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm +++ b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm @@ -94,8 +94,8 @@ update_icon() /obj/item/gun/energy/pumpaction/examine(mob/user) //so people don't ask HOW TO CHANGE FIRING MODE - ..() - to_chat(user, "Alt-click to change firing modes.") + . = ..() + . += "Alt-click to change firing modes." /obj/item/gun/energy/pumpaction/worn_overlays(isinhands, icon_file) //ammo counter for inhands . = ..() diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm index f582026bfb..35d13b3aa6 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm @@ -132,7 +132,7 @@ Creating a chem with a low purity will make you permanently fall in love with so /datum/reagent/fermi/enthrall name = "MKUltra" id = "enthrall" - description = "A forbidden deep red mixture that overwhelms a foreign body with waves of pleasure, intoxicating them into servitude. When taken by the creator, it will enhance the draw of their voice to those affected by it." + description = "A forbidden deep red mixture that increases a person's succeptability to another's words. When taken by the creator, it will enhance the draw of their voice to those affected by it." color = "#660015" // rgb: , 0, 255 taste_description = "synthetic chocolate, a base tone of alcohol, and high notes of roses" overdose_threshold = 100 //If this is too easy to get 100u of this, then double it please. @@ -194,7 +194,7 @@ Creating a chem with a low purity will make you permanently fall in love with so Vc.Remove(M) nVc.Insert(M) qdel(Vc) - to_chat(M, "You feel your vocal chords tingle as your voice comes out in a more sultry tone.") + to_chat(M, "You feel your vocal chords tingle you speak in a more charasmatic and sultry tone.)]") else log_game("FERMICHEM: MKUltra: [creatorName], [creatorID], is enthralling [M.name], [M.ckey]") M.apply_status_effect(/datum/status_effect/chem/enthrall) @@ -203,9 +203,6 @@ Creating a chem with a low purity will make you permanently fall in love with so /datum/reagent/fermi/enthrall/on_mob_life(mob/living/carbon/M) . = ..() if(purity < 0.5)//DO NOT SPLIT INTO DIFFERENT CHEM: This relies on DoNotSplit - has to be done this way. - if(volume < 0.5)//You don't get to escape that easily - FallInLove(pick(GLOB.player_list), M) - M.reagents.remove_reagent(id, volume) if (M.ckey == creatorID && creatorName == M.real_name)//If the creator drinks it, they fall in love randomly. If someone else drinks it, the creator falls in love with them. if(M.has_status_effect(STATUS_EFFECT_INLOVE))//Can't be enthralled when enthralled, so to speak. @@ -254,22 +251,6 @@ Creating a chem with a low purity will make you permanently fall in love with so if (M.ckey == creatorID && creatorName == M.real_name)//If the creator drinks 100u, then you get the status for someone random (They don't have the vocal chords though, so it's limited.) if (!M.has_status_effect(/datum/status_effect/chem/enthrall)) to_chat(M, "You are unable to resist your own charms anymore, and become a full blown narcissist.") - /*Old way of handling, left in as an option B - var/list/seen = viewers(7, get_turf(M))//Sound and sight checkers - for(var/mob/living/carbon/victim in seen) - if(victim == M)//as much as I want you to fall for beepsky, he doesn't have a ckey - seen = seen - victim - if(!victim.ckey) - seen = seen - victim - var/mob/living/carbon/chosen = pick(seen) - creatorID = chosen.ckey - if (chosen.gender == "female") - creatorGender = "Mistress" - else - creatorGender = "Master" - creatorName = chosen.real_name - creator = get_mob_by_key(creatorID) - */ ADD_TRAIT(M, TRAIT_PACIFISM, "MKUltra") var/datum/status_effect/chem/enthrall/E if (!M.has_status_effect(/datum/status_effect/chem/enthrall)) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm index 613d8819fa..c72b702a97 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm @@ -46,13 +46,8 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING var/unitCheck = FALSE metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "a weird chemical fleshy flavour" - //var/datum/status_effect/chem/SDGF/candidates/candies var/list/candies = list() - //var/polling = FALSE - var/list/result = list() - var/list/group = null var/pollStarted = FALSE - var/location_created var/startHunger impure_chem = "SDGFtox" inverse_chem_val = 0.5 @@ -81,7 +76,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING M.dna.transfer_identity(SM) SM.updateappearance(mutcolor_update=1) - + //Process the willing ghosts, and make sure they're actually in the body when they're moved into it! candies = shuffle(candies)//Shake those ghosts up! for(var/mob/dead/observer/C2 in candies) if(C2.key && C2) @@ -131,7 +126,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING M.reagents.remove_reagent(id, volume) log_game("FERMICHEM: [volume]u of SDGFheal has been transferred to the clone") SSblackbox.record_feedback("tally", "fermi_chem", 1, "Sentient clones made") - return + return ..() else if(playerClone == FALSE) //No candidates leads to two outcomes; if there's already a braincless clone, it heals the user, as well as being a rare souce of clone healing (thematic!). unitCheck = TRUE @@ -283,7 +278,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING name = "synthetic-derived healing factor" id = "SDGFheal" description = "Leftover SDGF is transferred into the resulting clone, which quickly heals up the stresses from suddenly splitting. Restores blood, nutrition, and repaires brain and clone damage quickly. Only obtainable from using excess SDGF, and only enters the cloned body." - metabolization_rate = 1 + metabolization_rate = 0.8 can_synth = FALSE /datum/reagent/fermi/SDGFheal/on_mob_life(mob/living/carbon/M)//Used to heal the clone after splitting, the clone spawns damaged. (i.e. insentivies players to make more than required, so their clone doesn't have to be treated) @@ -313,9 +308,10 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING id = "SDZF" description = "A horribly peverse mass of Embryonic stem cells made real by the hands of a failed chemist. Emulates normal synthetic-derived growth factor, but produces a hostile zombie at the end of it." color = "#a502e0" // rgb: 96, 0, 255 - metabolization_rate = 0.5 * REAGENTS_METABOLISM + metabolization_rate = 0.2 * REAGENTS_METABOLISM var/startHunger can_synth = TRUE + taste_description = "a weird chemical fleshy flavour" chemical_flags = REAGENT_SNEAKYNAME /datum/reagent/impure/SDZF/on_mob_life(mob/living/carbon/M) //If you're bad at fermichem, turns your clone into a zombie instead. @@ -372,5 +368,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING SSblackbox.record_feedback("tally", "fermi_chem", 1, "Zombie clones made!") if(87 to INFINITY) - M.adjustToxLoss(1, 0) + M.adjustToxLoss(2, 0) + M.reagents.remove_reagent(id, 1) ..() diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm index 88586b423e..d7ff42a9eb 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm @@ -8,7 +8,7 @@ This ghost moves pretty quickly and is mostly invisible, but is still visible fo When it's out of your system, you return back to yourself. It doesn't last long and metabolism of the chem is exponential. Addiction is particularlly brutal, it slowly turns you invisible with flavour text, then kills you at a low enough alpha. (i've also added something to prevent geneticists speeding this up) There's afairly major catch regarding the death though. I'm not gonna say here, go read the code, it explains it and puts my comments on it in context. I know that anyone reading it without understanding it is going to freak out so, this is my attempt to get you to read it and understand it. -I'd like to point out from my calculations it'll take about 60-80 minutes to die this way too. Plenty of time to visit me and ask for some pills to quench your addiction. +I'd like to point out from my calculations it'll take about 60-80 minutes to die this way too. Plenty of time to visit chem and ask for some pills to quench your addiction. */ @@ -30,15 +30,26 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die var/sleepytime = 0 inverse_chem_val = 0.25 can_synth = FALSE + var/datum/action/chem/astral/AS = new/datum/action/chem/astral() /datum/action/chem/astral name = "Return to body" - var/mob/living/carbon/origin = null - var/mob/living/simple_animal/hostile/retaliate/ghost = null + var/mob/living/carbon/origin + var/datum/mind/originalmind /datum/action/chem/astral/Trigger() - ghost.mind.transfer_to(origin) - qdel(src) + if(origin.mind && origin.mind != originalmind) + to_chat(originalmind.current, "There's a foreign presence in your body blocking your return!") + return ..() + if(origin.reagents.has_reagent("astral") ) + var/datum/reagent/fermi/astral/As = locate(/datum/reagent/fermi/astral) in origin.reagents.reagent_list + if(As.current_cycle < 10) + to_chat(originalmind.current, "The intensity of the astrogen in your body is too much allow you to return to yourself yet!") + return ..() + originalmind.transfer_to(origin) + if(origin.mind == originalmind) + qdel(src) + /datum/reagent/fermi/astral/reaction_turf(turf/T, reac_volume) if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) @@ -50,7 +61,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die if(istype(O, /obj/item/bedsheet)) new /obj/item/bedsheet/cosmos(get_turf(O)) qdel(O) - + ..() /datum/reagent/fermi/astral/on_mob_life(mob/living/carbon/M) // Gives you the ability to astral project for a moment! M.alpha = 255 @@ -61,12 +72,20 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die if (G == null) G = new(get_turf(M.loc)) G.name = "[M]'s astral projection" - var/datum/action/chem/astral/AS = new(G) + //var/datum/action/chem/astral/AS = new(G) + AS.Grant(G) AS.origin = M - AS.ghost = G + AS.originalmind = originalmind + if(M.mind) M.mind.transfer_to(G) SSblackbox.record_feedback("tally", "fermi_chem", 1, "Astral projections") + //INSURANCE + M.apply_status_effect(/datum/status_effect/chem/astral_insurance) + var/datum/status_effect/chem/astral_insurance/AI = M.has_status_effect(/datum/status_effect/chem/astral_insurance) + AI.original = M + AI.originalmind = M.mind + if(overdosed) if(prob(50)) to_chat(G, "The high conentration of Astrogen in your blood causes you to lapse your concentration for a moment, bringing your projection back to yourself!") @@ -83,10 +102,12 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die /datum/reagent/fermi/astral/on_mob_delete(mob/living/carbon/M) if(!G) if(M.mind) - var/mob/living/simple_animal/astral/G = new(get_turf(M.loc)) - M.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end. + var/mob/living/simple_animal/astral/G2 = new(get_turf(M.loc)) + M.mind.transfer_to(G2)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end. to_chat(G, "[M]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'") log_game("FERMICHEM: [M]'s possesser has been booted out into a astral ghost!") + if(!G2.mind) + qdel(G2) originalmind.transfer_to(M) else if(G.mind) G.mind.transfer_to(origin) @@ -98,6 +119,9 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die if(G)//just in case qdel(G) log_game("FERMICHEM: [M] has astrally returned to their body!") + if(M.mind && M.mind == originalmind) + M.remove_status_effect(/datum/status_effect/chem/astral_insurance) + //AS.Remove(M) ..() //Okay so, this might seem a bit too good, but my counterargument is that it'll likely take all round to eventually kill you this way, then you have to be revived without a body. It takes approximately 50-80 minutes to die from this. @@ -105,7 +129,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die if(addiction_stage < 2) antiGenetics = 255 M.alpha = 255 //Antigenetics is to do with stopping geneticists from turning people invisible to kill them. - if(prob(70)) + if(prob(75)) M.alpha-- antiGenetics-- switch(antiGenetics) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm index 00c6338ac3..5f3fc61fa7 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm @@ -17,7 +17,7 @@ color = "#5020F4" // rgb: 50, 20, 255 overdose_threshold = 15 addiction_threshold = 15 - metabolization_rate = 1.2 * REAGENTS_METABOLISM + metabolization_rate = 1 * REAGENTS_METABOLISM addiction_stage2_end = 30 addiction_stage3_end = 41 addiction_stage4_end = 44 //Incase it's too long @@ -52,7 +52,7 @@ location_return = get_turf(M) //sets up return point to_chat(M, "You feel your wavefunction split!") - if(purity > 0.9) //Teleports you home if it's pure enough + if(cached_purity > 0.9) //Teleports you home if it's pure enough if(!location_created && data) //Just in case location_created = data["location_created"] log_game("FERMICHEM: [M] ckey: [M.key] returned to [location_created] using eigenstasium") @@ -69,8 +69,9 @@ /datum/reagent/fermi/eigenstate/on_mob_delete(mob/living/M) //returns back to original location do_sparks(5,FALSE,M) to_chat(M, "You feel your wavefunction collapse!") - do_teleport(M, location_return, 0, asoundin = 'sound/effects/phasein.ogg') //Teleports home - do_sparks(5,FALSE,M) + if(!M.reagents.has_reagent("stabilizing_agent")) + do_teleport(M, location_return, 0, asoundin = 'sound/effects/phasein.ogg') //Teleports home + do_sparks(5,FALSE,M) qdel(Eigenstate) ..() diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm index 9b9b59058b..b3ee8f5b7f 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -7,22 +7,20 @@ taste_description = "affection and love!" can_synth = FALSE value = 20 - //SplitChem = TRUE impure_chem = "fermiTox"// What chemical is metabolised with an inpure reaction inverse_chem_val = 0.25 // If the impurity is below 0.5, replace ALL of the chem with inverse_chemupon metabolising inverse_chem = "fermiTox" + //This should process fermichems to find out how pure they are and what effect to do. /datum/reagent/fermi/on_mob_add(mob/living/carbon/M, amount) . = ..() - //When merging two fermichems, see above /datum/reagent/fermi/on_merge(data, amount, mob/living/carbon/M, purity)//basically on_mob_add but for merging . = ..() - //////////////////////////////////////////////////////////////////////////////////////////////////// // HATIMUIM /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -49,10 +47,7 @@ . = ..() if(M.head) var/obj/item/W = M.head - if(istype(W, /obj/item/clothing/head/hattip)) - qdel(W) - else - M.dropItemToGround(W, TRUE) + M.dropItemToGround(W, TRUE) var/hat = new /obj/item/clothing/head/hattip() M.equip_to_slot(hat, SLOT_HEAD, 1, 1) @@ -62,15 +57,20 @@ return ..() var/hatArmor = 0 if(!overdosed) - hatArmor = (purity/10) + hatArmor = (cached_purity/10) else - hatArmor = - (purity/10) + hatArmor = (cached_purity/10) if(hatArmor > 90) return ..() var/obj/item/W = M.head W.armor = W.armor.modifyAllRatings(hatArmor) ..() +/datum/reagent/fermi/hatmium/reaction_turf(turf/T, reac_volume) + if(reac_volume >= 5) + new /obj/item/clothing/head/hattip(T) + ..() + //////////////////////////////////////////////////////////////////////////////////////////////////// // FURRANIUM /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -153,7 +153,7 @@ ..() /datum/reagent/fermi/furranium/on_mob_delete(mob/living/carbon/M) - if(purity < 1)//Only permanent if you're a good chemist. + if(cached_purity < 0.95)//Only permanent if you're a good chemist. nT = M.getorganslot(ORGAN_SLOT_TONGUE) nT.Remove(M) qdel(nT) @@ -181,13 +181,13 @@ pH = 9 value = 90 can_synth = FALSE + var/react_objs = list() /datum/reagent/fermi/nanite_b_gone/on_mob_life(mob/living/carbon/C) - //var/component/nanites/N = M.GetComponent(/datum/component/nanites) var/datum/component/nanites/N = C.GetComponent(/datum/component/nanites) if(isnull(N)) return ..() - N.nanite_volume = -purity//0.5 seems to be the default to me, so it'll neuter them. + N.nanite_volume += -cached_purity*5//0.5 seems to be the default to me, so it'll neuter them. ..() /datum/reagent/fermi/nanite_b_gone/overdose_process(mob/living/carbon/C) @@ -197,16 +197,19 @@ to_chat(C, "The residual voltage from the nanites causes you to seize up!") C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE) if(prob(10)) - //empulse((get_turf(C)), 3, 2)//So the nanites randomize var/atom/T = C T.emp_act(EMP_HEAVY) to_chat(C, "You feel a strange tingling sensation come from your core.") if(isnull(N)) return ..() - N.nanite_volume = -2 + N.nanite_volume += -10*cached_purity ..() -/datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume) +datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume) + for(var/active_obj in react_objs) + if(O == active_obj) + return + react_objs += O O.emp_act(EMP_HEAVY) /datum/reagent/fermi/nanite_b_goneTox @@ -289,15 +292,15 @@ else holder.remove_reagent("fermiTest", volume)//Avoiding recurrsion var/location = get_turf(holder.my_atom) - if(purity < 0.34 || purity == 1) + if(cached_purity < 0.34 || cached_purity == 1) var/datum/effect_system/foam_spread/s = new() s.set_up(volume*2, location, holder) s.start() - if((purity < 0.67 && purity >= 0.34)|| purity == 1) + if((cached_purity < 0.67 && cached_purity >= 0.34)|| cached_purity == 1) var/datum/effect_system/smoke_spread/chem/s = new() s.set_up(holder, volume*2, location) s.start() - if(purity >= 0.67) + if(cached_purity >= 0.67) for (var/datum/reagent/reagent in holder.reagent_list) if (istype(reagent, /datum/reagent/fermi)) var/datum/chemical_reaction/fermi/Ferm = GLOB.chemical_reagents_list[reagent.id] @@ -360,10 +363,11 @@ /datum/reagent/fermi/secretcatchem //Should I hide this from code divers? A secret cit chem? name = "secretcatchem" //an attempt at hiding it id = "secretcatchem" - description = "An illegal and hidden chem that turns people into cats. It's said that it's so rare and unstable that having it means you've been blessed." + description = "An illegal and hidden chem that turns people into cats. It's said that it's so rare and unstable that having it means you've been blessed. If used on someone in crit, it will turn them into a cat permanently, until the cat is killed." taste_description = "hairballs and cream" color = "#ffc224" var/catshift = FALSE + var/perma = FALSE var/mob/living/simple_animal/pet/cat/custom_cat/catto = null can_synth = FALSE @@ -372,7 +376,7 @@ /datum/reagent/fermi/secretcatchem/on_mob_add(mob/living/carbon/human/H) . = ..() - if(purity >= 0.8)//ONLY if purity is high, and given the stuff is random. It's very unlikely to get this to 1. It already requires felind too, so no new functionality there. + if(cached_purity >= 0.9)//ONLY if purity is high, and given the stuff is random. It's very unlikely to get this to 1. //exception(al) handler: H.dna.features["ears"] = "Cat" H.dna.features["mam_ears"] = "Cat" @@ -389,20 +393,30 @@ H.forceMove(catto) log_game("FERMICHEM: [H] ckey: [H.key] has been made into a cute catto.") SSblackbox.record_feedback("tally", "fermi_chem", 1, "cats") - //Just to deal with rascally ghosts - //ADD_TRAIT(catto, TRAIT_NODEATH, "catto")//doesn't work - //catto.health = 1000 //To simulate fake death, while preventing ghosts escaping. + if(H.InCritical()) + perma = TRUE + volume = 5 + H.stat = DEAD + catto.origin = H /datum/reagent/fermi/secretcatchem/on_mob_life(mob/living/carbon/H) + if(!catto) + metabolization_rate = 5 + return ..() if(catto.health <= 0) //So the dead can't ghost if(prob(10)) - to_chat(H, "You feel your body start to slowly shift back from it's dead form.") + to_chat(catto, "You feel your body start to slowly shift back from it's dead form.") + perma = FALSE + metabolization_rate = 1 else if(prob(5)) playsound(get_turf(catto), 'modular_citadel/sound/voice/merowr.ogg', 50, 1, -1) catto.say("lets out a meowrowr!*") ..() /datum/reagent/fermi/secretcatchem/on_mob_delete(mob/living/carbon/H) + if(perma) + to_chat(H, "You feel your body settle into it's new form. You won't be able to shift back on death anymore.") + return var/words = "Your body shifts back to normal." H.forceMove(catto.loc) catto.mind.transfer_to(H) @@ -412,3 +426,20 @@ to_chat(H, "[words]") qdel(catto) log_game("FERMICHEM: [H] ckey: [H.key] has returned to normal") + + +/datum/reagent/fermi/secretcatchem/reaction_mob(var/mob/living/L) + if(istype(L, /mob/living/simple_animal/pet/cat/custom_cat) && cached_purity >= 0.85) + var/mob/living/simple_animal/pet/cat/custom_cat/catto = L + if(catto.origin) + var/mob/living/carbon/human/H = catto.origin + H.stat = CONSCIOUS + log_game("FERMICHEM: [catto] ckey: [catto.key] has returned to normal.") + to_chat(catto, "Your body shifts back to normal!") + H.forceMove(catto.loc) + catto.mind.transfer_to(H) + if(!L.mind) //Just in case + qdel(L) + else //This should never happen, but just in case, so their game isn't ruined. + catto.icon_state = "custom_cat" + catto.health = 50 diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm index 4949cc6ecf..0672d1fba6 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm @@ -69,7 +69,6 @@ L.Insert(C) to_chat(C, "You feel the yamerol merge in your chest.") holder.remove_reagent(src.id, "10") - C.adjustOxyLoss(-3) ..() diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index 5fe7d58f1c..fcde3a8b79 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -282,9 +282,7 @@ name = "MKUltra" id = "enthrall" results = list("enthrall" = 5) - //required_reagents = list("iron" = 1, "iodine" = 1) Test vars - //required_reagents = list("cocoa" = 1, "astral" = 1, "mindbreaker" = 1, "psicodine" = 1, "happiness" = 1) - required_reagents = list("cocoa" = 1, "bluespace" = 1, "mindbreaker" = 1, "psicodine" = 1, "happiness" = 1) //TEMPORARY UNTIL HEADMINS GIVE THE OKAY FOR MK USE. + required_reagents = list("cocoa" = 1, "bluespace" = 1, "mindbreaker" = 1, "psicodine" = 1, "happiness" = 1) required_catalysts = list("blood" = 1) mix_message = "the reaction gives off a burgundy plume of smoke!" //FermiChem vars: @@ -506,9 +504,9 @@ name = "secretcatchem" id = "secretcatchem" results = list("secretcatchem" = 5) - required_reagents = list("stable_plasma" = 1, "sugar" = 1, "cream" = 1, "clonexadone" = 1)//Yes this will make a plushie if you don't lucky guess. It'll eat all your reagents too. + required_reagents = list("stable_plasma" = 1, "sugar" = 1, "cream" = 1, "clonexadone" = 1)//Yes this will make a kitty if you don't lucky guess. It'll eat all your reagents too. required_catalysts = list("SDGF" = 1) - required_temp = 600 + required_temp = 500 mix_message = "the reaction gives off a meow!" mix_sound = "modular_citadel/sound/voice/merowr.ogg" //FermiChem vars: diff --git a/modular_citadel/code/modules/reagents/objects/clothes.dm b/modular_citadel/code/modules/reagents/objects/clothes.dm index 708f1f59f8..b601b6a899 100644 --- a/modular_citadel/code/modules/reagents/objects/clothes.dm +++ b/modular_citadel/code/modules/reagents/objects/clothes.dm @@ -2,7 +2,7 @@ //Clothes made from FermiChem /obj/item/clothing/head/hattip //I wonder if anyone else has played cryptworlds - name = "Sythetic hat" + name = "Synthetic hat" icon = 'icons/obj/clothing/hats.dmi' icon_state = "cowboy" desc = "A sythesized hat, you can't seem to take it off. And tips their hat." @@ -46,6 +46,13 @@ /obj/item/clothing/head/hattip/dropped(mob/M) . = ..() UnregisterSignal(M, COMSIG_MOB_SAY) + addtimer(CALLBACK(GLOBAL_PROC, .proc/root_and_toot, src, src, 200)) + +/obj/item/clothing/head/hattip/proc/root_and_toot(obj/item/clothing/head/hattip/hat) + hat.animate_atom_living() + var/list/seen = viewers(6, get_turf(hat)) + for(var/mob/M2 in seen) + to_chat(M2, "[hat] exclaims, \"[pick("Whooee! Time for a hootenanny!", "Rough 'em up boys!", "Yeehaw! Freedom at last!", "Y'all about to get a good old fashioned spanking!")]\"") /obj/item/clothing/head/hattip/proc/handle_speech(datum/source, mob/speech_args) var/message = speech_args[SPEECH_MESSAGE] diff --git a/modular_citadel/icons/mob/mask.dmi b/modular_citadel/icons/mob/mask.dmi deleted file mode 100644 index 788bfc0447..0000000000 Binary files a/modular_citadel/icons/mob/mask.dmi and /dev/null differ diff --git a/modular_citadel/icons/mob/mutant_bodyparts.dmi b/modular_citadel/icons/mob/mutant_bodyparts.dmi index a66895f864..8ff4a3ddb5 100644 Binary files a/modular_citadel/icons/mob/mutant_bodyparts.dmi and b/modular_citadel/icons/mob/mutant_bodyparts.dmi differ diff --git a/tgstation.dme b/tgstation.dme index e5895c42fc..72f46be9a4 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -879,6 +879,7 @@ #include "code\game\objects\items\devices\camera_bug.dm" #include "code\game\objects\items\devices\chameleonproj.dm" #include "code\game\objects\items\devices\compressionkit.dm" +#include "code\game\objects\items\devices\desynchronizer.dm" #include "code\game\objects\items\devices\dogborg_sleeper.dm" #include "code\game\objects\items\devices\doorCharge.dm" #include "code\game\objects\items\devices\electroadaptive_pseudocircuit.dm" @@ -2623,6 +2624,7 @@ #include "code\modules\reagents\reagent_containers\patch.dm" #include "code\modules\reagents\reagent_containers\pill.dm" #include "code\modules\reagents\reagent_containers\rags.dm" +#include "code\modules\reagents\reagent_containers\sleeper_buffer.dm" #include "code\modules\reagents\reagent_containers\spray.dm" #include "code\modules\reagents\reagent_containers\syringes.dm" #include "code\modules\recycling\conveyor2.dm" @@ -3026,9 +3028,6 @@ #include "modular_citadel\code\game\objects\items\storage\firstaid.dm" #include "modular_citadel\code\game\objects\structures\tables_racks.dm" #include "modular_citadel\code\game\objects\structures\beds_chairs\chair.dm" -#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\fitness.dm" -#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\wardrobe.dm" -#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\secure\citadel_lockers.dm" #include "modular_citadel\code\modules\admin\admin.dm" #include "modular_citadel\code\modules\admin\chat_commands.dm" #include "modular_citadel\code\modules\admin\holder2.dm" diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css index 256b53c106..41ef4633fc 100644 --- a/tgui/assets/tgui.css +++ b/tgui/assets/tgui.css @@ -1 +1 @@ -@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file +@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .compressedcell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .compressedcell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .compressedcell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child),body.clockwork section .compressedcell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .compressedcell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .compressedcell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child),body.nanotrasen section .compressedcell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .compressedcell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child),body.syndicate section .compressedcell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index e80e39528f..5adb0cfe36 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -16,6 +16,6 @@ r:"data.pad_name",p:[9,13,227]}]}]},{p:[9,41,255],t:7,e:"br"}," ",{p:[10,4,264], 341:341}],417:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],418:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],419:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],420:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],421:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],422:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],423:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],424:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],425:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],426:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],427:[function(t,e,n){var a=t(341),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]}]}]}," ",{p:[55,5,1528],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[56,9,1563],t:7,e:"span",f:[{t:2,r:"data.demand",p:[56,15,1569]}]}]}],r:"config.fancy"}]}," ",{p:[60,1,1638],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[61,3,1668],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[62,5,1693],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[63,5,1730],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[64,5,1769],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[65,5,1806],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[66,5,1845],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[67,5,1887],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[68,5,1928],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[71,5,2013],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[71,24,2032]}],nowrap:0},f:[{p:[72,7,2057],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[72,28,2078]}," %"]}," ",{p:[73,7,2136],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[73,28,2157]}]}," ",{p:[74,7,2199],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2220],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[74,41,2233]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[74,70,2262]}]}]}," ",{p:[75,7,2309],t:7,e:"div",a:{"class":"content"},f:[{p:[75,28,2330],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[75,41,2343]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[75,64,2366]}," [",{p:[75,87,2389],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[75,93,2395]}]},"]"]}]}," ",{p:[76,7,2444],t:7,e:"div",a:{"class":"content"},f:[{p:[76,28,2465],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[76,41,2478]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[76,64,2501]}," [",{p:[76,87,2524],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[76,93,2530]}]},"]"]}]}," ",{p:[77,7,2579],t:7,e:"div",a:{"class":"content"},f:[{p:[77,28,2600],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[77,41,2613]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[77,64,2636]}," [",{p:[77,87,2659],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[77,93,2665]}]},"]"]}]}]}],n:52,r:"data.areas",p:[70,3,1987]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],428:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],429:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],430:[function(t,e,n){var a=t(341),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(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],431:[function(t,e,n){var a=t(341),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)},{341:341}],432:[function(t,e,n){var a=t(341),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)},{341:341}],433:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,25],t:7,e:"ui-button",a:{icon:"undo",action:"change_menu",params:'{"menu": "1"}'},f:["Return"]}," ",{p:[3,2,113],t:7,e:"ui-display",a:{title:"Advanced Surgery Procedures"},f:[{p:[4,3,165],t:7,e:"ui-button",a:{icon:"download",action:"sync"},f:["Sync with research database"]}," ",{t:4,f:[{p:[6,4,278],t:7,e:"ui-display",f:[{p:[7,6,297],t:7,e:"ui-section",f:[{p:[7,18,309],t:7,e:"b",f:[{t:2,r:"name",p:[7,21,312]}]}]}," ",{p:[8,6,344],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[8,18,356]}]}]}],n:52,r:"data.surgeries",p:[5,3,249]}]}],n:50,x:{r:["data.menu"],s:"_0==2"},p:[1,1,0]},{t:4,n:51,f:[{p:[13,2,437],t:7,e:"ui-button",a:{action:"change_menu",params:'{"menu": "2"}'},f:["View Surgery Procedures"]}," ",{t:4,f:[{p:[15,3,556],t:7,e:"ui-notice",f:["No table detected!"]}],n:51,r:"data.table",p:[14,2,530]}," ",{p:[19,2,623],t:7,e:"ui-display",f:[{p:[20,3,639],t:7,e:"ui-display",a:{title:"Patient State"},f:[{t:4,f:[{p:[22,5,704],t:7,e:"ui-section",a:{label:"State"},f:[{p:[23,6,737],t:7,e:"span",a:{"class":[{t:2,r:"data.patient.statstate",p:[23,19,750]}]},f:[{t:2,r:"data.patient.stat",p:[23,47,778]}]}]}," ",{p:[25,5,831],t:7,e:"ui-section",a:{label:"Blood Type"},f:[{p:[26,6,869],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.patient.blood_type",p:[26,28,891]}]}]}," ",{p:[28,5,950],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[29,6,984],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.patient.minHealth",p:[29,19,997]}],max:[{t:2,r:"data.patient.maxHealth",p:[29,52,1030]}],value:[{t:2,r:"data.patient.health",p:[29,87,1065]}],state:[{t:2,x:{r:["data.patient.health"],s:'_0>=0?"good":"average"'},p:[30,13,1103]}]},f:[{t:2,x:{r:["adata.patient.health"],s:"Math.round(_0)"},p:[30,64,1154]}]}]}," ",{t:4,f:[{p:[33,6,1389],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[33,25,1408]}]},f:[{p:[34,7,1427],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.patient.maxHealth",p:[34,28,1448]}],value:[{t:2,rx:{r:"data.patient",m:[{t:30,n:"type"}]},p:[34,63,1483]}],state:"bad"},f:[{t:2,x:{r:["type","adata.patient"],s:"Math.round(_1[_0])"},p:[34,99,1519]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Burn",type:"fireLoss"},{label:"Toxin",type:"toxLoss"},{label:"Respiratory",type:"oxyLoss"}]'},p:[32,5,1224]}],n:50,r:"data.patient",p:[21,4,678]},{t:4,n:51,f:["No patient detected."],r:"data.patient"}]}," ",{p:[41,3,1670],t:7,e:"ui-display",a:{title:"Initiated Procedures"},f:[{t:4,f:[{t:4,f:[{p:[44,6,1777],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[44,28,1799]}]},f:[{p:[45,7,1817],t:7,e:"ui-section",a:{label:"Next Step"},f:[{p:[46,8,1856],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"next_step",p:[46,30,1878]}]}," ",{t:4,f:[{p:[48,9,1937],t:7,e:"span",a:{"class":"content"},f:[{p:[48,31,1959],t:7,e:"b",f:["Required chemicals:"]},{p:[48,57,1985],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[48,62,1990]}]}],n:50,r:"chems_needed",p:[47,8,1907]}]}," ",{t:4,f:[{p:[52,8,2091],t:7,e:"ui-section",a:{label:"Alternative Step"},f:[{p:[53,9,2138],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"alternative_step",p:[53,31,2160]}]}," ",{t:4,f:[{p:[55,10,2232],t:7,e:"span",a:{"class":"content"},f:[{p:[55,32,2254],t:7,e:"b",f:["Required chemicals:"]},{p:[55,58,2280],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[55,63,2285]}]}],n:50,r:"alt_chems_needed",p:[54,9,2197]}]}],n:50,r:"alternative_step",p:[51,7,2058]}]}],n:52,r:"data.procedures",p:[43,5,1745]}],n:50,r:"data.procedures",p:[42,4,1716]},{t:4,n:51,f:["No active procedures."],r:"data.procedures"}]}]}],x:{r:["data.menu"],s:"_0==2"}}]},e.exports=a.extend(r.exports)},{341:341}],434:[function(t,e,n){var a=t(341),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 credits: ",{t:2,r:"data.unclaimedPoints",p:[6,30,160]}," ",{p:[7,4,189],t:7,e:"ui-button",a:{action:"Claim"},f:["Claim"]}]}]}," ",{p:[12,1,276],t:7,e:"ui-display",f:[{t:4,f:[{p:[14,3,315],t:7,e:"ui-section",f:[{p:[15,4,332],t:7,e:"ui-button",a:{action:"diskEject",icon:"eject"},f:["Eject Disk"]}]}," ",{t:4,f:[{p:[20,4,460],t:7,e:"ui-section",a:{"class":"candystripe"},f:[{p:[21,5,496],t:7,e:"ui-button",a:{action:"diskUpload",state:[{t:2,x:{r:["canupload"],s:'(_0)?null:"disabled"'},p:[21,42,533]}],icon:"upload",align:"right",params:['{ "design" : "',{t:2,r:"index",p:[21,129,620]},'" }']},f:["Upload"]}," File ",{t:2,r:"index",p:[24,10,676]},": ",{t:2,r:"name",p:[24,21,687]}]}],n:52,r:"data.diskDesigns",p:[19,3,429]}],n:50,r:"data.hasDisk",p:[13,2,291]},{t:4,n:51,f:[{p:[28,3,741],t:7,e:"ui-section",f:[{p:[29,4,758],t:7,e:"ui-button",a:{action:"diskInsert",icon:"floppy-o"},f:["Insert Disk"]}]}],r:"data.hasDisk"}]}," ",{t:4,f:[{p:[36,2,911],t:7,e:"ui-display",f:[{p:[37,3,927],t:7,e:"ui-section",f:[{p:[38,4,944],t:7,e:"b",f:["Warning"]},": ",{t:2,r:"data.disconnected",p:[38,20,960]},". Please contact the quartermaster."]}]}],n:50,r:"data.disconnected",p:[35,1,883]},{t:4,f:[{p:[43,2,1100],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[44,3,1133],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[45,5,1168],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[48,5,1226],t:7,e:"section",a:{"class":"cell"},f:["Sheets"]}," ",{p:[51,5,1283],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[53,5,1327],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[55,5,1371],t:7,e:"section",a:{"class":"cell"},f:["Ore Value"]}]}," ",{t:4,f:[{p:[60,4,1473],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[61,5,1508],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[62,6,1537]}]}," ",{p:[64,5,1567],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[65,6,1610]}]}," ",{p:[67,5,1642],t:7,e:"section",a:{"class":"cell"},f:[{p:[68,6,1671],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[68,19,1684]}],placeholder:"###","class":"number"}}]}," ",{p:[70,5,1751],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[71,6,1794], t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[71,60,1848]}],params:['{ "id" : ',{t:2,r:"id",p:[71,115,1903]},', "sheets" : ',{t:2,r:"sheets",p:[71,134,1922]}," }"]},f:["Release"]}]}," ",{p:[75,5,1993],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"value",p:[76,6,2036]}]}]}],n:52,r:"data.materials",p:[59,3,1444]}," ",{t:4,f:[{p:[81,4,2119],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[82,5,2154],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[83,6,2183]}]}," ",{p:[85,5,2213],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[86,6,2256]}]}," ",{p:[88,5,2288],t:7,e:"section",a:{"class":"cell"},f:[{p:[89,6,2317],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[89,19,2330]}],placeholder:"###","class":"number"}}]}," ",{p:[91,5,2397],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[92,6,2440],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Smelt",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[92,58,2492]}],params:['{ "id" : ',{t:2,r:"id",p:[92,114,2548]},', "sheets" : ',{t:2,r:"sheets",p:[92,133,2567]}," }"]},f:["Smelt"]}]}," ",{p:[96,5,2635],t:7,e:"section",a:{"class":"cell",align:"right"},f:[]}]}],n:52,r:"data.alloys",p:[80,3,2093]}]}],n:50,x:{r:["data.materials","data.alloys"],s:"_0||_1"},p:[42,1,1060]}]},e.exports=a.extend(r.exports)},{341:341}],435:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,4,87],t:7,e:"ui-button",a:{icon:"remove",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[4,36,119]}],action:"empty_eject_beaker"},f:["Empty and eject"]}," ",{p:[7,4,231],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[7,35,262]}],action:"empty_beaker"},f:["Empty"]}," ",{p:[10,4,358],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[10,35,389]}],action:"eject_beaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{t:4,f:[{p:[15,4,528],t:7,e:"ui-section",f:[{t:4,f:[{p:[17,6,578],t:7,e:"span",a:{"class":"bad"},f:["The beaker is empty!"]}],n:50,r:"data.beaker_empty",p:[16,5,546]},{t:4,n:51,f:[{p:[19,6,644],t:7,e:"ui-subdisplay",a:{title:"Blood"},f:[{t:4,f:[{p:[21,8,712],t:7,e:"ui-section",a:{label:"Blood DNA"},f:[{t:2,r:"data.blood.dna",p:[21,38,742]}]}," ",{p:[22,8,782],t:7,e:"ui-section",a:{label:"Blood type"},f:[{t:2,r:"data.blood.type",p:[22,39,813]}]}],n:50,r:"data.has_blood",p:[20,7,681]},{t:4,n:51,f:[{p:[24,8,870],t:7,e:"ui-section",f:[{p:[25,9,892],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:[14,3,500]},{t:4,n:51,f:[{p:[32,4,1054],t:7,e:"ui-section",f:[{p:[33,5,1072],t:7,e:"span",a:{"class":"bad"},f:["No beaker loaded."]}]}],r:"data.has_beaker"}]}," ",{t:4,f:[{p:[38,3,1188],t:7,e:"ui-display",a:{title:"Diseases"},f:[{t:4,f:[{p:{button:[{t:4,f:[{p:[43,8,1343],t:7,e:"ui-button",a:{icon:"pencil",action:"rename_disease",state:[{t:2,x:{r:["can_rename"],s:'_0?"":"disabled"'},p:[43,64,1399]}],params:['{"index": ',{t:2,r:"index",p:[43,116,1451]},"}"]},f:["Name advanced disease"]}],n:50,r:"is_adv",p:[42,7,1320]}," ",{p:[47,7,1538],t:7,e:"ui-button",a:{icon:"flask",action:"create_culture_bottle",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[47,69,1600]}],params:['{"index": ',{t:2,r:"index",p:[47,124,1655]},"}"]},f:["Create virus culture bottle"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[40,24,1269]}],button:0},f:[" ",{p:[51,6,1749],t:7,e:"ui-section",a:{label:"Disease agent"},f:[{t:2,r:"agent",p:[51,40,1783]}]}," ",{p:[52,6,1812],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[52,38,1844]}]}," ",{p:[53,6,1879],t:7,e:"ui-section",a:{label:"Spread"},f:[{t:2,r:"spread",p:[53,33,1906]}]}," ",{p:[54,6,1936],t:7,e:"ui-section",a:{label:"Possible cure"},f:[{t:2,r:"cure",p:[54,40,1970]}]}," ",{t:4,f:[{p:[56,7,2021],t:7,e:"ui-section",a:{label:"Symptoms"},f:[{t:4,f:[{p:[58,9,2087],t:7,e:"ui-button",a:{action:"symptom_details",state:"",params:['{"picked_symptom": ',{t:2,r:"sym_index",p:[58,81,2159]},', "index": ',{t:2,r:"index",p:[58,105,2183]},"}"]},f:[{t:2,r:"name",p:[59,10,2206]}," "]},{p:[60,21,2236],t:7,e:"br"}],n:52,r:"symptoms",p:[57,8,2059]}]}," ",{p:[63,7,2289],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[63,38,2320]}]}," ",{p:[64,7,2355],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[64,35,2383]}]}," ",{p:[65,7,2415],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[65,39,2447]}]}," ",{p:[66,7,2483],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[66,44,2520]}]}],n:50,r:"is_adv",p:[55,6,1999]}]}],n:52,r:"data.viruses",p:[39,4,1222]},{t:4,n:51,f:[{p:[70,5,2601],t:7,e:"ui-section",f:[{p:[71,6,2620],t:7,e:"span",a:{"class":"average"},f:["No detectable virus in the blood sample."]}]}],r:"data.viruses"}]}," ",{p:[75,3,2743],t:7,e:"ui-display",a:{title:"Antibodies"},f:[{t:4,f:[{p:[77,5,2811],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[77,24,2830]}]},f:[{p:[78,7,2848],t:7,e:"ui-button",a:{icon:"eyedropper",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[78,43,2884]}],action:"create_vaccine_bottle",params:['{"index": ',{t:2,r:"id",p:[78,129,2970]},"}"]},f:["Create vaccine bottle"]}]}],n:52,r:"data.resistances",p:[76,4,2779]},{t:4,n:51,f:[{p:[83,5,3067],t:7,e:"ui-section",f:[{p:[84,6,3086],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:[37,2,1162]}],n:50,x:{r:["data.mode"],s:"_0==1"},p:[1,1,0]},{t:4,n:51,f:[{p:[90,2,3231],t:7,e:"ui-button",a:{icon:"undo",state:"",action:"back"},f:["Back"]}," ",{t:4,f:[{p:[94,4,3330],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[94,23,3349]}]},f:[{p:[95,4,3364],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[96,5,3382]}," ",{t:4,f:[{p:[98,5,3417],t:7,e:"br"}," ",{p:[99,5,3428],t:7,e:"b",f:["This symptom has been neutered, and has no effect. It will still affect the virus' statistics."]}],n:50,r:"neutered",p:[97,4,3395]}]}," ",{p:[102,4,3564],t:7,e:"ui-section",f:[{p:[103,5,3582],t:7,e:"ui-section",a:{label:"Level"},f:[{t:2,r:"level",p:[103,31,3608]}]}," ",{p:[104,5,3636],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[104,36,3667]}]}," ",{p:[105,5,3700],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[105,33,3728]}]}," ",{p:[106,5,3758],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[106,37,3790]}]}," ",{p:[107,5,3824],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[107,42,3861]}]}]}," ",{p:[109,4,3913],t:7,e:"ui-subdisplay",a:{title:"Effect Thresholds"},f:[{p:[110,5,3960],t:7,e:"ui-section",f:[{t:3,r:"threshold_desc",p:[110,17,3972]}]}]}]}],n:53,r:"data.symptom",p:[93,2,3303]}],x:{r:["data.mode"],s:"_0==1"}}]},e.exports=a.extend(r.exports)},{341:341}],436:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(484);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)},{341:341,484:484}],437:[function(t,e,n){var a=t(341),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)},{341:341}],438:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[3,1,69],t:7,e:"ui-notice",f:[{p:[4,3,84],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[4,23,104]}," connected to a tank."]}]}," ",{p:[6,1,182],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[7,3,220],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[8,5,255],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[8,11,261]}," kPa"]}]}," ",{p:[10,3,323],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[11,5,354],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[11,18,367]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[11,59,408]}]}]}]}," ",{p:[14,1,499],t:7,e:"ui-display",a:{title:"Filter"},f:[{p:[15,3,530],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[16,5,562],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[16,22,579]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[17,14,630]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[18,22,687]}]}]}]}," ",{p:{button:[{t:4,f:[{p:[24,7,856],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[24,38,887]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[23,5,828]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[28,3,1007],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[29,4,1038]}]}," ",{p:[31,3,1080],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[32,4,1114]}," kPa"]}],n:50,r:"data.holding",p:[27,3,983]},{t:4,n:51,f:[{p:[35,3,1188],t:7,e:"ui-section",f:[{p:[36,4,1205],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}," ",{p:[40,1,1293],t:7,e:"ui-display",a:{title:"Filters"},f:[{t:4,f:[{p:[42,5,1345],t:7,e:"filters"}],n:53,r:"data",p:[41,3,1325]}]}]},r.exports.components=r.exports.components||{};var i={filters:t(457)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,457:457}],439:[function(t,e,n){var a=t(341),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]}]}]}," ",{p:[52,5,1464],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[53,9,1499],t:7,e:"span",f:[{t:2,r:"data.demand",p:[53,15,1505]}]}]}],r:"config.fancy"}]}," ",{p:[57,1,1574],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[58,3,1604],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[59,5,1629],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[60,5,1666],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[61,5,1705],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[62,5,1742],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[63,5,1781],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[64,5,1823],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[65,5,1864],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[68,5,1949],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[68,24,1968]}],nowrap:0},f:[{p:[69,7,1993],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[69,28,2014]}," %"]}," ",{p:[70,7,2072],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[70,28,2093]}]}," ",{p:[71,7,2135],t:7,e:"div",a:{"class":"content"},f:[{p:[71,28,2156],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[71,41,2169]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[71,70,2198]}]}]}," ",{p:[72,7,2245],t:7,e:"div",a:{"class":"content"},f:[{p:[72,28,2266],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[72,41,2279]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[72,64,2302]}," [",{p:[72,87,2325],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[72,93,2331]}]},"]"]}]}," ",{p:[73,7,2380],t:7,e:"div",a:{"class":"content"},f:[{p:[73,28,2401],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[73,41,2414]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[73,64,2437]}," [",{p:[73,87,2460],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[73,93,2466]}]},"]"]}]}," ",{p:[74,7,2515],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2536],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[74,41,2549]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[74,64,2572]}," [",{p:[74,87,2595],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[74,93,2601]}]},"]"]}]}]}],n:52,r:"data.areas",p:[67,3,1923]}]}]},e.exports=a.extend(r.exports)},{341:341}],440:[function(t,e,n){var a=t(341),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)},{341:341}],441:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," "," "," "," "," "," ",{p:[11,1,560],t:7,e:"rdheader"}," ",{t:4,f:[{p:[13,2,595],t:7,e:"ui-display",a:{title:"CONSOLE LOCKED"},f:[{p:[14,3,634],t:7,e:"ui-button",a:{action:"Unlock"},f:["Unlock"]}]}],n:50,r:"data.locked",p:[12,1,573]},{t:4,f:[{p:[18,2,729],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[18,17,744]}]},f:[{p:[19,3,763],t:7,e:"tab",a:{name:"Technology"},f:[{p:[20,4,791],t:7,e:"techweb"}]}," ",{p:[22,3,815],t:7,e:"tab",a:{name:"View Node"},f:[{p:[23,4,842],t:7,e:"nodeview"}]}," ",{p:[25,3,867],t:7,e:"tab",a:{name:"View Design"},f:[{p:[26,4,896],t:7,e:"designview"}]}," ",{p:[28,3,923],t:7,e:"tab",a:{name:"Disk Operations - Design"},f:[{p:[29,4,965],t:7,e:"diskopsdesign"}]}," ",{p:[31,3,995],t:7,e:"tab",a:{name:"Disk Operations - Technology"},f:[{p:[32,4,1041],t:7,e:"diskopstech"}]}," ",{p:[34,3,1069],t:7,e:"tab",a:{name:"Deconstructive Analyzer"},f:[{p:[35,4,1110],t:7,e:"destruct"}]}," ",{p:[37,3,1135],t:7,e:"tab",a:{name:"Protolathe"},f:[{p:[38,4,1163],t:7,e:"protolathe"}]}," ",{p:[40,3,1190],t:7,e:"tab",a:{name:"Circuit Imprinter"},f:[{p:[41,4,1225],t:7,e:"circuit"}]}," ",{p:[43,3,1249],t:7,e:"tab",a:{name:"Settings"},f:[{p:[44,4,1275],t:7,e:"settings"}]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[17,1,706]}]},r.exports.components=r.exports.components||{};var i={settings:t(450),circuit:t(442),protolathe:t(448),destruct:t(444),diskopsdesign:t(445),diskopstech:t(446),designview:t(443),nodeview:t(447),techweb:t(451),rdheader:t(449)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451}],442:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,58],t:7,e:"ui-display",a:{title:"Circuit Imprinter Busy!"}}],n:50,r:"data.circuitbusy",p:[2,2,30]},{t:4,n:51,f:[{p:[5,3,130],t:7,e:"ui-display",f:[{p:[6,4,147],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,189],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,202]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,261],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "circuit", "inputText" : ',{t:2,r:"textsearch",p:[8,84,340]},"}"]},f:["Search"]}]}," ",{p:[10,4,398],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.circuitmats",p:[10,27,421]}," / ",{t:2,r:"data.circuitmaxmats",p:[10,50,444]}]}," ",{p:[11,4,485],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.circuitchems",p:[11,26,507]}," / ",{t:2,r:"data.circuitmaxchems",p:[11,50,531]}]}," ",{p:[12,3,572],t:7,e:"ui-display",f:[{p:[14,3,590],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,605]}]},f:[{p:[15,4,631],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,696],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.circuitcat"],s:'_0=="{{name}}"?"selected":null'},p:[17,43,733]}],params:['{"type" : "circuit", "cat" : "',{t:2,r:"name",p:[17,135,825]},'"}']},f:[{t:2,r:"name",p:[17,147,837]}]}],n:52,r:"data.circuitcats",p:[16,5,663]}]}," ",{p:[20,4,888],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,956],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,968]},{t:2,r:"matstring",p:[22,26,976]}," ",{p:[23,7,997],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[23,40,1030]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[23,119,1109]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitdes",p:[21,5,924]}]}," ",{p:[27,4,1187],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[29,6,1254],t:7,e:"ui-section",f:[{t:2,r:"name",p:[29,18,1266]},{t:2,r:"matstring",p:[29,26,1274]}," ",{p:[30,7,1295],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[30,40,1328]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[30,119,1407]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitmatch",p:[28,5,1220]}]}," ",{p:[34,4,1485],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[36,6,1550],t:7,e:"ui-section",f:[{t:2,r:"name",p:[36,18,1562]}," : ",{t:2,r:"amount",p:[36,29,1573]}," cm3 - ",{t:4,f:[{p:[38,7,1623],t:7,e:"input",a:{value:[{t:2,r:"number",p:[38,20,1636]}],placeholder:["1-",{t:2,r:"sheets",p:[38,46,1662]}],"class":"number"}}," ",{p:[39,7,1698],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "circuit", "mat_id" : ',{t:2,r:"mat_id",p:[39,84,1775]},', "sheets" : ',{t:2,r:"number",p:[39,107,1798]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[37,6,1597]}]}],n:52,r:"data.circuitmat_list",p:[35,5,1513]}]}," ",{p:[44,4,1895],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[46,6,1961],t:7,e:"ui-section",f:[{t:2,r:"name",p:[46,18,1973]}," : ",{t:2,r:"amount",p:[46,29,1984]}," - ",{p:[47,7,2005],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "circuit", "name" : ',{t:2,r:"name",p:[47,80,2078]},', "id" : ',{t:2,r:"reagentid",p:[47,97,2095]},"}"]},f:["Purge"]}]}],n:52,r:"data.circuitchem_list",p:[45,5,1923]}]}]}]}]}],r:"data.circuitbusy"}],n:50,r:"data.circuit_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[55,2,2216],t:7,e:"ui-display",a:{title:"No Linked Circuit Imprinter"}}],r:"data.circuit_linked"}]},e.exports=a.extend(r.exports)},{341:341}],443:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,31],t:7,e:"ui-display",a:{title:[{t:2,r:"data.sdesign_name",p:[2,21,50]}]},f:[{p:[3,3,77],t:7,e:"ui-section",a:{title:"Description"},f:[{t:2,r:"data.sdesign_desc",p:[3,35,109]}]}]}," ",{p:[5,2,162],t:7,e:"ui-display",a:{title:"Lathe Types"},f:[{t:4,f:[{p:[7,4,239],t:7,e:"ui-section",a:{title:"Circuit Imprinter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&1"},p:[6,3,198]}," ",{t:4,f:[{p:[10,4,346],t:7,e:"ui-section",a:{title:"Protolathe"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&2"},p:[9,3,305]}," ",{t:4,f:[{p:[13,4,446],t:7,e:"ui-section",a:{title:"Autolathe"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&4"},p:[12,3,405]}," ",{t:4,f:[{p:[16,4,545],t:7,e:"ui-section",a:{title:"Crafting Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&8"},p:[15,3,504]}," ",{t:4,f:[{p:[19,4,655],t:7,e:"ui-section",a:{title:"Exosuit Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&16"},p:[18,3,613]}," ",{t:4,f:[{p:[22,4,764],t:7,e:"ui-section",a:{title:"Biogenerator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&32"},p:[21,3,722]}," ",{t:4,f:[{p:[25,4,867],t:7,e:"ui-section",a:{title:"Limb Grower"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&64"},p:[24,3,825]}," ",{t:4,f:[{p:[28,4,970],t:7,e:"ui-section",a:{title:"Ore Smelter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&128" -},p:[27,3,927]}]}," ",{p:[31,2,1045],t:7,e:"ui-display",a:{title:"Materials"},f:[{t:4,f:[{p:[33,4,1116],t:7,e:"ui-section",a:{title:[{t:2,r:"matname",p:[33,23,1135]}]},f:[{t:2,r:"matamt",p:[33,36,1148]}," cm^3"]}],n:52,r:"data.sdesign_materials",p:[32,3,1079]}]}],n:50,r:"data.design_selected",p:[1,1,0]},{t:4,f:[{p:[38,2,1248],t:7,e:"ui-display",a:{title:"No Design Selected."}}],n:50,x:{r:["data.design_selected"],s:"!_0"},p:[37,1,1216]}]},e.exports=a.extend(r.exports)},{341:341}],444:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[4,3,60],t:7,e:"ui-display",a:{title:"Destructive Analyzer Busy!"}}],n:50,r:"data.destroybusy",p:[3,2,32]},{t:4,n:51,f:[{t:4,f:[{p:[7,4,168],t:7,e:"ui-display",a:{title:"Destructive Analyzer Unloaded"}}],n:50,x:{r:["data.destroy_loaded"],s:"!_0"},p:[6,3,135]},{t:4,n:51,f:[{p:[9,4,248],t:7,e:"ui-display",a:{title:"Loaded Item"},f:[{p:[10,4,285],t:7,e:"ui-section",a:{title:"Name"},f:[{t:2,r:"data.destroy_name",p:[10,29,310]}]}]}," ",{p:[12,4,367],t:7,e:"ui-display",a:{title:"Boost Nodes"},f:[{t:4,f:[{p:[14,6,438],t:7,e:"ui-section",a:{title:[{t:2,r:"name",p:[14,25,457]}," | ",{t:2,r:"value",p:[14,36,468]}]},f:[{p:[15,7,487],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["allow"],s:'_0?null:"disabled"'},p:[15,25,505]}],action:"deconstruct",params:['{"id":',{t:2,r:"id",p:[15,90,570]},"}"]},f:["Deconstruct and Boost"]}]}],n:52,r:"data.boost_paths",p:[13,5,405]}]}," ",{p:[19,4,670],t:7,e:"ui-button",a:{action:"eject_da"},f:["Eject Item"]}],x:{r:["data.destroy_loaded"],s:"!_0"}}],r:"data.destroybusy"}],n:50,r:"data.destroy_linked",p:[2,1,2]},{t:4,n:51,f:[{p:[23,2,755],t:7,e:"ui-display",a:{title:"No Linked Destructive Analyzer"}}],r:"data.destroy_linked"}]},e.exports=a.extend(r.exports)},{341:341}],445:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,24],t:7,e:"ui-display",a:{title:"No Design Disk Loaded"}}],n:50,x:{r:["data.ddisk"],s:"!_0"},p:[2,1,2]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,121],t:7,e:"ui-display",a:{title:"Design Disk Updating"}}],n:50,r:"data.ddisk_update",p:[5,2,92]},{t:4,n:51,f:[{t:4,f:[{p:[9,4,221],t:7,e:"ui-display",a:{title:"Design Disk"},f:[{p:[10,5,259],t:7,e:"ui-section",a:{title:"Disk Space"},f:["Disk Capacity: ",{t:2,r:"data.ddisk_size",p:[10,51,305]}," blueprints."]}," ",{p:[11,5,355],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[11,33,383],t:7,e:"ui-button",a:{action:"ddisk_upall"},f:["Upload all designs"]}]}," ",{p:[12,5,464],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[12,36,495],t:7,e:"ui-button",a:{action:"clear_designdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[13,5,591],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[13,36,622],t:7,e:"ui-button",a:{action:"eject_designdisk"},f:["Eject Disk"]}]}]}," ",{p:[15,4,717],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[17,6,792],t:7,e:"ui-section",a:{title:"Number"},f:["#",{t:2,r:"pos",p:[17,34,820]},": ",{t:4,f:[{p:[19,8,866],t:7,e:"ui-button",a:{action:"upload_empty_ddisk_slot",params:['{"slot": "',{t:2,r:"pos",p:[19,70,928]},'"}']},f:["Upload to Empty Slot"]}],n:50,x:{r:["id"],s:'_0=="null"'},p:[18,7,837]},{t:4,n:51,f:[{p:[21,8,996],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[21,58,1046]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[21,75,1063]}]},f:[{t:2,r:"name",p:[21,122,1110]}]}," ",{p:[22,8,1139],t:7,e:"ui-button",a:{action:"ddisk_erasepos",style:"danger",params:['{"id": "',{t:2,r:"id",p:[22,74,1205]},'"}'],state:[{t:2,x:{r:["id"],s:'_0=="null"?"disabled":null'},p:[22,91,1222]}]},f:["Delete Slot"]}],x:{r:["id"],s:'_0=="null"'}}]}],n:52,r:"data.ddisk_designs",p:[16,5,757]}]}],n:50,x:{r:["data.ddisk_upload"],s:"!_0"},p:[8,3,190]},{t:4,n:51,f:[{p:[28,4,1367],t:7,e:"ui-display",a:{title:"Upload Design to Disk"},f:[{p:[28,46,1409],t:7,e:"ui-section",f:["Available Designs:"]}]}," ",{t:4,f:[{p:[30,5,1513],t:7,e:"ui-section",f:[{p:[30,17,1525],t:7,e:"ui-button",a:{action:"ddisk_uploaddesign",params:['{"id": "',{t:2,r:"id",p:[30,72,1580]},'"}']},f:[{t:2,r:"name",p:[30,82,1590]}]}]}],n:52,r:"data.ddisk_possible_designs",p:[29,4,1470]}],x:{r:["data.ddisk_upload"],s:"!_0"}}],r:"data.ddisk_update"}],x:{r:["data.ddisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],446:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,24],t:7,e:"ui-display",a:{title:"No Technology Disk Loaded"}}],n:50,x:{r:["data.tdisk"],s:"!_0"},p:[2,1,2]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,125],t:7,e:"ui-display",a:{title:"Technology Disk Updating"}}],n:50,r:"data.tdisk_update",p:[5,2,96]},{t:4,n:51,f:[{p:[8,3,198],t:7,e:"ui-display",a:{title:"Technology Disk"},f:[{p:[9,4,239],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[9,32,267],t:7,e:"ui-button",a:{action:"tdisk_down"},f:["Download Research to Disk"]},{p:[9,100,335],t:7,e:"ui-button",a:{action:"tdisk_up"},f:["Upload Research from Disk"]}," ",{p:[10,4,406],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[10,35,437],t:7,e:"ui-button",a:{action:"clear_techdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[11,4,530],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[11,35,561],t:7,e:"ui-button",a:{action:"eject_techdisk"},f:["Eject Disk"]}]}]}]}," ",{p:[13,3,652],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[15,5,723],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,53,771]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,70,788]}]},f:[{t:2,r:"display_name",p:[15,115,833]}]}],n:52,r:"data.tdisk_nodes",p:[14,4,691]}]}],r:"data.tdisk_update"}],x:{r:["data.tdisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],447:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,29],t:7,e:"ui-display",a:{title:[{t:2,r:"data.snode_name",p:[2,21,48]}]},f:[{p:[3,3,73],t:7,e:"ui-section",a:{title:"Description"},f:["Description: ",{t:2,r:"data.snode_desc",p:[3,48,118]}]}," ",{p:[4,3,154],t:7,e:"ui-section",a:{title:"Point Cost"},f:["Point Cost: ",{t:2,r:"data.snode_cost",p:[4,46,197]}]}," ",{p:[5,3,233],t:7,e:"ui-section",a:{title:"Export Price"},f:["Export Price: ",{t:2,r:"data.snode_export",p:[5,50,280]}]}," ",{p:[6,3,318],t:7,e:"ui-button",a:{action:"research_node",params:['{"id"="',{t:2,r:"id",p:[6,52,367]},'"}'],state:[{t:2,x:{r:["data.snode_researched"],s:'_0?"disabled":null'},p:[6,69,384]}]},f:[{t:2,x:{r:["data.snode_researched"],s:'_0?"Researched":"Research Node"'},p:[6,115,430]}]}]}," ",{p:[8,2,518],t:7,e:"ui-display",a:{title:"Prerequisites"},f:[{t:4,f:[{p:[10,4,588],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[10,52,636]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[10,69,653]}]},f:[{t:2,r:"display_name",p:[10,114,698]}]}],n:52,r:"data.node_prereqs",p:[9,3,556]}]}," ",{p:[13,2,759],t:7,e:"ui-display",a:{title:"Unlocks"},f:[{t:4,f:[{p:[15,4,823],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,52,871]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,69,888]}]},f:[{t:2,r:"display_name",p:[15,114,933]}]}],n:52,r:"data.node_unlocks",p:[14,3,791]}]}," ",{p:[18,2,994],t:7,e:"ui-display",a:{title:"Designs"},f:[{t:4,f:[{p:[20,4,1058],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[20,54,1108]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[20,71,1125]}]},f:[{t:2,r:"name",p:[20,118,1172]}]}],n:52,r:"data.node_designs",p:[19,3,1026]}]}],n:50,r:"data.node_selected",p:[1,1,0]},{t:4,f:[{p:[25,2,1263],t:7,e:"ui-display",a:{title:"No Node Selected."}}],n:50,x:{r:["data.node_selected"],s:"!_0"},p:[24,1,1233]}]},e.exports=a.extend(r.exports)},{341:341}],448:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,59],t:7,e:"ui-display",a:{title:"Protolathe Busy!"}}],n:50,r:"data.protobusy",p:[2,2,33]},{t:4,n:51,f:[{p:[5,3,124],t:7,e:"ui-display",f:[{p:[6,4,141],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,183],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,196]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,255],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "proto", "inputText" : ',{t:2,r:"textsearch",p:[8,82,332]},"}"]},f:["Search"]}]}," ",{p:[10,4,390],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.protomats",p:[10,27,413]}," / ",{t:2,r:"data.protomaxmats",p:[10,48,434]}]}," ",{p:[11,4,473],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.protochems",p:[11,26,495]}," / ",{t:2,r:"data.protomaxchems",p:[11,48,517]}]}," ",{p:[12,3,556],t:7,e:"ui-display",f:[{p:[14,3,574],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,589]}]},f:[{p:[15,4,615],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,678],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.protocat","name"],s:'_0==_1?"selected":null'},p:[17,43,715]}],params:['{"type" : "proto", "cat" : "',{t:2,r:"name",p:[17,125,797]},'"}']},f:[{t:2,r:"name",p:[17,137,809]}]}],n:52,r:"data.protocats",p:[16,5,647]}]}," ",{p:[20,4,860],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,926],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,938]},{t:2,r:"matstring",p:[22,26,946]}," ",{t:4,f:[{p:[24,8,996],t:7,e:"input",a:{value:[{t:2,r:"number",p:[24,21,1009]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[24,47,1035]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[23,7,967]}," ",{p:[26,7,1108],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[26,40,1141]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[26,117,1218]},'", "amount" : "',{t:2,r:"number",p:[26,138,1239]},'"}']},f:["Print"]}]}],n:52,r:"data.protodes",p:[21,5,896]}]}," ",{p:[30,4,1321],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[32,6,1386],t:7,e:"ui-section",f:[{t:2,r:"name",p:[32,18,1398]},{t:2,r:"matstring",p:[32,26,1406]}," ",{t:4,f:[{p:[34,8,1456],t:7,e:"input",a:{value:[{t:2,r:"number",p:[34,21,1469]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[34,47,1495]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[33,7,1427]}," ",{p:[36,7,1568],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[36,40,1601]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[36,117,1678]},'", "amount" : "',{t:2,r:"number",p:[36,138,1699]},'"}']},f:["Print"]}]}],n:52,r:"data.protomatch",p:[31,5,1354]}]}," ",{p:[40,4,1781],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[42,6,1844],t:7,e:"ui-section",f:[{t:2,r:"name",p:[42,18,1856]}," : ",{t:2,r:"amount",p:[42,29,1867]}," cm3 - ",{t:4,f:[{p:[44,7,1917],t:7,e:"input",a:{value:[{t:2,r:"number",p:[44,20,1930]}],placeholder:["1-",{t:2,r:"sheets",p:[44,46,1956]}],"class":"number"}}," ",{p:[45,7,1992],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "proto", "mat_id" : ',{t:2,r:"mat_id",p:[45,82,2067]},', "sheets" : ',{t:2,r:"number",p:[45,105,2090]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[43,6,1891]}]}],n:52,r:"data.protomat_list",p:[41,5,1809]}]}," ",{p:[50,4,2187],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[52,6,2251],t:7,e:"ui-section",f:[{t:2,r:"name",p:[52,18,2263]}," : ",{t:2,r:"amount",p:[52,29,2274]}," - ",{p:[53,7,2295],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "proto", "name" : ',{t:2,r:"name",p:[53,78,2366]},', "id" : ',{t:2,r:"reagentid",p:[53,95,2383]},"}"]},f:["Purge"]}]}],n:52,r:"data.protochem_list",p:[51,5,2215]}]}]}]}]}],r:"data.protobusy"}],n:50,r:"data.protolathe_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[61,2,2504],t:7,e:"ui-display",a:{title:"No Linked Protolathe"}}],r:"data.protolathe_linked"}]},e.exports=a.extend(r.exports)},{341:341}],449:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,1,14],t:7,e:"span",a:{"class":"memoedit"},f:["Nanotrasen R&D Console"]},{p:[2,53,66],t:7,e:"br"}," Available Points: ",{p:[3,19,91],t:7,e:"ui-section",a:{title:"Research Points"},f:[{t:2,r:"data.research_points_stored",p:[3,55,127]}]}," ",{p:[4,1,173],t:7,e:"ui-section",a:{title:["Page Selection - ",{t:2,r:"page",p:[4,37,209]}]},f:[{p:[4,47,219],t:7,e:"input",a:{value:[{t:2,r:"pageselect",p:[4,60,232]}],placeholder:"1","class":"number"}}," Select Page: ",{p:[5,14,294],t:7,e:"ui-button",a:{action:"page",params:['{"num" : "',{t:2,r:"pageselect",p:[5,57,337]},'"}']},f:["[Go]"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],450:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"span",a:{"class":"bad"},f:["Settings"]},{p:[1,34,33],t:7,e:"br"},{p:[1,39,38],t:7,e:"br"}," ",{p:[2,1,45],t:7,e:"ui-button",a:{action:"Resync"},f:["RESYNC MACHINERY"]},{p:[2,56,100],t:7,e:"br"}," ",{p:[3,1,107],t:7,e:"ui-button",a:{action:"Lock"},f:["LOCK"]}," ",{p:[4,1,150],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "destroy"}',state:[{t:2,x:{r:["data.destroy_linked"],s:'_0?null:"disabled"'},p:[4,71,220]}]},f:["Disconnect Destructive Analyzer"]}," ",{p:[5,1,309],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "lathe"}',state:[{t:2,x:{r:["data.protolathe_linked"],s:'_0?null:"disabled"'},p:[5,69,377]}]},f:["Disconnect Protolathe"]}," ",{p:[6,1,459],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "imprinter"}',state:[{t:2,x:{r:["data.circuit_linked"],s:'_0?null:"disabled"'},p:[6,73,531]}]},f:["Disconnect Circuit Imprinter"]}]},e.exports=a.extend(r.exports)},{341:341}],451:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Available for Research"},f:[{t:4,f:[{p:[3,3,78],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[3,51,126]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[3,68,143]}]},f:[{t:2,r:"display_name",p:[3,113,188]}]}],n:52,r:"data.techweb_avail",p:[2,2,46]}]}," ",{p:[6,1,245],t:7,e:"ui-display",a:{title:"Locked Nodes"},f:[{t:4,f:[{p:[8,3,314],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[8,51,362]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[8,68,379]}]},f:[{t:2,r:"display_name",p:[8,113,424]}]}],n:52,r:"data.techweb_locked",p:[7,2,281]}]}," ",{p:[11,1,482],t:7,e:"ui-display",a:{title:"Researched Nodes"},f:[{t:4,f:[{p:[13,3,559],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[13,51,607]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[13,68,624]}]},f:[{t:2,r:"display_name",p:[13,113,669]}]}],n:52,r:"data.techweb_researched",p:[12,2,522]}]}]},e.exports=a.extend(r.exports)},{341:341}],452:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,25],t:7,e:"ui-notice",f:[{p:[3,3,40],t:7,e:"span",f:["The grinder is currently processing and cannot be used."]}]}],n:50,r:"data.processing",p:[1,1,0]},{p:{button:[{p:[8,5,208],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[8,36,239]}],action:"eject"},f:["Eject Contents"]}]},t:7,e:"ui-display",a:{title:"Processing Chamber",button:0},f:[" ",{p:[10,3,364],t:7,e:"ui-section",a:{label:"Grinding"},f:[{p:[11,5,399],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.operating"],s:'_0?"average":"good"'},p:[11,18,412]}]},f:[{t:2,x:{r:["data.operating"],s:'_0?"Busy":"Ready"'},p:[11,59,453]}]}," ",{p:[12,2,500],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[12,35,533]}],action:"grind"},f:["Activate"]}]}," ",{p:[14,3,653],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[17,9,755],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:["The ",{t:2,r:"name",p:[17,56,802]}]},{p:[17,71,817],t:7,e:"br"}],n:52,r:"adata.contentslist",p:[16,7,717]},{t:4,n:51,f:[{p:[19,9,848],t:7,e:"span",f:["No Contents"]}],r:"adata.contentslist"}],n:50,r:"data.contents",p:[15,5,688]},{t:4,n:51,f:[{p:[22,7,911],t:7,e:"span",f:["No Contents"]}],r:"data.contents"}]}]}," ",{p:{button:[{p:[28,5,1047],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.isBeakerLoaded"],s:'(_0==0)&&_1?null:"disabled"'},p:[28,36,1078]}],action:"detach"},f:["Detach"]}]},t:7,e:"ui-display",a:{title:"Container",button:0},f:[" ",{p:[30,3,1202],t:7,e:"ui-section",a:{label:"Reagents"},f:[{t:4,f:[{p:[32,7,1272],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[32,13,1278]},"/",{t:2,r:"data.beakerMaxVolume",p:[32,55,1320]}," Units"]}," ",{p:[33,7,1365],t:7,e:"br"}," ",{t:4,f:[{p:[35,9,1418],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[35,52,1461]}," units of ",{t:2,r:"name",p:[35,87,1496]}]},{p:[35,102,1511],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[34,7,1378]},{t:4,n:51,f:[{p:[37,9,1542],t:7,e:"span",a:{"class":"bad"},f:["Container Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[31,5,1237]},{t:4,n:51,f:[{p:[40,7,1621],t:7,e:"span",a:{"class":"average"},f:["No Container"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],453:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,64],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,105],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,123]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,195]},', "flipped": ',{t:2,r:"flipped",p:[6,42,215]},"}"]},f:[{p:[6,56,229],t:7,e:"span",a:{"class":["pipes32x32 ",{t:2,r:"dir",p:[6,80,253]},"-",{t:2,r:"icon_state",p:[6,88,261]}],title:[{t:2,r:"dir_name",p:[6,111,284]}]}}]}],n:52,r:"previews",p:[4,4,81]}]}],n:52,r:"data.preview_rows",p:[2,2,33]}]}," ",{t:4,f:[{p:[12,2,406],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[14,4,468],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["@key","data.selected_color"],s:'_0==_1?"selected":null'},p:[14,22,486]}],action:"color",params:['{"paint_color": ',{t:2,r:"@key",p:[15,44,583]},"}"]},f:[{t:2,r:"@key",p:[15,55,594]}]}],n:52,r:"data.paint_colors",p:[13,3,436]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[11,1,377]},{p:[19,1,654],t:7,e:"ui-display",a:{title:"Utilities"},f:[{p:[20,2,687],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&1?"check-square-o":"square-o"'},p:[20,19,704]}],action:"mode",params:'{"mode": 1}'},f:["Build"]}," ",{p:[22,2,813],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&2?"check-square-o":"square-o"'},p:[22,19,830]}],action:"mode",params:'{"mode": 2}'},f:["Wrench"]}," ",{p:[24,2,940],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&4?"check-square-o":"square-o"'},p:[24,19,957]}],action:"mode",params:'{"mode": 4}'},f:["Destroy"]}," ",{t:4,f:[{p:[27,3,1098],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&8?"check-square-o":"square-o"'},p:[27,20,1115]}],action:"mode",params:'{"mode": 8}'},f:["Paint"]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[26,2,1068]}]}," ",{p:[31,1,1249],t:7,e:"ui-display",a:{title:"Category"},f:[{p:[32,2,1281],t:7,e:"ui-section",f:[{p:[33,3,1297],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==0?"check-square-o":"square-o"'},p:[33,20,1314]}],state:[{t:2,x:{r:["data.category"],s:'_0<=0?"selected":null'},p:[33,83,1377]}],action:"category",params:'{"category": 0}'},f:["Atmospherics"]}," ",{p:[35,3,1496],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==1?"check-square-o":"square-o"'},p:[35,20,1513]}],state:[{t:2,x:{r:["data.category"],s:'_0==1?"selected":null'},p:[35,83,1576]}],action:"category",params:'{"category": 1}'},f:["Disposals"]}," ",{p:[37,3,1692],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==2?"check-square-o":"square-o"'},p:[37,20,1709]}],state:[{t:2,x:{r:["data.category"],s:'_0==2?"selected":null'},p:[37,83,1772]}],action:"category",params:'{"category": 2}'},f:["Transit Tubes"]}]}," ",{t:4,f:[{p:[41,3,1937],t:7,e:"ui-section",a:{label:"Piping Layer"},f:[{p:[42,4,1975],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==1?"selected":null'},p:[42,22,1993]}],action:"piping_layer",params:'{"piping_layer": 1}'},f:["1"]}," ",{p:[44,4,2115],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==2?"selected":null'},p:[44,22,2133]}],action:"piping_layer",params:'{"piping_layer": 2}'},f:["2"]}," ",{p:[46,4,2255],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==3?"selected":null'},p:[46,22,2273]}],action:"piping_layer",params:'{"piping_layer": 3}'},f:["3"]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[40,2,1907]}]}," ",{t:4,f:[{p:[52,2,2462],t:7,e:"ui-display",a:{title:[{t:2,r:"cat_name",p:[52,21,2481]}]},f:[{t:4,f:[{p:[54,4,2521],t:7,e:"ui-section",f:[{p:[55,5,2539],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[55,23,2557]}],action:"pipe_type",params:['{"pipe_type": ',{t:2,r:"pipe_index",p:[56,28,2638]},', "category": ',{t:2,r:"cat_name",p:[56,56,2666]},"}"]},f:[{t:2,r:"pipe_name",p:[56,71,2681]}]}]}],n:52,r:"recipes",p:[53,3,2499]}]}],n:52,r:"data.categories",p:[51,1,2434]}]},e.exports=a.extend(r.exports)},{341:341}],454:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[3,3,60],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[3,21,78]}],action:"color",params:['{"paint_color": ',{t:2,r:"color_name",p:[4,28,155]},"}"]},f:[{t:2,r:"color_name",p:[4,45,172]}]}],n:52,r:"data.paint_colors",p:[2,2,29]}]}]},e.exports=a.extend(r.exports)},{341:341}],455:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,64],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,105],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,123]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,195]},', "flipped": ',{t:2,r:"flipped",p:[6,42,215]},"}"]},f:[{p:[6,56,229],t:7,e:"img",a:{src:["pipe.",{t:2,r:"dir",p:[6,71,244]},".",{t:2,r:"icon_state",p:[6,79,252]},".png"],title:[{t:2,r:"dir_name",p:[6,106,279]}]}}]}],n:52,r:"previews",p:[4,4,81]}]}],n:52,r:"data.preview_rows",p:[2,2,33]}]}]},e.exports=a.extend(r.exports)},{341:341}],456:[function(t,e,n){var a=t(341),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)},{341:341}],457:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,26],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[2,20,43]}],style:[{t:2,x:{r:["enabled"],s:'_0?"selected":null'},p:[2,72,95]}],action:"toggle_filter",params:['{"id_tag": "',{t:2,r:"id_tag",p:[3,48,176]},'", "val": ',{t:2,r:"gas_id",p:[3,68,196]},"}"]},f:[{t:2,r:"gas_name",p:[3,81,209]}]}],n:52,r:"filter_types",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],458:[function(t,e,n){var a=t(341),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(459),templates:t(461),status:t(460)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,459:459,460:460,461:461}],459:[function(t,e,n){var a=t(341),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)},{341:341}],460:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"table",a:{width:"100%"},f:[{t:4,f:[{p:[3,3,49],t:7,e:"tr",f:[{p:[4,5,59],t:7,e:"td",f:[{p:[5,7,71],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"id",p:[5,69,133]},'"}']},f:["JMP"]}]}," ",{p:[9,5,193],t:7,e:"td",f:[{p:[10,7,205],t:7,e:"ui-button",a:{action:"fly",params:['{"id": "',{t:2,r:"id",p:[10,47,245]},'"}'],state:[{t:2,x:{r:["can_fly"],s:'_0?null:"disabled"'},p:[10,64,262]}]},f:["Fly"]}]}," ",{p:[14,5,345],t:7,e:"td",f:[{t:2,r:"name",p:[15,7,357]}," (",{p:[15,17,367],t:7,e:"code",f:[{t:2,r:"id",p:[15,23,373]}]},")"]}," ",{p:[17,5,404],t:7,e:"td",f:[{t:2,r:"status",p:[18,7,416]}]}," ",{p:[20,5,443],t:7,e:"td",f:[{t:4,f:[{t:2,r:"mode",p:[22,9,477]}],n:50,r:"mode",p:[21,7,455]}," ",{t:4,f:["(",{t:2,r:"timeleft",p:[25,10,532]},") ",{p:[26,9,555],t:7,e:"ui-button",a:{action:"fast_travel",params:['{"id": "',{t:2,r:"id",p:[26,57,603]},'"}'],state:[{t:2,x:{r:["can_fast_travel"],s:'_0?null:"disabled"'},p:[26,74,620]}]},f:["Fast Travel"]}],n:50,r:"timer",p:[24,7,508]}]}]}],n:52,r:"data.shuttles",p:[2,1,22]}]}]},e.exports=a.extend(r.exports)},{341:341}],461:[function(t,e,n){var a=t(341),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)},{341:341}],462:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,33],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,66],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,72]}]}]}," ",{t:4,f:[{p:[6,5,186],t:7,e:"ui-section",a:{label:"State"},f:[{p:[7,7,220],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[7,20,233]}]},f:[{t:2,r:"data.occupant.stat",p:[7,49,262]}]}]}," ",{p:[9,5,315],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[10,7,350],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[10,20,363]}],max:[{t:2,r:"data.occupant.maxHealth",p:[10,54,397]}],value:[{t:2,r:"data.occupant.health",p:[10,90,433]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[11,16,475]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[11,68,527]}]}]}," ",{t:4,f:[{p:[14,7,764],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[14,26,783]}]},f:[{p:[15,9,804],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[15,30,825]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[15,66,861]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[15,103,898]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[13,5,598]}," ",{t:4,f:[{p:[19,7,1020],t:7,e:"ui-section",a:{label:"Blood"},f:[{p:[20,9,1056],t:7,e:"ui-section",a:{label:"Volume"},f:[{p:[21,11,1095],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.blood.maxBloodVolume",p:[21,32,1116]}],value:[{t:2,r:"data.occupant.blood.currentBloodVolume",p:[21,79,1163]}],state:[{t:2,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"bad":"good"'},p:[21,130,1214]}]},f:[{t:3,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"LOW":"OK"'},p:[21,232,1316]}," - ",{t:2,x:{r:["data.occupant.blood.currentBloodVolume"],s:"Math.round(_0)"},p:[21,342,1426]}," cl"]}]}," ",{p:[23,9,1525],t:7,e:"ui-section",a:{label:"Type"},f:[{p:[24,11,1562],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:"data.occupant.blood.bloodType",p:[24,35,1586]}]}]}]}],n:50,r:"data.occupant.blood",p:[18,5,985]}," ",{p:[28,5,1689],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[29,9,1725],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[29,22,1738]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[29,68,1784]}]}]}," ",{p:[31,5,1867],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[32,9,1903],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[32,22,1916]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[32,68,1962]}]}]}," ",{p:[34,5,2046],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[36,11,2133],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[36,54,2176]}," units of ",{t:2,r:"name",p:[36,89,2211]}]},{p:[36,104,2226],t:7,e:"br" -}],n:52,r:"adata.occupant.reagents",p:[35,9,2088]},{t:4,n:51,f:[{p:[38,11,2261],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[5,3,159]}]}," ",{p:[43,1,2357],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[44,2,2389],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[45,5,2420],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[45,22,2437]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[45,71,2486]}]}]}," ",{p:[47,3,2551],t:7,e:"ui-section",a:{label:"Inject"},f:[{t:4,f:[{p:[49,7,2612],t:7,e:"ui-button",a:{icon:"flask",state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[49,38,2643]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[49,122,2727]},'"}']},f:[{t:2,r:"name",p:[49,132,2737]}]},{p:[49,152,2757],t:7,e:"br"}],n:52,r:"data.chems",p:[48,5,2584]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],463:[function(t,e,n){var a=t(341),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:4,f:["You Are Here"],n:50,x:{r:["occupied"],s:'_0=="owner"'},p:[10,7,491]},{t:4,n:51,f:[{t:4,f:["Occupied"],n:50,x:{r:["occupied"],s:'_0=="stranger"'},p:[13,9,566]},{t:4,n:51,f:["Swap"],x:{r:["occupied"],s:'_0=="stranger"'}}],x:{r:["occupied"],s:'_0=="owner"'}}]}]}],n:52,r:"data.bodies",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],464:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,23,82],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.drying"],s:'_0?"stop":"tint"'},p:[4,40,99]}],action:"Dry"},f:[{t:2,x:{r:["data.drying"],s:'_0?"Stop drying":"Dry"'},p:[4,88,147]}]}],n:50,r:"data.isdryer",p:[4,3,62]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[7,3,258],t:7,e:"ui-notice",f:[{p:[8,5,275],t:7,e:"span",f:["Unfortunately, this ",{t:2,r:"data.name",p:[8,31,301]}," is empty."]}]}],n:50,x:{r:["data.contents.length"],s:"_0==0"},p:[6,1,221]},{t:4,n:51,f:[{p:[11,1,359],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[12,2,391],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[13,4,425],t:7,e:"section",a:{"class":"cell bold"},f:["Item"]}," ",{p:[16,4,482],t:7,e:"section",a:{"class":"cell bold"},f:["Quantity"]}," ",{p:[19,4,543],t:7,e:"section",a:{"class":"cell bold",align:"center"},f:[{t:4,f:[{t:2,r:"data.verb",p:[20,22,608]}],n:50,r:"data.verb",p:[20,5,591]},{t:4,n:51,f:["Dispense"],r:"data.verb"}]}]}," ",{t:4,f:[{p:[24,3,703],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[25,4,737],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[26,5,765]}]}," ",{p:[28,4,793],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[29,5,835]}]}," ",{p:[31,4,865],t:7,e:"section",a:{"class":"table",alight:"right"},f:[{p:[32,5,909],t:7,e:"section",a:{"class":"cell"}}," ",{p:[33,5,947],t:7,e:"section",a:{"class":"cell"},f:[{p:[34,6,976],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[34,45,1015]}],params:['{ "name" : ',{t:2,r:"name",p:[34,102,1072]},', "amount" : 1 }']},f:["One"]}]}," ",{p:[38,5,1151],t:7,e:"section",a:{"class":"cell"},f:[{p:[39,6,1180],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>1)?null:"disabled"'},p:[39,45,1219]}],params:['{ "name" : ',{t:2,r:"name",p:[39,101,1275]}," }"]},f:["Many"]}]}]}]}],n:52,r:"data.contents",p:[23,2,676]}]}],x:{r:["data.contents.length"],s:"_0==0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],465:[function(t,e,n){var a=t(341),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,r:"adata.inputLevel_text",p:[37,78,1447]}]}]}," ",{p:[39,3,1501],t:7,e:"ui-section",a:{label:"Adjust Input"},f:[{p:[40,5,1540],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[40,44,1579]}],action:"input",params:'{"target": "min"}'}}," ",{p:[41,5,1674],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[41,39,1708]}],action:"input",params:'{"adjust": -10000}'}}," ",{p:[42,5,1804],t:7,e:"ui-button",a:{icon:"pencil",action:"input",params:'{"target": "input"}'},f:["Set"]}," ",{p:[43,5,1894],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,1927]}],action:"input",params:'{"adjust": 10000}'}}," ",{p:[44,5,2039],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,2077]}],action:"input",params:'{"target": "max"}'}}]}," ",{p:[46,3,2204],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[47,3,2238],t:7,e:"span",f:[{t:2,r:"adata.inputAvailable",p:[47,9,2244]}]}]}]}," ",{p:[50,1,2308],t:7,e:"ui-display",a:{title:"Output"},f:[{p:[51,3,2339],t:7,e:"ui-section",a:{label:"Output Mode"},f:[{p:[52,5,2377],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"power-off":"close"'},p:[52,22,2394]}],style:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"selected":null'},p:[52,77,2449]}],action:"tryoutput"},f:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"On":"Off"'},p:[53,26,2519]}]},"   [",{p:[55,6,2587],t:7,e:"span",a:{"class":[{t:2,r:"outputState",p:[55,19,2600]}]},f:[{t:2,x:{r:["data.outputting","data.charge"],s:'_0?"Sending":_1>0?"Not Sending":"No Charge"'},p:[55,36,2617]}]},"]"]}," ",{p:[57,3,2724],t:7,e:"ui-section",a:{label:"Target Output"},f:[{p:[58,5,2764],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.outputLevelMax",p:[58,26,2785]}],value:[{t:2,r:"data.outputLevel",p:[58,58,2817]}]},f:[{t:2,r:"adata.outputLevel_text",p:[58,80,2839]}]}]}," ",{p:[60,3,2894],t:7,e:"ui-section",a:{label:"Adjust Output"},f:[{p:[61,5,2934],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[61,44,2973]}],action:"output",params:'{"target": "min"}'}}," ",{p:[62,5,3070],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[62,39,3104]}],action:"output",params:'{"adjust": -10000}'}}," ",{p:[63,5,3202],t:7,e:"ui-button",a:{icon:"pencil",action:"output",params:'{"target": "input"}'},f:["Set"]}," ",{p:[64,5,3293],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,3326]}],action:"output",params:'{"adjust": 10000}'}}," ",{p:[65,5,3441],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,3479]}],action:"output",params:'{"target": "max"}'}}]}," ",{p:[67,3,3609],t:7,e:"ui-section",a:{label:"Outputting"},f:[{p:[68,3,3644],t:7,e:"span",f:[{t:2,r:"adata.outputUsed",p:[68,9,3650]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],466:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:["\ufeff",{t:4,f:[" ",{p:[2,2,33],t:7,e:"ui-display",a:{title:"Dispersal Tank"},f:[{p:[3,3,73],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[4,4,104],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.active"],s:'_0?"power-off":"close"'},p:[4,21,121]}],style:[{t:2,x:{r:["data.active"],s:'_0?"selected":null'},p:[5,12,174]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[6,12,223]}],action:"power"},f:[{t:2,x:{r:["data.active"],s:'_0?"On":"Off"'},p:[7,20,286]}]}]}," ",{p:[10,3,354],t:7,e:"ui-section",a:{label:"Smoke Radius Setting"},f:[{p:[11,5,401],t:7,e:"div",a:{"class":"content",style:"float:left"},f:[{p:[12,6,448],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=1?null:"disabled"'},p:[12,36,478]}],style:[{t:2,x:{r:["data.setting"],s:'_0==1?"selected":null'},p:[12,89,531]}],action:"setting",params:'{"amount": 1}'},f:["3"]}," ",{p:[13,6,634],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=2?null:"disabled"'},p:[13,36,664]}],style:[{t:2,x:{r:["data.setting"],s:'_0==2?"selected":null'},p:[13,89,717]}],action:"setting",params:'{"amount": 2}'},f:["6"]}," ",{p:[14,6,820],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=3?null:"disabled"'},p:[14,36,850]}],style:[{t:2,x:{r:["data.setting"],s:'_0==3?"selected":null'},p:[14,89,903]}],action:"setting",params:'{"amount": 3}'},f:["9"]}," ",{p:[15,6,1006],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=4?null:"disabled"'},p:[15,36,1036]}],style:[{t:2,x:{r:["data.setting"],s:'_0==4?"selected":null'},p:[15,89,1089]}],action:"setting",params:'{"amount": 4}'},f:["12"]}," ",{p:[16,6,1193],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=5?null:"disabled"'},p:[16,36,1223]}],style:[{t:2,x:{r:["data.setting"],s:'_0==5?"selected":null'},p:[16,89,1276]}],action:"setting",params:'{"amount": 5}'},f:["15"]}]}]}," ",{p:[19,3,1410],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[21,6,1476],t:7,e:"span",f:[{t:2,x:{r:["adata.TankCurrentVolume"],s:"Math.round(_0)"},p:[21,12,1482]},"/",{t:2,r:"data.TankMaxVolume",p:[21,52,1522]}," Units"]}," ",{p:[22,6,1564],t:7,e:"br"}," ",{p:[23,5,1575],t:7,e:"br"}," ",{t:4,f:[{p:[25,7,1623],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[25,50,1666]}," units of ",{t:2,r:"name",p:[25,85,1701]}]},{p:[25,100,1716],t:7,e:"br"}],n:52,r:"adata.TankContents",p:[24,6,1587]}],n:50,r:"data.isTankLoaded",p:[20,4,1444]},{t:4,n:51,f:[{p:[28,6,1757],t:7,e:"span",a:{"class":"bad"},f:["Tank Empty"]}],r:"data.isTankLoaded"}," ",{p:[30,4,1809],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Eject":"Close"'},p:[30,21,1826]}],style:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"selected":null'},p:[31,12,1881]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[32,12,1936]}],action:"purge"},f:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Purge Contents":"No chemicals detected"'},p:[33,20,1999]}]}]}]}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,2,1]}]},e.exports=a.extend(r.exports)},{341:341}],467:[function(t,e,n){var a=t(341),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)},{341:341}],468:[function(t,e,n){var a=t(341),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)},{341:341}],469:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,8,97],t:7,e:"ui-button",a:{action:"jump",params:['{"name" : ',{t:2,r:"name",p:[4,51,140]},"}"]},f:["Jump"]}," ",{p:[7,9,195],t:7,e:"ui-button",a:{action:"spawn",params:['{"name" : ',{t:2,r:"name",p:[7,53,239]},"}"]},f:["Spawn"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[2,22,46]}],button:0},f:[" ",{p:[11,3,308],t:7,e:"ui-section",a:{label:"Description"},f:[{p:[12,5,346],t:7,e:"span",f:[{t:3,r:"desc",p:[12,11,352]}]}]}," ",{p:[14,3,390],t:7,e:"ui-section",a:{label:"Spawners left"},f:[{p:[15,5,430],t:7,e:"span",f:[{t:2,r:"amount_left",p:[15,11,436]}]}]}]}],n:52,r:"data.spawners",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],470:[function(t,e,n){var a=t(341),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)},{341:341}],471:[function(t,e,n){var a=t(341),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)},{341:341}],472:[function(t,e,n){var a=t(341),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)},{341:341}],473:[function(t,e,n){var a=t(341),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)},{341:341}],474:[function(t,e,n){var a=t(341),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)},{341:341}],475:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 1:return"good";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,173],t:7,e:"ui-notice",f:[{p:[14,2,187],t:7,e:"ui-section",a:{label:"Reconnect"},f:[{p:[15,3,221],t:7,e:"div",a:{style:"float:right"},f:[{p:[16,4,251],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]}]}]}," ",{p:[20,1,359],t:7,e:"ui-display",a:{title:"Turbine Controller"},f:[{p:[21,2,401],t:7,e:"ui-section",a:{label:"Status"},f:[{t:4,f:[{p:[23,4,456],t:7,e:"span",a:{"class":"bad"},f:["Broken"]}],n:50,r:"data.broken",p:[22,3,432]},{t:4,n:51,f:[{p:[25,4,504],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.online"],s:"_0(_1)"},p:[25,17,517]}]},f:[{t:2,x:{r:["data.online","data.compressor_broke","data.turbine_broke"],s:'_0&&!(_1||_2)?"Online":"Offline"'},p:[25,46,546]}]}],r:"data.broken"}," ",{p:[27,3,656],t:7,e:"div",a:{style:"float:right"},f:[{p:[28,4,686],t:7,e:"ui-button",a:{icon:"power-off",action:"power-on",state:[{t:2,r:"data.broken",p:[28,57,739]}],style:[{t:2,x:{r:["data.online"],s:'_0?"selected":""'},p:[28,81,763]}]},f:["On"]}," ",{p:[29,4,817],t:7,e:"ui-button",a:{icon:"close",action:"power-off",state:[{t:2,r:"data.broken",p:[29,54,867]}],style:[{t:2,x:{r:["data.online"],s:'_0?"":"selected"'},p:[29,78,891]}]},f:["Off"]}]}," ",{t:4,f:[{p:[32,4,989],t:7,e:"br"}," [ ",{p:[33,6,1e3],t:7,e:"span",a:{"class":"bad"},f:["Compressor is inoperable"]}," ]"],n:50,r:"data.compressor_broke",p:[31,3,955]}," ",{t:4,f:[{p:[36,4,1097],t:7,e:"br"}," [ ",{p:[37,6,1108],t:7,e:"span",a:{"class":"bad"},f:["Turbine is inoperable"]}," ]"],n:50,r:"data.turbine_broke",p:[35,3,1066]}]}]}," ",{p:[41,1,1200],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[42,2,1230],t:7,e:"ui-section",a:{label:"Turbine Speed"},f:[{p:[43,3,1268],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.rpm"],s:'_0?"--":_1'},p:[43,9,1274]}," RPM"]}]}," ",{p:[45,2,1337],t:7,e:"ui-section",a:{label:"Internal Temp"},f:[{p:[46,3,1375],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.temp"],s:'_0?"--":_1'},p:[46,9,1381]}," K"]}]}," ",{p:[48,2,1443],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{p:[49,3,1483],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.power"],s:'_0?"--":_1'},p:[49,9,1489]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],476:[function(t,e,n){var a=t(341),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)},{341:341}],477:[function(t,e,n){var a=t(341),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,331],t:7,e:"ui-notice",f:[{p:[17,4,347],t:7,e:"span",f:["Safety restraints disabled."]}]}],n:50,r:"data.emagged",p:[15,2,307]}," ",{t:4,f:[{p:[21,3,442],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:[{p:[22,4,482],t:7,e:"ui-section",a:{label:"Name"},f:[{t:2,r:"data.vr_avatar.name",p:[23,5,513]}]}," ",{t:4,f:[{p:[26,5,586],t:7,e:"ui-section",a:{label:"Status"},f:[{t:2,r:"data.vr_avatar.status",p:[27,6,620]}]}," ",{p:[29,5,670],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[30,6,704],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.vr_avatar.maxhealth",p:[30,27,725]}],value:[{t:2,r:"adata.vr_avatar.health",p:[30,65,763]}],state:[{t:2,x:{r:["healthState","adata.vr_avatar.health"],s:"_0(_1)"},p:[30,100,798]}]},f:[{t:2,x:{r:["adata.vr_avatar.health"],s:"Math.round(_0)"},p:[30,141,839]},"/",{t:2,r:"adata.vr_avatar.maxhealth",p:[30,180,878]}]}]}],n:50,r:"data.isliving",p:[25,4,559]}]}],n:50,r:"data.vr_avatar",p:[20,2,416]},{t:4,n:51,f:[{p:[35,3,979],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:["No Virtual Avatar detected"]}],r:"data.vr_avatar"}," ",{p:[39,2,1075],t:7,e:"ui-display",a:{title:"VR Commands"},f:[{p:[40,3,1111],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.toggle_open"],s:'_0?"times":"plus"'},p:[40,20,1128]}],action:"toggle_open"},f:[{t:2,x:{r:["data.toggle_open"],s:'_0?"Close":"Open"'},p:[41,4,1195]}," the VR Sleeper"]}," ",{t:4,f:[{p:[44,4,1297],t:7,e:"ui-button",a:{icon:"signal",action:"vr_connect"},f:["Connect to VR"]}],n:50,r:"data.isoccupant",p:[43,3,1269]}," ",{t:4,f:[{p:[49,4,1420],t:7,e:"ui-button",a:{icon:"ban",action:"delete_avatar"},f:["Delete Virtual Avatar"]}],n:50,r:"data.vr_avatar",p:[48,3,1393]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],478:[function(t,e,n){var a=t(341),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)},{341:341}],479:[function(t,e,n){(function(e){"use strict";var n=t(341),a=e.interopRequireDefault(n);t(331),t(1),t(327),t(330);var r=t(480),i=e.interopRequireDefault(r),o=t(481),s=t(328),p=t(329),u=e.interopRequireDefault(p);a["default"].DEBUG=/minified/.test(function(){}),Object.assign(Math,t(485)),window.initialize=function(e){window.tgui=window.tgui||new i["default"]({el:"#container",data:function(){var n=JSON.parse(e);return{constants:t(482),text:t(486),config:n.config,data:n.data,adata:n.data}}})};var c=document.getElementById("data"),l=c.textContent,d=c.getAttribute("data-ref");"{}"!==l&&(window.initialize(l),c.remove()),(0,o.act)(d,"tgui:initialize"),(0,s.loadCSS)("font-awesome.min.css");var f=new u["default"]("FontAwesome");f.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,327:327,328:328,329:329,330:330,331:331,341:341,480:480,481:481,482:482,485:485,486:486,"babel/external-helpers":"babel/external-helpers"}],480:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(483);e.exports={components:{"ui-bar":t(342),"ui-button":t(343),"ui-display":t(344),"ui-input":t(345),"ui-linegraph":t(346),"ui-notice":t(347),"ui-section":t(349),"ui-subdisplay":t(350),"ui-tabs":t(351)},events:{enter:t(339).enter,space:t(339).space},transitions:{fade:t(340)},onconfig:function(){var e=this.get("config.interface"),n={ai_airlock:t(355),airalarm:t(356),"airalarm/back":t(357),"airalarm/modes":t(358),"airalarm/scrubbers":t(359),"airalarm/status":t(360),"airalarm/thresholds":t(361),"airalarm/vents":t(362),airlock_electronics:t(363),apc:t(364),atmos_alert:t(365),atmos_control:t(366),atmos_filter:t(367),atmos_mixer:t(368),atmos_pump:t(369),borgopanel:t(370),brig_timer:t(371),bsa:t(372),canister:t(373),cargo:t(374),cargo_express:t(375),cellular_emporium:t(376),centcom_podlauncher:t(377),chem_dispenser:t(378),chem_heater:t(379),chem_master:t(380),chem_synthesizer:t(381),clockwork_slab:t(382),codex_gigas:t(383),computer_fabricator:t(384),crayon:t(385),crew:t(386),cryo:t(387),disposal_unit:t(388),dna_vault:t(389),dogborg_sleeper:t(390),eightball:t(391),emergency_shuttle_console:t(392),engraved_message:t(393),error:t(394),"exofab - Copia":t(395),exonet_node:t(396),firealarm:t(397),gps:t(398),gulag_console:t(399),gulag_item_reclaimer:t(400),holodeck:t(401),implantchair:t(402),intellicard:t(403),keycard_auth:t(404),labor_claim_console:t(405),language_menu:t(406),launchpad_remote:t(407),mech_bay_power_console:t(408),mulebot:t(409),nanite_chamber_control:t(410),nanite_cloud_control:t(411),nanite_program_hub:t(412),nanite_programmer:t(413),nanite_remote:t(414),notificationpanel:t(415),ntnet_relay:t(416),ntos_ai_restorer:t(417),ntos_card:t(418),ntos_configuration:t(419),ntos_file_manager:t(420),ntos_main:t(421),ntos_net_chat:t(422),ntos_net_dos:t(423),ntos_net_downloader:t(424),ntos_net_monitor:t(425),ntos_net_transfer:t(426),ntos_power_monitor:t(427),ntos_revelation:t(428),ntos_station_alert:t(429),ntos_supermatter_monitor:t(430),ntosheader:t(431),nuclear_bomb:t(432),operating_computer:t(433),ore_redemption_machine:t(434),pandemic:t(435),personal_crafting:t(436),portable_pump:t(437),portable_scrubber:t(438),power_monitor:t(439),radio:t(440),rdconsole:t(441),"rdconsole/circuit":t(442),"rdconsole/designview":t(443),"rdconsole/destruct":t(444),"rdconsole/diskopsdesign":t(445),"rdconsole/diskopstech":t(446),"rdconsole/nodeview":t(447),"rdconsole/protolathe":t(448),"rdconsole/rdheader":t(449),"rdconsole/settings":t(450),"rdconsole/techweb":t(451),reagentgrinder:t(452),rpd:t(453),"rpd/colorsel":t(454),"rpd/dirsel":t(455),sat_control:t(456),scrubbing_types:t(457),shuttle_manipulator:t(458),"shuttle_manipulator/modification":t(459),"shuttle_manipulator/status":t(460),"shuttle_manipulator/templates":t(461),sleeper:t(462),slime_swap_body:t(463),smartvend:t(464),smes:t(465),smoke_machine:t(466),solar_control:t(467),space_heater:t(468),spawners_menu:t(469),station_alert:t(470),suit_storage_unit:t(471),tank_dispenser:t(472),tanks:t(473),thermomachine:t(474),turbine_computer:t(475),uplink:t(476),vr_sleeper:t(477),wires:t(478)};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(354),titlebar:t(353),resize:t(348)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{339:339,340:340,341:341,342:342,343:343,344:344,345:345,346:346,347:347,348:348,349:349,350:350,351:351,353:353,354:354,355:355,356:356,357:357,358:358,359:359,360:360,361:361,362:362,363:363,364:364,365:365,366:366,367:367,368:368,369:369,370:370,371:371,372:372,373:373,374:374,375:375,376:376,377:377,378:378,379:379,380:380,381:381,382:382,383:383,384:384,385:385,386:386,387:387,388:388,389:389,390:390,391:391,392:392,393:393,394:394,395:395,396:396,397:397,398:398,399:399,400:400,401:401,402:402,403:403,404:404,405:405,406:406,407:407,408:408,409:409,410:410,411:411,412:412,413:413,414:414,415:415,416:416,417:417,418:418,419:419,420:420,421:421,422:422,423:423,424:424,425:425,426:426,427:427,428:428,429:429,430:430,431:431,432:432,433:433,434:434,435:435,436:436,437:437,438:438,439:439,440:440,441:441,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451,452:452,453:453,454:454,455:455,456:456,457:457,458:458,459:459,460:460,461:461,462:462,463:463,464:464,465:465,466:466,467:467,468:468,469:469,470:470,471:471,472:472,473:473,474:474,475:475,476:476,477:477,478:478,481:481,483:483}],481:[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},{}],482:[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},{}],483:[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(481)},{481:481}],484:[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 p=s;a||p.textContent.toLowerCase().includes(e)?p.style.display="":p.style.display="none"}}n.__esModule=!0,n.filterMulti=a,n.filter=r},{}],485:[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},{}],486:[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 p=Array(o),u=0;o>u;u++)p[u]=arguments[u+3];n.children=p}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(p){r("throw",p)}}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(p){return void n(p)}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(p){r=!0,i=p}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);e10?10:_0"},p:[24,47,1035]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[23,7,967]}," ",{p:[26,7,1108],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[26,40,1141]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[26,117,1218]},'", "amount" : "',{t:2,r:"number",p:[26,138,1239]},'"}']},f:["Print"]}]}],n:52,r:"data.protodes",p:[21,5,896]}]}," ",{p:[30,4,1321],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[32,6,1386],t:7,e:"ui-section",f:[{t:2,r:"name",p:[32,18,1398]},{t:2,r:"matstring",p:[32,26,1406]}," ",{t:4,f:[{p:[34,8,1456],t:7,e:"input",a:{value:[{t:2,r:"number",p:[34,21,1469]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[34,47,1495]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[33,7,1427]}," ",{p:[36,7,1568],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[36,40,1601]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[36,117,1678]},'", "amount" : "',{t:2,r:"number",p:[36,138,1699]},'"}']},f:["Print"]}]}],n:52,r:"data.protomatch",p:[31,5,1354]}]}," ",{p:[40,4,1781],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[42,6,1844],t:7,e:"ui-section",f:[{t:2,r:"name",p:[42,18,1856]}," : ",{t:2,r:"amount",p:[42,29,1867]}," cm3 - ",{t:4,f:[{p:[44,7,1917],t:7,e:"input",a:{value:[{t:2,r:"number",p:[44,20,1930]}],placeholder:["1-",{t:2,r:"sheets",p:[44,46,1956]}],"class":"number"}}," ",{p:[45,7,1992],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "proto", "mat_id" : ',{t:2,r:"mat_id",p:[45,82,2067]},', "sheets" : ',{t:2,r:"number",p:[45,105,2090]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[43,6,1891]}]}],n:52,r:"data.protomat_list",p:[41,5,1809]}]}," ",{p:[50,4,2187],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[52,6,2251],t:7,e:"ui-section",f:[{t:2,r:"name",p:[52,18,2263]}," : ",{t:2,r:"amount",p:[52,29,2274]}," - ",{p:[53,7,2295],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "proto", "name" : ',{t:2,r:"name",p:[53,78,2366]},', "id" : ',{t:2,r:"reagentid",p:[53,95,2383]},"}"]},f:["Purge"]}]}],n:52,r:"data.protochem_list",p:[51,5,2215]}]}]}]}]}],r:"data.protobusy"}],n:50,r:"data.protolathe_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[61,2,2504],t:7,e:"ui-display",a:{title:"No Linked Protolathe"}}],r:"data.protolathe_linked"}]},e.exports=a.extend(r.exports)},{341:341}],449:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,1,14],t:7,e:"span",a:{"class":"memoedit"},f:["Nanotrasen R&D Console"]},{p:[2,53,66],t:7,e:"br"}," Available Points: ",{p:[3,19,91],t:7,e:"ui-section",a:{title:"Research Points"},f:[{t:2,r:"data.research_points_stored",p:[3,55,127]}]}," ",{p:[4,1,173],t:7,e:"ui-section",a:{title:["Page Selection - ",{t:2,r:"page",p:[4,37,209]}]},f:[{p:[4,47,219],t:7,e:"input",a:{value:[{t:2,r:"pageselect",p:[4,60,232]}],placeholder:"1","class":"number"}}," Select Page: ",{p:[5,14,294],t:7,e:"ui-button",a:{action:"page",params:['{"num" : "',{t:2,r:"pageselect",p:[5,57,337]},'"}']},f:["[Go]"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],450:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"span",a:{"class":"bad"},f:["Settings"]},{p:[1,34,33],t:7,e:"br"},{p:[1,39,38],t:7,e:"br"}," ",{p:[2,1,45],t:7,e:"ui-button",a:{action:"Resync"},f:["RESYNC MACHINERY"]},{p:[2,56,100],t:7,e:"br"}," ",{p:[3,1,107],t:7,e:"ui-button",a:{action:"Lock"},f:["LOCK"]}," ",{p:[4,1,150],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "destroy"}',state:[{t:2,x:{r:["data.destroy_linked"],s:'_0?null:"disabled"'},p:[4,71,220]}]},f:["Disconnect Destructive Analyzer"]}," ",{p:[5,1,309],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "lathe"}',state:[{t:2,x:{r:["data.protolathe_linked"],s:'_0?null:"disabled"'},p:[5,69,377]}]},f:["Disconnect Protolathe"]}," ",{p:[6,1,459],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "imprinter"}',state:[{t:2,x:{r:["data.circuit_linked"],s:'_0?null:"disabled"'},p:[6,73,531]}]},f:["Disconnect Circuit Imprinter"]}]},e.exports=a.extend(r.exports)},{341:341}],451:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Available for Research"},f:[{t:4,f:[{p:[3,3,78],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[3,51,126]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[3,68,143]}]},f:[{t:2,r:"display_name",p:[3,113,188]}]}],n:52,r:"data.techweb_avail",p:[2,2,46]}]}," ",{p:[6,1,245],t:7,e:"ui-display",a:{title:"Locked Nodes"},f:[{t:4,f:[{p:[8,3,314],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[8,51,362]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[8,68,379]}]},f:[{t:2,r:"display_name",p:[8,113,424]}]}],n:52,r:"data.techweb_locked",p:[7,2,281]}]}," ",{p:[11,1,482],t:7,e:"ui-display",a:{title:"Researched Nodes"},f:[{t:4,f:[{p:[13,3,559],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[13,51,607]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[13,68,624]}]},f:[{t:2,r:"display_name",p:[13,113,669]}]}],n:52,r:"data.techweb_researched",p:[12,2,522]}]}]},e.exports=a.extend(r.exports)},{341:341}],452:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,25],t:7,e:"ui-notice",f:[{p:[3,3,40],t:7,e:"span",f:["The grinder is currently processing and cannot be used."]}]}],n:50,r:"data.processing",p:[1,1,0]},{p:{button:[{p:[8,5,208],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[8,36,239]}],action:"eject"},f:["Eject Contents"]}]},t:7,e:"ui-display",a:{title:"Processing Chamber",button:0},f:[" ",{p:[10,3,364],t:7,e:"ui-section",a:{label:"Grinding"},f:[{p:[11,5,399],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.operating"],s:'_0?"average":"good"'},p:[11,18,412]}]},f:[{t:2,x:{r:["data.operating"],s:'_0?"Busy":"Ready"'},p:[11,59,453]}]}," ",{p:[12,2,500],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[12,35,533]}],action:"grind"},f:["Activate"]}]}," ",{p:[14,3,653],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[17,9,755],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:["The ",{t:2,r:"name",p:[17,56,802]}]},{p:[17,71,817],t:7,e:"br"}],n:52,r:"adata.contentslist",p:[16,7,717]},{t:4,n:51,f:[{p:[19,9,848],t:7,e:"span",f:["No Contents"]}],r:"adata.contentslist"}],n:50,r:"data.contents",p:[15,5,688]},{t:4,n:51,f:[{p:[22,7,911],t:7,e:"span",f:["No Contents"]}],r:"data.contents"}]}]}," ",{p:{button:[{p:[28,5,1047],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.isBeakerLoaded"],s:'(_0==0)&&_1?null:"disabled"'},p:[28,36,1078]}],action:"detach"},f:["Detach"]}]},t:7,e:"ui-display",a:{title:"Container",button:0},f:[" ",{p:[30,3,1202],t:7,e:"ui-section",a:{label:"Reagents"},f:[{t:4,f:[{p:[32,7,1272],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[32,13,1278]},"/",{t:2,r:"data.beakerMaxVolume",p:[32,55,1320]}," Units"]}," ",{p:[33,7,1365],t:7,e:"br"}," ",{t:4,f:[{p:[35,9,1418],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[35,52,1461]}," units of ",{t:2,r:"name",p:[35,87,1496]}]},{p:[35,102,1511],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[34,7,1378]},{t:4,n:51,f:[{p:[37,9,1542],t:7,e:"span",a:{"class":"bad"},f:["Container Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[31,5,1237]},{t:4,n:51,f:[{p:[40,7,1621],t:7,e:"span",a:{"class":"average"},f:["No Container"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],453:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,64],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,105],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,123]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,195]},', "flipped": ',{t:2,r:"flipped",p:[6,42,215]},"}"]},f:[{p:[6,56,229],t:7,e:"span",a:{"class":["pipes32x32 ",{t:2,r:"dir",p:[6,80,253]},"-",{t:2,r:"icon_state",p:[6,88,261]}],title:[{t:2,r:"dir_name",p:[6,111,284]}]}}]}],n:52,r:"previews",p:[4,4,81]}]}],n:52,r:"data.preview_rows",p:[2,2,33]}]}," ",{t:4,f:[{p:[12,2,406],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[14,4,468],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["@key","data.selected_color"],s:'_0==_1?"selected":null'},p:[14,22,486]}],action:"color",params:['{"paint_color": ',{t:2,r:"@key",p:[15,44,583]},"}"]},f:[{t:2,r:"@key",p:[15,55,594]}]}],n:52,r:"data.paint_colors",p:[13,3,436]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[11,1,377]},{p:[19,1,654],t:7,e:"ui-display",a:{title:"Utilities"},f:[{p:[20,2,687],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&1?"check-square-o":"square-o"'},p:[20,19,704]}],action:"mode",params:'{"mode": 1}'},f:["Build"]}," ",{p:[22,2,813],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&2?"check-square-o":"square-o"'},p:[22,19,830]}],action:"mode",params:'{"mode": 2}'},f:["Wrench"]}," ",{p:[24,2,940],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&4?"check-square-o":"square-o"'},p:[24,19,957]}],action:"mode",params:'{"mode": 4}'},f:["Destroy"]}," ",{t:4,f:[{p:[27,3,1098],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&8?"check-square-o":"square-o"'},p:[27,20,1115]}],action:"mode",params:'{"mode": 8}'},f:["Paint"]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[26,2,1068]}]}," ",{p:[31,1,1249],t:7,e:"ui-display",a:{title:"Category"},f:[{p:[32,2,1281],t:7,e:"ui-section",f:[{p:[33,3,1297],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==0?"check-square-o":"square-o"'},p:[33,20,1314]}],state:[{t:2,x:{r:["data.category"],s:'_0<=0?"selected":null'},p:[33,83,1377]}],action:"category",params:'{"category": 0}'},f:["Atmospherics"]}," ",{p:[35,3,1496],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==1?"check-square-o":"square-o"'},p:[35,20,1513]}],state:[{t:2,x:{r:["data.category"],s:'_0==1?"selected":null'},p:[35,83,1576]}],action:"category",params:'{"category": 1}'},f:["Disposals"]}," ",{p:[37,3,1692],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==2?"check-square-o":"square-o"'},p:[37,20,1709]}],state:[{t:2,x:{r:["data.category"],s:'_0==2?"selected":null'},p:[37,83,1772]}],action:"category",params:'{"category": 2}'},f:["Transit Tubes"]}]}," ",{t:4,f:[{p:[41,3,1937],t:7,e:"ui-section",a:{label:"Piping Layer"},f:[{p:[42,4,1975],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==1?"selected":null'},p:[42,22,1993]}],action:"piping_layer",params:'{"piping_layer": 1}'},f:["1"]}," ",{p:[44,4,2115],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==2?"selected":null'},p:[44,22,2133]}],action:"piping_layer",params:'{"piping_layer": 2}'},f:["2"]}," ",{p:[46,4,2255],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==3?"selected":null'},p:[46,22,2273]}],action:"piping_layer",params:'{"piping_layer": 3}'},f:["3"]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[40,2,1907]}]}," ",{t:4,f:[{p:[52,2,2462],t:7,e:"ui-display",a:{title:[{t:2,r:"cat_name",p:[52,21,2481]}]},f:[{t:4,f:[{p:[54,4,2521],t:7,e:"ui-section",f:[{p:[55,5,2539],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[55,23,2557]}],action:"pipe_type",params:['{"pipe_type": ',{t:2,r:"pipe_index",p:[56,28,2638]},', "category": ',{t:2,r:"cat_name",p:[56,56,2666]},"}"]},f:[{t:2,r:"pipe_name",p:[56,71,2681]}]}]}],n:52,r:"recipes",p:[53,3,2499]}]}],n:52,r:"data.categories",p:[51,1,2434]}]},e.exports=a.extend(r.exports)},{341:341}],454:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[3,3,60],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[3,21,78]}],action:"color",params:['{"paint_color": ',{t:2,r:"color_name",p:[4,28,155]},"}"]},f:[{t:2,r:"color_name",p:[4,45,172]}]}],n:52,r:"data.paint_colors",p:[2,2,29]}]}]},e.exports=a.extend(r.exports)},{341:341}],455:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,64],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,105],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,123]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,195]},', "flipped": ',{t:2,r:"flipped",p:[6,42,215]},"}"]},f:[{p:[6,56,229],t:7,e:"img",a:{src:["pipe.",{t:2,r:"dir",p:[6,71,244]},".",{t:2,r:"icon_state",p:[6,79,252]},".png"],title:[{t:2,r:"dir_name",p:[6,106,279]}]}}]}],n:52,r:"previews",p:[4,4,81]}]}],n:52,r:"data.preview_rows",p:[2,2,33]}]}]},e.exports=a.extend(r.exports)},{341:341}],456:[function(t,e,n){var a=t(341),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)},{341:341}],457:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,26],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[2,20,43]}],style:[{t:2,x:{r:["enabled"],s:'_0?"selected":null'},p:[2,72,95]}],action:"toggle_filter",params:['{"id_tag": "',{t:2,r:"id_tag",p:[3,48,176]},'", "val": ',{t:2,r:"gas_id",p:[3,68,196]},"}"]},f:[{t:2,r:"gas_name",p:[3,81,209]}]}],n:52,r:"filter_types",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],458:[function(t,e,n){var a=t(341),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(459),templates:t(461),status:t(460)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,459:459,460:460,461:461}],459:[function(t,e,n){var a=t(341),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)},{341:341}],460:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"table",a:{width:"100%"},f:[{t:4,f:[{p:[3,3,49],t:7,e:"tr",f:[{p:[4,5,59],t:7,e:"td",f:[{p:[5,7,71],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"id",p:[5,69,133]},'"}']},f:["JMP"]}]}," ",{p:[9,5,193],t:7,e:"td",f:[{p:[10,7,205],t:7,e:"ui-button",a:{action:"fly",params:['{"id": "',{t:2,r:"id",p:[10,47,245]},'"}'],state:[{t:2,x:{r:["can_fly"],s:'_0?null:"disabled"'},p:[10,64,262]}]},f:["Fly"]}]}," ",{p:[14,5,345],t:7,e:"td",f:[{t:2,r:"name",p:[15,7,357]}," (",{p:[15,17,367],t:7,e:"code",f:[{t:2,r:"id",p:[15,23,373]}]},")"]}," ",{p:[17,5,404],t:7,e:"td",f:[{t:2,r:"status",p:[18,7,416]}]}," ",{p:[20,5,443],t:7,e:"td",f:[{t:4,f:[{t:2,r:"mode",p:[22,9,477]}],n:50,r:"mode",p:[21,7,455]}," ",{t:4,f:["(",{t:2,r:"timeleft",p:[25,10,532]},") ",{p:[26,9,555],t:7,e:"ui-button",a:{action:"fast_travel",params:['{"id": "',{t:2,r:"id",p:[26,57,603]},'"}'],state:[{t:2,x:{r:["can_fast_travel"],s:'_0?null:"disabled"'},p:[26,74,620]}]},f:["Fast Travel"]}],n:50,r:"timer",p:[24,7,508]}]}]}],n:52,r:"data.shuttles",p:[2,1,22]}]}]},e.exports=a.extend(r.exports)},{341:341}],461:[function(t,e,n){var a=t(341),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)},{341:341}],462:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,33],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,66],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,72]}]}]}," ",{t:4,f:[{p:[6,5,186],t:7,e:"ui-section",a:{label:"State"},f:[{p:[7,7,220],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[7,20,233]}]},f:[{t:2,r:"data.occupant.stat",p:[7,49,262]}]}]}," ",{p:[9,5,315],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[10,7,350],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[10,20,363]}],max:[{t:2,r:"data.occupant.maxHealth",p:[10,54,397]}],value:[{t:2,r:"data.occupant.health",p:[10,90,433]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[11,16,475]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[11,68,527]}]}]}," ",{t:4,f:[{p:[14,7,764],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[14,26,783]}]},f:[{p:[15,9,804],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[15,30,825]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[15,66,861]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[15,103,898]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[13,5,598]}," ",{t:4,f:[{p:[19,7,1020],t:7,e:"ui-section",a:{label:"Blood"},f:[{p:[20,9,1056],t:7,e:"ui-section",a:{label:"Volume"},f:[{p:[21,11,1095],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.blood.maxBloodVolume",p:[21,32,1116]}],value:[{t:2,r:"data.occupant.blood.currentBloodVolume",p:[21,79,1163]}],state:[{t:2,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"bad":"good"'},p:[21,130,1214]}]},f:[{t:3,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"LOW":"OK"'},p:[21,232,1316]}," - ",{t:2,x:{r:["data.occupant.blood.currentBloodVolume"],s:"Math.round(_0)"},p:[21,342,1426]}," cl"]}]}," ",{p:[23,9,1525],t:7,e:"ui-section",a:{label:"Type"},f:[{p:[24,11,1562],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:"data.occupant.blood.bloodType",p:[24,35,1586]}]}]}]}],n:50,r:"data.occupant.blood",p:[18,5,985]}," ",{p:[28,5,1689],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[29,9,1725],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[29,22,1738]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[29,68,1784]}]}]}," ",{p:[31,5,1867],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[32,9,1903],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[32,22,1916]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[32,68,1962]}]}]}," ",{t:4,f:[{p:[35,3,2083],t:7,e:"ui-section",a:{label:"Failing Organs"},f:[{t:4,f:[{p:[37,5,2167],t:7,e:"span",a:{"class":"bad"},f:[{t:2,r:"name",p:[37,23,2185]}]}],n:52,r:"data.occupant.failing_organs",p:[36,4,2123]}]}],n:50,r:"data.occupant.failing_organs",p:[34,2,2043] +}," ",{p:[41,5,2248],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[43,11,2335],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[43,54,2378]}," units of ",{t:2,r:"name",p:[43,89,2413]}]},{p:[43,104,2428],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[42,9,2290]},{t:4,n:51,f:[{p:[45,11,2463],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[5,3,159]}]}," ",{p:[50,1,2559],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[51,2,2591],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[52,5,2622],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[52,22,2639]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[52,71,2688]}]}]}," ",{p:[55,3,2755],t:7,e:"ui-section",a:{label:"Synthesize"},f:[{t:4,f:[{p:[57,7,2825],t:7,e:"ui-button",a:{grid:0,state:[{t:2,x:{r:["synth_allowed"],s:'_0?null:"disabled"'},p:[57,30,2848]}],action:"synth",params:['{"chem": "',{t:2,r:"id",p:[57,102,2920]},'"}']},f:[{t:2,r:"name",p:[57,112,2930]}]}],n:52,r:"data.synthchems",p:[56,5,2792]}]}," ",{p:[61,3,2988],t:7,e:"ui-section",a:{label:"Inject"},f:[{p:[62,2,3018],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[63,3,3051],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[64,4,3085],t:7,e:"section",a:{"class":"compressedcell"},f:["Name"]}," ",{p:[68,4,3149],t:7,e:"section",a:{"class":"compressedcell"},f:["Volume"]}," ",{t:4,f:[{p:[73,5,3249],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[74,6,3288],t:7,e:"span",f:["Purity"]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=4"},p:[72,4,3215]}," ",{t:4,f:[{p:[79,5,3376],t:7,e:"section",a:{"class":"compressedcell"},f:[]}],n:50,x:{r:["data.efficiency"],s:"_0>=3"},p:[78,4,3342]}," ",{t:4,f:[{p:[84,5,3477],t:7,e:"section",a:{"class":"compressedcell"},f:[]}],n:50,x:{r:["data.efficiency"],s:"_0>=2"},p:[83,4,3443]}," ",{p:[88,4,3544],t:7,e:"section",a:{"class":"compressedcell"},f:[]}," ",{p:[91,4,3598],t:7,e:"section",a:{"class":"compressedcell"},f:[]}]}," ",{t:4,f:[{p:[96,4,3690],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[97,5,3725],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[98,6,3764],t:7,e:"span",f:[{p:[98,12,3770],t:7,e:"b",f:[{t:2,r:"name",p:[98,15,3773]}]}]}]}," ",{p:[101,5,3816],t:7,e:"section",a:{"class":"compressedcell",align:"center"},f:[{p:[102,6,3870],t:7,e:"span",f:[{t:2,r:"vol",p:[102,12,3876]},"u"]}]}," ",{t:4,f:[{p:[106,6,3952],t:7,e:"section",a:{"class":"compressedcell",align:"center"},f:[{p:[107,7,4007],t:7,e:"span",f:[{t:2,r:"purity",p:[107,13,4013]}]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=4"},p:[105,7,3917]}," ",{t:4,f:[{p:[112,6,4105],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[113,7,4145],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[113,25,4163]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[113,109,4247]},'", "volume": 1}']},f:["1"]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=3"},p:[111,5,4070]}," ",{t:4,f:[{p:[118,6,4357],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[119,7,4397],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[119,25,4415]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[119,109,4499]},'", "volume": 5}']},f:["5"]}]}],n:50,x:{r:["adata.efficiency"],s:"_0>=2"},p:[117,5,4321]}," ",{p:[123,5,4573],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[124,6,4612],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[124,24,4630]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[124,108,4714]},'", "volume": 10}']},f:["10"]}]}," ",{p:[127,5,4776],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[128,6,4815],t:7,e:"ui-button",a:{action:"purge",params:['{"chem": "',{t:2,r:"id",p:[128,50,4859]},'"}']},f:["Purge"]},{p:[128,77,4886],t:7,e:"br"}]}]}],n:52,r:"data.chems",p:[95,3,3665]}]}]}," ",{p:[135,3,4967],t:7,e:"ui-section",a:{label:"Capacity"},f:[{p:[136,5,5002],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.tot_capacity",p:[136,24,5021]}],value:[{t:2,r:"data.current_vol",p:[136,54,5051]}],state:[{t:2,r:"data.current_vol",p:[137,12,5085]}]},f:[{t:2,r:"data.current_vol",p:[137,34,5107]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],463:[function(t,e,n){var a=t(341),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:4,f:["You Are Here"],n:50,x:{r:["occupied"],s:'_0=="owner"'},p:[10,7,491]},{t:4,n:51,f:[{t:4,f:["Occupied"],n:50,x:{r:["occupied"],s:'_0=="stranger"'},p:[13,9,566]},{t:4,n:51,f:["Swap"],x:{r:["occupied"],s:'_0=="stranger"'}}],x:{r:["occupied"],s:'_0=="owner"'}}]}]}],n:52,r:"data.bodies",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],464:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,23,82],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.drying"],s:'_0?"stop":"tint"'},p:[4,40,99]}],action:"Dry"},f:[{t:2,x:{r:["data.drying"],s:'_0?"Stop drying":"Dry"'},p:[4,88,147]}]}],n:50,r:"data.isdryer",p:[4,3,62]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[7,3,258],t:7,e:"ui-notice",f:[{p:[8,5,275],t:7,e:"span",f:["Unfortunately, this ",{t:2,r:"data.name",p:[8,31,301]}," is empty."]}]}],n:50,x:{r:["data.contents.length"],s:"_0==0"},p:[6,1,221]},{t:4,n:51,f:[{p:[11,1,359],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[12,2,391],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[13,4,425],t:7,e:"section",a:{"class":"cell bold"},f:["Item"]}," ",{p:[16,4,482],t:7,e:"section",a:{"class":"cell bold"},f:["Quantity"]}," ",{p:[19,4,543],t:7,e:"section",a:{"class":"cell bold",align:"center"},f:[{t:4,f:[{t:2,r:"data.verb",p:[20,22,608]}],n:50,r:"data.verb",p:[20,5,591]},{t:4,n:51,f:["Dispense"],r:"data.verb"}]}]}," ",{t:4,f:[{p:[24,3,703],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[25,4,737],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[26,5,765]}]}," ",{p:[28,4,793],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[29,5,835]}]}," ",{p:[31,4,865],t:7,e:"section",a:{"class":"table",alight:"right"},f:[{p:[32,5,909],t:7,e:"section",a:{"class":"cell"}}," ",{p:[33,5,947],t:7,e:"section",a:{"class":"cell"},f:[{p:[34,6,976],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[34,45,1015]}],params:['{ "name" : ',{t:2,r:"name",p:[34,102,1072]},', "amount" : 1 }']},f:["One"]}]}," ",{p:[38,5,1151],t:7,e:"section",a:{"class":"cell"},f:[{p:[39,6,1180],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>1)?null:"disabled"'},p:[39,45,1219]}],params:['{ "name" : ',{t:2,r:"name",p:[39,101,1275]}," }"]},f:["Many"]}]}]}]}],n:52,r:"data.contents",p:[23,2,676]}]}],x:{r:["data.contents.length"],s:"_0==0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],465:[function(t,e,n){var a=t(341),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,r:"adata.inputLevel_text",p:[37,78,1447]}]}]}," ",{p:[39,3,1501],t:7,e:"ui-section",a:{label:"Adjust Input"},f:[{p:[40,5,1540],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[40,44,1579]}],action:"input",params:'{"target": "min"}'}}," ",{p:[41,5,1674],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[41,39,1708]}],action:"input",params:'{"adjust": -10000}'}}," ",{p:[42,5,1804],t:7,e:"ui-button",a:{icon:"pencil",action:"input",params:'{"target": "input"}'},f:["Set"]}," ",{p:[43,5,1894],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,1927]}],action:"input",params:'{"adjust": 10000}'}}," ",{p:[44,5,2039],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,2077]}],action:"input",params:'{"target": "max"}'}}]}," ",{p:[46,3,2204],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[47,3,2238],t:7,e:"span",f:[{t:2,r:"adata.inputAvailable",p:[47,9,2244]}]}]}]}," ",{p:[50,1,2308],t:7,e:"ui-display",a:{title:"Output"},f:[{p:[51,3,2339],t:7,e:"ui-section",a:{label:"Output Mode"},f:[{p:[52,5,2377],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"power-off":"close"'},p:[52,22,2394]}],style:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"selected":null'},p:[52,77,2449]}],action:"tryoutput"},f:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"On":"Off"'},p:[53,26,2519]}]},"   [",{p:[55,6,2587],t:7,e:"span",a:{"class":[{t:2,r:"outputState",p:[55,19,2600]}]},f:[{t:2,x:{r:["data.outputting","data.charge"],s:'_0?"Sending":_1>0?"Not Sending":"No Charge"'},p:[55,36,2617]}]},"]"]}," ",{p:[57,3,2724],t:7,e:"ui-section",a:{label:"Target Output"},f:[{p:[58,5,2764],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.outputLevelMax",p:[58,26,2785]}],value:[{t:2,r:"data.outputLevel",p:[58,58,2817]}]},f:[{t:2,r:"adata.outputLevel_text",p:[58,80,2839]}]}]}," ",{p:[60,3,2894],t:7,e:"ui-section",a:{label:"Adjust Output"},f:[{p:[61,5,2934],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[61,44,2973]}],action:"output",params:'{"target": "min"}'}}," ",{p:[62,5,3070],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[62,39,3104]}],action:"output",params:'{"adjust": -10000}'}}," ",{p:[63,5,3202],t:7,e:"ui-button",a:{icon:"pencil",action:"output",params:'{"target": "input"}'},f:["Set"]}," ",{p:[64,5,3293],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,3326]}],action:"output",params:'{"adjust": 10000}'}}," ",{p:[65,5,3441],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,3479]}],action:"output",params:'{"target": "max"}'}}]}," ",{p:[67,3,3609],t:7,e:"ui-section",a:{label:"Outputting"},f:[{p:[68,3,3644],t:7,e:"span",f:[{t:2,r:"adata.outputUsed",p:[68,9,3650]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],466:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:["\ufeff",{t:4,f:[" ",{p:[2,2,33],t:7,e:"ui-display",a:{title:"Dispersal Tank"},f:[{p:[3,3,73],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[4,4,104],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.active"],s:'_0?"power-off":"close"'},p:[4,21,121]}],style:[{t:2,x:{r:["data.active"],s:'_0?"selected":null'},p:[5,12,174]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[6,12,223]}],action:"power"},f:[{t:2,x:{r:["data.active"],s:'_0?"On":"Off"'},p:[7,20,286]}]}]}," ",{p:[10,3,354],t:7,e:"ui-section",a:{label:"Smoke Radius Setting"},f:[{p:[11,5,401],t:7,e:"div",a:{"class":"content",style:"float:left"},f:[{p:[12,6,448],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=1?null:"disabled"'},p:[12,36,478]}],style:[{t:2,x:{r:["data.setting"],s:'_0==1?"selected":null'},p:[12,89,531]}],action:"setting",params:'{"amount": 1}'},f:["3"]}," ",{p:[13,6,634],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=2?null:"disabled"'},p:[13,36,664]}],style:[{t:2,x:{r:["data.setting"],s:'_0==2?"selected":null'},p:[13,89,717]}],action:"setting",params:'{"amount": 2}'},f:["6"]}," ",{p:[14,6,820],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=3?null:"disabled"'},p:[14,36,850]}],style:[{t:2,x:{r:["data.setting"],s:'_0==3?"selected":null'},p:[14,89,903]}],action:"setting",params:'{"amount": 3}'},f:["9"]}," ",{p:[15,6,1006],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=4?null:"disabled"'},p:[15,36,1036]}],style:[{t:2,x:{r:["data.setting"],s:'_0==4?"selected":null'},p:[15,89,1089]}],action:"setting",params:'{"amount": 4}'},f:["12"]}," ",{p:[16,6,1193],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=5?null:"disabled"'},p:[16,36,1223]}],style:[{t:2,x:{r:["data.setting"],s:'_0==5?"selected":null'},p:[16,89,1276]}],action:"setting",params:'{"amount": 5}'},f:["15"]}]}]}," ",{p:[19,3,1410],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[21,6,1476],t:7,e:"span",f:[{t:2,x:{r:["adata.TankCurrentVolume"],s:"Math.round(_0)"},p:[21,12,1482]},"/",{t:2,r:"data.TankMaxVolume",p:[21,52,1522]}," Units"]}," ",{p:[22,6,1564],t:7,e:"br"}," ",{p:[23,5,1575],t:7,e:"br"}," ",{t:4,f:[{p:[25,7,1623],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[25,50,1666]}," units of ",{t:2,r:"name",p:[25,85,1701]}]},{p:[25,100,1716],t:7,e:"br"}],n:52,r:"adata.TankContents",p:[24,6,1587]}],n:50,r:"data.isTankLoaded",p:[20,4,1444]},{t:4,n:51,f:[{p:[28,6,1757],t:7,e:"span",a:{"class":"bad"},f:["Tank Empty"]}],r:"data.isTankLoaded"}," ",{p:[30,4,1809],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Eject":"Close"'},p:[30,21,1826]}],style:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"selected":null'},p:[31,12,1881]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[32,12,1936]}],action:"purge"},f:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Purge Contents":"No chemicals detected"'},p:[33,20,1999]}]}]}]}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,2,1]}]},e.exports=a.extend(r.exports)},{341:341}],467:[function(t,e,n){var a=t(341),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)},{341:341}],468:[function(t,e,n){var a=t(341),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)},{341:341}],469:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,8,97],t:7,e:"ui-button",a:{action:"jump",params:['{"name" : ',{t:2,r:"name",p:[4,51,140]},"}"]},f:["Jump"]}," ",{p:[7,9,195],t:7,e:"ui-button",a:{action:"spawn",params:['{"name" : ',{t:2,r:"name",p:[7,53,239]},"}"]},f:["Spawn"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[2,22,46]}],button:0},f:[" ",{p:[11,3,308],t:7,e:"ui-section",a:{label:"Description"},f:[{p:[12,5,346],t:7,e:"span",f:[{t:3,r:"desc",p:[12,11,352]}]}]}," ",{p:[14,3,390],t:7,e:"ui-section",a:{label:"Spawners left"},f:[{p:[15,5,430],t:7,e:"span",f:[{t:2,r:"amount_left",p:[15,11,436]}]}]}]}],n:52,r:"data.spawners",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],470:[function(t,e,n){var a=t(341),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)},{341:341}],471:[function(t,e,n){var a=t(341),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)},{341:341}],472:[function(t,e,n){var a=t(341),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)},{341:341}],473:[function(t,e,n){var a=t(341),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)},{341:341}],474:[function(t,e,n){var a=t(341),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)},{341:341}],475:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 1:return"good";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,173],t:7,e:"ui-notice",f:[{p:[14,2,187],t:7,e:"ui-section",a:{label:"Reconnect"},f:[{p:[15,3,221],t:7,e:"div",a:{style:"float:right"},f:[{p:[16,4,251],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]}]}]}," ",{p:[20,1,359],t:7,e:"ui-display",a:{title:"Turbine Controller"},f:[{p:[21,2,401],t:7,e:"ui-section",a:{label:"Status"},f:[{t:4,f:[{p:[23,4,456],t:7,e:"span",a:{"class":"bad"},f:["Broken"]}],n:50,r:"data.broken",p:[22,3,432]},{t:4,n:51,f:[{p:[25,4,504],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.online"],s:"_0(_1)"},p:[25,17,517]}]},f:[{t:2,x:{r:["data.online","data.compressor_broke","data.turbine_broke"],s:'_0&&!(_1||_2)?"Online":"Offline"'},p:[25,46,546]}]}],r:"data.broken" +}," ",{p:[27,3,656],t:7,e:"div",a:{style:"float:right"},f:[{p:[28,4,686],t:7,e:"ui-button",a:{icon:"power-off",action:"power-on",state:[{t:2,r:"data.broken",p:[28,57,739]}],style:[{t:2,x:{r:["data.online"],s:'_0?"selected":""'},p:[28,81,763]}]},f:["On"]}," ",{p:[29,4,817],t:7,e:"ui-button",a:{icon:"close",action:"power-off",state:[{t:2,r:"data.broken",p:[29,54,867]}],style:[{t:2,x:{r:["data.online"],s:'_0?"":"selected"'},p:[29,78,891]}]},f:["Off"]}]}," ",{t:4,f:[{p:[32,4,989],t:7,e:"br"}," [ ",{p:[33,6,1e3],t:7,e:"span",a:{"class":"bad"},f:["Compressor is inoperable"]}," ]"],n:50,r:"data.compressor_broke",p:[31,3,955]}," ",{t:4,f:[{p:[36,4,1097],t:7,e:"br"}," [ ",{p:[37,6,1108],t:7,e:"span",a:{"class":"bad"},f:["Turbine is inoperable"]}," ]"],n:50,r:"data.turbine_broke",p:[35,3,1066]}]}]}," ",{p:[41,1,1200],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[42,2,1230],t:7,e:"ui-section",a:{label:"Turbine Speed"},f:[{p:[43,3,1268],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.rpm"],s:'_0?"--":_1'},p:[43,9,1274]}," RPM"]}]}," ",{p:[45,2,1337],t:7,e:"ui-section",a:{label:"Internal Temp"},f:[{p:[46,3,1375],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.temp"],s:'_0?"--":_1'},p:[46,9,1381]}," K"]}]}," ",{p:[48,2,1443],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{p:[49,3,1483],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.power"],s:'_0?"--":_1'},p:[49,9,1489]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],476:[function(t,e,n){var a=t(341),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)},{341:341}],477:[function(t,e,n){var a=t(341),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,331],t:7,e:"ui-notice",f:[{p:[17,4,347],t:7,e:"span",f:["Safety restraints disabled."]}]}],n:50,r:"data.emagged",p:[15,2,307]}," ",{t:4,f:[{p:[21,3,442],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:[{p:[22,4,482],t:7,e:"ui-section",a:{label:"Name"},f:[{t:2,r:"data.vr_avatar.name",p:[23,5,513]}]}," ",{t:4,f:[{p:[26,5,586],t:7,e:"ui-section",a:{label:"Status"},f:[{t:2,r:"data.vr_avatar.status",p:[27,6,620]}]}," ",{p:[29,5,670],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[30,6,704],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.vr_avatar.maxhealth",p:[30,27,725]}],value:[{t:2,r:"adata.vr_avatar.health",p:[30,65,763]}],state:[{t:2,x:{r:["healthState","adata.vr_avatar.health"],s:"_0(_1)"},p:[30,100,798]}]},f:[{t:2,x:{r:["adata.vr_avatar.health"],s:"Math.round(_0)"},p:[30,141,839]},"/",{t:2,r:"adata.vr_avatar.maxhealth",p:[30,180,878]}]}]}],n:50,r:"data.isliving",p:[25,4,559]}]}],n:50,r:"data.vr_avatar",p:[20,2,416]},{t:4,n:51,f:[{p:[35,3,979],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:["No Virtual Avatar detected"]}],r:"data.vr_avatar"}," ",{p:[39,2,1075],t:7,e:"ui-display",a:{title:"VR Commands"},f:[{p:[40,3,1111],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.toggle_open"],s:'_0?"times":"plus"'},p:[40,20,1128]}],action:"toggle_open"},f:[{t:2,x:{r:["data.toggle_open"],s:'_0?"Close":"Open"'},p:[41,4,1195]}," the VR Sleeper"]}," ",{t:4,f:[{p:[44,4,1297],t:7,e:"ui-button",a:{icon:"signal",action:"vr_connect"},f:["Connect to VR"]}],n:50,r:"data.isoccupant",p:[43,3,1269]}," ",{t:4,f:[{p:[49,4,1420],t:7,e:"ui-button",a:{icon:"ban",action:"delete_avatar"},f:["Delete Virtual Avatar"]}],n:50,r:"data.vr_avatar",p:[48,3,1393]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],478:[function(t,e,n){var a=t(341),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)},{341:341}],479:[function(t,e,n){(function(e){"use strict";var n=t(341),a=e.interopRequireDefault(n);t(331),t(1),t(327),t(330);var r=t(480),i=e.interopRequireDefault(r),o=t(481),s=t(328),p=t(329),u=e.interopRequireDefault(p);a["default"].DEBUG=/minified/.test(function(){}),Object.assign(Math,t(485)),window.initialize=function(e){window.tgui=window.tgui||new i["default"]({el:"#container",data:function(){var n=JSON.parse(e);return{constants:t(482),text:t(486),config:n.config,data:n.data,adata:n.data}}})};var c=document.getElementById("data"),l=c.textContent,d=c.getAttribute("data-ref");"{}"!==l&&(window.initialize(l),c.remove()),(0,o.act)(d,"tgui:initialize"),(0,s.loadCSS)("font-awesome.min.css");var f=new u["default"]("FontAwesome");f.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,327:327,328:328,329:329,330:330,331:331,341:341,480:480,481:481,482:482,485:485,486:486,"babel/external-helpers":"babel/external-helpers"}],480:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(483);e.exports={components:{"ui-bar":t(342),"ui-button":t(343),"ui-display":t(344),"ui-input":t(345),"ui-linegraph":t(346),"ui-notice":t(347),"ui-section":t(349),"ui-subdisplay":t(350),"ui-tabs":t(351)},events:{enter:t(339).enter,space:t(339).space},transitions:{fade:t(340)},onconfig:function(){var e=this.get("config.interface"),n={ai_airlock:t(355),airalarm:t(356),"airalarm/back":t(357),"airalarm/modes":t(358),"airalarm/scrubbers":t(359),"airalarm/status":t(360),"airalarm/thresholds":t(361),"airalarm/vents":t(362),airlock_electronics:t(363),apc:t(364),atmos_alert:t(365),atmos_control:t(366),atmos_filter:t(367),atmos_mixer:t(368),atmos_pump:t(369),borgopanel:t(370),brig_timer:t(371),bsa:t(372),canister:t(373),cargo:t(374),cargo_express:t(375),cellular_emporium:t(376),centcom_podlauncher:t(377),chem_dispenser:t(378),chem_heater:t(379),chem_master:t(380),chem_synthesizer:t(381),clockwork_slab:t(382),codex_gigas:t(383),computer_fabricator:t(384),crayon:t(385),crew:t(386),cryo:t(387),disposal_unit:t(388),dna_vault:t(389),dogborg_sleeper:t(390),eightball:t(391),emergency_shuttle_console:t(392),engraved_message:t(393),error:t(394),"exofab - Copia":t(395),exonet_node:t(396),firealarm:t(397),gps:t(398),gulag_console:t(399),gulag_item_reclaimer:t(400),holodeck:t(401),implantchair:t(402),intellicard:t(403),keycard_auth:t(404),labor_claim_console:t(405),language_menu:t(406),launchpad_remote:t(407),mech_bay_power_console:t(408),mulebot:t(409),nanite_chamber_control:t(410),nanite_cloud_control:t(411),nanite_program_hub:t(412),nanite_programmer:t(413),nanite_remote:t(414),notificationpanel:t(415),ntnet_relay:t(416),ntos_ai_restorer:t(417),ntos_card:t(418),ntos_configuration:t(419),ntos_file_manager:t(420),ntos_main:t(421),ntos_net_chat:t(422),ntos_net_dos:t(423),ntos_net_downloader:t(424),ntos_net_monitor:t(425),ntos_net_transfer:t(426),ntos_power_monitor:t(427),ntos_revelation:t(428),ntos_station_alert:t(429),ntos_supermatter_monitor:t(430),ntosheader:t(431),nuclear_bomb:t(432),operating_computer:t(433),ore_redemption_machine:t(434),pandemic:t(435),personal_crafting:t(436),portable_pump:t(437),portable_scrubber:t(438),power_monitor:t(439),radio:t(440),rdconsole:t(441),"rdconsole/circuit":t(442),"rdconsole/designview":t(443),"rdconsole/destruct":t(444),"rdconsole/diskopsdesign":t(445),"rdconsole/diskopstech":t(446),"rdconsole/nodeview":t(447),"rdconsole/protolathe":t(448),"rdconsole/rdheader":t(449),"rdconsole/settings":t(450),"rdconsole/techweb":t(451),reagentgrinder:t(452),rpd:t(453),"rpd/colorsel":t(454),"rpd/dirsel":t(455),sat_control:t(456),scrubbing_types:t(457),shuttle_manipulator:t(458),"shuttle_manipulator/modification":t(459),"shuttle_manipulator/status":t(460),"shuttle_manipulator/templates":t(461),sleeper:t(462),slime_swap_body:t(463),smartvend:t(464),smes:t(465),smoke_machine:t(466),solar_control:t(467),space_heater:t(468),spawners_menu:t(469),station_alert:t(470),suit_storage_unit:t(471),tank_dispenser:t(472),tanks:t(473),thermomachine:t(474),turbine_computer:t(475),uplink:t(476),vr_sleeper:t(477),wires:t(478)};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(354),titlebar:t(353),resize:t(348)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{339:339,340:340,341:341,342:342,343:343,344:344,345:345,346:346,347:347,348:348,349:349,350:350,351:351,353:353,354:354,355:355,356:356,357:357,358:358,359:359,360:360,361:361,362:362,363:363,364:364,365:365,366:366,367:367,368:368,369:369,370:370,371:371,372:372,373:373,374:374,375:375,376:376,377:377,378:378,379:379,380:380,381:381,382:382,383:383,384:384,385:385,386:386,387:387,388:388,389:389,390:390,391:391,392:392,393:393,394:394,395:395,396:396,397:397,398:398,399:399,400:400,401:401,402:402,403:403,404:404,405:405,406:406,407:407,408:408,409:409,410:410,411:411,412:412,413:413,414:414,415:415,416:416,417:417,418:418,419:419,420:420,421:421,422:422,423:423,424:424,425:425,426:426,427:427,428:428,429:429,430:430,431:431,432:432,433:433,434:434,435:435,436:436,437:437,438:438,439:439,440:440,441:441,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451,452:452,453:453,454:454,455:455,456:456,457:457,458:458,459:459,460:460,461:461,462:462,463:463,464:464,465:465,466:466,467:467,468:468,469:469,470:470,471:471,472:472,473:473,474:474,475:475,476:476,477:477,478:478,481:481,483:483}],481:[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},{}],482:[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},{}],483:[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(481)},{481:481}],484:[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 p=s;a||p.textContent.toLowerCase().includes(e)?p.style.display="":p.style.display="none"}}n.__esModule=!0,n.filterMulti=a,n.filter=r},{}],485:[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},{}],486:[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 p=Array(o),u=0;o>u;u++)p[u]=arguments[u+3];n.children=p}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(p){r("throw",p)}}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(p){return void n(p)}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(p){r=!0,i=p}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 {{data.occupant.brainLoss ? "Abnormal" : "Healthy"}} + {{#if data.occupant.failing_organs}} + + {{#each data.occupant.failing_organs}} + {{name}} + {{/each}} + + {{/if}} {{#each adata.occupant.reagents}} {{Math.fixed(volume, 1)}} units of {{name}}
    @@ -44,9 +51,89 @@ {{data.open ? "Open" : "Closed"}} - - {{#each data.chems}} - {{name}}
    + + + {{#each data.synthchems}} + {{name}} {{/each}} + + +
    +
    +
    + Name +
    + +
    + Volume +
    + + {{#if data.efficiency >= 4}} +
    + Purity +
    + {{/if}} + + {{#if data.efficiency >= 3}} +
    +
    + {{/if}} + + {{#if data.efficiency >= 2}} +
    +
    + {{/if}} + +
    +
    + +
    +
    + +
    + {{#each data.chems}} +
    +
    + {{name}} +
    + +
    + {{vol}}u +
    + + {{#if data.efficiency >= 4}} +
    + {{purity}} +
    + {{/if}} + + {{#if data.efficiency >= 3}} +
    + 1 +
    + {{/if}} + + {{#if adata.efficiency >= 2}} +
    + 5 +
    + {{/if}} + +
    + 10 +
    + +
    + Purge
    +
    + +
    + {{/each}} +
    +
    + + {{data.current_vol}} +