diff --git a/.travis.yml b/.travis.yml index 3095262290..35fec579bf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ sudo: false env: global: - BYOND_MAJOR="511" - - BYOND_MINOR="1380" + - BYOND_MINOR="1385" - NODE_VERSION="4" - BUILD_TOOLS=false - BUILD_TESTING=false diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 2a198947dc..833aaa62cb 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -116,17 +116,17 @@ #define R_MAXPERMISSION 4096 //This holds the maximum value for a permission. It is used in iteration, so keep it updated. -#define ADMIN_QUE(user) "(?)" -#define ADMIN_FLW(user) "(FLW)" -#define ADMIN_PP(user) "(PP)" -#define ADMIN_VV(atom) "(VV)" -#define ADMIN_SM(user) "(SM)" -#define ADMIN_TP(user) "(TP)" -#define ADMIN_KICK(user) "(KICK)" -#define ADMIN_CENTCOM_REPLY(user) "(RPLY)" -#define ADMIN_SYNDICATE_REPLY(user) "(RPLY)" -#define ADMIN_SC(user) "(SC)" -#define ADMIN_SMITE(user) "(SMITE)" +#define ADMIN_QUE(user) "(?)" +#define ADMIN_FLW(user) "(FLW)" +#define ADMIN_PP(user) "(PP)" +#define ADMIN_VV(atom) "(VV)" +#define ADMIN_SM(user) "(SM)" +#define ADMIN_TP(user) "(TP)" +#define ADMIN_KICK(user) "(KICK)" +#define ADMIN_CENTCOM_REPLY(user) "(RPLY)" +#define ADMIN_SYNDICATE_REPLY(user) "(RPLY)" +#define ADMIN_SC(user) "(SC)" +#define ADMIN_SMITE(user) "(SMITE)" #define ADMIN_LOOKUP(user) "[key_name_admin(user)][ADMIN_QUE(user)]" #define ADMIN_LOOKUPFLW(user) "[key_name_admin(user)][ADMIN_QUE(user)] [ADMIN_FLW(user)]" #define ADMIN_SET_SD_CODE "(SETCODE)" @@ -135,7 +135,7 @@ #define ADMIN_JMP(src) "(JMP)" #define COORD(src) "[src ? "([src.x],[src.y],[src.z])" : "nonexistent location"]" #define ADMIN_COORDJMP(src) "[src ? "[COORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" -#define ADMIN_INDIVIDUALLOG(user) "(LOGS)" +#define ADMIN_INDIVIDUALLOG(user) "(LOGS)" #define ADMIN_PUNISHMENT_LIGHTNING "Lightning bolt" #define ADMIN_PUNISHMENT_BRAINDAMAGE "Brain damage" diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 0fdfbaca1c..634cfb8cda 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -466,9 +466,12 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE //Dummy mob reserve slots #define DUMMY_HUMAN_SLOT_PREFERENCES "dummy_preference_preview" + #define DUMMY_HUMAN_SLOT_MANIFEST "dummy_manifest_generation" #define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round //This makes sure that a single person can only spam 3 reopens and 3 closes before being ignored -#define MAX_PROC_DEPTH 195 // 200 proc calls deep and shit breaks, this is a bit lower to give some safety room \ No newline at end of file +#define MAX_PROC_DEPTH 195 // 200 proc calls deep and shit breaks, this is a bit lower to give some safety room + +#define DUMMY_HUMAN_SLOT_MANIFEST "dummy_manifest_generation" diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 95d26de0ce..d30eb36132 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -37,9 +37,9 @@ #define EAVESDROP_EXTRA_RANGE 1 //how much past the specified message_range does the message get starred, whispering only // A link given to ghost alice to follow bob -#define FOLLOW_LINK(alice, bob) "(F)" -#define TURF_LINK(alice, turfy) "(T)" -#define FOLLOW_OR_TURF_LINK(alice, bob, turfy) "(F)" +#define FOLLOW_LINK(alice, bob) "(F)" +#define TURF_LINK(alice, turfy) "(T)" +#define FOLLOW_OR_TURF_LINK(alice, bob, turfy) "(F)" #define LOGSAY "say" #define LOGWHISPER "whisper" diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 554159ab22..eaa9c019ab 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -178,7 +178,7 @@ mob // Send the icon to src's local cache src<>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index d06c269d28..5df8ab5ee9 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -25,7 +25,7 @@ GLOBAL_LIST_EMPTY(bombers) GLOBAL_PROTECT(bombers) GLOBAL_LIST_EMPTY(admin_log) GLOBAL_PROTECT(admin_log) -GLOBAL_LIST_EMPTY(lastsignalers) //keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]" +GLOBAL_LIST_EMPTY(lastsignalers) //keeps last 100 signals here in format: "[src] used [REF(src)] @ location [src.loc]: [freq]/[code]" GLOBAL_PROTECT(lastsignalers) GLOBAL_LIST_EMPTY(lawchanges) //Stores who uploaded laws to which silicon-based lifeform, and what the law was GLOBAL_PROTECT(lawchanges) diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm index 5358073dbe..a18032a7e1 100644 --- a/code/controllers/configuration/config_entry.dm +++ b/code/controllers/configuration/config_entry.dm @@ -51,6 +51,14 @@ return FALSE return ..() +<<<<<<< HEAD +======= +/datum/config_entry/proc/VASProcCallGuard(str_val) + . = !(IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "ValidateAndSet" && GLOB.LastAdminCalledTargetRef == "[REF(src)]") + if(!.) + log_admin_private("Config set of [type] to [str_val] attempted by [key_name(usr)]") + +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental /datum/config_entry/proc/ValidateAndSet(str_val) CRASH("Invalid config entry type!") diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 278424ca79..70be8cfa0c 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -124,7 +124,7 @@ GLOBAL_PROTECT(config_dir) stat("[name]:", statclick) /datum/controller/configuration/proc/Get(entry_type) - if(IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "Get" && GLOB.LastAdminCalledTargetRef == "\ref[src]") + if(IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "Get" && GLOB.LastAdminCalledTargetRef == "[REF(src)]") log_admin_private("Config access of [entry_type] attempted by [key_name(usr)]") return var/datum/config_entry/E = entry_type @@ -137,7 +137,7 @@ GLOBAL_PROTECT(config_dir) return E.value /datum/controller/configuration/proc/Set(entry_type, new_val) - if(IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "Set" && GLOB.LastAdminCalledTargetRef == "\ref[src]") + if(IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "Set" && GLOB.LastAdminCalledTargetRef == "[REF(src)]") log_admin_private("Config rewrite of [entry_type] to [new_val] attempted by [key_name(usr)]") return var/datum/config_entry/E = entry_type diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index f435d7e819..cfefa1b159 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -133,7 +133,7 @@ SUBSYSTEM_DEF(events) var/magic = "" var/holiday = "" for(var/datum/round_event_control/E in SSevents.control) - dat = "
[E]" + dat = "
[E]" if(E.holidayID) holiday += dat else if(E.wizardevent) diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index ccfc041b21..eb4f2380a1 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -164,7 +164,7 @@ SUBSYSTEM_DEF(garbage) #endif var/type = D.type var/datum/qdel_item/I = items[type] - testing("GC: -- \ref[D] | [type] was unable to be GC'd --") + testing("GC: -- \ref[src] | [type] was unable to be GC'd --") I.failures++ if (GC_QUEUE_HARDDELETE) HardDelete(D) diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm index 07797d0677..0eafc9f099 100644 --- a/code/controllers/subsystem/pai.dm +++ b/code/controllers/subsystem/pai.dm @@ -109,23 +109,23 @@ SUBSYSTEM_DEF(pai) dat += "

Please configure your pAI personality's options. Remember, what you enter here could determine whether or not the user requesting a personality chooses you!

" dat += "" dat += "" - dat += "" + dat += "" dat += "" - dat += "" + dat += "" dat += "" - dat += "" + dat += "" dat += "" - dat += "" + dat += "" dat += "
Name:[candidate.name]
\[Edit\]What you plan to call yourself. Suggestions: Any character name you would choose for a station character OR an AI.
\[Edit\]What you plan to call yourself. Suggestions: Any character name you would choose for a station character OR an AI.
Description:[candidate.description]
\[Edit\]What sort of pAI you typically play; your mannerisms, your quirks, etc. This can be as sparse or as detailed as you like.
\[Edit\]What sort of pAI you typically play; your mannerisms, your quirks, etc. This can be as sparse or as detailed as you like.
Preferred Role:[candidate.role]
\[Edit\]Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the station yet again? This doesn't have to be limited to just station jobs. Pretty much any general descriptor for what you'd like to be doing works here.
\[Edit\]Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the station yet again? This doesn't have to be limited to just station jobs. Pretty much any general descriptor for what you'd like to be doing works here.
OOC Comments:[candidate.comments]
\[Edit\]Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
\[Edit\]Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
" dat += "
" - dat += "

Submit Personality


" - dat += "Save Personality
" - dat += "Load Personality
" + dat += "

Submit Personality


" + dat += "Save Personality
" + dat += "Load Personality
" M << browse(dat, "window=paiRecruit") @@ -182,7 +182,7 @@ SUBSYSTEM_DEF(pai) dat += "Description:[c.description]" dat += "Preferred Role:[c.role]" dat += "OOC Comments:[c.comments]" - dat += "\[Download [c.name]\]" + dat += "\[Download [c.name]\]" dat += "" diff --git a/code/controllers/subsystem/radiation.dm b/code/controllers/subsystem/radiation.dm index 1dbe564169..da6a8cd9fc 100644 --- a/code/controllers/subsystem/radiation.dm +++ b/code/controllers/subsystem/radiation.dm @@ -10,11 +10,11 @@ PROCESSING_SUBSYSTEM_DEF(radiation) /datum/controller/subsystem/processing/radiation/proc/warn(datum/component/radioactive) if(!radioactive || QDELETED(radioactive)) return - if(warned_atoms["\ref[radioactive.parent]"]) + if(warned_atoms["[REF(radioactive.parent)]"]) return var/atom/master = radioactive.parent SSblackbox.add_details("contaminated", "[master.type]") - next_warn["\ref[master]"] = "\ref[radioactive]" + next_warn["[REF(master)]"] = "[REF(radioactive)]" var/wait_time = max(0, 500-(world.time-last_warn))+20 // wait at least 20 ticks, longer if we just messaged addtimer(CALLBACK(src, .proc/send_warn), wait_time, TIMER_UNIQUE | TIMER_OVERRIDE) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index e1828b737a..26a014d644 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -615,7 +615,7 @@ SUBSYSTEM_DEF(ticker) if(5) //every 5 ticks check if there is a slot available if(living_player_count() < hpc) if(next_in_line && next_in_line.client) - to_chat(next_in_line, "A slot has opened! You have approximately 20 seconds to join. \>\>Join Game\<\<") + to_chat(next_in_line, "A slot has opened! You have approximately 20 seconds to join. \>\>Join Game\<\<") SEND_SOUND(next_in_line, sound('sound/misc/notice1.ogg')) next_in_line.LateChoices() return diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 804e430ef9..2202d9a496 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -243,7 +243,7 @@ SUBSYSTEM_DEF(timer) while(SStimer.timer_id_dict["timerid" + num2text(id, 8)]) SStimer.timer_id_dict["timerid" + num2text(id, 8)] = src - name = "Timer: " + num2text(id, 8) + ", TTR: [timeToRun], Flags: [jointext(bitfield2list(flags, list("TIMER_UNIQUE", "TIMER_OVERRIDE", "TIMER_CLIENT_TIME", "TIMER_STOPPABLE", "TIMER_NO_HASH_WAIT")), ", ")], callBack: \ref[callBack], callBack.object: [callBack.object]\ref[callBack.object]([getcallingtype()]), callBack.delegate:[callBack.delegate]([callBack.arguments ? callBack.arguments.Join(", ") : ""])" + name = "Timer: " + num2text(id, 8) + ", TTR: [timeToRun], Flags: [jointext(bitfield2list(flags, list("TIMER_UNIQUE", "TIMER_OVERRIDE", "TIMER_CLIENT_TIME", "TIMER_STOPPABLE", "TIMER_NO_HASH_WAIT")), ", ")], callBack: [REF(callBack)], callBack.object: [callBack.object][REF(callBack.object)]([getcallingtype()]), callBack.delegate:[callBack.delegate]([callBack.arguments ? callBack.arguments.Join(", ") : ""])" if (spent) CRASH("HOLY JESUS. WHAT IS THAT? WHAT THE FUCK IS THAT?") @@ -362,9 +362,9 @@ SUBSYSTEM_DEF(timer) if (flags & TIMER_UNIQUE) var/list/hashlist if(flags & TIMER_NO_HASH_WAIT) - hashlist = list(callback.object, "(\ref[callback.object])", callback.delegate, flags & TIMER_CLIENT_TIME) + hashlist = list(callback.object, "([REF(callback.object)])", callback.delegate, flags & TIMER_CLIENT_TIME) else - hashlist = list(callback.object, "(\ref[callback.object])", callback.delegate, wait, flags & TIMER_CLIENT_TIME) + hashlist = list(callback.object, "([REF(callback.object)])", callback.delegate, wait, flags & TIMER_CLIENT_TIME) hashlist += callback.arguments hash = hashlist.Join("|||||||") diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index d377329312..55624a866c 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -199,7 +199,7 @@ SUBSYSTEM_DEF(vote) text += "\n[question]" log_vote(text) var/vp = CONFIG_GET(number/vote_period) - to_chat(world, "\n[text]\nType vote or click here to place your votes.\nYou have [DisplayTimeText(vp)] to vote.") + to_chat(world, "\n[text]\nType vote or click here to place your votes.\nYou have [DisplayTimeText(vp)] to vote.") time_remaining = round(vp/10) for(var/c in GLOB.clients) var/client/C = c @@ -232,36 +232,36 @@ SUBSYSTEM_DEF(vote) var/votes = choices[choices[i]] if(!votes) votes = 0 - . += "
  • [choices[i]] ([votes] votes)
  • " + . += "
  • [choices[i]] ([votes] votes)
  • " . += "
    " if(admin) - . += "(Cancel Vote) " + . += "(Cancel Vote) " else . += "

    Start a vote:



    " - . += "Close" + . += "Close" return . diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 31e8daadb2..e8a1a17fe2 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -132,13 +132,13 @@ var/output = {"
    [Message]

    - [Button1]"} + [Button1]"} if (Button2) - output += {"[Button2]"} + output += {"[Button2]"} if (Button3) - output += {"[Button3]"} + output += {"[Button3]"} output += {"
    "} @@ -253,7 +253,7 @@ return var/param = "null" if(ref) - param = "\ref[ref]" + param = "[REF(ref)]" winset(user, windowid, "on-close=\".windowclose [param]\"") diff --git a/code/datums/datum.dm b/code/datums/datum.dm index cd589fd8c3..854aa40538 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -3,6 +3,7 @@ var/list/active_timers //for SStimer var/list/datum_components //for /datum/components var/ui_screen = "home" //for tgui + var/use_tag = FALSE #ifdef TESTING var/running_find_references diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index b653e5c6ae..2f13eec65b 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -25,10 +25,10 @@ /datum/proc/vv_get_dropdown() . = list() . += "---" - .["Call Proc"] = "?_src_=vars;[HrefToken()];proc_call=\ref[src]" - .["Mark Object"] = "?_src_=vars;[HrefToken()];mark_object=\ref[src]" - .["Delete"] = "?_src_=vars;[HrefToken()];delete=\ref[src]" - .["Show VV To Player"] = "?_src_=vars;[HrefToken(TRUE)];expose=\ref[src]" + .["Call Proc"] = "?_src_=vars;[HrefToken()];proc_call=[REF(src)]" + .["Mark Object"] = "?_src_=vars;[HrefToken()];mark_object=[REF(src)]" + .["Delete"] = "?_src_=vars;[HrefToken()];delete=[REF(src)]" + .["Show VV To Player"] = "?_src_=vars;[HrefToken(TRUE)];expose=[REF(src)]" /datum/proc/on_reagent_change() @@ -53,7 +53,7 @@ return var/title = "" - var/refid = "\ref[D]" + var/refid = "[REF(D)]" var/icon/sprite var/hash @@ -71,7 +71,7 @@ hash = md5(hash + AT.icon_state) src << browse_rsc(sprite, "vv[hash].png") - title = "[D] (\ref[D]) = [type]" + title = "[D] ([REF(D)]) = [type]" var/sprite_text if(sprite) @@ -394,9 +394,9 @@ name = DA[name] //name is really the index until this line else value = DA[name] - header = "
  • (E) (C) (-) " + header = "
  • (E) (C) (-) " else - header = "
  • (E) (C) (M) " + header = "
  • (E) (C) (M) " else header = "
  • " @@ -411,7 +411,7 @@ #ifdef VARSICON var/icon/I = new/icon(value) var/rnd = rand(1,10000) - var/rname = "tmp\ref[I][rnd].png" + var/rname = "tmp[REF(I)][rnd].png" usr << browse_rsc(I, rname) item = "[VV_HTML_ENCODE(name)] = ([value]) " #else @@ -423,8 +423,8 @@ var/rnd = rand(1, 10000) var/image/I = value - src << browse_rsc(I.icon, "tmp\ref[value][rnd].png") - html += "[name] = " + src << browse_rsc(I.icon, "tmp[REF(value)][rnd].png") + html += "[name] = " #else html += "[name] = /image ([value])" #endif @@ -434,14 +434,14 @@ //else if (istype(value, /client)) // var/client/C = value - // item = "[VV_HTML_ENCODE(name)] \ref[value] = [C] [C.type]" + // item = "[VV_HTML_ENCODE(name)] [REF(value)] = [C] [C.type]" else if (istype(value, /datum)) var/datum/D = value if ("[D]" != "[D.type]") //if the thing as a name var, lets use it. - item = "[VV_HTML_ENCODE(name)] \ref[value] = [D] [D.type]" + item = "[VV_HTML_ENCODE(name)] [REF(value)] = [D] [D.type]" else - item = "[VV_HTML_ENCODE(name)] \ref[value] = [D.type]" + item = "[VV_HTML_ENCODE(name)] [REF(value)] = [D.type]" else if (islist(value)) var/list/L = value @@ -459,9 +459,9 @@ items += debug_variable(key, val, level + 1, sanitize = sanitize) - item = "[VV_HTML_ENCODE(name)] = /list ([L.len])" + item = "[VV_HTML_ENCODE(name)] = /list ([L.len])" else - item = "[VV_HTML_ENCODE(name)] = /list ([L.len])" + item = "[VV_HTML_ENCODE(name)] = /list ([L.len])" else item = "[VV_HTML_ENCODE(name)] = [VV_HTML_ENCODE(value)]" @@ -561,7 +561,7 @@ var/prompt = alert("Do you want to grant [C] access to view this VV window? (they will not be able to edit or change anything nor open nested vv windows unless they themselves are an admin)", "Confirm", "Yes", "No") if (prompt != "Yes" || !usr.client) return - message_admins("[key_name_admin(usr)] Showed [key_name_admin(C)] a VV window") + message_admins("[key_name_admin(usr)] Showed [key_name_admin(C)] a VV window") log_admin("Admin [key_name(usr)] Showed [key_name(C)] a VV window of a [thing]") to_chat(C, "[usr.client.holder.fakekey ? "an Administrator" : "[usr.client.key]"] has granted you access to view a View Variables window") C.debug_variables(thing) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 3690de2c04..d10788fca5 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -388,7 +388,7 @@ var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
    " out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
    " - out += "Assigned role: [assigned_role]. Edit
    " + out += "Assigned role: [assigned_role]. Edit
    " out += "Faction and special role: [special_role]
    " var/list/sections = list( @@ -412,11 +412,11 @@ text = uppertext(text) text = "[text]: " if (src in SSticker.mode.traitors) - text += "TRAITOR | loyal" + text += "TRAITOR | loyal" if (objectives.len==0) - text += "
    Objectives are empty! Randomize!" + text += "
    Objectives are empty! Randomize!" else - text += "traitor | LOYAL" + text += "traitor | LOYAL" if(current && current.client && (ROLE_TRAITOR in current.client.prefs.be_special)) text += " | Enabled in Prefs" @@ -434,7 +434,7 @@ text = uppertext(text) text = "[text]: " if(src in SSticker.mode.brothers) - text += "Brother | no" + text += "Brother | no" if(current && current.client && (ROLE_BROTHER in current.client.prefs.be_special)) text += " | Enabled in Prefs" @@ -449,19 +449,19 @@ text = uppertext(text) text = "[text]: " if ((src in SSticker.mode.changelings) && special_role) - text += "YES | no" + text += "YES | no" if (objectives.len==0) - text += "
    Objectives are empty! Randomize!" + text += "
    Objectives are empty! Randomize!" if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) ) - text += "
    Transform to initial appearance." + text += "
    Transform to initial appearance." else if(src in SSticker.mode.changelings) //Station Aligned Changeling - text += "YES (but not an antag) | no" + text += "YES (but not an antag) | no" if (objectives.len==0) - text += "
    Objectives are empty! Randomize!" + text += "
    Objectives are empty! Randomize!" if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) ) - text += "
    Transform to initial appearance." + text += "
    Transform to initial appearance." else - text += "yes | NO" + text += "yes | NO" if(current && current.client && (ROLE_CHANGELING in current.client.prefs.be_special)) text += " | Enabled in Prefs" @@ -477,7 +477,7 @@ text = uppertext(text) text = "[text]: " if (ishuman(current)) - text += "healthy | infected | HUMAN | other" + text += "healthy | infected | HUMAN | other" else if(ismonkey(current)) var/found = FALSE for(var/datum/disease/transformation/jungle_fever/JF in current.viruses) @@ -485,9 +485,9 @@ break if(found) - text += "healthy | INFECTED | human | other" + text += "healthy | INFECTED | human | other" else - text += "HEALTHY | infected | human | other" + text += "HEALTHY | infected | human | other" else text += "healthy | infected | human | OTHER" @@ -507,17 +507,17 @@ text = uppertext(text) text = "[text]: " if (src in SSticker.mode.syndicates) - text += "OPERATIVE | nanotrasen" - text += "
    To shuttle, undress, dress up." + text += "OPERATIVE | nanotrasen" + text += "
    To shuttle, undress, dress up." var/code for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines) if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") code = bombue.r_code break if (code) - text += " Code is [code]. tell the code." + text += " Code is [code]. tell the code." else - text += "operative | NANOTRASEN" + text += "operative | NANOTRASEN" if(current && current.client && (ROLE_OPERATIVE in current.client.prefs.be_special)) text += " | Enabled in Prefs" @@ -533,10 +533,10 @@ text = uppertext(text) text = "[text]: " if (has_antag_datum(/datum/antagonist/wizard)) - text += "YES | no" - text += "
    To lair, undress" + text += "YES | no" + text += "
    To lair, undress" else - text += "yes | NO" + text += "yes | NO" if(current && current.client && (ROLE_WIZARD in current.client.prefs.be_special)) text += " | Enabled in Prefs" @@ -563,28 +563,28 @@ if(M && (M.z in GLOB.station_z_levels) && !M.stat) last_healthy_headrev = FALSE break - text += "head | not mindshielded | employee | [last_healthy_headrev ? "LAST " : ""]HEADREV | rev" - text += "
    Flash: give" + text += "head | not mindshielded | employee | [last_healthy_headrev ? "LAST " : ""]HEADREV | rev" + text += "
    Flash: give" var/list/L = current.get_contents() var/obj/item/device/assembly/flash/flash = locate() in L if (flash) if(!flash.crit_fail) - text += " | take." + text += " | take." else - text += " | take | repair." + text += " | take | repair." else text += "." - text += " Reequip (gives traitor uplink)." + text += " Reequip (gives traitor uplink)." if (objectives.len==0) - text += "
    Objectives are empty! Set to kill all heads." + text += "
    Objectives are empty! Set to kill all heads." else if(current.isloyal()) - text += "head | MINDSHIELDED | employee | headrev | rev" + text += "head | MINDSHIELDED | employee | headrev | rev" else if (has_antag_datum(/datum/antagonist/rev)) - text += "head | not mindshielded | employee | headrev | REV" + text += "head | not mindshielded | employee | headrev | REV" else - text += "head | not mindshielded | EMPLOYEE | headrev | rev" + text += "head | not mindshielded | EMPLOYEE | headrev | rev" if(current && current.client && (ROLE_REV in current.client.prefs.be_special)) text += " | Enabled in Prefs" @@ -599,8 +599,8 @@ text = uppertext(text) text = "[text]: " if(src in SSticker.mode.abductors) - text += "Abductor | human" - text += " | undress | equip" + text += "Abductor | human" + text += " | undress | equip" if(current && current.client && (ROLE_ABDUCTOR in current.client.prefs.be_special)) text += " | Enabled in Prefs" @@ -618,13 +618,13 @@ var/datum/antagonist/devil/devilinfo = has_antag_datum(ANTAG_DATUM_DEVIL) if(devilinfo) if(!devilinfo.ascendable) - text += "DEVIL | ascendable devil | sintouched | human" + text += "DEVIL | ascendable devil | sintouched | human" else - text += "DEVIL | ASCENDABLE DEVIL | sintouched | human" + text += "DEVIL | ASCENDABLE DEVIL | sintouched | human" else if(src in SSticker.mode.sintouched) - text += "devil | ascendable devil | SINTOUCHED | human" + text += "devil | ascendable devil | SINTOUCHED | human" else - text += "devil | ascendable devil | sintouched | HUMAN" + text += "devil | ascendable devil | sintouched | HUMAN" if(current && current.client && (ROLE_DEVIL in current.client.prefs.be_special)) text += " | Enabled in Prefs" @@ -641,11 +641,11 @@ var/datum/antagonist/ninja/ninjainfo = has_antag_datum(ANTAG_DATUM_NINJA) if(ninjainfo) if(ninjainfo.helping_station) - text += "employee | syndicate | NANOTRASEN | EQUIP" + text += "employee | syndicate | NANOTRASEN | EQUIP" else - text += "employee | SYNDICATE | nanotrasen | EQUIP" + text += "employee | SYNDICATE | nanotrasen | EQUIP" else - text += "EMPLOYEE | syndicate | nanotrasen | random allegiance" + text += "EMPLOYEE | syndicate | nanotrasen | random allegiance" if(current && current.client && (ROLE_NINJA in current.client.prefs.be_special)) text += " | Enabled in Prefs" else @@ -660,10 +660,10 @@ text = uppertext(text) text = "[text]: " if(iscultist(current)) - text += "not mindshielded | employee | CULTIST" - text += "
    Give tome | amulet." + text += "not mindshielded | employee | CULTIST" + text += "
    Give tome | amulet." else if(is_convertable_to_cult(current)) - text += "not mindshielded | EMPLOYEE | cultist" + text += "not mindshielded | EMPLOYEE | cultist" else text += "[!current.isloyal() ? "not mindshielded" : "MINDSHIELDED"] | EMPLOYEE | cannot serve Nar-Sie" @@ -682,10 +682,10 @@ text = uppertext(text) text = "[text]: " if(is_servant_of_ratvar(current)) - text += "not mindshielded | employee | SERVANT" - text += "
    Equip" + text += "not mindshielded | employee | SERVANT" + text += "
    Equip" else if(is_eligible_servant(current)) - text += "not mindshielded | EMPLOYEE | servant" + text += "not mindshielded | EMPLOYEE | servant" else text += "[!current.isloyal() ? "not mindshielded" : "MINDSHIELDED"] | EMPLOYEE | cannot serve Ratvar" @@ -702,14 +702,14 @@ text = "silicon" var/mob/living/silicon/robot/robot = current if (istype(robot) && robot.emagged) - text += "
    Cyborg: Is emagged! Unemag!
    0th law: [robot.laws.zeroth]" + text += "
    Cyborg: Is emagged! Unemag!
    0th law: [robot.laws.zeroth]" var/mob/living/silicon/ai/ai = current if (istype(ai) && ai.connected_robots.len) var/n_e_robots = 0 for (var/mob/living/silicon/robot/R in ai.connected_robots) if (R.emagged) n_e_robots++ - text += "
    [n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. Unemag" + text += "
    [n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. Unemag" if (SSticker.mode.config_tag == "traitorchan") if (sections["traitor"]) out += sections["traitor"]+"
    " @@ -727,12 +727,12 @@ if(((src in SSticker.mode.traitors) || (src in SSticker.mode.syndicates)) && ishuman(current)) - text = "Uplink: give" + text = "Uplink: give" var/obj/item/device/uplink/U = find_syndicate_uplink() if(U) - text += " | take" + text += " | take" if (check_rights(R_FUN, 0)) - text += ", [U.telecrystals] TC" + text += ", [U.telecrystals] TC" else text += ", [U.telecrystals] TC" text += "." //hiel grammar @@ -742,18 +742,18 @@ out += "Memory:
    " out += memory - out += "
    Edit memory
    " + out += "
    Edit memory
    " out += "Objectives:
    " if (objectives.len == 0) out += "EMPTY
    " else var/obj_count = 1 for(var/datum/objective/objective in objectives) - out += "[obj_count]: [objective.explanation_text] Edit Delete Toggle Completion
    " + out += "[obj_count]: [objective.explanation_text] Edit Delete Toggle Completion
    " obj_count++ - out += "Add objective

    " + out += "Add objective

    " - out += "Announce objectives

    " + out += "Announce objectives

    " var/datum/browser/popup = new(usr, "edit_memory", "", 600, 600) popup.set_content(out) diff --git a/code/datums/spawners_menu.dm b/code/datums/spawners_menu.dm index a9fd77d1e2..f23f0dfd07 100644 --- a/code/datums/spawners_menu.dm +++ b/code/datums/spawners_menu.dm @@ -21,7 +21,7 @@ this["desc"] = "" this["refs"] = list() for(var/spawner_obj in GLOB.mob_spawners[spawner]) - this["refs"] += "\ref[spawner_obj]" + this["refs"] += "[REF(spawner_obj)]" if(!this["desc"]) if(istype(spawner_obj, /obj/effect/mob_spawn)) var/obj/effect/mob_spawn/MS = spawner_obj diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f20b13e1a3..b6cace2111 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -335,7 +335,7 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) /atom/proc/blood_splatter_index() - return "\ref[initial(icon)]-[initial(icon_state)]" + return "[REF(initial(icon))]-[initial(icon_state)]" //returns the mob's dna info as a list, to be inserted in an object's blood_DNA list /mob/living/proc/get_blood_dna_list() @@ -631,9 +631,9 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) var/turf/curturf = get_turf(src) if (curturf) .["Jump to"] = "?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[curturf.x];Y=[curturf.y];Z=[curturf.z]" - .["Add reagent"] = "?_src_=vars;[HrefToken()];addreagent=\ref[src]" - .["Trigger EM pulse"] = "?_src_=vars;[HrefToken()];emp=\ref[src]" - .["Trigger explosion"] = "?_src_=vars;[HrefToken()];explode=\ref[src]" + .["Add reagent"] = "?_src_=vars;[HrefToken()];addreagent=[REF(src)]" + .["Trigger EM pulse"] = "?_src_=vars;[HrefToken()];emp=[REF(src)]" + .["Trigger explosion"] = "?_src_=vars;[HrefToken()];explode=[REF(src)]" /atom/proc/drop_location() var/atom/L = loc diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index b05a1d78f1..353b5726ce 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -523,7 +523,7 @@ /atom/movable/vv_get_dropdown() . = ..() . -= "Jump to" - .["Follow"] = "?_src_=holder;[HrefToken()];adminplayerobservefollow=\ref[src]" + .["Follow"] = "?_src_=holder;[HrefToken()];adminplayerobservefollow=[REF(src)]" /atom/movable/proc/ex_check(ex_id) if(!ex_id) diff --git a/code/game/communications.dm b/code/game/communications.dm index 19c3f87460..80c4728a36 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -147,6 +147,7 @@ GLOBAL_LIST_INIT(reverseradiochannels, list( "1357" = "Engineering", "1359" = "Security", "1337" = "CentCom", +<<<<<<< HEAD "1213" = "Syndicate", "1347" = "Supply", "1349" = "Service", @@ -292,6 +293,153 @@ GLOBAL_VAR_INIT(RADIO_MAGNETS, "9") /datum/signal/proc/debug_print() if (source) +======= + "1213" = "Syndicate", + "1347" = "Supply", + "1349" = "Service", + "1447" = "AI Private", + "1215" = "Red Team", + "1217" = "Blue Team" +)) + +//depenging helpers +GLOBAL_VAR_CONST(SYND_FREQ, 1213) //nuke op frequency, coloured dark brown in chat window +GLOBAL_VAR_CONST(SUPP_FREQ, 1347) //supply, coloured light brown in chat window +GLOBAL_VAR_CONST(SERV_FREQ, 1349) //service, coloured green in chat window +GLOBAL_VAR_CONST(SCI_FREQ, 1351) //science, coloured plum in chat window +GLOBAL_VAR_CONST(COMM_FREQ, 1353) //command, colored gold in chat window +GLOBAL_VAR_CONST(MED_FREQ, 1355) //medical, coloured blue in chat window +GLOBAL_VAR_CONST(ENG_FREQ, 1357) //engineering, coloured orange in chat window +GLOBAL_VAR_CONST(SEC_FREQ, 1359) //security, coloured red in chat window +GLOBAL_VAR_CONST(CENTCOM_FREQ, 1337) //centcom frequency, coloured grey in chat window +GLOBAL_VAR_CONST(AIPRIV_FREQ, 1447) //AI private, colored magenta in chat window +GLOBAL_VAR_CONST(REDTEAM_FREQ, 1215) // red team (CTF) frequency, coloured red +GLOBAL_VAR_CONST(BLUETEAM_FREQ, 1217) // blue team (CTF) frequency, coloured blue + +#define TRANSMISSION_WIRE 0 +#define TRANSMISSION_RADIO 1 + +/* filters */ +GLOBAL_VAR_INIT(RADIO_TO_AIRALARM, "1") +GLOBAL_VAR_INIT(RADIO_FROM_AIRALARM, "2") +GLOBAL_VAR_INIT(RADIO_CHAT, "3") //deprecated +GLOBAL_VAR_INIT(RADIO_ATMOSIA, "4") +GLOBAL_VAR_INIT(RADIO_NAVBEACONS, "5") +GLOBAL_VAR_INIT(RADIO_AIRLOCK, "6") +GLOBAL_VAR_INIT(RADIO_MAGNETS, "9") + +/datum/radio_frequency + + var/frequency as num + var/list/list/obj/devices = list() + +//If range > 0, only post to devices on the same z_level and within range +//Use range = -1, to restrain to the same z_level without limiting range +/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, filter = null as text|null, range = null as num|null) + + //Apply filter to the signal. If none supply, broadcast to every devices + //_default channel is always checked + var/list/filter_list + + if(filter) + filter_list = list(filter,"_default") + else + filter_list = devices + + //If checking range, find the source turf + var/turf/start_point + if(range) + start_point = get_turf(source) + if(!start_point) + return 0 + + //Send the data + for(var/current_filter in filter_list) + for(var/obj/device in devices[current_filter]) + if(device == source) + continue + if(range) + var/turf/end_point = get_turf(device) + if(!end_point) + continue + if(start_point.z != end_point.z || (range > 0 && get_dist(start_point, end_point) > range)) + continue + device.receive_signal(signal, TRANSMISSION_RADIO, frequency) + +/datum/radio_frequency/proc/add_listener(obj/device, filter as text|null) + if (!filter) + filter = "_default" + + var/list/devices_line = devices[filter] + if(!devices_line) + devices_line = list() + devices[filter] = devices_line + devices_line += device + + +/datum/radio_frequency/proc/remove_listener(obj/device) + for(var/devices_filter in devices) + var/list/devices_line = devices[devices_filter] + if(!devices_line) + devices -= devices_filter + devices_line -= device + if(!devices_line.len) + devices -= devices_filter + + + + + +/client/proc/print_pointers() + set name = "Debug Signals" + set category = "Debug" + + if(!holder) + return + + var/datum/signal/S + to_chat(src, "There are [S.pointers.len] pointers:") + for(var/p in S.pointers) + to_chat(src, p) + S = locate(p) + if(istype(S)) + to_chat(src, S.debug_print()) + +/obj/proc/receive_signal(datum/signal/signal, receive_method, receive_param) + return + +/datum/signal + var/obj/source + + var/transmission_method = 0 + //0 = wire + //1 = radio transmission + //2 = subspace transmission + + var/data = list() + var/encryption + + var/frequency = 0 + var/static/list/pointers = list() + +/datum/signal/New() + ..() + pointers += "[REF(src)]" + +/datum/signal/Destroy() + pointers -= "[REF(src)]" + return ..() + +/datum/signal/proc/copy_from(datum/signal/model) + source = model.source + transmission_method = model.transmission_method + data = model.data + encryption = model.encryption + frequency = model.frequency + +/datum/signal/proc/debug_print() + if (source) +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental . = "signal = {source = '[source]' [COORD(source)]\n" else . = "signal = {source = '[source]' ()\n" diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index 8a0a622a63..2a1a196b0e 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -29,13 +29,13 @@ dat += "Using this contract, you may summon an apprentice to aid you on your mission.
    " dat += "If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.
    " dat += "Which school of magic is your apprentice studying?:
    " - dat += "Destruction
    " + dat += "Destruction
    " dat += "Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.
    " - dat += "Bluespace Manipulation
    " + dat += "Bluespace Manipulation
    " dat += "Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.
    " - dat += "Healing
    " + dat += "Healing
    " dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
    " - dat += "Robeless
    " + dat += "Robeless
    " dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
    " user << browse(dat, "window=radio") onclose(user, "radio") diff --git a/code/game/gamemodes/cult/supply.dm b/code/game/gamemodes/cult/supply.dm index 47807fa93a..3720e496ea 100644 --- a/code/game/gamemodes/cult/supply.dm +++ b/code/game/gamemodes/cult/supply.dm @@ -22,7 +22,7 @@ dat += "
    " for(var/s in possible_summons) var/datum/cult_supply/S = s - dat += "[initial(S.invocation)] - [initial(S.desc)]
    " + dat += "[initial(S.invocation)] - [initial(S.desc)]
    " var/datum/browser/popup = new(user, "talisman", "", 400, 400) popup.set_content(dat.Join("")) popup.open() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 26c3810b42..c8b98319f0 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -160,7 +160,7 @@ if(CONFIG_GET(flag/protect_assistant_from_antagonist)) replacementmode.restricted_jobs += "Assistant" - message_admins("The roundtype will be converted. If you have other plans for the station or feel the station is too messed up to inhabit stop the creation of antags or end the round now.") + message_admins("The roundtype will be converted. If you have other plans for the station or feel the station is too messed up to inhabit stop the creation of antags or end the round now.") . = 1 sleep(rand(600,1800)) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 92dca5d3c9..a2513d776f 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -133,9 +133,9 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( dat += "Install Module:
    " dat += "The number afterwards is the amount of processing time it consumes.
    " for(var/datum/AI_Module/large/module in possible_modules) - dat += "[module.module_name]\[?\] ([module.cost])
    " + dat += "[module.module_name]\[?\] ([module.cost])
    " for(var/datum/AI_Module/small/module in possible_modules) - dat += "[module.module_name]\[?\] ([module.cost])
    " + dat += "[module.module_name]\[?\] ([module.cost])
    " dat += "
    " if(temp) dat += "[temp]" diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm index d44ff57c96..f243f161c3 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm @@ -43,20 +43,20 @@ dat += "Collected Samples : [points]
    " dat += "Gear Credits: [credits]
    " dat += "Transfer data in exchange for supplies:
    " - dat += "Advanced Baton
    " - dat += "Agent Helmet
    " - dat += "Agent Vest
    " - dat += "Radio Silencer
    " - dat += "Science Tool
    " + dat += "Advanced Baton
    " + dat += "Agent Helmet
    " + dat += "Agent Vest
    " + dat += "Radio Silencer
    " + dat += "Science Tool
    " else dat += "NO EXPERIMENT MACHINE DETECTED
    " if(pad) dat += "Emergency Teleporter System." dat += "Consider using primary observation console first." - dat += "Activate Teleporter
    " + dat += "Activate Teleporter
    " if(gizmo && gizmo.marked) - dat += "Retrieve Mark
    " + dat += "Retrieve Mark
    " else dat += "Retrieve Mark
    " else @@ -66,15 +66,15 @@ dat += "

    Agent Vest Mode


    " var/mode = vest.mode if(mode == VEST_STEALTH) - dat += "Combat" + dat += "Combat" dat += "Stealth" else dat += "Combat" - dat += "Stealth" + dat += "Stealth" dat+="
    " - dat += "Select Agent Vest Disguise
    " - dat += "[vest.flags_1 & NODROP_1 ? "Unlock" : "Lock"] Vest
    " + dat += "Select Agent Vest Disguise
    " + dat += "[vest.flags_1 & NODROP_1 ? "Unlock" : "Lock"] Vest
    " else dat += "NO AGENT VEST DETECTED" var/datum/browser/popup = new(user, "computer", "Abductor Console", 400, 500) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm index 2b012e5f81..ae095c12e6 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm @@ -48,7 +48,7 @@ item_count++ var/g_color = gland_colors[i] var/amount = amounts[i] - dat += "[amount]" + dat += "[amount]" if(item_count == 4) // Four boxes per line dat +="

    " item_count = 0 diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index 73a696fb3a..da445b94ce 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -104,9 +104,9 @@ dat += "
    " dat += "" //Avert your eyes dat += "" - dat += "Probe
    " - dat += "Dissect
    " - dat += "Analyze
    " + dat += "Probe
    " + dat += "Dissect
    " + dat += "Analyze
    " dat += "
    " else dat += "Experiment " @@ -127,8 +127,8 @@ dat += "
    " dat += "[flash]" dat += "
    " - dat += "Scan" - dat += "Close" : "open=1'>Open"]" + dat += "Scan" + dat += "Close" : "open=1'>Open"]" var/datum/browser/popup = new(user, "experiment", "Probing Console", 300, 300) popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.set_content(dat) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 0251d17398..3ac0f7b29b 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -77,6 +77,7 @@ icon = 'icons/obj/machines/nuke_terminal.dmi' icon_state = "nuclearbomb_base" anchored = TRUE //stops it being moved + use_tag = TRUE /obj/machinery/nuclearbomb/syndicate //ui_style = "syndicate" // actually the nuke op bomb is a stole nt bomb diff --git a/code/game/gamemodes/sandbox/airlock_maker.dm b/code/game/gamemodes/sandbox/airlock_maker.dm index aafbffa82e..6615180765 100644 --- a/code/game/gamemodes/sandbox/airlock_maker.dm +++ b/code/game/gamemodes/sandbox/airlock_maker.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /* This is for the sandbox for now, maybe useful later for an actual thing? @@ -137,3 +138,144 @@ return interact() +======= +/* + This is for the sandbox for now, + maybe useful later for an actual thing? + -Sayu +*/ + +/obj/structure/door_assembly + var/datum/airlock_maker/maker = null + +/obj/structure/door_assembly/attack_hand() + ..() + if(maker) + maker.interact() + +/datum/airlock_maker + var/obj/structure/door_assembly/linked = null + + var/list/access_used = null + var/require_all = 1 + + var/paintjob = "none" + var/glassdoor = 0 + + var/doorname = "airlock" + +/datum/airlock_maker/New(var/atom/target_loc) + linked = new(target_loc) + linked.maker = src + linked.anchored = FALSE + access_used = list() + + interact() + +/datum/airlock_maker/proc/linkpretty(href,desc,active) + if(!desc) + var/static/list/defaults = list("No","Yes") + desc = defaults[active+1] + if(active) + return "[desc]" + return "[desc]" + +/datum/airlock_maker/proc/interact() + var/list/leftcolumn = list() + var/list/rightcolumn = list() + leftcolumn += "Required Access" + for(var/access in get_all_accesses()) + leftcolumn += linkpretty("access=[access]",get_access_desc(access),access in access_used) + leftcolumn += "Require all listed accesses: [linkpretty("reqall",null,require_all)]" + + rightcolumn += "Paintjob" + for(var/option in list("none","engineering","atmos","security","command","medical","research","mining","maintenance","external","highsecurity")) + rightcolumn += linkpretty("paint=[option]",option,option == paintjob) + rightcolumn += "Glass door: " + linkpretty("glass",null,glassdoor) + "

    " + var/length = max(leftcolumn.len,rightcolumn.len) + + var/dat = "You may move the model airlock around. A new airlock will be built in its space when you click done, below.

    " + dat += "Door name: \"[doorname]\"" + dat += "" + for(var/i=1; i<=length; i++) + dat += "" + + dat += "
    " + if(i<=leftcolumn.len) + dat += leftcolumn[i] + dat += "" + if(i<=rightcolumn.len) + dat += rightcolumn[i] + dat += "

    Finalize Airlock Construction | Cancel and Destroy Airlock" + usr << browse(dat,"window=airlockmaker") + +/datum/airlock_maker/Topic(var/href,var/list/href_list) + if(!usr) + return + if(!src || !linked || !linked.loc) + usr << browse(null,"window=airlockmaker") + return + + if("rename" in href_list) + var/newname = stripped_input(usr,"New airlock name:","Name the airlock",doorname) + if(newname) + doorname = newname + if("access" in href_list) + var/value = text2num(href_list["access"]) + access_used ^= value + if("reqall" in href_list) + require_all = !require_all + if("paint" in href_list) + paintjob = href_list["paint"] + if("glass" in href_list) + glassdoor = !glassdoor + + if("cancel" in href_list) + usr << browse(null,"window=airlockmaker") + qdel(linked) + qdel(src) + return + + if("done" in href_list) + usr << browse(null,"window=airlockmaker") + var/turf/t_loc = linked.loc + qdel(linked) + if(!istype(t_loc)) + return + + var/target_type = "/obj/machinery/door/airlock" + if(glassdoor) + if(paintjob != "none") + if(paintjob in list("external","highsecurity","maintenance")) // no glass version + target_type += "/[paintjob]" + else + target_type += "/glass_[paintjob]" + else + target_type += "/glass" + else if(paintjob != "none") + target_type += "/[paintjob]" + var/final = target_type + target_type = text2path(final) + if(!target_type) + to_chat(usr, "Didn't work, contact Sayu with this: [final]") + usr << browse(null,"window=airlockmaker") + return + + var/obj/machinery/door/D = new target_type(t_loc) + + D.name = doorname + + if(access_used.len == 0) + D.req_access = null + D.req_one_access = null + else if(require_all) + D.req_access = access_used.Copy() + D.req_one_access = null + else + D.req_access = null + D.req_one_access = access_used.Copy() + + return + + interact() +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 15cd346b2d..cf2b867941 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -77,26 +77,26 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) hsbinfo = "
    Sandbox Panel

    " if(admin) hsbinfo += "Administration
    " - hsbinfo += "- Toggle Object Spawning
    " - hsbinfo += "- Toggle Item Spawn Panel Auto-close
    " + hsbinfo += "- Toggle Object Spawning
    " + hsbinfo += "- Toggle Item Spawn Panel Auto-close
    " hsbinfo += "Canister Spawning
    " - hsbinfo += "- Spawn Plasma Canister
    " - hsbinfo += "- Spawn CO2 Canister
    " - hsbinfo += "- Spawn Nitrogen Canister
    " - hsbinfo += "- Spawn N2O Canister
    " + hsbinfo += "- Spawn Plasma Canister
    " + hsbinfo += "- Spawn CO2 Canister
    " + hsbinfo += "- Spawn Nitrogen Canister
    " + hsbinfo += "- Spawn N2O Canister
    " else hsbinfo += "Some item spawning may be disabled by the administrators.
    " hsbinfo += "Only administrators may spawn dangerous canisters.
    " for(var/T in hrefs) var/href = hrefs[T] if(href) - hsbinfo += "- [T]
    " + hsbinfo += "- [T]
    " else hsbinfo += "
    [T]
    " hsbinfo += "
    " - hsbinfo += "- Spawn Clothing...
    " - hsbinfo += "- Spawn Reagent Container...
    " - hsbinfo += "- Spawn Other Item...

    " + hsbinfo += "- Spawn Clothing...
    " + hsbinfo += "- Spawn Reagent Container...
    " + hsbinfo += "- Spawn Other Item...

    " usr << browse(hsbinfo, "window=hsbpanel") @@ -235,12 +235,12 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) if(!GLOB.hsboxspawn) return if(!clothinfo) - clothinfo = "Clothing (Reagent Containers) (Other Items)

    " + clothinfo = "Clothing (Reagent Containers) (Other Items)

    " var/list/all_items = subtypesof(/obj/item/clothing) for(var/typekey in spawn_forbidden) all_items -= typesof(typekey) for(var/O in reverseRange(all_items)) - clothinfo += "[O]
    " + clothinfo += "[O]
    " usr << browse(clothinfo,"window=sandbox") @@ -249,12 +249,12 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) if(!GLOB.hsboxspawn) return if(!reaginfo) - reaginfo = "Reagent Containers (Clothing) (Other Items)

    " + reaginfo = "Reagent Containers (Clothing) (Other Items)

    " var/list/all_items = subtypesof(/obj/item/reagent_containers) for(var/typekey in spawn_forbidden) all_items -= typesof(typekey) for(var/O in reverseRange(all_items)) - reaginfo += "[O]
    " + reaginfo += "[O]
    " usr << browse(reaginfo,"window=sandbox") @@ -263,13 +263,13 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) if(!GLOB.hsboxspawn) return if(!objinfo) - objinfo = "Other Items (Clothing) (Reagent Containers)

    " + objinfo = "Other Items (Clothing) (Reagent Containers)

    " var/list/all_items = subtypesof(/obj/item/) - typesof(/obj/item/clothing) - typesof(/obj/item/reagent_containers) for(var/typekey in spawn_forbidden) all_items -= typesof(typekey) for(var/O in reverseRange(all_items)) - objinfo += "[O]
    " + objinfo += "[O]
    " usr << browse(objinfo,"window=sandbox") diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 776b5d6981..484961b6f8 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -212,7 +212,7 @@ /proc/makeNewConstruct(mob/living/simple_animal/hostile/construct/ctype, mob/target, mob/stoner = null, cultoverride = 0, loc_override = null) var/mob/living/simple_animal/hostile/construct/newstruct = new ctype((loc_override) ? (loc_override) : (get_turf(target))) if(stoner) - newstruct.faction |= "\ref[stoner]" + newstruct.faction |= "[REF(stoner)]" newstruct.master = stoner var/datum/action/innate/seek_master/SM = new() SM.Grant(newstruct) @@ -244,7 +244,7 @@ S.key = T.key S.language_holder = U.language_holder.copy(S) if(U) - S.faction |= "\ref[U]" //Add the master as a faction, allowing inter-mob cooperation + S.faction |= "[REF(U)]" //Add the master as a faction, allowing inter-mob cooperation if(U && iscultist(U)) SSticker.mode.add_cultist(S.mind, 0) S.cancel_camera() diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 0838bfeed6..daa45caf72 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -652,7 +652,7 @@ var/list/cat_dat = list() for(var/category in categories) cat_dat[category] = "
    " - dat += "
  • [category]
  • " + dat += "
  • [category]
  • " dat += "
  • Points remaining : [uses]
  • " dat += "" @@ -663,11 +663,11 @@ E = entries[i] spell_info += E.GetInfo() if(E.CanBuy(user,src)) - spell_info+= "[E.buy_word]
    " + spell_info+= "[E.buy_word]
    " else spell_info+= "Can't [E.buy_word]
    " if(E.CanRefund(user,src)) - spell_info+= "Refund
    " + spell_info+= "Refund
    " spell_info += "
    " if(cat_dat[E.category]) cat_dat[E.category] += spell_info diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 673591aef1..84a18e3352 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -107,8 +107,8 @@ GLOBAL_LIST_EMPTY(announcement_systems) return - var/contents = "Arrival Announcement: ([(arrivalToggle ? "On" : "Off")])
    \n[arrival]

    \n" - contents += "Departmental Head Announcement: ([(newheadToggle ? "On" : "Off")])
    \n[newhead]

    \n" + var/contents = "Arrival Announcement: ([(arrivalToggle ? "On" : "Off")])
    \n[arrival]

    \n" + contents += "Departmental Head Announcement: ([(newheadToggle ? "On" : "Off")])
    \n[newhead]

    \n" var/datum/browser/popup = new(user, "announcement_config", "Automated Announcement Configuration", 370, 220) popup.set_content(contents) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 44c6812d05..d783be292e 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -240,8 +240,8 @@ var/dat = "

    Autolathe Menu:


    " dat += materials_printout() - dat += "
    \ - \ + dat += "\ + \ \ \ \ @@ -256,14 +256,14 @@ dat += "" line_length = 1 - dat += "[C]" + dat += "[C]" line_length++ dat += "
    " return dat /obj/machinery/autolathe/proc/category_win(mob/user,selected_category) - var/dat = "Return to main menu" + var/dat = "Return to main menu" dat += "

    Browsing [selected_category]:


    " dat += materials_printout() @@ -275,22 +275,22 @@ if(disabled || !can_build(D)) dat += "[D.name]" else - dat += "[D.name]" + dat += "[D.name]" if(ispath(D.build_path, /obj/item/stack)) GET_COMPONENT(materials, /datum/component/material_container) var/max_multiplier = min(D.maxstack, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS]?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY) if (max_multiplier>10 && !disabled) - dat += " x10" + dat += " x10" if (max_multiplier>25 && !disabled) - dat += " x25" + dat += " x25" if(max_multiplier > 0 && !disabled) - dat += " x[max_multiplier]" + dat += " x[max_multiplier]" else if(!disabled && can_build(D, 5)) - dat += " x5" + dat += " x5" if(!disabled && can_build(D, 10)) - dat += " x10" + dat += " x10" dat += "[get_design_cost(D)]
    " @@ -298,7 +298,7 @@ return dat /obj/machinery/autolathe/proc/search_win(mob/user) - var/dat = "Return to main menu" + var/dat = "Return to main menu" dat += "

    Search results:


    " dat += materials_printout() @@ -307,17 +307,17 @@ if(disabled || !can_build(D)) dat += "[D.name]" else - dat += "[D.name]" + dat += "[D.name]" if(ispath(D.build_path, /obj/item/stack)) GET_COMPONENT(materials, /datum/component/material_container) var/max_multiplier = min(D.maxstack, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS]?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY) if (max_multiplier>10 && !disabled) - dat += " x10" + dat += " x10" if (max_multiplier>25 && !disabled) - dat += " x25" + dat += " x25" if(max_multiplier > 0 && !disabled) - dat += " x[max_multiplier]" + dat += " x[max_multiplier]" dat += "[get_design_cost(D)]
    " diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm index 9d446aa77c..b8d20b0c59 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -62,11 +62,11 @@ var/dat = "[world.name] secure vault. Authorized personnel only.
    " dat += "Current Balance: [SSshuttle.points] credits.
    " if(!siphoning) - dat += "Siphon Credits
    " + dat += "Siphon Credits
    " else - dat += "Halt Credit Siphon
    " + dat += "Halt Credit Siphon
    " - dat += "Close" + dat += "Close" var/datum/browser/popup = new(user, "computer", "Bank Vault", 300, 200) popup.set_content("
    [dat]
    ") diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 80d50cfb17..17a65f7033 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -203,7 +203,7 @@ if(U.name == "Unknown") to_chat(AI, "[U] holds \a [itemname] up to one of your cameras ...") else - to_chat(AI, "[U] holds \a [itemname] up to one of your cameras ...") + to_chat(AI, "[U] holds \a [itemname] up to one of your cameras ...") AI.last_paper_seen = "[itemname][info]" else if (O.client && O.client.eye == src) to_chat(O, "[U] holds \a [itemname] up to one of the cameras ...") diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index 6ac7e1249d..68b3f284e4 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -32,7 +32,7 @@ if (detectTime == 0) detectTime = world.time // start the clock var/list/targets = getTargetList() - targets |= "\ref[target]" + targets |= "[REF(target)]" return 1 /obj/machinery/camera/Destroy() @@ -43,7 +43,7 @@ /obj/machinery/camera/proc/lostTarget(mob/target) var/list/targets = getTargetList() - targets -= "\ref[target]" + targets -= "[REF(target)]" if (targets.len == 0) cancelAlarm() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index cb5ea9df76..865a7f4efa 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -307,7 +307,7 @@ comp.AttachCloner(src) else P.buffer = src - to_chat(user, "-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-") + to_chat(user, "-% Successfully stored [REF(P.buffer)] [P.buffer.name] in buffer %-") return var/mob/living/mob_occupant = occupant diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index b590763ffe..920dd118c5 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -61,10 +61,10 @@ else dat += "AI functional" if (!src.active) - dat += {"

    Begin Reconstruction"} + dat += {"

    Begin Reconstruction"} else dat += "

    Reconstruction in process, please wait.
    " - dat += {"
    Close"} + dat += {"
    Close"} var/datum/browser/popup = new(user, "computer", "AI System Integrity Restorer", 400, 500) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index c93c96429c..aa644eb738 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -9,7 +9,7 @@ var/list/apcs //APCs the computer has access to var/mob/living/operator //Who's operating the computer right now var/obj/machinery/power/apc/active_apc //The APC we're using right now - var/list/filters //For sorting the results + var/list/result_filters //For sorting the results var/checking_logs = 0 var/list/logs var/authenticated = 0 @@ -18,7 +18,7 @@ /obj/machinery/computer/apc_control/Initialize() . = ..() apcs = list() //To avoid BYOND making the list run through a ton of procs - filters = list("Name" = null, "Charge Above" = null, "Charge Below" = null, "Responsive" = null) + result_filters = list("Name" = null, "Charge Above" = null, "Charge Below" = null, "Responsive" = null) /obj/machinery/computer/apc_control/process() apcs = list() //Clear the list every tick @@ -52,28 +52,28 @@ if(!checking_logs) dat += "Logged in as [auth_id].

    " dat += "Filters
    " - dat += "Name: [filters["Name"] ? filters["Name"] : "None set"]
    " - dat += "Charge: \>[filters["Charge Above"] ? filters["Charge Above"] : "NaN"]% and \<[filters["Charge Below"] ? filters["Charge Below"] : "NaN"]%
    " - dat += "Accessible: [filters["Responsive"] ? "Non-Responsive Only" : "All"]

    " + dat += "Name: [result_filters["Name"] ? result_filters["Name"] : "None set"]
    " + dat += "Charge: \>[result_filters["Charge Above"] ? result_filters["Charge Above"] : "NaN"]% and \<[result_filters["Charge Below"] ? result_filters["Charge Below"] : "NaN"]%
    " + dat += "Accessible: [result_filters["Responsive"] ? "Non-Responsive Only" : "All"]

    " for(var/A in apcs) var/obj/machinery/power/apc/APC = apcs[A] - if(filters["Name"] && !findtext(APC.name, filters["Name"]) && !findtext(APC.area.name, filters["Name"])) + if(result_filters["Name"] && !findtext(APC.name, result_filters["Name"]) && !findtext(APC.area.name, result_filters["Name"])) continue - if(filters["Charge Above"] && (APC.cell.charge / APC.cell.maxcharge) < filters["Charge Above"] / 100) + if(result_filters["Charge Above"] && (APC.cell.charge / APC.cell.maxcharge) < result_filters["Charge Above"] / 100) continue - if(filters["Charge Below"] && (APC.cell.charge / APC.cell.maxcharge) > filters["Charge Below"] / 100) + if(result_filters["Charge Below"] && (APC.cell.charge / APC.cell.maxcharge) > result_filters["Charge Below"] / 100) continue - if(filters["Responsive"] && !APC.aidisabled) + if(result_filters["Responsive"] && !APC.aidisabled) continue - dat += "[A]
    \ + dat += "[A]
    \ Charge: [DisplayPower(APC.cell.charge)] / [DisplayPower(APC.cell.maxcharge)] ([round((APC.cell.charge / APC.cell.maxcharge) * 100)]%)
    \ Area: [APC.area]
    \ [APC.aidisabled || APC.panel_open ? "APC does not respond to interface query." : "APC responds to interface query."]

    " - dat += "Check Logs
    " - dat += "Log Out
    " + dat += "Check Logs
    " + dat += "Log Out
    " if(emagged) dat += "WARNING: Logging functionality partially disabled from outside source.
    " - dat += "Restore logging functionality?
    " + dat += "Restore logging functionality?
    " else if(logs.len) for(var/entry in logs) @@ -81,11 +81,11 @@ else dat += "No activity has been recorded at this time.
    " if(emagged) - dat += "@#%! CLEAR LOGS" - dat += "Return" + dat += "@#%! CLEAR LOGS" + dat += "Return" operator = user else - dat = "Please swipe a valid ID to log in..." + dat = "Please swipe a valid ID to log in..." var/datum/browser/popup = new(user, "apc_control", name, 600, 400) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) @@ -153,7 +153,7 @@ return log_activity("changed name filter to \"[new_filter]\"") playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - filters["Name"] = new_filter + result_filters["Name"] = new_filter if(href_list["above_filter"]) playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) var/new_filter = input(usr, "Enter a percentage from 1-100 to sort by (greater than).", name) as null|num @@ -163,7 +163,7 @@ if(new_filter) new_filter = Clamp(new_filter, 0, 100) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - filters["Charge Above"] = new_filter + result_filters["Charge Above"] = new_filter if(href_list["below_filter"]) playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) var/new_filter = input(usr, "Enter a percentage from 1-100 to sort by (lesser than).", name) as null|num @@ -173,13 +173,13 @@ if(new_filter) new_filter = Clamp(new_filter, 0, 100) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - filters["Charge Below"] = new_filter + result_filters["Charge Below"] = new_filter if(href_list["access_filter"]) - if(isnull(filters["Responsive"])) - filters["Responsive"] = 1 + if(isnull(result_filters["Responsive"])) + result_filters["Responsive"] = 1 log_activity("sorted by non-responsive APCs only") else - filters["Responsive"] = !filters["Responsive"] + result_filters["Responsive"] = !result_filters["Responsive"] log_activity("sorted by all APCs") playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) if(href_list["check_logs"]) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 7748022da1..4203971522 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -134,18 +134,18 @@ if(..()) return user.set_machine(src) - var/dat = "Close" + var/dat = "Close" dat += "

    [enemy_name]

    " dat += "

    [temp]

    " dat += "
    Health: [player_hp] | Magic: [player_mp] | Enemy Health: [enemy_hp]
    " if (gameover) - dat += "
    New Game" + dat += "
    New Game" else - dat += "
    Attack | " - dat += "Heal | " - dat += "Recharge Power" + dat += "
    Attack | " + dat += "Heal | " + dat += "Recharge Power" dat += "
    " var/datum/browser/popup = new(user, "arcade", "Space Villian 2000") @@ -439,7 +439,7 @@ name = "The Orion Trail" desc = "Learn how our ancestors got to Orion, and have fun in the process!" - dat += "

    May They Rest In Peace

    " + dat += "

    May They Rest In Peace

    " else if(event) dat = eventdat else if(gameStatus == ORION_STATUS_NORMAL) @@ -452,16 +452,16 @@ dat += "
    Food: [food] | Fuel: [fuel]" dat += "
    Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" if(turns == 7) - dat += "

    Go Around Continue

    " + dat += "

    Go Around Continue

    " else - dat += "

    Continue

    " - dat += "

    Kill a Crewmember

    " - dat += "

    Close

    " + dat += "

    Continue

    " + dat += "

    Kill a Crewmember

    " + dat += "

    Close

    " else dat = "

    The Orion Trail

    " dat += "

    Experience the journey of your ancestors!



    " - dat += "
    New Game
    " - dat += "

    Close

    " + dat += "
    New Game
    " + dat += "

    Close

    " var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) @@ -769,41 +769,41 @@ eventdat += "
    [deadname] tried to fight back, but was killed." else eventdat += "
    Fortunately, you fended them off without any trouble." - eventdat += "

    Continue

    " - eventdat += "

    Close

    " + eventdat += "

    Continue

    " + eventdat += "

    Close

    " canContinueEvent = 1 if(ORION_TRAIL_FLUX) eventdat += "This region of space is highly turbulent.
    If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies." eventdat += "
    What will you do?" - eventdat += "

    Slow Down Continue

    " - eventdat += "

    Close

    " + eventdat += "

    Slow Down Continue

    " + eventdat += "

    Close

    " if(ORION_TRAIL_ILLNESS) eventdat += "A deadly illness has been contracted!" var/deadname = remove_crewmember() eventdat += "
    [deadname] was killed by the disease." - eventdat += "

    Continue

    " - eventdat += "

    Close

    " + eventdat += "

    Continue

    " + eventdat += "

    Close

    " canContinueEvent = 1 if(ORION_TRAIL_BREAKDOWN) eventdat += "Oh no! The engine has broken down!" eventdat += "
    You can repair it with an engine part, or you can make repairs for 3 days." if(engine >= 1) - eventdat += "

    Use PartWait

    " + eventdat += "

    Use PartWait

    " else - eventdat += "

    Wait

    " - eventdat += "

    Close

    " + eventdat += "

    Wait

    " + eventdat += "

    Close

    " if(ORION_TRAIL_MALFUNCTION) eventdat += "The ship's systems are malfunctioning!" eventdat += "
    You can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI." if(electronics >= 1) - eventdat += "

    Use PartWait

    " + eventdat += "

    Use PartWait

    " else - eventdat += "

    Wait

    " - eventdat += "

    Close

    " + eventdat += "

    Wait

    " + eventdat += "

    Close

    " if(ORION_TRAIL_COLLISION) eventdat += "Something hit us! Looks like there's some hull damage." @@ -818,23 +818,23 @@ eventdat += "
    [deadname] was killed by rapid depressurization." eventdat += "
    You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together." if(hull >= 1) - eventdat += "

    Use PartWait

    " + eventdat += "

    Use PartWait

    " else - eventdat += "

    Wait

    " - eventdat += "

    Close

    " + eventdat += "

    Wait

    " + eventdat += "

    Close

    " if(ORION_TRAIL_BLACKHOLE) eventdat += "You were swept away into the black hole." - eventdat += "

    Oh...

    " - eventdat += "

    Close

    " + eventdat += "

    Oh...

    " + eventdat += "

    Close

    " settlers = list() if(ORION_TRAIL_LING) eventdat += "Strange reports warn of changelings infiltrating crews on trips to Orion..." if(settlers.len <= 2) eventdat += "
    Your crew's chance of reaching Orion is so slim the changelings likely avoided your ship..." - eventdat += "

    Continue

    " - eventdat += "

    Close

    " + eventdat += "

    Continue

    " + eventdat += "

    Close

    " if(prob(10)) // "likely", I didn't say it was guaranteed! lings_aboard = min(++lings_aboard,2) else @@ -844,9 +844,9 @@ else if(prob(70)) lings_aboard = min(++lings_aboard,2) - eventdat += "

    Kill a Crewmember

    " - eventdat += "

    Risk it

    " - eventdat += "

    Close

    " + eventdat += "

    Kill a Crewmember

    " + eventdat += "

    Risk it

    " + eventdat += "

    Close

    " canContinueEvent = 1 if(ORION_TRAIL_LING_ATTACK) @@ -892,8 +892,8 @@ else lings_aboard = max(0,--lings_aboard) - eventdat += "

    Continue

    " - eventdat += "

    Close

    " + eventdat += "

    Continue

    " + eventdat += "

    Close

    " canContinueEvent = 1 @@ -903,8 +903,8 @@ eventdat += "The spaceport is on high alert! You've been barred from docking by the local authorities after your failed raid." if(last_spaceport_action) eventdat += "
    Last Spaceport Action: [last_spaceport_action]" - eventdat += "

    Depart Spaceport

    " - eventdat += "

    Close

    " + eventdat += "

    Depart Spaceport

    " + eventdat += "

    Close

    " else eventdat += "Your jump into the sector yields a spaceport - a lucky find!" eventdat += "
    This spaceport is home to travellers who failed to reach Orion, but managed to find a different home..." @@ -943,13 +943,13 @@ //Buy crew if(food >= 10 && fuel >= 10) - eventdat += "

    Hire a New Crewmember (-10FU, -10FO)

    " + eventdat += "

    Hire a New Crewmember (-10FU, -10FO)

    " else eventdat += "

    You cannot afford a new crewmember.

    " //Sell crew if(settlers.len > 1) - eventdat += "

    Sell Crew for Fuel and Food (+7FU, +7FO)

    " + eventdat += "

    Sell Crew for Fuel and Food (+7FU, +7FO)

    " else eventdat += "

    You have no other crew to sell.

    " @@ -958,37 +958,37 @@ //Engine parts if(fuel > 5) - eventdat += "

    Buy Engine Parts (-5FU)

    " + eventdat += "

    Buy Engine Parts (-5FU)

    " else eventdat += "

    You cannot afford engine parts." //Hull plates if(fuel > 5) - eventdat += "

    Buy Hull Plates (-5FU)

    " + eventdat += "

    Buy Hull Plates (-5FU)

    " else eventdat += "

    You cannot afford hull plates." //Electronics if(fuel > 5) - eventdat += "

    Buy Spare Electronics (-5FU)

    " + eventdat += "

    Buy Spare Electronics (-5FU)

    " else eventdat += "

    You cannot afford spare electronics." //Trade if(fuel > 5) - eventdat += "

    Trade Fuel for Food (-5FU,+5FO)

    " + eventdat += "

    Trade Fuel for Food (-5FU,+5FO)

    " else eventdat += "

    You don't have 5FU to trade. 5) - eventdat += "

    Trade Food for Fuel (+5FU,-5FO)

    " + eventdat += "

    Trade Food for Fuel (+5FU,-5FO)

    " else eventdat += "

    You don't have 5FO to trade." - dat = "Crew Manifest:
    Please use security record computer to modify entries.

    [crew]Print

    Access ID modification console.
    " + dat = "Crew Manifest:
    Please use security record computer to modify entries.

    [crew]Print

    Access ID modification console.
    " else if(mode == 2) // JOB MANAGEMENT - dat = "Return" + dat = "Return" dat += " || Confirm Identity: " var/S if(scan) S = html_encode(scan.name) else S = "--------" - dat += "[S]" + dat += "[S]" dat += "" dat += "" var/ID @@ -174,7 +174,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) switch(can_open_job(job)) if(1) if(ID) - dat += "Open Position
    " + dat += "Open Position
    " else dat += "Open Position" if(-1) @@ -190,7 +190,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) switch(can_close_job(job)) if(1) if(ID) - dat += "Close Position" + dat += "Close Position" else dat += "Close Position" if(-1) @@ -209,10 +209,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) else if(ID) if(job in SSjob.prioritized_jobs) - dat += "Deprioritize" + dat += "Deprioritize" else if(SSjob.prioritized_jobs.len < 5) - dat += "Prioritize" + dat += "Prioritize" else dat += "Denied" else @@ -247,14 +247,14 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if(!authenticated) header += "
    Please insert the cards into the slots
    " - header += "Target: [target_name]
    " - header += "Confirm Identity: [scan_name]
    " + header += "Target: [target_name]
    " + header += "Confirm Identity: [scan_name]
    " else header += "

    " - header += "Remove [target_name] || " - header += "Remove [scan_name]
    " - header += "Access Crew Manifest
    " - header += "Log Out
    " + header += "Remove [target_name] || " + header += "Remove [scan_name]
    " + header += "Access Crew Manifest
    " + header += "Log Out" header += "
    " @@ -262,7 +262,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/list/alljobs = list("Unassigned") alljobs += (istype(src, /obj/machinery/computer/card/centcom)? get_all_centcom_jobs() : get_all_jobs()) + "Custom" for(var/job in alljobs) - jobs_all += "[replacetext(job, " ", " ")] " //make sure there isn't a line break in the middle of a job + jobs_all += "[replacetext(job, " ", " ")] " //make sure there isn't a line break in the middle of a job var/body @@ -290,8 +290,8 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) allJobsSlot.innerHTML = "show"; } "} - carddesc += "" - carddesc += "" + carddesc += "" + carddesc += "" carddesc += "" carddesc += "registered name:" carddesc += "" @@ -302,16 +302,16 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) else carddesc += "registered_name: [target_owner]" - jobs += "Assignment: [target_rank] (Demote)" + jobs += "Assignment: [target_rank] (Demote)" var/accesses = "" if(istype(src, /obj/machinery/computer/card/centcom)) accesses += "
    Central Command:
    " for(var/A in get_all_centcom_access()) if(A in modify.access) - accesses += "[replacetext(get_centcom_access_desc(A), " ", " ")] " + accesses += "[replacetext(get_centcom_access_desc(A), " ", " ")] " else - accesses += "[replacetext(get_centcom_access_desc(A), " ", " ")] " + accesses += "[replacetext(get_centcom_access_desc(A), " ", " ")] " else accesses += "
    Access
    " accesses += "
    JobSlotsOpen jobClose jobPrioritize
    " @@ -327,19 +327,19 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) accesses += "" accesses += "
    " for(var/A in get_region_accesses(i)) if(A in modify.access) - accesses += "[replacetext(get_access_desc(A), " ", " ")] " + accesses += "[replacetext(get_access_desc(A), " ", " ")] " else - accesses += "[replacetext(get_access_desc(A), " ", " ")] " + accesses += "[replacetext(get_access_desc(A), " ", " ")] " accesses += "
    " accesses += "
    " body = "[carddesc]
    [jobs]

    [accesses]" //CHECK THIS else - body = "{Log in}


    " - body += "Access Crew Manifest" + body = "{Log in}

    " + body += "Access Crew Manifest" if(!target_dept) - body += "

    Job Management" + body += "

    Job Management" dat = "[header][body]

    " var/datum/browser/popup = new(user, "id_com", src.name, 900, 620) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index ee316b3eed..ba11b0fa8f 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -138,7 +138,7 @@ AttachCloner(pod) else P.buffer = src - to_chat(user, "-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-") + to_chat(user, "-% Successfully stored [REF(P.buffer)] [P.buffer.name] in buffer %-") return else return ..() @@ -158,13 +158,13 @@ updatemodules(TRUE) var/dat = "" - dat += "Refresh" + dat += "Refresh" if(scanner && HasEfficientPod() && scanner.scan_level > 2) if(!autoprocess) - dat += "Autoprocess" + dat += "Autoprocess" else - dat += "Stop autoprocess" + dat += "Stop autoprocess" else dat += "Autoprocess" dat += "

    Cloning Pod Status

    " @@ -175,7 +175,7 @@ // Modules if (isnull(src.scanner) || !LAZYLEN(pods)) dat += "

    Modules

    " - //dat += "Reload Modules" + //dat += "Reload Modules" if (isnull(src.scanner)) dat += "ERROR: No Scanner detected!
    " if (!LAZYLEN(pods)) @@ -200,36 +200,36 @@ dat += "
    " if(scanner_occupant) - dat += "Start Scan" - dat += "
    [src.scanner.locked ? "Unlock Scanner" : "Lock Scanner"]" + dat += "Start Scan" + dat += "
    [src.scanner.locked ? "Unlock Scanner" : "Lock Scanner"]" else dat += "Start Scan" // Database dat += "

    Database Functions

    " if (src.records.len && src.records.len > 0) - dat += "View Records ([src.records.len])
    " + dat += "View Records ([src.records.len])
    " else dat += "View Records (0)
    " if (src.diskette) - dat += "Eject Disk
    " + dat += "Eject Disk
    " if(2) dat += "

    Current records

    " - dat += "<< Back

    " + dat += "<< Back

    " for(var/datum/data/record/R in records) - dat += "

    [R.fields["name"]]

    Scan ID [R.fields["id"]] View Record" + dat += "

    [R.fields["name"]]

    Scan ID [R.fields["id"]] View Record" if(3) dat += "

    Selected Record

    " - dat += "<< Back
    " + dat += "<< Back
    " if (!src.active_record) dat += "Record not found." else dat += "

    [src.active_record.fields["name"]]

    " - dat += "Scan ID [src.active_record.fields["id"]] Clone
    " + dat += "Scan ID [src.active_record.fields["id"]] Clone
    " var/obj/item/implant/health/H = locate(src.active_record.fields["imp"]) @@ -253,12 +253,12 @@ if(diskette.fields["SE"]) L += "Structural Enzymes" dat += english_list(L, "Empty", " + ", " + ") - dat += "
    Load from Disk" + dat += "
    Load from Disk" - dat += "
    Save to Disk" + dat += "
    Save to Disk" dat += "
    " - dat += "Delete Record" + dat += "Delete Record" if(4) if (!src.active_record) @@ -266,8 +266,8 @@ dat = "[src.temp]
    " dat += "

    Confirm Record Deletion

    " - dat += "Scan card to confirm.
    " - dat += "Cancel" + dat += "Scan card to confirm.
    " + dat += "Cancel" var/datum/browser/popup = new(user, "cloning", "Cloning System Control") @@ -484,7 +484,7 @@ R.fields["factions"] = mob_occupant.faction if (!isnull(mob_occupant.mind)) //Save that mind so traitors can continue traitoring after cloning. - R.fields["mind"] = "\ref[mob_occupant.mind]" + R.fields["mind"] = "[REF(mob_occupant.mind)]" //Add an implant if needed var/obj/item/implant/health/imp @@ -494,7 +494,7 @@ if(!imp) imp = new /obj/item/implant/health(mob_occupant) imp.implant(mob_occupant) - R.fields["imp"] = "\ref[imp]" + R.fields["imp"] = "[REF(imp)]" src.records += R scantemp = "Subject successfully scanned." diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 77f6e08c7d..f5c4f2c146 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -449,33 +449,38 @@ dat += "Unable to trace most recent shuttle call/recall signal.
    " dat += "Logged in as: [auth_id]" dat += "
    " - dat += "
    \[ Log Out \]
    " + dat += "
    \[ Log Out \]
    " dat += "
    General Functions" - dat += "
    \[ Message List \]" + dat += "
    \[ Message List \]" switch(SSshuttle.emergency.mode) if(SHUTTLE_IDLE, SHUTTLE_RECALL) - dat += "
    \[ Call Emergency Shuttle \]" + dat += "
    \[ Call Emergency Shuttle \]" else - dat += "
    \[ Cancel Shuttle Call \]" + dat += "
    \[ Cancel Shuttle Call \]" +<<<<<<< HEAD dat += "
    \[ Set Status Display \]" if (src.authenticated==2) +======= + dat += "
    \[ Set Status Display \]" + if (authenticated==2) +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental dat += "

    Captain Functions" - dat += "
    \[ Make a Captain's Announcement \]" + dat += "
    \[ Make a Captain's Announcement \]" if(CONFIG_GET(string/cross_server_address)) - dat += "
    \[ Send a message to an allied station \]" + dat += "
    \[ Send a message to an allied station \]" if(SSmapping.config.allow_custom_shuttles == "yes") - dat += "
    \[ Purchase Shuttle \]" - dat += "
    \[ Change Alert Level \]" - dat += "
    \[ Emergency Maintenance Access \]" - dat += "
    \[ Request Nuclear Authentication Codes \]" + dat += "
    \[ Purchase Shuttle \]" + dat += "
    \[ Change Alert Level \]" + dat += "
    \[ Emergency Maintenance Access \]" + dat += "
    \[ Request Nuclear Authentication Codes \]" if(!emagged) - dat += "
    \[ Send Message to CentCom \]" + dat += "
    \[ Send Message to CentCom \]" else - dat += "
    \[ Send Message to \[UNKNOWN\] \]" - dat += "
    \[ Restore Backup Routing Data \]" + dat += "
    \[ Send Message to \[UNKNOWN\] \]" + dat += "
    \[ Restore Backup Routing Data \]" else - dat += "
    \[ Log In \]" + dat += "
    \[ Log In \]" if(STATE_CALLSHUTTLE) dat += get_call_shuttle_form() playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) @@ -484,6 +489,7 @@ playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) if(STATE_MESSAGELIST) dat += "Messages:" +<<<<<<< HEAD for(var/i = 1; i<=src.messagetitle.len; i++) dat += "
    [src.messagetitle[i]]" playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) @@ -492,48 +498,70 @@ dat += "[src.messagetitle[src.currmsg]]

    [src.messagetext[src.currmsg]]" if (src.authenticated) dat += "

    \[ Delete \]" +======= + for(var/i in 1 to messages.len) + var/datum/comm_message/M = messages[i] + dat += "
    [M.title]" + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + if(STATE_VIEWMESSAGE) + if (currmsg) + dat += "[currmsg.title]

    [currmsg.content]" + if(!currmsg.answered && currmsg.possible_answers.len) + for(var/i in 1 to currmsg.possible_answers.len) + var/answer = currmsg.possible_answers[i] + dat += "
    \[ Answer : [answer] \]" + else if(currmsg.answered) + var/answered = currmsg.possible_answers[currmsg.answered] + dat += "
    Archived Answer : [answered]" + dat += "

    \[ Delete \]" +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental else src.state = STATE_MESSAGELIST src.attack_hand(user) return if(STATE_DELMESSAGE) +<<<<<<< HEAD if (src.currmsg) dat += "Are you sure you want to delete this message? \[ OK | Cancel \]" +======= + if (currmsg) + dat += "Are you sure you want to delete this message? \[ OK | Cancel \]" +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental else src.state = STATE_MESSAGELIST src.attack_hand(user) return if(STATE_STATUSDISPLAY) dat += "Set Status Displays
    " - dat += "\[ Clear \]
    " - dat += "\[ Shuttle ETA \]
    " - dat += "\[ Message \]" - dat += "
    " - dat += "\[ Alert: None |" - dat += " Red Alert |" - dat += " Lockdown |" - dat += " Biohazard \]

    " + dat += "\[ Clear \]
    " + dat += "\[ Shuttle ETA \]
    " + dat += "\[ Message \]" + dat += "
    " + dat += "\[ Alert: None |" + dat += " Red Alert |" + dat += " Lockdown |" + dat += " Biohazard \]

    " playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) if(STATE_ALERT_LEVEL) dat += "Current alert level: [get_security_level()]
    " if(GLOB.security_level == SEC_LEVEL_DELTA) dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate." else - dat += "Blue
    " - dat += "Green" + dat += "Blue
    " + dat += "Green" if(STATE_CONFIRM_LEVEL) dat += "Current alert level: [get_security_level()]
    " dat += "Confirm the change to: [num2seclevel(tmp_alertlevel)]
    " - dat += "Swipe ID to confirm change.
    " + dat += "Swipe ID to confirm change.
    " if(STATE_TOGGLE_EMERGENCY) playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) if(GLOB.emergency_access == 1) dat += "Emergency Maintenance Access is currently ENABLED" - dat += "
    Restore maintenance access restrictions?
    \[ OK | Cancel \]" + dat += "
    Restore maintenance access restrictions?
    \[ OK | Cancel \]" else dat += "Emergency Maintenance Access is currently DISABLED" - dat += "
    Lift access restrictions on maintenance and external airlocks?
    \[ OK | Cancel \]" + dat += "
    Lift access restrictions on maintenance and external airlocks?
    \[ OK | Cancel \]" if(STATE_PURCHASE) dat += "Budget: [SSshuttle.points] Credits.
    " @@ -544,9 +572,13 @@ dat += "[S.description]
    " if(S.prerequisites) dat += "Prerequisites: [S.prerequisites]
    " - dat += "(Purchase)

    " + dat += "(Purchase)

    " +<<<<<<< HEAD dat += "

    \[ [(src.state != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" +======= + dat += "

    \[ [(state != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental popup.set_content(dat) popup.open() @@ -573,8 +605,8 @@ /obj/machinery/computer/communications/proc/get_call_shuttle_form(ai_interface = 0) var/form_id = "callshuttle" var/dat = get_javascript_header(form_id) - dat += "" - dat += "" + dat += "" + dat += "" dat += "" dat += "Nature of emergency:
    " dat += "
    Are you sure you want to call the shuttle? \[ Call \]" @@ -583,8 +615,8 @@ /obj/machinery/computer/communications/proc/get_cancel_shuttle_form() var/form_id = "cancelshuttle" var/dat = get_javascript_header(form_id) - dat += "" - dat += "" + dat += "" + dat += "" dat += "" dat += "
    Are you sure you want to cancel the shuttle? \[ Cancel \]" @@ -604,31 +636,53 @@ else dat += "Current login: None" dat += "

    General Functions" - dat += "
    \[ Message List \]" + dat += "
    \[ Message List \]" if(SSshuttle.emergency.mode == SHUTTLE_IDLE) - dat += "
    \[ Call Emergency Shuttle \]" - dat += "
    \[ Set Status Display \]" + dat += "
    \[ Call Emergency Shuttle \]" + dat += "
    \[ Set Status Display \]" dat += "

    Special Functions" - dat += "
    \[ Make an Announcement \]" - dat += "
    \[ Change Alert Level \]" - dat += "
    \[ Emergency Maintenance Access \]" + dat += "
    \[ Make an Announcement \]" + dat += "
    \[ Change Alert Level \]" + dat += "
    \[ Emergency Maintenance Access \]" if(STATE_CALLSHUTTLE) dat += get_call_shuttle_form(1) if(STATE_MESSAGELIST) dat += "Messages:" +<<<<<<< HEAD for(var/i = 1; i<=src.messagetitle.len; i++) dat += "
    [src.messagetitle[i]]" if(STATE_VIEWMESSAGE) if (src.aicurrmsg) dat += "[src.messagetitle[src.aicurrmsg]]

    [src.messagetext[src.aicurrmsg]]" dat += "

    \[ Delete \]" +======= + for(var/i in 1 to messages.len) + var/datum/comm_message/M = messages[i] + dat += "
    [M.title]" + if(STATE_VIEWMESSAGE) + if (aicurrmsg) + dat += "[aicurrmsg.title]

    [aicurrmsg.content]" + if(!aicurrmsg.answered && aicurrmsg.possible_answers.len) + for(var/i in 1 to aicurrmsg.possible_answers.len) + var/answer = aicurrmsg.possible_answers[i] + dat += "
    \[ Answer : [answer] \]" + else if(aicurrmsg.answered) + var/answered = aicurrmsg.possible_answers[aicurrmsg.answered] + dat += "
    Archived Answer : [answered]" + dat += "

    \[ Delete \]" +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental else src.aistate = STATE_MESSAGELIST src.attack_hand(user) return null if(STATE_DELMESSAGE) +<<<<<<< HEAD if(src.aicurrmsg) dat += "Are you sure you want to delete this message? \[ OK | Cancel \]" +======= + if(aicurrmsg) + dat += "Are you sure you want to delete this message? \[ OK | Cancel \]" +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental else src.aistate = STATE_MESSAGELIST src.attack_hand(user) @@ -636,33 +690,37 @@ if(STATE_STATUSDISPLAY) dat += "Set Status Displays
    " - dat += "\[ Clear \]
    " - dat += "\[ Shuttle ETA \]
    " - dat += "\[ Message \]" - dat += "
    " - dat += "\[ Alert: None |" - dat += " Red Alert |" - dat += " Lockdown |" - dat += " Biohazard \]

    " + dat += "\[ Clear \]
    " + dat += "\[ Shuttle ETA \]
    " + dat += "\[ Message \]" + dat += "
    " + dat += "\[ Alert: None |" + dat += " Red Alert |" + dat += " Lockdown |" + dat += " Biohazard \]

    " if(STATE_ALERT_LEVEL) dat += "Current alert level: [get_security_level()]
    " if(GLOB.security_level == SEC_LEVEL_DELTA) dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate." else - dat += "Blue
    " - dat += "Green" + dat += "Blue
    " + dat += "Green" if(STATE_TOGGLE_EMERGENCY) if(GLOB.emergency_access == 1) dat += "Emergency Maintenance Access is currently ENABLED" - dat += "
    Restore maintenance access restrictions?
    \[ OK | Cancel \]" + dat += "
    Restore maintenance access restrictions?
    \[ OK | Cancel \]" else dat += "Emergency Maintenance Access is currently DISABLED" - dat += "
    Lift access restrictions on maintenance and external airlocks?
    \[ OK | Cancel \]" + dat += "
    Lift access restrictions on maintenance and external airlocks?
    \[ OK | Cancel \]" +<<<<<<< HEAD dat += "

    \[ [(src.aistate != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" +======= + dat += "

    \[ [(aistate != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental return dat /obj/machinery/computer/communications/proc/make_announcement(mob/living/user, is_silicon) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index c540b51560..8e1447285c 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -143,27 +143,27 @@ status += "
    Pulse Duration:
    [radduration]
    " status += "
      \> Accuracy:
    [chance_to_hit]
    " status += "
    " // Close statusDisplay div - var/buttons = "Scan " + var/buttons = "Scan " if(connected) - buttons += " [connected.state_open ? "Close" : "Open"] Scanner " + buttons += " [connected.state_open ? "Close" : "Open"] Scanner " if (connected.state_open) buttons += "[connected.locked ? "Unlock" : "Lock"] Scanner " else - buttons += "[connected.locked ? "Unlock" : "Lock"] Scanner " + buttons += "[connected.locked ? "Unlock" : "Lock"] Scanner " else buttons += "Open Scanner Lock Scanner " if(viable_occupant) - buttons += "Inject Rejuvenators " + buttons += "Inject Rejuvenators " else buttons += "Inject Rejuvenators " if(diskette) - buttons += "Eject Disk " + buttons += "Eject Disk " else buttons += "Eject Disk " if(current_screen == "buffer") - buttons += "Radiation Emitter Menu " + buttons += "Radiation Emitter Menu " else - buttons += "Buffer Menu " + buttons += "Buffer Menu " switch(current_screen) if("working") @@ -182,12 +182,12 @@ if( !buffer_slot || !buffer_slot.len || !buffer_slot["name"] || !((buffer_slot["UI"] && buffer_slot["UE"]) || buffer_slot["SE"]) ) temp_html += "
    \tNo Data" if(viable_occupant) - temp_html += "
    Save to Buffer " + temp_html += "
    Save to Buffer " else temp_html += "
    Save to Buffer " temp_html += "Clear Buffer " if(diskette) - temp_html += "Load from Disk " + temp_html += "Load from Disk " else temp_html += "Load from Disk " temp_html += "Save to Disk " @@ -198,18 +198,18 @@ var/name = buffer_slot["name"] var/label = buffer_slot["label"] var/blood_type = buffer_slot["blood_type"] - temp_html += "
    \tLabel: [label ? label : name]" + temp_html += "
    \tLabel: [label ? label : name]" temp_html += "
    \tSubject: [name]" if(ue && name && blood_type) temp_html += "
    \tBlood Type: [blood_type]" temp_html += "
    \tUE: [ue] " if(viable_occupant) - temp_html += "Occupant " + temp_html += "Occupant " else temp_html += "Occupant" - temp_html += "Occupant:Delayed " + temp_html += "Occupant:Delayed " if(injectorready < world.time) - temp_html += "Injector" + temp_html += "Injector" else temp_html += "Injector" else @@ -218,12 +218,12 @@ if(ui) temp_html += "
    \tUI: [ui] " if(viable_occupant) - temp_html += "Occupant " + temp_html += "Occupant " else temp_html += "Occupant" - temp_html += "Occupant:Delayed " + temp_html += "Occupant:Delayed " if(injectorready < world.time) - temp_html += "Injector" + temp_html += "Injector" else temp_html += "Injector" else @@ -231,38 +231,38 @@ if(ue && name && blood_type && ui) temp_html += "
    \tUI+UE: [ui]/[ue] " if(viable_occupant) - temp_html += "Occupant " + temp_html += "Occupant " else temp_html += "Occupant" - temp_html += "Occupant:Delayed " + temp_html += "Occupant:Delayed " if(injectorready < world.time) - temp_html += "UI+UE Injector" + temp_html += "UI+UE Injector" else temp_html += "UI+UE Injector" if(se) temp_html += "
    \tSE: [se] " if(viable_occupant) - temp_html += "Occupant " + temp_html += "Occupant " else temp_html += "Occupant " - temp_html += "Occupant:Delayed " + temp_html += "Occupant:Delayed " if(injectorready < world.time ) - temp_html += "Injector" + temp_html += "Injector" else temp_html += "Injector" else temp_html += "
    \tSE: No Data" if(viable_occupant) - temp_html += "
    Save to Buffer " + temp_html += "
    Save to Buffer " else temp_html += "
    Save to Buffer " - temp_html += "Clear Buffer " + temp_html += "Clear Buffer " if(diskette) - temp_html += "Load from Disk " + temp_html += "Load from Disk " else temp_html += "Load from Disk " if(diskette && !diskette.read_only) - temp_html += "Save to Disk " + temp_html += "Save to Disk " else temp_html += "Save to Disk " else @@ -270,8 +270,8 @@ temp_html += buttons temp_html += "

    Radiation Emitter Menu

    " - temp_html += "-- Output Level ++" - temp_html += "
    -- Pulse Duration ++" + temp_html += "-- Output Level ++" + temp_html += "
    -- Pulse Duration ++" temp_html += "

    Irradiate Subject

    " temp_html += "
    Unique Identifier:
    " @@ -281,7 +281,7 @@ temp_html += "
    1
    " var/len = length(viable_occupant.dna.uni_identity) for(var/i=1, i<=len, i++) - temp_html += "[copytext(viable_occupant.dna.uni_identity,i,i+1)]" + temp_html += "[copytext(viable_occupant.dna.uni_identity,i,i+1)]" if ((i % max_line_len) == 0) temp_html += "
    " if((i % DNA_BLOCK_SIZE) == 0 && i < len) @@ -295,7 +295,7 @@ temp_html += "
    1
    " var/len = length(viable_occupant.dna.struc_enzymes) for(var/i=1, i<=len, i++) - temp_html += "[copytext(viable_occupant.dna.struc_enzymes,i,i+1)]" + temp_html += "[copytext(viable_occupant.dna.struc_enzymes,i,i+1)]" if ((i % max_line_len) == 0) temp_html += "
    " if((i % DNA_BLOCK_SIZE) == 0 && i < len) diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm index d6c8d9e7e9..35fcb20bcc 100644 --- a/code/game/machinery/computer/launchpad_control.dm +++ b/code/game/machinery/computer/launchpad_control.dm @@ -60,7 +60,7 @@ if(pad.stat & NOPOWER) t+= "[pad.display_name]" else - t+= "[pad.display_name]" + t+= "[pad.display_name]" else launchpads -= get_pad(i) t += "
    " @@ -68,24 +68,24 @@ if(current_pad) var/obj/machinery/launchpad/pad = get_pad(current_pad) t += "
    [pad.display_name]
    " - t += "Rename" - t += "Remove

    " - t += "O" //up-left - t += "^" //up - t += "O
    " //up-right - t += "<"//left - t += "R"//reset to 0 - t += ">
    "//right - t += "O"//down-left - t += "v"//down - t += "O
    "//down-right + t += "Rename" + t += "Remove

    " + t += "O" //up-left + t += "^" //up + t += "O
    " //up-right + t += "<"//left + t += "R"//reset to 0 + t += ">
    "//right + t += "O"//down-left + t += "v"//down + t += "O
    "//down-right t += "
    " t += "
    Current offset:

    " t += "
    [abs(pad.y_offset)] [pad.y_offset > 0 ? "N":"S"]

    " t += "
    [abs(pad.x_offset)] [pad.x_offset > 0 ? "E":"W"]

    " - t += "
    Launch" - t += " Pull" + t += "
    Launch" + t += " Pull" var/datum/browser/popup = new(user, "launchpad", name, 300, 500) popup.set_content(t.Join()) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 41b41e536e..4fa3dad179 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -39,21 +39,21 @@ return var/dat if(src.temp) - dat = text("[src.temp]

    Clear Screen") + dat = text("[src.temp]

    Clear Screen") else - dat = text("Confirm Identity: []
    ", src, (src.scan ? text("[]", src.scan.name) : "----------")) + dat = text("Confirm Identity: []
    ", (src.scan ? text("[]", src.scan.name) : "----------")) if(src.authenticated) switch(src.screen) if(1) dat += {" -Search Records -
    List Records +Search Records +
    List Records
    -
    Virus Database -
    Medbot Tracking +
    Virus Database +
    Medbot Tracking
    -
    Record Maintenance -
    {Log Out}
    +
    Record Maintenance +
    {Log Out}
    "} if(2) dat += {" @@ -65,10 +65,10 @@ - - + + - +"} @@ -93,7 +93,7 @@ else background = "'background-color:#4F7529;'" - dat += text("", background, src, R.fields["id"], R.fields["name"]) + dat += text("", background, R.fields["id"], R.fields["name"]) dat += text("", R.fields["id"]) dat += text("", R.fields["fingerprint"], b_dna) dat += text("", blood_type) @@ -102,11 +102,11 @@ dat += "
    NameIDNameID Fingerprints (F) | DNA (D)Blood TypeBlood Type Physical Status Mental Status
    []
    [][]F: []
    D: []
    []

    " // if(GLOB.data_core.general) // for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) -// dat += "[R.fields["id"]]: [R.fields["name"]]
    " +// dat += "
    [R.fields["id"]]: [R.fields["name"]]
    " // //Foreach goto(132) - dat += text("
    Back", src) + dat += "
    Back" if(3) - dat += text("Records Maintenance
    \nBackup To Disk
    \nUpload From Disk
    \nDelete All Records
    \n
    \nBack", src, src, src, src) + dat += "Records Maintenance
    \nBackup To Disk
    \nUpload From Disk
    \nDelete All Records
    \n
    \nBack" if(4) dat += "" @@ -118,45 +118,45 @@ var/obj/item/photo/P2 = active1.fields["photo_side"] user << browse_rsc(P2.img, "photo_side") dat += "" - dat += "" - dat += "" + dat += "" + dat += "" dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" else dat += "" dat += "" if(active2 in GLOB.data_core.medical) - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" //(per disease info placed in log/comment section) - dat += "" - dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" //(per disease info placed in log/comment section) + dat += "" + dat += "" dat += "" var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) - dat += "" + dat += "" counter++ - dat += "" + dat += "" - dat += "" + dat += "" else dat += "" - dat += "" - dat += "" - dat += "" + dat += "" + dat += "" + dat += "" dat += "
    Medical Record
    Name:[active1.fields["name"]]
    ID:[active1.fields["id"]]
    Sex: [active1.fields["sex"]] 
    Age: [active1.fields["age"]] 
    Species: [active1.fields["species"]] 
    Fingerprint: [active1.fields["fingerprint"]] 
    Physical Status: [active1.fields["p_stat"]] 
    Mental Status: [active1.fields["m_stat"]] 
    Sex: [active1.fields["sex"]] 
    Age: [active1.fields["age"]] 
    Species: [active1.fields["species"]] 
    Fingerprint: [active1.fields["fingerprint"]] 
    Physical Status: [active1.fields["p_stat"]] 
    Mental Status: [active1.fields["m_stat"]] 
    General Record Lost!

    Medical Data
    Blood Type: [active2.fields["blood_type"]] 
    DNA: [active2.fields["b_dna"]] 

    Minor Disabilities:

     [active2.fields["mi_dis"]] 
    Details: [active2.fields["mi_dis_d"]] 

    Major Disabilities:

     [active2.fields["ma_dis"]] 
    Details: [active2.fields["ma_dis_d"]] 

    Allergies:

     [active2.fields["alg"]] 
    Details: [active2.fields["alg_d"]] 

    Current Diseases:

     [active2.fields["cdi"]] 
    Details: [active2.fields["cdi_d"]] 

    Important Notes:

     [active2.fields["notes"]] 
    Blood Type: [active2.fields["blood_type"]] 
    DNA: [active2.fields["b_dna"]] 

    Minor Disabilities:

     [active2.fields["mi_dis"]] 
    Details: [active2.fields["mi_dis_d"]] 

    Major Disabilities:

     [active2.fields["ma_dis"]] 
    Details: [active2.fields["ma_dis_d"]] 

    Allergies:

     [active2.fields["alg"]] 
    Details: [active2.fields["alg_d"]] 

    Current Diseases:

     [active2.fields["cdi"]] 
    Details: [active2.fields["cdi_d"]] 

    Important Notes:

     [active2.fields["notes"]] 

    Comments/Log
    [active2.fields[text("com_[]", counter)]]
    Delete Entry
    [active2.fields[text("com_[]", counter)]]
    Delete Entry
    Add Entry
    Add Entry

    Delete Record (Medical Only)

    Delete Record (Medical Only)
    Medical Record Lost!

    New Record
    Print Record
    Back

    New Record
    Print Record
    Back
    " if(5) dat += "
    Virus Database
    " @@ -166,11 +166,11 @@ continue // TODO (tm): Add advance diseases to the virus database which no one uses. if(!Dis.desc) continue - dat += "
    [Dis.name]" - dat += "
    Back" + dat += "
    [Dis.name]" + dat += "
    Back" if(6) dat += "
    Medical Robot Monitor
    " - dat += "Back" + dat += "Back" dat += "
    Medical Robots:" var/bdat = null for(var/mob/living/simple_animal/bot/medbot/M in GLOB.living_mob_list) @@ -191,7 +191,7 @@ else else - dat += text("{Log In}", src) + dat += "{Log In}" var/datum/browser/popup = new(user, "med_rec", "Medical Records Console", 600, 400) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) @@ -286,7 +286,7 @@
    Severity: [Dis.severity]"} else if(href_list["del_all"]) - src.temp = text("Are you sure you wish to delete all records?
    \n\tYes
    \n\tNo
    ", src, src) + src.temp = "Are you sure you wish to delete all records?
    \n\tYes
    \n\tNo
    " else if(href_list["del_all2"]) investigate_log("[usr.name] ([usr.key]) has deleted all medical records.", INVESTIGATE_RECORDS) @@ -377,13 +377,13 @@ src.active2.fields["notes"] = t1 if("p_stat") if(active1) - src.temp = text("Physical Condition:
    \n\t*Deceased*
    \n\t*Unconscious*
    \n\tActive
    \n\tPhysically Unfit
    ", src, src, src, src) + src.temp = "Physical Condition:
    \n\t*Deceased*
    \n\t*Unconscious*
    \n\tActive
    \n\tPhysically Unfit
    " if("m_stat") if(active1) - src.temp = text("Mental Condition:
    \n\t*Insane*
    \n\t*Unstable*
    \n\t*Watch*
    \n\tStable
    ", src, src, src, src) + src.temp = "Mental Condition:
    \n\t*Insane*
    \n\t*Unstable*
    \n\t*Watch*
    \n\tStable
    " if("blood_type") if(active2) - src.temp = text("Blood Type:
    \n\tA- A+
    \n\tB- B+
    \n\tAB- AB+
    \n\tO- O+
    ", src, src, src, src, src, src, src, src) + src.temp = "Blood Type:
    \n\tA- A+
    \n\tB- B+
    \n\tAB- AB+
    \n\tO- O+
    " if("b_dna") if(active2) var/t1 = stripped_input("Please input DNA hash:", "Med. records", src.active2.fields["b_dna"], null) @@ -452,7 +452,7 @@ else if(href_list["del_r"]) if(active2) - src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)?
    \n\tYes
    \n\tNo
    ", src, src) + src.temp = "Are you sure you wish to delete the record (Medical Portion Only)?
    \n\tYes
    \n\tNo
    " else if(href_list["del_r2"]) investigate_log("[usr.name] ([usr.key]) has deleted the medical records for [active1.fields["name"]].", INVESTIGATE_RECORDS) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 5ba20bc527..ffd2197133 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD // Allows you to monitor messages that passes the server. @@ -471,3 +472,478 @@ info_links = info add_overlay("paper_words") break +======= + +// Allows you to monitor messages that passes the server. + + + + +/obj/machinery/computer/message_monitor + name = "message monitor console" + desc = "Used to Monitor the crew's messages, that are sent via PDA. Can also be used to view Request Console messages." + icon_screen = "comm_logs" + circuit = /obj/item/circuitboard/computer/message_monitor + //Server linked to. + var/obj/machinery/message_server/linkedServer = null + //Sparks effect - For emag + var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread + //Messages - Saves me time if I want to change something. + var/noserver = "ALERT: No server detected." + var/incorrectkey = "ALERT: Incorrect decryption key!" + var/defaultmsg = "Welcome. Please select an option." + var/rebootmsg = "%$&(�: Critical %$$@ Error // !RestArting! - ?pLeaSe wAit!" + //Computer properties + var/screen = 0 // 0 = Main menu, 1 = Message Logs, 2 = Hacked screen, 3 = Custom Message + var/hacking = 0 // Is it being hacked into by the AI/Cyborg + var/message = "System bootup complete. Please select an option." // The message that shows on the main menu. + var/auth = 0 // Are they authenticated? + var/optioncount = 7 + // Custom Message Properties + var/customsender = "System Administrator" + var/obj/item/device/pda/customrecepient = null + var/customjob = "Admin" + var/custommessage = "This is a test, please ignore." + + light_color = LIGHT_COLOR_GREEN + +/obj/machinery/computer/message_monitor/attackby(obj/item/O, mob/living/user, params) + if(istype(O, /obj/item/screwdriver) && emagged) + //Stops people from just unscrewing the monitor and putting it back to get the console working again. + to_chat(user, "It is too hot to mess with!") + else + return ..() + +/obj/machinery/computer/message_monitor/emag_act(mob/user) + if(emagged) + return + if(!isnull(src.linkedServer)) + emagged = TRUE + screen = 2 + spark_system.set_up(5, 0, src) + src.spark_system.start() + var/obj/item/paper/monitorkey/MK = new/obj/item/paper/monitorkey + MK.loc = src.loc + // Will help make emagging the console not so easy to get away with. + MK.info += "

    �%@%(*$%&(�&?*(%&�/{}" + var/time = 100 * length(src.linkedServer.decryptkey) + addtimer(CALLBACK(src, .proc/UnmagConsole), time) + message = rebootmsg + else + to_chat(user, "A no server error appears on the screen.") + +/obj/machinery/computer/message_monitor/Initialize() + . = ..() + //Is the server isn't linked to a server, and there's a server available, default it to the first one in the list. + if(!linkedServer) + if(GLOB.message_servers && GLOB.message_servers.len > 0) + linkedServer = GLOB.message_servers[1] + +/obj/machinery/computer/message_monitor/attack_hand(mob/living/user) + if(..()) + return + //If the computer is being hacked or is emagged, display the reboot message. + if(hacking || emagged) + message = rebootmsg + var/dat = "
    /
    " + + if(auth) + dat += "

    \[Authenticated\] /" + dat += " Server Power: [src.linkedServer && src.linkedServer.active ? "\[On\]":"\[Off\]"]

    " + else + dat += "

    \[Unauthenticated\] /" + dat += " Server Power: [src.linkedServer && src.linkedServer.active ? "\[On\]":"\[Off\]"]

    " + + if(hacking || emagged) + screen = 2 + else if(!auth || !linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) + if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + screen = 0 + + switch(screen) + //Main menu + if(0) + // = TAB + var/i = 0 + dat += "
    [++i]. Link To A Server
    " + if(auth) + if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) + dat += "
    ERROR: Server not found!
    " + else + dat += "
    [++i]. View Message Logs
    " + dat += "
    [++i]. View Request Console Logs
    " + dat += "
    [++i]. Clear Message Logs
    " + dat += "
    [++i]. Clear Request Console Logs
    " + dat += "
    [++i]. Set Custom Key
    " + dat += "
    [++i]. Send Admin Message
    " + else + for(var/n = ++i; n <= optioncount; n++) + dat += "
    [n]. ---------------
    " + if(issilicon(usr) && is_special_character(usr)) + //Malf/Traitor AIs can bruteforce into the system to gain the Key. + dat += "
    *&@#. Bruteforce Key
    " + else + dat += "
    " + + //Bottom message + if(!auth) + dat += "

    Please authenticate with the server in order to show additional options." + else + dat += "

    Reg, #514 forbids sending messages to a Head of Staff containing Erotic Rendering Properties." + + //Message Logs + if(1) + var/index = 0 + //var/recipient = "Unspecified" //name of the person + //var/sender = "Unspecified" //name of the sender + //var/message = "Blank" //transferred message + dat += "
    Back - Refresh

    " + dat += "" + for(var/datum/data_pda_msg/pda in src.linkedServer.pda_msgs) + index++ + if(index > 3000) + break + // Del - Sender - Recepient - Message + // X - Al Green - Your Mom - WHAT UP!? + dat += "" + dat += "
    XSenderRecipientMessage
    X
    [pda.sender][pda.recipient][pda.message][pda.photo ? "(Photo)":""]
    " + //Hacking screen. + if(2) + if(isAI(user) || iscyborg(user)) + dat += "Brute-forcing for server key.
    It will take 20 seconds for every character that the password has." + dat += "In the meantime, this console can reveal your true intentions if you let someone access it. Make sure no humans enter the room during that time." + else + //It's the same message as the one above but in binary. Because robots understand binary and humans don't... well I thought it was clever. + dat += {"01000010011100100111010101110100011001010010110
    + 10110011001101111011100100110001101101001011011100110011
    + 10010000001100110011011110111001000100000011100110110010
    + 10111001001110110011001010111001000100000011010110110010
    + 10111100100101110001000000100100101110100001000000111011
    + 10110100101101100011011000010000001110100011000010110101
    + 10110010100100000001100100011000000100000011100110110010
    + 10110001101101111011011100110010001110011001000000110011
    + 00110111101110010001000000110010101110110011001010111001
    + 00111100100100000011000110110100001100001011100100110000
    + 10110001101110100011001010111001000100000011101000110100
    + 00110000101110100001000000111010001101000011001010010000
    + 00111000001100001011100110111001101110111011011110111001
    + 00110010000100000011010000110000101110011001011100010000
    + 00100100101101110001000000111010001101000011001010010000
    + 00110110101100101011000010110111001110100011010010110110
    + 10110010100101100001000000111010001101000011010010111001
    + 10010000001100011011011110110111001110011011011110110110
    + 00110010100100000011000110110000101101110001000000111001
    + 00110010101110110011001010110000101101100001000000111100
    + 10110111101110101011100100010000001110100011100100111010
    + 10110010100100000011010010110111001110100011001010110111
    + 00111010001101001011011110110111001110011001000000110100
    + 10110011000100000011110010110111101110101001000000110110
    + 00110010101110100001000000111001101101111011011010110010
    + 10110111101101110011001010010000001100001011000110110001
    + 10110010101110011011100110010000001101001011101000010111
    + 00010000001001101011000010110101101100101001000000111001
    + 10111010101110010011001010010000001101110011011110010000
    + 00110100001110101011011010110000101101110011100110010000
    + 00110010101101110011101000110010101110010001000000111010
    + 00110100001100101001000000111001001101111011011110110110
    + 10010000001100100011101010111001001101001011011100110011
    + 10010000001110100011010000110000101110100001000000111010
    + 001101001011011010110010100101110"} + + //Fake messages + if(3) + dat += "
    Back - Reset

    " + + dat += {" + + + + "} + //Sender - Sender's Job - Recepient - Message + //Al Green- Your Dad - Your Mom - WHAT UP!? + + dat += {" + + + "} + dat += "
    SenderSender's JobRecipientMessage
    [customsender][customjob][customrecepient ? customrecepient.owner : "NONE"][custommessage]

    Send" + + //Request Console Logs + if(4) + + var/index = 0 + /* data_rc_msg + X - 5% + var/rec_dpt = "Unspecified" //name of the person - 15% + var/send_dpt = "Unspecified" //name of the sender- 15% + var/message = "Blank" //transferred message - 300px + var/stamp = "Unstamped" - 15% + var/id_auth = "Unauthenticated" - 15% + var/priority = "Normal" - 10% + */ + dat += "
    Back - Refresh

    " + dat += {" + "} + for(var/datum/data_rc_msg/rc in src.linkedServer.rc_msgs) + index++ + if(index > 3000) + break + // Del - Sender - Recepient - Message + // X - Al Green - Your Mom - WHAT UP!? + dat += {" + "} + dat += "
    XSending Dep.Receiving Dep.MessageStampID Auth.Priority.
    X
    [rc.send_dpt][rc.rec_dpt][rc.message][rc.stamp][rc.id_auth][rc.priority]
    " + + message = defaultmsg + var/datum/browser/popup = new(user, "hologram_console", name, 700, 700) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + return + +/obj/machinery/computer/message_monitor/proc/BruteForce(mob/user) + if(isnull(linkedServer)) + to_chat(user, "Could not complete brute-force: Linked Server Disconnected!") + else + var/currentKey = src.linkedServer.decryptkey + to_chat(user, "Brute-force completed! The key is '[currentKey]'.") + src.hacking = 0 + src.screen = 0 // Return the screen back to normal + +/obj/machinery/computer/message_monitor/proc/UnmagConsole() + emagged = FALSE + +/obj/machinery/computer/message_monitor/proc/ResetMessage() + customsender = "System Administrator" + customrecepient = null + custommessage = "This is a test, please ignore." + customjob = "Admin" + +/obj/machinery/computer/message_monitor/Topic(href, href_list) + if(..()) + return + + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) + //Authenticate + if (href_list["auth"]) + if(!linkedServer || linkedServer.stat & (NOPOWER|BROKEN)) + message = noserver + else + if(auth) + auth = 0 + screen = 0 + else + var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null) + if(dkey && dkey != "") + if(src.linkedServer.decryptkey == dkey) + auth = 1 + else + message = incorrectkey + + //Turn the server on/off. + if (href_list["active"]) + if(auth) + linkedServer.active = !linkedServer.active + //Find a server + if (href_list["find"]) + if(GLOB.message_servers && GLOB.message_servers.len > 1) + src.linkedServer = input(usr,"Please select a server.", "Select a server.", null) as null|anything in GLOB.message_servers + message = "NOTICE: Server selected." + else if(GLOB.message_servers && GLOB.message_servers.len > 0) + linkedServer = GLOB.message_servers[1] + message = "NOTICE: Only Single Server Detected - Server selected." + else + message = noserver + + //View the logs - KEY REQUIRED + if (href_list["view"]) + if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + src.screen = 1 + + //Clears the logs - KEY REQUIRED + if (href_list["clear"]) + if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + src.linkedServer.pda_msgs = list() + message = "NOTICE: Logs cleared." + //Clears the request console logs - KEY REQUIRED + if (href_list["clearr"]) + if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + src.linkedServer.rc_msgs = list() + message = "NOTICE: Logs cleared." + //Change the password - KEY REQUIRED + if (href_list["pass"]) + if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + var/dkey = trim(stripped_input(usr, "Please enter the decryption key.")) + if(dkey && dkey != "") + if(src.linkedServer.decryptkey == dkey) + var/newkey = trim(input(usr,"Please enter the new key (3 - 16 characters max):")) + if(length(newkey) <= 3) + message = "NOTICE: Decryption key too short!" + else if(length(newkey) > 16) + message = "NOTICE: Decryption key too long!" + else if(newkey && newkey != "") + src.linkedServer.decryptkey = newkey + message = "NOTICE: Decryption key set." + else + message = incorrectkey + + //Hack the Console to get the password + if (href_list["hack"]) + if(issilicon(usr) && is_special_character(usr)) + src.hacking = 1 + src.screen = 2 + //Time it takes to bruteforce is dependant on the password length. + spawn(100*length(src.linkedServer.decryptkey)) + if(src && src.linkedServer && usr) + BruteForce(usr) + //Delete the log. + if (href_list["delete"]) + //Are they on the view logs screen? + if(screen == 1) + if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else //if(istype(href_list["delete"], /datum/data_pda_msg)) + src.linkedServer.pda_msgs -= locate(href_list["delete"]) + message = "NOTICE: Log Deleted!" + //Delete the request console log. + if (href_list["deleter"]) + //Are they on the view logs screen? + if(screen == 4) + if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else //if(istype(href_list["delete"], /datum/data_pda_msg)) + src.linkedServer.rc_msgs -= locate(href_list["deleter"]) + message = "NOTICE: Log Deleted!" + //Create a custom message + if (href_list["msg"]) + if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + src.screen = 3 + //Fake messaging selection - KEY REQUIRED + if (href_list["select"]) + if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + screen = 0 + else + switch(href_list["select"]) + + //Reset + if("Reset") + ResetMessage() + + //Select Your Name + if("Sender") + customsender = stripped_input(usr, "Please enter the sender's name.") + + //Select Receiver + if("Recepient") + //Get out list of viable PDAs + var/list/obj/item/device/pda/sendPDAs = get_viewable_pdas() + if(GLOB.PDAs && GLOB.PDAs.len > 0) + customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sortNames(sendPDAs) + else + customrecepient = null + + //Enter custom job + if("RecJob") + customjob = stripped_input(usr, "Please enter the sender's job.") + + //Enter message + if("Message") + custommessage = stripped_input(usr, "Please enter your message.") + + //Send message + if("Send") + + if(isnull(customsender) || customsender == "") + customsender = "UNKNOWN" + + if(isnull(customrecepient)) + message = "NOTICE: No recepient selected!" + return src.attack_hand(usr) + + if(isnull(custommessage) || custommessage == "") + message = "NOTICE: No message entered!" + return src.attack_hand(usr) + + var/obj/item/device/pda/PDARec = null + for (var/obj/item/device/pda/P in get_viewable_pdas()) + if(P.owner == customsender) + PDARec = P + //Sender isn't faking as someone who exists + if(isnull(PDARec)) + src.linkedServer.send_pda_message("[customrecepient.owner]", "[customsender]","[custommessage]") + customrecepient.tnote += "← From
    [customsender] ([customjob]):
    [custommessage]
    " + if (!customrecepient.silent) + playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1) + customrecepient.audible_message("[icon2html(customrecepient, viewers(customrecepient))] *[customrecepient.ttone]*", null, 3) + if( customrecepient.loc && ishuman(customrecepient.loc) ) + var/mob/living/carbon/human/H = customrecepient.loc + to_chat(H, "[icon2html(customrecepient, viewers(H))] Message from [customsender] ([customjob]), \"[custommessage]\" (Reply)") + log_talk(usr,"[key_name(usr)] (PDA: [customsender]) sent \"[custommessage]\" to [customrecepient.owner]",LOGPDA) + customrecepient.cut_overlays() + customrecepient.add_overlay(mutable_appearance('icons/obj/pda.dmi', "pda-r")) + //Sender is faking as someone who exists + else + src.linkedServer.send_pda_message("[customrecepient.owner]", "[PDARec.owner]","[custommessage]") + customrecepient.tnote += "← From [PDARec.owner] ([customjob]):
    [custommessage]
    " + if (!customrecepient.silent) + playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1) + customrecepient.audible_message("[icon2html(customrecepient, viewers(customrecepient))] *[customrecepient.ttone]*", null, 3) + if( customrecepient.loc && ishuman(customrecepient.loc) ) + var/mob/living/carbon/human/H = customrecepient.loc + to_chat(H, "[icon2html(customrecepient, H)] Message from [PDARec.owner] ([customjob]), \"[custommessage]\" (Reply)") + log_talk(usr,"[key_name(usr)] (PDA: [PDARec.owner]) sent \"[custommessage]\" to [customrecepient.owner]",LOGPDA) + customrecepient.cut_overlays() + customrecepient.add_overlay(mutable_appearance('icons/obj/pda.dmi', "pda-r")) + //Finally.. + ResetMessage() + + //Request Console Logs - KEY REQUIRED + if(href_list["viewr"]) + if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + src.screen = 4 + + if (href_list["back"]) + src.screen = 0 + + return src.attack_hand(usr) + + +/obj/item/paper/monitorkey + //..() + name = "monitor decryption key" + var/obj/machinery/message_server/server = null + +/obj/item/paper/monitorkey/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/item/paper/monitorkey/LateInitialize() + if(GLOB.message_servers) + for(var/obj/machinery/message_server/server in GLOB.message_servers) + if(!isnull(server)) + if(!isnull(server.decryptkey)) + info = "

    Daily Key Reset


    The new message monitor key is '[server.decryptkey]'.
    Please keep this a secret and away from the clown.
    If necessary, change the password to a more secure one." + info_links = info + add_overlay("paper_words") + break +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index 61bf091af3..c13e80e48b 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -48,21 +48,21 @@ if(connected) var/d2 if(timing) //door controls do not need timers. - d2 = "Stop Time Launch" + d2 = "Stop Time Launch" else - d2 = "Initiate Time Launch" - dat += "
    \nTimer System: [d2]\nTime Left: [DisplayTimeText(time)] - - + +" + d2 = "Initiate Time Launch" + dat += "
    \nTimer System: [d2]\nTime Left: [DisplayTimeText(time)] - - + +" var/temp = "" var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 ) for(var/t in L) if(t == connected.power) temp += "[t] " else - temp += "[t] " - dat += "
    \nPower Level: [temp]
    \nFiring Sequence
    \nTest Fire Driver
    \nToggle Outer Door
    " + temp += "[t] " + dat += "
    \nPower Level: [temp]
    \nFiring Sequence
    \nTest Fire Driver
    \nToggle Outer Door
    " else - dat += "
    \nToggle Outer Door
    " - dat += "

    Close" + dat += "
    \nToggle Outer Door
    " + dat += "

    Close" add_fingerprint(usr) var/datum/browser/popup = new(user, "computer", title, 400, 500) popup.set_content(dat) diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 3e9d6df42a..d2005d0a55 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -21,16 +21,16 @@ user.set_machine(src) var/dat = "" if(screen == 0) - dat += "
    Unlock Console" + dat += "
    Unlock Console" else if(screen == 1) dat += "

    Prisoner ID Management

    " if(inserted_id) - dat += text("[inserted_id]
    ") - dat += text("Collected Points: [inserted_id.points]. Reset.
    ") - dat += text("Card goal: [inserted_id.goal]. Set
    ") + dat += text("[inserted_id]
    ") + dat += text("Collected Points: [inserted_id.points]. Reset.
    ") + dat += text("Card goal: [inserted_id.goal]. Set
    ") dat += text("Space Law recommends quotas of 100 points per minute they would normally serve in the brig.
    ") else - dat += text("Insert Prisoner ID.
    ") + dat += text("Insert Prisoner ID.
    ") dat += "

    Prisoner Implant Management

    " dat += "
    Chemical Implants
    " var/turf/Tr = null @@ -42,9 +42,9 @@ continue dat += "ID: [C.imp_in.name] | Remaining Units: [C.reagents.total_volume]
    " dat += "| Inject: " - dat += "((1))" - dat += "((5))" - dat += "((10))
    " + dat += "((1))" + dat += "((5))" + dat += "((10))
    " dat += "********************************
    " dat += "
    Tracking Implants
    " for(var/obj/item/implant/tracking/T in GLOB.tracked_implants) @@ -61,9 +61,9 @@ loc_display = mob_loc.loc dat += "ID: [T.imp_in.name] | Location: [loc_display]
    " - dat += "(Message Holder) |
    " + dat += "(Message Holder) |
    " dat += "********************************
    " - dat += "
    Lock Console" + dat += "
    Lock Console" var/datum/browser/popup = new(user, "computer", "Prisoner Management Console", 400, 500) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 9960032d1d..41ead45327 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -7,6 +7,7 @@ icon_screen = "robot" icon_keyboard = "rd_key" req_access = list(ACCESS_ROBOTICS) +<<<<<<< HEAD circuit = /obj/item/circuitboard/computer/robotics var/temp = null @@ -158,6 +159,159 @@ else if (href_list["killdrone"]) if(src.allowed(usr)) +======= + circuit = /obj/item/circuitboard/computer/robotics + var/temp = null + + light_color = LIGHT_COLOR_PINK + +/obj/machinery/computer/robotics/proc/can_control(mob/user, mob/living/silicon/robot/R) + if(!istype(R)) + return 0 + if(isAI(user)) + if (R.connected_ai != user) + return 0 + if(iscyborg(user)) + if (R != user) + return 0 + if(R.scrambledcodes) + return 0 + return 1 + +/obj/machinery/computer/robotics/attack_hand(mob/user) + if(..()) + return + interact(user) + +/obj/machinery/computer/robotics/interact(mob/user) + if (src.z > 6) + to_chat(user, "Unable to establish a connection: \black You're too far away from the station!") + return + user.set_machine(src) + var/dat + var/robots = 0 + for(var/mob/living/silicon/robot/R in GLOB.mob_list) + if(!can_control(user, R)) + continue + robots++ + dat += "[R.name] |" + if(R.stat) + dat += " Not Responding |" + else if (!R.canmove) + dat += " Locked Down |" + else + dat += " Operating Normally |" + if (!R.canmove) + else if(R.cell) + dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |" + else + dat += " No Cell Installed |" + if(R.module) + dat += " Module Installed ([R.module.name]) |" + else + dat += " No Module Installed |" + if(R.connected_ai) + dat += " Slaved to [R.connected_ai.name] |" + else + dat += " Independent from AI |" + if(issilicon(user) || IsAdminGhost(user)) + if(is_servant_of_ratvar(user) && user != R) + dat += "(Convert) " + else if(((issilicon(user) && is_special_character(user)) || IsAdminGhost(user)) && !R.emagged && (user != R || R.syndicate)) + dat += "(Hack) " + dat += "([R.canmove ? "Lockdown" : "Release"]) " + dat += "(Destroy)" + dat += "
    " + + if(!robots) + dat += "No Cyborg Units detected within access parameters." + dat += "
    " + + var/drones = 0 + for(var/mob/living/simple_animal/drone/D in GLOB.mob_list) + if(D.hacked) + continue + drones++ + dat += "[D.name] |" + if(D.stat) + dat += " Not Responding |" + dat += "(Destroy)" + dat += "
    " + + if(!drones) + dat += "No Drone Units detected within access parameters." + + var/datum/browser/popup = new(user, "computer", "Cyborg Control Console", 400, 500) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + return + +/obj/machinery/computer/robotics/Topic(href, href_list) + if(..()) + return + + if (href_list["temp"]) + src.temp = null + + else if (href_list["killbot"]) + if(src.allowed(usr)) + var/mob/living/silicon/robot/R = locate(href_list["killbot"]) in GLOB.silicon_mobs + if(can_control(usr, R)) + var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort") + if(choice == "Confirm" && can_control(usr, R) && !..()) + if(R.syndicate && R.emagged) + to_chat(R, "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered.") + if(R.connected_ai) + to_chat(R.connected_ai, "

    ALERT - Cyborg detonation detected: [R.name]
    ") + R.ResetSecurityCodes() + else + var/turf/T = get_turf(R) + message_admins("[ADMIN_LOOKUPFLW(usr)] detonated [key_name(R, R.client)][ADMIN_JMP(T)]!") + log_game("\[key_name(usr)] detonated [key_name(R)]!") + if(R.connected_ai) + to_chat(R.connected_ai, "

    ALERT - Cyborg detonation detected: [R.name]
    ") + R.self_destruct() + else + to_chat(usr, "Access Denied.") + + else if (href_list["stopbot"]) + if(src.allowed(usr)) + var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) in GLOB.silicon_mobs + if(can_control(usr, R)) + var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort") + if(choice == "Confirm" && can_control(usr, R) && !..()) + message_admins("[ADMIN_LOOKUPFLW(usr)] [R.canmove ? "locked down" : "released"] [key_name(R, R.client)][ADMIN_LOOKUPFLW(R)]!") + log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [key_name(R)]!") + R.SetLockdown(!R.lockcharge) + to_chat(R, "[!R.lockcharge ? "Your lockdown has been lifted!" : "You have been locked down!"]") + if(R.connected_ai) + to_chat(R.connected_ai, "[!R.lockcharge ? "NOTICE - Cyborg lockdown lifted" : "ALERT - Cyborg lockdown detected"]: [R.name]
    ") + + else + to_chat(usr, "Access Denied.") + + else if (href_list["magbot"]) + if((issilicon(usr) && is_special_character(usr)) || IsAdminGhost(usr)) + var/mob/living/silicon/robot/R = locate(href_list["magbot"]) in GLOB.silicon_mobs + if(istype(R) && !R.emagged && ((R.syndicate && R == usr) || R.connected_ai == usr || IsAdminGhost(usr)) && !R.scrambledcodes && can_control(usr, R)) + log_game("[key_name(usr)] emagged [R.name] using robotic console!") + message_admins("[key_name_admin(usr)] emagged cyborg [key_name_admin(R)] using robotic console!") + R.SetEmagged(1) + if(is_special_character(R)) + R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes + + else if(href_list["convert"]) + if(issilicon(usr) && is_special_character(usr)) + var/mob/living/silicon/robot/R = locate(href_list["convert"]) in GLOB.silicon_mobs + if(istype(R) && !is_servant_of_ratvar(R) && is_servant_of_ratvar(usr) && R.connected_ai == usr) + log_game("[key_name(usr)] converted [R.name] using robotic console!") + message_admins("[key_name_admin(usr)] converted cyborg [key_name_admin(R)] using robotic console!") + add_servant_of_ratvar(R) + + else if (href_list["killdrone"]) + if(src.allowed(usr)) +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental var/mob/living/simple_animal/drone/D = locate(href_list["killdrone"]) in GLOB.mob_list if(D.hacked) to_chat(usr, "ERROR: [D] is not responding to external commands.") diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 81204a69f0..13f12c6d3f 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -63,9 +63,9 @@ var/dat if(temp) - dat = text("[]

    Clear Screen", temp, src) + dat = text("[]

    Clear Screen", temp) else - dat = text("Confirm Identity: []
    ", src, (scan ? text("[]", scan.name) : "----------")) + dat = text("Confirm Identity: []
    ", (scan ? text("[]", scan.name) : "----------")) if(authenticated) switch(screen) if(1) @@ -111,7 +111,7 @@ "} dat += {"

    "} - dat += text("New Record
    ", src) + dat += "New Record
    " //search bar dat += {" @@ -133,10 +133,10 @@
    - - - - + + + +"} if(!isnull(GLOB.data_core.general)) @@ -161,7 +161,7 @@ background = "''" //"'background-color:#FFFFFF;'" crimstat = "No Record." dat += "" - dat += text("", R.fields["name"], R.fields["id"], R.fields["rank"], R.fields["fingerprint"], src, R, R.fields["name"]) + dat += text("", R.fields["name"], R.fields["id"], R.fields["rank"], R.fields["fingerprint"], R.fields["name"]) dat += text("", R.fields["id"]) dat += text("", R.fields["rank"]) dat += text("", R.fields["fingerprint"]) @@ -173,11 +173,11 @@ var complete_list = maintable.innerHTML;
    "} - dat += text("Record Maintenance

    ", src) - dat += text("{Log Out}",src) + dat += "Record Maintenance

    " + dat += "{Log Out}" if(2) dat += "Records Maintenance
    " - dat += "
    Delete All Records

    Back" + dat += "
    Delete All Records

    Back" if(3) dat += "Security Record
    " if(istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1)) @@ -188,27 +188,27 @@ var/obj/item/photo/P2 = active1.fields["photo_side"] user << browse_rsc(P2.img, "photo_side") dat += {"
    NameIDRankFingerprintsNameIDRankFingerprints Criminal Status
    [][][][][]
    -
    - - - - "} - dat += "" - dat += {" - + + + + "} + dat += "" + dat += {" +
    Name: [active1.fields["name"]] 
    ID: [active1.fields["id"]] 
    Sex: [active1.fields["sex"]] 
    Age: [active1.fields["age"]] 
    Species: [active1.fields["species"]] 
    Rank: [active1.fields["rank"]] 
    Fingerprint: [active1.fields["fingerprint"]] 
    Name: [active1.fields["name"]] 
    ID: [active1.fields["id"]] 
    Sex: [active1.fields["sex"]] 
    Age: [active1.fields["age"]] 
    Species: [active1.fields["species"]] 
    Rank: [active1.fields["rank"]] 
    Fingerprint: [active1.fields["fingerprint"]] 
    Physical Status: [active1.fields["p_stat"]] 
    Mental Status: [active1.fields["m_stat"]] 
    -

    - Update front photo

    - Update side photo
    +
    +

    + Update front photo

    + Update side photo
    "} else dat += "
    General Record Lost!
    " if((istype(active2, /datum/data/record) && GLOB.data_core.security.Find(active2))) dat += "Security Data" - dat += "
    Criminal Status: [active2.fields["criminal"]]" - dat += "

    Minor Crimes: Add New" + dat += "
    Criminal Status: [active2.fields["criminal"]]" + dat += "

    Minor Crimes: Add New" dat +={" @@ -224,12 +224,12 @@ dat += "" dat += "" dat += "" - dat += "" + dat += "" dat += "" dat += "
    [c.crimeDetails][c.author][c.time]\[X\]\[X\]
    " - dat += "
    Major Crimes: Add New" + dat += "
    Major Crimes: Add New" dat +={" @@ -244,27 +244,27 @@ dat += "" dat += "" dat += "" - dat += "" + dat += "" dat += "" dat += "
    [c.crimeDetails][c.author][c.time]\[X\]\[X\]
    " - dat += "
    \nImportant Notes:
    \n\t [active2.fields["notes"]] " + dat += "
    \nImportant Notes:
    \n\t [active2.fields["notes"]] " dat += "

    Comments/Log
    " var/counter = 1 while(active2.fields[text("com_[]", counter)]) dat += (active2.fields[text("com_[]", counter)] + "
    ") if(active2.fields[text("com_[]", counter)] != "Deleted") - dat += text("Delete Entry

    ", src, counter) + dat += text("Delete Entry

    ", counter) counter++ - dat += text("Add Entry

    ", src) - dat += text("Delete Record (Security Only)
    ", src) + dat += "Add Entry

    " + dat += "Delete Record (Security Only)
    " else dat += "Security Record Lost!
    " - dat += text("New Security Record

    ", src) - dat += text("Delete Record (ALL)
    Print Record
    Print Wanted Poster
    Back
    ", src, src, src, src) + dat += "New Security Record

    " + dat += "Delete Record (ALL)
    Print Record
    Print Wanted Poster
    Back
    " else else - dat += text("{Log In}", src) + dat += "{Log In}" var/datum/browser/popup = new(user, "secure_rec", "Security Records Console", 600, 400) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) @@ -451,8 +451,8 @@ What a mess.*/ if("Delete All Records") temp = "" temp += "Are you sure you wish to delete all Security records?
    " - temp += "Yes
    " - temp += "No" + temp += "Yes
    " + temp += "No" if("Purge All Records") investigate_log("[usr.name] ([usr.key]) has purged all the security records.", INVESTIGATE_RECORDS) @@ -476,14 +476,14 @@ What a mess.*/ if("Delete Record (ALL)") if(active1) temp = "

    Are you sure you wish to delete the record (ALL)?
    " - temp += "Yes
    " - temp += "No" + temp += "Yes
    " + temp += "No" if("Delete Record (Security)") if(active2) temp = "
    Are you sure you wish to delete the record (Security Portion Only)?
    " - temp += "Yes
    " - temp += "No" + temp += "Yes
    " + temp += "No" if("Delete Entry") if((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])])) @@ -657,11 +657,11 @@ What a mess.*/ if(istype(active2, /datum/data/record)) temp = "
    Criminal Status:
    " temp += "" if("rank") var/list/L = list( "Head of Personnel", "Captain", "AI", "Central Command" ) @@ -670,7 +670,7 @@ What a mess.*/ temp = "
    Rank:
    " temp += "
      " for(var/rank in get_all_jobs()) - temp += "
    • [rank]
    • " + temp += "
    • [rank]
    • " temp += "
    " else alert(usr, "You do not have the required rank to do this!") diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index 4fefdb044e..c879bc175a 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -97,8 +97,8 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E if(uplinkholder) dat += "[uplinkholder.hidden_uplink.telecrystals] telecrystals remain in this uplink.
    " if(linkedboss) - dat += "Donate TC: 1 | 5 | All" - dat += "
    Eject Uplink" + dat += "Donate TC: 1 | 5 | All" + dat += "
    Eject Uplink" var/datum/browser/popup = new(user, "computer", "Telecrystal Upload/Receive Station", 700, 500) @@ -167,7 +167,7 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E var/dat = "" - dat += "Scan for TC stations.
    " + dat += "Scan for TC stations.
    " dat += "[storedcrystals] telecrystals are available for distribution.
    " dat += "

    " @@ -177,11 +177,11 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E if(A.uplinkholder) dat += "[A.uplinkholder.hidden_uplink.telecrystals] telecrystals." if(storedcrystals) - dat+= "
    Add TC: 1 | 5 | 10 | All" + dat+= "
    Add TC: 1 | 5 | 10 | All" dat += "
    " if(TCstations.len && storedcrystals) - dat += "

    Evenly distribute remaining TC.

    " + dat += "

    Evenly distribute remaining TC.

    " for(var/entry in transferlog) diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index ab4c72ab41..c62965f02d 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -70,16 +70,16 @@ data += "Calibration: Sub-Optimal" data += "

    " - data += "Change regime
    " - data += "Set target
    " + data += "Change regime
    " + data += "Set target
    " if(locked) - data += "
    Get target from memory
    " - data += "Eject GPS device
    " + data += "
    Get target from memory
    " + data += "Eject GPS device
    " else data += "
    Get target from memory
    " data += "Eject GPS device
    " - data += "
    Calibrate Hub" + data += "
    Calibrate Hub" var/datum/browser/popup = new(user, "teleporter", name, 400, 400) popup.set_content(data) diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index de26806273..ec8779b7d2 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -92,21 +92,21 @@ user.set_machine(src) var/list/dat = list() dat +="
    " - dat += " Select Track
    " + dat += " Select Track
    " dat += "Track Selected: [selection.song_name]
    " dat += "Track Length: [DisplayTimeText(selection.song_length)]

    " dat += "
    DJ's Soundboard:
    " dat +="
    " - dat += "Air Horn " - dat += "Station Alert " - dat += "Warning Siren " - dat += "Honk
    " - dat += "Shotgun Pump" - dat += "Gunshot" - dat += "Esword" - dat += "Harm Alarm" + dat += "Air Horn " + dat += "Station Alert " + dat += "Warning Siren " + dat += "Honk
    " + dat += "Shotgun Pump" + dat += "Gunshot" + dat += "Esword" + dat += "Harm Alarm" var/datum/browser/popup = new(user, "vending", "Radiance Dance Machine - Mark IV", 400, 350) popup.set_content(dat.Join()) popup.open() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index aac80cc1a0..0e170d9b8b 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -632,23 +632,23 @@ if(wires.is_cut(WIRE_IDSCAN)) t1 += text("IdScan wire is cut.
    \n") else if(src.aiDisabledIdScanner) - t1 += text("IdScan disabled. Enable?
    \n", src) + t1 += "IdScan disabled. Enable?
    \n" else - t1 += text("IdScan enabled. Disable?
    \n", src) + t1 += "IdScan enabled. Disable?
    \n" if(src.emergency) - t1 += text("Emergency Access Override is enabled. Disable?
    \n", src) + t1 += "Emergency Access Override is enabled. Disable?
    \n" else - t1 += text("Emergency Access Override is disabled. Enable?
    \n", src) + t1 += "Emergency Access Override is disabled. Enable?
    \n" if(wires.is_cut(WIRE_POWER1)) t1 += text("Main Power Input wire is cut.
    \n") if(wires.is_cut(WIRE_POWER2)) t1 += text("Main Power Output wire is cut.
    \n") if(!secondsMainPowerLost) - t1 += text("Temporarily disrupt main power?.
    \n", src) + t1 += "Temporarily disrupt main power?.
    \n" if(!secondsBackupPowerLost) - t1 += text("Temporarily disrupt backup power?.
    \n", src) + t1 += "Temporarily disrupt backup power?.
    \n" if(wires.is_cut(WIRE_BACKUP1)) t1 += text("Backup Power Input wire is cut.
    \n") @@ -658,53 +658,53 @@ if(wires.is_cut(WIRE_BOLTS)) t1 += text("Door bolt drop wire is cut.
    \n") else if(!src.locked) - t1 += text("Door bolts are up. Drop them?
    \n", src) + t1 += "Door bolts are up. Drop them?
    \n" else t1 += text("Door bolts are down.") if(src.hasPower()) - t1 += text(" Raise?
    \n", src) + t1 += " Raise?
    \n" else t1 += text(" Cannot raise door bolts due to power failure.
    \n") if(wires.is_cut(WIRE_LIGHT)) t1 += text("Door bolt lights wire is cut.
    \n") else if(!src.lights) - t1 += text("Door bolt lights are off. Enable?
    \n", src) + t1 += "Door bolt lights are off. Enable?
    \n" else - t1 += text("Door bolt lights are on. Disable?
    \n", src) + t1 += "Door bolt lights are on. Disable?
    \n" if(wires.is_cut(WIRE_SHOCK)) t1 += text("Electrification wire is cut.
    \n") if(secondsElectrified==ELECTRIFIED_PERMANENT) - t1 += text("Door is electrified indefinitely. Un-electrify it?
    \n", src) + t1 += "Door is electrified indefinitely. Un-electrify it?
    \n" else if(secondsElectrified>NOT_ELECTRIFIED) - t1 += text("Door is electrified temporarily ([] seconds). Un-electrify it?
    \n", secondsElectrified, src) + t1 += text("Door is electrified temporarily ([] seconds). Un-electrify it?
    \n", secondsElectrified) else - t1 += text("Door is not electrified. Electrify it for 30 seconds? Or, Electrify it indefinitely until someone cancels the electrification?
    \n", src, src) + t1 += "Door is not electrified. Electrify it for 30 seconds? Or, Electrify it indefinitely until someone cancels the electrification?
    \n" if(wires.is_cut(WIRE_SAFETY)) t1 += text("Door force sensors not responding.
    \n") else if(src.safe) - t1 += text("Door safeties operating normally. Override?
    \n",src) + t1 += "Door safeties operating normally. Override?
    \n" else - t1 += text("Danger. Door safeties disabled. Restore?
    \n",src) + t1 += "Danger. Door safeties disabled. Restore?
    \n" if(wires.is_cut(WIRE_TIMING)) t1 += text("Door timing circuitry not responding.
    \n") else if(src.normalspeed) - t1 += text("Door timing circuitry operating normally. Override?
    \n",src) + t1 += "Door timing circuitry operating normally. Override?
    \n" else - t1 += text("Warning. Door timing circuitry operating abnormally. Restore?
    \n",src) + t1 += "Warning. Door timing circuitry operating abnormally. Restore?
    \n" if(src.welded) t1 += text("Door appears to have been welded shut.
    \n") else if(!src.locked) if(src.density) - t1 += text("Open door
    \n", src) + t1 += "Open door
    \n" else - t1 += text("Close door
    \n", src) + t1 += "Close door
    \n" - t1 += text("

    Close

    \n", src) + t1 += "

    Close

    \n" user << browse(t1, "window=airlock") onclose(user, "airlock") diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm index 5e0d018554..e243494f2b 100644 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ b/code/game/machinery/embedded_controller/access_controller.dm @@ -277,29 +277,29 @@ if(!exteriorAirlock || !interiorAirlock) if(!exteriorAirlock) if(interiorAirlock.density) - output = "Open Interior Airlock
    " + output = "Open Interior Airlock
    " else - output = "Close Interior Airlock
    " + output = "Close Interior Airlock
    " else if(exteriorAirlock.density) - output = "Open Exterior Airlock
    " + output = "Open Exterior Airlock
    " else - output = "Close Exterior Airlock
    " + output = "Close Exterior Airlock
    " else if(exteriorAirlock.density) if(interiorAirlock.density) - output = {"Open Exterior Airlock
    - Open Interior Airlock
    "} + output = {"Open Exterior Airlock
    + Open Interior Airlock
    "} else - output = {"Cycle to Exterior Airlock
    - Close Interior Airlock
    "} + output = {"Cycle to Exterior Airlock
    + Close Interior Airlock
    "} else if(interiorAirlock.density) - output = {"Close Exterior Airlock
    - Cycle to Interior Airlock
    "} + output = {"Close Exterior Airlock
    + Cycle to Interior Airlock
    "} else - output = {"Close Exterior Airlock
    - Close Interior Airlock
    "} + output = {"Close Exterior Airlock
    + Close Interior Airlock
    "} output = {"Access Control Console
    diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm index 59d58bc9a5..6f10d11b2e 100644 --- a/code/game/machinery/embedded_controller/airlock_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_controller.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD //States for airlock_control #define AIRLOCK_STATE_INOPEN -2 #define AIRLOCK_STATE_PRESSURIZE -1 @@ -294,3 +295,301 @@ [state_options]"} return output +======= +//States for airlock_control +#define AIRLOCK_STATE_INOPEN -2 +#define AIRLOCK_STATE_PRESSURIZE -1 +#define AIRLOCK_STATE_CLOSED 0 +#define AIRLOCK_STATE_DEPRESSURIZE 1 +#define AIRLOCK_STATE_OUTOPEN 2 + +/datum/computer/file/embedded_program/airlock_controller + var/id_tag + var/exterior_door_tag + var/interior_door_tag + var/airpump_tag + var/sensor_tag + var/sanitize_external + + state = AIRLOCK_STATE_CLOSED + var/target_state = AIRLOCK_STATE_CLOSED + var/sensor_pressure = null + +/datum/computer/file/embedded_program/airlock_controller/receive_signal(datum/signal/signal, receive_method, receive_param) + var/receive_tag = signal.data["tag"] + if(!receive_tag) + return + + if(receive_tag==sensor_tag) + if(signal.data["pressure"]) + sensor_pressure = text2num(signal.data["pressure"]) + + else if(receive_tag==exterior_door_tag) + memory["exterior_status"] = signal.data["door_status"] + + else if(receive_tag==interior_door_tag) + memory["interior_status"] = signal.data["door_status"] + + else if(receive_tag==airpump_tag) + if(signal.data["power"]) + memory["pump_status"] = signal.data["direction"] + else + memory["pump_status"] = "off" + + else if(receive_tag==id_tag) + switch(signal.data["command"]) + if("cycle") + if(state < AIRLOCK_STATE_CLOSED) + target_state = AIRLOCK_STATE_OUTOPEN + else + target_state = AIRLOCK_STATE_INOPEN + +/datum/computer/file/embedded_program/airlock_controller/receive_user_command(command) + switch(command) + if("cycle_closed") + target_state = AIRLOCK_STATE_CLOSED + if("cycle_exterior") + target_state = AIRLOCK_STATE_OUTOPEN + if("cycle_interior") + target_state = AIRLOCK_STATE_INOPEN + if("abort") + target_state = AIRLOCK_STATE_CLOSED + +/datum/computer/file/embedded_program/airlock_controller/process() + var/process_again = 1 + while(process_again) + process_again = 0 + switch(state) + if(AIRLOCK_STATE_INOPEN) // state -2 + if(target_state > state) + if(memory["interior_status"] == "closed") + state = AIRLOCK_STATE_CLOSED + process_again = 1 + else + var/datum/signal/signal = new + signal.data["tag"] = interior_door_tag + signal.data["command"] = "secure_close" + post_signal(signal) + else + if(memory["pump_status"] != "off") + var/datum/signal/signal = new + signal.data = list( + "tag" = airpump_tag, + "power" = 0, + "sigtype"="command" + ) + post_signal(signal) + + if(AIRLOCK_STATE_PRESSURIZE) + if(target_state < state) + if(sensor_pressure >= ONE_ATMOSPHERE*0.95) + if(memory["interior_status"] == "open") + state = AIRLOCK_STATE_INOPEN + process_again = 1 + else + var/datum/signal/signal = new + signal.data["tag"] = interior_door_tag + signal.data["command"] = "secure_open" + post_signal(signal) + else + var/datum/signal/signal = new + signal.data = list( + "tag" = airpump_tag, + "sigtype"="command" + ) + if(memory["pump_status"] == "siphon") + signal.data["stabalize"] = 1 + else if(memory["pump_status"] != "release") + signal.data["power"] = 1 + post_signal(signal) + else if(target_state > state) + state = AIRLOCK_STATE_CLOSED + process_again = 1 + + if(AIRLOCK_STATE_CLOSED) + if(target_state > state) + if(memory["interior_status"] == "closed") + state = AIRLOCK_STATE_DEPRESSURIZE + process_again = 1 + else + var/datum/signal/signal = new + signal.data["tag"] = interior_door_tag + signal.data["command"] = "secure_close" + post_signal(signal) + else if(target_state < state) + if(memory["exterior_status"] == "closed") + state = AIRLOCK_STATE_PRESSURIZE + process_again = 1 + else + var/datum/signal/signal = new + signal.data["tag"] = exterior_door_tag + signal.data["command"] = "secure_close" + post_signal(signal) + + else + if(memory["pump_status"] != "off") + var/datum/signal/signal = new + signal.data = list( + "tag" = airpump_tag, + "power" = 0, + "sigtype"="command" + ) + post_signal(signal) + + if(AIRLOCK_STATE_DEPRESSURIZE) + var/target_pressure = ONE_ATMOSPHERE*0.05 + if(sanitize_external) + target_pressure = ONE_ATMOSPHERE*0.01 + + if(sensor_pressure <= target_pressure) + if(target_state > state) + if(memory["exterior_status"] == "open") + state = AIRLOCK_STATE_OUTOPEN + else + var/datum/signal/signal = new + signal.data["tag"] = exterior_door_tag + signal.data["command"] = "secure_open" + post_signal(signal) + else if(target_state < state) + state = AIRLOCK_STATE_CLOSED + process_again = 1 + else if((target_state < state) && !sanitize_external) + state = AIRLOCK_STATE_CLOSED + process_again = 1 + else + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.data = list( + "tag" = airpump_tag, + "sigtype"="command" + ) + if(memory["pump_status"] == "release") + signal.data["purge"] = 1 + else if(memory["pump_status"] != "siphon") + signal.data["power"] = 1 + post_signal(signal) + + if(AIRLOCK_STATE_OUTOPEN) //state 2 + if(target_state < state) + if(memory["exterior_status"] == "closed") + if(sanitize_external) + state = AIRLOCK_STATE_DEPRESSURIZE + process_again = 1 + else + state = AIRLOCK_STATE_CLOSED + process_again = 1 + else + var/datum/signal/signal = new + signal.data["tag"] = exterior_door_tag + signal.data["command"] = "secure_close" + post_signal(signal) + else + if(memory["pump_status"] != "off") + var/datum/signal/signal = new + signal.data = list( + "tag" = airpump_tag, + "power" = 0, + "sigtype"="command" + ) + post_signal(signal) + + memory["sensor_pressure"] = sensor_pressure + memory["processing"] = state != target_state + //sensor_pressure = null //not sure if we can comment this out. Uncomment in case of problems -rastaf0 + + return 1 + + +/obj/machinery/embedded_controller/radio/airlock_controller + icon = 'icons/obj/airlock_machines.dmi' + icon_state = "airlock_control_standby" + + name = "airlock console" + density = FALSE + + frequency = 1449 + power_channel = ENVIRON + + // Setup parameters only + var/id_tag + var/exterior_door_tag + var/interior_door_tag + var/airpump_tag + var/sensor_tag + var/sanitize_external + +/obj/machinery/embedded_controller/radio/airlock_controller/Initialize(mapload) + . = ..() + if(!mapload) + return + + var/datum/computer/file/embedded_program/airlock_controller/new_prog = new + + new_prog.id_tag = id_tag + new_prog.exterior_door_tag = exterior_door_tag + new_prog.interior_door_tag = interior_door_tag + new_prog.airpump_tag = airpump_tag + new_prog.sensor_tag = sensor_tag + new_prog.sanitize_external = sanitize_external + + new_prog.master = src + program = new_prog + +/obj/machinery/embedded_controller/radio/airlock_controller/update_icon() + if(on && program) + if(program.memory["processing"]) + icon_state = "airlock_control_process" + else + icon_state = "airlock_control_standby" + else + icon_state = "airlock_control_off" + + +/obj/machinery/embedded_controller/radio/airlock_controller/return_text() + var/state_options = null + + var/state = 0 + var/sensor_pressure = "----" + var/exterior_status = "----" + var/interior_status = "----" + var/pump_status = "----" + var/current_status = "Inactive
     " + if(program) + state = program.state + sensor_pressure = program.memory["sensor_pressure"] ? program.memory["sensor_pressure"] : "----" + exterior_status = program.memory["exterior_status"] ? program.memory["exterior_status"] : "----" + interior_status = program.memory["interior_status"] ? program.memory["interior_status"] : "----" + pump_status = program.memory["pump_status"] ? program.memory["pump_status"] : "----" + + switch(state) + if(AIRLOCK_STATE_INOPEN) + state_options = {"Close Interior Airlock
    +Cycle to Exterior Airlock
    "} + current_status = "Interior Airlock Open
    Chamber Pressurized" + if(AIRLOCK_STATE_PRESSURIZE) + state_options = "Abort Cycling
    " + current_status = "Cycling to Interior Airlock
    Chamber Pressurizing" + if(AIRLOCK_STATE_CLOSED) + state_options = {"Open Interior Airlock
    +Open Exterior Airlock
    "} + if(AIRLOCK_STATE_DEPRESSURIZE) + state_options = "Abort Cycling
    " + current_status = "Cycling to Exterior Airlock
    Chamber Depressurizing" + if(AIRLOCK_STATE_OUTOPEN) + state_options = {"Cycle to Interior Airlock
    +Close Exterior Airlock
    "} + current_status = "Exterior Airlock Open
    Chamber Depressurized" + + var/output = {"

    Airlock Status

    +
    +
    Current Status:
    [current_status]
    +
     
    +
    \> Chamber Pressure:
    [sensor_pressure] kPa
    +
    \> Control Pump:
    [pump_status]
    +
    \> Interior Door:
    [interior_status]
    +
    \> Exterior Door:
    [exterior_status]
    +
    +[state_options]"} + + return output +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental diff --git a/code/game/machinery/embedded_controller/simple_vent_controller.dm b/code/game/machinery/embedded_controller/simple_vent_controller.dm index 063e81354c..f078ad94eb 100644 --- a/code/game/machinery/embedded_controller/simple_vent_controller.dm +++ b/code/game/machinery/embedded_controller/simple_vent_controller.dm @@ -53,6 +53,7 @@ /obj/machinery/embedded_controller/radio/simple_vent_controller/Initialize(mapload) . = ..() +<<<<<<< HEAD if(!mapload) return var/datum/computer/file/embedded_program/simple_vent_controller/new_prog = new @@ -77,3 +78,29 @@ [state_options]
    "} return output +======= + if(!mapload) + return + var/datum/computer/file/embedded_program/simple_vent_controller/new_prog = new + + new_prog.airpump_tag = airpump_tag + new_prog.master = src + program = new_prog + +/obj/machinery/embedded_controller/radio/simple_vent_controller/update_icon() + if(on && program) + icon_state = "airlock_control_standby" + else + icon_state = "airlock_control_off" + + +/obj/machinery/embedded_controller/radio/simple_vent_controller/return_text() + var/state_options = null + state_options = {"Deactivate Vent
    +Activate Vent / Pump
    +Activate Vent / Clear
    "} + var/output = {"Vent Control Console
    +[state_options]
    "} + + return output +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm index 3b4503c3c8..7de077c016 100644 --- a/code/game/machinery/gulag_item_reclaimer.dm +++ b/code/game/machinery/gulag_item_reclaimer.dm @@ -67,7 +67,7 @@ var/mob/thismob = i var/list/mob_info = list() mob_info["name"] = thismob.real_name - mob_info["mob"] = "\ref[thismob]" + mob_info["mob"] = "[REF(thismob)]" mobs += list(mob_info) data["mobs"] = mobs diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index f7a4138348..afc463a60e 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -120,8 +120,8 @@ Possible to do for anyone motivated enough: if(temp) dat = temp else - dat = "Request an AI's presence.
    " - dat += "Call another holopad.
    " + dat = "Request an AI's presence.
    " + dat += "Call another holopad.
    " if(LAZYLEN(holo_calls)) dat += "=====================================================
    " @@ -131,7 +131,7 @@ Possible to do for anyone motivated enough: for(var/I in holo_calls) var/datum/holocall/HC = I if(HC.connected_holopad != src) - dat += "Answer call from [get_area(HC.calling_holopad)].
    " + dat += "Answer call from [get_area(HC.calling_holopad)].
    " one_unanswered_call = TRUE else one_answered_call = TRUE @@ -142,7 +142,7 @@ Possible to do for anyone motivated enough: for(var/I in holo_calls) var/datum/holocall/HC = I if(HC.connected_holopad == src) - dat += "Disconnect call from [HC.user].
    " + dat += "Disconnect call from [HC.user].
    " var/datum/browser/popup = new(user, "holopad", name, 300, 130) @@ -166,22 +166,22 @@ Possible to do for anyone motivated enough: if(last_request + 200 < world.time) last_request = world.time temp = "You requested an AI's presence.
    " - temp += "Main Menu" + temp += "Main Menu" var/area/area = get_area(src) for(var/mob/living/silicon/ai/AI in GLOB.silicon_mobs) if(!AI.client) continue - to_chat(AI, "Your presence is requested at \the [area].") + to_chat(AI, "Your presence is requested at \the [area].") else temp = "A request for AI presence was already sent recently.
    " - temp += "Main Menu" + temp += "Main Menu" else if(href_list["Holocall"]) if(outgoing_call) return temp = "You must stand on the holopad to make a call!
    " - temp += "Main Menu" + temp += "Main Menu" if(usr.loc == loc) var/list/callnames = list() for(var/I in holopads) @@ -196,7 +196,7 @@ Possible to do for anyone motivated enough: if(usr.loc == loc) temp = "Dialing...
    " - temp += "Main Menu" + temp += "Main Menu" new /datum/holocall(usr, src, callnames[result]) else if(href_list["connectcall"]) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index b37be1c4c2..f31a2d2436 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -160,7 +160,7 @@ /obj/machinery/limbgrower/proc/main_win(mob/user) var/dat = "

    Limb Grower Menu:


    " - dat += "Chemical Storage" + dat += "Chemical Storage" dat += materials_printout() dat += "" @@ -168,7 +168,7 @@ if(C=="special" && !emagged) //Only want to show special when console is emagged continue - dat += "" + dat += "" dat += "" //one category per line @@ -176,7 +176,7 @@ return dat /obj/machinery/limbgrower/proc/category_win(mob/user,selected_category) - var/dat = "Return to main menu" + var/dat = "Return to main menu" dat += "

    Browsing [selected_category]:


    " dat += materials_printout() @@ -187,7 +187,7 @@ if(disabled || !can_build(D)) dat += "[D.name]" else - dat += "[D.name]" + dat += "[D.name]" dat += "[get_design_cost(D)]
    " dat += "
    " @@ -195,13 +195,13 @@ /obj/machinery/limbgrower/proc/chemical_win(mob/user) - var/dat = "Return to main menu" + var/dat = "Return to main menu" dat += "

    Browsing Chemical Storage:


    " dat += materials_printout() for(var/datum/reagent/R in reagents.reagent_list) dat += "[R.name]: [R.volume]" - dat += "Purge
    " + dat += "Purge
    " dat += "
    " return dat diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 7808e7ed05..aa3bf465f2 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -249,9 +249,9 @@ var/dat = "Magnetic Control Console

    " if(!autolink) dat += {" - Frequency: [frequency]
    - Code: [code]
    - Probe Generators
    + Frequency: [frequency]
    + Code: [code]
    + Probe Generators
    "} if(magnets.len >= 1) @@ -260,11 +260,11 @@ var/i = 0 for(var/obj/machinery/magnetic_module/M in magnets) i++ - dat += "     < \[[i]\] ([M.on ? "On":"Off"]) | Electricity level: - [M.electricity_level] +; Magnetic field: - [M.magnetic_field] +
    " + dat += "     < \[[i]\] ([M.on ? "On":"Off"]) | Electricity level: - [M.electricity_level] +; Magnetic field: - [M.magnetic_field] +
    " - dat += "
    Speed: - [speed] +
    " - dat += "Path: {[path]}
    " - dat += "Moving: [moving ? "Enabled":"Disabled"]" + dat += "
    Speed: - [speed] +
    " + dat += "Path: {[path]}
    " + dat += "Moving: [moving ? "Enabled":"Disabled"]" user << browse(dat, "window=magnet;size=400x500") diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index c79630a58c..e7422a8df4 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -24,6 +24,7 @@ /obj/machinery/navbeacon/Initialize() . = ..() +<<<<<<< HEAD set_codes() @@ -205,4 +206,187 @@ Transponder Codes:
      "} codes[newkey] = newval +======= + + set_codes() + + var/turf/T = loc + hide(T.intact) + if(codes["patrol"]) + if(!GLOB.navbeacons["[z]"]) + GLOB.navbeacons["[z]"] = list() + GLOB.navbeacons["[z]"] += src //Register with the patrol list! + if(codes["delivery"]) + GLOB.deliverybeacons += src + GLOB.deliverybeacontags += location + +/obj/machinery/navbeacon/Destroy() + GLOB.navbeacons["[z]"] -= src //Remove from beacon list, if in one. + GLOB.deliverybeacons -= src + return ..() + +// set the transponder codes assoc list from codes_txt +/obj/machinery/navbeacon/proc/set_codes() + if(!codes_txt) + return + + codes = new() + + var/list/entries = splittext(codes_txt, ";") // entries are separated by semicolons + + for(var/e in entries) + var/index = findtext(e, "=") // format is "key=value" + if(index) + var/key = copytext(e, 1, index) + var/val = copytext(e, index+1) + codes[key] = val + else + codes[e] = "1" + + +// called when turf state changes +// hide the object if turf is intact +/obj/machinery/navbeacon/hide(intact) + invisibility = intact ? INVISIBILITY_MAXIMUM : 0 + updateicon() + +// update the icon_state +/obj/machinery/navbeacon/proc/updateicon() + var/state="navbeacon[open]" + + if(invisibility) + icon_state = "[state]-f" // if invisible, set icon to faded version + // in case revealed by T-scanner + else + icon_state = "[state]" + +/obj/machinery/navbeacon/attackby(obj/item/I, mob/user, params) + var/turf/T = loc + if(T.intact) + return // prevent intraction when T-scanner revealed + + if(istype(I, /obj/item/screwdriver)) + open = !open + + user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "You [open ? "open" : "close"] the beacon's cover.") + + updateicon() + + else if (istype(I, /obj/item/card/id)||istype(I, /obj/item/device/pda)) + if(open) + if (src.allowed(user)) + src.locked = !src.locked + to_chat(user, "Controls are now [src.locked ? "locked" : "unlocked"].") + else + to_chat(user, "Access denied.") + updateDialog() + else + to_chat(user, "You must open the cover first!") + else + return ..() + +/obj/machinery/navbeacon/attack_ai(mob/user) + interact(user, 1) + +/obj/machinery/navbeacon/attack_paw() + return + +/obj/machinery/navbeacon/attack_hand(mob/user) + interact(user, 0) + +/obj/machinery/navbeacon/interact(mob/user, ai = 0) + var/turf/T = loc + if(T.intact) + return // prevent intraction when T-scanner revealed + + if(!open && !ai) // can't alter controls if not open, unless you're an AI + to_chat(user, "The beacon's control cover is closed!") + return + + + var/t + + if(locked && !ai) + t = {"Navigation Beacon

      +(swipe card to unlock controls)
      +Location: [location ? location : "(none)"]
      +Transponder Codes:
    " dat += "" - dat += "" dat += "" dat += "
    [C][C]
    [dpt]Normal High" + dat += "Normal High" if(hackState) - dat += "EXTREME" + dat += "EXTREME" dat += "
    " - dat += "
    << Back
    " + dat += "
    << Back
    " if(2) //req. supplies dat += "Which department do you need supplies from?

    " @@ -160,13 +160,13 @@ GLOBAL_LIST_EMPTY(allConsoles) if (dpt != department) dat += "" dat += "[dpt]" - dat += "Normal High" + dat += "Normal High" if(hackState) - dat += "EXTREME" + dat += "EXTREME" dat += "" dat += "" dat += "" - dat += "
    << Back
    " + dat += "
    << Back
    " if(3) //relay information dat += "Which department would you like to send information to?

    " @@ -175,21 +175,21 @@ GLOBAL_LIST_EMPTY(allConsoles) if (dpt != department) dat += "" dat += "[dpt]" - dat += "Normal High" + dat += "Normal High" if(hackState) - dat += "EXTREME" + dat += "EXTREME" dat += "" dat += "" dat += "" - dat += "
    << Back
    " + dat += "
    << Back
    " if(6) //sent successfully dat += "Message sent.

    " - dat += "Continue
    " + dat += "Continue
    " if(7) //unsuccessful; not sent dat += "An error occurred.

    " - dat += "Continue
    " + dat += "Continue
    " if(8) //view messages for (var/obj/machinery/requests_console/Console in GLOB.allConsoles) @@ -203,7 +203,7 @@ GLOBAL_LIST_EMPTY(allConsoles) for(var/msg in messages) // This puts more recent messages at the *top*, where they belong. messageComposite = "
    [msg]
    " + messageComposite dat += messageComposite - dat += "
    << Back to Main Menu
    " + dat += "
    << Back to Main Menu
    " if(9) //authentication before sending dat += "Message Authentication

    " @@ -211,8 +211,8 @@ GLOBAL_LIST_EMPTY(allConsoles) dat += "
    You may authenticate your message now by scanning your ID or your stamp

    " dat += "Validated by: [msgVerified ? msgVerified : "Not Validated"]
    " dat += "Stamped by: [msgStamped ? msgStamped : "Not Stamped"]

    " - dat += "Send Message
    " - dat += "
    << Discard Message
    " + dat += "Send Message
    " + dat += "
    << Discard Message
    " if(10) //send announcement dat += "

    Station-wide Announcement

    " @@ -221,12 +221,12 @@ GLOBAL_LIST_EMPTY(allConsoles) else dat += "
    Swipe your card to authenticate yourself

    " dat += "Message: [message ? message : "No Message"]
    " - dat += "[message ? "Edit" : "Write"] Message

    " + dat += "[message ? "Edit" : "Write"] Message

    " if ((announceAuth || IsAdminGhost(user)) && message) - dat += "Announce Message
    " + dat += "Announce Message
    " else dat += "Announce Message
    " - dat += "
    << Back
    " + dat += "
    << Back
    " else //main menu screen = 0 @@ -237,25 +237,25 @@ GLOBAL_LIST_EMPTY(allConsoles) dat += "
    There are new PRIORITY messages

    " if (newmessagepriority == 3) dat += "
    There are new EXTREME PRIORITY messages

    " - dat += "View Messages

    " + dat += "View Messages

    " - dat += "Request Assistance
    " - dat += "Request Supplies
    " - dat += "Relay Anonymous Information

    " + dat += "Request Assistance
    " + dat += "Request Supplies
    " + dat += "Relay Anonymous Information

    " if(!emergency) - dat += "Emergency: Security
    " - dat += "Emergency: Engineering
    " - dat += "Emergency: Medical

    " + dat += "Emergency: Security
    " + dat += "Emergency: Engineering
    " + dat += "Emergency: Medical

    " else dat += "[emergency] has been dispatched to this location.

    " if(announcementConsole) - dat += "Send Station-wide Announcement

    " + dat += "Send Station-wide Announcement

    " if (silent) - dat += "Speaker OFF" + dat += "Speaker OFF" else - dat += "Speaker ON" + dat += "Speaker ON" var/datum/browser/popup = new(user, "req_console", "[department] Requests Console", 450, 440) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) @@ -454,7 +454,7 @@ GLOBAL_LIST_EMPTY(allConsoles) var/linkedsender if(istype(source, /obj/machinery/requests_console)) var/obj/machinery/requests_console/sender = source - linkedsender = "[sender.department]" + linkedsender = "[sender.department]" else capitalize(source) linkedsender = source diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index 20fd729304..606f64c7f3 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -58,13 +58,13 @@ Please wait until completion...
    dat = {" Metal Amount: [min(150000, src.metal_amount)] cm3 (MAX: 150,000)


    -Left Arm (25,000 cc metal.)
    -
    Right Arm (25,000 cc metal.)
    -
    Left Leg (25,000 cc metal.)
    -
    Right Leg (25,000 cc metal).
    -
    Chest (50,000 cc metal).
    -
    Head (50,000 cc metal).
    -
    Robot Frame (75,000 cc metal).
    +
    Left Arm (25,000 cc metal.)
    +
    Right Arm (25,000 cc metal.)
    +
    Left Leg (25,000 cc metal.)
    +
    Right Leg (25,000 cc metal).
    +
    Chest (50,000 cc metal).
    +
    Head (50,000 cc metal).
    +
    Robot Frame (75,000 cc metal).
    "} user << browse("Robotic Fabricator Control Panel[dat]", "window=robot_fabricator") diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index a9162b85f8..a538e4ec0c 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -134,11 +134,11 @@ Credit Remaining: [balance]
    [plays] players have tried their luck today, and [jackpots] have won a jackpot!


    -
    Play!
    + Play!

    [reeltext]
    - Refund balance
    "} + Refund balance
    "} var/datum/browser/popup = new(user, "slotmachine", "Slot Machine") popup.set_content(dat) diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index 590c8d03a5..93f9d2b03a 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -30,23 +30,23 @@ if(0) dat += "
    [temp]
    " - dat += "
    Current Network: [network]
    " + dat += "
    Current Network: [network]
    " if(servers.len) dat += "
    Detected Telecommunication Servers:" - dat += "
    \[Flush Buffer\]" + dat += "
    \[Flush Buffer\]" else - dat += "
    No servers detected. Scan for servers: \[Scan\]" + dat += "
    No servers detected. Scan for servers: \[Scan\]" // --- Viewing Server --- if(1) dat += "
    [temp]
    " - dat += "
    \[Main Menu\] \[Refresh\]
    " + dat += "
    \[Main Menu\] \[Refresh\]
    " dat += "
    Current Network: [network]" dat += "
    Selected Server: [SelectedServer.id]" @@ -65,7 +65,7 @@ // If the log is a speech file if(C.input_type == "Speech File") - dat += "
  • [C.name] \[X\]
    " + dat += "
  • [C.name] \[X\]
    " // -- Determine race of orator -- @@ -128,7 +128,7 @@ else if(C.input_type == "Execution Error") - dat += "
  • [C.name] \[X\]
    " + dat += "
  • [C.name] \[X\]
    " dat += "Output: \"[C.parameters["message"]]\"
    " dat += "

  • " diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index cb3ae78e72..c5c53888fc 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -32,28 +32,28 @@ if(0) dat += "
    [temp]

    " - dat += "
    Current Network: [network]
    " + dat += "
    Current Network: [network]
    " if(machinelist.len) dat += "
    Detected Network Entities:" - dat += "
    \[Flush Buffer\]" + dat += "
    \[Flush Buffer\]" else - dat += "\[Probe Network\]" + dat += "\[Probe Network\]" // --- Viewing Machine --- if(1) dat += "
    [temp]
    " - dat += "
    \[Main Menu\]
    " + dat += "
    \[Main Menu\]
    " dat += "
    Current Network: [network]
    " dat += "Selected Network Entity: [SelectedMachine.name] ([SelectedMachine.id])
    " dat += "Linked Entities:
      " for(var/obj/machinery/telecomms/T in SelectedMachine.links) if(!T.hide) - dat += "
    1. \ref[T.id] [T.name] ([T.id])
    2. " + dat += "
    3. [REF(T.id)] [T.name] ([T.id])
    4. " dat += "
    " diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 893ab38380..74774f2670 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -52,13 +52,13 @@ var/dat dat = "[name]

    [name] Access

    " dat += "
    [temp]
    " - dat += "
    Power Status: [toggled ? "On" : "Off"]" + dat += "
    Power Status: [toggled ? "On" : "Off"]" if(on && toggled) if(id != "" && id) - dat += "
    Identification String: [id]" + dat += "
    Identification String: [id]" else - dat += "
    Identification String: NULL" - dat += "
    Network: [network]" + dat += "
    Identification String: NULL" + dat += "
    Network: [network]" dat += "
    Prefabrication: [autolinkers.len ? "TRUE" : "FALSE"]" if(hide) dat += "
    Shadow Link: ACTIVE" @@ -73,7 +73,7 @@ i++ if(T.hide && !hide) continue - dat += "
  • \ref[T] [T.name] ([T.id]) \[X\]
  • " + dat += "
  • [REF(T)] [T.name] ([T.id]) \[X\]
  • " dat += "" dat += "
    Filtering Frequencies: " @@ -83,21 +83,21 @@ for(var/x in freq_listening) i++ if(i < length(freq_listening)) - dat += "[format_frequency(x)] GHz\[X\]; " + dat += "[format_frequency(x)] GHz\[X\]; " else - dat += "[format_frequency(x)] GHz\[X\]" + dat += "[format_frequency(x)] GHz\[X\]" else dat += "NONE" - dat += "
    \[Add Filter\]" + dat += "
    \[Add Filter\]" dat += "
    " if(P) var/obj/machinery/telecomms/T = P.buffer if(istype(T)) - dat += "

    MULTITOOL BUFFER: [T] ([T.id]) \[Link\] \[Flush\]" + dat += "

    MULTITOOL BUFFER: [T] ([T.id])
    \[Link\] \[Flush\]" else - dat += "

    MULTITOOL BUFFER:
    \[Add Machine\]" + dat += "

    MULTITOOL BUFFER: \[Add Machine\]" dat += "
    " temp = "" @@ -151,8 +151,8 @@ /obj/machinery/telecomms/relay/Options_Menu() var/dat = "" - dat += "
    Broadcasting: [broadcasting ? "YES" : "NO"]" - dat += "
    Receiving: [receiving ? "YES" : "NO"]" + dat += "
    Broadcasting: [broadcasting ? "YES" : "NO"]" + dat += "
    Receiving: [receiving ? "YES" : "NO"]" return dat /obj/machinery/telecomms/relay/Options_Topic(href, href_list) @@ -167,7 +167,7 @@ // BUS /obj/machinery/telecomms/bus/Options_Menu() - var/dat = "
    Change Signal Frequency: [change_frequency ? "YES ([change_frequency])" : "NO"]" + var/dat = "
    Change Signal Frequency: [change_frequency ? "YES ([change_frequency])" : "NO"]" return dat /obj/machinery/telecomms/bus/Options_Topic(href, href_list) @@ -254,7 +254,7 @@ if(text2num(href_list["unlink"]) <= length(links)) var/obj/machinery/telecomms/T = links[text2num(href_list["unlink"])] if(T) - temp = "-% Removed \ref[T] [T.name] from linked entities. %-" + temp = "-% Removed [REF(T)] [T.name] from linked entities. %-" // Remove link entries from both T and src. @@ -276,7 +276,7 @@ if(!(T in links)) links += T - temp = "-% Successfully linked with \ref[T] [T.name] %-" + temp = "-% Successfully linked with [REF(T)] [T.name] %-" else temp = "-% Unable to acquire buffer %-" @@ -284,7 +284,7 @@ if(href_list["buffer"]) P.buffer = src - temp = "-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-" + temp = "-% Successfully stored [REF(P.buffer)] [P.buffer.name] in buffer %-" if(href_list["flush"]) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 2510c19c05..514de9b841 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -373,7 +373,7 @@ for (var/datum/data/vending_product/R in display_records) dat += "
  • " if(R.amount > 0) - dat += "Vend " + dat += "Vend " else dat += "Sold out " dat += "[sanitize(R.product_name)]:" @@ -384,7 +384,7 @@ if(premium.len > 0) dat += "Change Return: " if (coin || bill) - dat += "[(coin ? coin : "")][(bill ? bill : "")]  Remove" + dat += "[(coin ? coin : "")][(bill ? bill : "")]  Remove" else dat += "No money  Remove" if(istype(src, /obj/machinery/vending/snack)) @@ -393,7 +393,7 @@ for (var/O in dish_quants) if(dish_quants[O] > 0) var/N = dish_quants[O] - dat += "Dispense " + dat += "Dispense " dat += "[capitalize(O)]: [N]
    " dat += "
  • " user.set_machine(src) diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index ab3ebb4050..ef582421fa 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -10,6 +10,7 @@ max_temperature = 25000 infra_luminosity = 5 operation_req_access = list(ACCESS_THEATRE) +<<<<<<< HEAD wreckage = /obj/structure/mecha_wreckage/honker add_req_access = 0 max_equip = 3 @@ -154,3 +155,149 @@ return color +======= + wreckage = /obj/structure/mecha_wreckage/honker + add_req_access = 0 + max_equip = 3 + var/squeak = 0 + +/* +/obj/mecha/combat/honker/New() + ..() + + weapons += new /datum/mecha_weapon/honker(src) + weapons += new /datum/mecha_weapon/missile_rack/banana_mortar(src) + weapons += new /datum/mecha_weapon/missile_rack/mousetrap_mortar(src) + selected_weapon = weapons[1] + return +*/ + +/obj/mecha/combat/honker/get_stats_part() + var/integrity = obj_integrity/max_integrity*100 + var/cell_charge = get_charge() + var/datum/gas_mixture/int_tank_air = internal_tank.return_air() + var/tank_pressure = internal_tank ? round(int_tank_air.return_pressure(),0.01) : "None" + var/tank_temperature = internal_tank ? int_tank_air.temperature : "Unknown" + var/cabin_pressure = round(return_pressure(),0.01) + var/output = {"[report_internal_damage()] + [integrity<30?"DAMAGE LEVEL CRITICAL
    ":null] + [internal_damage&MECHA_INT_TEMP_CONTROL?"CLOWN SUPPORT SYSTEM MALFUNCTION
    ":null] + [internal_damage&MECHA_INT_TANK_BREACH?"GAS TANK HONK
    ":null] + [internal_damage&MECHA_INT_CONTROL_LOST?"HONK-A-DOODLE - Recalibrate
    ":null] + IntegriHONK: [integrity]%
    + PowerHONK charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
    + Air source: [use_internal_tank?"Internal Airtank":"Environment"]
    + AirHONK pressure: [tank_pressure]kPa
    + AirHONK temperature: [tank_temperature]°K|[tank_temperature - T0C]°C
    + HONK pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
    + HONK temperature: [return_temperature()]°K|[return_temperature() - T0C]°C
    + Lights: [lights?"on":"off"]
    + [dna_lock?"DNA-locked:
    [dna_lock] \[Reset\]
    ":null] + "} + return output + +/obj/mecha/combat/honker/get_stats_html() + var/output = {" + [src.name] data + + + + +
    + [src.get_stats_part()] +
    +
    + [src.get_equipment_list()] +
    +
    +
    + [src.get_commands()] +
    + + + "} + return output + +/obj/mecha/combat/honker/get_commands() + var/output = {"
    +
    Sounds of HONK:
    + +
    + "} + output += ..() + return output + + +/obj/mecha/combat/honker/get_equipment_list() + if(!equipment.len) + return + var/output = "Honk-ON-Systems:
    " + for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) + output += "
    [MT.get_equip_info()]
    " + output += "
    " + return output + + + +/obj/mecha/combat/honker/mechstep(direction) + var/result = step(src,direction) + if(result) + if(!squeak) + playsound(src, "clownstep", 70, 1) + squeak = 1 + else + squeak = 0 + return result + +/obj/mecha/combat/honker/Topic(href, href_list) + ..() + if (href_list["play_sound"]) + switch(href_list["play_sound"]) + if("sadtrombone") + playsound(src, 'sound/misc/sadtrombone.ogg', 50) + return + +/proc/rand_hex_color() + var/list/colors = list("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f") + var/color="" + for (var/i=0;i<6;i++) + color = color+pick(colors) + return color + + +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 48d98aa70f..627858bea6 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -25,7 +25,7 @@ /obj/item/mecha_parts/mecha_equipment/proc/update_equip_info() if(chassis) - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",get_equip_info()) + send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",get_equip_info()) return 1 return @@ -52,7 +52,7 @@ if(chassis.selected == src) txt += "[src.name]" else if(selectable) - txt += "[src.name]" + txt += "[src.name]" else txt += "[src.name]" @@ -132,7 +132,7 @@ /obj/item/mecha_parts/mecha_equipment/proc/set_ready_state(state) equip_ready = state if(chassis) - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) return /obj/item/mecha_parts/mecha_equipment/proc/occupant_message(message) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 0b99d811b3..cc0f935628 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -104,21 +104,21 @@ if(output) var/temp = "" if(patient) - temp = "
    \[Occupant: [patient] ([patient.stat > 1 ? "*DECEASED*" : "Health: [patient.health]%"])\]
    View stats|Eject" + temp = "
    \[Occupant: [patient] ([patient.stat > 1 ? "*DECEASED*" : "Health: [patient.health]%"])\]
    View stats|Eject" return "[output] [temp]" return /obj/item/mecha_parts/mecha_equipment/medical/sleeper/Topic(href,href_list) ..() - var/datum/topic_input/filter = new /datum/topic_input(href,href_list) - if(filter.get("eject")) + var/datum/topic_input/afilter = new /datum/topic_input(href,href_list) + if(afilter.get("eject")) go_out() - if(filter.get("view_stats")) + if(afilter.get("view_stats")) chassis.occupant << browse(get_patient_stats(),"window=msleeper") onclose(chassis.occupant, "msleeper") return - if(filter.get("inject")) - inject_reagent(filter.getType("inject", /datum/reagent),filter.getObj("source")) + if(afilter.get("inject")) + inject_reagent(afilter.getType("inject", /datum/reagent),afilter.getObj("source")) return /obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_stats() @@ -184,7 +184,7 @@ if(SG && SG.reagents && islist(SG.reagents.reagent_list)) for(var/datum/reagent/R in SG.reagents.reagent_list) if(R.volume > 0) - output += "Inject [R.name]
    " + output += "Inject [R.name]
    " return output @@ -287,7 +287,7 @@ /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/get_equip_info() var/output = ..() if(output) - return "[output] \[[mode? "Analyze" : "Launch"]\]
    \[Syringes: [syringes.len]/[max_syringes] | Reagents: [reagents.total_volume]/[reagents.maximum_volume]\]
    Reagents list" + return "[output] \[[mode? "Analyze" : "Launch"]\]
    \[Syringes: [syringes.len]/[max_syringes] | Reagents: [reagents.total_volume]/[reagents.maximum_volume]\]
    Reagents list" return /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/action(atom/movable/target) @@ -358,19 +358,19 @@ /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Topic(href,href_list) ..() - var/datum/topic_input/filter = new (href,href_list) - if(filter.get("toggle_mode")) + var/datum/topic_input/afilter = new (href,href_list) + if(afilter.get("toggle_mode")) mode = !mode update_equip_info() return - if(filter.get("select_reagents")) + if(afilter.get("select_reagents")) processed_reagents.len = 0 var/m = 0 var/message for(var/i=1 to known_reagents.len) if(m>=synth_speed) break - var/reagent = filter.get("reagent_[i]") + var/reagent = afilter.get("reagent_[i]") if(reagent && (reagent in known_reagents)) message = "[m ? ", " : null][known_reagents[reagent]]" processed_reagents += reagent @@ -382,14 +382,14 @@ occupant_message("Reagent processing started.") log_message("Reagent processing started.") return - if(filter.get("show_reagents")) + if(afilter.get("show_reagents")) chassis.occupant << browse(get_reagents_page(),"window=msyringegun") - if(filter.get("purge_reagent")) - var/reagent = filter.get("purge_reagent") + if(afilter.get("purge_reagent")) + var/reagent = afilter.get("purge_reagent") if(reagent) reagents.del_reagent(reagent) return - if(filter.get("purge_all")) + if(afilter.get("purge_all")) reagents.clear_reagents() return return @@ -426,7 +426,7 @@ var/r_list = get_reagents_list() var/inputs if(r_list) - inputs += "" + inputs += "" inputs += "" inputs += "" var/output = {" @@ -448,9 +448,9 @@ var/output for(var/datum/reagent/R in reagents.reagent_list) if(R.volume > 0) - output += "[R]: [round(R.volume,0.001)] - Purge Reagent
    " + output += "[R]: [round(R.volume,0.001)] - Purge Reagent
    " if(output) - output += "Total: [round(reagents.total_volume,0.001)]/[reagents.maximum_volume] - Purge All" + output += "Total: [round(reagents.total_volume,0.001)]/[reagents.maximum_volume] - Purge All" return output || "None" /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/load_syringe(obj/item/reagent_containers/syringe/S) diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 38b8e2bb96..9d7c9b6833 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -92,20 +92,20 @@ return locked = target occupant_message("Locked on [target]") - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) else if(target!=locked) if(locked in view(chassis)) var/turf/targ = get_turf(target) var/turf/orig = get_turf(locked) locked.throw_at(target, 14, 1.5) locked = null - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) log_game("[key_name(chassis.occupant)] used a Gravitational Catapult to throw [locked]([COORD(orig)]) at [target]([COORD(targ)]).") return TRUE else locked = null occupant_message("Lock on [locked] disengaged.") - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) if(2) var/list/atoms = list() if(isturf(target)) @@ -126,13 +126,13 @@ /obj/item/mecha_parts/mecha_equipment/gravcatapult/get_equip_info() - return "[..()] [mode==1?"([locked||"Nothing"])":null] \[S|P\]" + return "[..()] [mode==1?"([locked||"Nothing"])":null] \[S|P\]" /obj/item/mecha_parts/mecha_equipment/gravcatapult/Topic(href, href_list) ..() if(href_list["mode"]) mode = text2num(href_list["mode"]) - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) return @@ -212,7 +212,7 @@ /obj/item/mecha_parts/mecha_equipment/repair_droid/get_equip_info() if(!chassis) return - return "*  [src.name] - [equip_ready?"A":"Dea"]ctivate" + return "*  [src.name] - [equip_ready?"A":"Dea"]ctivate" /obj/item/mecha_parts/mecha_equipment/repair_droid/Topic(href, href_list) @@ -230,7 +230,7 @@ log_message("Deactivated.") set_ready_state(1) chassis.add_overlay(droid_overlay) - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) /obj/item/mecha_parts/mecha_equipment/repair_droid/process() @@ -320,7 +320,7 @@ /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/get_equip_info() if(!chassis) return - return "*  [src.name] - [equip_ready?"A":"Dea"]ctivate" + return "*  [src.name] - [equip_ready?"A":"Dea"]ctivate" /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/process() @@ -397,13 +397,13 @@ /obj/item/mecha_parts/mecha_equipment/generator/get_equip_info() var/output = ..() if(output) - return "[output] \[[fuel]: [round(fuel.amount*fuel.perunit,0.1)] cm3\] - [equip_ready?"A":"Dea"]ctivate" + return "[output] \[[fuel]: [round(fuel.amount*fuel.perunit,0.1)] cm3\] - [equip_ready?"A":"Dea"]ctivate" /obj/item/mecha_parts/mecha_equipment/generator/action(target) if(chassis) var/result = load_fuel(target) if(result) - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) /obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(var/obj/item/stack/sheet/P) if(P.type == fuel.type && P.amount > 0) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 2bc3d3eaff..7ec90ab7ce 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -288,7 +288,7 @@ return /obj/item/mecha_parts/mecha_equipment/rcd/get_equip_info() - return "[..()] \[D|C|A\]" + return "[..()] \[D|C|A\]" @@ -342,7 +342,7 @@ cable.amount += to_load target.use(to_load) occupant_message("[to_load] meters of cable successfully loaded.") - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) else occupant_message("Reel is full.") else @@ -371,7 +371,7 @@ /obj/item/mecha_parts/mecha_equipment/cable_layer/get_equip_info() var/output = ..() if(output) - return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]" + return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]" return /obj/item/mecha_parts/mecha_equipment/cable_layer/proc/use_cable(amount) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 9d83c1c95b..4b814d6e58 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -210,7 +210,7 @@ return 1 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_equip_info() - return "[..()] \[[src.projectiles]\][(src.projectiles < initial(src.projectiles))?" - Rearm":null]" + return "[..()] \[[src.projectiles]\][(src.projectiles < initial(src.projectiles))?" - Rearm":null]" /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/rearm() @@ -220,7 +220,7 @@ projectiles++ projectiles_to_add-- chassis.use_power(projectile_energy_cost) - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) log_message("Rearmed [src.name].") return 1 @@ -239,7 +239,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action(atom/target) if(..()) projectiles -= get_shot_amount() - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) return 1 diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 524dc4e5b5..be0f596ced 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -98,8 +98,8 @@ continue output += "
    [output_part_info(D)]
    \[" if(check_resources(D)) - output += "Build | " - output += "Add to queue\]\[?\]
    " + output += "Build | " + output += "Add to queue\]\[?\]
    " return output /obj/machinery/mecha_part_fabricator/proc/output_part_info(datum/design/D) @@ -121,10 +121,10 @@ var/datum/material/M = materials.materials[mat_id] output += "[M.name]: [M.amount] cm³" if(M.amount >= MINERAL_MATERIAL_AMOUNT) - output += "- Remove \[1\]" + output += "- Remove \[1\]" if(M.amount >= (MINERAL_MATERIAL_AMOUNT * 10)) - output += " | \[10\]" - output += " | \[All\]" + output += " | \[10\]" + output += " | \[All\]" output += "
    " return output @@ -206,7 +206,7 @@ if(!check_resources(D)) say("Not enough resources. Queue processing stopped.") temp = {"Not enough resources to build next part.
    - Try again | Return"} + Try again | Return"} return 0 remove_from_queue(1) build_part(D) @@ -225,12 +225,12 @@ var/obj/part = D.build_path output += "" output += initial(part.name) + " - " - output += "[i>1?"":null] " - output += "[i↓":null] " - output += "Remove" + output += "[i>1?"":null] " + output += "[i↓":null] " + output += "Remove" output += "" - output += "\[Process queue | Clear queue\]" + output += "\[Process queue | Clear queue\]" return output /obj/machinery/mecha_part_fabricator/proc/sync() @@ -250,13 +250,13 @@ files.RefreshResearch() temp = "Processed equipment designs.
    " //check if the tech coefficients have changed - temp += "Return" + temp += "Return" updateUsrDialog() say("Successfully synchronized with R&D server.") return - temp = "Unable to connect to local R&D Database.
    Please check your connections and try again.
    Return" + temp = "Unable to connect to local R&D Database.
    Please check your connections and try again.
    Return" updateUsrDialog() return @@ -289,12 +289,12 @@ switch(screen) if("main") left_part = output_available_resources()+"
    " - left_part += "Sync with R&D servers
    " + left_part += "Sync with R&D servers
    " for(var/part_set in part_sets) - left_part += "[part_set] - \[Add all parts to queue\]
    " + left_part += "[part_set] - \[Add all parts to queue\]
    " if("parts") left_part += output_parts_list(part_set) - left_part += "
    Return" + left_part += "
    Return" dat = {" [name] @@ -332,9 +332,9 @@ /obj/machinery/mecha_part_fabricator/Topic(href, href_list) if(..()) return - var/datum/topic_input/filter = new /datum/topic_input(href,href_list) + var/datum/topic_input/afilter = new /datum/topic_input(href,href_list) if(href_list["part_set"]) - var/tpart_set = filter.getStr("part_set") + var/tpart_set = afilter.getStr("part_set") if(tpart_set) if(tpart_set=="clear") part_set = null @@ -342,7 +342,7 @@ part_set = tpart_set screen = "parts" if(href_list["part"]) - var/T = filter.getStr("part") + var/T = afilter.getStr("part") for(var/v in files.known_designs) var/datum/design/D = files.known_designs[v] if(D.build_type & MECHFAB) @@ -353,7 +353,7 @@ add_to_queue(D) break if(href_list["add_to_queue"]) - var/T = filter.getStr("add_to_queue") + var/T = afilter.getStr("add_to_queue") for(var/v in files.known_designs) var/datum/design/D = files.known_designs[v] if(D.build_type & MECHFAB) @@ -362,10 +362,10 @@ break return update_queue_on_page() if(href_list["remove_from_queue"]) - remove_from_queue(filter.getNum("remove_from_queue")) + remove_from_queue(afilter.getNum("remove_from_queue")) return update_queue_on_page() if(href_list["partset_to_queue"]) - add_part_set_to_queue(filter.get("partset_to_queue")) + add_part_set_to_queue(afilter.get("partset_to_queue")) return update_queue_on_page() if(href_list["process_queue"]) spawn(0) @@ -379,8 +379,8 @@ if(href_list["screen"]) screen = href_list["screen"] if(href_list["queue_move"] && href_list["index"]) - var/index = filter.getNum("index") - var/new_index = index + filter.getNum("queue_move") + var/index = afilter.getNum("index") + var/new_index = index + afilter.getNum("queue_move") if(isnum(index) && isnum(new_index) && IsInteger(index) && IsInteger(new_index)) if(IsInRange(new_index,1,queue.len)) queue.Swap(index,new_index) @@ -391,7 +391,7 @@ if(href_list["sync"]) sync() if(href_list["part_desc"]) - var/T = filter.getStr("part_desc") + var/T = afilter.getStr("part_desc") for(var/v in files.known_designs) var/datum/design/D = files.known_designs[v] if(D.build_type & MECHFAB) @@ -399,7 +399,7 @@ var/obj/part = D.build_path temp = {"

    [initial(part.name)] description:

    [initial(part.desc)]
    - Return + Return "} break diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index ad0e428f14..2f98b2cc4c 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -647,7 +647,7 @@ to_chat(user, "[B.get_mecha_info()]") break //Nothing like a big, red link to make the player feel powerful! - to_chat(user, "ASSUME DIRECT CONTROL?
    ") + to_chat(user, "ASSUME DIRECT CONTROL?
    ") else examine(user) if(occupant) @@ -661,7 +661,7 @@ if(!can_control_mech) to_chat(user, "You cannot control exosuits without AI control beacons installed.") return - to_chat(user, "Take control of exosuit?
    ") + to_chat(user, "Take control of exosuit?
    ") /obj/mecha/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/device/aicard/card) if(!..()) diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 431768500e..63dd798a34 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -23,15 +23,15 @@ var/answer = TR.get_mecha_info() if(answer) dat += {"
    [answer]
    - Send message
    - Show exosuit log | (EMP pulse)
    "} + Send message
    + Show exosuit log | (EMP pulse)
    "} if(screen==1) dat += "

    Log contents

    " - dat += "Return
    " + dat += "Return
    " dat += "[stored_data]" - dat += "(Refresh)
    " + dat += "(Refresh)
    " dat += "" user << browse(dat, "window=computer;size=400x500") @@ -41,19 +41,19 @@ /obj/machinery/computer/mecha/Topic(href, href_list) if(..()) return - var/datum/topic_input/filter = new /datum/topic_input(href,href_list) + var/datum/topic_input/afilter = new /datum/topic_input(href,href_list) if(href_list["send_message"]) - var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("send_message") + var/obj/item/mecha_parts/mecha_tracking/MT = afilter.getObj("send_message") var/message = stripped_input(usr,"Input message","Transmit message") var/obj/mecha/M = MT.in_mecha() if(trim(message) && M) M.occupant_message(message) return if(href_list["shock"]) - var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("shock") + var/obj/item/mecha_parts/mecha_tracking/MT = afilter.getObj("shock") MT.shock() if(href_list["get_log"]) - var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("get_log") + var/obj/item/mecha_parts/mecha_tracking/MT = afilter.getObj("get_log") stored_data = MT.get_mecha_log() screen = 1 if(href_list["return"]) diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm index 27256d8b0b..54b44f89f9 100644 --- a/code/game/mecha/mecha_topic.dm +++ b/code/game/mecha/mecha_topic.dm @@ -22,7 +22,7 @@ [js_dropdowns] function SSticker() { setInterval(function(){ - window.location='byond://?src=\ref[src]&update_content=1'; + window.location='byond://?src=[REF(src)]&update_content=1'; }, 1000); } @@ -55,7 +55,7 @@ "[MECHA_INT_FIRE]" = "INTERNAL FIRE", "[MECHA_INT_TEMP_CONTROL]" = "LIFE SUPPORT SYSTEM MALFUNCTION", "[MECHA_INT_TANK_BREACH]" = "GAS TANK BREACH", - "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate", + "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate", "[MECHA_INT_SHORT_CIRCUIT]" = "SHORT CIRCUIT" ) for(var/tflag in dam_reports) @@ -84,7 +84,7 @@ Airtank temperature: [tank_temperature]°K|[tank_temperature - T0C]°C
    Cabin pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
    Cabin temperature: [return_temperature()]°K|[return_temperature() - T0C]°C
    - [dna_lock?"DNA-locked:
    [dna_lock] \[Reset\]
    ":""]
    + [dna_lock?"DNA-locked:
    [dna_lock] \[Reset\]
    ":""]
    [thrusters_action.owner ? "Thrusters: [thrusters_active ? "Enabled" : "Disabled"]
    " : ""] [defense_action.owner ? "Defence Mode: [defence_mode ? "Enabled" : "Disabled"]
    " : ""] [overload_action.owner ? "Leg Actuators Overload: [leg_overload_mode ? "Enabled" : "Disabled"]
    " : ""] @@ -100,25 +100,25 @@
    Electronics
    [get_equipment_menu()]
    @@ -133,7 +133,7 @@
    " @@ -143,7 +143,7 @@ return . = "Equipment:
    " for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) - . += "
    [MT.get_equip_info()]
    " + . += "
    [MT.get_equip_info()]
    " . += "
    " @@ -171,7 +171,7 @@

    Following keycodes are present in this system:

    "} for(var/a in operation_req_access) - . += "[get_access_desc(a)] - Delete
    " + . += "[get_access_desc(a)] - Delete
    " . += "

    Following keycodes were detected on portable device:

    " for(var/a in id_card.access) if(a in operation_req_access) @@ -179,8 +179,8 @@ var/a_name = get_access_desc(a) if(!a_name) continue //there's some strange access without a name - . += "[a_name] - Add
    " - . += "
    Finish " + . += "[a_name] - Add
    " + . += "
    Finish " . += "(Warning! The ID upload panel will be locked. It can be unlocked only through Exosuit Interface.)" . += "" user << browse(., "window=exosuit_add_access") @@ -198,9 +198,9 @@ - [add_req_access?"Edit operation keycodes":null] - [maint_access?"Initiate maintenance protocol":null] - [(state>0) ?"Set Cabin Air Pressure":null] + [add_req_access?"Edit operation keycodes":null] + [maint_access?"Initiate maintenance protocol":null] + [(state>0) ?"Set Cabin Air Pressure":null] "} user << browse(., "window=exosuit_maint_console") @@ -221,15 +221,15 @@ if(usr.incapacitated()) return - var/datum/topic_input/filter = new /datum/topic_input(href,href_list) + var/datum/topic_input/afilter = new /datum/topic_input(href,href_list) if(in_range(src, usr)) if(href_list["req_access"] && add_req_access) - output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) + output_access_dialog(afilter.getObj("id_card"),afilter.getMob("user")) if(href_list["maint_access"] && maint_access) - var/mob/user = filter.getMob("user") + var/mob/user = afilter.getMob("user") if(user) if(state==0) state = 1 @@ -237,27 +237,27 @@ else if(state==1) state = 0 to_chat(user, "The securing bolts are now hidden.") - output_maintenance_dialog(filter.getObj("id_card"),user) + output_maintenance_dialog(afilter.getObj("id_card"),user) if(href_list["set_internal_tank_valve"] && state >=1) - var/mob/user = filter.getMob("user") + var/mob/user = afilter.getMob("user") if(user) var/new_pressure = input(user,"Input new output pressure","Pressure setting",internal_tank_valve) as num if(new_pressure) internal_tank_valve = new_pressure to_chat(user, "The internal pressure valve has been set to [internal_tank_valve]kPa.") - if(href_list["add_req_access"] && add_req_access && filter.getObj("id_card")) - operation_req_access += filter.getNum("add_req_access") - output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) + if(href_list["add_req_access"] && add_req_access && afilter.getObj("id_card")) + operation_req_access += afilter.getNum("add_req_access") + output_access_dialog(afilter.getObj("id_card"),afilter.getMob("user")) - if(href_list["del_req_access"] && add_req_access && filter.getObj("id_card")) - operation_req_access -= filter.getNum("del_req_access") - output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) + if(href_list["del_req_access"] && add_req_access && afilter.getObj("id_card")) + operation_req_access -= afilter.getNum("del_req_access") + output_access_dialog(afilter.getObj("id_card"),afilter.getMob("user")) if(href_list["finish_req_access"]) add_req_access = 0 - var/mob/user = filter.getMob("user") + var/mob/user = afilter.getMob("user") user << browse(null,"window=exosuit_add_access") if(usr != occupant) @@ -267,7 +267,7 @@ send_byjax(src.occupant,"exosuit.browser","content",src.get_stats_part()) if(href_list["select_equip"]) - var/obj/item/mecha_parts/mecha_equipment/equip = filter.getObj("select_equip") + var/obj/item/mecha_parts/mecha_equipment/equip = afilter.getObj("select_equip") if(equip && equip.selectable) src.selected = equip src.occupant_message("You switch to [equip]") @@ -283,7 +283,7 @@ send_byjax(src.occupant,"exosuit.browser","rspkstate",(radio.listening?"Engaged":"Disengaged")) if(href_list["rfreq"]) - var/new_frequency = (radio.frequency + filter.getNum("rfreq")) + var/new_frequency = (radio.frequency + afilter.getNum("rfreq")) if (!radio.freerange || (radio.frequency < 1200 || radio.frequency > 1600)) new_frequency = sanitize_frequency(new_frequency) radio.set_frequency(new_frequency) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 131e6cd7f7..0da64c3e4d 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -149,7 +149,7 @@ output += "Cargo Compartment Contents:
    " if(cargo.len) for(var/obj/O in cargo) - output += "Unload : [O]
    " + output += "Unload : [O]
    " else output += "Nothing" output += "
    " diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 1f3a5a7b02..3de8432ee9 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -288,7 +288,7 @@ var/mob/M = get_mob_by_key(carry.my_atom.fingerprintslast) var/more = "" if(M) - more = "(?) (FLW) " + more = "(?) (FLW) " message_admins("Smoke: ([whereLink])[contained]. Key: [carry.my_atom.fingerprintslast][more].", 0, 1) log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].") else diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index c08ad793ab..0b1432e61c 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -198,7 +198,7 @@ S.directive = directive if(player_spiders) S.playable_spider = TRUE - notify_ghosts("Spider [S.name] can be controlled", null, enter_link="(Click to play)", source=S, action=NOTIFY_ATTACK) + notify_ghosts("Spider [S.name] can be controlled", null, enter_link="(Click to play)", source=S, action=NOTIFY_ATTACK) qdel(src) diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 0433fde454..199bb0152d 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -172,11 +172,11 @@ ARCD if(use_one_access) - t1 += "Restriction Type: At least one access required
    " + t1 += "Restriction Type: At least one access required
    " else - t1 += "Restriction Type: All accesses required
    " + t1 += "Restriction Type: All accesses required
    " - t1 += "Remove All
    " + t1 += "Remove All
    " var/accesses = "" accesses += "
    Access
    " @@ -189,15 +189,15 @@ ARCD accesses += "" for(var/A in get_region_accesses(i)) if(A in conf_access) - accesses += "[replacetext(get_access_desc(A), " ", " ")] " + accesses += "[replacetext(get_access_desc(A), " ", " ")] " else - accesses += "[replacetext(get_access_desc(A), " ", " ")] " + accesses += "[replacetext(get_access_desc(A), " ", " ")] " accesses += "
    " accesses += "" accesses += "" t1 += "[accesses]" - t1 += text("

    Close

    \n", src) + t1 += "

    Close

    \n" var/datum/browser/popup = new(usr, "airlock_electronics", "Access Control", 900, 500) popup.set_content(t1) diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index 76fabdc8e8..83d278b477 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -35,7 +35,7 @@ RPD /datum/pipe_info/proc/Render(dispenser,label) /datum/pipe_info/pipe/Render(dispenser,label,dir=NORTH) - return "
  • [label]
  • " + return "
  • [label]
  • " /datum/pipe_info/meter categoryId = CATEGORY_ATMOS @@ -46,7 +46,7 @@ RPD return /datum/pipe_info/meter/Render(dispenser,label) - return "
  • [label]
  • " //hardcoding is no + return "
  • [label]
  • " //hardcoding is no GLOBAL_LIST_INIT(disposalpipeID2State, list( "pipe-s", @@ -74,7 +74,7 @@ GLOBAL_LIST_INIT(disposalpipeID2State, list( icon_state = "con[icon_state]" /datum/pipe_info/disposal/Render(dispenser,label) - return "
  • [label]
  • " //avoid hardcoding. + return "
  • [label]
  • " //avoid hardcoding. //find these defines in code\game\machinery\pipe\consruction.dm GLOBAL_LIST_INIT(RPD_recipes, list( @@ -177,7 +177,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list( var/selected=" class=\"imglink\"" if(_dir == p_dir) selected=" class=\"imglink selected\"" - return "" + return "" /obj/item/pipe_dispenser/proc/show_menu(mob/user) if(!user || !src) @@ -186,27 +186,27 @@ GLOBAL_LIST_INIT(RPD_recipes, list( Utilities:
      "} if(p_class != EATING_MODE) - dat += "
    • Eat Pipes
    • " + dat += "
    • Eat Pipes
    • " else dat += "
    • Eat Pipes
    • " if(p_class != PAINT_MODE) - dat += "
    • Paint Pipes
    • " + dat += "
    • Paint Pipes
    • " else dat += "
    • Paint Pipes
    • " dat += "
    " dat += "Category:
      " if(screen == CATEGORY_ATMOS) - dat += "Atmospherics Disposals
      " + dat += "Atmospherics Disposals
      " else if(screen == CATEGORY_DISPOSALS) - dat += "Atmospherics Disposals
      " + dat += "Atmospherics Disposals
      " var/generated_layer_list = "" var/layers_total = PIPING_LAYER_MAX - PIPING_LAYER_MIN + 1 for(var/iter = PIPING_LAYER_MIN, iter <= layers_total, iter++) if(iter == piping_layer) - generated_layer_list += "[iter]" + generated_layer_list += "[iter]" else - generated_layer_list += "[iter]" + generated_layer_list += "[iter]" dat += "Atmospherics Piping Layer: [generated_layer_list]
      " dat += "
    " @@ -254,7 +254,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list( var/selected="" if(color_name==paint_color) selected = " selected" - color_picker += {""} + color_picker += {""} var/dirsel="

    Direction

    " switch(p_conntype) @@ -276,8 +276,8 @@ GLOBAL_LIST_INIT(RPD_recipes, list( else dirsel+={"

    - - + +

    "} @@ -303,14 +303,14 @@ GLOBAL_LIST_INIT(RPD_recipes, list( else dirsel+={"

    - - + +
    - - + +
    - - + +

    "} if(PIPE_TRINARY) // Manifold @@ -330,11 +330,11 @@ GLOBAL_LIST_INIT(RPD_recipes, list( else dirsel+={"

    - - + +
    - - + +

    "} if(PIPE_TRIN_M) // Mirrored ones @@ -364,17 +364,17 @@ GLOBAL_LIST_INIT(RPD_recipes, list( else dirsel+={"

    - - + +
    - - + +
    - - + +
    - - + +

    "} if(PIPE_UNARY) // Stuff with four directions - includes pumps etc. @@ -393,10 +393,10 @@ GLOBAL_LIST_INIT(RPD_recipes, list( else dirsel+={"

    - - - - + + + +

    "} if(PIPE_QUAD) // Single icon_state (eg 4-way manifolds) @@ -409,7 +409,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list( else dirsel+={"

    - +

    "} diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index cd63cb0951..239f59f8b7 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -28,7 +28,7 @@ switch(get_area_type()) if(AREA_SPACE) text += "

    According to the [src.name], you are now in an unclaimed territory.

    \ -

    Mark this place as new area.

    " +

    Mark this place as new area.

    " if(AREA_SPECIAL) text += "

    This place is not noted on the [src.name].

    " return text @@ -69,20 +69,20 @@ var/area/A = get_area() if(get_area_type() == AREA_STATION) . += "

    According to \the [src], you are now in \"[html_encode(A.name)]\".

    " - . += "

    You may make an amendment to the drawing.

    " - . += "

    View wire colour legend

    " + . += "

    You may make an amendment to the drawing.

    " + . += "

    View wire colour legend

    " if(!viewing) - . += "

    View structural data

    " + . += "

    View structural data

    " else - . += "

    Refresh structural data

    " - . += "

    Hide structural data

    " + . += "

    Refresh structural data

    " + . += "

    Hide structural data

    " else if(legend == TRUE) - . += "<< Back" + . += "<< Back" . += view_wire_devices(user); else //legend is a wireset - . += "<< Back" + . += "<< Back" . += view_wire_set(user, legend) var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500) popup.set_content(.) @@ -169,7 +169,7 @@ /obj/item/areaeditor/blueprints/proc/view_wire_devices(mob/user) var/message = "
    You examine the wire legend.
    " for(var/wireset in GLOB.wire_color_directory) - message += "
    [GLOB.wire_name_directory[wireset]]" + message += "
    [GLOB.wire_name_directory[wireset]]" message += "

    " return message diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm index 04ae5d9508..2527b573d3 100644 --- a/code/game/objects/items/charter.dm +++ b/code/game/objects/items/charter.dm @@ -59,7 +59,7 @@ to_chat(user, "Your name has been sent to your employers for approval.") // Autoapproves after a certain time response_timer_id = addtimer(CALLBACK(src, .proc/rename_station, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE) - to_chat(GLOB.admins, "CUSTOM STATION RENAME:[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [new_name] (will autoapprove in [DisplayTimeText(approval_time)]). [ADMIN_SMITE(user)] (REJECT) [ADMIN_CENTCOM_REPLY(user)]") + to_chat(GLOB.admins, "CUSTOM STATION RENAME:[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [new_name] (will autoapprove in [DisplayTimeText(approval_time)]). [ADMIN_SMITE(user)] (REJECT) [ADMIN_CENTCOM_REPLY(user)]") /obj/item/station_charter/proc/reject_proposed(user) if(!user) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 578bf16982..244e82ee77 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -167,18 +167,18 @@ GLOBAL_LIST_EMPTY(PDAs) var/dat = "Personal Data Assistant" - dat += "Refresh" + dat += "Refresh" if ((!isnull(cartridge)) && (mode == 0)) - dat += " | Eject [cartridge]" + dat += " | Eject [cartridge]" if (mode) - dat += " | Return" + dat += " | Return" if (mode == 0) dat += "
    " - dat += "
    Toggle Font" - dat += " | Change Color" - dat += " | Toggle Underline" //underline button + dat += "
    Toggle Font" + dat += " | Change Color" + dat += " | Toggle Underline" //underline button dat += "
    " @@ -186,14 +186,14 @@ GLOBAL_LIST_EMPTY(PDAs) if (!owner) dat += "Warning: No owner information entered. Please swipe card.

    " - dat += "Retry" + dat += "Retry" else switch (mode) if (0) dat += "

    PERSONAL DATA ASSISTANT v.1.2

    " dat += "Owner: [owner], [ownjob]
    " - dat += text("ID: [id ? "[id.registered_name], [id.assignment]" : "----------"]") - dat += text("
    [id ? "Update PDA Info" : ""]

    ") + dat += text("ID: [id ? "[id.registered_name], [id.assignment]" : "----------"]") + dat += text("
    [id ? "Update PDA Info" : ""]

    ") dat += "[worldtime2text()]
    " //:[world.time / 100 % 6][world.time / 100 % 10]" dat += "[time2text(world.realtime, "MMM DD")] [GLOB.year_integer+540]" @@ -202,38 +202,38 @@ GLOBAL_LIST_EMPTY(PDAs) dat += "

    General Functions

    " dat += "" if (cartridge.access & CART_ENGINE) dat += "

    Engineering Functions

    " dat += "" if (cartridge.access & CART_MEDICAL) dat += "

    Medical Functions

    " dat += "" if (cartridge.access & CART_SECURITY) dat += "

    Security Functions

    " dat += "" if(cartridge.access & CART_QUARTERMASTER) dat += "

    Quartermaster Functions:

    " dat += "" dat += "" @@ -241,47 +241,47 @@ GLOBAL_LIST_EMPTY(PDAs) dat += "" if (1) dat += "

    Notekeeper V2.2

    " - dat += "Edit
    " + dat += "Edit
    " if(notescanned) dat += "(This is a scanned image, editing it may cause some text formatting to change.)
    " dat += "
    [(!notehtml ? note : notehtml)]" if (2) dat += "

    SpaceMessenger V3.9.6

    " - dat += "Ringer: [silent == 1 ? "Off" : "On"] | " - dat += "Send / Receive: [toff == 1 ? "Off" : "On"] | " - dat += "Set Ringtone | " - dat += "Messages
    " + dat += "Ringer: [silent == 1 ? "Off" : "On"] | " + dat += "Send / Receive: [toff == 1 ? "Off" : "On"] | " + dat += "Set Ringtone | " + dat += "Messages
    " if(cartridge) dat += cartridge.message_header() @@ -295,7 +295,7 @@ GLOBAL_LIST_EMPTY(PDAs) for (var/obj/item/device/pda/P in sortNames(get_viewable_pdas())) if (P == src) continue - dat += "
  • [P]" + dat += "
  • [P]" if(cartridge) dat += cartridge.message_special(P) dat += "
  • " @@ -304,11 +304,11 @@ GLOBAL_LIST_EMPTY(PDAs) if (count == 0) dat += "None detected.
    " else if(cartridge && cartridge.spam_enabled) - dat += "Send To All" + dat += "Send To All" if(21) dat += "

    SpaceMessenger V3.9.6

    " - dat += "Clear Messages" + dat += "Clear Messages" dat += "

    Messages

    " @@ -633,7 +633,7 @@ GLOBAL_LIST_EMPTY(PDAs) tnote += "→ To [multiple ? "Everyone" : msg.recipient]:
    [msg.message][msg.get_photo_ref()]
    " /obj/item/device/pda/proc/show_recieved_message(datum/data_pda_msg/msg,obj/item/device/pda/source) - tnote += "← From [source.owner] ([source.ownjob]):
    [msg.message][msg.get_photo_ref()]
    " + tnote += "← From [source.owner] ([source.ownjob]):
    [msg.message][msg.get_photo_ref()]
    " if (!silent) playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) @@ -651,10 +651,10 @@ GLOBAL_LIST_EMPTY(PDAs) var/hrefstart var/hrefend if (isAI(L)) - hrefstart = "" + hrefstart = "" hrefend = "" - to_chat(L, "[icon2html(src)] Message from [hrefstart][source.owner] ([source.ownjob])[hrefend], \"[msg.message]\"[msg.get_photo_ref()] (Reply)") + to_chat(L, "[icon2html(src)] Message from [hrefstart][source.owner] ([source.ownjob])[hrefend], \"[msg.message]\"[msg.get_photo_ref()] (Reply)") update_icon() add_overlay(icon_alert) diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 92acb36982..d2156beec6 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -229,20 +229,20 @@ menu = "

    Remote Signaling System

    " menu += {" -Send Signal
    +Send Signal
    Frequency: -- -- +- +- [format_frequency(S.frequency)] -+ -+
    ++ ++

    Code: -- -- +- +- [S.code] -+ -+
    "} ++ ++
    "} if (41) //crew manifest menu = "

    Crew Manifest

    " @@ -256,15 +256,15 @@ Code: if (42) //status displays menu = "

    Station Status Display Interlink

    " - menu += "\[ Clear \]
    " - menu += "\[ Shuttle ETA \]
    " - menu += "\[ Message \]" - menu += "
    " - menu += "\[ Alert: None |" - menu += " Red Alert |" - menu += " Lockdown |" - menu += " Biohazard \]
    " + menu += "\[ Clear \]
    " + menu += "\[ Shuttle ETA \]
    " + menu += "\[ Message \]" + menu += "
    " + menu += "\[ Alert: None |" + menu += " Red Alert |" + menu += " Lockdown |" + menu += " Biohazard \]
    " if (43) menu = "

    Power Monitors - Please select one


    " @@ -288,7 +288,7 @@ Code: var/count = 0 for(var/obj/machinery/computer/monitor/pMon in powermonitors) count++ - menu += "[pMon]
    " + menu += "[pMon]
    " menu += "
    " @@ -323,7 +323,7 @@ Code: menu = "

    Medical Record List

    " if(GLOB.data_core.general) for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) - menu += "[R.fields["id"]]: [R.fields["name"]]
    " + menu += "
    [R.fields["id"]]: [R.fields["name"]]
    " menu += "
    " if(441) menu = "

    Medical Record

    " @@ -366,7 +366,7 @@ Code: menu = "

    Security Record List

    " if(GLOB.data_core.general) for (var/datum/data/record/R in sortRecord(GLOB.data_core.general)) - menu += "
    [R.fields["id"]]: [R.fields["name"]]
    " + menu += "
    [R.fields["id"]]: [R.fields["name"]]
    " menu += "
    " if(451) @@ -521,11 +521,11 @@ Code: else menu += "ERROR: Unable to determine current location." - menu += "

    Refresh GPS Locator" + menu += "

    Refresh GPS Locator" if (53) // Newscaster menu = "

    Newscaster Access

    " - menu += "
    Current Newsfeed: [current_channel ? current_channel : "None"]
    " + menu += "
    Current Newsfeed: [current_channel ? current_channel : "None"]
    " var/datum/newscaster/feed_channel/current for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) if (chan.channel_name == current_channel) @@ -543,7 +543,7 @@ Code: i++ for(var/datum/newscaster/feed_comment/comment in msg.comments) menu +="[comment.body]
    [comment.author] [comment.time_stamp]
    " - menu += "
    Post Message" + menu += "
    Post Message" if (54) // Beepsky, Medibot, Floorbot, and Cleanbot access menu = "

    Bots Interlink

    " @@ -673,7 +673,7 @@ Code: // menu = "Interlink Error - Please reinsert cartridge." // return if(active_bot) - menu += "[active_bot]
    Status: (refresh)
    " + menu += "[active_bot]
    Status: (refresh)
    " menu += "Model: [active_bot.model]
    " menu += "Location: [get_area(active_bot)]
    " menu += "Mode: [active_bot.get_mode()]" @@ -682,7 +682,7 @@ Code: if(active_bot.paicard && active_bot.paicard.pai) menu += "[active_bot.paicard.pai.name]" if(active_bot.bot_core.allowed(usr)) - menu += " (eject)" + menu += " (eject)" else menu += "none" @@ -690,35 +690,35 @@ Code: if(active_bot.bot_type == MULE_BOT) var/mob/living/simple_animal/bot/mulebot/MULE = active_bot var/atom/Load = MULE.load - menu += "
    Current Load: [ !Load ? "none" : "[Load.name] (unload)" ]
    " - menu += "Destination: [MULE.destination ? MULE.destination : "None"] (set)
    " - menu += "Set ID: [MULE.suffix] Modify
    " + menu += "
    Current Load: [ !Load ? "none" : "[Load.name] (unload)" ]
    " + menu += "Destination: [MULE.destination ? MULE.destination : "None"] (set)
    " + menu += "Set ID: [MULE.suffix] Modify
    " menu += "Power: [MULE.cell ? MULE.cell.percent() : 0]%
    " menu += "Home: [!MULE.home_destination ? "none" : MULE.home_destination ]
    " - menu += "Delivery Reporting: [MULE.report_delivery ? "(On)": "(Off)"]
    " - menu += "Auto Return Home: [MULE.auto_return ? "(On)": "(Off)"]
    " - menu += "Auto Pickup Crate: [MULE.auto_pickup ? "(On)": "(Off)"]

    " //Hue. + menu += "Delivery Reporting: [MULE.report_delivery ? "(On)": "(Off)"]
    " + menu += "Auto Return Home: [MULE.auto_return ? "(On)": "(Off)"]
    " + menu += "Auto Pickup Crate: [MULE.auto_pickup ? "(On)": "(Off)"]

    " //Hue. - menu += "\[Stop\] " - menu += "\[Proceed\] " - menu += "\[Return Home\]
    " + menu += "\[Stop\] " + menu += "\[Proceed\] " + menu += "\[Return Home\]
    " else - menu += "
    \[Stop Patrol\] " //patrolon - menu += "\[Start Patrol\] " //patroloff - menu += "\[Summon Bot\]
    " //summon + menu += "
    \[Stop Patrol\] " //patrolon + menu += "\[Start Patrol\] " //patroloff + menu += "\[Summon Bot\]
    " //summon menu += "Keep an ID inserted to upload access codes upon summoning." - menu += "
    Return to bot list" + menu += "
    Return to bot list" else - menu += "
    Scan for active bots

    " + menu += "
    Scan for active bots

    " var/turf/current_turf = get_turf(src) var/zlevel = current_turf.z var/botcount = 0 for(Bot in GLOB.living_mob_list) //Git da botz if(!Bot.on || Bot.z != zlevel || Bot.remote_disabled || !(bot_access_flags & Bot.bot_type)) //Only non-emagged bots on the same Z-level are detected! continue //Also, the PDA must have access to the bot type. - menu += "[Bot.name] ([Bot.get_mode()])
    " + menu += "
    [Bot.name] ([Bot.get_mode()])
    " botcount++ if(!botcount) //No bots at all? Lame. menu += "No bots found.
    " diff --git a/code/game/objects/items/devices/PDA/virus_cart.dm b/code/game/objects/items/devices/PDA/virus_cart.dm index a514270618..ce7f85b825 100644 --- a/code/game/objects/items/devices/PDA/virus_cart.dm +++ b/code/game/objects/items/devices/PDA/virus_cart.dm @@ -11,7 +11,7 @@ /obj/item/cartridge/virus/message_special(obj/item/device/pda/target) if (!istype(loc, /obj/item/device/pda)) return "" //Sanity check, this shouldn't be possible. - return " (
    *Send Virus*)" + return " (*Send Virus*)" /obj/item/cartridge/virus/special(mob/living/user, list/params) var/obj/item/device/pda/P = locate(params["target"])//Leaving it alone in case it may do something useful, I guess. diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 62b8c9ae4e..750406d0d5 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD #define BUGMODE_LIST 0 #define BUGMODE_MONITOR 1 @@ -295,3 +296,302 @@ #undef BUGMODE_LIST #undef BUGMODE_MONITOR #undef BUGMODE_TRACK +======= + +#define BUGMODE_LIST 0 +#define BUGMODE_MONITOR 1 +#define BUGMODE_TRACK 2 + + + +/obj/item/device/camera_bug + name = "camera bug" + desc = "For illicit snooping through the camera network." + icon = 'icons/obj/device.dmi' + icon_state = "camera_bug" + w_class = WEIGHT_CLASS_TINY + item_state = "camera_bug" + throw_speed = 4 + throw_range = 20 + origin_tech = "syndicate=1;engineering=3" + flags_1 = NOBLUDGEON_1 + + var/obj/machinery/camera/current = null + + var/last_net_update = 0 + var/list/bugged_cameras = list() + + var/track_mode = BUGMODE_LIST + var/last_tracked = 0 + var/refresh_interval = 50 + + var/tracked_name = null + var/atom/tracking = null + + var/last_found = null + var/last_seen = null + +/obj/item/device/camera_bug/New() + ..() + START_PROCESSING(SSobj, src) + +/obj/item/device/camera_bug/Destroy() + get_cameras() + for(var/cam_tag in bugged_cameras) + var/obj/machinery/camera/camera = bugged_cameras[cam_tag] + if(camera.bug == src) + camera.bug = null + bugged_cameras = list() + if(tracking) + tracking = null + return ..() + + +/obj/item/device/camera_bug/interact(mob/user = usr) + var/datum/browser/popup = new(user, "camerabug","Camera Bug",nref=src) + popup.set_content(menu(get_cameras())) + popup.open() + +/obj/item/device/camera_bug/attack_self(mob/user) + user.set_machine(src) + interact(user) + +/obj/item/device/camera_bug/check_eye(mob/user) + if ( loc != user || user.incapacitated() || user.eye_blind || !current ) + user.unset_machine() + return 0 + var/turf/T = get_turf(user.loc) + if(T.z != current.z || !current.can_use()) + to_chat(user, "[src] has lost the signal.") + current = null + user.unset_machine() + return 0 + return 1 +/obj/item/device/camera_bug/on_unset_machine(mob/user) + user.reset_perspective(null) + +/obj/item/device/camera_bug/proc/get_cameras() + if( world.time > (last_net_update + 100)) + bugged_cameras = list() + for(var/obj/machinery/camera/camera in GLOB.cameranet.cameras) + if(camera.stat || !camera.can_use()) + continue + if(length(list("SS13","MINE")&camera.network)) + bugged_cameras[camera.c_tag] = camera + sortList(bugged_cameras) + return bugged_cameras + + +/obj/item/device/camera_bug/proc/menu(list/cameras) + if(!cameras || !cameras.len) + return "No bugged cameras found." + + var/html + switch(track_mode) + if(BUGMODE_LIST) + html = "

    Select a camera:

    \[Cancel camera view\]
    " + for(var/entry in cameras) + var/obj/machinery/camera/C = cameras[entry] + var/functions = "" + if(C.bug == src) + functions = " - \[Monitor\]\[Disable\]" + else + functions = " - \[Monitor\]" + html += "" + + if(BUGMODE_MONITOR) + if(current) + html = "Analyzing Camera '[current.c_tag]' \[Select Camera\]
    " + html += camera_report() + else + track_mode = BUGMODE_LIST + return .(cameras) + if(BUGMODE_TRACK) + if(tracking) + html = "Tracking '[tracked_name]' \[Cancel Tracking\]\[Cancel camera view\]
    " + if(last_found) + var/time_diff = round((world.time - last_seen) / 150) + var/obj/machinery/camera/C = bugged_cameras[last_found] + var/outstring + if(C) + outstring = "[last_found]" + else + outstring = last_found + if(!time_diff) + html += "Last seen near [outstring] (now)
    " + else + // 15 second intervals ~ 1/4 minute + var/m = round(time_diff/4) + var/s = (time_diff - 4*m) * 15 + if(!s) + s = "00" + html += "Last seen near [outstring] ([m]:[s] minute\s ago)
    " + if( C && (C.bug == src)) //Checks to see if the camera has a bug + html += "\[Disable\]" + + else + html += "Not yet seen." + else + track_mode = BUGMODE_LIST + return .(cameras) + return html + +/obj/item/device/camera_bug/proc/get_seens() + if(current && current.can_use()) + var/list/seen = current.can_see() + return seen + +/obj/item/device/camera_bug/proc/camera_report() + // this should only be called if current exists + var/dat = "" + var/list/seen = get_seens() + if(seen && seen.len >= 1) + var/list/names = list() + for(var/obj/singularity/S in seen) // god help you if you see more than one + if(S.name in names) + names[S.name]++ + dat += "[S.name] ([names[S.name]])" + else + names[S.name] = 1 + dat += "[S.name]" + var/stage = round(S.current_size / 2)+1 + dat += " (Stage [stage])" + dat += " \[Track\]
    " + + for(var/obj/mecha/M in seen) + if(M.name in names) + names[M.name]++ + dat += "[M.name] ([names[M.name]])" + else + names[M.name] = 1 + dat += "[M.name]" + dat += " \[Track\]
    " + + + for(var/mob/living/M in seen) + if(M.name in names) + names[M.name]++ + dat += "[M.name] ([names[M.name]])" + else + names[M.name] = 1 + dat += "[M.name]" + if(M.buckled && !M.lying) + dat += " (Sitting)" + if(M.lying) + dat += " (Laying down)" + dat += " \[Track\]
    " + if(length(dat) == 0) + dat += "No motion detected." + return dat + else + return "Camera Offline
    " + +/obj/item/device/camera_bug/Topic(href,list/href_list) + if(usr != loc) + usr.unset_machine() + usr << browse(null, "window=camerabug") + return + usr.set_machine(src) + if("mode" in href_list) + track_mode = text2num(href_list["mode"]) + if("monitor" in href_list) + //You can't locate on a list with keys + var/list/cameras = flatten_list(bugged_cameras) + var/obj/machinery/camera/C = locate(href_list["monitor"]) in cameras + if(C && istype(C)) + track_mode = BUGMODE_MONITOR + current = C + usr.reset_perspective(null) + interact() + if("track" in href_list) + var/list/seen = get_seens() + if(seen && seen.len >= 1) + var/atom/A = locate(href_list["track"]) in seen + if(A && istype(A)) + tracking = A + tracked_name = A.name + last_found = current.c_tag + last_seen = world.time + track_mode = BUGMODE_TRACK + if("emp" in href_list) + //You can't locate on a list with keys + var/list/cameras = flatten_list(bugged_cameras) + var/obj/machinery/camera/C = locate(href_list["emp"]) in cameras + if(C && istype(C) && C.bug == src) + C.emp_act(EMP_HEAVY) + C.bug = null + bugged_cameras -= C.c_tag + interact() + return + if("close" in href_list) + usr.unset_machine() + current = null + return + if("view" in href_list) + //You can't locate on a list with keys + var/list/cameras = flatten_list(bugged_cameras) + var/obj/machinery/camera/C = locate(href_list["view"]) in cameras + if(C && istype(C)) + if(!C.can_use()) + to_chat(usr, "Something's wrong with that camera! You can't get a feed.") + return + var/turf/T = get_turf(loc) + if(!T || C.z != T.z) + to_chat(usr, "You can't get a signal!") + return + current = C + spawn(6) + if(src.check_eye(usr)) + usr.reset_perspective(C) + interact() + else + usr.unset_machine() + usr << browse(null, "window=camerabug") + return + else + usr.unset_machine() + + interact() + +/obj/item/device/camera_bug/process() + if(track_mode == BUGMODE_LIST || (world.time < (last_tracked + refresh_interval))) + return + last_tracked = world.time + if(track_mode == BUGMODE_TRACK ) // search for user + // Note that it will be tricked if your name appears to change. + // This is not optimal but it is better than tracking you relentlessly despite everything. + if(!tracking) + src.updateSelfDialog() + return + + if(tracking.name != tracked_name) // Hiding their identity, tricksy + var/mob/M = tracking + if(istype(M)) + if(!(tracked_name == "Unknown" && findtext(tracking.name,"Unknown"))) // we saw then disguised before + if(!(tracked_name == M.real_name && findtext(tracking.name,M.real_name))) // or they're still ID'd + src.updateSelfDialog()//But if it's neither of those cases + return // you won't find em on the cameras + else + src.updateSelfDialog() + return + + var/list/tracking_cams = list() + var/list/b_cams = get_cameras() + for(var/entry in b_cams) + tracking_cams += b_cams[entry] + var/list/target_region = view(tracking) + + for(var/obj/machinery/camera/C in (target_region & tracking_cams)) + if(!can_see(C,tracking)) // target may have xray, that doesn't make them visible to cameras + continue + if(C.can_use()) + last_found = C.c_tag + last_seen = world.time + break + src.updateSelfDialog() + + +#undef BUGMODE_LIST +#undef BUGMODE_MONITOR +#undef BUGMODE_TRACK +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 67618787b2..095e021458 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -29,30 +29,30 @@ var/dat = "Personal AI Device
    " if(pai) if(!pai.master_dna || !pai.master) - dat += "Imprint Master DNA
    " + dat += "Imprint Master DNA
    " dat += "Installed Personality: [pai.name]
    " dat += "Prime directive:
    [pai.laws.zeroth]
    " for(var/slaws in pai.laws.supplied) dat += "Additional directives:
    [slaws]
    " - dat += "Configure Directives
    " + dat += "Configure Directives
    " dat += "
    " dat += "

    Device Settings


    " if(pai.radio) dat += "Radio Uplink
    " - dat += "Transmit: [(pai.radio.wires.is_cut(WIRE_TX)) ? "Disabled" : "Enabled"]
    " - dat += "Receive: [(pai.radio.wires.is_cut(WIRE_RX)) ? "Disabled" : "Enabled"]
    " + dat += "Transmit: [(pai.radio.wires.is_cut(WIRE_TX)) ? "Disabled" : "Enabled"]
    " + dat += "Receive: [(pai.radio.wires.is_cut(WIRE_RX)) ? "Disabled" : "Enabled"]
    " else dat += "Radio Uplink
    " dat += "Radio firmware not loaded. Please install a pAI personality to load firmware.
    " if(ishuman(user)) var/mob/living/carbon/human/H = user if(H.real_name == pai.master || H.dna.unique_enzymes == pai.master_dna) - dat += "\[[pai.canholo? "Disable" : "Enable"] holomatrix projectors\]
    " - dat += "\[Wipe current pAI personality\]
    " + dat += "\[[pai.canholo? "Disable" : "Enable"] holomatrix projectors\]
    " + dat += "\[Wipe current pAI personality\]
    " else dat += "No personality installed.
    " dat += "Searching for a personality... Press view available personalities to notify potential candidates." - dat += "\[View available personalities\]
    " + dat += "\[View available personalities\]
    " user << browse(dat, "window=paicard") onclose(user, "paicard") return diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 108c561fc1..ba02a1e610 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/item/device/electropack name = "electropack" desc = "Dance my monkeys! DANCE!!!" @@ -223,3 +224,151 @@ Code: onclose(user, "radio") return +======= +/obj/item/device/electropack + name = "electropack" + desc = "Dance my monkeys! DANCE!!!" + icon = 'icons/obj/radio.dmi' + icon_state = "electropack0" + item_state = "electropack" + lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + flags_1 = CONDUCT_1 + slot_flags = SLOT_BACK + w_class = WEIGHT_CLASS_HUGE + materials = list(MAT_METAL=10000, MAT_GLASS=2500) + var/on = TRUE + var/code = 2 + var/frequency = 1449 + var/shock_cooldown = 0 + +/obj/item/device/electropack/suicide_act(mob/user) + user.visible_message("[user] hooks [user.p_them()]self to the electropack and spams the trigger! It looks like [user.p_theyre()] trying to commit suicide!") + return (FIRELOSS) + +/obj/item/device/electropack/Initialize() + . = ..() + SSradio.add_object(src, frequency, GLOB.RADIO_CHAT) + +/obj/item/device/electropack/Destroy() + SSradio.remove_object(src, frequency) + return ..() + +/obj/item/device/electropack/attack_hand(mob/user) + if(iscarbon(user)) + var/mob/living/carbon/C = user + if(src == C.back) + to_chat(user, "You need help taking this off!") + return + ..() + +/obj/item/device/electropack/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/clothing/head/helmet)) + var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit( user ) + A.icon = 'icons/obj/assemblies.dmi' + + if(!user.transferItemToLoc(W, A)) + to_chat(user, "[W] is stuck to your hand, you cannot attach it to [src]!") + return + W.master = A + A.part1 = W + + user.transferItemToLoc(src, A, TRUE) + master = A + A.part2 = src + + user.put_in_hands(A) + A.add_fingerprint(user) + if(src.flags_1 & NODROP_1) + A.flags_1 |= NODROP_1 + else + return ..() + +/obj/item/device/electropack/Topic(href, href_list) + //..() + var/mob/living/carbon/C = usr + if(usr.stat || usr.restrained() || C.back == src) + return + if((ishuman(usr) && usr.contents.Find(src)) || usr.contents.Find(master) || (in_range(src, usr) && isturf(loc))) + usr.set_machine(src) + if(href_list["freq"]) + SSradio.remove_object(src, frequency) + frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) + SSradio.add_object(src, frequency, GLOB.RADIO_CHAT) + else + if(href_list["code"]) + code += text2num(href_list["code"]) + code = round(code) + code = min(100, code) + code = max(1, code) + else + if(href_list["power"]) + on = !( on ) + icon_state = "electropack[on]" + if(!( master )) + if(ismob(loc)) + attack_self(loc) + else + for(var/mob/M in viewers(1, src)) + if(M.client) + attack_self(M) + else + if(ismob(master.loc)) + attack_self(master.loc) + else + for(var/mob/M in viewers(1, master)) + if(M.client) + attack_self(M) + else + usr << browse(null, "window=radio") + return + return + +/obj/item/device/electropack/receive_signal(datum/signal/signal) + if(!signal || signal.encryption != code) + return + + if(isliving(loc) && on) + if(shock_cooldown != 0) + return + shock_cooldown = 1 + spawn(100) + shock_cooldown = 0 + var/mob/living/L = loc + step(L, pick(GLOB.cardinals)) + + to_chat(L, "You feel a sharp shock!") + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(3, 1, L) + s.start() + + L.Knockdown(100) + + if(master) + master.receive_signal() + return + +/obj/item/device/electropack/attack_self(mob/user) + + if(!ishuman(user)) + return + user.set_machine(src) + var/dat = {"Turned [on ? "On" : "Off"] - +Toggle
    +Frequency/Code for electropack:
    +Frequency: +- +- [format_frequency(frequency)] ++ ++
    + +Code: +- +- [code] ++ ++
    +
    "} + user << browse(dat, "window=radio") + onclose(user, "radio") + return +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index c97ad1271c..7ca4da4f65 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -111,9 +111,9 @@ effective or pretty fucking useless. /obj/item/device/healthanalyzer/rad_laser/interact(mob/user) user.set_machine(src) - var/dat = "Irradiation: [irradiate ? "On" : "Off"]
    " - dat += "Stealth Mode (NOTE: Deactivates automatically while Irradiation is off): [stealth ? "On" : "Off"]
    " - dat += "Scan Mode: " + var/dat = "Irradiation: [irradiate ? "On" : "Off"]
    " + dat += "Stealth Mode (NOTE: Deactivates automatically while Irradiation is off): [stealth ? "On" : "Off"]
    " + dat += "Scan Mode: " if(!scanmode) dat += "Scan Health" else if(scanmode == 1) @@ -124,14 +124,14 @@ effective or pretty fucking useless. dat += {" Radiation Intensity: - -- + -- [intensity] - ++
    + ++
    Radiation Wavelength: - -- + -- [(wavelength+(intensity*4))] - ++
    + ++
    Laser Cooldown: [DisplayTimeText(GetCooldown())]
    "} diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index fe310db994..53f36719e4 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -64,10 +64,10 @@ /obj/item/device/transfer_valve/attack_self(mob/user) user.set_machine(src) var/dat = {" Valve properties: -
    Attachment one: [tank_one] [tank_one ? "Remove" : ""] -
    Attachment two: [tank_two] [tank_two ? "Remove" : ""] -
    Valve attachment: [attached_device ? "[attached_device]" : "None"] [attached_device ? "Remove" : ""] -
    Valve status: [ valve_open ? "Closed Open" : "Closed Open"]"} +
    Attachment one: [tank_one] [tank_one ? "Remove" : ""] +
    Attachment two: [tank_two] [tank_two ? "Remove" : ""] +
    Valve attachment: [attached_device ? "[attached_device]" : "None"] [attached_device ? "Remove" : ""] +
    Valve status: [ valve_open ? "Closed Open" : "Closed Open"]"} var/datum/browser/popup = new(user, "trans_valve", name) popup.set_content(dat) diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index 15c6bcd4b1..8b26e33842 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -125,7 +125,7 @@ // notify ghosts that someone's shaking a haunted eightball // and inform them of the message, (hopefully a yes/no question) selected_message = last_message - notify_ghosts("[user] is shaking [src], hoping to get an answer to \"[selected_message]\"", source=src, enter_link="(Click to help)", action=NOTIFY_ATTACK) + notify_ghosts("[user] is shaking [src], hoping to get an answer to \"[selected_message]\"", source=src, enter_link="(Click to help)", action=NOTIFY_ATTACK) /obj/item/toy/eightball/haunted/Topic(href, href_list) if(href_list["interact"]) diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index 35ffebfe6b..b778bcb179 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -292,7 +292,7 @@ var/mob/last = get_mob_by_ckey(nadeassembly.fingerprintslast) var/turf/T = get_turf(src) var/area/A = get_area(T) - message_admins("grenade primed by an assembly, attached by [key_name_admin(M)](?) (FLW) and last touched by [key_name_admin(last)](?) (FLW) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP).") + message_admins("grenade primed by an assembly, attached by [key_name_admin(M)](?) (FLW) and last touched by [key_name_admin(last)](?) (FLW) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP).") log_game("grenade primed by an assembly, attached by [key_name(M)] and last touched by [key_name(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] ([T.x], [T.y], [T.z])") else addtimer(CALLBACK(src, .proc/prime), det_time) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index f47c5d30eb..9c0199e70f 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -289,13 +289,13 @@ return ..() /obj/item/robot_suit/proc/Interact(mob/user) - var/t1 = text("Designation: [(created_name ? "[created_name]" : "Default Cyborg")]
    \n",src) - t1 += text("Master AI: [(forced_ai ? "[forced_ai.name]" : "Automatic")]

    \n",src) + var/t1 = "Designation: [(created_name ? "[created_name]" : "Default Cyborg")]
    \n" + t1 += "Master AI: [(forced_ai ? "[forced_ai.name]" : "Automatic")]

    \n" - t1 += text("LawSync Port: [(lawsync ? "Open" : "Closed")]
    \n",src) - t1 += text("AI Connection Port: [(aisync ? "Open" : "Closed")]
    \n",src) - t1 += text("Servo Motor Functions: [(locomotion ? "Unlocked" : "Locked")]
    \n",src) - t1 += text("Panel Lock: [(panel_locked ? "Engaged" : "Disengaged")]
    \n",src) + t1 += "LawSync Port: [(lawsync ? "Open" : "Closed")]
    \n" + t1 += "AI Connection Port: [(aisync ? "Open" : "Closed")]
    \n" + t1 += "Servo Motor Functions: [(locomotion ? "Unlocked" : "Locked")]
    \n" + t1 += "Panel Lock: [(panel_locked ? "Engaged" : "Disengaged")]
    \n" var/datum/browser/popup = new(user, "robotdebug", "Cyborg Boot Debug", 310, 220) popup.set_content(t1) popup.open() diff --git a/code/game/objects/items/scrolls.dm b/code/game/objects/items/scrolls.dm index edddd27cf3..963dac5656 100644 --- a/code/game/objects/items/scrolls.dm +++ b/code/game/objects/items/scrolls.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/item/teleportation_scroll name = "scroll of teleportation" desc = "A scroll for moving around." @@ -72,3 +73,79 @@ smoke.start() uses-- +======= +/obj/item/teleportation_scroll + name = "scroll of teleportation" + desc = "A scroll for moving around." + icon = 'icons/obj/wizard.dmi' + icon_state = "scroll" + var/uses = 4 + w_class = WEIGHT_CLASS_SMALL + item_state = "paper" + throw_speed = 3 + throw_range = 7 + origin_tech = "bluespace=6" + resistance_flags = FLAMMABLE + +/obj/item/teleportation_scroll/apprentice + name = "lesser scroll of teleportation" + uses = 1 + origin_tech = "bluespace=5" + + + +/obj/item/teleportation_scroll/attack_self(mob/user) + user.set_machine(src) + var/dat = "Teleportation Scroll:
    " + dat += "Number of uses: [src.uses]
    " + dat += "
    " + dat += "Four uses, use them wisely:
    " + dat += "Teleport
    " + dat += "Kind regards,
    Wizards Federation

    P.S. Don't forget to bring your gear, you'll need it to cast most spells.
    " + user << browse(dat, "window=scroll") + onclose(user, "scroll") + return + +/obj/item/teleportation_scroll/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained() || src.loc != usr) + return + if (!ishuman(usr)) + return 1 + var/mob/living/carbon/human/H = usr + if(H.is_holding(src)) + H.set_machine(src) + if (href_list["spell_teleport"]) + if(uses) + teleportscroll(H) + if(H) + attack_self(H) + return + +/obj/item/teleportation_scroll/proc/teleportscroll(mob/user) + + var/A + + A = input(user, "Area to jump to", "BOOYEA", A) as null|anything in GLOB.teleportlocs + if(!src || QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !A || !uses) + return + var/area/thearea = GLOB.teleportlocs[A] + + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(2, user.loc) + smoke.attach(user) + smoke.start() + var/list/L = list() + for(var/turf/T in get_area_turfs(thearea.type)) + if(!is_blocked_turf(T)) + L += T + + if(!L.len) + to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.") + return + + user.forceMove(pick(L)) + + smoke.start() + uses-- +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 89fdc6d694..b1cb00acab 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -113,7 +113,7 @@ title+= "[R.title]" title+= " ([R.req_amount] [singular_name]\s)" if (can_build) - t1 += text("[] ", src, i, title) + t1 += text("[] ", i, title) else t1 += text("[]", title) continue @@ -123,9 +123,9 @@ var/list/multipliers = list(5,10,25) for (var/n in multipliers) if (max_multiplier>=n) - t1 += " [n*R.res_amount]x" + t1 += " [n*R.res_amount]x" if (!(max_multiplier in multipliers)) - t1 += " [max_multiplier*R.res_amount]x" + t1 += " [max_multiplier*R.res_amount]x" t1 += "
    " user << browse(t1, "window=stack") diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 2e11600d65..2fdd800d6d 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -542,7 +542,7 @@ /obj/item/storage/backpack/duffelbag/syndie/firestarter/PopulateContents() new /obj/item/clothing/under/syndicate/soviet(src) - new /obj/item/watertank/operator(src) + new /obj/item/watertank/op(src) new /obj/item/clothing/suit/space/hardsuit/syndi/elite(src) new /obj/item/gun/ballistic/automatic/pistol/APS(src) new /obj/item/ammo_box/magazine/pistolm9mm(src) diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index c0c861f4c4..0712fec228 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -43,7 +43,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", var/icon/bibleicon = icon('icons/obj/storage.dmi', GLOB.biblestates[i]) var/nicename = GLOB.biblenames[i] H << browse_rsc(bibleicon, nicename) - dat += {""} + dat += {""} dat += "
    [entry][functions]
    [nicename]
    [nicename]
    " H << browse(dat, "window=editicon;can_close=0;can_minimize=0;size=250x650") diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm index 4d56b6a8e8..0f7bdd616c 100644 --- a/code/game/objects/items/storage/secure.dm +++ b/code/game/objects/items/storage/secure.dm @@ -78,7 +78,7 @@ message = text("[]", src.code) if (!src.locked) message = "*****" - dat += text("
    \n>[]
    \n1-2-3
    \n4-5-6
    \n7-8-9
    \nR-0-E
    \n", message, src, src, src, src, src, src, src, src, src, src, src, src) + dat += text("
    \n>[]
    \n1-2-3
    \n4-5-6
    \n7-8-9
    \nR-0-E
    \n", message) user << browse(dat, "window=caselock;size=300x280") /obj/item/storage/secure/Topic(href, href_list) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 38a9555f83..5fedac37a8 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -439,7 +439,7 @@ user.update_inv_back() //for overlays update //Operator backpack spray -/obj/item/watertank/operator +/obj/item/watertank/op name = "backpack water tank" desc = "A New Russian backpack spray for systematic cleansing of carbon lifeforms." icon_state = "waterbackpackjani" @@ -448,7 +448,7 @@ volume = 2000 slowdown = 0 -/obj/item/watertank/operator/New() +/obj/item/watertank/op/New() ..() reagents.add_reagent("mutagen",350) reagents.add_reagent("napalm",125) @@ -458,8 +458,7 @@ reagents.add_reagent("plasma",250) reagents.add_reagent("condensedcapsaicin",500) -/obj/item/reagent_containers/spray/mister/operator - name = "janitor spray nozzle" +/obj/item/reagent_containers/spray/mister/op desc = "A mister nozzle attached to several extended water tanks. It suspiciously has a compressor in the system and is labelled entirely in New Cyrillic." icon = 'icons/obj/hydroponics/equipment.dmi' icon_state = "misterjani" @@ -470,5 +469,5 @@ amount_per_transfer_from_this = 100 possible_transfer_amounts = list(75,100,150) -/obj/item/watertank/operator/make_noz() - return new /obj/item/reagent_containers/spray/mister/operator(src) +/obj/item/watertank/op/make_noz() + return new /obj/item/reagent_containers/spray/mister/op(src) diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index c39a03dd12..fd12bcccd5 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -33,17 +33,17 @@ user.set_machine(src) var/dat if (src.temp) - dat = "[src.temp]

    Clear" + dat = "[src.temp]

    Clear" else dat = {" Persistent Signal Locator
    Frequency: -- -- [format_frequency(src.frequency)] -+ -+
    +- +- [format_frequency(src.frequency)] ++ ++
    -Refresh"} +Refresh"} user << browse(dat, "window=radio") onclose(user, "radio") return @@ -105,7 +105,7 @@ Frequency: direct = "weak" src.temp += "[W.imp_in.name]-[dir2text(get_dir(sr, tr))]-[direct]
    " - src.temp += "You are at \[[sr.x],[sr.y],[sr.z]\] in orbital coordinates.

    Refresh
    " + src.temp += "You are at \[[sr.x],[sr.y],[sr.z]\] in orbital coordinates.

    Refresh
    " else src.temp += "Processing Error: Unable to locate orbital position.
    " else diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 8d56fccad6..25c67b2713 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -750,7 +750,7 @@ /obj/item/toy/cards/cardhand/interact(mob/user) var/dat = "You have:
    " for(var/t in currenthand) - dat += "A [t].
    " + dat += "A [t].
    " dat += "Which card will you remove next?" var/datum/browser/popup = new(user, "cardhand", "Hand of Cards", 400, 240) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index 048184578a..3047dd9a2c 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -567,7 +567,7 @@ ..() if(!proximity) return - user.faction |= "greytide(\ref[user])" + user.faction |= "greytide([REF(user)])" if(isliving(AM)) var/mob/living/L = AM if(istype (L, /mob/living/simple_animal/hostile/illusion)) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index e95a81822c..6e865ff3bd 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -200,7 +200,7 @@ /obj/vv_get_dropdown() . = ..() - .["Delete all of type"] = "?_src_=vars;[HrefToken()];delall=\ref[src]" + .["Delete all of type"] = "?_src_=vars;[HrefToken()];delall=[REF(src)]" /obj/examine(mob/user) ..() diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index ac6a69ed93..25073853ad 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -69,7 +69,7 @@ if(LAZYLEN(contents)) for(var/i in 1 to contents.len) var/obj/item/I = contents[i] - dat += "[I.name]
    " + dat += "[I.name]
    " dat += "
    " var/datum/browser/popup = new(user, "gunlocker", "
    [name]
    ", 350, 300) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 747e0b3317..b6332492dd 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -93,15 +93,15 @@ user.set_machine(src) var/dat if(mybag) - dat += "[mybag.name]
    " + dat += "[mybag.name]
    " if(mymop) - dat += "[mymop.name]
    " + dat += "[mymop.name]
    " if(myspray) - dat += "[myspray.name]
    " + dat += "[myspray.name]
    " if(myreplacer) - dat += "[myreplacer.name]
    " + dat += "[myreplacer.name]
    " if(signs) - dat += "[signs] sign\s
    " + dat += "[signs] sign\s
    " var/datum/browser/popup = new(user, "janicart", name, 240, 160) popup.set_content(dat) popup.open() diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index d253cbcf44..8d62168f7c 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -144,31 +144,31 @@ if(lines.len > 0) dat += "

    Playback

    " if(!playing) - dat += "Play Stop

    " + dat += "Play Stop

    " dat += "Repeat Song: " - dat += repeat > 0 ? "--" : "--" + dat += repeat > 0 ? "--" : "--" dat += " [repeat] times " - dat += repeat < max_repeats ? "++" : "++" + dat += repeat < max_repeats ? "++" : "++" dat += "
    " else - dat += "Play Stop
    " + dat += "Play Stop
    " dat += "Repeats left: [repeat]
    " if(!edit) - dat += "
    Show Editor
    " + dat += "
    Show Editor
    " else dat += "

    Editing

    " - dat += "Hide Editor" - dat += " Start a New Song" - dat += " Import a Song

    " + dat += "Hide Editor" + dat += " Start a New Song" + dat += " Import a Song

    " var/bpm = round(600 / tempo) - dat += "Tempo: - [bpm] BPM +

    " + dat += "Tempo: - [bpm] BPM +

    " var/linecount = 0 for(var/line in lines) linecount += 1 - dat += "Line [linecount]: Edit X [line]
    " - dat += "Add Line

    " + dat += "Line [linecount]: Edit X [line]
    " + dat += "Add Line

    " if(help) - dat += "Hide Help
    " + dat += "Hide Help
    " dat += {" Lines are a series of chords, separated by commas (,), each with notes separated by hyphens (-).
    Every note in a chord will play together, with chord timed by the tempo.
    @@ -187,7 +187,7 @@ A song may only contain up to [MUSIC_MAXLINES] lines.
    "} else - dat += "Show Help
    " + dat += "Show Help
    " var/datum/browser/popup = new(user, "instrument", instrumentObj.name, 700, 500) popup.set_content(dat) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 85c1694cb0..aeca1453e3 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -44,9 +44,9 @@ var/dat = "[name]
    " for(var/obj/item/P in src) if(istype(P, /obj/item/paper)) - dat += "[P.name] [auth ? "Write Remove" : ""]
    " + dat += "[P.name] [auth ? "Write Remove" : ""]
    " else - dat += "[P.name] [auth ? "Remove" : ""]
    " + dat += "[P.name] [auth ? "Remove" : ""]
    " user << browse("Notices[dat]","window=noticeboard") onclose(user, "noticeboard") diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index de8d913f4f..733dcf646d 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -83,12 +83,12 @@ FLOOR SAFES /obj/structure/safe/attack_hand(mob/user) user.set_machine(src) var/dat = "
    " - dat += "[open ? "Close" : "Open"] [src] | - [dial * 5] +" + dat += "[open ? "Close" : "Open"] [src] | - [dial * 5] +" if(open) dat += "" for(var/i = contents.len, i>=1, i--) var/obj/item/P = contents[i] - dat += "" + dat += "" dat += "
    [P.name]
    [P.name]
    " user << browse("[name][dat]", "window=safe;size=350x300") diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index 6bd01183ad..5139ea8480 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -356,8 +356,8 @@ output += "" - output += "Add custom ban: (ONLY use this if you can't ban through any other method)" - output += "" + output += "Add custom ban: (ONLY use this if you can't ban through any other method)" + output += "" output += HrefTokenFormField() output += "" output += "" output += "
    Ban type:
    " - output += "Search: " - output += "" + output += "Search: " + output += "" output += HrefTokenFormField() output += "Ckey: " output += "Admin ckey: " @@ -469,25 +469,25 @@ if("PERMABAN") typedesc = "PERMABAN" if("TEMPBAN") - typedesc = "TEMPBAN
    ([duration] minutes [(unbanned) ? "" : "(Edit))"]
    Expires [expiration]
    " + typedesc = "TEMPBAN
    ([duration] minutes [(unbanned) ? "" : "(Edit))"]
    Expires [expiration]
    " if("JOB_PERMABAN") typedesc = "JOBBAN
    ([job])" if("JOB_TEMPBAN") - typedesc = "TEMP JOBBAN
    ([job])
    ([duration] minutes [(unbanned) ? "" : "(Edit))"]
    Expires [expiration]" + typedesc = "TEMP JOBBAN
    ([job])
    ([duration] minutes [(unbanned) ? "" : "(Edit))"]
    Expires [expiration]" if("ADMIN_PERMABAN") typedesc = "ADMIN PERMABAN" if("ADMIN_TEMPBAN") - typedesc = "ADMIN TEMPBAN
    ([duration] minutes [(unbanned) ? "" : "(Edit))"]
    Expires [expiration]
    " + typedesc = "ADMIN TEMPBAN
    ([duration] minutes [(unbanned) ? "" : "(Edit))"]
    Expires [expiration]
    " output += "" output += "[typedesc]" output += "[ckey]" output += "[bantime] (Round ID: [round_id])" output += "[ackey]" - output += "[(unbanned) ? "" : "Unban"]" + output += "[(unbanned) ? "" : "Unban"]" output += "" output += "" - output += "Reason: [(unbanned) ? "" : "(Edit)"] \"[reason]\"" + output += "Reason: [(unbanned) ? "" : "(Edit)"] \"[reason]\"" output += "" if(edits) output += "" diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm index add7254934..bd32533a7f 100644 --- a/code/modules/admin/NewBan.dm +++ b/code/modules/admin/NewBan.dm @@ -180,7 +180,7 @@ GLOBAL_PROTECT(Banlist) for (var/A in GLOB.Banlist.dir) count++ GLOB.Banlist.cd = "/base/[A]" - var/ref = "\ref[src]" + var/ref = "[REF(src)]" var/key = GLOB.Banlist["key"] var/id = GLOB.Banlist["id"] var/ip = GLOB.Banlist["ip"] diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index a64cd8f40e..1111e7e09e 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -32,47 +32,47 @@ body += " played by [M.client] " body += "\[[M.client.holder ? M.client.holder.rank : "Player"]\]" if(CONFIG_GET(flag/use_exp_tracking)) - body += "\[" + M.client.get_exp_living() + "\]" + body += "\[" + M.client.get_exp_living() + "\]" if(isnewplayer(M)) body += " Hasn't Entered Game " else - body += " \[Heal\] " + body += " \[Heal\] " if(M.client) body += "
    \[First Seen: [M.client.player_join_date]\]\[Byond account registered on: [M.client.account_join_date]\]" body += "

    Show related accounts by: " - body += "\[ CID | " - body += "IP \]" + body += "\[ CID | " + body += "IP \]" body += "

    \[ " - body += "VV - " - body += "TP - " + body += "VV - " + body += "TP - " body += "PM - " - body += "SM - " - body += "FLW - " - body += "LOGS\]
    " + body += "SM - " + body += "FLW - " + body += "LOGS\]
    " body += "Mob type = [M.type]

    " - body += "Kick | " - body += "Ban | " - body += "Jobban | " - body += "Identity Ban | " + body += "Kick | " + body += "Ban | " + body += "Jobban | " + body += "Identity Ban | " if(jobban_isbanned(M, "OOC")) - body+= "OOCBan | " + body+= "OOCBan | " else - body+= "OOCBan | " + body+= "OOCBan | " if(jobban_isbanned(M, "emote")) - body+= "EmoteBan | " + body+= "EmoteBan | " else - body+= "Emoteban | " + body+= "Emoteban | " body += "Notes | Messages | Watchlist | " if(M.client) - body += "| Prison | " - body += "\ Send back to Lobby | " + body += "| Prison | " + body += "\ Send back to Lobby | " var/muted = M.client.prefs.muted body += "
    Mute: " body += "\[IC | " @@ -83,15 +83,15 @@ body += "(toggle all)" body += "

    " - body += "Jump to | " - body += "Get | " - body += "Send To" + body += "Jump to | " + body += "Get | " + body += "Send To" body += "

    " - body += "Traitor panel | " - body += "Narrate to | " - body += "Subtle message | " - body += "Language Menu" + body += "Traitor panel | " + body += "Narrate to | " + body += "Subtle message | " + body += "Language Menu" if (M.client) if(!isnewplayer(M)) @@ -103,76 +103,76 @@ if(ishuman(M)) body += "Human | " else - body += "Humanize | " + body += "Humanize | " //Monkey if(ismonkey(M)) body += "Monkeyized | " else - body += "Monkeyize | " + body += "Monkeyize | " //Corgi if(iscorgi(M)) body += "Corgized | " else - body += "Corgize | " + body += "Corgize | " //AI / Cyborg if(isAI(M)) body += "Is an AI " else if(ishuman(M)) - body += "Make AI | " - body += "Make Robot | " - body += "Make Alien | " - body += "Make Slime | " - body += "Make Blob | " + body += "Make AI | " + body += "Make Robot | " + body += "Make Alien | " + body += "Make Slime | " + body += "Make Blob | " //Simple Animals if(isanimal(M)) - body += "Re-Animalize | " + body += "Re-Animalize | " else - body += "Animalize | " + body += "Animalize | " body += "

    " body += "Rudimentary transformation:
    These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.

    " - body += "Observer | " - body += "\[ Alien: Drone, " - body += "Hunter, " - body += "Sentinel, " - body += "Praetorian, " - body += "Queen, " - body += "Larva \] " - body += "Human " - body += "\[ slime: Baby, " - body += "Adult \] " - body += "Monkey | " - body += "Cyborg | " - body += "Cat | " - body += "Runtime | " - body += "Corgi | " - body += "Ian | " - body += "Crab | " - body += "Coffee | " - body += "\[ Construct: Juggernaut , " - body += "Artificer , " - body += "Wraith \] " - body += "Shade" + body += "Observer | " + body += "\[ Alien: Drone, " + body += "Hunter, " + body += "Sentinel, " + body += "Praetorian, " + body += "Queen, " + body += "Larva \] " + body += "Human " + body += "\[ slime: Baby, " + body += "Adult \] " + body += "Monkey | " + body += "Cyborg | " + body += "Cat | " + body += "Runtime | " + body += "Corgi | " + body += "Ian | " + body += "Crab | " + body += "Coffee | " + body += "\[ Construct: Juggernaut , " + body += "Artificer , " + body += "Wraith \] " + body += "Shade" body += "
    " if (M.client) body += "

    " body += "Other actions:" body += "
    " - body += "Forcesay | " - body += "Thunderdome 1 | " - body += "Thunderdome 2 | " - body += "Thunderdome Admin | " - body += "Thunderdome Observer | " + body += "Forcesay | " + body += "Thunderdome 1 | " + body += "Thunderdome 2 | " + body += "Thunderdome Admin | " + body += "Thunderdome Observer | " body += "
    " body += "" - usr << browse(body, "window=adminplayeropts-\ref[M];size=550x515") + usr << browse(body, "window=adminplayeropts-[REF(M)];size=550x515") SSblackbox.add_details("admin_verb","Player Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -195,19 +195,19 @@ dat += "
    Feed channels and stories entered through here will be uneditable and handled as official news by the rest of the units." dat += "
    Note that this panel allows full freedom over the news network, there are no constrictions except the few basic ones. Don't break things!
    " if(GLOB.news_network.wanted_issue.active) - dat+= "
    Read Wanted Issue" - dat+= "

    Create Feed Channel" - dat+= "
    View Feed Channels" - dat+= "
    Submit new Feed story" - dat+= "

    Exit" + dat+= "
    Read Wanted Issue" + dat+= "

    Create Feed Channel" + dat+= "
    View Feed Channels" + dat+= "
    Submit new Feed story" + dat+= "

    Exit" var/wanted_already = 0 if(GLOB.news_network.wanted_issue.active) wanted_already = 1 dat+="
    Feed Security functions:
    " - dat+="
    [(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue" - dat+="
    Censor Feed Stories" - dat+="
    Mark Feed Channel with Nanotrasen D-Notice (disables and locks the channel)." - dat+="

    The newscaster recognises you as:
    [src.admin_signature]
    " + dat+="
    [(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue" + dat+="
    Censor Feed Stories" + dat+="
    Mark Feed Channel with Nanotrasen D-Notice (disables and locks the channel)." + dat+="

    The newscaster recognises you as:
    [src.admin_signature]
    " if(1) dat+= "Station Feed Channels
    " if( isemptylist(GLOB.news_network.network_channels) ) @@ -215,36 +215,36 @@ else for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) if(CHANNEL.is_admin_channel) - dat+="[CHANNEL.channel_name]
    " + dat+="[CHANNEL.channel_name]
    " else - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
    " - dat+="

    Refresh" - dat+="
    Back" + dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
    " + dat+="

    Refresh" + dat+="
    Back" if(2) dat+="Creating new Feed Channel..." - dat+="
    Channel Name: [src.admincaster_feed_channel.channel_name]
    " - dat+="Channel Author: [src.admin_signature]
    " - dat+="Will Accept Public Feeds: [(src.admincaster_feed_channel.locked) ? ("NO") : ("YES")]

    " - dat+="
    Submit

    Cancel
    " + dat+="
    Channel Name: [src.admincaster_feed_channel.channel_name]
    " + dat+="Channel Author: [src.admin_signature]
    " + dat+="Will Accept Public Feeds: [(src.admincaster_feed_channel.locked) ? ("NO") : ("YES")]

    " + dat+="
    Submit

    Cancel
    " if(3) dat+="Creating new Feed Message..." - dat+="
    Receiving Channel: [src.admincaster_feed_channel.channel_name]
    " //MARK + dat+="
    Receiving Channel: [src.admincaster_feed_channel.channel_name]
    " //MARK dat+="Message Author: [src.admin_signature]
    " - dat+="Message Body: [src.admincaster_feed_message.returnBody(-1)]
    " - dat+="
    Submit

    Cancel
    " + dat+="Message Body: [src.admincaster_feed_message.returnBody(-1)]
    " + dat+="
    Submit

    Cancel
    " if(4) dat+="Feed story successfully submitted to [src.admincaster_feed_channel.channel_name].

    " - dat+="
    Return
    " + dat+="
    Return
    " if(5) dat+="Feed Channel [src.admincaster_feed_channel.channel_name] created successfully.

    " - dat+="
    Return
    " + dat+="
    Return
    " if(6) dat+="ERROR: Could not submit Feed story to Network.

    " if(src.admincaster_feed_channel.channel_name=="") dat+="•Invalid receiving channel name.
    " if(src.admincaster_feed_message.returnBody(-1) == "" || src.admincaster_feed_message.returnBody(-1) == "\[REDACTED\]") dat+="•Invalid message body.
    " - dat+="
    Return
    " + dat+="
    Return
    " if(7) dat+="ERROR: Could not submit Feed Channel to Network.

    " if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]") @@ -256,7 +256,7 @@ break if(check) dat+="•Channel name already in use.
    " - dat+="
    Return
    " + dat+="
    Return
    " if(9) dat+="[admincaster_feed_channel.channel_name]: \[created by: [admincaster_feed_channel.returnAuthor(-1)]\]
    " if(src.admincaster_feed_channel.censored) @@ -278,8 +278,8 @@ for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) dat+="[comment.body]
    [comment.author] [comment.time_stamp]
    " dat+="
    " - dat+="

    Refresh" - dat+="
    Back" + dat+="

    Refresh" + dat+="
    Back" if(10) dat+="Nanotrasen Feed Censorship Tool
    " dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
    " @@ -289,8 +289,8 @@ dat+="No feed channels found active...
    " else for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
    " - dat+="
    Cancel" + dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
    " + dat+="
    Cancel" if(11) dat+="Nanotrasen D-Notice Handler
    " dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's" @@ -300,26 +300,26 @@ dat+="No feed channels found active...
    " else for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
    " + dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
    " - dat+="
    Back" + dat+="
    Back" if(12) dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.returnAuthor(-1)] \]
    " - dat+="[(src.admincaster_feed_channel.authorCensor) ? ("Undo Author censorship") : ("Censor channel Author")]
    " + dat+="[(src.admincaster_feed_channel.authorCensor) ? ("Undo Author censorship") : ("Censor channel Author")]
    " if( isemptylist(src.admincaster_feed_channel.messages) ) dat+="No feed messages found in channel...
    " else for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages) dat+="-[MESSAGE.returnBody(-1)]
    \[Story by [MESSAGE.returnAuthor(-1)]\]
    " - dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")]
    " - dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: [MESSAGE.locked ? "Unlock" : "Lock"]
    " + dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")]
    " + dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: [MESSAGE.locked ? "Unlock" : "Lock"]
    " for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) - dat+="[comment.body] X
    [comment.author] [comment.time_stamp]
    " - dat+="
    Back" + dat+="[comment.body] X
    [comment.author] [comment.time_stamp]
    " + dat+="
    Back" if(13) dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.returnAuthor(-1)] \]
    " - dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
    " + dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
    " if(src.admincaster_feed_channel.censored) dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
    " dat+="No further feed story additions are allowed while the D-Notice is in effect.


    " @@ -329,7 +329,7 @@ else for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages) dat+="-[MESSAGE.returnBody(-1)]
    \[Story by [MESSAGE.returnAuthor(-1)]\]
    " - dat+="
    Back" + dat+="
    Back" if(14) dat+="Wanted Issue Handler:" var/wanted_already = 0 @@ -340,29 +340,29 @@ if(wanted_already) dat+="
    A wanted issue is already in Feed Circulation. You can edit or cancel it below.
    " dat+="
    " - dat+="Criminal Name: [src.admincaster_wanted_message.criminal]
    " - dat+="Description: [src.admincaster_wanted_message.body]
    " + dat+="Criminal Name: [src.admincaster_wanted_message.criminal]
    " + dat+="Description: [src.admincaster_wanted_message.body]
    " if(wanted_already) dat+="Wanted Issue created by:[GLOB.news_network.wanted_issue.scannedUser]
    " else dat+="Wanted Issue will be created under prosecutor:[src.admin_signature]
    " - dat+="
    [(wanted_already) ? ("Edit Issue") : ("Submit")]" + dat+="
    [(wanted_already) ? ("Edit Issue") : ("Submit")]" if(wanted_already) - dat+="
    Take down Issue" - dat+="
    Cancel" + dat+="
    Take down Issue" + dat+="
    Cancel" if(15) dat+="Wanted issue for [src.admincaster_wanted_message.criminal] is now in Network Circulation.

    " - dat+="
    Return
    " + dat+="
    Return
    " if(16) dat+="ERROR: Wanted Issue rejected by Network.

    " if(src.admincaster_wanted_message.criminal =="" || src.admincaster_wanted_message.criminal == "\[REDACTED\]") dat+="•Invalid name for person wanted.
    " if(src.admincaster_wanted_message.body == "" || src.admincaster_wanted_message.body == "\[REDACTED\]") dat+="•Invalid description.
    " - dat+="
    Return
    " + dat+="
    Return
    " if(17) dat+="Wanted Issue successfully deleted from Circulation
    " - dat+="
    Return
    " + dat+="
    Return
    " if(18) dat+="-- STATIONWIDE WANTED ISSUE --
    \[Submitted by: [GLOB.news_network.wanted_issue.scannedUser]\]
    " dat+="Criminal: [GLOB.news_network.wanted_issue.criminal]
    " @@ -373,10 +373,10 @@ dat+="
    " else dat+="None" - dat+="
    Back
    " + dat+="
    Back
    " if(19) dat+="Wanted issue for [src.admincaster_wanted_message.criminal] successfully edited.

    " - dat+="
    Return
    " + dat+="
    Return
    " else dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com" @@ -390,21 +390,21 @@ var/dat = {"
    Game Panel

    \n - Change Game Mode
    + Change Game Mode
    "} if(GLOB.master_mode == "secret") - dat += "(Force Secret Mode)
    " + dat += "(Force Secret Mode)
    " dat += {"
    - Create Object
    - Quick Create Object
    - Create Turf
    - Create Mob
    + Create Object
    + Quick Create Object
    + Create Turf
    + Create Mob
    "} if(marked_datum && istype(marked_datum, /atom)) - dat += "Duplicate Marked Datum
    " + dat += "Duplicate Marked Datum
    " usr << browse(dat, "window=admin2;size=210x200") return @@ -757,14 +757,14 @@ dat += " (Cannot Late Join)
    " continue if(job.total_positions >= 0) - dat += " Add | " + dat += " Add | " if(job.total_positions > job.current_positions) - dat += "Remove | " + dat += "Remove | " else dat += "Remove | " - dat += "Unlimit" + dat += "Unlimit" else - dat += " Limit" + dat += " Limit" dat += "
    " dat += "" diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index 2ca0593e8d..bb2a72f970 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -2,7 +2,11 @@ if(!message || !subject) return var/F = file("[GLOB.log_directory]/[subject].html") +<<<<<<< HEAD F << "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
    " +======= + WRITE_FILE(F, "[time_stamp()] [REF(src)] ([x],[y],[z]) || [src] [message]
    ") +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental /client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS) ) diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm index 73bb998231..4117acbf53 100644 --- a/code/modules/admin/create_object.dm +++ b/code/modules/admin/create_object.dm @@ -1,5 +1,5 @@ /datum/admins/proc/create_panel_helper(template) - var/final_html = replacetext(template, "/* ref src */", "\ref[src];[HrefToken()]") + var/final_html = replacetext(template, "/* ref src */", "[REF(src)];[HrefToken()]") final_html = replacetext(final_html,"/* hreftokenfield */","[HrefTokenFormField()]") return final_html diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm index 24a53eff2b..26d2c87b48 100644 --- a/code/modules/admin/permissionverbs/permissionedit.dm +++ b/code/modules/admin/permissionverbs/permissionedit.dm @@ -20,7 +20,7 @@
    - + @@ -36,10 +36,10 @@ if(!rights) rights = "*none*" output += "" - output += "" - output += "" - output += "" - output += "" + output += "" + output += "" + output += "" + output += "" output += "" output += {" diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index f91ebb7557..072b5dab37 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -282,7 +282,7 @@ " + dat += "" dat += "" - dat += "" + dat += "" else - dat += "" + dat += "" dat += "" dat += "
    CKEY \[+\]CKEY \[+\] RANK PERMISSIONS VERB-OVERRIDES
    [adm_ckey] \[-\][D.rank.name][rights][rights2text(0," ",D.rank.adds,D.rank.subs)][adm_ckey] \[-\][D.rank.name][rights][rights2text(0," ",D.rank.adds,D.rank.subs)]
    [M_name] - [M_rname] - [M_key] ([M_job]) @@ -338,7 +338,7 @@ dat += "Time limit: [CONFIG_GET(number/midround_antag_time_check)] minutes into round
    " dat += "Living crew limit: [CONFIG_GET(number/midround_antag_life_check) * 100]% of crew alive
    " dat += "If limits past: [SSticker.mode.round_ends_with_antag_death ? "End The Round" : "Continue As Extended"]
    " - dat += "End Round Now
    " + dat += "End Round Now
    " dat += "[SSticker.delay_end ? "End Round Normally" : "Delay Round End"]" var/connected_players = GLOB.clients.len var/lobby_players = 0 @@ -389,11 +389,11 @@ for(var/datum/mind/N in SSticker.mode.syndicates) var/mob/M = N.current if(M) - dat += "
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW
    FLW
    [N.name]([N.key]) Nuclear Operative Body destroyed!
    [N.name]([N.key]) Nuclear Operative Body destroyed!PM

    " for(var/obj/item/disk/nuclear/N in GLOB.poi_list) @@ -402,7 +402,7 @@ while(!isturf(disk_loc)) if(ismob(disk_loc)) var/mob/M = disk_loc - dat += "carried by [M.real_name] " + dat += "carried by [M.real_name] " if(isobj(disk_loc)) var/obj/O = disk_loc dat += "in \a [O.name] " @@ -416,29 +416,29 @@ for(var/datum/mind/N in get_antagonists(/datum/antagonist/rev/head)) var/mob/M = N.current if(!M) - dat += "" + dat += "" dat += "" else - dat += "" + dat += "" dat += "" - dat += "" + dat += "" for(var/datum/mind/N in get_antagonists(/datum/antagonist/rev,TRUE)) var/mob/M = N.current if(M) - dat += "" + dat += "" dat += "" - dat += "" + dat += "" dat += "
    Nuclear Disk(s)
    [N.name]([N.key])Head Revolutionary body destroyed!
    [N.name]([N.key])Head Revolutionary body destroyed!PM
    [M.real_name] (Leader)[M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]
    [M.real_name] (Leader)[M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW
    FLW
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW
    FLW
    " for(var/datum/mind/N in SSjob.get_living_heads()) var/mob/M = N.current if(M) - dat += "" + dat += "" dat += "" - dat += "" + dat += "" var/turf/mob_loc = get_turf(M) dat += "" else - dat += "" + dat += "" dat += "" dat += "
    Target(s)Location
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLWFLW[mob_loc.loc]
    [N.name]([N.key])Head body destroyed!
    [N.name]([N.key])Head body destroyed!PM
    " @@ -447,12 +447,12 @@ for(var/datum/mind/changeling in SSticker.mode.changelings) var/mob/M = changeling.current if(M) - dat += "[M.mind.changeling.changelingID] as [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" + dat += "[M.mind.changeling.changelingID] as [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" dat += "PM" - dat += "FLW" - dat += "Show Objective" + dat += "FLW" + dat += "Show Objective" else - dat += "[changeling.name]([changeling.key])Changeling body destroyed!" + dat += "[changeling.name]([changeling.key])Changeling body destroyed!" dat += "PM" dat += "" @@ -461,12 +461,12 @@ for(var/datum/mind/wizard in SSticker.mode.wizards) var/mob/M = wizard.current if(M) - dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" dat += "PM" - dat += "FLW" - dat += "Show Objective" + dat += "FLW" + dat += "Show Objective" else - dat += "[wizard.name]([wizard.key])Wizard body destroyed!" + dat += "[wizard.name]([wizard.key])Wizard body destroyed!" dat += "PM" dat += "" @@ -475,12 +475,12 @@ for(var/datum/mind/apprentice in SSticker.mode.apprentices) var/mob/M = apprentice.current if(M) - dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" dat += "PM" - dat += "FLW" - dat += "Show Objective" + dat += "FLW" + dat += "Show Objective" else - dat += "[apprentice.name]([apprentice.key])Apprentice body destroyed!!" + dat += "[apprentice.name]([apprentice.key])Apprentice body destroyed!!" dat += "PM" dat += "" @@ -489,9 +489,9 @@ for(var/datum/mind/N in SSticker.mode.cult) var/mob/M = N.current if(M) - dat += "[M.real_name][N.has_antag_datum(ANTAG_DATUM_CULT_MASTER) ? " \[Master\]" : ""][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" + dat += "[M.real_name][N.has_antag_datum(ANTAG_DATUM_CULT_MASTER) ? " \[Master\]" : ""][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" dat += "PM" - dat += "FLW" + dat += "FLW" dat += "" if(SSticker.mode.servants_of_ratvar.len) @@ -499,9 +499,9 @@ for(var/datum/mind/N in SSticker.mode.servants_of_ratvar) var/mob/M = N.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == DEAD ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == DEAD ? " (DEAD)" : ""]" dat += "PM" - dat += "FLW" + dat += "FLW" dat += "" if(SSticker.mode.traitors.len > 0) @@ -509,12 +509,12 @@ for(var/datum/mind/traitor in SSticker.mode.traitors) var/mob/M = traitor.current if(M) - dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" dat += "PM" - dat += "FLW" - dat += "Show Objective" + dat += "FLW" + dat += "Show Objective" else - dat += "[traitor.name]([traitor.key])Traitor body destroyed!" + dat += "[traitor.name]([traitor.key])Traitor body destroyed!" dat += "PM" dat += "" @@ -524,12 +524,12 @@ for(var/datum/mind/brother in team.members) var/mob/M = brother.current if(M) - dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" dat += "PM" - dat += "FLW" - dat += "Show Objective" + dat += "FLW" + dat += "Show Objective" else - dat += "[brother.name]([brother.key])Brother body destroyed!" + dat += "[brother.name]([brother.key])Brother body destroyed!" dat += "PM" dat += "" @@ -538,12 +538,12 @@ for(var/datum/mind/abductor in SSticker.mode.abductors) var/mob/M = abductor.current if(M) - dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" dat += "PM" - dat += "FLW" - dat += "Show Objective" + dat += "FLW" + dat += "Show Objective" else - dat += "[abductor.name]([abductor.key])Abductor body destroyed!" + dat += "[abductor.name]([abductor.key])Abductor body destroyed!" dat += "PM" dat += "" dat += "
    " @@ -551,12 +551,12 @@ for(var/datum/mind/abductee in E.abductee_minds) var/mob/M = abductee.current if(M) - dat += "" + dat += "" dat += "" - dat += "" - dat += "" + dat += "" + dat += "" else - dat += "" + dat += "" dat += "" dat += "
    Abductees
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLWShow Objective
    FLWShow Objective
    [abductee.name]([abductee.key])Abductee body destroyed!
    [abductee.name]([abductee.key])Abductee body destroyed!PM
    " @@ -567,12 +567,12 @@ var/mob/M = devil.current var/datum/antagonist/devil/devilinfo = devil.has_antag_datum(ANTAG_DATUM_DEVIL) if(M) - dat += "[M.real_name] : [devilinfo.truename][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" + dat += "[M.real_name] : [devilinfo.truename][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" dat += "PM" - dat += "Show Objective" - dat += "Show all devil info" + dat += "Show Objective" + dat += "Show all devil info" else - dat += "[devil.name] : [devilinfo.truename] ([devil.key])devil body destroyed!" + dat += "[devil.name] : [devilinfo.truename] ([devil.key])devil body destroyed!" dat += "PM" dat += "" @@ -582,11 +582,11 @@ var/datum/mind/sintouched = X var/mob/M = sintouched.current if(M) - dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" dat += "PM" - dat += "Show Objective" + dat += "Show Objective" else - dat += "[sintouched.name]([sintouched.key])sintouched body destroyed!" + dat += "[sintouched.name]([sintouched.key])sintouched body destroyed!" dat += "PM" dat += "" @@ -598,12 +598,12 @@ for(var/datum/mind/blob in blob_minds) var/mob/camera/blob/M = blob.current if(M) - dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" dat += "PM" - dat += "FLW" + dat += "FLW" dat += "Progress: [M.blobs_legit.len]/[M.blobwincount]" else - dat += "[blob.name]([blob.key])Blob not found!" + dat += "[blob.name]([blob.key])Blob not found!" dat += "PM" dat += "" @@ -615,11 +615,11 @@ for(var/datum/mind/eek in mode.ape_infectees) var/mob/M = eek.current if(M) - dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]" dat += "PM" - dat += "FLW" + dat += "FLW" else - dat += "[eek.name]([eek.key])Monkey not found!" + dat += "[eek.name]([eek.key])Monkey not found!" dat += "PM" dat += "" diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 5e1a8300c4..d3e4643ee6 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -7,9 +7,9 @@ dat +={" General Secrets

    - Show Job Debug
    - Admin Log
    - Show Admin List
    + Show Job Debug
    + Admin Log
    + Show Admin List

    "} @@ -17,27 +17,27 @@ dat += {" Admin Secrets

    - Cure all diseases currently in existence
    - Bombing List
    - Show current traitors and objectives
    - Show last [length(GLOB.lastsignalers)] signalers
    - Show last [length(GLOB.lawchanges)] law changes
    - Show AI Laws
    - Show Game Mode
    - Show Crew Manifest
    - List DNA (Blood)
    - List Fingerprints
    - Enable/Disable CTF

    - Reset Thunderdome to default state
    - Rename Station Name
    - Reset Station Name
    + Cure all diseases currently in existence
    + Bombing List
    + Show current traitors and objectives
    + Show last [length(GLOB.lastsignalers)] signalers
    + Show last [length(GLOB.lawchanges)] law changes
    + Show AI Laws
    + Show Game Mode
    + Show Crew Manifest
    + List DNA (Blood)
    + List Fingerprints
    + Enable/Disable CTF

    + Reset Thunderdome to default state
    + Rename Station Name
    + Reset Station Name

    Shuttles

    - Move Ferry
    - Toggle Arrivals Ferry
    - Move Mining Shuttle
    - Move Labor Shuttle
    + Move Ferry
    + Toggle Arrivals Ferry
    + Move Mining Shuttle
    + Move Labor Shuttle

    "} @@ -45,6 +45,7 @@ dat += {" Fun Secrets

    +<<<<<<< HEAD Trigger a Virus Outbreak
    Turn all humans into monkeys
    Chinese Cartoons
    @@ -65,10 +66,31 @@ Break all lights
    Fix all lights
    The floor is lava! (DANGEROUS: extremely lame)
    +======= + Trigger a Virus Outbreak
    + Turn all humans into monkeys
    + Chinese Cartoons
    + Change the species of all humans
    + Make all areas powered
    + Make all areas unpowered
    + Power all SMES
    + Triple AI mode (needs to be used in the lobby)
    + Everyone is the traitor
    + Summon Guns
    + Summon Magic
    + Summon Events (Toggle)
    + There can only be one!
    + There can only be one! (40-second delay)
    + Make all players retarded
    + Egalitarian Station Mode
    + Break all lights
    + Fix all lights
    + The floor is lava! (DANGEROUS: extremely lame)
    +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental
    - Change bomb cap
    - Mass Purrbation
    - Mass Remove Purrbation
    + Change bomb cap
    + Mass Purrbation
    + Mass Remove Purrbation
    "} dat += "
    " @@ -77,9 +99,9 @@ dat += {" Security Level Elevated

    - Change all maintenance doors to engie/brig access only
    - Change all maintenance doors to brig access only
    - Remove cap on security officers
    + Change all maintenance doors to engie/brig access only
    + Change all maintenance doors to brig access only
    + Remove cap on security officers

    "} diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 73da8d9424..5139f0bb47 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -618,15 +618,15 @@ //Regular jobs //Command (Blue) dat += "" - dat += "" + dat += "" for(var/jobPos in GLOB.command_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) - dat += "" + dat += "" counter++ else - dat += "" + dat += "" counter++ if(counter >= 6) //So things dont get squiiiiished! @@ -637,15 +637,15 @@ //Security (Red) counter = 0 dat += "
    Command Positions
    Command Positions
    [jobPos][jobPos][jobPos][jobPos]
    " - dat += "" + dat += "" for(var/jobPos in GLOB.security_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) - dat += "" + dat += "" counter++ else - dat += "" + dat += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -656,15 +656,15 @@ //Engineering (Yellow) counter = 0 dat += "
    Security Positions
    Security Positions
    [jobPos][jobPos][jobPos][jobPos]
    " - dat += "" + dat += "" for(var/jobPos in GLOB.engineering_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) - dat += "" + dat += "" counter++ else - dat += "" + dat += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -675,15 +675,15 @@ //Medical (White) counter = 0 dat += "
    Engineering Positions
    Engineering Positions
    [jobPos][jobPos][jobPos][jobPos]
    " - dat += "" + dat += "" for(var/jobPos in GLOB.medical_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) - dat += "" + dat += "" counter++ else - dat += "" + dat += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -694,15 +694,15 @@ //Science (Purple) counter = 0 dat += "
    Medical Positions
    Medical Positions
    [jobPos][jobPos][jobPos][jobPos]
    " - dat += "" + dat += "" for(var/jobPos in GLOB.science_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) - dat += "" + dat += "" counter++ else - dat += "" + dat += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -713,15 +713,15 @@ //Supply (Brown) counter = 0 dat += "
    Science Positions
    Science Positions
    [jobPos][jobPos][jobPos][jobPos]
    " - dat += "" + dat += "" for(var/jobPos in GLOB.supply_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) - dat += "" + dat += "" counter++ else - dat += "" + dat += "" counter++ if(counter >= 5) //So things dont get COPYPASTE! @@ -732,15 +732,15 @@ //Civilian (Grey) counter = 0 dat += "
    Supply Positions
    Supply Positions
    [jobPos][jobPos][jobPos][jobPos]
    " - dat += "" + dat += "" for(var/jobPos in GLOB.civilian_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) - dat += "" + dat += "" counter++ else - dat += "" + dat += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -751,15 +751,15 @@ //Non-Human (Green) counter = 0 dat += "
    Civilian Positions
    Civilian Positions
    [jobPos][jobPos][jobPos][jobPos]
    " - dat += "" + dat += "" for(var/jobPos in GLOB.nonhuman_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) - dat += "" + dat += "" counter++ else - dat += "" + dat += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -770,95 +770,95 @@ //Ghost Roles (light light gray) dat += "
    Non-human Positions
    Non-human Positions
    [jobPos][jobPos][jobPos][jobPos]
    " - dat += "" + dat += "" //pAI if(jobban_isbanned(M, "pAI")) - dat += "" + dat += "" else - dat += "" + dat += "" //Drones if(jobban_isbanned(M, "drone")) - dat += "" + dat += "" else - dat += "" + dat += "" //Positronic Brains if(jobban_isbanned(M, "posibrain")) - dat += "" + dat += "" else - dat += "" + dat += "" //Deathsquad if(jobban_isbanned(M, "deathsquad")) - dat += "" + dat += "" else - dat += "" + dat += "" //Lavaland roles if(jobban_isbanned(M, "lavaland")) - dat += "" + dat += "" else - dat += "" + dat += "" dat += "
    Ghost Roles
    Ghost Roles
    pAIpAIpAIpAIDroneDroneDroneDronePosibrainPosibrainPosibrainPosibrainDeathsquadDeathsquadDeathsquadDeathsquadLavalandLavalandLavalandLavaland
    " //Antagonist (Orange) var/isbanned_dept = jobban_isbanned(M, "Syndicate") dat += "" - dat += "" + dat += "" //Traitor if(jobban_isbanned(M, "traitor") || isbanned_dept) - dat += "" + dat += "" else - dat += "" + dat += "" //Changeling if(jobban_isbanned(M, "changeling") || isbanned_dept) - dat += "" + dat += "" else - dat += "" + dat += "" //Nuke Operative if(jobban_isbanned(M, "operative") || isbanned_dept) - dat += "" + dat += "" else - dat += "" + dat += "" //Revolutionary if(jobban_isbanned(M, "revolutionary") || isbanned_dept) - dat += "" + dat += "" else - dat += "" + dat += "" //Cultist if(jobban_isbanned(M, "cultist") || isbanned_dept) - dat += "" + dat += "" else - dat += "" + dat += "" //Servant of Ratvar if(jobban_isbanned(M, "servant of Ratvar") || isbanned_dept) - dat += "" + dat += "" else - dat += "" + dat += "" //Wizard if(jobban_isbanned(M, "wizard") || isbanned_dept) - dat += "" + dat += "" else - dat += "" + dat += "" //Abductor if(jobban_isbanned(M, "abductor") || isbanned_dept) - dat += "" + dat += "" else - dat += "" + dat += "" //Borer if(jobban_isbanned(M, "borer") || isbanned_dept) @@ -868,9 +868,9 @@ //Alien if(jobban_isbanned(M, "alien candidate") || isbanned_dept) - dat += "" + dat += "" else - dat += "" + dat += "" dat += "
    Antagonist Positions
    Antagonist Positions
    TraitorTraitorTraitorTraitorChangelingChangelingChangelingChangelingNuke OperativeNuke OperativeNuke OperativeNuke OperativeRevolutionaryRevolutionaryRevolutionaryRevolutionaryCultistCultistCultistCultistServantServantServantServantWizardWizardWizardWizardAbductorAbductorAbductorAbductorAlienAlienAlienAlien
    " usr << browse(dat, "window=jobban2;size=800x450") @@ -2283,9 +2283,9 @@ return alert(usr, "The game has already started.", null, null, null, null) var/dat = {"What mode do you wish to play?
    "} for(var/mode in config.modes) - dat += {"[config.mode_names[mode]]
    "} - dat += {"Secret
    "} - dat += {"Random
    "} + dat += {"[config.mode_names[mode]]
    "} + dat += {"Secret
    "} + dat += {"Random
    "} dat += {"Now: [GLOB.master_mode]"} usr << browse(dat, "window=c_mode") @@ -2299,7 +2299,7 @@ return alert(usr, "The game mode has to be secret!", null, null, null, null) var/dat = {"What game mode do you want to force secret to be? Use this if you want to change the game mode, but want the players to believe it's secret. This will only work if the current game mode is secret.
    "} for(var/mode in config.modes) - dat += {"[config.mode_names[mode]]
    "} - dat += {"Random (default)
    "} + dat += {"[config.mode_names[mode]]
    "} + dat += {"Random (default)
    "} dat += {"Now: [GLOB.secret_force_mode]"} usr << browse(dat, "window=f_secret") diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 0842d82553..e091001851 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -121,7 +121,7 @@ /proc/SDQL_gen_vv_href(t) var/text = "" - text += "\ref[t]" + text += "[REF(t)]" if(istype(t, /atom)) var/atom/a = t var/turf/T = a.loc diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 0135bfbfa0..5aebd5ce94 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -83,7 +83,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) dat += "Refresh

    " for(var/I in l2b) var/datum/admin_help/AH = I - dat += "Ticket #[AH.id]: [AH.initiator_key_name]: [AH.name]
    " + dat += "Ticket #[AH.id]: [AH.initiator_key_name]: [AH.name]
    " usr << browse(dat.Join(), "window=ahelp_list[state];size=600x480") @@ -224,7 +224,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) //private /datum/admin_help/proc/FullMonty(ref_src) if(!ref_src) - ref_src = "\ref[src]" + ref_src = "[REF(src)]" . = ADMIN_FULLMONTY_NONAME(initiator.mob) if(state == AHELP_ACTIVE) . += ClosureLinks(ref_src) @@ -232,7 +232,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) //private /datum/admin_help/proc/ClosureLinks(ref_src) if(!ref_src) - ref_src = "\ref[src]" + ref_src = "[REF(src)]" . = " (REJT)" . += " (IC)" . += " (CLOSE)" @@ -242,19 +242,24 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) //private /datum/admin_help/proc/LinkedReplyName(ref_src) if(!ref_src) - ref_src = "\ref[src]" + ref_src = "[REF(src)]" return "[initiator_key_name]" //private /datum/admin_help/proc/TicketHref(msg, ref_src, action = "ticket") if(!ref_src) +<<<<<<< HEAD ref_src = "\ref[src]" return "[msg]" +======= + ref_src = "[REF(src)]" + return "[msg]" +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental //message from the initiator without a target, all admins will see this //won't bug irc /datum/admin_help/proc/MessageNoRecipient(msg) - var/ref_src = "\ref[src]" + var/ref_src = "[REF(src)]" //Message to be sent to all admins var/admin_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [keywords_lookup(msg)]" @@ -402,7 +407,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) //Show the ticket panel /datum/admin_help/proc/TicketPanel() var/list/dat = list("Ticket #[id]") - var/ref_src = "\ref[src]" + var/ref_src = "[REF(src)]" dat += "

    Admin Help Ticket #[id]: [LinkedReplyName(ref_src)]

    " dat += "State: " switch(state) @@ -700,7 +705,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) if(found.mind && found.mind.special_role) is_antag = 1 founds += "Name: [found.name]([found.real_name]) Ckey: [found.ckey] [is_antag ? "(Antag)" : null] " - msg += "[original_word](?|F) " + msg += "[original_word](?|F) " continue msg += "[original_word] " if(irc) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index ebb200e8e4..92e639ef27 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -117,7 +117,7 @@ GLOBAL_PROTECT(LastAdminCalledProc) to_chat(usr, "Running your proc") GLOB.LastAdminCalledProc = procname if(target != GLOBAL_PROC) - GLOB.LastAdminCalledTargetRef = "\ref[target]" + GLOB.LastAdminCalledTargetRef = "[REF(target)]" GLOB.AdminProcCaller = ckey //if this runtimes, too bad for you ++GLOB.AdminProcCallCount . = world.WrapAdminProcCall(target, procname, arguments) diff --git a/code/modules/admin/verbs/individual_logging.dm b/code/modules/admin/verbs/individual_logging.dm index cd3feed5d0..50b00da9a6 100644 --- a/code/modules/admin/verbs/individual_logging.dm +++ b/code/modules/admin/verbs/individual_logging.dm @@ -1,12 +1,12 @@ /proc/show_individual_logging_panel(mob/M, type = INDIVIDUAL_ATTACK_LOG) if(!M || !ismob(M)) return - var/dat = "
    Attack log | " - dat += "Say log | " - dat += "Emote log | " - dat += "OOC log | " - dat += "Show all | " - dat += "Refresh
    " + var/dat = "
    Attack log | " + dat += "Say log | " + dat += "Emote log | " + dat += "OOC log | " + dat += "Show all | " + dat += "Refresh
    " dat += "
    " diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 9edf84800d..e4ea8e9b54 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -299,7 +299,7 @@ GLOBAL_PROTECT(VVpixelmovement) if (!lentext(shorttype)) shorttype = "/" - .["[D]([shorttype])\ref[D]#[i]"] = D + .["[D]([shorttype])[REF(D)]#[i]"] = D /client/proc/mod_list_add_ass(atom/O) //hehe diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 3021f9badd..f364cff61a 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -11,17 +11,17 @@ /datum/admins/proc/one_click_antag() var/dat = {" - Make Traitors
    - Make Changelings
    - Make Revs
    - Make Cult
    - Make Clockwork Cult
    - Make Blob
    - Make Wizard (Requires Ghosts)
    - Make Nuke Team (Requires Ghosts)
    - Make CentCom Response Team (Requires Ghosts)
    - Make Abductor Team (Requires Ghosts)
    - Make Revenant (Requires Ghost)
    + Make Traitors
    + Make Changelings
    + Make Revs
    + Make Cult
    + Make Clockwork Cult
    + Make Blob
    + Make Wizard (Requires Ghosts)
    + Make Nuke Team (Requires Ghosts)
    + Make CentCom Response Team (Requires Ghosts)
    + Make Abductor Team (Requires Ghosts)
    + Make Revenant (Requires Ghost)
    "} var/datum/browser/popup = new(usr, "oneclickantag", "Quick-Create Antagonist", 400, 400) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 74cbc14eab..84b23eafa9 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -848,8 +848,8 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits var/dat = {" Create Outfit - - + + [HrefTokenFormField()] @@ -1150,8 +1150,8 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits /datum/admins/proc/modify_goals() var/dat = "" for(var/datum/station_goal/S in SSticker.mode.station_goals) - dat += "[S.name] - Announce | Remove
    " - dat += "
    Add New Goal" + dat += "[S.name] - Announce | Remove
    " + dat += "
    Add New Goal" usr << browse(dat, "window=goals;size=400x400") @@ -1225,7 +1225,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits var/list/msg = list() msg += "Playtime ReportPlaytime:
    " src << browse(msg.Join(), "window=Player_playtime_check") @@ -1239,7 +1239,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits var/list/body = list() body += "Playtime for [C.key]
    Playtime:" body += C.get_exp_report() - body += "Toggle Exempt status" + body += "Toggle Exempt status" body += "" usr << browse(body.Join(), "window=playerplaytime[C.ckey];size=550x615") diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 61eee593fa..8ff54b7a0a 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -78,7 +78,7 @@ if(!secured) user.show_message("The [name] is unsecured!") return 0 - var/dat = "Health Sensor [scanning?"On":"Off"]" + var/dat = "Health Sensor [scanning?"On":"Off"]" if(scanning && health_scan) dat += "
    Health: [health_scan]" user << browse(dat, "window=hscan") diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index c196e984a2..14286b376c 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -105,9 +105,9 @@ /obj/item/device/assembly/infra/interact(mob/user)//TODO: change this this to the wire control panel if(is_secured(user)) user.set_machine(src) - var/dat = "Infrared Laser\nStatus: [on ? "On" : "Off"]
    \nVisibility: [visible ? "Visible" : "Invisible"]
    \n
    " - dat += "

    Refresh" - dat += "

    Close" + var/dat = "Infrared Laser\nStatus: [on ? "On" : "Off"]
    \nVisibility: [visible ? "Visible" : "Invisible"]
    \n
    " + dat += "

    Refresh" + dat += "

    Close" user << browse(dat, "window=infra") onclose(user, "infra") return diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 556979070d..c8bcb5a258 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -98,11 +98,11 @@ if(is_secured(user)) var/second = time % 60 var/minute = (time - second) / 60 - var/dat = "Proximity Sensor\n[(timing ? "Arming" : "Not Arming")] [minute]:[second]\n- - + +\n" - dat += "
    Armed":"1'>Unarmed"] (Movement sensor active when armed!)" - dat += "
    Detection range: - [sensitivity] +" - dat += "

    Refresh" - dat += "

    Close" + var/dat = "Proximity Sensor\n[(timing ? "Arming" : "Not Arming")] [minute]:[second]\n- - + +\n" + dat += "
    Armed":"1'>Unarmed"] (Movement sensor active when armed!)" + dat += "
    Detection range: - [sensitivity] +" + dat += "

    Refresh" + dat += "

    Close" user << browse(dat, "window=prox") onclose(user, "prox") return diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index ecb05c17d0..0b35304620 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -40,27 +40,27 @@ if(is_secured(user)) var/t1 = "-------" // if ((src.b_stat && !( flag1 ))) - // t1 = text("-------
    \nGreen Wire: []
    \nRed Wire: []
    \nBlue Wire: []
    \n", (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src))) + // t1 = text("-------
    \nGreen Wire: []
    \nRed Wire: []
    \nBlue Wire: []
    \n", (src.wires & 4 ? "Cut Wire" : "Mend Wire"), (src.wires & 2 ? "Cut Wire" : "Mend Wire"), (src.wires & 1 ? "Cut Wire" : "Mend Wire")) // else - // t1 = "-------" Speaker: [src.listening ? "Engaged" : "Disengaged"]
    + // t1 = "-------" Speaker: [src.listening ? "Engaged" : "Disengaged"]
    var/dat = {" -Send Signal
    +Send Signal
    Frequency/Code for signaler:
    Frequency: -- -- +- +- [format_frequency(src.frequency)] -+ -+
    ++ ++
    Code: -- -- +- +- [src.code] -+ -+
    ++ ++
    [t1]
    "} user << browse(dat, "window=radio") diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 9a959bc544..30a1ee71d3 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -74,10 +74,10 @@ if(is_secured(user)) var/second = time % 60 var/minute = (time - second) / 60 - var/dat = "Timing Unit\n[(timing ? "Timing" : "Not Timing")] [minute]:[second]\n- - + +\n" - dat += "

    Stop repeating" : "1'>Set to repeat")]" - dat += "

    Refresh" - dat += "

    Close" + var/dat = "Timing Unit\n[(timing ? "Timing" : "Not Timing")] [minute]:[second]\n- - + +\n" + dat += "

    Stop repeating" : "1'>Set to repeat")]" + dat += "

    Refresh" + dat += "

    Close" var/datum/browser/popup = new(user, "timer", name) popup.set_content(dat) popup.open() diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm index 3878619418..d98be456ff 100644 --- a/code/modules/awaymissions/bluespaceartillery.dm +++ b/code/modules/awaymissions/bluespaceartillery.dm @@ -30,7 +30,7 @@ var/dat = "Bluespace Artillery Control:
    " dat += "Locked on
    " dat += "Charge progress: [reload]/[reload_cooldown]:
    " - dat += "Open Fire
    " + dat += "Open Fire
    " dat += "Deployment of weapon authorized by
    Nanotrasen Naval Command

    Remember, friendly fire is grounds for termination of your contract and life.
    " user << browse(dat, "window=scroll") onclose(user, "scroll") diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 0307a6b58e..8b640676ba 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -309,7 +309,7 @@ dead_barricades.Cut() - notify_ghosts("[name] has been activated!", enter_link="(Click to join the [team] team!) or click on the controller directly!", source = src, action=NOTIFY_ATTACK) + notify_ghosts("[name] has been activated!", enter_link="(Click to join the [team] team!) or click on the controller directly!", source = src, action=NOTIFY_ATTACK) if(!arena_reset) reset_the_arena() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 58c568f8a6..e8e643595d 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -164,7 +164,7 @@ M.visible_message("[M]'s [name] starts to fall apart!", "Your [name] starts to fall apart!") /obj/item/clothing/proc/update_clothes_damaged_state(damaging = TRUE) - var/index = "\ref[initial(icon)]-[initial(icon_state)]" + var/index = "[REF(initial(icon))]-[initial(icon_state)]" var/static/list/damaged_clothes_icons = list() if(damaging) damaged_clothes = 1 diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index d25408efa0..7ff0bf78be 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -381,7 +381,7 @@ /datum/personal_crafting/proc/build_recipe_data(datum/crafting_recipe/R) var/list/data = list() data["name"] = R.name - data["ref"] = "\ref[R]" + data["ref"] = "[REF(R)]" var/req_text = "" var/tool_text = "" var/catalyst_text = "" diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 2e7874347b..e94c40a0c7 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -168,7 +168,7 @@ to_chat(M, msg) log += "  [msg]" else - CRASH("[src] \ref[src] is adding a log when it was never put in scanning mode!") + CRASH("[src] [REF(src)] is adding a log when it was never put in scanning mode!") /proc/get_timestamp() return time2text(world.time + 432000, ":ss") diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm index b19153956f..7d10488c68 100644 --- a/code/modules/error_handler/error_viewer.dm +++ b/code/modules/error_handler/error_viewer.dm @@ -66,12 +66,12 @@ GLOBAL_DATUM(error_cache, /datum/error_viewer/error_cache) linktext = name if (istype(back_to)) - back_to_param = ";viewruntime_backto=\ref[back_to]" + back_to_param = ";viewruntime_backto=[REF(back_to)]" if (linear) back_to_param += ";viewruntime_linear=1" - return "[linktext]" + return "[linktext]" /datum/error_viewer/error_cache var/list/errors = list() @@ -172,7 +172,7 @@ GLOBAL_DATUM(error_cache, /datum/error_viewer/error_cache) desc += "[html_encode(line)]
    " if (usr) - usr_ref = "\ref[usr]" + usr_ref = "[REF(usr)]" usr_loc = get_turf(usr) /datum/error_viewer/error_entry/show_to(user, datum/error_viewer/back_to, linear) @@ -186,7 +186,7 @@ GLOBAL_DATUM(error_cache, /datum/error_viewer/error_cache) html += " PP" html += " Follow" if (istype(usr_loc)) - html += "
    usr.loc: VV" + html += "
    usr.loc: VV" html += " JMP" browse_to(user, html) diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm index 8b2c85d4e3..daf7643ff3 100644 --- a/code/modules/events/_event.dm +++ b/code/modules/events/_event.dm @@ -60,7 +60,7 @@ triggering = TRUE if (alertadmins) - message_admins("Random Event triggering in 10 seconds: [name] ([typepath]) (CANCEL)") + message_admins("Random Event triggering in 10 seconds: [name] ([typepath]) (CANCEL)") sleep(100) var/gamemode = SSticker.mode.config_tag var/players_amt = get_active_player_count(alive_check = TRUE, afk_check = TRUE, human_check = TRUE) diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index 4cd718070b..b009e0ca59 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -44,7 +44,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 destination = end if(notify) notify_ghosts("\A [src] is inbound!", - enter_link="(Click to orbit)", + enter_link="(Click to orbit)", source=src, action=NOTIFY_ORBIT) GLOB.poi_list += src if(end && end.z==z_original) diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index db7028411c..d55470e633 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -390,7 +390,7 @@ /datum/spacevine_controller/vv_get_dropdown() . = ..() . += "---" - .["Delete Vines"] = "?_src_=\ref[src];[HrefToken()];purge_vines=1" + .["Delete Vines"] = "?_src_=[REF(src)];[HrefToken()];purge_vines=1" /datum/spacevine_controller/Topic(href, href_list) if(..() || !check_rights(R_ADMIN, FALSE) || !usr.client.holder.CheckAdminHref(href, href_list)) diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm index 8b91e6838c..765b5ff891 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm @@ -37,25 +37,25 @@ var/dat dat += "
    STORED INGREDIENTS AND DRINKS
    " dat += "Remaining glasses: [glasses]
    " - dat += "Portion: [portion]
    " + dat += "Portion: [portion]
    " for(var/datum/reagent/R in reagents.reagent_list) dat += "[R.name]: [R.volume] " - dat += "Purge" + dat += "Purge" if (glasses > 0) - dat += "Pour in a glass" - dat += "Add to the mixer
    " + dat += "Pour in a glass" + dat += "Add to the mixer
    " dat += "

    MIXER CONTENTS
    " for(var/datum/reagent/R in mixer.reagents.reagent_list) dat += "[R.name]: [R.volume] " - dat += "Transfer back" + dat += "Transfer back" if (glasses > 0) - dat += "Pour in a glass" + dat += "Pour in a glass" dat += "
    " dat += "

    STORED FOOD
    " for(var/V in stored_food) if(stored_food[V] > 0) - dat += "[V]: [stored_food[V]] Dispense
    " - dat += "

    Refresh Close" + dat += "[V]: [stored_food[V]] Dispense
    " + dat += "
    Refresh Close" var/datum/browser/popup = new(user, "foodcart","Food Cart", 500, 350, src) popup.set_content(dat) diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm index 845f10896e..1b00de1842 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm @@ -77,19 +77,19 @@ var/dat dat += "ICE CREAM
    " dat += "Dispensing: [flavour_name] icecream

    " - dat += "Vanilla ice cream: Select Make x5 [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice)
    " - dat += "Strawberry ice cream: Select Make x5 [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice)
    " - dat += "Chocolate ice cream: Select Make x5 [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder)
    " - dat += "Blue ice cream: Select Make x5 [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo)
    " + dat += "Vanilla ice cream: Select Make x5 [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice)
    " + dat += "Strawberry ice cream: Select Make x5 [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice)
    " + dat += "Chocolate ice cream: Select Make x5 [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder)
    " + dat += "Blue ice cream: Select Make x5 [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo)
    " dat += "
    CONES
    " - dat += "Waffle cones: Dispense Make x5 [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar)
    " - dat += "Chocolate cones: Dispense Make x5 [product_types[CONE_CHOC]] cones left. (Ingredients: flour, sugar, coco powder)
    " + dat += "Waffle cones: Dispense Make x5 [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar)
    " + dat += "Chocolate cones: Dispense Make x5 [product_types[CONE_CHOC]] cones left. (Ingredients: flour, sugar, coco powder)
    " dat += "
    " dat += "VAT CONTENT
    " for(var/datum/reagent/R in reagents.reagent_list) dat += "[R.name]: [R.volume]" - dat += "Purge
    " - dat += "Refresh Close" + dat += "Purge
    " + dat += "Refresh Close" var/datum/browser/popup = new(user, "icecreamvat","Icecream Vat", 700, 500, src) popup.set_content(dat) diff --git a/code/modules/food_and_drinks/kitchen_machinery/juicer.dm b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm index a24263bfa6..0e6a7e9034 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/juicer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm @@ -105,9 +105,9 @@ [beaker_contents]
    "} if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) - dat += "Turn on!
    " + dat += "
    Turn on!
    " if (beaker) - dat += "
    Detach the container!
    " + dat += "
    Detach the container!
    " user << browse("Juicer[dat]", "window=juicer") onclose(user, "juicer") return diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index fd2471b96e..e68832e4c0 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -197,8 +197,8 @@ dat += "The microwave is empty." else dat = "

    Ingredients:

    [dat]" - dat += "
    Turn on" - dat += "Eject ingredients
    " + dat += "Turn on" + dat += "Eject ingredients
    " var/datum/browser/popup = new(user, "microwave", name, 300, 300) popup.set_content(dat) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index a041e1d8eb..89f6316297 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -218,9 +218,9 @@ /obj/item/hand/proc/update_conceal() if (src.concealed) - src.hi.updateContent("headbar", "You are currently concealing your hand. Reveal your hand.") + src.hi.updateContent("headbar", "You are currently concealing your hand. Reveal your hand.") else - src.hi.updateContent("headbar", "You are currently revealing your hand. Conceal your hand.") + src.hi.updateContent("headbar", "You are currently revealing your hand. Conceal your hand.") /obj/item/hand/update_icon() if (!cards.len) @@ -260,7 +260,7 @@ var/html = "" for(var/datum/playingcard/card in cards) - html = html + "" + html = html + "" src.hi.updateContent("hand", html) diff --git a/code/modules/html_interface/html_interface.dm b/code/modules/html_interface/html_interface.dm index e53d67b364..a8b48079fa 100644 --- a/code/modules/html_interface/html_interface.dm +++ b/code/modules/html_interface/html_interface.dm @@ -149,20 +149,20 @@ GLOBAL_LIST_EMPTY(html_interfaces) asset_list[type] = assetlist /datum/html_interface/proc/createWindow(datum/html_interface_client/hclient) - winclone(hclient.client, "window", "browser_\ref[src]") + winclone(hclient.client, "window", "browser_[REF(src)]") var/list/params = list( "size" = "[width]x[height]", "statusbar" = "false", - "on-close" = "byond://?src=\ref[src]&html_interface_action=onclose" + "on-close" = "byond://?src=[REF(src)]&html_interface_action=onclose" ) if (hclient.client.hi_last_pos) params["pos"] = "[hclient.client.hi_last_pos]" - winset(hclient.client, "browser_\ref[src]", list2params(params)) + winset(hclient.client, "browser_[REF(src)]", list2params(params)) - winset(hclient.client, "browser_\ref[src].browser", list2params(list("parent" = "browser_\ref[src]", "type" = "browser", "pos" = "0,0", "size" = "[width]x[height]", "anchor1" = "0,0", "anchor2" = "100,100", "use-title" = "true", "auto-format" = "false"))) + winset(hclient.client, "browser_[REF(src)].browser", list2params(list("parent" = "browser_[REF(src)]", "type" = "browser", "pos" = "0,0", "size" = "[width]x[height]", "anchor1" = "0,0", "anchor2" = "100,100", "use-title" = "true", "auto-format" = "false"))) /* * Public API */ /datum/html_interface/proc/getTitle() @@ -185,7 +185,7 @@ GLOBAL_LIST_EMPTY(html_interfaces) if (istype(hclient)) if (hclient.is_loaded) - hclient.client << output(list2params(list(jscript)), "browser_\ref[src].browser:eval") + hclient.client << output(list2params(list(jscript)), "browser_[REF(src)].browser:eval") else for (var/client in src.clients) if(src.clients[client]) @@ -200,7 +200,7 @@ GLOBAL_LIST_EMPTY(html_interfaces) if (istype(hclient)) if (hclient.is_loaded) - hclient.client << output(list2params(arguments), "browser_\ref[src].browser:[func]") + hclient.client << output(list2params(arguments), "browser_[REF(src)].browser:[func]") else for (var/client in src.clients) if (src.clients[client]) @@ -235,15 +235,15 @@ GLOBAL_LIST_EMPTY(html_interfaces) if ((type in asset_list) && islist(asset_list[type])) send_asset_list(hclient.client, asset_list[type], TRUE) - if (!winexists(hclient.client, "browser_\ref[src]")) + if (!winexists(hclient.client, "browser_[REF(src)]")) src.createWindow(hclient) //src._renderTitle(hclient, TRUE) //src._renderLayout(hclient) hclient.is_loaded = FALSE - hclient.client << output(replacetextEx(replacetextEx(file2text('html_interface.html'), "\[hsrc\]", "\ref[src]"), "", "[head]"), "browser_\ref[src].browser") + hclient.client << output(replacetextEx(replacetextEx(file2text('html_interface.html'), "\[hsrc\]", "[REF(src)]"), "", "[head]"), "browser_[REF(src)].browser") - winshow(hclient.client, "browser_\ref[src]", TRUE) + winshow(hclient.client, "browser_[REF(src)]", TRUE) while (hclient.client && hclient.active && !hclient.is_loaded) sleep(2) @@ -258,10 +258,10 @@ GLOBAL_LIST_EMPTY(html_interfaces) if (!src.clients.len) src.clients = null - hclient.client.hi_last_pos = winget(hclient.client, "browser_\ref[src]" ,"pos") + hclient.client.hi_last_pos = winget(hclient.client, "browser_[REF(src)]" ,"pos") - winshow(hclient.client, "browser_\ref[src]", FALSE) - winset(hclient.client, "browser_\ref[src]", "parent=none") + winshow(hclient.client, "browser_[REF(src)]", FALSE) + winset(hclient.client, "browser_[REF(src)]", "parent=none") if (hascall(src.ref, "hiOnHide")) call(src.ref, "hiOnHide")(hclient) @@ -344,7 +344,7 @@ GLOBAL_LIST_EMPTY(html_interfaces) src.specificRenderTitle(hclient) - hclient.client << output(list2params(list(title)), "browser_\ref[src].browser:setTitle") + hclient.client << output(list2params(list(title)), "browser_[REF(src)].browser:setTitle") /datum/html_interface/proc/_renderLayout(datum/html_interface_client/hclient, ignore_loaded = FALSE) if (hclient && (ignore_loaded || hclient.is_loaded)) @@ -354,7 +354,7 @@ GLOBAL_LIST_EMPTY(html_interfaces) if (html != hclient.layout) hclient.layout = html - hclient.client << output(list2params(list(html)), "browser_\ref[src].browser:updateLayout") + hclient.client << output(list2params(list(html)), "browser_[REF(src)].browser:updateLayout") for (var/id in src.content_elements) src._renderContent(id, hclient, ignore_loaded = ignore_loaded) @@ -367,7 +367,7 @@ GLOBAL_LIST_EMPTY(html_interfaces) if (ignore_cache || !(id in hclient.content_elements) || html != hclient.content_elements[id]) hclient.content_elements[id] = html - hclient.client << output(list2params(list(id, html)), "browser_\ref[src].browser:updateContent") + hclient.client << output(list2params(list(id, html)), "browser_[REF(src)].browser:updateContent") /datum/html_interface/Topic(href, href_list[]) var/datum/html_interface_client/hclient = getClient(usr.client) diff --git a/code/modules/html_interface/nanotrasen/nanotrasen.dm b/code/modules/html_interface/nanotrasen/nanotrasen.dm index c9758d85ce..ac7a7f242f 100644 --- a/code/modules/html_interface/nanotrasen/nanotrasen.dm +++ b/code/modules/html_interface/nanotrasen/nanotrasen.dm @@ -27,7 +27,7 @@ The client is optional and may be a /mob, /client or /html_interface_client obje /datum/html_interface/specificRenderTitle(datum/html_interface_client/hclient, ignore_cache = FALSE) // Update the title in our custom header (in addition to default functionality) - winset(hclient.client, "browser_\ref[src].uiTitle", list2params(list("text" = "[src.title]"))) + winset(hclient.client, "browser_[REF(src)].uiTitle", list2params(list("text" = "[src.title]"))) /datum/html_interface/nanotrasen/registerResources(var/list/resources = list()) resources["uiBg.png"] = 'uiBg.png' @@ -39,19 +39,19 @@ The client is optional and may be a /mob, /client or /html_interface_client obje . = ..() // we want the default window // Remove the titlebar - winset(hclient.client, "browser_\ref[src]", list2params(list( + winset(hclient.client, "browser_[REF(src)]", list2params(list( "titlebar" = "false" ))) // Reposition the browser - winset(hclient.client, "browser_\ref[src].browser", list2params(list( + winset(hclient.client, "browser_[REF(src)].browser", list2params(list( "pos" = "0,35", "size" = "[width]x[height - 35]" ))) // Add top background image - winset(hclient.client, "browser_\ref[src].topbg", list2params(list( - "parent" = "browser_\ref[src]", + winset(hclient.client, "browser_[REF(src)].topbg", list2params(list( + "parent" = "browser_[REF(src)]", "type" = "label", "pos" = "0,0", "size" = "[width]x35", @@ -63,8 +63,8 @@ The client is optional and may be a /mob, /client or /html_interface_client obje ))) // Add Nanotrasen logo - winset(hclient.client, "browser_\ref[src].uiTitleFluff", list2params(list( - "parent" = "browser_\ref[src]", + winset(hclient.client, "browser_[REF(src)].uiTitleFluff", list2params(list( + "parent" = "browser_[REF(src)]", "type" = "label", "pos" = "[width - 42 - 4 - 24 - 4 - 24 - 4],5", "size" = "42x24", @@ -76,8 +76,8 @@ The client is optional and may be a /mob, /client or /html_interface_client obje ))) // Add Eye picture - winset(hclient.client, "browser_\ref[src].uiTitleEye", list2params(list( - "parent" = "browser_\ref[src]", + winset(hclient.client, "browser_[REF(src)].uiTitleEye", list2params(list( + "parent" = "browser_[REF(src)]", "type" = "label", "pos" = "8,5", "size" = "42x24", @@ -89,8 +89,8 @@ The client is optional and may be a /mob, /client or /html_interface_client obje ))) // Add title text - winset(hclient.client, "browser_\ref[src].uiTitle", list2params(list( - "parent" = "browser_\ref[src]", + winset(hclient.client, "browser_[REF(src)].uiTitle", list2params(list( + "parent" = "browser_[REF(src)]", "type" = "label", "is-transparent" = "true", "pos" = "64,0", @@ -107,8 +107,8 @@ The client is optional and may be a /mob, /client or /html_interface_client obje // Add minimize button // TODO: Style the button (add image) - winset(hclient.client, "browser_\ref[src].uiTitleMinimize", list2params(list( - "parent" = "browser_\ref[src]", + winset(hclient.client, "browser_[REF(src)].uiTitleMinimize", list2params(list( + "parent" = "browser_[REF(src)]", "type" = "button", "is-flat" = "true", "background-color"="#383838", // should be unnecessary if image is used @@ -123,18 +123,18 @@ The client is optional and may be a /mob, /client or /html_interface_client obje "font-size" = "12", // ~ 16px - should be unnecessary if image is used // Disable resizing (disables maximizing), minimize window, bind window.on-size to catch 'restore window' button to enable resizing if restored. - "command" = ".winset \"browser_\ref[src].can-resize=false;browser_\ref[src].is-minimized=true;browser_\ref[src].on-size=\".swinset \\\"browser_\ref[src].can-resize=true;browser_\ref[src].on-size=\\\"\"\"" + "command" = ".winset \"browser_[REF(src)].can-resize=false;browser_[REF(src)].is-minimized=true;browser_[REF(src)].on-size=\".swinset \\\"browser_[REF(src)].can-resize=true;browser_[REF(src)].on-size=\\\"\"\"" ))) // Add close button // TODO: Style the button (add image) - winset(hclient.client, "browser_\ref[src].uiTitleClose", list2params(list( - "parent" = "browser_\ref[src]", + winset(hclient.client, "browser_[REF(src)].uiTitleClose", list2params(list( + "parent" = "browser_[REF(src)]", "type" = "button", "is-flat" = "true", "background-color"="#383838", // should be unnecessary if image is used "text-color" = "#FFFFFF", // should be unnecessary if image is used - "command" = "byond://?src=\ref[src];html_interface_action=onclose", + "command" = "byond://?src=[REF(src)];html_interface_action=onclose", "is-transparent" = "true", "pos" = "[width - 24 - 4],5", "size" = "24x24", @@ -173,6 +173,6 @@ The client is optional and may be a /mob, /client or /html_interface_client obje if (hclient.getExtraVar("eye_color") != color) hclient.putExtraVar("eye_color", color) - winset(hclient.client, "browser_\ref[src].uiTitleEye", list2params(list("image" = "[resource]"))) + winset(hclient.client, "browser_[REF(src)].uiTitleEye", list2params(list("image" = "[resource]"))) else WARNING("Invalid object passed to /datum/html_interface/nanotrasen/proc/setEyeColor") \ No newline at end of file diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 1535173f8d..d46875eb00 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -183,17 +183,17 @@ categories[C] += D dat += "
    Biomass: [points] units.

    " - dat += "ActivateDetach Container" + dat += "ActivateDetach Container" for(var/cat in categories) dat += "

    [cat]:

    " dat += "
    " for(var/V in categories[cat]) var/datum/design/D = V - dat += "[D.name]: Make" + dat += "[D.name]: Make" if(cat in timesFiveCategories) - dat += "x5" + dat += "x5" if(ispath(D.build_path, /obj/item/stack)) - dat += "x10" + dat += "x10" dat += "([D.materials[MAT_BIOMASS]/efficiency])
    " dat += "
    " else diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 9235bb83d7..bd0215138a 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -171,19 +171,19 @@ dat += "[target.get_name()] gene with [disk.gene.get_name()]?
    " if("insert") dat += "[disk.gene.get_name()] gene into \the [seed]?
    " - dat += "
    Confirm " - dat += "Abort
    " + dat += "
    Confirm " + dat += "Abort
    " popup.set_content(dat) popup.open() return dat+= "
    " dat += "
    [G.get_name()]" if(can_extract) - dat += "Extract" + dat += "Extract" if(can_insert && istype(disk.gene, G.type)) - dat += "Replace" + dat += "Replace" dat += "
    " @@ -221,15 +221,15 @@ var/datum/plant_gene/G = a dat += "[G.get_name()]" if(can_extract) - dat += "Extract" - dat += "Remove" + dat += "Extract" + dat += "Remove" dat += "" dat += "" else dat += "No content-related genes detected in sample.
    " dat += "" if(can_insert && istype(disk.gene, /datum/plant_gene/reagent)) - dat += "Insert: [disk.gene.get_name()]" + dat += "Insert: [disk.gene.get_name()]" dat += "

    Trait Genes

    " if(trait_genes.len) @@ -238,14 +238,14 @@ var/datum/plant_gene/G = a dat += "[G.get_name()]" if(can_extract) - dat += "Extract" - dat += "Remove" + dat += "Extract" + dat += "Remove" dat += "" dat += "" else dat += "No trait-related genes detected in sample.
    " if(can_insert && istype(disk.gene, /datum/plant_gene/trait)) - dat += "Insert: [disk.gene.get_name()]" + dat += "Insert: [disk.gene.get_name()]" dat += "
    " else dat += "
    No sample found.
    Please, insert a plant sample to use this device." diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index 54805f3141..0899a21132 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -136,7 +136,7 @@ for (var/datum/seed_pile/O in piles) dat += "[O.name][O.lifespan][O.endurance][O.maturation]" dat += "[O.production][O.yield][O.potency]" - dat += "Vend ([O.amount] left)" + dat += "Vend ([O.amount] left)" dat += "" var/datum/browser/popup = new(user, "seed_ext", name, 700, 400) popup.set_content(dat) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 081ecdcdaa..fb55a0565b 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -39,10 +39,10 @@ switch(screenstate) if(0) dat += "

    Search Settings


    " - dat += "Filter by Title: [title]
    " - dat += "Filter by Category: [category]
    " - dat += "Filter by Author: [author]
    " - dat += "\[Start Search\]
    " + dat += "Filter by Title: [title]
    " + dat += "Filter by Category: [category]
    " + dat += "Filter by Author: [author]
    " + dat += "\[Start Search\]
    " if(1) if (!SSdbcore.Connect()) dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance.
    " @@ -62,7 +62,7 @@ var/id = query_library_list_books.item[4] dat += "[author][title][category][id]" dat += "
    " - dat += "\[Go Back\]
    " + dat += "\[Go Back\]
    " var/datum/browser/popup = new(user, "publiclibrary", name, 600, 400) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) @@ -193,7 +193,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums if (libcomp_menu.len < page) libcomp_menu.len = page libcomp_menu[page] = "" - libcomp_menu[page] += "[C.author][C.title][C.category]\[Order\]\n" + libcomp_menu[page] += "[C.author][C.title][C.category]\[Order\]\n" /obj/machinery/computer/libraryconsole/bookmanagement/Initialize() . = ..() @@ -207,15 +207,15 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums switch(screenstate) if(0) // Main Menu - dat += "1. View General Inventory
    " - dat += "2. View Checked Out Inventory
    " - dat += "3. Check out a Book
    " - dat += "4. Connect to External Archive
    " - dat += "5. Upload New Title to Archive
    " - dat += "6. Upload Scanned Title to Newscaster
    " - dat += "7. Print Corporate Materials
    " + dat += "1. View General Inventory
    " + dat += "2. View Checked Out Inventory
    " + dat += "3. Check out a Book
    " + dat += "4. Connect to External Archive
    " + dat += "5. Upload New Title to Archive
    " + dat += "6. Upload Scanned Title to Newscaster
    " + dat += "7. Print Corporate Materials
    " if(src.emagged) - dat += "8. Access the Forbidden Lore Vault
    " + dat += "8. Access the Forbidden Lore Vault
    " if(src.arcanecheckout) print_forbidden_lore(user) src.arcanecheckout = 0 @@ -223,8 +223,8 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums // Inventory dat += "

    Inventory


    " for(var/obj/item/book/b in inventory) - dat += "[b.name] (Delete)
    " - dat += "(Return to main menu)
    " + dat += "[b.name] (Delete)
    " + dat += "(Return to main menu)
    " if(2) // Checked Out dat += "

    Checked Out Books


    " @@ -241,20 +241,20 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums else timedue = round(timedue) dat += "\"[b.bookname]\", Checked out to: [b.mobname]
    --- Taken: [timetaken] minutes ago, Due: in [timedue] minutes
    " - dat += "(Check In)

    " - dat += "(Return to main menu)
    " + dat += "(Check In)

    " + dat += "(Return to main menu)
    " if(3) // Check Out a Book dat += "

    Check Out a Book


    " dat += "Book: [src.buffer_book] " - dat += "\[Edit\]
    " + dat += "\[Edit\]
    " dat += "Recipient: [src.buffer_mob] " - dat += "\[Edit\]
    " + dat += "\[Edit\]
    " dat += "Checkout Date : [world.time/600]
    " dat += "Due Date: [(world.time + checkoutperiod)/600]
    " - dat += "(Checkout Period: [checkoutperiod] minutes) (+/-)" - dat += "(Commit Entry)
    " - dat += "(Return to main menu)
    " + dat += "(Checkout Period: [checkoutperiod] minutes) (+/-)" + dat += "(Commit Entry)
    " + dat += "(Return to main menu)
    " if(4) dat += "

    External Archive

    " build_library_menu() @@ -262,13 +262,13 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums if(!GLOB.cachedbooks) dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance." else - dat += "(Order book by SS13BN)

    " + dat += "(Order book by SS13BN)

    " dat += "" dat += "" dat += libcomp_menu[Clamp(page,1,libcomp_menu.len)] - dat += "" + dat += "" dat += "
    AUTHORTITLECATEGORY
    <<<< >>>>
    <<<< >>>>
    " - dat += "
    (Return to main menu)
    " + dat += "
    (Return to main menu)
    " if(5) dat += "

    Upload a New Title

    " if(!scanner) @@ -282,10 +282,10 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums dat += "Title: [scanner.cache.name]
    " if(!scanner.cache.author) scanner.cache.author = "Anonymous" - dat += "Author: [scanner.cache.author]
    " - dat += "Category: [upload_category]
    " - dat += "\[Upload\]
    " - dat += "(Return to main menu)
    " + dat += "Author: [scanner.cache.author]
    " + dat += "Category: [upload_category]
    " + dat += "\[Upload\]
    " + dat += "(Return to main menu)
    " if(6) dat += "

    Post Title to Newscaster

    " if(!scanner) @@ -296,19 +296,19 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums dat += "No data found in scanner memory.
    " else dat += "Post [scanner.cache.name] to station newscasters?" - dat += "\[Post\]
    " - dat += "(Return to main menu)
    " + dat += "\[Post\]
    " + dat += "(Return to main menu)
    " if(7) dat += "

    NTGanda(tm) Universal Printing Module

    " dat += "What would you like to print?
    " - dat += "\[Bible\]
    " - dat += "\[Poster\]
    " - dat += "(Return to main menu)
    " + dat += "\[Bible\]
    " + dat += "\[Poster\]
    " + dat += "(Return to main menu)
    " if(8) dat += "

    Accessing Forbidden Lore Vault v 1.3

    " dat += "Are you absolutely sure you want to proceed? EldritchTomes Inc. takes no responsibilities for loss of sanity resulting from this action.

    " - dat += "Yes.
    " - dat += "No.
    " + dat += "Yes.
    " + dat += "No.
    " var/datum/browser/popup = new(user, "library", name, 600, 400) popup.set_content(dat) @@ -519,9 +519,9 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums dat += "Data stored in memory.
    " else dat += "No data stored in memory.
    " - dat += "\[Scan\]" + dat += "\[Scan\]" if(cache) - dat += " \[Clear Memory\]

    \[Remove Book\]" + dat += " \[Clear Memory\]

    \[Remove Book\]" else dat += "
    " var/datum/browser/popup = new(user, "scanner", name, 600, 400) diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index cd6104607f..3d0c1ccf1d 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -46,11 +46,11 @@ interface with the mining shuttle at the landing site if a mobile beacon is also if(!M.check_dock(S)) continue destination_found = 1 - dat += "Send to [S.name]
    " + dat += "Send to [S.name]
    " if(!destination_found && (z in GLOB.station_z_levels)) //Only available if miners are lazy and did not set an LZ using the remote. - dat += "Prepare for blind drop? (Dangerous)
    " + dat += "Prepare for blind drop? (Dangerous)
    " if(LAZYLEN(turrets)) - dat += "
    Perimeter Defense System: Enable All / Disable All
    \ + dat += "
    Perimeter Defense System: Enable All / Disable All
    \ Units connected: [LAZYLEN(turrets)]
    \ Unit | Condition | Status | Direction | Distance
    " for(var/PDT in turrets) @@ -65,10 +65,10 @@ interface with the mining shuttle at the landing site if a mobile beacon is also status = "Firing" else status = "All Clear" - dat += "[T.name] | [integrity]% | [status] | [dir2text(get_dir(src, T))] | [get_dist(src, T)]m Toggle Power
    " + dat += "[T.name] | [integrity]% | [status] | [dir2text(get_dir(src, T))] | [get_dist(src, T)]m Toggle Power
    " - dat += "Close" + dat += "Close" var/datum/browser/popup = new(user, "computer", "base management", 550, 300) //width, height popup.set_content("

    [dat]
    ") @@ -154,7 +154,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also var/area/A = get_area(T) var/obj/docking_port/stationary/landing_zone = new /obj/docking_port/stationary(T) - landing_zone.id = "colony_drop(\ref[src])" + landing_zone.id = "colony_drop([REF(src)])" landing_zone.name = "Landing Zone ([T.x], [T.y])" landing_zone.dwidth = base_dock.dwidth landing_zone.dheight = base_dock.dheight diff --git a/code/modules/mining/equipment/lazarus_injector.dm b/code/modules/mining/equipment/lazarus_injector.dm index 59b0a02788..e56e8060bf 100644 --- a/code/modules/mining/equipment/lazarus_injector.dm +++ b/code/modules/mining/equipment/lazarus_injector.dm @@ -31,7 +31,7 @@ if(ishostile(target)) var/mob/living/simple_animal/hostile/H = M if(malfunctioning) - H.faction |= list("lazarus", "\ref[user]") + H.faction |= list("lazarus", "[REF(user)]") H.robust_searching = 1 H.friends += user H.attack_same = 1 diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 4d3dc5db37..afdcc1339c 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -749,7 +749,7 @@ to_chat(user, "You call out for aid, attempting to summon spirits to your side.") notify_ghosts("[user] is raising [user.p_their()] [src], calling for your help!", - enter_link="(Click to help)", + enter_link="(Click to help)", source = user, action=NOTIFY_ORBIT) summon_cooldown = world.time + 600 diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 75c0f94ac4..012f02afcc 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -106,7 +106,7 @@ if (selected_material == mat_id) dat += " Smelting" else - dat += " Not Smelting " + dat += " Not Smelting " dat += "
    " dat += "

    " @@ -118,16 +118,16 @@ if (selected_alloy == D.id) dat += " Smelting" else - dat += " Not Smelting " + dat += " Not Smelting " dat += "
    " dat += "

    " //On or off dat += "Machine is currently " if (on) - dat += "On " + dat += "On " else - dat += "Off " + dat += "Off " return dat diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index c2bf0849bb..975b7c7a4e 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -29,7 +29,7 @@ for(var/O in machine.stack_list) s = machine.stack_list[O] if(s.amount > 0) - dat += text("[capitalize(s.name)]: [s.amount] Release
    ") + dat += text("[capitalize(s.name)]: [s.amount] Release
    ") dat += text("
    Stacking: [machine.stack_amt]

    ") diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 5a228973ce..cbf7dfd826 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -89,13 +89,13 @@ var/dat dat +="
    " if(istype(inserted_id)) - dat += "You have [inserted_id.mining_points] mining points collected. Eject ID.
    " + dat += "You have [inserted_id.mining_points] mining points collected. Eject ID.
    " else - dat += "No ID inserted. Insert ID.
    " + dat += "No ID inserted. Insert ID.
    " dat += "
    " dat += "
    Equipment point cost list:
    " for(var/datum/data/mining_equipment/prize in prize_list) - dat += "" + dat += "" dat += "
    [prize.equipment_name][prize.cost]Purchase
    [prize.equipment_name][prize.cost]Purchase
    " var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 350) diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm index 1a4e4c5ed1..0981509007 100644 --- a/code/modules/mining/mint.dm +++ b/code/modules/mining/mint.dm @@ -39,20 +39,20 @@ if (chosen == mat_id) dat += "Chosen" else - dat += "Choose" + dat += "Choose" var/datum/material/M = materials.materials[chosen] dat += "

    Will produce [coinsToProduce] [lowertext(M.name)] coins if enough materials are available.
    " - dat += "-10 " - dat += "-5 " - dat += "-1 " - dat += "+1 " - dat += "+5 " - dat += "+10 " + dat += "-10 " + dat += "-5 " + dat += "-1 " + dat += "+1 " + dat += "+5 " + dat += "+10 " dat += "

    In total this machine produced [newCoins] coins." - dat += "
    Make coins" + dat += "
    Make coins" user << browse(dat, "window=mint") /obj/machinery/mineral/mint/Topic(href, href_list) diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 832d55a6a0..4c772a7019 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -47,7 +47,7 @@ for(var/i in oretypes) var/obj/item/ore/T = locate(i) in contents dat += "[capitalize(T.name)]: [count_by_type(contents, T.type)]
    " - dat += text("

    Empty box") + dat += text("

    Empty box") user << browse(dat, "window=orebox") /obj/structure/ore_box/proc/dump_box_contents() diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 2b2c50ed17..458a54aa48 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -1,4 +1,4 @@ -#define LINKIFY_READY(string, value) "[string]" +#define LINKIFY_READY(string, value) "[string]" /mob/dead/new_player var/ready = 0 @@ -33,7 +33,7 @@ return /mob/dead/new_player/proc/new_player_panel() - var/output = "

    Setup Character

    " + var/output = "

    Setup Character

    " if(SSticker.current_state <= GAME_STATE_PREGAME) switch(ready) @@ -44,8 +44,8 @@ if(PLAYER_READY_TO_OBSERVE) output += "

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

    " else - output += "

    View the Crew Manifest

    " - output += "

    Join Game!

    " + output += "

    View the Crew Manifest

    " + output += "

    Join Game!

    " output += "

    [LINKIFY_READY("Observe", PLAYER_READY_TO_OBSERVE)]

    " if(!IsGuestKey(src.key)) @@ -60,9 +60,9 @@ newpoll = 1 if(newpoll) - output += "

    Show Player Polls (NEW!)

    " + output += "

    Show Player Polls (NEW!)

    " else - output += "

    Show Player Polls

    " + output += "

    Show Player Polls

    " output += "
    " @@ -449,12 +449,12 @@ var/position_class = "otherPosition" if (job.title in GLOB.command_positions) position_class = "commandPosition" - dat += "[job.title] ([job.current_positions])
    " + dat += "[job.title] ([job.current_positions])
    " if(!job_count) //if there's nowhere to go, assistant opens up. for(var/datum/job/job in SSjob.occupations) if(job.title != "Assistant") continue - dat += "[job.title] ([job.current_positions])
    " + dat += "[job.title] ([job.current_positions])
    " break dat += "" diff --git a/code/modules/mob/dead/new_player/poll.dm b/code/modules/mob/dead/new_player/poll.dm index 2e2f3189fe..d10e32a887 100644 --- a/code/modules/mob/dead/new_player/poll.dm +++ b/code/modules/mob/dead/new_player/poll.dm @@ -14,7 +14,7 @@ while(query_poll_get.NextRow()) var/pollid = query_poll_get.item[1] var/pollquestion = query_poll_get.item[2] - output += "[pollquestion]" + output += "[pollquestion]" i++ output += "" src << browse(output,"window=playerpolllist;size=500x300") @@ -60,8 +60,8 @@ output += "Question: [pollquestion]
    " output += "Poll runs from [pollstarttime] until [pollendtime]

    " if(!votedoptionid) - output += "" - output += "" + output += "" + output += "" output += "" output += "" output += "
    " @@ -92,15 +92,15 @@ output += "Question: [pollquestion]
    " output += "Feedback gathering runs from [pollstarttime] until [pollendtime]

    " if(!vote_text) - output += "" - output += "" + output += "" + output += "" output += "" output += "" output += "Please provide feedback below. You can use any letters of the English alphabet, numbers and the symbols: . , ! ? : ; -
    " output += "" output += "

    " - output += "

    " - output += "" + output += "" + output += "" output += "" output += "" output += "" @@ -123,8 +123,8 @@ rating = query_rating_get_votes.item[2] output += "
    [optiontext] - [rating]" if(!rating) - output += "" - output += "" + output += "" + output += "" output += "" output += "" var/minid = 999999 @@ -188,8 +188,8 @@ output += "Question: [pollquestion]
    You can select up to [multiplechoiceoptions] options. If you select more, the first [multiplechoiceoptions] will be saved.
    " output += "Poll runs from [pollstarttime] until [pollendtime]

    " if(!votedfor.len) - output += "" - output += "" + output += "" + output += "" output += "" output += "" output += "" @@ -300,8 +300,8 @@ Revoting has been enabled on this poll, if you think you made a mistake, simply revote
    Poll runs from [pollstarttime] until [pollendtime]

    - - + + diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index f6b362e959..52db510af3 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -330,7 +330,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(message) to_chat(src, "[message]") if(source) - var/obj/screen/alert/A = throw_alert("\ref[source]_notify_cloning", /obj/screen/alert/notify_cloning) + var/obj/screen/alert/A = throw_alert("[REF(source)]_notify_cloning", /obj/screen/alert/notify_cloning) if(A) if(client && client.prefs && client.prefs.UI_style) A.icon = ui_style2icon(client.prefs.UI_style) @@ -342,7 +342,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp A.add_overlay(source) source.layer = old_layer source.plane = old_plane - to_chat(src, "(Click to re-enter)") + to_chat(src, "(Click to re-enter)") if(sound) SEND_SOUND(src, sound(sound)) diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index d158eb9576..2b8d43a7ac 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -37,7 +37,11 @@ GLOBAL_VAR(posibrain_notify_cooldown) /obj/item/device/mmi/posibrain/proc/ping_ghosts(msg, newlymade) if(newlymade || GLOB.posibrain_notify_cooldown <= world.time) +<<<<<<< HEAD notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/misc/server-ready.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) +======= + notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental if(!newlymade) GLOB.posibrain_notify_cooldown = world.time + askDelay diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 9d9e327fec..d9ce6b904d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -45,20 +45,20 @@


    "} for(var/i in 1 to held_items.len) var/obj/item/I = get_item_for_held_index(i) - dat += "
    [get_held_index_name(i)]:[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Empty"]" - dat += "
    Empty Pouches" + dat += "
    [get_held_index_name(i)]:[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Empty"]" + dat += "
    Empty Pouches" if(handcuffed) - dat += "
    Handcuffed" + dat += "
    Handcuffed" if(legcuffed) - dat += "
    Legcuffed" + dat += "
    Legcuffed" dat += {"
    -
    Close +
    Close "} - user << browse(dat.Join(), "window=mob\ref[src];size=325x500") - onclose(user, "mob\ref[src]") + user << browse(dat.Join(), "window=mob[REF(src)];size=325x500") + onclose(user, "mob[REF(src)]") /mob/living/carbon/alien/humanoid/Topic(href, href_list) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 4174b08642..6cb5436df8 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -184,30 +184,30 @@
    [name]
    -
    Head: [(head && !(head.flags_1&ABSTRACT_1)) ? head : "Nothing"] -
    Mask: [(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "Nothing"] -
    Neck: [(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "Nothing"]"} +
    Head: [(head && !(head.flags_1&ABSTRACT_1)) ? head : "Nothing"] +
    Mask: [(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "Nothing"] +
    Neck: [(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "Nothing"]"} for(var/i in 1 to held_items.len) var/obj/item/I = get_item_for_held_index(i) - dat += "
    [get_held_index_name(i)]:
    [(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Nothing"]" + dat += "
    [get_held_index_name(i)]:
    [(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Nothing"]" - dat += "
    Back: [back ? back : "Nothing"]" + dat += "
    Back: [back ? back : "Nothing"]" if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/tank)) - dat += "
    [internal ? "Disable Internals" : "Set Internals"]" + dat += "
    [internal ? "Disable Internals" : "Set Internals"]" if(handcuffed) - dat += "
    Handcuffed" + dat += "
    Handcuffed" if(legcuffed) - dat += "
    Legcuffed" + dat += "
    Legcuffed" dat += {"
    -
    Close +
    Close "} - user << browse(dat, "window=mob\ref[src];size=325x500") - onclose(user, "mob\ref[src]") + user << browse(dat, "window=mob[REF(src)];size=325x500") + onclose(user, "mob[REF(src)]") /mob/living/carbon/Topic(href, href_list) ..() @@ -843,7 +843,7 @@ /mob/living/carbon/vv_get_dropdown() . = ..() . += "---" - .["Make AI"] = "?_src_=vars;[HrefToken()];makeai=\ref[src]" - .["Modify bodypart"] = "?_src_=vars;[HrefToken()];editbodypart=\ref[src]" - .["Modify organs"] = "?_src_=vars;[HrefToken()];editorgans=\ref[src]" - .["Hallucinate"] = "?_src_=vars;[HrefToken()];hallucinate=\ref[src]" + .["Make AI"] = "?_src_=vars;[HrefToken()];makeai=[REF(src)]" + .["Modify bodypart"] = "?_src_=vars;[HrefToken()];editbodypart=[REF(src)]" + .["Modify organs"] = "?_src_=vars;[HrefToken()];editorgans=[REF(src)]" + .["Hallucinate"] = "?_src_=vars;[HrefToken()];hallucinate=[REF(src)]" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 917b590247..c42327d632 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -308,8 +308,8 @@ 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\]
    " + msg += "\[Front photo\] " + msg += "\[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) @@ -320,12 +320,12 @@ msg += cyberimp_detect if(R) var/health_r = R.fields["p_stat"] - msg += "\[[health_r]\]" + msg += "\[[health_r]\]" health_r = R.fields["m_stat"] - msg += "\[[health_r]\]
    " + msg += "\[[health_r]\]
    " R = find_record("name", perpname, GLOB.data_core.medical) if(R) - msg += "\[Medical evaluation\]
    " + msg += "\[Medical evaluation\]
    " if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(CIH, /obj/item/organ/cyberimp/eyes/hud/security)) @@ -337,6 +337,7 @@ if(R) criminal = R.fields["criminal"] +<<<<<<< HEAD msg += "Criminal status: \[[criminal]\]\n" msg += "Security record: \[View\] " msg += "\[Add crime\] " @@ -345,6 +346,13 @@ if(print_flavor_text() && 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 += "[print_flavor_text()]\n" +======= + msg += "Criminal status: \[[criminal]\]\n" + msg += "Security record: \[View\] " + msg += "\[Add crime\] " + msg += "\[View comment log\] " + msg += "\[Add comment\]\n" +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental msg += "*---------*" to_chat(user, msg) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a39b84e47c..a27c9a1eb9 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -104,44 +104,44 @@ dat += "" for(var/i in 1 to held_items.len) var/obj/item/I = get_item_for_held_index(i) - dat += "" + dat += "" dat += "" - dat += "" - dat += "" + dat += "" if(slot_wear_mask in obscured) dat += "" else - dat += "" + dat += "" if(slot_neck in obscured) dat += "" else - dat += "" + dat += "" if(slot_glasses in obscured) dat += "" else - dat += "" + dat += "" if(slot_ears in obscured) dat += "" else - dat += "" + dat += "" dat += "" - dat += "" + dat += "" if(wear_suit) - dat += "" else dat += "" @@ -149,41 +149,41 @@ if(slot_shoes in obscured) dat += "" else - dat += "" + dat += "" if(slot_gloves in obscured) dat += "" else - dat += "" + dat += "" if(slot_w_uniform in obscured) dat += "" else - dat += "" + dat += "" if((w_uniform == null && !(dna && dna.species.nojumpsuit)) || (slot_w_uniform in obscured)) dat += "" dat += "" dat += "" else - dat += "" - dat += "" - dat += "" + dat += "" + dat += "" if(handcuffed) - dat += "" + dat += "" if(legcuffed) - dat += "" + dat += "" dat += {"
    [get_held_index_name(i)]:[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Empty"]
    [get_held_index_name(i)]:[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Empty"]
     
    Back:[(back && !(back.flags_1&ABSTRACT_1)) ? back : "Empty"]" + dat += "
    Back:[(back && !(back.flags_1&ABSTRACT_1)) ? back : "Empty"]" if(has_breathable_mask && istype(back, /obj/item/tank)) - dat += " [internal ? "Disable Internals" : "Set Internals"]" + dat += " [internal ? "Disable Internals" : "Set Internals"]" dat += "
     
    Head:[(head && !(head.flags_1&ABSTRACT_1)) ? head : "Empty"]
    Head:[(head && !(head.flags_1&ABSTRACT_1)) ? head : "Empty"]
    Mask:Obscured
    Mask:[(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "Empty"]
    Mask:[(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "Empty"]
    Neck:Obscured
    Neck:[(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "Empty"]
    Neck:[(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "Empty"]
    Eyes:Obscured
    Eyes:[(glasses && !(glasses.flags_1&ABSTRACT_1)) ? glasses : "Empty"]
    Eyes:[(glasses && !(glasses.flags_1&ABSTRACT_1)) ? glasses : "Empty"]
    Ears:Obscured
    Ears:[(ears && !(ears.flags_1&ABSTRACT_1)) ? ears : "Empty"]
    Ears:[(ears && !(ears.flags_1&ABSTRACT_1)) ? ears : "Empty"]
     
    Exosuit:[(wear_suit && !(wear_suit.flags_1&ABSTRACT_1)) ? wear_suit : "Empty"]
    Exosuit:[(wear_suit && !(wear_suit.flags_1&ABSTRACT_1)) ? wear_suit : "Empty"]
     ↳Suit Storage:[(s_store && !(s_store.flags_1&ABSTRACT_1)) ? s_store : "Empty"]" + dat += "
     ↳Suit Storage:[(s_store && !(s_store.flags_1&ABSTRACT_1)) ? s_store : "Empty"]" if(has_breathable_mask && istype(s_store, /obj/item/tank)) - dat += " [internal ? "Disable Internals" : "Set Internals"]" + dat += " [internal ? "Disable Internals" : "Set Internals"]" dat += "
     ↳Suit Storage:
    Shoes:Obscured
    Shoes:[(shoes && !(shoes.flags_1&ABSTRACT_1)) ? shoes : "Empty"]
    Shoes:[(shoes && !(shoes.flags_1&ABSTRACT_1)) ? shoes : "Empty"]
    Gloves:Obscured
    Gloves:[(gloves && !(gloves.flags_1&ABSTRACT_1)) ? gloves : "Empty"]
    Gloves:[(gloves && !(gloves.flags_1&ABSTRACT_1)) ? gloves : "Empty"]
    Uniform:Obscured
    Uniform:[(w_uniform && !(w_uniform.flags_1&ABSTRACT_1)) ? w_uniform : "Empty"]
    Uniform:[(w_uniform && !(w_uniform.flags_1&ABSTRACT_1)) ? w_uniform : "Empty"]
     ↳Pockets:
     ↳ID:
     ↳Belt:
     ↳Belt:[(belt && !(belt.flags_1&ABSTRACT_1)) ? belt : "Empty"]" + dat += "
     ↳Belt:[(belt && !(belt.flags_1&ABSTRACT_1)) ? belt : "Empty"]" if(has_breathable_mask && istype(belt, /obj/item/tank)) - dat += " [internal ? "Disable Internals" : "Set Internals"]" + dat += " [internal ? "Disable Internals" : "Set Internals"]" dat += "
     ↳Pockets:[(l_store && !(l_store.flags_1&ABSTRACT_1)) ? "Left (Full)" : "Left (Empty)"]" - dat += " [(r_store && !(r_store.flags_1&ABSTRACT_1)) ? "Right (Full)" : "Right (Empty)"]
     ↳ID:[(wear_id && !(wear_id.flags_1&ABSTRACT_1)) ? wear_id : "Empty"]
     ↳Pockets:[(l_store && !(l_store.flags_1&ABSTRACT_1)) ? "Left (Full)" : "Left (Empty)"]" + dat += " [(r_store && !(r_store.flags_1&ABSTRACT_1)) ? "Right (Full)" : "Right (Empty)"]
     ↳ID:[(wear_id && !(wear_id.flags_1&ABSTRACT_1)) ? wear_id : "Empty"]
    Handcuffed: Remove
    Handcuffed: Remove
    Legcuffed
    Legcuffed
    - Close + Close "} - var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 510) + var/datum/browser/popup = new(user, "mob[REF(src)]", "[src]", 440, 510) popup.set_content(dat.Join()) popup.open() @@ -869,12 +869,12 @@ /mob/living/carbon/human/vv_get_dropdown() . = ..() . += "---" - .["Make monkey"] = "?_src_=vars;[HrefToken()];makemonkey=\ref[src]" - .["Set Species"] = "?_src_=vars;[HrefToken()];setspecies=\ref[src]" - .["Make cyborg"] = "?_src_=vars;[HrefToken()];makerobot=\ref[src]" - .["Make alien"] = "?_src_=vars;[HrefToken()];makealien=\ref[src]" - .["Make slime"] = "?_src_=vars;[HrefToken()];makeslime=\ref[src]" - .["Toggle Purrbation"] = "?_src_=vars;[HrefToken()];purrbation=\ref[src]" + .["Make monkey"] = "?_src_=vars;[HrefToken()];makemonkey=[REF(src)]" + .["Set Species"] = "?_src_=vars;[HrefToken()];setspecies=[REF(src)]" + .["Make cyborg"] = "?_src_=vars;[HrefToken()];makerobot=[REF(src)]" + .["Make alien"] = "?_src_=vars;[HrefToken()];makealien=[REF(src)]" + .["Make slime"] = "?_src_=vars;[HrefToken()];makeslime=[REF(src)]" + .["Toggle Purrbation"] = "?_src_=vars;[HrefToken()];purrbation=[REF(src)]" /mob/living/carbon/human/MouseDrop_T(mob/living/target, mob/living/user) if((target != pulling) || (grab_state < GRAB_AGGRESSIVE) || (user != target) || !isliving(user) || stat || user.stat)//Get consent first :^) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index f21f872d0a..b37ebabb45 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -670,7 +670,7 @@ to_chat(src, "\t Your [LB.name] is [status].") for(var/obj/item/I in LB.embedded_objects) - to_chat(src, "\t There is \a [I] embedded in your [LB.name]!") + to_chat(src, "\t There is \a [I] embedded in your [LB.name]!") for(var/t in missing) to_chat(src, "Your [parse_zone(t)] is missing!") diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 1d69e294df..3debb6ade3 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /datum/species/jelly // Entirely alien beings that seem to be made entirely out of gel. They have three eyes and a skeleton visible within them. name = "Xenobiological Jelly Entity" @@ -332,4 +333,341 @@ M.transfer_to(dupe) dupe.visible_message("[dupe] blinks and looks \ around.", - "...and move this one instead.") \ No newline at end of file + "...and move this one instead.") +======= +/datum/species/jelly + // Entirely alien beings that seem to be made entirely out of gel. They have three eyes and a skeleton visible within them. + name = "Xenobiological Jelly Entity" + id = "jelly" + default_color = "00FF90" + say_mod = "chirps" + species_traits = list(MUTCOLORS,EYECOLOR,NOBLOOD,VIRUSIMMUNE,TOXINLOVER) + meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime + exotic_blood = "slimejelly" + damage_overlay_type = "" + var/datum/action/innate/regenerate_limbs/regenerate_limbs + liked_food = MEAT + +/datum/species/jelly/on_species_loss(mob/living/carbon/C) + if(regenerate_limbs) + regenerate_limbs.Remove(C) + ..() + +/datum/species/jelly/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + if(ishuman(C)) + regenerate_limbs = new + regenerate_limbs.Grant(C) + +/datum/species/jelly/spec_life(mob/living/carbon/human/H) + if(H.stat == DEAD) //can't farm slime jelly from a dead slime/jelly person indefinitely + return + if(!H.blood_volume) + H.blood_volume += 5 + H.adjustBruteLoss(5) + to_chat(H, "You feel empty!") + + if(H.blood_volume < BLOOD_VOLUME_NORMAL) + if(H.nutrition >= NUTRITION_LEVEL_STARVING) + H.blood_volume += 3 + H.nutrition -= 2.5 + if(H.blood_volume < BLOOD_VOLUME_OKAY) + if(prob(5)) + to_chat(H, "You feel drained!") + if(H.blood_volume < BLOOD_VOLUME_BAD) + Cannibalize_Body(H) + H.update_action_buttons_icon() + +/datum/species/jelly/proc/Cannibalize_Body(mob/living/carbon/human/H) + var/list/limbs_to_consume = list("r_arm", "l_arm", "r_leg", "l_leg") - H.get_missing_limbs() + var/obj/item/bodypart/consumed_limb + if(!limbs_to_consume.len) + H.losebreath++ + return + if(H.get_num_legs()) //Legs go before arms + limbs_to_consume -= list("r_arm", "l_arm") + consumed_limb = H.get_bodypart(pick(limbs_to_consume)) + consumed_limb.drop_limb() + to_chat(H, "Your [consumed_limb] is drawn back into your body, unable to maintain its shape!") + qdel(consumed_limb) + H.blood_volume += 20 + +/datum/action/innate/regenerate_limbs + name = "Regenerate Limbs" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "slimeheal" + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + +/datum/action/innate/regenerate_limbs/IsAvailable() + if(..()) + var/mob/living/carbon/human/H = owner + var/list/limbs_to_heal = H.get_missing_limbs() + if(limbs_to_heal.len < 1) + return 0 + if(H.blood_volume >= BLOOD_VOLUME_OKAY+40) + return 1 + return 0 + +/datum/action/innate/regenerate_limbs/Activate() + var/mob/living/carbon/human/H = owner + var/list/limbs_to_heal = H.get_missing_limbs() + if(limbs_to_heal.len < 1) + to_chat(H, "You feel intact enough as it is.") + return + to_chat(H, "You focus intently on your missing [limbs_to_heal.len >= 2 ? "limbs" : "limb"]...") + if(H.blood_volume >= 40*limbs_to_heal.len+BLOOD_VOLUME_OKAY) + H.regenerate_limbs() + H.blood_volume -= 40*limbs_to_heal.len + to_chat(H, "...and after a moment you finish reforming!") + return + else if(H.blood_volume >= 40)//We can partially heal some limbs + while(H.blood_volume >= BLOOD_VOLUME_OKAY+40) + var/healed_limb = pick(limbs_to_heal) + H.regenerate_limb(healed_limb) + limbs_to_heal -= healed_limb + H.blood_volume -= 40 + to_chat(H, "...but there is not enough of you to fix everything! You must attain more mass to heal completely!") + return + to_chat(H, "...but there is not enough of you to go around! You must attain more mass to heal!") + +////////////////////////////////////////////////////////SLIME PEOPLE/////////////////////////////////////////////////////////////////// + +/datum/species/jelly/slime + // Humans mutated by slime mutagen, produced from green slimes. They are not targetted by slimes. + name = "Slimeperson" + id = "slime" + default_color = "00FFFF" + species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD,VIRUSIMMUNE, TOXINLOVER) + say_mod = "says" + hair_color = "mutcolor" + hair_alpha = 150 + ignored_by = list(/mob/living/simple_animal/slime) + burnmod = 0.5 + coldmod = 2 + heatmod = 0.5 + var/datum/action/innate/split_body/slime_split + var/list/mob/living/carbon/bodies + var/datum/action/innate/swap_body/swap_body + +/datum/species/jelly/slime/on_species_loss(mob/living/carbon/C) + if(slime_split) + slime_split.Remove(C) + if(swap_body) + swap_body.Remove(C) + bodies -= C // This means that the other bodies maintain a link + // so if someone mindswapped into them, they'd still be shared. + bodies = null + C.faction -= "slime" + C.blood_volume = min(C.blood_volume, BLOOD_VOLUME_NORMAL) + ..() + +/datum/species/jelly/slime/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + if(ishuman(C)) + slime_split = new + slime_split.Grant(C) + swap_body = new + swap_body.Grant(C) + + if(!bodies || !bodies.len) + bodies = list(C) + else + bodies |= C + + C.faction |= "slime" + +//If you're cloned you get your body pool back +/datum/species/jelly/slime/copy_properties_from(datum/species/jelly/slime/old_species) + bodies = old_species.bodies + +/datum/species/jelly/slime/spec_life(mob/living/carbon/human/H) + if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT) + if(prob(5)) + to_chat(H, "You feel very bloated!") + else if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) + H.blood_volume += 3 + H.nutrition -= 2.5 + + ..() + +/datum/action/innate/split_body + name = "Split Body" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "slimesplit" + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + +/datum/action/innate/split_body/IsAvailable() + if(..()) + var/mob/living/carbon/human/H = owner + if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT) + return 1 + return 0 + +/datum/action/innate/split_body/Activate() + var/mob/living/carbon/human/H = owner + if(!isslimeperson(H)) + return + CHECK_DNA_AND_SPECIES(H) + H.visible_message("[owner] gains a look of \ + concentration while standing perfectly still.", + "You focus intently on moving your body while \ + standing perfectly still...") + + H.notransform = TRUE + + if(do_after(owner, delay=60, needhand=FALSE, target=owner, progress=TRUE)) + if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT) + make_dupe() + else + to_chat(H, "...but there is not enough of you to go around! You must attain more mass to split!") + else + to_chat(H, "...but fail to stand perfectly still!") + + H.notransform = FALSE + +/datum/action/innate/split_body/proc/make_dupe() + var/mob/living/carbon/human/H = owner + CHECK_DNA_AND_SPECIES(H) + + var/mob/living/carbon/human/spare = new /mob/living/carbon/human(H.loc) + + spare.underwear = "Nude" + H.dna.transfer_identity(spare, transfer_SE=1) + spare.dna.features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F") + spare.real_name = spare.dna.real_name + spare.name = spare.dna.real_name + spare.updateappearance(mutcolor_update=1) + spare.domutcheck() + spare.Move(get_step(H.loc, pick(NORTH,SOUTH,EAST,WEST))) + + H.blood_volume = BLOOD_VOLUME_SAFE + H.notransform = 0 + + var/datum/species/jelly/slime/origin_datum = H.dna.species + origin_datum.bodies |= spare + + var/datum/species/jelly/slime/spare_datum = spare.dna.species + spare_datum.bodies = origin_datum.bodies + + H.mind.transfer_to(spare) + spare.visible_message("[H] distorts as a new body \ + \"steps out\" of them.", + "...and after a moment of disorentation, \ + you're besides yourself!") + + +/datum/action/innate/swap_body + name = "Swap Body" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "slimeswap" + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + +/datum/action/innate/swap_body/Activate() + if(!isslimeperson(owner)) + to_chat(owner, "You are not a slimeperson.") + Remove(owner) + else + ui_interact(owner) + +/datum/action/innate/swap_body/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.conscious_state) + + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "slime_swap_body", name, 400, 400, master_ui, state) + ui.open() + +/datum/action/innate/swap_body/ui_data(mob/user) + var/mob/living/carbon/human/H = owner + if(!isslimeperson(H)) + return + + var/datum/species/jelly/slime/SS = H.dna.species + + var/list/data = list() + data["bodies"] = list() + for(var/b in SS.bodies) + var/mob/living/carbon/human/body = b + if(!body || QDELETED(body) || !isslimeperson(body)) + SS.bodies -= b + continue + + var/list/L = list() + // HTML colors need a # prefix + L["htmlcolor"] = "#[body.dna.features["mcolor"]]" + var/area/A = get_area(body) + L["area"] = A.name + var/stat = "error" + switch(body.stat) + if(CONSCIOUS) + stat = "Conscious" + if(UNCONSCIOUS) + stat = "Unconscious" + if(DEAD) + stat = "Dead" + var/current = body.mind + var/is_conscious = (body.stat == CONSCIOUS) + + L["status"] = stat + L["exoticblood"] = body.blood_volume + L["name"] = body.name + L["ref"] = "[REF(body)]" + L["is_current"] = current + var/button + if(current) + button = "selected" + else if(is_conscious) + button = null + else + button = "disabled" + + L["swap_button_state"] = button + L["swappable"] = !current && is_conscious + + data["bodies"] += list(L) + + return data + +/datum/action/innate/swap_body/ui_act(action, params) + if(..()) + return + var/mob/living/carbon/human/H = owner + if(!isslimeperson(owner)) + return + var/datum/species/jelly/slime/SS = H.dna.species + + var/datum/mind/M + for(var/mob/living/L in SS.bodies) + if(L.mind && L.mind.active) + M = L.mind + if(!M) + return + if(!isslimeperson(M.current)) + return + + switch(action) + if("swap") + var/mob/living/carbon/human/selected = locate(params["ref"]) + if(!(selected in SS.bodies)) + return + if(!selected || QDELETED(selected) || !isslimeperson(selected)) + SS.bodies -= selected + return + if(M.current == selected) + return + if(selected.stat != CONSCIOUS) + return + + swap_to_dupe(M, selected) + +/datum/action/innate/swap_body/proc/swap_to_dupe(datum/mind/M, mob/living/carbon/human/dupe) + M.current.visible_message("[M.current] \ + stops moving and starts staring vacantly into space.", + "You stop moving this body...") + M.transfer_to(dupe) + dupe.visible_message("[dupe] blinks and looks \ + around.", + "...and move this one instead.") +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 0cdcd90e61..3a38ae8040 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -15,7 +15,7 @@ real_name = name var/datum/atom_hud/data/human/medical/advanced/medhud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] medhud.add_to_hud(src) - faction += "\ref[src]" + faction += "[REF(src)]" /mob/living/prepare_huds() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index b176649a37..4068d3c2e9 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -267,7 +267,7 @@ /mob/living/silicon/ai/proc/ai_alerts() var/dat = "Current Station Alerts\n" - dat += "Close

    " + dat += "Close

    " for (var/cat in alarms) dat += text("[]
    \n", cat) var/list/L = alarms[cat] @@ -281,11 +281,11 @@ if (C && istype(C, /list)) var/dat2 = "" for (var/obj/machinery/camera/I in C) - dat2 += text("[][]", (dat2=="") ? "" : " | ", src, I, I.c_tag) + dat2 += text("[][]", (dat2=="") ? "" : " | ", I.c_tag) dat += text("-- [] ([])", A.name, (dat2!="") ? dat2 : "No Camera") else if (C && istype(C, /obj/machinery/camera)) var/obj/machinery/camera/Ctmp = C - dat += text("-- [] ([])", A.name, src, C, Ctmp.c_tag) + dat += text("-- [] ([])", A.name, Ctmp.c_tag) else dat += text("-- [] (No Camera)", A.name) if (sources.len > 1) @@ -465,7 +465,7 @@ var/ai_Zlevel = ai_current_turf.z var/d var/area/bot_area - d += "Query network status
    " + d += "Query network status
    " d += "" for (Bot in GLOB.living_mob_list) @@ -476,8 +476,8 @@ //If the bot is on, it will display the bot's current mode status. If the bot is not mode, it will just report "Idle". "Inactive if it is not on at all. d += "" d += "" - d += "" - d += "" + d += "" + d += "" d += "" d = format_text(d) @@ -531,12 +531,12 @@ L[A.name] = list(A, (C) ? C : O, list(alarmsource)) if (O) if (C && C.can_use()) - queueAlarm("--- [class] alarm detected in [A.name]! ([C.c_tag])", class) + queueAlarm("--- [class] alarm detected in [A.name]! ([C.c_tag])", class) else if (CL && CL.len) var/foo = 0 var/dat2 = "" for (var/obj/machinery/camera/I in CL) - dat2 += text("[][]", (!foo) ? "" : " | ", src, I, I.c_tag) //I'm not fixing this shit... + dat2 += text("[][]", (!foo) ? "" : " | ", I.c_tag) //I'm not fixing this shit... foo = 1 queueAlarm(text ("--- [] alarm detected in []! ([])", class, A.name, dat2), class) else @@ -828,7 +828,7 @@ raw_message = lang_treat(speaker, message_language, raw_message, spans, message_mode) var/start = "Relayed Speech: " var/namepart = "[speaker.GetVoice()][speaker.get_alt_name()]" - var/hrefpart = "" + var/hrefpart = "" var/jobpart if (iscarbon(speaker)) diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index 8429889ebd..8593eafc37 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -7,7 +7,7 @@ /mob/living/silicon/ai/compose_track_href(atom/movable/speaker, namepart) var/mob/M = speaker.GetSource() if(M) - return "" + return "" return "" /mob/living/silicon/ai/compose_job(atom/movable/speaker, message_langs, raw_message, radio_freq) @@ -85,7 +85,7 @@ var/index = 0 for(var/word in GLOB.vox_sounds) index++ - dat += "[capitalize(word)]" + dat += "[capitalize(word)]" if(index != GLOB.vox_sounds.len) dat += " / " diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index d70a12eb38..e21abfc6b2 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -278,11 +278,11 @@ /mob/living/silicon/pai/proc/softwareMenu() // Populate the right menu var/dat = "" - dat += "Refresh
    " + dat += "Refresh
    " // Built-in - dat += "Directives
    " - dat += "Radio Configuration
    " - dat += "Screen Display
    " + dat += "Directives
    " + dat += "Radio Configuration
    " + dat += "Screen Display
    " //dat += "Text Messaging
    " dat += "
    " @@ -290,42 +290,42 @@ dat += "Basic
    " for(var/s in software) if(s == "digital messenger") - dat += "Digital Messenger
    " + dat += "Digital Messenger
    " if(s == "crew manifest") - dat += "Crew Manifest
    " + dat += "Crew Manifest
    " if(s == "medical records") - dat += "Medical Records
    " + dat += "Medical Records
    " if(s == "security records") - dat += "Security Records
    " + dat += "Security Records
    " if(s == "camera") - dat += "Camera Jack
    " + dat += "Camera Jack
    " if(s == "remote signaller") - dat += "Remote Signaller
    " + dat += "Remote Signaller
    " dat += "
    " // Advanced dat += "Advanced
    " for(var/s in software) if(s == "atmosphere sensor") - dat += "Atmospheric Sensor
    " + dat += "Atmospheric Sensor
    " if(s == "heartbeat sensor") - dat += "Heartbeat Sensor
    " + dat += "Heartbeat Sensor
    " if(s == "security HUD") - dat += "Facial Recognition Suite[(secHUD) ? " On" : " Off"]
    " + dat += "Facial Recognition Suite[(secHUD) ? " On" : " Off"]
    " if(s == "medical HUD") - dat += "Medical Analysis Suite[(medHUD) ? " On" : " Off"]
    " + dat += "Medical Analysis Suite[(medHUD) ? " On" : " Off"]
    " if(s == "universal translator") var/translator_on = (flags_2 & OMNITONGUE_2) - dat += "Universal Translator[translator_on ? " On" : " Off"]
    " + dat += "Universal Translator[translator_on ? " On" : " Off"]
    " if(s == "projection array") - dat += "Projection Array
    " + dat += "Projection Array
    " if(s == "camera jack") - dat += "Camera Jack
    " + dat += "Camera Jack
    " if(s == "door jack") - dat += "Door Jack
    " + dat += "Door Jack
    " dat += "
    " dat += "
    " - dat += "Download additional software" + dat += "Download additional software" return dat @@ -341,7 +341,7 @@ if(!software.Find(s)) var/cost = available_software[s] var/displayName = uppertext(s) - dat += "[displayName] ([cost])
    " + dat += "[displayName] ([cost])
    " else var/displayName = lowertext(s) dat += "[displayName] (Download Complete)
    " @@ -354,7 +354,7 @@ dat += "[(master) ? "Your master: [master] ([master_dna])" : "You are bound to no one."]" dat += "

    " - dat += "Request carrier DNA sample
    " + dat += "Request carrier DNA sample
    " dat += "

    Directives


    " dat += "Prime Directive
    " dat += "     [laws.zeroth]
    " @@ -397,20 +397,20 @@ dat += "

    Remote Signaller



    " dat += {"Frequency/Code for signaler:
    Frequency: - - - - + - + - [format_frequency(sradio.frequency)] - + - +
    + + + +
    Code: - - - - + - + - [sradio.code] - + - +
    + + + +
    - Send Signal
    "} + Send Signal
    "} return dat // Crew Manifest @@ -429,7 +429,7 @@ . += "

    Medical Records


    " if(GLOB.data_core.general) for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) - . += "[R.fields["id"]]: [R.fields["name"]]
    " + . += "
    [R.fields["id"]]: [R.fields["name"]]
    " if(1) . += "
    Medical Record

    " if(medicalActive1 in GLOB.data_core.general) @@ -437,10 +437,10 @@ else . += "
    Requested medical record not found.

    " if(medicalActive2 in GLOB.data_core.medical) - . += "
    \n
    Medical Data

    \nBlood Type:
    [medicalActive2.fields["blood_type"]]
    \nDNA: [medicalActive2.fields["b_dna"]]
    \n
    \nMinor Disabilities: [medicalActive2.fields["mi_dis"]]
    \nDetails: [medicalActive2.fields["mi_dis_d"]]
    \n
    \nMajor Disabilities: [medicalActive2.fields["ma_dis"]]
    \nDetails: [medicalActive2.fields["ma_dis_d"]]
    \n
    \nAllergies: [medicalActive2.fields["alg"]]
    \nDetails: [medicalActive2.fields["alg_d"]]
    \n
    \nCurrent Diseases: [medicalActive2.fields["cdi"]] (per disease info placed in log/comment section)
    \nDetails: [medicalActive2.fields["cdi_d"]]
    \n
    \nImportant Notes:
    \n\t[medicalActive2.fields["notes"]]
    \n
    \n
    Comments/Log

    " + . += "
    \n
    Medical Data

    \nBlood Type: [medicalActive2.fields["blood_type"]]
    \nDNA: [medicalActive2.fields["b_dna"]]
    \n
    \nMinor Disabilities: [medicalActive2.fields["mi_dis"]]
    \nDetails: [medicalActive2.fields["mi_dis_d"]]
    \n
    \nMajor Disabilities: [medicalActive2.fields["ma_dis"]]
    \nDetails: [medicalActive2.fields["ma_dis_d"]]
    \n
    \nAllergies: [medicalActive2.fields["alg"]]
    \nDetails: [medicalActive2.fields["alg_d"]]
    \n
    \nCurrent Diseases: [medicalActive2.fields["cdi"]] (per disease info placed in log/comment section)
    \nDetails: [medicalActive2.fields["cdi_d"]]
    \n
    \nImportant Notes:
    \n\t[medicalActive2.fields["notes"]]
    \n
    \n
    Comments/Log

    " else . += "
    Requested medical record not found.

    " - . += "
    \nBack
    " + . += "
    \nBack
    " return . // Security Records @@ -451,18 +451,18 @@ . += "

    Security Records


    " if(GLOB.data_core.general) for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) - . += "[R.fields["id"]]: [R.fields["name"]]
    " + . += "
    [R.fields["id"]]: [R.fields["name"]]
    " if(1) . += "

    Security Record

    " if(securityActive1 in GLOB.data_core.general) - . += "Name:
    [securityActive1.fields["name"]] ID: [securityActive1.fields["id"]]
    \nSex: [securityActive1.fields["sex"]]
    \nAge: [securityActive1.fields["age"]]
    \nRank: [securityActive1.fields["rank"]]
    \nFingerprint: [securityActive1.fields["fingerprint"]]
    \nPhysical Status: [securityActive1.fields["p_stat"]]
    \nMental Status: [securityActive1.fields["m_stat"]]
    " + . += "Name: [securityActive1.fields["name"]] ID: [securityActive1.fields["id"]]
    \nSex: [securityActive1.fields["sex"]]
    \nAge: [securityActive1.fields["age"]]
    \nRank: [securityActive1.fields["rank"]]
    \nFingerprint: [securityActive1.fields["fingerprint"]]
    \nPhysical Status: [securityActive1.fields["p_stat"]]
    \nMental Status: [securityActive1.fields["m_stat"]]
    " else . += "
    Requested security record not found,

    " if(securityActive2 in GLOB.data_core.security) - . += "
    \nSecurity Data
    \nCriminal Status: [securityActive2.fields["criminal"]]
    \n
    \nMinor Crimes: [securityActive2.fields["mi_crim"]]
    \nDetails: [securityActive2.fields["mi_crim_d"]]
    \n
    \nMajor Crimes: [securityActive2.fields["ma_crim"]]
    \nDetails: [securityActive2.fields["ma_crim_d"]]
    \n
    \nImportant Notes:
    \n\t[securityActive2.fields["notes"]]
    \n
    \n
    Comments/Log

    " + . += "
    \nSecurity Data
    \nCriminal Status: [securityActive2.fields["criminal"]]
    \n
    \nMinor Crimes: [securityActive2.fields["mi_crim"]]
    \nDetails: [securityActive2.fields["mi_crim_d"]]
    \n
    \nMajor Crimes: [securityActive2.fields["ma_crim"]]
    \nDetails: [securityActive2.fields["ma_crim_d"]]
    \n
    \nImportant Notes:
    \n\t[securityActive2.fields["notes"]]
    \n
    \n
    Comments/Log

    " else . += "
    Requested security record not found,

    " - . += text("
    \nBack
    ", src) + . += "
    \nBack
    " return . // Universal Translator @@ -470,7 +470,7 @@ var/translator_on = (flags_2 & OMNITONGUE_2) . = {"

    Universal Translator


    When enabled, this device will permamently be able to speak and understand all known forms of communication.

    - The device is currently [translator_on ? "en" : "dis" ]abled.
    [translator_on ? "" : "Activate Translation Module
    "]"} + The device is currently [translator_on ? "en" : "dis" ]abled.
    [translator_on ? "" : "Activate Translation Module
    "]"} return . // Security HUD @@ -478,7 +478,7 @@ var/dat = {"

    Facial Recognition Suite


    When enabled, this package will scan all viewable faces and compare them against the known criminal database, providing real-time graphical data about any detected persons of interest.

    The package is currently [ (secHUD) ? "en" : "dis" ]abled.
    - Toggle Package
    + Toggle Package
    "} return dat @@ -490,9 +490,9 @@

    Visual Status Overlay


    When enabled, this package will scan all nearby crewmembers' vitals and provide real-time graphical data about their state of health.

    The suite is currently [ (medHUD) ? "en" : "dis" ]abled.
    - Toggle Suite
    + Toggle Suite

    - Host Bioscan
    + Host Bioscan
    "} if(subscreen == 1) dat += {"

    Medical Analysis Suite


    @@ -523,7 +523,7 @@ Stage: [D.stage]/[D.max_stages]
    Possible Cure: [D.cure_text]
    "} - dat += "Visual Status Overlay
    " + dat += "Visual Status Overlay
    " return dat // Atmospheric Scanner @@ -548,7 +548,7 @@ if(gas_level > 0.01) dat += "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_level*100)]%
    " dat += "Temperature: [round(environment.temperature-T0C)]°C
    " - dat += "Refresh Reading
    " + dat += "Refresh Reading
    " dat += "
    " return dat @@ -577,7 +577,7 @@ dat += "Cable status : " if(!cable) dat += "Retracted
    " - dat += "Extend Cable
    " + dat += "Extend Cable
    " return dat if(!cable.machine) dat += "Extended
    " @@ -591,10 +591,10 @@ // var/obj/machinery/airlock/door = machine if(!hackdoor) - dat += "Begin Airlock Jacking
    " + dat += "Begin Airlock Jacking
    " else dat += "Jack in progress... [hackprogress]% complete.
    " - dat += "Cancel Airlock Jack
    " + dat += "Cancel Airlock Jack
    " return dat // Door Jack - supporting proc @@ -611,16 +611,16 @@ /mob/living/silicon/pai/proc/pdamessage() var/dat = "

    Digital Messenger

    " - dat += {"Signal/Receiver Status: + dat += {"Signal/Receiver Status: [(pda.toff) ? "\[Off\]" : "\[On\]"]
    - Ringer Status: + Ringer Status: [(pda.silent) ? "\[Off\]" : "\[On\]"]

    "} dat += "
      " if(!pda.toff) for (var/obj/item/device/pda/P in sortNames(get_viewable_pdas())) if (P == pda) continue - dat += "
    • [P]" + dat += "
    • [P]" dat += "
    • " dat += "
    " dat += "

    " diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 96467be074..3e3e853ae7 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -882,13 +882,13 @@ return switch(notifytype) if(NEW_BORG) //New Cyborg - to_chat(connected_ai, "

    NOTICE - New cyborg connection detected: [name]
    ") + to_chat(connected_ai, "

    NOTICE - New cyborg connection detected: [name]
    ") if(NEW_MODULE) //New Module to_chat(connected_ai, "

    NOTICE - Cyborg module change detected: [name] has loaded the [designation] module.
    ") if(RENAME) //New Name to_chat(connected_ai, "

    NOTICE - Cyborg reclassification detected: [oldname] is now designated as [newname].
    ") if(AI_SHELL) //New Shell - to_chat(connected_ai, "

    NOTICE - New cyborg shell detected: [name]
    ") + to_chat(connected_ai, "

    NOTICE - New cyborg shell detected: [name]
    ") if(DISCONNECT) //Tampering with the wires to_chat(connected_ai, "

    NOTICE - Remote telemetry lost with [name].
    ") diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 4178438571..f3e7baa0d9 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -14,7 +14,7 @@ for(var/mob/M in GLOB.player_list) if(M.binarycheck()) if(isAI(M)) - var/renderedAI = "Robotic Talk, [name] ([desig]) [message_a]" + var/renderedAI = "Robotic Talk, [name] ([desig]) [message_a]" to_chat(M, renderedAI) else to_chat(M, rendered) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 527474a0f3..fa8447885d 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -110,7 +110,7 @@ if(alarm_types_show["Camera"]) msg += "CAMERA: [alarm_types_show["Camera"]] alarms detected. - " - msg += "\[Show Alerts\]" + msg += "\[Show Alerts\]" to_chat(src, msg) if(alarms_to_clear.len < 3) @@ -135,7 +135,7 @@ if(alarm_types_show["Camera"]) msg += "CAMERA: [alarm_types_clear["Camera"]] alarms cleared. - " - msg += "\[Show Alerts\]" + msg += "\[Show Alerts\]" to_chat(src, msg) @@ -253,12 +253,12 @@ for(var/index = 1, index <= src.laws.devillaws.len, index++) if (!src.devillawcheck[index]) src.devillawcheck[index] = "No" - list += {"[src.devillawcheck[index]] 666: [src.laws.devillaws[index]]
    "} + list += {"[src.devillawcheck[index]] 666: [src.laws.devillaws[index]]
    "} if (src.laws.zeroth) if (!src.lawcheck[1]) src.lawcheck[1] = "No" //Given Law 0's usual nature, it defaults to NOT getting reported. --NeoFite - list += {"[src.lawcheck[1]] 0: [src.laws.zeroth]
    "} + list += {"[src.lawcheck[1]] 0: [src.laws.zeroth]
    "} for (var/index = 1, index <= src.laws.ion.len, index++) var/law = src.laws.ion[index] @@ -266,7 +266,7 @@ if (length(law) > 0) if (!src.ioncheck[index]) src.ioncheck[index] = "Yes" - list += {"[src.ioncheck[index]] [ionnum()]: [law]
    "} + list += {"[src.ioncheck[index]] [ionnum()]: [law]
    "} src.ioncheck.len += 1 var/number = 1 @@ -278,7 +278,7 @@ if (!src.lawcheck[number+1]) src.lawcheck[number+1] = "Yes" - list += {"[src.lawcheck[number+1]] [number]: [law]
    "} + list += {"[src.lawcheck[number+1]] [number]: [law]
    "} number++ for (var/index = 1, index <= src.laws.supplied.len, index++) @@ -287,9 +287,9 @@ src.lawcheck.len += 1 if (!src.lawcheck[number+1]) src.lawcheck[number+1] = "Yes" - list += {"[src.lawcheck[number+1]] [number]: [law]
    "} + list += {"[src.lawcheck[number+1]] [number]: [law]
    "} number++ - list += {"

    State Laws"} + list += {"

    State Laws"} usr << browse(list, "window=laws") diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 299fa25226..5d943bc1e5 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -817,9 +817,9 @@ Pass a positive integer as an argument to override a bot's default speed. var/hack if(issilicon(user) || IsAdminGhost(user)) //Allows silicons or admins to toggle the emag status of a bot. hack += "[emagged == 2 ? "Software compromised! Unit may exhibit dangerous or erratic behavior." : "Unit operating normally. Release safety lock?"]
    " - hack += "Harm Prevention Safety System: [emagged ? "DANGER" : "Engaged"]
    " + hack += "Harm Prevention Safety System: [emagged ? "DANGER" : "Engaged"]
    " else if(!locked) //Humans with access can use this option to hide a bot from the AI's remote control panel and PDA control. - hack += "Remote network control radio: [remote_disabled ? "Disconnected" : "Connected"]
    " + hack += "Remote network control radio: [remote_disabled ? "Disconnected" : "Connected"]
    " return hack /mob/living/simple_animal/bot/proc/showpai(mob/user) @@ -829,9 +829,9 @@ Pass a positive integer as an argument to override a bot's default speed. eject += "Personality card status: " if(paicard) if(client) - eject += "Active" + eject += "Active" else - eject += "Inactive" + eject += "Inactive" else if(!allow_pai || key) eject += "Unavailable" else diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 18c4dcd40c..61c34b0466 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -278,14 +278,14 @@ dat += hack(user) dat += showpai(user) dat += text({" -Status: [on ? "On" : "Off"]
    +Status: [on ? "On" : "Off"]
    Behaviour controls are [locked ? "locked" : "unlocked"]
    Maintenance panel panel is [open ? "opened" : "closed"]"}) if(!locked || issilicon(user)|| IsAdminGhost(user)) - dat += "
    Clean Blood: [blood ? "Yes" : "No"]" - dat += "
    Clean Trash: [trash ? "Yes" : "No"]" - dat += "
    Exterminate Pests: [pests ? "Yes" : "No"]" - dat += "

    Patrol Station: [auto_patrol ? "Yes" : "No"]" + dat += "
    Clean Blood: [blood ? "Yes" : "No"]" + dat += "
    Clean Trash: [trash ? "Yes" : "No"]" + dat += "
    Exterminate Pests: [pests ? "Yes" : "No"]" + dat += "

    Patrol Station: [auto_patrol ? "Yes" : "No"]" return dat /mob/living/simple_animal/bot/cleanbot/Topic(href, href_list) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index ddf4c93559..f2b30a0a3c 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -103,7 +103,7 @@ Status: []
    Behaviour controls are [locked ? "locked" : "unlocked"]
    Maintenance panel panel is [open ? "opened" : "closed"]
    "}, -"[on ? "On" : "Off"]" ) +"[on ? "On" : "Off"]" ) if(!locked || issilicon(user)|| IsAdminGhost(user)) if(!lasercolor) @@ -116,12 +116,12 @@ Operating Mode: []
    Report Arrests[]
    Auto Patrol[]"}, -"[idcheck ? "Yes" : "No"]", -"[weaponscheck ? "Yes" : "No"]", -"[check_records ? "Yes" : "No"]", -"[arrest_type ? "Detain" : "Arrest"]", -"[declare_arrests ? "Yes" : "No"]", -"[auto_patrol ? "On" : "Off"]" ) +"[idcheck ? "Yes" : "No"]", +"[weaponscheck ? "Yes" : "No"]", +"[check_records ? "Yes" : "No"]", +"[arrest_type ? "Detain" : "Arrest"]", +"[declare_arrests ? "Yes" : "No"]", +"[auto_patrol ? "On" : "Off"]" ) return dat diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 1c3adb1dfe..f76042ab69 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -74,28 +74,28 @@ dat += hack(user) dat += showpai(user) dat += "Floor Repairer Controls v1.1

    " - dat += "Status: [on ? "On" : "Off"]
    " + dat += "Status: [on ? "On" : "Off"]
    " dat += "Maintenance panel panel is [open ? "opened" : "closed"]
    " dat += "Special tiles: " if(specialtiles) - dat += "Loaded \[[specialtiles]/[maxtiles]\]
    " + dat += "Loaded \[[specialtiles]/[maxtiles]\]
    " else dat += "None Loaded
    " dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
    " if(!locked || issilicon(user) || IsAdminGhost(user)) - dat += "Add tiles to new hull plating: [autotile ? "Yes" : "No"]
    " - dat += "Place floor tiles: [placetiles ? "Yes" : "No"]
    " - dat += "Replace existing floor tiles with custom tiles: [replacetiles ? "Yes" : "No"]
    " - dat += "Repair damaged tiles and platings: [fixfloors ? "Yes" : "No"]
    " - dat += "Traction Magnets: [anchored ? "Engaged" : "Disengaged"]
    " - dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
    " + dat += "Add tiles to new hull plating: [autotile ? "Yes" : "No"]
    " + dat += "Place floor tiles: [placetiles ? "Yes" : "No"]
    " + dat += "Replace existing floor tiles with custom tiles: [replacetiles ? "Yes" : "No"]
    " + dat += "Repair damaged tiles and platings: [fixfloors ? "Yes" : "No"]
    " + dat += "Traction Magnets: [anchored ? "Engaged" : "Disengaged"]
    " + dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
    " var/bmode if(targetdirection) bmode = dir2text(targetdirection) else bmode = "disabled" - dat += "Line Mode : [bmode]
    " + dat += "Line Mode : [bmode]
    " return dat diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 04a83647ed..f41a6138cb 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -89,12 +89,12 @@ Status: []
    Behaviour controls are [locked ? "locked" : "unlocked"]
    Maintenance panel panel is [open ? "opened" : "closed"]"}, -"[on ? "On" : "Off"]" ) +"[on ? "On" : "Off"]" ) if(!locked || issilicon(user) || IsAdminGhost(user)) dat += text({"
    Auto Patrol: []"}, -"[auto_patrol ? "On" : "Off"]" ) +"[auto_patrol ? "On" : "Off"]" ) return dat /mob/living/simple_animal/bot/honkbot/proc/judgement_criteria() diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 7e9ef07a94..a33cee8d2d 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -136,37 +136,37 @@ dat += hack(user) dat += showpai(user) dat += "Medical Unit Controls v1.1

    " - dat += "Status: [on ? "On" : "Off"]
    " + dat += "Status: [on ? "On" : "Off"]
    " dat += "Maintenance panel panel is [open ? "opened" : "closed"]
    " dat += "Beaker: " if(reagent_glass) - dat += "Loaded \[[reagent_glass.reagents.total_volume]/[reagent_glass.reagents.maximum_volume]\]" + dat += "Loaded \[[reagent_glass.reagents.total_volume]/[reagent_glass.reagents.maximum_volume]\]" else dat += "None Loaded" dat += "
    Behaviour controls are [locked ? "locked" : "unlocked"]
    " if(!locked || issilicon(user) || IsAdminGhost(user)) dat += "Healing Threshold: " - dat += "-- " - dat += "- " + dat += "-- " + dat += "- " dat += "[heal_threshold] " - dat += "+ " - dat += "++" + dat += "+ " + dat += "++" dat += "
    " dat += "Injection Level: " - dat += "- " + dat += "- " dat += "[injection_amount] " - dat += "+ " + dat += "+ " dat += "
    " dat += "Reagent Source: " - dat += "[use_beaker ? "Loaded Beaker (When available)" : "Internal Synthesizer"]
    " + dat += "[use_beaker ? "Loaded Beaker (When available)" : "Internal Synthesizer"]
    " - dat += "Treat Viral Infections: [treat_virus ? "Yes" : "No"]
    " - dat += "The speaker switch is [shut_up ? "off" : "on"]. Toggle
    " - dat += "Critical Patient Alerts: [declare_crit ? "Yes" : "No"]
    " - dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
    " - dat += "Stationary Mode: [stationary_mode ? "Yes" : "No"]
    " + dat += "Treat Viral Infections: [treat_virus ? "Yes" : "No"]
    " + dat += "The speaker switch is [shut_up ? "off" : "on"]. Toggle
    " + dat += "Critical Patient Alerts: [declare_crit ? "Yes" : "No"]
    " + dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
    " + dat += "Stationary Mode: [stationary_mode ? "Yes" : "No"]
    " return dat diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index d8fcfd9344..b602e19125 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -282,22 +282,22 @@ dat += "Power level: [cell ? cell.percent() : 0]%" if(locked && !ai && !IsAdminGhost(user)) - dat += " 
    Controls are locked
    Unlock Controls" + dat += " 
    Controls are locked
    Unlock Controls" else - dat += " 
    Controls are unlocked
    Lock Controls

    " + dat += " 
    Controls are unlocked
    Lock Controls

    " - dat += "Toggle Power
    " - dat += "Stop
    " - dat += "Proceed
    " - dat += "Return to Home
    " - dat += "Set Destination
    " - dat += "Set Bot ID
    " - dat += "Set Home
    " - dat += "Toggle Auto Return Home ([auto_return ? "On":"Off"])
    " - dat += "Toggle Auto Pickup Crate ([auto_pickup ? "On":"Off"])
    " - dat += "Toggle Delivery Reporting ([report_delivery ? "On" : "Off"])
    " + dat += "Toggle Power
    " + dat += "Stop
    " + dat += "Proceed
    " + dat += "Return to Home
    " + dat += "Set Destination
    " + dat += "Set Bot ID
    " + dat += "Set Home
    " + dat += "Toggle Auto Return Home ([auto_return ? "On":"Off"])
    " + dat += "Toggle Auto Pickup Crate ([auto_pickup ? "On":"Off"])
    " + dat += "Toggle Delivery Reporting ([report_delivery ? "On" : "Off"])
    " if(load) - dat += "Unload Now
    " + dat += "Unload Now
    " dat += "
    The maintenance hatch is closed.
    " return dat diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 772604a527..4300746901 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -105,7 +105,7 @@ Status: []
    Behaviour controls are [locked ? "locked" : "unlocked"]
    Maintenance panel panel is [open ? "opened" : "closed"]"}, -"[on ? "On" : "Off"]" ) +"[on ? "On" : "Off"]" ) if(!locked || issilicon(user) || IsAdminGhost(user)) dat += text({"
    @@ -116,12 +116,12 @@ Operating Mode: []
    Report Arrests[]
    Auto Patrol: []"}, -"[idcheck ? "Yes" : "No"]", -"[weaponscheck ? "Yes" : "No"]", -"[check_records ? "Yes" : "No"]", -"[arrest_type ? "Detain" : "Arrest"]", -"[declare_arrests ? "Yes" : "No"]", -"[auto_patrol ? "On" : "Off"]" ) +"[idcheck ? "Yes" : "No"]", +"[weaponscheck ? "Yes" : "No"]", +"[check_records ? "Yes" : "No"]", +"[arrest_type ? "Detain" : "Arrest"]", +"[declare_arrests ? "Yes" : "No"]", +"[auto_patrol ? "On" : "Off"]" ) return dat diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 5e8a875dce..2a94052274 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -68,13 +68,13 @@ var/dat = "
    Inventory of [name]

    " if(inventory_head) - dat += "
    Head: [inventory_head] (Remove)" + dat += "
    Head: [inventory_head] (Remove)" else - dat += "
    Head: Nothing" + dat += "
    Head: Nothing" if(inventory_back) - dat += "
    Back: [inventory_back] (Remove)" + dat += "
    Back: [inventory_back] (Remove)" else - dat += "
    Back: Nothing" + dat += "
    Back: Nothing" user << browse(dat, text("window=mob[];size=325x500", real_name)) onclose(user, "mob[real_name]") 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 a214895b83..67c9fd21ed 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -579,7 +579,7 @@ Difficulty: Very Hard if(..() && !ready_to_deploy) GLOB.poi_list |= src ready_to_deploy = TRUE - notify_ghosts("An anomalous crystal has been activated in [get_area(src)]! This crystal can always be used by ghosts hereafter.", enter_link = "(Click to enter)", ghost_sound = 'sound/effects/ghost2.ogg', source = src, action = NOTIFY_ATTACK) + notify_ghosts("An anomalous crystal has been activated in [get_area(src)]! This crystal can always be used by ghosts hereafter.", enter_link = "(Click to enter)", ghost_sound = 'sound/effects/ghost2.ogg', source = src, action = NOTIFY_ATTACK) /obj/machinery/anomalous_crystal/helpers/attack_ghost(mob/dead/observer/user) ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index edcf1a0f73..83291d7822 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -127,7 +127,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca if(owner != creator) LoseTarget() creator = owner - faction |= "\ref[owner]" + faction |= "[REF(owner)]" /mob/living/simple_animal/hostile/mimic/copy/proc/CheckObject(obj/O) if((isitem(O) || isstructure(O)) && !is_type_in_list(O, GLOB.protected_objects)) @@ -160,7 +160,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca maxHealth = health if(user) creator = user - faction += "\ref[creator]" // very unique + faction += "[REF(creator)]" // very unique if(destroy_original) qdel(O) return 1 diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 085a95540f..6ff04231af 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -187,9 +187,9 @@ user.set_machine(src) var/dat = "

    Inventory of [name]

    " if(ears) - dat += "
    Headset: [ears] (Remove)" + dat += "
    Headset: [ears] (Remove)" else - dat += "
    Headset: Nothing" + dat += "
    Headset: Nothing" user << browse(dat, "window=mob[real_name];size=325x500") onclose(user, "mob[real_name]") diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ddd1d3e2dc..37dd143e96 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1,3 +1,6 @@ +/mob + use_tag = TRUE + /mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game. GLOB.mob_list -= src GLOB.dead_mob_list -= src @@ -540,7 +543,7 @@ if(Adjacent(usr)) show_inv(usr) else - usr << browse(null,"window=mob\ref[src]") + usr << browse(null,"window=mob[REF(src)]") // The src mob is trying to strip an item from someone // Defined in living.dm @@ -831,10 +834,10 @@ if(exact_match) //if we need an exact match, we need to do some bullfuckery. var/list/faction_src = faction.Copy() var/list/faction_target = target.faction.Copy() - if(!("\ref[src]" in faction_target)) //if they don't have our ref faction, remove it from our factions list. - faction_src -= "\ref[src]" //if we don't do this, we'll never have an exact match. - if(!("\ref[target]" in faction_src)) - faction_target -= "\ref[target]" //same thing here. + if(!("[REF(src)]" in faction_target)) //if they don't have our ref faction, remove it from our factions list. + faction_src -= "[REF(src)]" //if we don't do this, we'll never have an exact match. + if(!("[REF(target)]" in faction_src)) + faction_target -= "[REF(target)]" //same thing here. return faction_check(faction_src, faction_target, TRUE) return faction_check(faction, target.faction, FALSE) @@ -973,18 +976,18 @@ /mob/vv_get_dropdown() . = ..() . += "---" - .["Gib"] = "?_src_=vars;[HrefToken()];gib=\ref[src]" - .["Give Spell"] = "?_src_=vars;[HrefToken()];give_spell=\ref[src]" - .["Remove Spell"] = "?_src_=vars;[HrefToken()];remove_spell=\ref[src]" - .["Give Disease"] = "?_src_=vars;[HrefToken()];give_disease=\ref[src]" - .["Toggle Godmode"] = "?_src_=vars;[HrefToken()];godmode=\ref[src]" - .["Drop Everything"] = "?_src_=vars;[HrefToken()];drop_everything=\ref[src]" - .["Regenerate Icons"] = "?_src_=vars;[HrefToken()];regenerateicons=\ref[src]" - .["Make Space Ninja"] = "?_src_=vars;[HrefToken()];ninja=\ref[src]" - .["Show player panel"] = "?_src_=vars;[HrefToken()];mob_player_panel=\ref[src]" - .["Toggle Build Mode"] = "?_src_=vars;[HrefToken()];build_mode=\ref[src]" - .["Assume Direct Control"] = "?_src_=vars;[HrefToken()];direct_control=\ref[src]" - .["Offer Control to Ghosts"] = "?_src_=vars;[HrefToken()];offer_control=\ref[src]" + .["Gib"] = "?_src_=vars;[HrefToken()];gib=[REF(src)]" + .["Give Spell"] = "?_src_=vars;[HrefToken()];give_spell=[REF(src)]" + .["Remove Spell"] = "?_src_=vars;[HrefToken()];remove_spell=[REF(src)]" + .["Give Disease"] = "?_src_=vars;[HrefToken()];give_disease=[REF(src)]" + .["Toggle Godmode"] = "?_src_=vars;[HrefToken()];godmode=[REF(src)]" + .["Drop Everything"] = "?_src_=vars;[HrefToken()];drop_everything=[REF(src)]" + .["Regenerate Icons"] = "?_src_=vars;[HrefToken()];regenerateicons=[REF(src)]" + .["Make Space Ninja"] = "?_src_=vars;[HrefToken()];ninja=[REF(src)]" + .["Show player panel"] = "?_src_=vars;[HrefToken()];mob_player_panel=[REF(src)]" + .["Toggle Build Mode"] = "?_src_=vars;[HrefToken()];build_mode=[REF(src)]" + .["Assume Direct Control"] = "?_src_=vars;[HrefToken()];direct_control=[REF(src)]" + .["Offer Control to Ghosts"] = "?_src_=vars;[HrefToken()];offer_control=[REF(src)]" /mob/vv_get_var(var_name) switch(var_name) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index af12b87eec..2b397e4eda 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -398,7 +398,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp if(flashwindow) window_flash(O.client) if(source) - var/obj/screen/alert/notify_action/A = O.throw_alert("\ref[source]_notify_action", /obj/screen/alert/notify_action) + var/obj/screen/alert/notify_action/A = O.throw_alert("[REF(source)]_notify_action", /obj/screen/alert/notify_action) if(A) if(O.client.prefs && O.client.prefs.UI_style) A.icon = ui_style2icon(O.client.prefs.UI_style) diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index 0562bf700d..88f322328f 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -331,7 +331,7 @@ "desc_close" = status_close["desc"]))) data["slots"] = pos - data["src"] = "\ref[src]" + data["src"] = "[REF(src)]" data["station_name"] = station_name() diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index f56a1a3f1b..0c1ae987cf 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/item/clipboard name = "clipboard" icon = 'icons/obj/bureaucracy.dmi' @@ -120,3 +121,127 @@ //Update everything attack_self(usr) update_icon() +======= +/obj/item/clipboard + name = "clipboard" + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "clipboard" + item_state = "clipboard" + throwforce = 0 + w_class = WEIGHT_CLASS_SMALL + throw_speed = 3 + throw_range = 7 + var/obj/item/pen/haspen //The stored pen. + var/obj/item/paper/toppaper //The topmost piece of paper. + slot_flags = SLOT_BELT + resistance_flags = FLAMMABLE + +/obj/item/clipboard/Initialize() + update_icon() + . = ..() + +/obj/item/clipboard/Destroy() + QDEL_NULL(haspen) + QDEL_NULL(toppaper) //let movable/Destroy handle the rest + return ..() + +/obj/item/clipboard/update_icon() + cut_overlays() + if(toppaper) + add_overlay(toppaper.icon_state) + copy_overlays(toppaper) + if(haspen) + add_overlay("clipboard_pen") + add_overlay("clipboard_over") + + +/obj/item/clipboard/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/paper)) + if(!user.transferItemToLoc(W, src)) + return + toppaper = W + to_chat(user, "You clip the paper onto \the [src].") + update_icon() + else if(toppaper) + toppaper.attackby(user.get_active_held_item(), user) + update_icon() + + +/obj/item/clipboard/attack_self(mob/user) + var/dat = "Clipboard" + if(haspen) + dat += "Remove Pen


    " + else + dat += "Add Pen

    " + + //The topmost paper. You can't organise contents directly in byond, so this is what we're stuck with. -Pete + if(toppaper) + var/obj/item/paper/P = toppaper + dat += "Write Remove - [P.name]

    " + + for(P in src) + if(P == toppaper) + continue + dat += "Write Remove Move to top - [P.name]
    " + user << browse(dat, "window=clipboard") + onclose(user, "clipboard") + add_fingerprint(usr) + + +/obj/item/clipboard/Topic(href, href_list) + ..() + if(usr.stat || usr.restrained()) + return + + if(usr.contents.Find(src)) + + if(href_list["pen"]) + if(haspen) + haspen.loc = usr.loc + usr.put_in_hands(haspen) + haspen = null + + if(href_list["addpen"]) + if(!haspen) + var/obj/item/held = usr.get_active_held_item() + if(istype(held, /obj/item/pen)) + var/obj/item/pen/W = held + if(!usr.transferItemToLoc(W, src)) + return + haspen = W + to_chat(usr, "You slot [W] into [src].") + + if(href_list["write"]) + var/obj/item/P = locate(href_list["write"]) + if(istype(P) && P.loc == src) + if(usr.get_active_held_item()) + P.attackby(usr.get_active_held_item(), usr) + + if(href_list["remove"]) + var/obj/item/P = locate(href_list["remove"]) + if(istype(P) && P.loc == src) + P.loc = usr.loc + usr.put_in_hands(P) + if(P == toppaper) + toppaper = null + var/obj/item/paper/newtop = locate(/obj/item/paper) in src + if(newtop && (newtop != P)) + toppaper = newtop + else + toppaper = null + + if(href_list["read"]) + var/obj/item/paper/P = locate(href_list["read"]) + if(istype(P) && P.loc == src) + usr.examinate(P) + + if(href_list["top"]) + var/obj/item/P = locate(href_list["top"]) + if(istype(P) && P.loc == src) + toppaper = P + to_chat(usr, "You move [P.name] to the top.") + + //Update everything + attack_self(usr) + update_icon() +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index f9d0faa16e..72dce2b8d2 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -76,7 +76,7 @@ var/i for(i=contents.len, i>=1, i--) var/obj/item/P = contents[i] - dat += "
    " + dat += "" dat += "

    Name

    Status

    Location

    Control

    [bot_mode][bot_area.name]InterfaceCallInterfaceCall
    [P.name]
    [P.name]
    " user << browse("[name][dat]", "window=filingcabinet;size=350x300") diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index d8d4fef0f8..3221a2c8db 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -46,7 +46,7 @@ var/dat = "[name]" for(var/obj/item/I in src) - dat += "Remove - [I.name]
    " + dat += "Remove - [I.name]
    " user << browse(dat, "window=folder") onclose(user, "folder") add_fingerprint(usr) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index ae6751f526..1fb1846f4c 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -175,8 +175,8 @@ /obj/item/paper/proc/updateinfolinks() info_links = info for(var/i in 1 to min(fields, 15)) - addtofield(i, "write", 1) - info_links = info_links + "write" + addtofield(i, "write", 1) + info_links = info_links + "write" /obj/item/paper/proc/clearpaper() @@ -277,7 +277,7 @@ else info += t // Oh, he wants to edit to the end of the file, let him. updateinfolinks() - usr << browse("[name][info_links]
    [stamps]", "window=[name]") // Update the window + usr << browse("[name][info_links]
    [stamps]", "window=[name]") // Update the window update_icon() @@ -292,7 +292,7 @@ if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon)) if(user.is_literate()) - user << browse("[name][info_links]
    [stamps]", "window=[name]") + user << browse("[name][info_links]
    [stamps]", "window=[name]") return else to_chat(user, "You don't know how to read or write.") diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index d4e78c4ef3..20038f5745 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -41,18 +41,18 @@ var/dat = "Photocopier

    " if(copy || photocopy || doccopy || (ass && (ass.loc == src.loc))) - dat += "Remove Paper
    " + dat += "Remove Paper
    " if(toner) - dat += "Copy
    " + dat += "Copy
    " dat += "Printing: [copies] copies." - dat += "- " - dat += "+

    " + dat += "- " + dat += "+

    " if(photocopy) - dat += "Printing in [greytoggle]

    " + dat += "Printing in [greytoggle]

    " else if(toner) dat += "Please insert paper to copy.

    " if(isAI(user)) - dat += "Print photo from database

    " + dat += "Print photo from database

    " dat += "Current toner level: [toner]" if(!toner) dat +="
    Please insert a new toner cartridge!" diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm index 29e7b53cd2..a37344d635 100644 --- a/code/modules/power/antimatter/control.dm +++ b/code/modules/power/antimatter/control.dm @@ -293,28 +293,28 @@ var/dat = "" dat += "AntiMatter Control Panel
    " - dat += "Close
    " - dat += "Refresh
    " - dat += "Force Shielding Update

    " + dat += "Close
    " + dat += "Refresh
    " + dat += "Force Shielding Update

    " dat += "Status: [(active?"Injecting":"Standby")]
    " - dat += "Toggle Status
    " + dat += "Toggle Status
    " dat += "Stability: [stability]%
    " dat += "Reactor parts: [linked_shielding.len]
    "//TODO: perhaps add some sort of stability check dat += "Cores: [linked_cores.len]

    " dat += "-Current Efficiency: [reported_core_efficiency]
    " - dat += "-Average Stability: [stored_core_stability] (update)
    " + dat += "-Average Stability: [stored_core_stability] (update)
    " dat += "Last Produced: [DisplayPower(stored_power)]
    " dat += "Fuel: " if(!fueljar) dat += "
    No fuel receptacle detected." else - dat += "Eject
    " + dat += "Eject
    " dat += "- [fueljar.fuel]/[fueljar.fuel_max] Units
    " dat += "- Injecting: [fuel_injection] units
    " - dat += "- --|++

    " + dat += "- --|++

    " user << browse(dat, "window=AMcontrol;size=420x500") diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 6aeaff9477..5369686b31 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -166,7 +166,7 @@ else t += "Unable to locate all parts!" if(include_link) - t += "
    Close" + t += "
    Close" return t diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index b98ea7f6c9..e19f152a75 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -233,9 +233,9 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne return var/dat = "Gravity Generator Breaker: " if(breaker) - dat += "ON OFF" + dat += "ON OFF" else - dat += "ON OFF " + dat += "ON OFF " dat += "
    Generator Status:
    " if(charging_state != POWER_IDLE) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 6031f6edab..73f48a2b28 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -235,16 +235,16 @@ var/dat = text("[name]
    ") if (active) - dat += text("Generator: On
    ") + dat += text("Generator: On
    ") else - dat += text("Generator: Off
    ") - dat += text("[capitalize(sheet_name)]: [sheets] - Eject
    ") + dat += text("Generator: Off
    ") + dat += text("[capitalize(sheet_name)]: [sheets] - Eject
    ") var/stack_percent = round(sheet_left * 100, 1) dat += text("Current stack: [stack_percent]%
    ") - dat += text("Power output: - [power_gen * power_output] +
    ") + dat += text("Power output: - [power_gen * power_output] +
    ") dat += text("Power current: [(powernet == null ? "Unconnected" : "[DisplayPower(avail())]")]
    ") dat += text("Heat: [current_heat]
    ") - dat += "
    Close" + dat += "
    Close" user << browse(dat, "window=port_gen") onclose(user, "port_gen") diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index dd98f092ea..266e5b22f5 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -232,11 +232,11 @@ user.set_machine(src) var/dat = "" - dat += "Close

    " + dat += "Close

    " dat += "

    Status

    " if(!assembled) dat += "Unable to detect all parts!
    " - dat += "Run Scan

    " + dat += "Run Scan

    " else dat += "All parts in place.

    " dat += "Power:" @@ -244,9 +244,9 @@ dat += "On
    " else dat += "Off
    " - dat += "Toggle Power

    " + dat += "Toggle Power

    " dat += "Particle Strength: [strength] " - dat += "--|++

    " + dat += "--|++

    " var/datum/browser/popup = new(user, "pacontrol", name, 420, 300) popup.set_content(dat) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index ee531697aa..76145466da 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -276,9 +276,9 @@ t += "Turbine: [round(compressor.rpm)] RPM
    " - t += "Starter: [ compressor.starter ? "Off On" : "Off On"]" + t += "Starter: [ compressor.starter ? "Off On" : "Off On"]" - t += "
    Close" + t += "
    Close" t += "" var/datum/browser/popup = new(user, "turbine", name) @@ -334,18 +334,18 @@ if(compressor.stat || compressor.turbine.stat) dat += "[compressor.stat ? "Compressor is inoperable
    " : "Turbine is inoperable"]" else - dat += {"Turbine status: [ src.compressor.starter ? "Off On" : "Off On"] + dat += {"Turbine status: [ src.compressor.starter ? "Off On" : "Off On"] \n
    \nTurbine speed: [src.compressor.rpm]rpm
    \nPower currently being generated: [DisplayPower(src.compressor.turbine.lastgen)]
    \nInternal gas temperature: [src.compressor.gas_contained.temperature]K
    - \n
    Close + \n
    Close \n
    \n"} else dat += "There is [!compressor ? "no compressor" : " compressor[!compressor.turbine ? " but no turbine" : ""]"].
    " if(!compressor) - dat += "Search for compressor" + dat += "Search for compressor" var/datum/browser/popup = new(user, "turbinecomputer", name) popup.set_content(dat) diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 57960fcea7..3037d8690c 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -307,7 +307,7 @@ var/mob/living/simple_animal/hostile/statue/S = new(P.loc, owner) S.name = "statue of [L.name]" if(owner) - S.faction = list("\ref[owner]") + S.faction = list("[REF(owner)]") S.icon = P.icon S.icon_state = P.icon_state S.copy_overlays(P, TRUE) diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index eb1ee87df9..77fcd50306 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -248,14 +248,14 @@ "} if (is_beaker_ready) if(!is_chamber_empty && !(stat & (NOPOWER|BROKEN))) - dat += "Grind the reagents
    " - dat += "Juice the reagents

    " + dat += "Grind the reagents
    " + dat += "Juice the reagents

    " else if (beaker.reagents.total_volume) - dat += "Mix the reagents

    " + dat += "Mix the reagents

    " if(length(holdingitems)) - dat += "Eject the reagents
    " + dat += "Eject the reagents
    " if(beaker) - dat += "Detach the beaker
    " + dat += "Detach the beaker
    " else dat += "Please wait..." diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 428c10e24a..aaa070703f 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -37,7 +37,7 @@ var/turf/T = get_turf(A) var/area/my_area = get_area(T) var/message = "A [reaction_name] reaction has occurred in [my_area.name] [ADMIN_COORDJMP(T)]" - message += " (VV)" + message += " (VV)" var/mob/M = get(A, /mob) if(M) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index bb18ea187c..0bafcba54d 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -154,7 +154,7 @@ dat += "" for (var/i = 1, i <= GLOB.TAGGERLOCATIONS.len, i++) - dat += "" + dat += "" if(i%4==0) dat += "" diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 4ba8925df6..4cf711bbee 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -138,7 +138,7 @@ user.set_machine(src) var/dat = "
    " if(!linked_console) - dat += "Scan for R&D Console
    " + dat += "Scan for R&D Console
    " if(loaded_item) dat += "Loaded Item: [loaded_item]
    " dat += "Technology:
    " @@ -146,19 +146,19 @@ for(var/T in D) dat += "[T]
    " dat += "

    Available tests:" - dat += "
    Poke" - dat += "
    Irradiate" - dat += "
    Gas" - dat += "
    Burn" - dat += "
    Freeze" - dat += "
    Destroy
    " + dat += "
    Poke" + dat += "
    Irradiate" + dat += "
    Gas" + dat += "
    Burn" + dat += "
    Freeze" + dat += "
    Destroy
    " if(istype(loaded_item, /obj/item/relic)) - dat += "
    Discover
    " - dat += "
    Eject" + dat += "
    Discover
    " + dat += "
    Eject" else dat += "Nothing loaded." - dat += "
    Refresh
    " - dat += "
    Close
    " + dat += "
    Refresh
    " + dat += "
    Close
    " var/datum/browser/popup = new(user, "experimentor","Experimentor", 700, 400, src) popup.set_content(dat) popup.open() diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 0cef65c07c..295dd4429a 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -19,7 +19,7 @@ GLOBAL_LIST_INIT(message_servers, list()) /datum/data_pda_msg/proc/get_photo_ref() if(photo) - return "(Photo)" + return "(Photo)" return "" /datum/data_pda_msg/Topic(href,href_list) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index d912bc908e..e02eb4a970 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -662,7 +662,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(0.2) dat += "
    SYSTEM LOCKED
    " - dat += "Unlock" + dat += "Unlock" if(0.3) dat += "
    Constructing Prototype. Please Wait...
    " @@ -673,30 +673,30 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(1.0) //Main Menu dat += "
    " dat += "

    Main Menu:


    " - dat += "Current Research Levels
    " + dat += "Current Research Levels
    " if(t_disk) - dat += "Disk Operations
    " + dat += "Disk Operations
    " else if(d_disk) - dat += "Disk Operations
    " + dat += "Disk Operations
    " else dat += "Disk Operations
    " if(linked_destroy) - dat += "Destructive Analyzer Menu
    " + dat += "Destructive Analyzer Menu
    " else dat += "Destructive Analyzer Menu
    " if(linked_lathe) - dat += "Protolathe Construction Menu
    " + dat += "Protolathe Construction Menu
    " else dat += "Protolathe Construction Menu
    " if(linked_imprinter) - dat += "Circuit Construction Menu
    " + dat += "Circuit Construction Menu
    " else dat += "Circuit Construction Menu
    " - dat += "Settings" + dat += "Settings" dat += "
    " if(1.1) //Research viewer - dat += "Main Menu" + dat += "Main Menu" dat += "

    Current Research Levels:


    " for(var/v in files.known_tech) var/datum/tech/T = files.known_tech[v] @@ -708,8 +708,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "
    " if(1.2) //Technology Disk Menu - dat += "Main Menu
    " - dat += "Disk Operations: Clear DiskUpload AllEject Disk" + dat += "Main Menu
    " + dat += "Disk Operations: Clear DiskUpload AllEject Disk" for(var/i in 1 to t_disk.max_tech_stored) dat += "
    " if(t_disk.tech_stored[i]) @@ -717,25 +717,25 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Name: [tech.name]
    " dat += "Level: [tech.level]
    " dat += "Description: [tech.desc]
    " - dat += "Operations: Upload to DatabaseClear Slot" + dat += "Operations: Upload to DatabaseClear Slot" else - dat += "Empty Slot
    Operations: Load Tech to Slot" + dat += "Empty Slot
    Operations: Load Tech to Slot" dat += "
    " if(1.3) //Technology Disk submenu - dat += "Main Menu" - dat += "Return to Disk Operations
    " + dat += "Main Menu" + dat += "Return to Disk Operations
    " dat += "

    Load Technology to Disk:


    " for(var/v in files.known_tech) var/datum/tech/T = files.known_tech[v] if(T.level <= 0) continue dat += "[T.name]" - dat += "Copy to Disk
    " + dat += "Copy to Disk
    " dat += "
    " if(1.4) //Design Disk menu. - dat += "Main Menu
    " - dat += "Disk Operations: Clear DiskUpload AllEject Disk" + dat += "Main Menu
    " + dat += "Disk Operations: Clear DiskUpload AllEject Disk" for(var/i in 1 to d_disk.max_blueprints) dat += "
    " if(d_disk.blueprints[i]) @@ -761,66 +761,66 @@ won't update every console in existence) but it's more of a hassle to do. Also, var/all_mats = D.materials + D.reagents_list for(var/M in all_mats) dat += "* [CallMaterialName(M)] x [all_mats[M]]
    " - dat += "Operations: Upload to Database Clear Slot" + dat += "Operations: Upload to Database Clear Slot" else - dat += "Empty Slot
    Operations: Load Design to Slot" + dat += "Empty Slot
    Operations: Load Design to Slot" dat += "
    " if(1.5) //Design disk submenu - dat += "Main Menu" - dat += "Return to Disk Operations
    " + dat += "Main Menu" + dat += "Return to Disk Operations
    " dat += "

    Load Design to Disk:


    " for(var/v in files.known_designs) var/datum/design/D = files.known_designs[v] dat += "[D.name] " - dat += "Copy to Disk
    " + dat += "Copy to Disk
    " dat += "
    " if(1.6) //R&D console settings - dat += "Main Menu
    " + dat += "Main Menu
    " dat += "

    R&D Console Setting:


    " if(sync) - dat += "Sync Database with Network
    " + dat += "Sync Database with Network
    " dat += "Connect to Research Network
    " - dat += "Disconnect from Research Network
    " + dat += "Disconnect from Research Network
    " else dat += "Sync Database with Network
    " - dat += "Connect to Research Network
    " + dat += "Connect to Research Network
    " dat += "Disconnect from Research Network
    " - dat += "Device Linkage Menu
    " - dat += "Lock Console
    " - dat += "Reset R&D Database
    " + dat += "Device Linkage Menu
    " + dat += "Lock Console
    " + dat += "Reset R&D Database
    " if(1.7) //R&D device linkage - dat += "Main Menu" - dat += "Settings Menu
    " + dat += "Main Menu" + dat += "Settings Menu
    " dat += "

    R&D Console Device Linkage Menu:


    " - dat += "Re-sync with Nearby Devices

    " + dat += "Re-sync with Nearby Devices

    " dat += "

    Linked Devices:


    " if(linked_destroy) - dat += "* Destructive Analyzer Disconnect
    " + dat += "* Destructive Analyzer Disconnect
    " else dat += "* No Destructive Analyzer Linked
    " if(linked_lathe) - dat += "* Protolathe Disconnect
    " + dat += "* Protolathe Disconnect
    " else dat += "* No Protolathe Linked
    " if(linked_imprinter) - dat += "* Circuit Imprinter Disconnect
    " + dat += "* Circuit Imprinter Disconnect
    " else dat += "* No Circuit Imprinter Linked
    " dat += "
    " ////////////////////DESTRUCTIVE ANALYZER SCREENS//////////////////////////// if(2.0) - dat += "Main Menu" + dat += "Main Menu" dat += "
    NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE
    " if(2.1) - dat += "Main Menu" + dat += "Main Menu" dat += "
    No Item Loaded. Standing-by...
    " if(2.2) - dat += "Main Menu
    " + dat += "Main Menu
    " dat += "

    Deconstruction Menu


    " dat += "Name: [linked_destroy.loaded_item.name]
    " dat += "Origin Tech:
    " @@ -833,27 +833,27 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "
    " dat += "
    Options: " - dat += "Deconstruct Item" - dat += "Eject Item" + dat += "Deconstruct Item" + dat += "Eject Item" if(2.3) - dat += "Main Menu" + dat += "Main Menu" dat += "
    Item is neither reliable enough or broken enough to learn from.
    " /////////////////////PROTOLATHE SCREENS///////////////////////// if(3.0) - dat += "Main Menu
    " + dat += "Main Menu
    " dat += "
    NO PROTOLATHE LINKED TO CONSOLE
    " if(3.1) - dat += "Main Menu " - dat += "Material Storage" - dat += "Chemical Storage
    " + dat += "Main Menu " + dat += "Material Storage" + dat += "Chemical Storage
    " dat += "

    Protolathe Menu:


    " dat += "Material Amount: [linked_materials.total_amount] / [linked_materials.max_amount]
    " dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
    " - dat += "\ - \ + dat += "\ + \ \ \ \ @@ -864,8 +864,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, //Grouping designs by categories, to improve readability if(3.15) - dat += "Main Menu" - dat += "Protolathe Menu" + dat += "Main Menu" + dat += "Protolathe Menu" dat += "

    Browsing [selected_category]:


    " dat += "Material Amount: [linked_materials.total_amount] / [linked_materials.max_amount]
    " dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
    " @@ -890,11 +890,11 @@ won't update every console in existence) but it's more of a hassle to do. Also, c = min(c,t) if (c >= 1) - dat += "[D.name]" + dat += "[D.name]" if(c >= 5) - dat += "x5" + dat += "x5" if(c >= 10) - dat += "x10" + dat += "x10" dat += "[temp_material]" else dat += "[D.name][temp_material]" @@ -902,8 +902,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "
    " if(3.17) //Display search result - dat += "Main Menu" - dat += "Protolathe Menu" + dat += "Main Menu" + dat += "Protolathe Menu" dat += "

    Search results:


    " dat += "Material Amount: [linked_materials.total_amount] / [linked_materials.max_amount]
    " dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
    " @@ -924,11 +924,11 @@ won't update every console in existence) but it's more of a hassle to do. Also, c = min(c,t) if (c >= 1) - dat += "[D.name]" + dat += "[D.name]" if(c >= 5) - dat += "x5" + dat += "x5" if(c >= 10) - dat += "x10" + dat += "x10" dat += "[temp_material]" else dat += "[D.name][temp_material]" @@ -936,8 +936,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "
    " if(3.2) //Protolathe Material Storage Sub-menu - dat += "Main Menu" - dat += "Protolathe Menu
    " + dat += "Main Menu" + dat += "Protolathe Menu
    " dat += "

    Material Storage:



    " if(!linked_lathe) dat += "ERROR: Protolathe connection failed." @@ -946,38 +946,38 @@ won't update every console in existence) but it's more of a hassle to do. Also, var/datum/material/M = linked_materials.materials[mat_id] dat += "* [M.amount] of [M.name]: " if(M.amount >= MINERAL_MATERIAL_AMOUNT) - dat += "Eject " + dat += "Eject " if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) - dat += "5x " + dat += "5x " if(M.amount >= MINERAL_MATERIAL_AMOUNT) - dat += "All" + dat += "All" dat += "
    " dat += "
    " if(3.3) - dat += "Main Menu" - dat += "Protolathe Menu" - dat += "Disposal All Chemicals in Storage
    " + dat += "Main Menu" + dat += "Protolathe Menu" + dat += "Disposal All Chemicals in Storage
    " dat += "

    Chemical Storage:



    " for(var/datum/reagent/R in linked_lathe.reagents.reagent_list) dat += "[R.name]: [R.volume]" - dat += "Purge
    " + dat += "Purge
    " ///////////////////CIRCUIT IMPRINTER SCREENS//////////////////// if(4.0) - dat += "Main Menu
    " + dat += "Main Menu
    " dat += "
    NO CIRCUIT IMPRINTER LINKED TO CONSOLE
    " if(4.1) - dat += "Main Menu" - dat += "Material Storage" - dat += "Chemical Storage
    " + dat += "Main Menu" + dat += "Material Storage" + dat += "Chemical Storage
    " dat += "

    Circuit Imprinter Menu:


    " dat += "Material Amount: [imprinter_materials.total_amount]
    " dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
    " - dat += "\ - \ + dat += "\ + \ \ \ \ @@ -987,8 +987,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += list_categories(linked_imprinter.categories, 4.15) if(4.15) - dat += "Main Menu" - dat += "Circuit Imprinter Menu" + dat += "Main Menu" + dat += "Circuit Imprinter Menu" dat += "

    Browsing [selected_category]:


    " dat += "Material Amount: [imprinter_materials.total_amount]
    " dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
    " @@ -1011,14 +1011,14 @@ won't update every console in existence) but it's more of a hassle to do. Also, else temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" if (check_materials) - dat += "[D.name][temp_materials]
    " + dat += "[D.name][temp_materials]
    " else dat += "[D.name][temp_materials]
    " dat += "
    " if(4.17) - dat += "Main Menu" - dat += "Circuit Imprinter Menu" + dat += "Main Menu" + dat += "Circuit Imprinter Menu" dat += "

    Search results:


    " dat += "Material Amount: [imprinter_materials.total_amount]
    " dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
    " @@ -1036,23 +1036,23 @@ won't update every console in existence) but it's more of a hassle to do. Also, else temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" if (check_materials) - dat += "[D.name][temp_materials]
    " + dat += "[D.name][temp_materials]
    " else dat += "[D.name][temp_materials]
    " dat += "
    " if(4.2) //Circuit Imprinter Material Storage Sub-menu - dat += "Main Menu" - dat += "Circuit Imprinter Menu" - dat += "Disposal All Chemicals in Storage
    " + dat += "Main Menu" + dat += "Circuit Imprinter Menu" + dat += "Disposal All Chemicals in Storage
    " dat += "

    Chemical Storage:



    " for(var/datum/reagent/R in linked_imprinter.reagents.reagent_list) dat += "[R.name]: [R.volume]" - dat += "Purge
    " + dat += "Purge
    " if(4.3) - dat += "Main Menu" - dat += "Circuit Imprinter Menu
    " + dat += "Main Menu" + dat += "Circuit Imprinter Menu
    " dat += "

    Material Storage:



    " if(!linked_imprinter) dat += "ERROR: Protolathe connection failed." @@ -1061,11 +1061,11 @@ won't update every console in existence) but it's more of a hassle to do. Also, var/datum/material/M = imprinter_materials.materials[mat_id] dat += "* [M.amount] of [M.name]: " if(M.amount >= MINERAL_MATERIAL_AMOUNT) - dat += "Eject " + dat += "Eject " if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) - dat += "5x " + dat += "5x " if(M.amount >= MINERAL_MATERIAL_AMOUNT) - dat += "All" + dat += "All" dat += "
    " dat += "
    " @@ -1087,7 +1087,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "
    " line_length = 1 - dat += "" + dat += "" line_length++ dat += "
    [GLOB.TAGGERLOCATIONS[i]][GLOB.TAGGERLOCATIONS[i]]
    [C][C]
    " diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 98f5fef616..61f5a12a81 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -253,10 +253,10 @@ if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin) continue dat += "[S.name] || " - dat += "Access Rights | " - dat += "Data Management" + dat += "Access Rights | " + dat += "Data Management" if(badmin) - dat += " | Server-to-Server Transfer" + dat += " | Server-to-Server Transfer" dat += "
    " if(1) //Access rights menu @@ -264,7 +264,7 @@ dat += "Consoles with Upload Access
    " for(var/obj/machinery/computer/rdconsole/C in consoles) var/turf/console_turf = get_turf(C) - dat += "* [console_turf.loc]" //FYI, these are all numeric ids, eventually. + dat += "* [console_turf.loc]" //FYI, these are all numeric ids, eventually. if(C.id in temp_server.id_with_upload) dat += " (Remove)
    " else @@ -272,12 +272,12 @@ dat += "Consoles with Download Access
    " for(var/obj/machinery/computer/rdconsole/C in consoles) var/turf/console_turf = get_turf(C) - dat += "* [console_turf.loc]" + dat += "* [console_turf.loc]" if(C.id in temp_server.id_with_download) dat += " (Remove)
    " else dat += " (Add)
    " - dat += "
    Main Menu" + dat += "
    Main Menu" if(2) //Data Management menu dat += "[temp_server.name] Data ManagementP

    " @@ -287,20 +287,20 @@ if(T.level <= 0) continue dat += "* [T.name] " - dat += "(Reset)
    " //FYI, these are all strings. + dat += "(Reset)
    " //FYI, these are all strings. dat += "Known Designs
    " for(var/v in temp_server.files.known_designs) var/datum/design/D = temp_server.files.known_designs[v] dat += "* [D.name] " - dat += "(Delete)
    " - dat += "
    Main Menu" + dat += "(Delete)
    " + dat += "
    Main Menu" if(3) //Server Data Transfer dat += "[temp_server.name] Server to Server Transfer

    " dat += "Send Data to what server?
    " for(var/obj/machinery/r_n_d/server/S in servers) - dat += "[S.name] (Transfer)
    " - dat += "
    Main Menu" + dat += "[S.name] (Transfer)
    " + dat += "
    Main Menu" user << browse("R&D Server Control
    [dat]", "window=server_control;size=575x400") onclose(user, "server_control") return diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm index 5b21d22d19..4b55a5b155 100644 --- a/code/modules/shuttle/assault_pod.dm +++ b/code/modules/shuttle/assault_pod.dm @@ -43,7 +43,7 @@ if(!T) return var/obj/docking_port/stationary/landing_zone = new /obj/docking_port/stationary(T) - landing_zone.id = "assault_pod(\ref[src])" + landing_zone.id = "assault_pod([REF(src)])" landing_zone.name = "Landing Zone" landing_zone.dwidth = dwidth landing_zone.dheight = dheight diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 47ceaef99e..94cf55e0a0 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -26,13 +26,13 @@ if(!M.check_dock(S)) continue destination_found = 1 - dat += "Send to [S.name]
    " + dat += "Send to [S.name]
    " if(!destination_found) dat += "Shuttle Locked
    " if(admin_controlled) dat += "Authorized personnel only
    " - dat += "Request Authorization
    " - dat += "Close" + dat += "Request Authorization
    " + dat += "Close" var/datum/browser/popup = new(user, "computer", M ? M.name : "shuttle", 300, 200) popup.set_content("
    [dat]
    ") diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index c3549abc4d..d573f9ce13 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -144,8 +144,8 @@ var/time = TIME_LEFT message_admins("[key_name_admin(user.client)] \ - (?) \ - (FLW) \ + (?) \ + (FLW) \ has emagged the emergency shuttle [time] seconds before launch.", 0, 1) log_game("[key_name(user)] has emagged the emergency shuttle in \ [COORD(src)] [time] seconds before launch.") diff --git a/code/modules/stock_market/computer.dm b/code/modules/stock_market/computer.dm index 3422145ec3..a6429834be 100644 --- a/code/modules/stock_market/computer.dm +++ b/code/modules/stock_market/computer.dm @@ -68,8 +68,8 @@ a.updated { var/list/LR = GLOB.stockExchange.last_read[S] if (!(logged_in in LR)) LR[logged_in] = 0 - dat += "View mode: [vmode ? "Compact" : "Full"] " - dat += "Stock Transaction Log: Check
    " + dat += "View mode: [vmode ? "Compact" : "Full"] " + dat += "Stock Transaction Log: Check
    " dat += "This is a work in progress. Certain features may not be available." @@ -83,12 +83,12 @@ a.updated { dat += "
    [S.name] ([S.short_name])[S.bankrupt ? " BANKRUPT" : null]
    " if (S.last_unification) dat += "Unified shares [DisplayTimeText(world.time - S.last_unification)] ago.
    " - dat += "Current value per share: [S.current_value] | View history

    " + dat += "Current value per share: [S.current_value] | View history

    " dat += "You currently own [mystocks] shares in this company. There are [S.available_shares] purchasable shares on the market currently.
    " if (S.bankrupt) dat += "You cannot buy or sell shares in a bankrupt company!

    " else - dat += "Buy shares | Sell shares

    " + dat += "Buy shares | Sell shares

    " dat += "Prominent products:
    " for (var/prod in S.products) dat += "[prod]
    " @@ -105,7 +105,7 @@ a.updated { if (E.last_change > lrt && !E.hidden) news = 1 break - dat += "View news archives[news ? " (updated)" : null]
    " + dat += "View news archives[news ? " (updated)" : null]" else if (vmode == 1) dat += "Actions: + Buy, - Sell, (A)rchives, (H)istory

    " dat += "" @@ -159,8 +159,8 @@ a.updated { if (S.bankrupt) dat += "+- " else - dat += "+- " - dat += "(A)(H)" + dat += "+- " + dat += "(A)(H)" dat += "" @@ -275,7 +275,7 @@ a.updated { sell_some_shares(S, usr) if (href_list["show_logs"]) - var/dat = "Stock Transaction Logs

    Stock Transaction Logs


    " + var/dat = "Stock Transaction Logs

    Stock Transaction Logs


    " for(var/D in GLOB.stockExchange.logs) var/datum/stock_log/L = D if(istype(L, /datum/stock_log/buy)) @@ -297,7 +297,7 @@ a.updated { if (logged_in && logged_in != "") var/list/LR = GLOB.stockExchange.last_read[S] LR[logged_in] = world.time - var/dat = "News feed for [S.name]

    News feed for [S.name]

    " + var/dat = "News feed for [S.name]

    News feed for [S.name]

    " dat += "

    Events

    " var/p = 0 for (var/datum/stockEvent/E in S.events) diff --git a/code/modules/tgui/subsystem.dm b/code/modules/tgui/subsystem.dm index c44c91c92b..f70eb87b0c 100644 --- a/code/modules/tgui/subsystem.dm +++ b/code/modules/tgui/subsystem.dm @@ -43,7 +43,7 @@ * return datum/tgui The found UI. **/ /datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object, ui_key) - var/src_object_key = "\ref[src_object]" + var/src_object_key = "[REF(src_object)]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) return null // No UIs open. else if(isnull(open_uis[src_object_key][ui_key]) || !istype(open_uis[src_object_key][ui_key], /list)) @@ -65,7 +65,7 @@ * return int The number of UIs updated. **/ /datum/controller/subsystem/tgui/proc/update_uis(datum/src_object) - var/src_object_key = "\ref[src_object]" + var/src_object_key = "[REF(src_object)]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) return 0 // Couldn't find any UIs for this object. @@ -87,7 +87,7 @@ * return int The number of UIs closed. **/ /datum/controller/subsystem/tgui/proc/close_uis(datum/src_object) - var/src_object_key = "\ref[src_object]" + var/src_object_key = "[REF(src_object)]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) return 0 // Couldn't find any UIs for this object. @@ -168,7 +168,7 @@ * required ui datum/tgui The UI to be added. **/ /datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui) - var/src_object_key = "\ref[ui.src_object]" + var/src_object_key = "[REF(ui.src_object)]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) open_uis[src_object_key] = list(ui.ui_key = list()) // Make a list for the ui_key and src_object. else if(isnull(open_uis[src_object_key][ui.ui_key]) || !istype(open_uis[src_object_key][ui.ui_key], /list)) @@ -190,7 +190,7 @@ * return bool If the UI was removed or not. **/ /datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui) - var/src_object_key = "\ref[ui.src_object]" + var/src_object_key = "[REF(ui.src_object)]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) return 0 // It wasn't open. else if(isnull(open_uis[src_object_key][ui.ui_key]) || !istype(open_uis[src_object_key][ui.ui_key], /list)) diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index e427cfa0d1..088bd9da2c 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /** * tgui * @@ -335,6 +336,345 @@ * * optional force_open bool If force_open should be passed to ui_interact. **/ +======= + /** + * tgui + * + * /tg/station user interface library + **/ + + /** + * tgui datum (represents a UI). + **/ +/datum/tgui + var/mob/user // The mob who opened/is using the UI. + var/datum/src_object // The object which owns the UI. + var/title // The title of te UI. + var/ui_key // The ui_key of the UI. This allows multiple UIs for one src_object. + var/window_id // The window_id for browse() and onclose(). + var/width = 0 // The window width. + var/height = 0 // The window height + var/window_options = list( // Extra options to winset(). + "focus" = FALSE, + "titlebar" = TRUE, + "can_resize" = TRUE, + "can_minimize" = TRUE, + "can_maximize" = FALSE, + "can_close" = TRUE, + "auto_format" = FALSE + ) + var/style = "nanotrasen" // The style to be used for this UI. + var/interface // The interface (template) to be used for this UI. + var/autoupdate = TRUE // Update the UI every MC tick. + var/initialized = FALSE // If the UI has been initialized yet. + var/list/initial_data // The data (and datastructure) used to initialize the UI. + var/status = UI_INTERACTIVE // The status/visibility of the UI. + var/datum/ui_state/state = null // Topic state used to determine status/interactability. + var/datum/tgui/master_ui // The parent UI. + var/list/datum/tgui/children = list() // Children of this UI. + var/titlebar = TRUE + var/custom_browser_id = FALSE + + /** + * public + * + * Create a new UI. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object or datum which owns the UI. + * required ui_key string The ui_key of the UI. + * required interface string The interface used to render the UI. + * optional title string The title of the UI. + * optional width int The window width. + * optional height int The window height. + * optional master_ui datum/tgui The parent UI. + * optional state datum/ui_state The state used to determine status. + * + * return datum/tgui The requested UI. + **/ +/datum/tgui/New(mob/user, datum/src_object, ui_key, interface, title, width = 0, height = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state, browser_id = null) + src.user = user + src.src_object = src_object + src.ui_key = ui_key + src.window_id = browser_id ? browser_id : "[REF(src_object)]-[ui_key]" + src.custom_browser_id = browser_id ? TRUE : FALSE + + set_interface(interface) + + if(title) + src.title = sanitize(title) + if(width) + src.width = width + if(height) + src.height = height + + src.master_ui = master_ui + if(master_ui) + master_ui.children += src + src.state = state + + var/datum/asset/assets = get_asset_datum(/datum/asset/simple/tgui) + assets.send(user) + + /** + * public + * + * Open this UI (and initialize it with data). + **/ +/datum/tgui/proc/open() + if(!user.client) + return // Bail if there is no client. + + update_status(push = 0) // Update the window status. + if(status < UI_UPDATE) + return // Bail if we're not supposed to open. + + if(!initial_data) + set_initial_data(src_object.ui_data(user)) // Get the UI data. + + var/window_size = "" + if(width && height) // If we have a width and height, use them. + window_size = "size=[width]x[height];" + + var/debugable = check_rights_for(user.client, R_DEBUG) + user << browse(get_html(debugable), "window=[window_id];[window_size][list2params(window_options)]") // Open the window. + if (!custom_browser_id) + winset(user, window_id, "on-close=\"uiclose [REF(src)]\"") // Instruct the client to signal UI when the window is closed. + SStgui.on_open(src) + + /** + * public + * + * Reinitialize the UI. + * (Possibly with a new interface and/or data). + * + * optional template string The name of the new interface. + * optional data list The new initial data. + **/ +/datum/tgui/proc/reinitialize(interface, list/data) + if(interface) + set_interface(interface) // Set a new interface. + if(data) + set_initial_data(data) // Replace the initial_data. + open() + + /** + * public + * + * Close the UI, and all its children. + **/ +/datum/tgui/proc/close() + user << browse(null, "window=[window_id]") // Close the window. + SStgui.on_close(src) + for(var/datum/tgui/child in children) // Loop through and close all children. + child.close() + children.Cut() + state = null + master_ui = null + qdel(src) + + /** + * public + * + * Sets the browse() window options for this UI. + * + * required window_options list The window options to set. + **/ +/datum/tgui/proc/set_window_options(list/window_options) + src.window_options = window_options + + /** + * public + * + * Set the style for this UI. + * + * required style string The new UI style. + **/ +/datum/tgui/proc/set_style(style) + src.style = lowertext(style) + + /** + * public + * + * Set the interface (template) for this UI. + * + * required interface string The new UI interface. + **/ +/datum/tgui/proc/set_interface(interface) + src.interface = lowertext(interface) + + /** + * public + * + * Enable/disable auto-updating of the UI. + * + * required state bool Enable/disable auto-updating. + **/ +/datum/tgui/proc/set_autoupdate(state = 1) + autoupdate = state + + /** + * private + * + * Set the data to initialize the UI with. + * The datastructure cannot be changed by subsequent updates. + * + * optional data list The data/datastructure to initialize the UI with. + **/ +/datum/tgui/proc/set_initial_data(list/data) + initial_data = data + + /** + * private + * + * Generate HTML for this UI. + * + * optional bool inline If the JSON should be inlined into the HTML (for debugging). + * + * return string UI HTML output. + **/ +/datum/tgui/proc/get_html(var/inline) + var/html + // Poplate HTML with JSON if we're supposed to inline. + if(inline) + html = replacetextEx(SStgui.basehtml, "{}", get_json(initial_data)) + else + html = SStgui.basehtml + html = replacetextEx(html, "\[ref]", "[REF(src)]") + html = replacetextEx(html, "\[style]", style) + return html + + /** + * private + * + * Get the config data/datastructure to initialize the UI with. + * + * return list The config data. + **/ +/datum/tgui/proc/get_config_data() + var/list/config_data = list( + "title" = title, + "status" = status, + "screen" = src_object.ui_screen, + "style" = style, + "interface" = interface, + "fancy" = user.client.prefs.tgui_fancy, + "locked" = user.client.prefs.tgui_lock && !custom_browser_id, + "window" = window_id, + "ref" = "[REF(src)]", + "user" = list( + "name" = user.name, + "ref" = "[REF(user)]" + ), + "srcObject" = list( + "name" = "[src_object]", + "ref" = "[REF(src_object)]" + ), + "titlebar" = titlebar + ) + return config_data + + /** + * private + * + * Package the data to send to the UI, as JSON. + * This includes the UI data and config_data. + * + * return string The packaged JSON. + **/ +/datum/tgui/proc/get_json(list/data) + var/list/json_data = list() + + json_data["config"] = get_config_data() + if(!isnull(data)) + json_data["data"] = data + + // Generate the JSON. + var/json = json_encode(json_data) + // Strip #255/improper. + json = replacetext(json, "\proper", "") + json = replacetext(json, "\improper", "") + return json + + /** + * private + * + * Handle clicks from the UI. + * Call the src_object's ui_act() if status is UI_INTERACTIVE. + * If the src_object's ui_act() returns 1, update all UIs attacked to it. + **/ +/datum/tgui/Topic(href, href_list) + if(user != usr) + return // Something is not right here. + + var/action = href_list["action"] + var/params = href_list; params -= "action" + + switch(action) + if("tgui:initialize") + user << output(url_encode(get_json(initial_data)), "[custom_browser_id ? window_id : "[window_id].browser"]:initialize") + initialized = TRUE + if("tgui:view") + if(params["screen"]) + src_object.ui_screen = params["screen"] + SStgui.update_uis(src_object) + if("tgui:link") + user << link(params["url"]) + if("tgui:fancy") + user.client.prefs.tgui_fancy = TRUE + if("tgui:nofrills") + user.client.prefs.tgui_fancy = FALSE + else + update_status(push = 0) // Update the window state. + if(src_object.ui_act(action, params, src, state)) // Call ui_act() on the src_object. + SStgui.update_uis(src_object) // Update if the object requested it. + + /** + * private + * + * Update the UI. + * Only updates the data if update is true, otherwise only updates the status. + * + * optional force bool If the UI should be forced to update. + **/ +/datum/tgui/process(force = 0) + var/datum/host = src_object.ui_host() + if(!src_object || !host || !user) // If the object or user died (or something else), abort. + close() + return + + if(status && (force || autoupdate)) + update() // Update the UI if the status and update settings allow it. + else + update_status(push = 1) // Otherwise only update status. + + /** + * private + * + * Push data to an already open UI. + * + * required data list The data to send. + * optional force bool If the update should be sent regardless of state. + **/ +/datum/tgui/proc/push_data(data, force = 0) + update_status(push = 0) // Update the window state. + if(!initialized) + return // Cannot update UI if it is not set up yet. + if(status <= UI_DISABLED && !force) + return // Cannot update UI, we have no visibility. + + // Send the new JSON to the update() Javascript function. + user << output(url_encode(get_json(data)), "[custom_browser_id ? window_id : "[window_id].browser"]:update") + + /** + * private + * + * Updates the UI by interacting with the src_object again, which will hopefully + * call try_ui_update on it. + * + * optional force_open bool If force_open should be passed to ui_interact. + **/ +>>>>>>> 626302c... Merge pull request #32161 from ninjanomnom/512-experimental /datum/tgui/proc/update(force_open = FALSE) src_object.ui_interact(user, ui_key, src, force_open, master_ui, state)