From c56acde8e06c292a50eecb27e7ad6a01926d1307 Mon Sep 17 00:00:00 2001 From: Gary Lafortune Date: Sat, 7 Dec 2019 00:47:41 -0600 Subject: [PATCH 1/8] Makes paper use the language system somewhat. Removes info_links. --- .../machinery/telecomms/computers/message.dm | 1 - code/modules/detectivework/scanner.dm | 2 - code/modules/paperwork/paper.dm | 137 ++++++++---------- code/modules/paperwork/paperbin.dm | 1 - code/modules/paperwork/photocopier.dm | 1 - 5 files changed, 63 insertions(+), 79 deletions(-) diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm index 0245e4314000..b4f4cb8709f5 100644 --- a/code/game/machinery/telecomms/computers/message.dm +++ b/code/game/machinery/telecomms/computers/message.dm @@ -465,7 +465,6 @@ /obj/item/paper/monitorkey/proc/print(obj/machinery/telecomms/message_server/server) 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") /obj/item/paper/monitorkey/LateInitialize() diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index f30259e32ab7..30a0d6b52b6a 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -51,8 +51,6 @@ P.info = text("
Forensic Record - (FR-[])


", frNum) P.info += jointext(log, "
") P.info += "
Notes:
" - P.info_links = P.info - P.updateinfolinks() P.update_icon() if(ismob(loc)) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 63f45ef7e0d1..7e7012d2a8f5 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -5,6 +5,15 @@ * lipstick wiping is in code/game/objects/items/weapons/cosmetics.dm! */ +#define PAPER_FIELD "" + +/datum/langtext // A datum to describe a piece of writing that stores a language value with it. + var/text = "" // The text that is written. + var/datum/language/lang // the language it's written in. +/datum/langtext/New(t,datum/language/l) + text = t + lang = l + /obj/item/paper name = "paper" gender = NEUTER @@ -22,8 +31,8 @@ max_integrity = 50 dog_fashion = /datum/dog_fashion/head - var/info //What's actually written on the paper. - var/info_links //A different version of the paper which includes html links at fields and EOF + var/info = "" // What's prewritten on the paper. Appears first and is a special snowflake callback to how paper used to work. + var/list/written = list() //What's written on the paper by people. Stores /datum/langtext values, plus plaintext values that mark where fields are. var/stamps //The (text for the) stamps on the paper. var/fields = 0 //Amount of user created fields var/list/stamped @@ -48,7 +57,6 @@ pixel_y = rand(-8, 8) pixel_x = rand(-9, 9) update_icon() - updateinfolinks() /obj/item/paper/update_icon() @@ -69,10 +77,10 @@ if(in_range(user, src) || isobserver(user)) if(user.is_literate()) - user << browse("[name][info]
[stamps]", "window=[name]") + user << browse("[name][render_body(user)]
[stamps]", "window=[name]") onclose(user, "[name]") else - user << browse("[name][stars(info)]
[stamps]", "window=[name]") + user << browse("[name][stars(render_body(user))]
[stamps]", "window=[name]") onclose(user, "[name]") else . += "You're too far away to read it!" @@ -121,64 +129,44 @@ else //cyborg or AI not seeing through a camera dist = get_dist(src, user) if(dist < 2) - usr << browse("[name][info]
[stamps]", "window=[name]") + usr << browse("[name][render_body(user)]
[stamps]", "window=[name]") onclose(usr, "[name]") else - usr << browse("[name][stars(info)]
[stamps]", "window=[name]") + usr << browse("[name][stars(render_body(user))]
[stamps]", "window=[name]") onclose(usr, "[name]") - -/obj/item/paper/proc/addtofield(id, text, links = 0) - var/locid = 0 - var/laststart = 1 - var/textindex = 1 - while(locid < 15) //hey whoever decided a while(1) was a good idea here, i hate you - var/istart = 0 - if(links) - istart = findtext(info_links, "", laststart) - else - istart = findtext(info, "", laststart) - - if(istart == 0) - return //No field found with matching id - - laststart = istart+1 - locid++ - if(locid == id) - var/iend = 1 - if(links) - iend = findtext(info_links, "", istart) +/obj/item/paper/proc/render_body(mob/user,links = FALSE) + var/text = info // The actual text displayed. Defaults to (and starts with) $info. + for(var/i=1,i<=written.len;++i) // Needs to be a normal for-loop because I need the indices. + var/x = written[i] + if(istype(x,/datum/langtext)) + var/datum/langtext/X = x + if(user.has_language(X.lang)) + text += X.text else - iend = findtext(info, "", istart) - - //textindex = istart+26 - textindex = iend - break - + var/datum/language/paperlang = GLOB.language_datum_instances[X.lang] + var/regex/plaintext = regex(@"(?:<\/?[\w\s\d=\x22]+>|^)((?:[\w\s\d!@#$%^&*\(\)\-+?:\x22'}{\[\]~`|;,.\\])+)") // Finds plaintext within the HTML. + var/newtext = X.text + var/startpos = 1 + while(startpos < 8192 && startpos > -1) + var/f = plaintext.Find(newtext,startpos) + if(!f) + break + var/sentence = plaintext.group[1] + var/scramb = paperlang.scramble(sentence) // The scrambled version of the sentence. + newtext = replacetext(newtext, sentence, scramb, f, length(sentence)+1) + startpos = plaintext.next + (length(scramb) - length(sentence)) + text += newtext + else if(links) + text += "" + "write" + "" if(links) - var/before = copytext(info_links, 1, textindex) - var/after = copytext(info_links, textindex) - info_links = before + text + after - else - var/before = copytext(info, 1, textindex) - var/after = copytext(info, textindex) - info = before + text + after - updateinfolinks() - - -/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" - + text += "" + "write" + "" + return text /obj/item/paper/proc/clearpaper() - info = null stamps = null LAZYCLEARLIST(stamped) cut_overlays() - updateinfolinks() update_icon() @@ -194,16 +182,9 @@ var/obj/item/toy/crayon/C = P t = "[t]" - // Count the fields - var/laststart = 1 - while(fields < 15) - var/i = findtext(t, "", laststart) - if(i == 0) - break - laststart = i+1 - fields++ - - return t + var/list/T = splittext(t,PAPER_FIELD,1,0,TRUE) // The list of subsections.. Splits the text on where paper fields have been created. + //The TRUE marks that we're keeping these "seperator" paper fields; they're included in this list. + return T // :) /obj/item/paper/proc/reload_fields() // Useful if you made the paper programicly and want to include fields. Also runs updateinfolinks() for you. fields = 0 @@ -214,7 +195,6 @@ break laststart = i+1 fields++ - updateinfolinks() /obj/item/paper/proc/openhelp(mob/user) @@ -250,7 +230,7 @@ openhelp(usr) return if(href_list["write"]) - var/id = href_list["write"] + var/t = stripped_multiline_input("Enter what you want to write:", "Write", no_trim=TRUE) if(!t || !usr.canUseTopic(src, BE_CLOSE, literate)) return @@ -263,17 +243,23 @@ if(!in_range(src, usr) && loc != usr && !istype(loc, /obj/item/clipboard) && loc.loc != usr && usr.get_active_held_item() != i) //Some check to see if he's allowed to write return - log_paper("[key_name(usr)] writing to paper [t]") - t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html - - if(t != null) //No input from the user means nothing needs to be added - if(id!="end") - addtofield(text2num(id), t) // He wants to edit a field, let him. + var/list/T = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html nibblets + + if(T.len) //No input from the user means nothing needs to be added + var/list/templist = list() // All the stuff we're adding to $written + for(var/text in T) + if(text == PAPER_FIELD) + templist += text + else + var/datum/langtext/L = new(text,usr.get_default_language()) + templist += L + var/id = href_list["write"] + if(id == "end") + written += templist 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 + written.Insert(id,templist) + usr << browse("[name][render_body(usr,TRUE)]
[stamps]
\[?\]
", "window=[name]") // Update the window update_icon() @@ -288,7 +274,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][render_body(user,TRUE)]
[stamps]
\[?\]
", "window=[name]") return else to_chat(user, "You don't know how to read or write.") @@ -370,3 +356,6 @@ /obj/item/paper/crumpled/bloody icon_state = "scrap_bloodied" + + +#undef PAPER_FIELD diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 8f34f578d7b6..dd6029a3f011 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -87,7 +87,6 @@ if(prob(30)) P.info = "HONK HONK HONK HONK HONK HONK HONK
HOOOOOOOOOOOOOOOOOOOOOONK
APRIL FOOLS
" P.rigged = 1 - P.updateinfolinks() P.add_fingerprint(user) P.forceMove(user.loc) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 24f4ca7bcab6..176d55cc2569 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -79,7 +79,6 @@ c.name = copy.name c.fields = copy.fields c.update_icon() - c.updateinfolinks() c.stamps = copy.stamps if(copy.stamped) c.stamped = copy.stamped.Copy() From b0be6c8a5e90064e7a8275ada6a38180e613bd6e Mon Sep 17 00:00:00 2001 From: Gary Lafortune Date: Tue, 10 Dec 2019 10:40:49 -0600 Subject: [PATCH 2/8] Makes written initialize in Initialize() in paper.dm --- code/modules/paperwork/paper.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 7e7012d2a8f5..666c8c1f29db 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -32,7 +32,7 @@ dog_fashion = /datum/dog_fashion/head var/info = "" // What's prewritten on the paper. Appears first and is a special snowflake callback to how paper used to work. - var/list/written = list() //What's written on the paper by people. Stores /datum/langtext values, plus plaintext values that mark where fields are. + var/list/written//What's written on the paper by people. Stores /datum/langtext values, plus plaintext values that mark where fields are. var/stamps //The (text for the) stamps on the paper. var/fields = 0 //Amount of user created fields var/list/stamped @@ -56,6 +56,7 @@ . = ..() pixel_y = rand(-8, 8) pixel_x = rand(-9, 9) + written = list() update_icon() From b2a97bb70e48578f1b5bc25fda99f3c93b548ced Mon Sep 17 00:00:00 2001 From: Gary Lafortune Date: Tue, 10 Dec 2019 10:51:59 -0600 Subject: [PATCH 3/8] Moves some code around and creates /proc/scramble_HTML for languages --- code/modules/language/language.dm | 16 ++++++++++++++++ code/modules/paperwork/paper.dm | 13 +------------ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm index e4488fc75f38..ba9fafb2d03f 100644 --- a/code/modules/language/language.dm +++ b/code/modules/language/language.dm @@ -109,6 +109,22 @@ return scrambled_text +/datum/language/proc/scramble_HTML(intext) // Calls scramble() on HTML text, making sure to not disturb the HTML. + var/text = "" + var/regex/plaintext = regex(@"(?:<\/?[\w\s\d=\x22]+>|^)((?:[\w\s\d!@#$%^&*\(\)\-+?:\x22'}{\[\]~`|;,.\\])+)") // Finds plaintext within the HTML. + var/newtext = intext + var/startpos = 1 + while(startpos < 8192 && startpos > -1) + var/f = plaintext.Find(newtext,startpos) + if(!f) + break + var/sentence = plaintext.group[1] + var/scramb = scramble(sentence) // The scrambled version of the sentence. + newtext = replacetext(newtext, sentence, scramb, f, length(sentence)+1) + startpos = plaintext.next + (length(scramb) - length(sentence)) + text += newtext + return text + /datum/language/proc/get_spoken_verb(msg_end) switch(msg_end) if("!") diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 666c8c1f29db..b1c7a37a559a 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -146,18 +146,7 @@ text += X.text else var/datum/language/paperlang = GLOB.language_datum_instances[X.lang] - var/regex/plaintext = regex(@"(?:<\/?[\w\s\d=\x22]+>|^)((?:[\w\s\d!@#$%^&*\(\)\-+?:\x22'}{\[\]~`|;,.\\])+)") // Finds plaintext within the HTML. - var/newtext = X.text - var/startpos = 1 - while(startpos < 8192 && startpos > -1) - var/f = plaintext.Find(newtext,startpos) - if(!f) - break - var/sentence = plaintext.group[1] - var/scramb = paperlang.scramble(sentence) // The scrambled version of the sentence. - newtext = replacetext(newtext, sentence, scramb, f, length(sentence)+1) - startpos = plaintext.next + (length(scramb) - length(sentence)) - text += newtext + text += paperlang.scramble_HTML(X.text) else if(links) text += "" + "write" + "" if(links) From 6d1324a919351d98cf75a4ac96d5361a002352e2 Mon Sep 17 00:00:00 2001 From: Gary Lafortune Date: Tue, 10 Dec 2019 10:54:47 -0600 Subject: [PATCH 4/8] Allows the prewritten text on paper to also have a language --- code/modules/paperwork/paper.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index b1c7a37a559a..f523e3f1f258 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -137,7 +137,11 @@ onclose(usr, "[name]") /obj/item/paper/proc/render_body(mob/user,links = FALSE) - var/text = info // The actual text displayed. Defaults to (and starts with) $info. + var/text = info // The actual text displayed. Starts with & defaults to $info. + if(istype(infolang) && !user.has_language(infolang)) + var/datum/language/paperlang = GLOB.language_datum_instances[infolang] + text = paper.scramble_HTML(text) + for(var/i=1,i<=written.len;++i) // Needs to be a normal for-loop because I need the indices. var/x = written[i] if(istype(x,/datum/langtext)) From 1882f71bb666351c78543f8597bc9881e7621718 Mon Sep 17 00:00:00 2001 From: Gary Lafortune Date: Tue, 10 Dec 2019 10:54:57 -0600 Subject: [PATCH 5/8] Forgot to push a line fuck --- code/modules/paperwork/paper.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index f523e3f1f258..74ae5355ae79 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -32,6 +32,7 @@ dog_fashion = /datum/dog_fashion/head var/info = "" // What's prewritten on the paper. Appears first and is a special snowflake callback to how paper used to work. + var/datum/language/infolang // The language info is written in. If left NULL, info will default to being omnilingual and readable by all. var/list/written//What's written on the paper by people. Stores /datum/langtext values, plus plaintext values that mark where fields are. var/stamps //The (text for the) stamps on the paper. var/fields = 0 //Amount of user created fields From ac9af7057babe161a437d2d775b73d6bc9dabc7b Mon Sep 17 00:00:00 2001 From: Gary Lafortune Date: Tue, 10 Dec 2019 11:19:40 -0600 Subject: [PATCH 6/8] Fixes missing variable compiletime in paper.dm --- code/modules/paperwork/paper.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 74ae5355ae79..bd873b198f08 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -141,7 +141,7 @@ var/text = info // The actual text displayed. Starts with & defaults to $info. if(istype(infolang) && !user.has_language(infolang)) var/datum/language/paperlang = GLOB.language_datum_instances[infolang] - text = paper.scramble_HTML(text) + text = paperlang.scramble_HTML(text) for(var/i=1,i<=written.len;++i) // Needs to be a normal for-loop because I need the indices. var/x = written[i] From f2519e24c5e72e53b540ab30bd0e9533f771cacf Mon Sep 17 00:00:00 2001 From: Gary Lafortune Date: Tue, 10 Dec 2019 11:40:48 -0600 Subject: [PATCH 7/8] Makes several premade papers have a language they're written in --- code/modules/paperwork/paper_premade.dm | 26 ++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/code/modules/paperwork/paper_premade.dm b/code/modules/paperwork/paper_premade.dm index 92afee2c1d26..6d290afda70f 100644 --- a/code/modules/paperwork/paper_premade.dm +++ b/code/modules/paperwork/paper_premade.dm @@ -5,54 +5,65 @@ /obj/item/paper/fluff/sop name = "paper- 'Standard Operating Procedure'" info = "Alert Levels:
\nBlue- Emergency
\n\t1. Caused by fire
\n\t2. Caused by manual interaction
\n\tAction:
\n\t\tClose all fire doors. These can only be opened by resetting the alarm
\nRed- Ejection/Self Destruct
\n\t1. Caused by module operating computer.
\n\tAction:
\n\t\tAfter the specified time the module will eject completely.
\n
\nEngine Maintenance Instructions:
\n\tShut off ignition systems:
\n\tActivate internal power
\n\tActivate orbital balance matrix
\n\tRemove volatile liquids from area
\n\tWear a fire suit
\n
\n\tAfter
\n\t\tDecontaminate
\n\t\tVisit medical examiner
\n
\nToxin Laboratory Procedure:
\n\tWear a gas mask regardless
\n\tGet an oxygen tank.
\n\tActivate internal atmosphere
\n
\n\tAfter
\n\t\tDecontaminate
\n\t\tVisit medical examiner
\n
\nDisaster Procedure:
\n\tFire:
\n\t\tActivate sector fire alarm.
\n\t\tMove to a safe area.
\n\t\tGet a fire suit
\n\t\tAfter:
\n\t\t\tAssess Damage
\n\t\t\tRepair damages
\n\t\t\tIf needed, Evacuate
\n\tMeteor Shower:
\n\t\tActivate fire alarm
\n\t\tMove to the back of ship
\n\t\tAfter
\n\t\t\tRepair damage
\n\t\t\tIf needed, Evacuate
\n\tAccidental Reentry:
\n\t\tActivate fire alarms in front of ship.
\n\t\tMove volatile matter to a fire proof area!
\n\t\tGet a fire suit.
\n\t\tStay secure until an emergency ship arrives.
\n
\n\t\tIf ship does not arrive-
\n\t\t\tEvacuate to a nearby safe area!" + infolang = /datum/language/common /obj/item/paper/fluff/shuttles/daniel info = "i love daniel
daniel is my best friend

you are tearing me apart elise" - + infolang = /datum/language/aphasia //////////// Job guides n' fluff /obj/item/paper/guides/jobs/hydroponics name = "paper- 'Greetings from Billy Bob'" info = "Hey fellow botanist!
\n
\nI didn't trust the station folk so I left
\na couple of weeks ago. But here's some
\ninstructions on how to operate things here.
\nYou can grow plants and each iteration they become
\nstronger, more potent and have better yield, if you
\nknow which ones to pick. Use your botanist's analyzer
\nfor that. You can turn harvested plants into seeds
\nat the seed extractor, and replant them for better stuff!
\nSometimes if the weed level gets high in the tray
\nmutations into different mushroom or weed species have
\nbeen witnessed. On the rare occasion even weeds mutate!
\n
\nEither way, have fun!
\n
\nBest regards,
\nBilly Bob Johnson.
\n
\nPS.
\nHere's a few tips:
\nIn nettles, potency = damage
\nIn amanitas, potency = deadliness + side effect
\nIn Liberty caps, potency = drug power + effect
\nIn chilies, potency = heat
\nNutrients keep mushrooms alive!
\nWater keeps weeds such as nettles alive!
\nAll other plants need both." + infolang = /datum/language/common /obj/item/paper/fluff/jobs/security/beepsky_mom name = "Note from Beepsky's Mom" info = "01001001 00100000 01101000 01101111 01110000 01100101 00100000 01111001 01101111 01110101 00100000 01110011 01110100 01100001 01111001 00100000 01110011 01100001 01100110 01100101 00101110 00100000 01001100 01101111 01110110 01100101 00101100 00100000 01101101 01101111 01101101 00101110" + infolang = /datum/language/machine /obj/item/paper/guides/jobs/security/courtroom name = "paper- 'A Crash Course in Legal SOP on SS13'" info = "Roles:
\nThe Detective is basically the investigator and prosecutor.
\nThe Staff Assistant can perform these functions with written authority from the Detective.
\nThe Captain/HoP/Warden is ct as the judicial authority.
\nThe Security Officers are responsible for executing warrants, security during trial, and prisoner transport.
\n
\nInvestigative Phase:
\nAfter the crime has been committed the Detective's job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
\n
\nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
\n
\nPre-Pre-Trial Phase:
\nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
\nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
\nPossible Motions:
\n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
\n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
\n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
\n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
\n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
\n
\nALL SIDES MOVE TO A COURTROOM
\nPre-Trial Hearings:
\nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
\n
\nThe Trial:
\nThe trial has three phases.
\n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
\n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
\nFINALLY once both sides are done calling witnesses we move onto the next phase.
\n3. Closing Arguments- Same as opening.
\nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
\n
\nSentencing Phase:
\nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
\nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
\nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
\n
\nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
\n" + infolang = /datum/language/common /obj/item/paper/guides/jobs/security/labor_camp name = "Labor Camp Operating Guide" info = "Labor Camp Facility Operation Guide

Hello there, proud operator of an NT-Sec Prisoner Rehabilitation Center. A solution to rising crime rates and falling productivity, these facilities are specifically designed for the safe, productive imprisonment of your most dangerous criminals.

To press a long-term prisoner into the service of the station, replace his equipment with prisoners' garb at one of the prison lockers, as per normal operating procedure. Before assigning a prisoner his ID, insert the ID into a prisoner management console and assign the prisoner a quota, based on the severity of his crime.
A single sheet of most materials produces five points for the prisoner, and points can be expected to be produced at a rate of about 100 per minute, though punishments as severe as forced labor should be reserved for serious crimes of sentences not less than five minutes long.
Once you have prepared the prisoner, place him in the secure northern half of the labor shuttle, and send him to the station. Once he meets his quota by feeding sheets to the stacker, he will be allowed to return to the station, and will be able to open the secure door to the prisoner release area.

In the case of dangerous prisoners, surveillance may be needed. To that end, there is a prisoner monitoring room on the mining station, equipped with a remote flasher and a lockdown button. The mine itself is patrolled by a securibot, so the nearby security records console can also be used to secure hostile prisoners on the mine." + infolang = /datum/language/common /obj/item/paper/guides/jobs/security/range name = "paper- Firing Range Instructions" info = "Directions:
First you'll want to make sure there is a target stake in the center of the magnetic platform. Next, take an aluminium target from the crates back there and slip it into the stake. Make sure it clicks! Next, there should be a control console mounted on the wall somewhere in the room.

This control console dictates the behaviors of the magnetic platform, which can move your firing target around to simulate real-world combat situations. From here, you can turn off the magnets or adjust their electromagnetic levels and magnetic fields. The electricity level dictates the strength of the pull - you will usually want this to be the same value as the speed. The magnetic field level dictates how far the magnetic pull reaches.

Speed and path are the next two settings. Speed is associated with how fast the machine loops through the designated path. Paths dictate where the magnetic field will be centered at what times. There should be a pre-fabricated path input already. You can enable moving to observe how the path affects the way the stake moves. To script your own path, look at the following key:


N: North
S: South
E: East
W: West
C: Center
R: Random (results may vary)
; or &: separators. They are not necessary but can make the path string better visible." + infolang = /datum/language/common //YOGS start /obj/item/paper/guides/jobs/security/paystand_setup name = "Setting up your Paystand Correctly" info = "Setting up your paystand
Step 1

Locate your department budget card.
Step 2
Scan your department budget card onto the paystand." + infolang = /datum/language/common //YOGS end /obj/item/paper/fluff/jobs/jobs name = "paper- 'Job Information'" info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
\nThe data will be in the following form.
\nGenerally lower ranking positions come first in this list.
\n
\nJob Name general access>lab access-engine access-systems access (atmosphere control)
\n\tJob Description
\nJob Duties (in no particular order)
\nTips (where applicable)
\n
\nResearch Assistant 1>1-0-0
\n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
\n1. Assist the researchers.
\n2. Clean up the labs.
\n3. Prepare materials.
\n
\nStaff Assistant 2>0-0-0
\n\tThis position assists the security officer in his duties. The staff assistants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
\n1. Patrol ship/Guard key areas
\n2. Assist security officer
\n3. Perform other security duties.
\n
\nTechnical Assistant 1>0-0-1
\n\tThis is yet another low level position. The technical assistant helps the engineer and the station\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
\n1. Assist Station technician and Engineers.
\n2. Perform general maintenance of station.
\n3. Prepare materials.
\n
\nMedical Assistant 1>1-0-0
\n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
\n1. Assist the medical personnel.
\n2. Update medical files.
\n3. Prepare materials for medical operations.
\n
\nResearch Technician 2>3-0-0
\n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
\n1. Inform superiors of research.
\n2. Perform research alongside of official researchers.
\n
\nDetective 3>2-0-0
\n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crime scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should store the evidence ly.
\n1. Perform crime-scene investigations/draw conclusions.
\n2. Store and catalogue evidence properly.
\n3. Testify to superiors/inquiries on findings.
\n
\nStation Technician 2>0-2-3
\n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
\n1. Maintain SS13 systems.
\n2. Repair equipment.
\n
\nAtmospheric Technician 3>0-0-4
\n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
\n1. Maintain atmosphere on SS13
\n2. Research atmospheres on the space station. (safely please!)
\n
\nEngineer 2>1-3-0
\n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
\n1. Upkeep the engine.
\n2. Prevent fires in the engine.
\n3. Maintain a safe orbit.
\n
\nMedical Researcher 2>5-0-0
\n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
\n1. Make sure the station is kept safe.
\n2. Research medical properties of materials studied of Space Station 13.
\n
\nScientist 2>5-0-0
\n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Plasma Technicians as plasma is the material they routinely handle.
\n1. Research plasma
\n2. Make sure all plasma is properly handled.
\n
\nMedical Doctor (Officer) 2>0-0-0
\n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
\n1. Heal wounded people.
\n2. Perform examinations of all personnel.
\n3. Monitor usage of medical equipment.
\n
\nSecurity Officer 3>0-0-0
\n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
\n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
\n1. Maintain order.
\n2. Assist others.
\n3. Repair structural problems.
\n
\nHead of Security 4>5-2-2
\n\tPeople assigned as Head of Security should issue orders to the security staff. They should\nalso carefully moderate the usage of all security equipment. All security matters should be reported to this person.
\n1. Oversee security.
\n2. Assign patrol duties.
\n3. Protect the station and staff.
\n
\nHead of Personnel 4>4-2-2
\n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. \nAlso they have the ability to assign jobs and access levels.
\n1. Assign duties.
\n2. Moderate personnel.
\n3. Moderate research.
\n
\nCaptain 5>5-5-5 (unrestricted station wide access)
\n\tThis is the highest position you can acquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
\n1. Assign all positions on SS13
\n2. Inspect the station for any problems.
\n3. Perform administrative duties.
\n" + infolang = /datum/language/common /obj/item/paper/fluff/jobs/mining/smelter_notice name = "paper- Smelting Operations Closed" info = "**NOTICE**

Smelting operations moved on-station.

Take your unrefined ore to the Redemption Machine in the Delivery Office to redeem points.

--SS13 Command" + infolang = /datum/language/common /obj/item/paper/fluff/jobs/security/court_judgement name = "paper- 'Judgement'" info = "For crimes against the station, the offender is sentenced to:
\n
\n" + infolang = /datum/language/common /obj/item/paper/fluff/jobs/toxins/chemical_info name = "paper- 'Chemical Information'" info = "Known Onboard Toxins:
\n\tGrade A Semi-Liquid Plasma:
\n\t\tHighly poisonous. You cannot sustain concentrations above 15 units.
\n\t\tA gas mask fails to filter plasma after 50 units.
\n\t\tWill attempt to diffuse like a gas.
\n\t\tFiltered by scrubbers.
\n\t\tThere is a bottled version which is very different
\n\t\t\tfrom the version found in canisters!
\n
\n\t\tWARNING: Highly Flammable. Keep away from heat sources
\n\t\texcept in an enclosed fire area!
\n\t\tWARNING: It is a crime to use this without authorization.
\nKnown Onboard Anti-Toxin:
\n\tAnti-Toxin Type 01P: Works against Grade A Plasma.
\n\t\tBest if injected directly into bloodstream.
\n\t\tA full injection is in every regular Med-Kit.
\n\t\tSpecial toxin Kits hold around 7.
\n
\nKnown Onboard Chemicals (other):
\n\tRejuvenation T#001:
\n\t\tEven 1 unit injected directly into the bloodstream
\n\t\t\twill cure unconscious and sleep toxins.
\n\t\tIf administered to a dying patient it will prevent
\n\t\t\tfurther damage for about units*3 seconds.
\n\t\t\tit will not cure them or allow them to be cured.
\n\t\tIt can be administered to a non-dying patient
\n\t\t\tbut the chemicals disappear just as fast.
\n\tMorphine T#054:
\n\t\t5 units will induce precisely 1 minute of sleep.
\n\t\t\tThe effect are cumulative.
\n\t\tWARNING: It is a crime to use this without authorization" + infolang = /datum/language/common /obj/item/paper/fluff/jobs/medical/hippocratic name = "paper- 'Hippocratic Oath'" @@ -85,10 +96,12 @@ If I do not violate this oath, may I enjoy life and art, respected while I live and remembered with affection thereafter. May I always act so as to preserve the finest traditions of my calling and may I long experience the joy of healing those who seek my help. "} + infolang = /datum/language/common + - /* - * Stations - */ +/* +* Stations +*/ /////////// CentCom @@ -96,18 +109,21 @@ /obj/item/paper/fluff/stations/centcom/disk_memo name = "memo" info = "GET DAT FUKKEN DISK" + infolang = /datum/language/codespeak /obj/item/paper/fluff/stations/centcom/broken_evac info = "Due to circumstances beyond our control, your Emergency Evacuation Shuttle is out of service.

We apologize for the inconvenience this may cause you.

Please enjoy the use of this complementary book.

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

Inspector,
There is an emergency shuttle arriving today.

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

CentCom Port Commissioner" - + infolang = /datum/language/common /////////// Lavaland /obj/item/paper/fluff/stations/lavaland/orm_notice name = "URGENT!" info = "A hastily written note has been scribbled here...

Please use the ore redemption machine in the cargo office for smelting. PLEASE!

--The Research Staff" + infolang = /datum/language/common From 2a3e81e63c46094deb4b8627200887c90b347e20 Mon Sep 17 00:00:00 2001 From: Gary Lafortune Date: Wed, 11 Dec 2019 13:11:34 -0600 Subject: [PATCH 8/8] Adds language to prewritten papers defined in /yogstation/code/ --- yogstation/code/modules/paperwork/paper.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/yogstation/code/modules/paperwork/paper.dm b/yogstation/code/modules/paperwork/paper.dm index cf8a208e8aef..e6a1f8ec7cc4 100644 --- a/yogstation/code/modules/paperwork/paper.dm +++ b/yogstation/code/modules/paperwork/paper.dm @@ -1,6 +1,7 @@ /obj/item/paper/crumpled/bloody/hippie name = "Diary: Day 71" info = " The text is written in shaky handwriting, and is barely readable.

Rose achieved enlightenment yesterday.

She didn't go as peacefully as she always said she would, so we had to give her a hand. We planned on giving her a... funeral of sorts by dumping her body outside, but we found out that when you've been stuck with no fuel for months, you'll do anything for a bite to eat. Her earthly remains didn't go to waste.

Fuel's running low. Not sure how long the rest of us will last.

I'm planning on giving myself a last ride with the sweet angel of ecstasy, but the others can't know.

The stars are so fucking beautiful out here, man." + infolang = /datum/language/common /obj/item/paper/scp_research name = "Research Notes: Objects 15-25" @@ -18,15 +19,19 @@ Security: Low
\ Info: Ocular gland extracted from AO-6 during experiment EX-56b. Highly aggressive. After breach 91-A subject was neutralized with a solution of poisons. Subject is to be injected with the solution every half-hour to keep it in a semi-comatose state. Solution recipe stored at Site 11-X archives.

\ The rest of the paper is covered in scribbles of strange symbols, made of dried blood." + infolang = /datum/language/common /obj/item/paper/crumpled/bloody/goattransport name = "Bloody Captains Note" info = " The text is written in shaky and rushed handwriting.

This is Captain John Lamario of the Goat Tech Industries Transport Vessel. If you are reading this, I am here to let you know that this ship has just been attacked by some weird goats with robes on their backs. They are currently attempting to break down my door. I dont think anyone else is left...

They are almost through the door. I dont know how they got on the ship! They just somehow teleported on... I bet the Animal Rights Consortium has something to do with this...

They are rushing in now. It seems I will have to end it here. If you're reading this, tell my wife I lov- The writing cuts off here covered in blood... " + infolang = /datum/language/common /obj/item/paper/gasstation_lore name = "EMPLOYEE NOTICE" info = "TO PREVENT LIQUIDATION OF YOUR TRADE OF \[HUMAN] LABOUR WITHIN ENTERPRISE 27, YOUR LABOUR REQUIREMENT HAS BEEN INCREASED TO \[ONE HUNDRED AND FIFTY SIX HOURS] WITHIN THIS WEEK. MAINTAIN \[MAXIMUM] WORK \[EFFICIENCY] AND REMEMBER HERE AT \[BRIGHTFUTURE PETROLEUM] OUR SLOGAN IS \[A MAN TODAY A ROBOT TOMORROW], HAVE A \[EFFICIENT] SHIFT. -S.I.G.E.L" + infolang = /datum/language/common /obj/item/paper/gasstation_lore_binary name = "01000101 01001101 01010000 01001100 01001111 01011001 01000101 01000101 00100000 01001110 01001111 01010100 01001001 01000011 01000101" info = "01010100 01001111 00100000 01010000 01010010 01000101 01010110 01000101 01001110 01010100 00100000 01001100 01001001 01010001 01010101 01001001 01000100 01000001 01010100 01001001 01001111 01001110 00100000 01001111 01000110 00100000 01011001 01001111 01010101 01010010 00100000 01010100 01010010 01000001 01000100 01000101 00100000 01001111 01000110 00100000 01011011 01001000 01010101 01001101 01000001 01001110 01011101 00100000 01001100 01000001 01000010 01001111 01010101 01010010 00100000 01010111 01001001 01010100 01001000 01001001 01001110 00100000 01000101 01001110 01010100 01000101 01010010 01010000 01010010 01001001 01010011 01000101 00100000 00110010 00110111 00101100 00100000 01011001 01001111 01010101 01010010 00100000 01001100 01000001 01000010 01001111 01010101 01010010 00100000 01010010 01000101 01010001 01010101 01001001 01010010 01000101 01001101 01000101 01001110 01010100 00100000 01001000 01000001 01010011 00100000 01000010 01000101 01000101 01001110 00100000 01001001 01001110 01000011 01010010 01000101 01000001 01010011 01000101 01000100 00100000 01010100 01001111 00100000 01011011 01001111 01001110 01000101 00100000 01001000 01010101 01001110 01000100 01010010 01000101 01000100 00100000 01000001 01001110 01000100 00100000 01000110 01001001 01000110 01010100 01011001 00100000 01010011 01001001 01011000 00100000 01001000 01001111 01010101 01010010 01010011 01011101 00100000 01010111 01001001 01010100 01001000 01001001 01001110 00100000 01010100 01001000 01001001 01010011 00100000 01010111 01000101 01000101 01001011 00101110 00100000 01001101 01000001 01001001 01001110 01010100 01000001 01001001 01001110 00100000 01011011 01001101 01000001 01011000 01001001 01001101 01010101 01001101 01011101 00100000 01010111 01001111 01010010 01001011 00100000 01011011 01000101 01000110 01000110 01001001 01000011 01001001 01000101 01001110 01000011 01011001 01011101 00100000 01000001 01001110 01000100 00100000 01010010 01000101 01001101 01000101 01001101 01000010 01000101 01010010 00100000 01001000 01000101 01010010 01000101 00100000 01000001 01010100 00100000 01011011 01000010 01010010 01001001 01000111 01001000 01010100 01000110 01010101 01010100 01010101 01010010 01000101 00100000 01010000 01000101 01010100 01010010 01001111 01001100 01000101 01010101 01001101 01011101 00100000 01001111 01010101 01010010 00100000 01010011 01001100 01001111 01000111 01000001 01001110 00100000 01001001 01010011 00100000 01011011 01000001 00100000 01001101 01000001 01001110 00100000 01010100 01001111 01000100 01000001 01011001 00100000 01000001 00100000 01010010 01001111 01000010 01001111 01010100 00100000 01010100 01001111 01001101 01001111 01010010 01010010 01001111 01010111 01011101 00101100 00100000 01001000 01000001 01010110 01000101 00100000 01000001 00100000 01011011 01000101 01000110 01000110 01001001 01000011 01001001 01000101 01001110 01010100 01011101 00100000 01010011 01001000 01001001 01000110 01010100 00101110 00100000 00101101 01010011 00101110 01001001 00101110 01000111 00101110 01000101 00101110 01001100 00100010" + infolang = /datum/language/common \ No newline at end of file