Adhomian typewriter and camera (#17999)

* things

* paper

* oh the misery

* fixes

* stuff

* aaa

* Fixes

* more fixes

* more fixes

* final fixes i hope

* Fixes

* destroy fix

* more destroy

* white space

* Update code/modules/paperwork/typewriter.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/paperwork/typewriter.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/paperwork/typewriter.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/paperwork/typewriter.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/paperwork/typewriter.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/paperwork/typewriter.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/paperwork/typewriter.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/paperwork/typewriter.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/paperwork/typewriter.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/paperwork/typewriter.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/paperwork/typewriter.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

---------

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
This commit is contained in:
Alberyk
2023-12-24 03:36:05 +00:00
committed by GitHub
co-authored by Fluffy Matt Atlas
parent e0bc64991b
commit 0b8ec5726a
15 changed files with 298 additions and 10 deletions
+1
View File
@@ -2887,6 +2887,7 @@
#include "code\modules\paperwork\photography.dm"
#include "code\modules\paperwork\silicon_photography.dm"
#include "code\modules\paperwork\stamps.dm"
#include "code\modules\paperwork\typewriter.dm"
#include "code\modules\power\apc.dm"
#include "code\modules\power\batteryrack.dm"
#include "code\modules\power\breaker_box.dm"
+2 -1
View File
@@ -592,7 +592,8 @@ var/list/asset_datums = list()
"copt-b.woff" = 'html/fonts/OFL/Copt-B.woff',
"ducados.woff" = 'html/fonts/OFL/Ducados.woff',
"kawkabmono.woff" = 'html/fonts/OFL/KawkabMono.woff',
"kaushanscript.woff" = 'html/fonts/OFL/KaushanScript.woff'
"kaushanscript.woff" = 'html/fonts/OFL/KaushanScript.woff',
"typewriter.woff" = 'html/fonts/OFL/typewriter.woff'
)
cross_round_cachable = TRUE
@@ -658,3 +658,17 @@
earrings["adhomian pearls earrings"] = /obj/item/clothing/ears/earring/tajara
earrings["adhomian golden earrings"] = /obj/item/clothing/ears/earring/tajara/gold
gear_tweaks += new /datum/gear_tweak/path(earrings)
/datum/gear/tajara_camera
display_name = "adhomian camera"
path = /obj/item/device/camera/adhomai
whitelisted = list(SPECIES_TAJARA, SPECIES_TAJARA_ZHAN, SPECIES_TAJARA_MSAI)
sort_category = "Xenowear - Tajara"
flags = GEAR_HAS_DESC_SELECTION
/datum/gear/typewriter
display_name = "adhomian portable typewriter"
whitelisted = list(SPECIES_TAJARA, SPECIES_TAJARA_ZHAN, SPECIES_TAJARA_MSAI)
sort_category = "Xenowear - Tajara"
path = /obj/item/typewriter_case
flags = GEAR_HAS_DESC_SELECTION
+43 -7
View File
@@ -40,6 +40,7 @@
var/const/signfont = "Times New Roman"
var/const/crayonfont = "Comic Sans MS"
var/const/fountainfont = "Segoe Script"
var/const/typewriterfont = "Typewriter"
drop_sound = 'sound/items/drop/paper.ogg'
pickup_sound = 'sound/items/pickup/paper.ogg'
@@ -307,7 +308,7 @@
return signfont
/obj/item/paper/proc/parsepencode(t, obj/item/pen/P, mob/user, iscrayon, isfountain)
/obj/item/paper/proc/parsepencode(t, obj/item/pen/P, mob/user, iscrayon, isfountain, istypewriter)
t = parse_languages(user, t, TRUE)
t = replacetext(t, "\[sign\]", "<font face=\"[get_signfont(P, user)]\">[get_signature(P, user)]</font>")
@@ -340,10 +341,25 @@
t = replacetext(t, "\[logo_golden\]", "")
t = replacetext(t, "\[barcode\]", "")
if(istypewriter)
t = replacetext(t, "\[*\]", "")
t = replacetext(t, "\[hr\]", "")
t = replacetext(t, "\[small\]", "")
t = replacetext(t, "\[/small\]", "")
t = replacetext(t, "\[list\]", "")
t = replacetext(t, "\[/list\]", "")
t = replacetext(t, "\[table\]", "")
t = replacetext(t, "\[/table\]", "")
t = replacetext(t, "\[row\]", "")
t = replacetext(t, "\[cell\]", "")
t = replacetext(t, "\[barcode\]", "")
if(iscrayon)
t = "<font face=\"[crayonfont]\" color=[P ? P.colour : "black"]><b>[t]</b></font>"
else if(isfountain)
t = "<font face=\"[fountainfont]\" color=[P ? P.colour : "black"]><i>[t]</i></font>"
else if(istypewriter)
t = "<font face=\"[typewriterfont]\" color=[P ? P.colour : "black"]><i>[t]</i></font>"
else
t = "<font face=\"[deffont]\" color=[P ? P.colour : "black"]>[t]</font>"
@@ -460,11 +476,23 @@
return
var/obj/item/i = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen.
if(!i && istype(loc, /obj/item/portable_typewriter))
var/obj/item/portable_typewriter/T = loc
if(T.pen)
i = T.pen
if(i && istype(i, /obj/item/portable_typewriter) || !i && istype(loc, /obj/item/portable_typewriter))
var/obj/item/portable_typewriter/T = i
if(T.pen)
i = T.pen
if(!i || !i.ispen())
i = usr.get_inactive_hand()
var/obj/item/clipboard/c
var/iscrayon = FALSE
var/isfountain = FALSE
var/istypewriter = FALSE
if(!i.ispen())
if(usr.back && istype(usr.back,/obj/item/rig))
var/obj/item/rig/r = usr.back
@@ -473,12 +501,10 @@
i = m.device
else
return
else if(istype(src.loc, /obj/item/clipboard))
if(istype(src.loc, /obj/item/clipboard))
c = src.loc
if(c.haspen)
i = c.haspen
else
return
else
return
@@ -492,13 +518,15 @@
else
isfountain = FALSE
if(istype(i, /obj/item/pen/typewriter))
istypewriter = TRUE
if(!write_check(usr))
return
var/last_fields_value = fields
t = parsepencode(t, i, usr, iscrayon, isfountain) // Encode everything from pencode to html
t = parsepencode(t, i, usr, iscrayon, isfountain, istypewriter) // Encode everything from pencode to html
if(fields > 50)//large amount of fields creates a heavy load on the server, see updateinfolinks() and addtofield()
to_chat(usr, SPAN_WARNING("Too many fields. Sorry, you can't do this."))
@@ -518,7 +546,11 @@
paper_win.add_stylesheet("paper_languages", 'html/browser/paper_languages.css')
paper_win.open()
playsound(src, pick('sound/bureaucracy/pen1.ogg','sound/bureaucracy/pen2.ogg'), 20)
if(istype(i, /obj/item/pen/typewriter))
playsound(src, ('sound/machines/typewriter.ogg'), 40)
else
playsound(src, pick('sound/bureaucracy/pen1.ogg','sound/bureaucracy/pen2.ogg'), 20)
update_icon()
if(c)
c.update_icon()
@@ -536,6 +568,10 @@
var/obj/item/folder/F = loc
if(F.loc_check(user) || F.Adjacent(user))
. = TRUE
if(!. && istype(loc, /obj/item/portable_typewriter))
var/obj/item/portable_typewriter/T = loc
if(T.loc == user || T.Adjacent(user))
. = TRUE
/obj/item/paper/attackby(var/obj/item/P, mob/user)
..()
+29 -1
View File
@@ -17,6 +17,11 @@
item_state = "electropack"
w_class = ITEMSIZE_TINY
/obj/item/device/camera_film/taj_film
name = "film canister"
icon = 'icons/obj/tajara_items.dmi'
desc = "A rolle of 35mm film intended for cameras of Tajaran make."
icon_state = "taj_film"
/********
* photo *
@@ -137,6 +142,7 @@ var/global/photo_count = 0
obj_flags = OBJ_FLAG_CONDUCTABLE
slot_flags = SLOT_BELT
matter = list(DEFAULT_WALL_MATERIAL = 2000)
var/black_white = FALSE
var/pictures_max = 10
var/pictures_left = 10
var/on = 1
@@ -209,7 +215,7 @@ var/global/photo_count = 0
if(!on || !pictures_left || ismob(target.loc)) return
captureimage(target, user, flag)
playsound(loc, /singleton/sound_category/print_sound, 75, 1, -3)
do_photo_sound()
pictures_left--
to_chat(user, "<span class='notice'>[pictures_left] photos left.</span>")
@@ -219,6 +225,9 @@ var/global/photo_count = 0
icon_state = icon_on
on = 1
/obj/item/device/camera/proc/do_photo_sound()
playsound(loc, /singleton/sound_category/print_sound, 75, 1, -3)
/obj/item/device/camera/detective
name = "detectives camera"
desc = "A one use - polaroid camera."
@@ -267,6 +276,9 @@ var/global/photo_count = 0
p.icon = ic
p.tiny = pc
p.img = photoimage
if(black_white)
p.img.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
p.tiny.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
p.picture_desc = mobs
p.pixel_x = rand(-10, 10)
p.pixel_y = rand(-10, 10)
@@ -296,3 +308,19 @@ var/global/photo_count = 0
p.id = id
return p
/obj/item/device/camera/adhomai
name = "adhomian camera"
icon = 'icons/obj/tajara_items.dmi'
desc = "A slightly antiquated camera with a large flash bulb. Still popular with Tajara all over Adhomai."
icon_state = "taj_camera_on"
item_state = "taj_camera"
contained_sprite = TRUE
slot_flags = SLOT_MASK
black_white = TRUE
icon_on = "taj_camera_on"
icon_off = "taj_camera_off"
/obj/item/device/camera/adhomai/do_photo_sound()
flick("taj_camera_flash", src)
playsound(loc, 'sound/items/camerabulb.ogg', 75, 1, -3)
+190
View File
@@ -0,0 +1,190 @@
/obj/item/pen/typewriter
name = "national typist 'Adhomai Electric' experimental integrated typewriter pen"
desc = "A mechanical pen that writes on paper inside a typewriter. How did you even get this?"
/obj/item/portable_typewriter
name = "portable typewriter"
desc = "A reasonably lightweight typewriter designed to be moved around."
desc_info = "You can alt-click this to eject the paper. Click and drag onto yourself while adjacent to type on the typewriter."
desc_extended = "The National Typist Company in the People's Republic of Adhomai was once the largest producer of \
typewriters on the planet. With the introduction of human technology, however, these items - \
which were once staples of Tajaran offices - have slowly become more uncommon. That \
said, rural areas and less urban parts of the planet still rely heavily on these machines."
icon_state = "typewriter"
icon = 'icons/obj/device.dmi'
force = 20
throwforce = 5
w_class = ITEMSIZE_NORMAL
drop_sound = 'sound/items/drop/metalweapon.ogg'
pickup_sound = 'sound/items/pickup/metalweapon.ogg'
var/obj/item/paper/stored_paper = null
var/obj/item/pen/pen
/obj/item/portable_typewriter/Initialize()
. = ..()
if(!pen)
pen = new /obj/item/pen/typewriter(src)
/obj/item/portable_typewriter/Destroy()
QDEL_NULL(stored_paper)
QDEL_NULL(pen)
return ..()
/obj/item/portable_typewriter/attack_self(mob/user)
if(!stored_paper)
to_chat(user, SPAN_ALERT("\The [src] has no paper fed for typing!"))
else
stored_paper.attackby(pen, user)
. = ..()
/obj/item/portable_typewriter/proc/get_signature(var/mob/user)
if (pen)
pen.get_signature(user)
/obj/item/portable_typewriter/AltClick(mob/user)
if(!Adjacent(user))
return
else if(stored_paper)
var/obj/item/paper/paper = stored_paper
if(eject_paper(user.loc))
user.put_in_hands(paper)
else
. = ..()
/obj/item/portable_typewriter/MouseDrop(mob/user as mob)
if(use_check_and_message(user))
return
if(((user.contents.Find(src) || in_range(src, user))))
if(isnull(stored_paper))
to_chat(user, SPAN_ALERT("\The [src] has no paper fed for typing!"))
else
stored_paper.attackby(pen, user)
return
/obj/item/portable_typewriter/update_icon()
if(stored_paper)
icon_state = "typewriter_[stored_paper.icon_state]"
else
icon_state = "typewriter"
/obj/item/portable_typewriter/proc/eject_paper(atom/target, mob/user)
if(!stored_paper)
return FALSE
to_chat(user, SPAN_ALERT("\The [src] ejects \the [stored_paper]."))
playsound(loc, 'sound/bureaucracy/paperfold.ogg', 60, 0)
stored_paper.forceMove(target)
stored_paper = null
update_icon()
return TRUE
/obj/item/portable_typewriter/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/paper))
if(!stored_paper)
if(W.icon_state == "scrap")
to_chat(user, SPAN_ALERT("\The [W] is too crumpled to feed correctly!"))
return
else
user.drop_item(W)
user.unEquip(W)
W.forceMove(src)
stored_paper = W
user.visible_message(SPAN_ALERT("\The [user] sucks up \the [W] into \the [src]."), SPAN_ALERT("You suck up \the [W] into \the [src]."))
src.update_icon()
else
to_chat(user, SPAN_ALERT("\The [src] already has a paper in it."))
. = ..()
/obj/item/portable_typewriter/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
..()
user.visible_message(SPAN_ALERT("\The [src] shatters into metal pieces!"))
M.Weaken(2)
playsound(loc, 'sound/effects/metalhit.ogg', 50, 1)
playsound(loc, 'sound/weapons/ring.ogg', 50, 1)
new /obj/item/material/shard/shrapnel(get_turf(user))
qdel(src)
/obj/item/typewriter_case
name = "typewriter case"
desc = "A large briefcase-esque place to store one's typewriter."
desc_info = "You can alt-click on this case to open and close it. A typewriter can only be removed or added when it is open!"
desc_extended = "The National Typist Company in the People's Republic of Adhomai was once the largest producer of \
typewriters on the planet. With the introduction of human technology, however, these items - \
which were once staples of Tajaran offices - have slowly become more uncommon. That \
said, rural areas and less urban parts of the planet still rely heavily on these machines."
icon = 'icons/obj/storage/briefcase.dmi'
icon_state = "typewriter_case_closed"
item_state = "briefcase_black"
contained_sprite = TRUE
force = 10
throwforce = 5
throw_speed = 1
throw_range = 4
w_class = ITEMSIZE_LARGE
drop_sound = 'sound/items/drop/backpack.ogg'
pickup_sound = 'sound/items/pickup/backpack.ogg'
var/obj/item/portable_typewriter/machine
var/opened = FALSE
/obj/item/typewriter_case/Initialize()
. = ..()
if(!machine)
machine = new /obj/item/portable_typewriter(src)
/obj/item/typewriter_case/Destroy()
QDEL_NULL(machine)
return ..()
/obj/item/typewriter_case/AltClick(mob/user)
if(!Adjacent(user))
return
playsound(loc, 'sound/items/storage/briefcase.ogg', 50, 0, -5)
opened = !opened
update_icon()
/obj/item/typewriter_case/update_icon()
if(opened && machine)
icon_state = "typewriter_case_open"
else if (opened && !machine)
icon_state = "typewriter_case_open_e"
else if (!opened)
icon_state = "typewriter_case_closed"
/obj/item/typewriter_case/attack_self(mob/user)
if(use_check_and_message(user))
return
if(((user.contents.Find(src) || in_range(src, user))))
if(opened)
if(!machine)
to_chat(user, SPAN_ALERT("\The [src] is currently empty!"))
else
user.put_in_hands(machine)
machine = null
update_icon()
else
to_chat(user, SPAN_ALERT("\The [src] is currently closed!"))
return
/obj/item/typewriter_case/MouseDrop(mob/user as mob)
attack_self(user)
/obj/item/typewriter_case/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/portable_typewriter))
if(!machine)
user.drop_item(W)
user.unEquip(W)
W.forceMove(src)
src.machine = W
user.visible_message(SPAN_ALERT("[user] places \the [W] into \the [src]."), SPAN_ALERT ("You store \the [W] in \the [src]."))
src.update_icon()
else
to_chat(user, SPAN_ALERT("\The [src] already has a typewriter in it!"))
. = ..()
+12
View File
@@ -0,0 +1,12 @@
author: Alberyk, Suethecake
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Added an adhomian typewriter."
- rscadd: "Added am adhomian camera."
+2 -1
View File
@@ -16,4 +16,5 @@ Stormning.woff - Copyright (c) 2015, Mew Too, Robert Jablonski (Cannot Into Spac
Copt-B.woff - Copyright (c) 2014, Nick Matavka (https://fontlibrary.org/en/member/nmatavka), with Reserved Font Name "Copt-B".
KawkabMono.woff - Copyright (c) 2015, Abdullah Arif (abdullah.a@gmail.com), with Reserved Font Name 'Kawkab Mono'.
KaushanScript.woff - Copyright (c) 2011, Pablo Impallari (www.impallari.com|impallari@gmail.com), Copyright (c) 2011, Igino Marini. (www.ikern.com|mail@iginomarini.com), with Reserved Font Name Kaushan Script.
Ducados.woff - Copyright (c) 2015, Rafael Ferran i Peralta (https://fontlibrary.org/en/member/rferran), with Reserved Font Name 'Ducados'.
Ducados.woff - Copyright (c) 2015, Rafael Ferran i Peralta (https://fontlibrary.org/en/member/rferran), with Reserved Font Name 'Ducados'.
veteran_typewriter.woff - Copyright (c) 2012, Koczman Balint (https://www.abstractfonts.com/designer/372/koczman-balint) with Reserved Font Name "Veteran Typewriter Regular".
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 217 KiB

+5
View File
@@ -70,4 +70,9 @@ ATTRIBUTIONS SECTION END
ATTRIBUTIONS SECTION START
sound/weapons/reloads/lever_action_cock1.ogg - "Lever action cocking 2.wav", licensed under CC0. Obtained and edited from https://freesound.org/people/C-V/sounds/523402/
ATTRIBUTIONS SECTION END
ATTRIBUTIONS SECTION START
sound/items/typewriter.ogg - "Typewriter Sound Effect" licensed under CC0, by No Copyright Creator Sounds. Obtained and edited from https://www.youtube.com/watch?v=HYvJtImzoNI&ab_channel=NoCopyrightCreator-Sounds
sound/items/camerabulb.ogg - "Vintage Camera Flash Bulb Pops Sound Design" licensed under CC0, by Adilbek Sounds. Obainted and edited from https://freesound.org/people/adilbek_sounds/sounds/595044/
ATTRIBUTIONS SECTION END
Binary file not shown.
Binary file not shown.