From 3c973816d1f400eeb83e53e5d449094a218e6d08 Mon Sep 17 00:00:00 2001
From: Artur Official Diploma Surprisingly, gravity isn't that hard to make! All you have to do is inject deadly radioactive minerals into a ball of
- energy and you have yourself gravity! You can turn the machine on or off when required but you must remember that the generator
- will EMIT RADIATION when charging or discharging, you can tell it is charging or discharging by the noise it makes, so please WEAR PROTECTIVE CLOTHING. Don't panic! The gravity generator was designed to be easily repaired. If, somehow, the sturdy framework did not survive then
- please proceed to panic; otherwise follow these steps.New Assignment
You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect the said trash.
There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then deliver these minerals to cargo or engineering. You are our last hope for a clean station, do not screw this up!"
+ info = "_New Assignment_\n\n You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect the said trash.
There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then deliver these minerals to cargo or engineering. You are our last hope for a clean station, do not screw this up!"
#undef SAFETY_COOLDOWN
diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm
index 5e39997872..ceabb57995 100644
--- a/code/game/machinery/telecomms/computers/message.dm
+++ b/code/game/machinery/telecomms/computers/message.dm
@@ -456,7 +456,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 9b114829e1..7d3837ae68 100644
--- a/code/modules/detectivework/scanner.dm
+++ b/code/modules/detectivework/scanner.dm
@@ -18,6 +18,7 @@
var/list/log = list()
var/range = 8
var/view_check = TRUE
+ var/forensicPrintCount = 0
actions_types = list(/datum/action/item_action/displayDetectiveScanResults)
/datum/action/item_action/displayDetectiveScanResults
@@ -42,13 +43,16 @@
/obj/item/detective_scanner/proc/PrintReport()
// Create our paper
var/obj/item/paper/P = new(get_turf(src))
- P.name = "paper- 'Scanner Report'"
- P.info = "
"
- P.info += jointext(log, "
")
- P.info += "
Notes:
"
- P.info_links = P.info
- P.updateinfolinks()
+ //This could be a global count like sec and med record printouts. See GLOB.data_core.medicalPrintCount AKA datacore.dm
+ var frNum = ++forensicPrintCount
+
+ P.name = text(" FR-[] 'Forensic Record'", frNum)
+ var/list/text = new
+ text+= text("* _Forensic Record - (FR-[])_", frNum)
+ text += log.Join("\n")
+ text += "* _Notes:_"
+ P.setText(text.Join("\n"))
if(ismob(loc))
var/mob/M = loc
M.put_in_hands(P)
@@ -216,4 +220,4 @@
return
to_chat(user, "Scanner Report")
for(var/iterLog in log)
- to_chat(user, iterLog)
\ No newline at end of file
+ to_chat(user, iterLog)
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index 3fac417605..0aa583c88f 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -222,7 +222,7 @@
/obj/item/paper/fluff/holodeck/trek_diploma
name = "paper - Starfleet Academy Diploma"
- info = {"Starfleet Academy
[stamps]"
- else if(istype(target.get_active_held_item(), /obj/item/pen) | istype(target.get_active_held_item(), /obj/item/toy/crayon))
- return "
[stamps]"
- else
- return "
[stamps]"
+ update_icon_state()
+
-/obj/item/paper/oui_canview(mob/target)
- if(check_rights_for(target.client, R_FUN)) //Allows admins to view faxes
- return TRUE
- if(isAI(target))
- force_stars = TRUE
- return TRUE
- if(iscyborg(target))
- return get_dist(src, target) < 2
- return ..()
-*/
/obj/item/paper/update_icon_state()
if(resistance_flags & ON_FIRE)
icon_state = "paper_onfire"
@@ -87,13 +103,10 @@
return
icon_state = "paper"
-
-/obj/item/paper/examine(mob/user)
- . = ..()
- . += "Alt-click to fold it."
-
-/obj/item/paper/proc/show_content(mob/user)
- user.examinate(src)
+/obj/item/paper/ui_base_html(html)
+ /// This might change in a future PR
+ var/datum/asset/spritesheet/assets = get_asset_datum(/datum/asset/spritesheet/simple/paper)
+ . = replacetext(html, "", assets.css_tag())
/obj/item/paper/verb/rename()
set name = "Rename paper"
@@ -113,195 +126,62 @@
if((loc == usr && usr.stat == CONSCIOUS))
name = "paper[(n_name ? text("- '[n_name]'") : null)]"
add_fingerprint(usr)
- //ui.render_all()
+
/obj/item/paper/suicide_act(mob/user)
user.visible_message("[user] scratches a grid on [user.p_their()] wrist with the paper! It looks like [user.p_theyre()] trying to commit sudoku...")
return (BRUTELOSS)
+/// ONLY USED FOR APRIL FOOLS
+
/obj/item/paper/proc/reset_spamflag()
spam_flag = FALSE
/obj/item/paper/attack_self(mob/user)
- show_content(user)
+ readonly = TRUE /// Assume we are just reading it
if(rigged && (SSevents.holidays && SSevents.holidays[APRIL_FOOLS]))
if(!spam_flag)
spam_flag = TRUE
- playsound(loc, 'sound/items/bikehorn.ogg', 50, 1)
+ playsound(loc, 'sound/items/bikehorn.ogg', 50, TRUE)
addtimer(CALLBACK(src, .proc/reset_spamflag), 20)
-
-/obj/item/paper/attack_ai(mob/living/silicon/ai/user)
- show_content(user)
-
-/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
-
- if(links)
- laststart = istart + length(info_links[istart])
- else
- laststart = istart + length(info[istart])
- locid++
- if(locid == id)
- var/iend = 1
- if(links)
- iend = findtext(info_links, "", istart)
- else
- iend = findtext(info, "", istart)
-
- //textindex = istart+26
- textindex = iend
- break
-
- 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"
- //ui.render_all()
+ . = ..()
/obj/item/paper/proc/clearpaper()
+ finalized = FALSE
info = null
stamps = null
LAZYCLEARLIST(stamped)
cut_overlays()
- updateinfolinks()
- update_icon()
+ update_icon_state()
-/obj/item/paper/proc/parsepencode(t, obj/item/pen/P, mob/user, iscrayon = 0)
- if(length(t) < 1) //No input means nothing needs to be parsed
- return
-
- t = parsemarkdown(t, user, iscrayon)
-
- if(!iscrayon)
- t = "[t]"
- else
- 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
-
-/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
- var/laststart = 1
- while(fields < 15)
- var/i = findtext(info, "", laststart)
- if(i == 0)
- break
- laststart = i+1
- fields++
- updateinfolinks()
-
-
-/obj/item/paper/proc/openhelp(mob/user)
- user << browse({"
-
-
-
- # text : Defines a header.
- |text| : Centers the text.
- **text** : Makes the text bold.
- *text* : Makes the text italic.
- ^text^ : Increases the size of the text.
- %s : Inserts a signature of your name in a foolproof way.
- %f : Inserts an invisible field which lets you start type from there. Useful for forms.
-
-
- ((text)) : Decreases the size of the text.
- * item : An unordered list item.
- * item: An unordered list child item.
- --- : Adds a horizontal rule.
- "}, "window=paper_help")
-
-
-/obj/item/paper/Topic(href, href_list)
- ..()
- var/literate = usr.is_literate()
- if(!usr.canUseTopic(src, BE_CLOSE, literate))
- return
-
- if(href_list["help"])
- 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
- var/obj/item/i = usr.get_active_held_item() //Check to see if he still got that darn pen, also check if he's using a crayon or pen.
- var/iscrayon = 0
- if(!istype(i, /obj/item/pen))
- if(!istype(i, /obj/item/toy/crayon))
- return
- iscrayon = 1
-
- 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
-
- 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.
- else
- info += t // Oh, he wants to edit to the end of the file, let him.
- updateinfolinks()
- show_content(usr)
- update_icon()
+/obj/item/paper/can_interact(mob/user)
+ if(!..())
+ return FALSE
+ if(resistance_flags & ON_FIRE) /// Are we on fire? Hard ot read if so
+ return FALSE
+ if(user.is_blind()) /// Even harder to read if your blind...braile? humm
+ return FALSE
+ return user.can_read(src) // checks if the user can read.
/obj/item/paper/attackby(obj/item/P, mob/living/carbon/human/user, params)
- ..()
-
- if(resistance_flags & ON_FIRE)
- return
-
- if(is_blind(user))
- return
-
+ readonly = TRUE /// Assume we are just reading it
if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon))
- if(user.is_literate())
- show_content(user)
+ if(finalized)
+ to_chat(user, "This sheet of paper has already been written too!")
return
+ readonly = FALSE /// Nope we are going to write stuff
+ /// should a crayon be in the same subtype as a pen? How about a brush or charcoal?
+ if(istype(P, /obj/item/pen))
+ var/obj/item/pen/PEN = P
+ pen_color = PEN.colour
else
- to_chat(user, "You don't know how to read or write.")
- return
-
+ var/obj/item/toy/crayon/PEN = P
+ pen_color = PEN.crayon_color
+ ui_interact(user)
+ return
else if(istype(P, /obj/item/stamp))
if(!in_range(src, user))
@@ -319,8 +199,8 @@
add_overlay(stampoverlay)
to_chat(user, "You stamp the paper with your rubber stamp.")
- //ui.render_all()
+ return /// Normaly you just stamp, you don't need to read the thing
if(P.get_temperature())
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10))
user.visible_message("[user] accidentally ignites [user.p_them()]self!", \
@@ -337,19 +217,62 @@
user.visible_message("[user] lights [src] ablaze with [P]!", "You light [src] on fire!")
fire_act()
-
- add_fingerprint(user)
+ . = ..()
/obj/item/paper/fire_act(exposed_temperature, exposed_volume)
..()
if(!(resistance_flags & FIRE_PROOF))
- icon_state = "paper_onfire"
+ add_overlay("paper_onfire_overlay")
info = "[stars(info)]"
/obj/item/paper/extinguish()
..()
- update_icon()
+ cut_overlay("paper_onfire_overlay")
+
+/obj/item/paper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
+ if(!ui)
+ var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/simple/paper)
+ assets.send(user)
+ /// The x size is because we double the width for the editor
+ ui = new(user, src, ui_key, "PaperSheet", name, 400, 600, master_ui, state)
+ ui.set_autoupdate(FALSE)
+ ui.open()
+
+/obj/item/paper/proc/ui_update()
+ var/datum/tgui/ui = SStgui.try_update_ui(usr, src, "main");
+ if(ui)
+ ui.update()
+
+/obj/item/paper/ui_data(mob/user)
+ var/list/data = list()
+ data["text"] = info
+ data["paper_state"] = icon_state /// TODO: show the sheet will bloodied or crinkling
+ data["pen_color"] = pen_color
+ data["paper_color"] = color || "white" // color might not be set
+ data["edit_sheet"] = readonly || finalized ? FALSE : TRUE
+ /// data["stamps_info"] = list(stamp_info)
+ data["stamps"] = stamps
+ return data
+
+
+/obj/item/paper/ui_act(action, params)
+ if(..())
+ return
+ switch(action)
+ if("save")
+ var/in_paper = params["text"]
+ if(length(in_paper) > 0 && length(in_paper) < 1000) // Sheet must have less than 1000 charaters
+ info = in_paper
+ finalized = TRUE // once you have writen to a sheet you cannot write again
+ to_chat(usr, "You have finished your paper masterpiece!");
+ ui_update()
+ else
+ to_chat(usr, pick("Writing block strikes again!", "You forgot to write anthing!"))
+ ui_update()
+ update_icon()
+ . = TRUE
/*
* Construction paper
@@ -374,9 +297,8 @@
icon_state = "scrap"
slot_flags = null
-/obj/item/paper/crumpled/ComponentInitialize()
- . = ..()
- AddElement(/datum/element/update_icon_blocker)
+/obj/item/paper/crumpled/update_icon_state()
+ return
/obj/item/paper/crumpled/bloody
icon_state = "scrap_bloodied"
diff --git a/code/modules/paperwork/paper_premade.dm b/code/modules/paperwork/paper_premade.dm
index 23c8d47323..414026924a 100644
--- a/code/modules/paperwork/paper_premade.dm
+++ b/code/modules/paperwork/paper_premade.dm
@@ -4,7 +4,49 @@
/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!"
+ info = {"
+Alert Levels:
+* Blue - Emergency
+ * Caused by fire
+ * Caused by manual interaction
+ * Action: Close all fire doors. These can only be opened by resetting the alarm
+* Red- Ejection/Self Destruct
+ * Caused by module operating computer.
+ * Action: After the specified time the module will eject completely.
+Engine Maintenance Instructions:
+1. Shut off ignition systems:
+2. Activate internal power
+3. Activate orbital balance matrix
+4. Remove volatile liquids from area
+5. Wear a fire suit
+6. After Decontaminate Visit medical examiner
+Toxin Laboratory Procedure:
+1. Wear a gas mask regardless
+2. Get an oxygen tank.
+3. Activate internal atmosphere
+4. After Decontaminate Visit medical examiner
+Disaster Procedure:
+Fire:
+1. Activate sector fire alarm.
+2. Move to a safe area.
+3. Get a fire suit
+* After:
+ 1. Assess Damage
+ 2. Repair damages
+ 3. If needed, Evacuate
+Meteor Shower:
+1. Activate fire alarm
+2. Move to the back of ship
+* After
+ 1. Repair damage
+ 2. If needed, Evacuate
+Accidental Reentry:
+1. Activate fire alarms in front of ship.
+2. Move volatile matter to a fire proof area!
+3. Get a fire suit.
+4. Stay secure until an emergency ship arrives.
+5. If ship does not arrive-Evacuate to a nearby safe area!
+"};
/obj/item/paper/fluff/shuttles/daniel
info = "i love daniel
daniel is my best friend
you are tearing me apart elise"
@@ -150,7 +192,7 @@
/obj/item/paper/fluff/cogstation/mime
name = "Au futur Mime"
- info = "Toutes mes excuses pour toute mauvaise grammaire, je ne suis pas un haut-parleur naturel Français et a dû utiliser NanoTranslate. Bien que vous puissiez être mécontent de l’emplacement de votre bureau, s’il vous plaît comprendre que c’était le seul endroit où nous pourrions le mettre sans problèmes de sécurité et/ou CentClown se plaindre à ce sujet. Nous nous excusons également pour l’absence d’une zone de performance dédiée, mais nous espérons que vous accorder un accès à l’entretien compensera.
\n
\n-C. Donnelly
\n
\nAnalyste Architectural"
+ info = "Toutes mes excuses pour toute mauvaise grammaire, je ne suis pas un haut-parleur naturel Fran�ais et a d� utiliser NanoTranslate. Bien que vous puissiez �tre m�content de l�emplacement de votre bureau, s�il vous pla�t comprendre que c��tait le seul endroit o� nous pourrions le mettre sans probl�mes de s�curit� et/ou CentClown se plaindre � ce sujet. Nous nous excusons �galement pour l�absence d�une zone de performance d�di�e, mais nous esp�rons que vous accorder un acc�s � l�entretien compensera.
\n
\n-C. Donnelly
\n
\nAnalyste Architectural"
/obj/item/paper/fluff/cogstation/bsrb
name = "Message from the NTBSRB"
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index b8bcbedbbe..5135e55922 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -85,9 +85,8 @@
P = new papertype(src)
if(SSevents.holidays && SSevents.holidays[APRIL_FOOLS])
if(prob(30))
- P.info = "HONK HONK HONK HONK HONK HONK HONK
HOOOOOOOOOOOOOOOOOOOOOONK
APRIL FOOLS"
+ P.info = "*HONK HONK HONK HONK HONK HONK HONK
HOOOOOOOOOOOOOOOOOOOOOONK*\n*APRIL FOOLS*\n"
P.rigged = 1
- P.updateinfolinks()
P.add_fingerprint(user)
P.forceMove(user.loc)
diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm
index a9baf60c0c..6a261c5c17 100644
--- a/code/modules/paperwork/paperplane.dm
+++ b/code/modules/paperwork/paperplane.dm
@@ -122,11 +122,12 @@
eyes.applyOrganDamage(rand(6,8))
H.DefaultCombatKnockdown(40)
H.emote("scream")
-
+
+/* Starts an infinite loop
/obj/item/paper/examine(mob/user)
. = ..()
. += "Alt-click [src] to fold it into a paper plane."
-
+*/
/obj/item/paper/AltClick(mob/living/carbon/user, obj/item/I)
. = ..()
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user), NO_TK))
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 8db531aa5e..19aaa43859 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -31,7 +31,7 @@
/obj/machinery/photocopier/ui_interact(mob/user)
. = ..()
- var/dat = "Photocopier
"
+ var/list/dat = list("Photocopier
")
if(copy || photocopy || doccopy || (ass && (ass.loc == src.loc)))
dat += "Remove Paper
"
if(toner)
@@ -48,7 +48,7 @@
dat += "Current toner level: [toner]"
if(!toner)
dat +="
Please insert a new toner cartridge!"
- user << browse(dat, "window=copier")
+ user << browse(dat.Join(""), "window=copier")
onclose(user, "copier")
/obj/machinery/photocopier/Topic(href, href_list)
@@ -65,29 +65,18 @@
if(C)
copy_as_paper = 0
if(copy_as_paper)
- var/obj/item/paper/c = new /obj/item/paper (loc)
+ var/obj/item/paper/c
if(length(copy.info) > 0) //Only print and add content if the copied doc has words on it
+ c = copy.copy(loc)
if(toner > 10) //lots of toner, make it dark
- c.info = ""
+ c.pen_color = "#101010"
else //no toner? shitty copies for you!
- c.info = ""
- var/copied = copy.info
- copied = replacetext(copied, ""
- 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()
- c.copy_overlays(copy, TRUE)
+ c.pen_color = "#808080"
toner--
+ else
+ c = new(loc) // shoot out blank sheet of paper
busy = TRUE
- sleep(15)
- busy = FALSE
+ addtimer(CALLBACK(src, .proc/reset_busy), 1.5 SECONDS)
else
break
updateUsrDialog()
@@ -96,8 +85,7 @@
if(toner >= 5 && !busy && photocopy) //Was set to = 0, but if there was say 3 toner left and this ran, you would get -2 which would be weird for ink
new /obj/item/photo (loc, photocopy.picture.Copy(greytoggle == "Greyscale"? TRUE : FALSE))
busy = TRUE
- sleep(15)
- busy = FALSE
+ addtimer(CALLBACK(src, .proc/reset_busy), 1.5 SECONDS)
else
break
else if(doccopy)
@@ -106,40 +94,35 @@
new /obj/item/documents/photocopy(loc, doccopy)
toner-= 6 // the sprite shows 6 papers, yes I checked
busy = TRUE
- sleep(15)
- busy = FALSE
+ addtimer(CALLBACK(src, .proc/reset_busy), 1.5 SECONDS)
else
break
updateUsrDialog()
else if(ass) //ASS COPY. By Miauw
for(var/i = 0, i < copies, i++)
var/icon/temp_img
- if(ishuman(ass) && (ass.get_item_by_slot(SLOT_W_UNIFORM) || ass.get_item_by_slot(SLOT_WEAR_SUIT)))
+ if(ishuman(ass) && (ass.get_item_by_slot(ITEM_SLOT_ICLOTHING) || ass.get_item_by_slot(ITEM_SLOT_OCLOTHING)))
to_chat(usr, "You feel kind of silly, copying [ass == usr ? "your" : ass][ass == usr ? "" : "\'s"] ass with [ass == usr ? "your" : "[ass.p_their()]"] clothes on." )
break
else if(toner >= 5 && !busy && check_ass()) //You have to be sitting on the copier and either be a xeno or a human without clothes on.
if(isalienadult(ass) || istype(ass, /mob/living/simple_animal/hostile/alien)) //Xenos have their own asses, thanks to Pybro.
temp_img = icon('icons/ass/assalien.png')
else if(ishuman(ass)) //Suit checks are in check_ass
- var/mob/living/carbon/human/H = ass
- if(H.dna.features["body_model"] == FEMALE)
- temp_img = icon('icons/ass/assfemale.png')
- else
- temp_img = icon('icons/ass/assmale.png')
+ temp_img = icon(ass.gender == FEMALE ? 'icons/ass/assfemale.png' : 'icons/ass/assmale.png')
else if(isdrone(ass)) //Drones are hot
temp_img = icon('icons/ass/assdrone.png')
else
break
- var/obj/item/photo/p = new /obj/item/photo (loc)
- p.pixel_x = rand(-10, 10)
- p.pixel_y = rand(-10, 10)
- p.picture = new(null, "You see [ass]'s ass on the photo.", temp_img)
- p.picture.psize_x = 128
- p.picture.psize_y = 128
- p.update_icon()
- toner -= 5
busy = TRUE
sleep(15)
+ var/obj/item/photo/p = new /obj/item/photo (loc)
+ var/datum/picture/toEmbed = new(name = "[ass]'s Ass", desc = "You see [ass]'s ass on the photo.", image = temp_img)
+ p.pixel_x = rand(-10, 10)
+ p.pixel_y = rand(-10, 10)
+ toEmbed.psize_x = 128
+ toEmbed.psize_y = 128
+ p.set_picture(toEmbed, TRUE, TRUE)
+ toner -= 5
busy = FALSE
else
break
@@ -179,8 +162,7 @@
photo.pixel_y = rand(-10, 10)
toner -= 5 //AI prints color pictures only, thus they can do it more efficiently
busy = TRUE
- sleep(15)
- busy = FALSE
+ addtimer(CALLBACK(src, .proc/reset_busy), 1.5 SECONDS)
updateUsrDialog()
else if(href_list["colortoggle"])
if(greytoggle == "Greyscale")
@@ -189,9 +171,13 @@
greytoggle = "Greyscale"
updateUsrDialog()
+/obj/machinery/photocopier/proc/reset_busy()
+ busy = FALSE
+ updateUsrDialog()
+
/obj/machinery/photocopier/proc/do_insertion(obj/item/O, mob/user)
O.forceMove(src)
- to_chat(user, "You insert [O] into [src].")
+ to_chat(user, "You insert [O] into [src].")
flick("photocopier1", src)
updateUsrDialog()
@@ -256,10 +242,10 @@
return ..()
/obj/machinery/photocopier/obj_break(damage_flag)
- if(!(flags_1 & NODECONSTRUCT_1))
- if(toner > 0)
- new /obj/effect/decal/cleanable/oil(get_turf(src))
- toner = 0
+ . = ..()
+ if(. && toner > 0)
+ new /obj/effect/decal/cleanable/oil(get_turf(src))
+ toner = 0
/obj/machinery/photocopier/MouseDrop_T(mob/target, mob/user)
check_ass() //Just to make sure that you can re-drag somebody onto it after they moved off.
@@ -267,7 +253,7 @@
return
src.add_fingerprint(user)
if(target == user)
- user.visible_message("[user] starts climbing onto the photocopier!", "You start climbing onto the photocopier...")
+ user.visible_message("[user] starts climbing onto the photocopier!", "You start climbing onto the photocopier...")
else
user.visible_message("[user] starts putting [target] onto the photocopier!", "You start putting [target] onto the photocopier...")
@@ -276,7 +262,7 @@
return
if(target == user)
- user.visible_message("[user] climbs onto the photocopier!", "You climb onto the photocopier.")
+ user.visible_message("[user] climbs onto the photocopier!", "You climb onto the photocopier.")
else
user.visible_message("[user] puts [target] onto the photocopier!", "You put [target] onto the photocopier.")
@@ -302,7 +288,7 @@
updateUsrDialog()
return 0
else if(ishuman(ass))
- if(!ass.get_item_by_slot(SLOT_W_UNIFORM) && !ass.get_item_by_slot(SLOT_WEAR_SUIT))
+ if(!ass.get_item_by_slot(ITEM_SLOT_ICLOTHING) && !ass.get_item_by_slot(ITEM_SLOT_OCLOTHING))
return 1
else
return 0
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index d7513cf572..935af51b93 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -394,16 +394,13 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
// Misc
/obj/item/paper/guides/jobs/engi/gravity_gen
- name = "paper- 'Generate your own gravity!'"
- info = {"Gravity Generator Instructions For Dummies
-
- It blew up!
-
-
"}
+ info = {"
+# Gravity Generator Instructions For Dummies
+Surprisingly, gravity isn't that hard to make! All you have to do is inject deadly radioactive minerals into a ball of energy and you have yourself gravity! You can turn the machine on or off when required but you must remember that the generator will EMIT RADIATION when charging or discharging, you can tell it is charging or discharging by the noise it makes, so please WEAR PROTECTIVE CLOTHING.
At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.
You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!
Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.
Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.
That's all to it, be safe, be green!
" + info = {" +# Welcome! +At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array. +You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker. +Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.
That's all to it, be safe, be green!
+"}
#undef SOLAR_GEN_RATE
#undef OCCLUSION_DISTANCE
diff --git a/code/modules/ruins/spaceruin_code/DJstation.dm b/code/modules/ruins/spaceruin_code/DJstation.dm
index 29814d8c1f..ace32b694d 100644
--- a/code/modules/ruins/spaceruin_code/DJstation.dm
+++ b/code/modules/ruins/spaceruin_code/DJstation.dm
@@ -2,4 +2,20 @@
/obj/item/paper/fluff/ruins/djstation
name = "paper - 'DJ Listening Outpost'"
- info = "Welcome new owner!
You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio frequencies. Here is a step by step guide to start listening in on those saucy radio channels:
'+(n?e:H(e,!0))+"\n":""+(n?e:H(e,!0))+"\n"},t.blockquote=function(e){return"\n"+e+"\n"},t.html=function(e){return e},t.heading=function(e,t,n,o){return this.options.headerIds?"
"+e+"
\n"},t.table=function(e,t){return t&&(t=""+t+""),""+e+""},t.br=function(){return this.options.xhtml?""+Z(l.message+"",!0)+"";throw l}}return ne.options=ne.setOptions=function(e){return X(ne.defaults,e),ee(ne.defaults),ne},ne.getDefaults=J,ne.defaults=te,ne.use=function(e){var t=X({},e);if(e.renderer&&function(){var n=ne.defaults.renderer||new U,o=function(t){var o=n[t];n[t]=function(){for(var r=arguments.length,a=new Array(r),i=0;i