Skip to content

Commit

Permalink
Paper Scanner Addition (#9299)
Browse files Browse the repository at this point in the history
    Added a paper scanner device that can scan paper and paper bundles and convert them into data files.
  • Loading branch information
Geevies authored Jul 15, 2020
1 parent 319d5ab commit 7b37743
Show file tree
Hide file tree
Showing 7 changed files with 292 additions and 135 deletions.
1 change: 1 addition & 0 deletions aurorastation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -2133,6 +2133,7 @@
#include "code\modules\modular_computers\hardware\portable_hard_drive_presets.dm"
#include "code\modules\modular_computers\hardware\processor_unit.dm"
#include "code\modules\modular_computers\hardware\tesla_link.dm"
#include "code\modules\modular_computers\items\paper_scanner.dm"
#include "code\modules\modular_computers\NTNet\NTNet.dm"
#include "code\modules\modular_computers\NTNet\NTNet_relay.dm"
#include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm"
Expand Down
95 changes: 95 additions & 0 deletions code/modules/modular_computers/items/paper_scanner.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
/obj/item/paper_scanner
name = "paper scanner"
desc = "A simple device that can be used to scan paper or paper bundles in order to digitize them."
desc_info = "Alt-click it while it's in one of your hands to eject the portable drive. Click paper or a paper bundle with it to digitize it and store it in the inserted drive."
icon = 'icons/obj/devices/paperscanner.dmi'
icon_state = "paperscanner"
item_state = "paperscanner"
contained_sprite = TRUE
var/obj/item/computer_hardware/hard_drive/portable/drive

/obj/item/paper_scanner/Initialize(mapload, ...)
. = ..()
drive = new /obj/item/computer_hardware/hard_drive/portable(src)
update_icon()

/obj/item/paper_scanner/update_icon()
cut_overlays()
if(drive)
add_overlay("paperscanner-drive")

/obj/item/paper_scanner/AltClick(mob/living/carbon/user)
if(!drive)
to_chat(user, SPAN_WARNING("\The [src] doesn't have a drive installed."))
return
if(!istype(user))
to_chat(user, SPAN_WARNING("You're too simple to work \the [src]."))
return
if(user.l_hand == src || user.r_hand == src)
to_chat(user, SPAN_NOTICE("You eject \the [drive]."))
user.put_in_hands(drive)
drive = null
update_icon()
else
to_chat(user, SPAN_WARNING("You must be holding \the [src] in one of your hands before you can eject a drive."))

/obj/item/paper_scanner/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/computer_hardware/hard_drive/portable))
if(drive)
to_chat(user, SPAN_WARNING("\The [src] already has a drive installed!"))
return
to_chat(user, SPAN_NOTICE("You insert \the [W] into \the [src]."))
user.drop_from_inventory(W, src)
drive = W
update_icon()
else
..()

/obj/item/paper_scanner/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
if(proximity_flag && (istype(target, /obj/item/paper) || istype(target, /obj/item/paper_bundle)))
do_scan(target, user)

/obj/item/paper_scanner/proc/do_scan(var/obj/item/target, var/mob/user)
if(!drive)
to_chat(user, SPAN_WARNING("\The [src] doesn't have a drive installed."))
return

var/list/pages_to_scan = list()
var/obj/item/paper/P = target
var/obj/item/paper_bundle/PB = target

if(istype(P))
if(!P.info)
to_chat(user, SPAN_WARNING("\The [P] doesn't have any information on it."))
return
pages_to_scan += P
else if(istype(PB))
var/has_info = FALSE
for(var/obj/item/paper/page in PB.pages)
if(page.info)
pages_to_scan += page
has_info = TRUE
if(!has_info)
to_chat(user, SPAN_WARNING("\The [PB] doesn't have any information in it."))
return

if(!length(pages_to_scan))
return

user.visible_message("<b>[user]</b> starts making a scan of \the [target]...", SPAN_NOTICE("You start making a scan of \the [target]..."), range = 3)
if(do_after(user, 30 * length(pages_to_scan), TRUE, target))
if(!drive)
to_chat(user, SPAN_WARNING("\The [src] doesn't have a drive installed."))
return
user.visible_message("<b>[user]</b> makes a scan of \the [target].", SPAN_NOTICE("You make a scan of \the [target]."), range = 3)
var/datum/computer_file/data/F = new /datum/computer_file/data(drive)
F.filename = target.name != initial(target.name) ? "[target.name] ([worldtime2text()] - [time2text(world.time, "Month DD")])" : "Digital Paper ([worldtime2text()] - [time2text(world.time, "Month DD")])"
F.filetype = "TXT"
var/data_to_save = ""
for(var/thing in pages_to_scan)
var/obj/item/paper/page = thing
data_to_save += page.info
data_to_save += "\[br\]"
F.stored_data = data_to_save
if(!drive.store_file(F))
to_chat(usr, SPAN_WARNING("\The [drive] does not have enough space to store the latest scanned file."))
3 changes: 2 additions & 1 deletion code/modules/paperwork/paper_bundle.dm
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo))
insert_sheet_at(user, pages.len+1, W)
amount++
attack_self(usr) //Update the browsed page.

// burning
else if(istype(W, /obj/item/flame))
Expand All @@ -43,6 +44,7 @@
amount++

to_chat(user, "<span class='notice'>You add \the [W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name].</span>")
attack_self(usr) //Update the browsed page.
qdel(W)
else
if(istype(W, /obj/item/tape_roll))
Expand All @@ -53,7 +55,6 @@
P.attackby(W, user)

update_icon()
attack_self(usr) //Update the browsed page.
add_fingerprint(usr)
return

Expand Down
6 changes: 6 additions & 0 deletions html/changelogs/geeves-paper_scanner.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
author: Geeves

delete-after: True

changes:
- rscadd: "Added a paper scanner device that can scan paper and paper bundles and convert them into data files."
Binary file added icons/obj/devices/paperscanner.dmi
Binary file not shown.
49 changes: 48 additions & 1 deletion maps/aurora/aurora-4_mainlevel.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -12594,6 +12594,7 @@
dir = 9
},
/obj/structure/table/reinforced,
/obj/item/paper_scanner,
/turf/simulated/floor/tiled,
/area/bridge)
"awV" = (
Expand Down Expand Up @@ -14476,6 +14477,7 @@
req_access = list(7)
},
/obj/effect/floor_decal/corner_wide/mauve/full,
/obj/item/paper_scanner,
/turf/simulated/floor/tiled/white,
/area/rnd/telesci)
"azV" = (
Expand Down Expand Up @@ -16065,6 +16067,7 @@
info = "\[center]\[Large]\[b]NSS Exodus\[/b]\[/large]\[br] \[small]Armoury Inventory\[/small]\[/center] \[hr] \[hr] \[br] \[b]Weaponry\[/b]\[br] \[field] Energy Gun(s)\[br] \[field] Laser Gun(s)\[br] \[field] Ion Rifle(s)\[br] \[field] Combat Shotgun(s) \[hr] \[b]Armour\[/b]\[br] \[field] Bulletproof Vest(s)\[br] \[field] Abalative Vest(s)\[br] \[field] Biohazard Suit(s)\[br] \[field] Bomb Suit(s) \[hr] \[b]Auxiliary Equipment\[/b]\[br] \[field] Gasmask(s)\[br] \[field] box(es) of Flashbangs\[br] \[field] box(es) of Handcuffs\[br] \[field] box(es) of R.O.B.U.S.T. Cartridges \[hr] \[b]Riot Equipment\[/b]\[br] \[field] Stun Baton(s)\[br] \[field] Riot Suit(s)\[br] \[field] Riot Shield(s) \[hr] \[b]Tactical Equipment\[/b]\[br] \[field] Tactical Armour(s)\[br] \[field] Tactical Helmet(s)\[br] \[field] Tactical Jumpsuit(s)\[br] \[field] Green Balaclava(s)\[br] \[field] Tactical HUD(s)\[br] \[field] Combat Belt(s)\[br] \[field] Black Glove(s)\[br] \[field] Jackboot(s) \[hr] \[b]Implants\[/b]\[br] \[field] Tracking Implant Box(es)\[br] \[field] Chemical Implant Box(es) \[hr] \[b]Defense Systems\[/b]\[br] \[field] Deployable Barrier(s)\[br] \[field] Portable Flasher(s) \[hr] \[b]Other\[/b]\[br] \[field] Holobadge Box(es) \[hr] \[b]\[center]Warden's's Signature:\[/b] \[field]\[/center] \[hr]";
name = "Armory Inventory"
},
/obj/item/paper_scanner,
/turf/simulated/floor/tiled,
/area/security/warden)
"aCA" = (
Expand Down Expand Up @@ -21098,6 +21101,10 @@
network = list("Capt_Office");
pixel_y = 30
},
/obj/item/paper_scanner{
pixel_x = 6;
pixel_y = -2
},
/turf/simulated/floor/carpet,
/area/crew_quarters/captain)
"aKH" = (
Expand Down Expand Up @@ -23656,6 +23663,7 @@
},
/obj/structure/table/standard,
/obj/item/folder/sec,
/obj/item/paper_scanner,
/turf/simulated/floor/tiled,
/area/security/brig)
"aPg" = (
Expand Down Expand Up @@ -24284,6 +24292,9 @@
/obj/structure/table/standard,
/obj/item/paper_bin,
/obj/item/pen,
/obj/item/paper_scanner{
pixel_x = 8
},
/turf/simulated/floor/carpet,
/area/crew_quarters/heads/chief)
"aQh" = (
Expand Down Expand Up @@ -24567,6 +24578,7 @@
pixel_x = 5;
pixel_y = -30
},
/obj/item/paper_scanner,
/turf/simulated/floor/tiled/dark,
/area/crew_quarters/heads/hos)
"aQI" = (
Expand Down Expand Up @@ -26777,6 +26789,9 @@
d2 = 4;
icon_state = "2-4"
},
/obj/item/paper_scanner{
pixel_x = -8
},
/turf/simulated/floor/carpet,
/area/journalistoffice)
"aUq" = (
Expand Down Expand Up @@ -27593,6 +27608,10 @@
"aVG" = (
/obj/structure/table/reinforced,
/obj/item/modular_computer/laptop/preset/command/hop,
/obj/item/paper_scanner{
pixel_x = 4;
pixel_y = 8
},
/turf/simulated/floor/wood,
/area/crew_quarters/heads/hop)
"aVH" = (
Expand Down Expand Up @@ -32778,6 +32797,7 @@
pixel_x = 5;
pixel_y = -4
},
/obj/item/paper_scanner,
/turf/simulated/floor/carpet/blue,
/area/medical/exam_room{
name = "\improper Medical - Exam Room 2"
Expand Down Expand Up @@ -36570,6 +36590,9 @@
pixel_y = 6
},
/obj/item/pen,
/obj/item/paper_scanner{
pixel_x = 6
},
/turf/simulated/floor/tiled/white,
/area/crew_quarters/heads/cmo)
"blG" = (
Expand Down Expand Up @@ -37936,6 +37959,7 @@
dir = 4
},
/obj/structure/table/standard,
/obj/item/paper_scanner,
/turf/simulated/floor/carpet/blue,
/area/medical/exam_room{
name = "\improper Medical - Exam Room 1"
Expand Down Expand Up @@ -43660,6 +43684,10 @@
/obj/item/device/eftpos{
eftpos_name = "Research EFTPOS scanner"
},
/obj/item/paper_scanner{
pixel_x = -6;
pixel_y = 4
},
/turf/simulated/floor/carpet/blue,
/area/rnd/rdoffice)
"bzD" = (
Expand Down Expand Up @@ -48531,6 +48559,7 @@
req_access = list(37)
},
/obj/structure/table/wood,
/obj/item/paper_scanner,
/turf/simulated/floor/wood,
/area/library)
"bKK" = (
Expand Down Expand Up @@ -50058,6 +50087,14 @@
/obj/structure/table/wood,
/obj/item/paper_bin,
/obj/item/pen,
/obj/item/paper_scanner{
pixel_x = 2;
pixel_y = 2
},
/obj/item/paper_scanner{
pixel_x = -2;
pixel_y = -2
},
/obj/machinery/light{
dir = 8
},
Expand Down Expand Up @@ -54016,6 +54053,7 @@
dir = 6
},
/obj/structure/table/standard,
/obj/item/paper_scanner,
/obj/item/paper_bin{
pixel_x = -3;
pixel_y = 7
Expand Down Expand Up @@ -63051,6 +63089,7 @@
dir = 6
},
/obj/structure/table/reinforced,
/obj/item/paper_scanner,
/turf/simulated/floor/tiled,
/area/bridge)
"mlB" = (
Expand Down Expand Up @@ -65721,6 +65760,11 @@
/obj/effect/floor_decal/corner/grey/diagonal,
/turf/simulated/floor/tiled/old_white,
/area/maintenance/medbay)
"skc" = (
/obj/structure/table/steel,
/obj/item/paper_scanner,
/turf/simulated/floor/carpet/rubber,
/area/rnd/misc_lab)
"slK" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/window/eastleft{
Expand Down Expand Up @@ -67795,6 +67839,9 @@
pixel_x = 3;
pixel_y = 4
},
/obj/item/paper_scanner{
pixel_x = -4
},
/turf/simulated/floor/carpet,
/area/lawoffice)
"wzO" = (
Expand Down Expand Up @@ -91271,7 +91318,7 @@ btK
buR
bDu
bxc
byE
skc
hwh
byE
bCD
Expand Down
Loading

0 comments on commit 7b37743

Please sign in to comment.