mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-12 00:20:42 +01:00
7f664eb1eb
Ports stickynotes from bay. They can be stuck to most surfaces, but have a much smaller character limit. Pads have been placed across the Horizon and can be ordered from Operations. Receipt paper and notepad paper was added for visual quality of life. Point of Sales now use receipt paper where applicable. Sprites were either created by myself, or modifications of baystation sprites from this PR: https://github.com/Baystation12/Baystation12/pull/23109 --------- Signed-off-by: CatsinHD <31459154+CatsinHD@users.noreply.github.com> Co-authored-by: VMSolidus <evilexecutive@gmail.com> Co-authored-by: FabianK3 <21039694+FabianK3@users.noreply.github.com> Co-authored-by: Wildkins <john.wildkins@gmail.com>
259 lines
10 KiB
Plaintext
259 lines
10 KiB
Plaintext
/obj/item/folder
|
|
name = "folder"
|
|
desc = "Holds loose sheets of paper and is a bureaucrat's best friend."
|
|
icon = 'icons/obj/bureaucracy.dmi'
|
|
icon_state = "folder"
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
drop_sound = 'sound/items/drop/paper.ogg'
|
|
pickup_sound = 'sound/items/pickup/paper.ogg'
|
|
|
|
var/can_write = FALSE
|
|
|
|
/obj/item/folder/blue
|
|
desc = "A blue folder."
|
|
icon_state = "folder_blue"
|
|
|
|
/obj/item/folder/sec
|
|
desc = "A gold and blue folder, specifically designed for the Internal Security Department."
|
|
icon_state = "folder_blue_gold"
|
|
|
|
/obj/item/folder/red
|
|
desc = "A red folder."
|
|
icon_state = "folder_red"
|
|
|
|
/obj/item/folder/yellow
|
|
desc = "A yellow folder."
|
|
icon_state = "folder_yellow"
|
|
|
|
/obj/item/folder/white
|
|
desc = "A white folder."
|
|
icon_state = "folder_white"
|
|
|
|
/obj/item/folder/purple
|
|
desc = "A purple folder, specifically designed for the Research Division facilities of the company."
|
|
icon_state = "folder_purple"
|
|
|
|
/obj/item/folder/update_icon()
|
|
ClearOverlays()
|
|
if(contents.len)
|
|
AddOverlays("folder_paper")
|
|
return
|
|
|
|
/obj/item/folder/attackby(obj/item/attacking_item, mob/user)
|
|
if(istype(attacking_item, /obj/item/paper) || istype(attacking_item, /obj/item/photo) || istype(attacking_item, /obj/item/paper_bundle) || istype(attacking_item, /obj/item/sample))
|
|
user.drop_from_inventory(attacking_item, src)
|
|
to_chat(user, SPAN_NOTICE("You put the [attacking_item] into \the [src]."))
|
|
update_icon()
|
|
else if(attacking_item.tool_behaviour == TOOL_PEN)
|
|
var/n_name = sanitizeSafe( tgui_input_text(user, "What would you like to label the folder?", "Folder Labelling", max_length = MAX_NAME_LEN), MAX_NAME_LEN )
|
|
if(Adjacent(user) && user.stat == 0)
|
|
name = "folder[(n_name ? "- '[n_name]'" : null)]"
|
|
return
|
|
|
|
/obj/item/folder/attack_self(mob/user as mob)
|
|
var/dat = ""
|
|
|
|
for(var/obj/item/paper/P in src)
|
|
dat += "[can_write ? "<A href='byond://?src=[REF(src)];write=[REF(P)]'>Write</A> " : ""]<A href='byond://?src=[REF(src)];remove=[REF(P)]'>Remove</A> <A href='byond://?src=[REF(src)];rename=[REF(P)]'>Rename</A> - <A href='byond://?src=[REF(src)];read=[REF(P)]'>[P.name]</A><BR>"
|
|
for(var/obj/item/photo/Ph in src)
|
|
dat += "<A href='byond://?src=[REF(src)];remove=[REF(Ph)]'>Remove</A> <A href='byond://?src=[REF(src)];rename=[REF(Ph)]'>Rename</A> - <A href='byond://?src=[REF(src)];look=[REF(Ph)]'>[Ph.name]</A><BR>"
|
|
for(var/obj/item/paper_bundle/Pb in src)
|
|
dat += "<A href='byond://?src=[REF(src)];remove=[REF(Pb)]'>Remove</A> <A href='byond://?src=[REF(src)];rename=[REF(Pb)]'>Rename</A> - <A href='byond://?src=[REF(src)];browse=[REF(Pb)]'>[Pb.name]</A><BR>"
|
|
for(var/obj/item/sample/Pf in src)
|
|
dat += "<A href='byond://?src=[REF(src)];remove=[REF(Pf)]'>Remove</A> - [Pf.name]<BR>"
|
|
user << browse(HTML_SKELETON_TITLE(name, dat), "window=folder")
|
|
onclose(user, "folder")
|
|
add_fingerprint(usr)
|
|
return
|
|
|
|
/obj/item/folder/Topic(href, href_list)
|
|
..()
|
|
if((usr.stat || usr.restrained()))
|
|
return
|
|
|
|
if(loc_check(usr))
|
|
|
|
if(href_list["remove"])
|
|
var/obj/item/P = locate(href_list["remove"])
|
|
if(P && (P.loc == src) && istype(P))
|
|
handle_remove(P, astype(usr, /mob))
|
|
else if(href_list["write"])
|
|
var/obj/item/paper/paper = locate(href_list["write"])
|
|
if(!istype(paper) || paper.loc != src)
|
|
return
|
|
var/obj/item/pen = usr.get_inactive_hand()
|
|
if(!pen || pen.tool_behaviour != TOOL_PEN)
|
|
pen = usr.get_active_hand()
|
|
if(pen?.tool_behaviour == TOOL_PEN)
|
|
paper.attackby(pen, usr)
|
|
else if(href_list["read"])
|
|
var/obj/item/paper/P = locate(href_list["read"])
|
|
if(P && (P.loc == src) && istype(P))
|
|
P.show_content(usr)
|
|
else if(href_list["look"])
|
|
var/obj/item/photo/P = locate(href_list["look"])
|
|
if(P && (P.loc == src) && istype(P))
|
|
P.show(usr)
|
|
else if(href_list["browse"])
|
|
var/obj/item/paper_bundle/P = locate(href_list["browse"])
|
|
if(P && (P.loc == src) && istype(P))
|
|
P.attack_self(usr)
|
|
onclose(usr, "[P.name]")
|
|
else if(href_list["rename"])
|
|
var/obj/item/O = locate(href_list["rename"])
|
|
|
|
if(O && (O.loc == src))
|
|
if(istype(O, /obj/item/paper))
|
|
var/obj/item/paper/to_rename = O
|
|
to_rename.rename()
|
|
|
|
else if(istype(O, /obj/item/photo))
|
|
var/obj/item/photo/to_rename = O
|
|
to_rename.rename()
|
|
|
|
else if(istype(O, /obj/item/paper_bundle))
|
|
var/obj/item/paper_bundle/to_rename = O
|
|
to_rename.rename()
|
|
|
|
//Update everything
|
|
attack_self(usr)
|
|
update_icon()
|
|
return
|
|
|
|
/obj/item/folder/proc/loc_check(var/atom/A)
|
|
if(loc == A)
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/obj/item/folder/proc/handle_remove(obj/item/P, mob/user)
|
|
user?.put_in_hands(P)
|
|
handle_post_remove()
|
|
|
|
/obj/item/folder/proc/handle_post_remove()
|
|
return
|
|
|
|
/obj/item/folder/blue/nka/Initialize()
|
|
. = ..()
|
|
for (var/I = 1 to 5)
|
|
new /obj/item/paper/nka_pledge(src)
|
|
|
|
/obj/item/folder/filled/Initialize()
|
|
. = ..()
|
|
for (var/I = 1 to 10)
|
|
new /obj/item/paper(src)
|
|
|
|
/obj/item/folder/embedded
|
|
name = "index"
|
|
can_write = TRUE
|
|
|
|
/obj/item/folder/embedded/loc_check(var/atom/A)
|
|
if(loc.loc.Adjacent(A))
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/obj/item/folder/embedded/handle_remove(obj/item/paper/P, mob/user)
|
|
. = ..()
|
|
if(istype(P, /obj/item/paper/notepad))
|
|
P.ripped = TRUE
|
|
playsound(src.loc, 'sound/items/poster_ripped.ogg', 25, 1)
|
|
P.update_icon()
|
|
|
|
/obj/item/folder/embedded/handle_post_remove()
|
|
if(!length(contents))
|
|
qdel(src)
|
|
|
|
/obj/item/folder/embedded/Destroy()
|
|
for(var/x in src)
|
|
qdel(x)
|
|
. = ..()
|
|
|
|
/obj/item/folder/envelope
|
|
name = "envelope"
|
|
desc = "A thick envelope. You can't see what's inside."
|
|
icon_state = "envelope_sealed"
|
|
var/sealed = TRUE
|
|
|
|
/obj/item/folder/envelope/update_icon()
|
|
if(sealed)
|
|
icon_state = "envelope_sealed"
|
|
else
|
|
icon_state = "envelope[contents.len > 0]"
|
|
|
|
/obj/item/folder/envelope/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
|
|
. = ..()
|
|
. += "The seal is [sealed ? "intact" : "broken"]."
|
|
|
|
/obj/item/folder/envelope/proc/sealcheck(user)
|
|
var/ripperoni = alert("Are you sure you want to break the seal on \the [src]?", "Confirmation","Yes", "No")
|
|
if(ripperoni == "Yes")
|
|
visible_message(SPAN_NOTICE("[user] breaks the seal on \the [src], and opens it."))
|
|
sealed = FALSE
|
|
update_icon()
|
|
return TRUE
|
|
|
|
/obj/item/folder/envelope/attack_self(mob/user)
|
|
if(sealed)
|
|
sealcheck(user)
|
|
return
|
|
else
|
|
..()
|
|
|
|
/obj/item/folder/envelope/attackby(obj/item/attacking_item, mob/user)
|
|
if(sealed)
|
|
sealcheck(user)
|
|
return
|
|
else
|
|
..()
|
|
|
|
/obj/item/folder/envelope/empty
|
|
sealed = FALSE
|
|
|
|
/obj/item/folder/envelope/empty/zat
|
|
name = "instructions envelope"
|
|
desc = "\
|
|
A small envelope with some warning words written in bold text on the front. \
|
|
It is all dusty and crumpled, like someone forgot about it a while ago.\
|
|
"
|
|
|
|
/obj/item/folder/envelope/zat
|
|
name = "leviathan zero-point artillery instructions"
|
|
desc = "A small envelope with 'SCC CONFIDENTIAL' written in bold text on the front."
|
|
|
|
/obj/item/folder/envelope/zat/Initialize()
|
|
. = ..()
|
|
var/obj/item/paper/R = new(src)
|
|
R.set_content("leviathan zero-point artillery instructions", "<table><cell><hr><small><center><img src=scclogo.png><br><b>Stellar Corporate Conglomerate<br> \
|
|
SCCV Horizon</b><hr><b>Form 0000<br> \
|
|
<large>Confidential Information Report</large></b></center><hr> \
|
|
<b>Classification Index:</b> <font color='red'>TOP SECRET</font>, protect at all costs <field><hr><b>Entrusted Personnel:</b> Command, Engineering<br> <field>\
|
|
<b>Subject Designation:</b> Leviathan Prototype Zero-Point Artillery <br><field> \
|
|
<b>Subject Specification:</b> The Leviathan-class Prototype Warp Emitter Artillery is the crowning achievement of the Chainlink's \
|
|
unified science and engineering arm. Nearly two-thousand tonnes and longer than fifty meters, the Leviathian is composed of two (2) arc batteries, \
|
|
six (6) hyper conductors, six (6) warp engine generators, four (4) warp field stabilizers, a thirty meter (30m) dampening rail-line, and a full targeting \
|
|
acquisition and power management array.<br><field> \
|
|
<b>Instructions:</b> In order to fire the Leviathan, the capacitors must first be coupled by lowering the activation lever. This coupling is, however, extremely energy intensive. \
|
|
Long term activation thus requires a hefty supply of electricity in the APC. Firing the Leviathan itself takes energy directly from the superconducting SMES specially built \
|
|
for the gun. Its firing cost is around 20 megawatts per shot, not counting power taken from the APC in idle mode.<br> \
|
|
To activate the Leviathan itself, two command staff must first couple the warp fields to the firing array by unlocking the safeties on the keycard authentication device. \
|
|
Once that is done, the key must be retrieved from its case in the Captain's office. It must then be placed in the activation terminal in the bridge. \
|
|
The key must then be twisted and, finally, the button to fire the Leviathan will be uncovered and it may be pressed.<field><br> \
|
|
<b>Subject Description:</b> The Leviathan's one and only intended purpose is to annihilate any single target \
|
|
that proves to be an existential threat to the SCCV Horizon and all of its valuable designs and crew. The weapon achieves this by pushing and weaponizing \
|
|
already understood warp drive technology to a scale only currently matched by phoron fusion bombs.<br> \
|
|
In layman's terms, an extreme amount of energy is at first used by several high-level warp generators, which instead of bending space around the ship, \
|
|
creates a \"warp funnel\" around the outer half of the weapon. Every bit of energy remaining is then fired out through the funnel, \
|
|
accelerating it into a powerful beam travelling at several times the speed of light. <br>No currently known hull nor shield configuration is able to withstand the attack: \
|
|
the beam is expected to inflict too much structural damage for any one vessel to continue fighting.<br> \
|
|
The power draw of a single shot is greater than a single jump operation into bluespace, meaning each use will leave the Horizon vulnerable to any other threats that remain.<br>\
|
|
To date, the prototype has not been tested against stars, planets, or other supermassive targets. While its use should be limited to catastrophic scenarios, \
|
|
the Horizon is expected to gather as much field data as possible throughout its journey.<br>")
|
|
|
|
//stamp the paper
|
|
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
|
|
stampoverlay.icon_state = "paper_stamp-leland_stamp"
|
|
if(!R.stamped)
|
|
R.stamped = new
|
|
R.stamped += /obj/item/stamp
|
|
R.overlays += stampoverlay
|
|
R.stamps += "<hr><i>This paper has been stamped as \"TOP SECRET\".</i>"
|