mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-05-17 12:20:09 +01:00
d5849910e5
* Begin clickcode attack_self fix Begins the work to make everything call back to parent for attack_self so that signals are sacred. * Makes MORE things call the attack_self() parent Yes, I could make special_handling a var on obj/item HOWEVER i want it to be specific so it can be tracked down later and ONLY the objects that use it can be refactored instead of sitting there literally forever and it just becoming 'a thing'. * Finishes making the rest of attack_self call parent. As mentioned, things such as 'specialty_goggles' 'special_handling' and the such are only there to help with attack_self until the attack_self is recoded for those items. * begone foul demon * some more cleanup * These * GOD this was annoying * yeh * Fix this * fLARES * Thesee too * toys! * Even more! * More fixes * Even more * rest of em * these too * Update syndie.dm * hardref clear * Update code/game/gamemodes/nuclear/pinpointer.dm * Update code/game/objects/effects/mines.dm * Update code/game/objects/items/blueprints_vr.dm * Update code/game/objects/items/blueprints_vr.dm * Update code/game/objects/items/contraband_vr.dm * Update code/game/objects/items/crayons.dm * Update code/game/objects/items/crayons.dm * Update code/game/objects/items/gunbox.dm * Update code/game/objects/items/gunbox.dm * Update code/game/objects/items/gunbox_vr.dm * Update code/game/objects/items/gunbox_vr.dm * Update code/game/objects/items/weapons/gift_wrappaper.dm * Update code/game/objects/items/crayons.dm * Update code/game/objects/items/crayons.dm * Update code/game/objects/items/gunbox.dm * these too * Update maintpanel_stack.dm * angry warning * Fixes packaged snacks. Fixes improper var default. * Special handling for these * proper poly types * Fixes magclaws Makes the 'features' it had just part of base magboots that can be adjusted via varswap. * Fixes jackets Fixes https://github.com/VOREStation/VOREStation/issues/18941 * Small bugfix Makes p_Theyre properly capitialize Makes examine show proper wording * Update gift_wrappaper.dm
371 lines
8.8 KiB
Plaintext
371 lines
8.8 KiB
Plaintext
/* Pens!
|
|
* Contains:
|
|
* Pens
|
|
* Coloured Pens
|
|
* Fountain Pens
|
|
* Multi Pen
|
|
* Reagent Pens
|
|
* Blade Pens
|
|
* Sleepy Pens
|
|
* Parapens
|
|
* Chameleon Pen
|
|
* Crayons
|
|
*/
|
|
|
|
/*
|
|
* Pens
|
|
*/
|
|
/obj/item/pen
|
|
name = "pen"
|
|
desc = "It's a normal black ink pen."
|
|
icon = 'icons/obj/bureaucracy.dmi'
|
|
icon_state = "pen"
|
|
item_state = "pen"
|
|
slot_flags = SLOT_BELT | SLOT_EARS
|
|
throwforce = 0
|
|
w_class = ITEMSIZE_TINY
|
|
throw_speed = 7
|
|
throw_range = 15
|
|
matter = list(MAT_STEEL = 10)
|
|
var/colour = "black" //what colour the ink is!
|
|
pressure_resistance = 2
|
|
drop_sound = 'sound/items/drop/accessory.ogg'
|
|
pickup_sound = 'sound/items/pickup/accessory.ogg'
|
|
var/can_click = TRUE
|
|
|
|
///Var for attack_self chain
|
|
var/special_handling = FALSE
|
|
|
|
/obj/item/pen/attack_self(mob/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if(special_handling)
|
|
return FALSE
|
|
if(!user.checkClickCooldown())
|
|
return
|
|
if(!can_click)
|
|
return
|
|
user.setClickCooldown(1 SECOND)
|
|
to_chat(user, span_notice("Click."))
|
|
playsound(src, 'sound/items/penclick.ogg', 50, 1)
|
|
|
|
/*
|
|
* Coloured Pens
|
|
*/
|
|
/obj/item/pen/blue
|
|
desc = "It's a normal blue ink pen."
|
|
icon_state = "pen_blue"
|
|
colour = "blue"
|
|
|
|
/obj/item/pen/red
|
|
desc = "It's a normal red ink pen."
|
|
icon_state = "pen_red"
|
|
colour = "red"
|
|
|
|
/*
|
|
* Fountain Pens
|
|
*/
|
|
/obj/item/pen/fountain
|
|
desc = "A well made fountain pen, with a faux wood body."
|
|
icon_state = "pen_fountain"
|
|
|
|
/obj/item/pen/fountain2
|
|
desc = "A well made fountain pen, with a faux wood body. This one has golden accents."
|
|
icon_state = "pen_fountain"
|
|
|
|
/obj/item/pen/fountain3
|
|
desc = "A well made expesive rosewood pen with golden accents. Very pretty."
|
|
icon_state = "pen_fountain"
|
|
|
|
/obj/item/pen/fountain4
|
|
desc = "A well made and expensive fountain pen. This one has silver accents."
|
|
icon_state = "blues_fountain"
|
|
|
|
/obj/item/pen/fountain5
|
|
desc = "A well made and expensive fountain pen. This one has gold accents."
|
|
icon_state = "blueg_fountain"
|
|
|
|
/obj/item/pen/fountain6
|
|
desc = "A well made and expensive fountain pen. The nib is quite sharp."
|
|
icon_state = "command_fountain"
|
|
|
|
/obj/item/pen/fountain7
|
|
desc = "A well made and expensive fountain pen made from gold."
|
|
icon_state = "gold_fountain"
|
|
|
|
/obj/item/pen/fountain8
|
|
desc = "A well made and expensive fountain pen."
|
|
icon_state = "black_fountain"
|
|
|
|
/obj/item/pen/fountain9
|
|
desc = "A well made and expensive fountain pen made for gesturing."
|
|
icon_state = "mime_fountain"
|
|
|
|
|
|
/*
|
|
* Multi Pen
|
|
*/
|
|
/obj/item/pen/multi
|
|
desc = "It's a pen with multiple colors of ink!"
|
|
var/selectedColor = 1
|
|
var/colors = list("black","blue","red")
|
|
special_handling = TRUE
|
|
|
|
/obj/item/pen/click_alt(mob/user)
|
|
if(!Adjacent(user))
|
|
return
|
|
to_chat(user, span_notice("Click."))
|
|
playsound(src, 'sound/items/penclick.ogg', 50, 1)
|
|
|
|
/obj/item/pen/multi/attack_self(mob/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if(++selectedColor > 3)
|
|
selectedColor = 1
|
|
|
|
colour = colors[selectedColor]
|
|
|
|
if(colour == "black")
|
|
icon_state = "pen"
|
|
else
|
|
icon_state = "pen_[colour]"
|
|
|
|
to_chat(user, span_notice("Changed color to '[colour].'"))
|
|
|
|
/obj/item/pen/invisible
|
|
desc = "It's an invisble pen marker."
|
|
icon_state = "pen"
|
|
colour = "white"
|
|
|
|
/*
|
|
* Reagent Pens
|
|
*/
|
|
|
|
/obj/item/pen/reagent
|
|
flags = OPENCONTAINER
|
|
origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
|
|
|
|
/obj/item/pen/reagent/Initialize(mapload)
|
|
. = ..()
|
|
create_reagents(30)
|
|
|
|
/obj/item/pen/reagent/attack(mob/living/M as mob, mob/user as mob)
|
|
|
|
if(!istype(M))
|
|
return
|
|
|
|
. = ..()
|
|
|
|
if(M.can_inject(user,1))
|
|
if(reagents.total_volume)
|
|
if(M.reagents)
|
|
var/contained = reagents.get_reagents()
|
|
var/trans = reagents.trans_to_mob(M, 30, CHEM_BLOOD)
|
|
add_attack_logs(user,M,"Injected with [src.name] containing [contained], trasferred [trans] units")
|
|
|
|
/*
|
|
* Blade Pens
|
|
*/
|
|
/obj/item/pen/blade
|
|
desc = "It's a normal black ink pen."
|
|
description_antag = "This pen can be transformed into a dangerous melee and thrown assassination weapon with an Alt-Click.\
|
|
When active, it cannot be caught safely."
|
|
name = "pen"
|
|
icon = 'icons/obj/bureaucracy.dmi'
|
|
icon_state = "pen"
|
|
item_state = "pen"
|
|
slot_flags = SLOT_BELT | SLOT_EARS
|
|
throwforce = 3
|
|
w_class = ITEMSIZE_TINY
|
|
throw_speed = 7
|
|
throw_range = 15
|
|
armor_penetration = 20
|
|
|
|
var/active = 0
|
|
var/active_embed_chance = 0
|
|
var/active_force = 15
|
|
var/active_throwforce = 30
|
|
var/active_w_class = ITEMSIZE_NORMAL
|
|
var/active_icon_state
|
|
var/default_icon_state
|
|
|
|
/obj/item/pen/blade/Initialize(mapload)
|
|
. = ..()
|
|
active_icon_state = "[icon_state]-x"
|
|
default_icon_state = icon_state
|
|
|
|
/obj/item/pen/blade/click_alt(mob/user)
|
|
..()
|
|
if(active)
|
|
deactivate(user)
|
|
else
|
|
activate(user)
|
|
|
|
to_chat(user, span_notice("You [active ? "de" : ""]activate \the [src]'s blade."))
|
|
|
|
/obj/item/pen/blade/proc/activate(mob/living/user)
|
|
if(active)
|
|
return
|
|
active = 1
|
|
icon_state = active_icon_state
|
|
embed_chance = active_embed_chance
|
|
force = active_force
|
|
throwforce = active_throwforce
|
|
sharp = TRUE
|
|
edge = TRUE
|
|
w_class = active_w_class
|
|
playsound(src, 'sound/weapons/saberon.ogg', 15, 1)
|
|
damtype = SEARING
|
|
catchable = FALSE
|
|
|
|
attack_verb |= list(\
|
|
"slashed",\
|
|
"cut",\
|
|
"shredded",\
|
|
"stabbed"\
|
|
)
|
|
|
|
/obj/item/pen/blade/proc/deactivate(mob/living/user)
|
|
if(!active)
|
|
return
|
|
playsound(src, 'sound/weapons/saberoff.ogg', 15, 1)
|
|
active = 0
|
|
icon_state = default_icon_state
|
|
embed_chance = initial(embed_chance)
|
|
force = initial(force)
|
|
throwforce = initial(throwforce)
|
|
sharp = initial(sharp)
|
|
edge = initial(edge)
|
|
w_class = initial(w_class)
|
|
damtype = BRUTE
|
|
catchable = TRUE
|
|
|
|
/obj/item/pen/blade/blue
|
|
desc = "It's a normal blue ink pen."
|
|
icon_state = "pen_blue"
|
|
colour = "blue"
|
|
|
|
/obj/item/pen/blade/red
|
|
desc = "It's a normal red ink pen."
|
|
icon_state = "pen_red"
|
|
colour = "red"
|
|
|
|
/obj/item/pen/blade/fountain
|
|
desc = "A well made fountain pen, with a faux wood body."
|
|
icon_state = "pen_fountain"
|
|
|
|
/*
|
|
* Sleepy Pens
|
|
*/
|
|
/obj/item/pen/reagent/sleepy
|
|
desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\""
|
|
origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
|
|
|
|
/obj/item/pen/reagent/sleepy/Initialize(mapload)
|
|
. = ..()
|
|
reagents.add_reagent(REAGENT_ID_CHLORALHYDRATE, 1) //VOREStation Edit
|
|
reagents.add_reagent(REAGENT_ID_STOXIN, 14) //VOREStation Add
|
|
|
|
|
|
/*
|
|
* Parapens
|
|
*/
|
|
/obj/item/pen/reagent/paralysis
|
|
origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
|
|
|
|
/obj/item/pen/reagent/paralysis/Initialize(mapload)
|
|
. = ..()
|
|
reagents.add_reagent(REAGENT_ID_ZOMBIEPOWDER, 5)
|
|
reagents.add_reagent(REAGENT_ID_CRYPTOBIOLIN, 10)
|
|
|
|
/*
|
|
* Chameleon Pen
|
|
*/
|
|
/obj/item/pen/chameleon
|
|
var/signature = ""
|
|
special_handling = TRUE
|
|
|
|
/obj/item/pen/chameleon/attack_self(mob/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
/*
|
|
// Limit signatures to official crew members
|
|
var/personnel_list[] = list()
|
|
for(var/datum/data/record/t in GLOB.data_core.locked) //Look in data core locked.
|
|
personnel_list.Add(t.fields["name"])
|
|
personnel_list.Add("Anonymous")
|
|
|
|
var/new_signature = tgui_input_list(user, "Enter new signature pattern.", "New Signature", personnel_list)
|
|
if(new_signature)
|
|
signature = new_signature
|
|
*/
|
|
signature = tgui_input_text(user, "Enter new signature. Leave blank for 'Anonymous'", "New Signature", signature, MAX_MESSAGE_LEN)
|
|
|
|
/obj/item/pen/proc/get_signature(var/mob/user)
|
|
return (user && user.real_name) ? user.real_name : "Anonymous"
|
|
|
|
/obj/item/pen/chameleon/get_signature(var/mob/user)
|
|
return signature ? signature : "Anonymous"
|
|
|
|
/obj/item/pen/chameleon/verb/set_colour()
|
|
set name = "Change Pen Colour"
|
|
set category = "Object"
|
|
|
|
var/list/possible_colours = list ("Yellow", "Green", "Pink", "Blue", "Orange", "Cyan", "Red", "Invisible", "Black")
|
|
var/selected_type = tgui_input_list(usr, "Pick new colour.", "Pen Colour", possible_colours)
|
|
|
|
if(selected_type)
|
|
switch(selected_type)
|
|
if("Yellow")
|
|
colour = COLOR_YELLOW
|
|
if("Green")
|
|
colour = COLOR_LIME
|
|
if("Pink")
|
|
colour = COLOR_PINK
|
|
if("Blue")
|
|
colour = COLOR_BLUE
|
|
if("Orange")
|
|
colour = COLOR_ORANGE
|
|
if("Cyan")
|
|
colour = COLOR_CYAN
|
|
if("Red")
|
|
colour = COLOR_RED
|
|
if("Invisible")
|
|
colour = COLOR_WHITE
|
|
else
|
|
colour = COLOR_BLACK
|
|
to_chat(usr, span_info("You select the [lowertext(selected_type)] ink container."))
|
|
|
|
|
|
/*
|
|
* Crayons
|
|
*/
|
|
/obj/item/pen/crayon
|
|
name = "crayon"
|
|
desc = "A colourful crayon. Please refrain from eating it or putting it in your nose."
|
|
icon = 'icons/obj/crayons.dmi'
|
|
icon_state = "crayonred"
|
|
w_class = ITEMSIZE_TINY
|
|
attack_verb = list("attacked", "coloured")
|
|
colour = "#FF0000" //RGB
|
|
var/shadeColour = "#220000" //RGB
|
|
var/uses = 30 //0 for unlimited uses
|
|
var/instant = 0
|
|
var/colourName = "red" //for updateIcon purposes
|
|
drop_sound = 'sound/items/drop/gloves.ogg'
|
|
pickup_sound = 'sound/items/pickup/gloves.ogg'
|
|
can_click = FALSE
|
|
special_handling = TRUE
|
|
|
|
/obj/item/pen/crayon/Initialize(mapload)
|
|
. = ..()
|
|
name = "[colourName] [name]"
|
|
|
|
/obj/item/pen/crayon/marker
|
|
name = "marker"
|
|
desc = "A chisel-tip permanent marker. Hopefully non-toxic."
|
|
icon_state = "markerred"
|