mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 16:12:17 +00:00
1248 lines
44 KiB
Plaintext
1248 lines
44 KiB
Plaintext
/* Virgo Toys!
|
|
* Contains:
|
|
* Mistletoe
|
|
* Plushies
|
|
* Pet rocks
|
|
* Chew toys
|
|
* Cat toys
|
|
* Fake flash
|
|
* Big red button
|
|
* Garden gnome
|
|
* Toy AI
|
|
* Hand buzzer
|
|
* Toy cuffs
|
|
* Toy nuke
|
|
* Toy gibber
|
|
* Toy xeno
|
|
* Russian revolver
|
|
* Trick revolver
|
|
* Toy chainsaw
|
|
* Random miniature spawner
|
|
* Snake popper
|
|
* Professor Who universal ID
|
|
* Professor Who sonic driver
|
|
* Action figures
|
|
* Desk toys
|
|
*/
|
|
|
|
|
|
/*
|
|
* Mistletoe
|
|
*/
|
|
/obj/item/toy/mistletoe
|
|
name = "mistletoe"
|
|
desc = "You are supposed to kiss someone under these"
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "mistletoe"
|
|
|
|
/*
|
|
* Plushies
|
|
*/
|
|
// HEY FUTURE PLUSHIE CODERS: IF YOU'RE ADDING A SNOWFLAKE PLUSH ITEM USE PATH /obj/item/toy/plushie/fluff
|
|
// the loadout entry shouldn't be able to grab those if everything goes right
|
|
/*
|
|
* Plushies
|
|
*/
|
|
/obj/item/toy/plushie/lizardplushie
|
|
name = "lizard plushie"
|
|
desc = "An adorable stuffed toy that resembles a lizardperson."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "plushie_lizard"
|
|
attack_verb = list("clawed", "hissed", "tail slapped")
|
|
|
|
/obj/item/toy/plushie/lizardplushie/kobold
|
|
name = "kobold plushie"
|
|
desc = "An adorable stuffed toy that resembles a kobold."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "kobold"
|
|
pokephrase = "Wehhh!"
|
|
drop_sound = 'sound/voice/weh.ogg'
|
|
attack_verb = list("raided", "kobolded", "weh'd")
|
|
|
|
/* //CHOMPedit: Disable, this is an upstream player reference.
|
|
/obj/item/toy/plushie/lizardplushie/resh
|
|
name = "security unathi plushie"
|
|
desc = "An adorable stuffed toy that resembles an unathi wearing a head of security uniform. Perfect example of a monitor lizard."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "marketable_resh"
|
|
pokephrase = "Halt! Sssecurity!" //"Butts!" would be too obvious
|
|
attack_verb = list("valided", "justiced", "batoned")
|
|
*/ //CHOMPedit end
|
|
|
|
/obj/item/toy/plushie/slimeplushie
|
|
name = "slime plushie"
|
|
desc = "An adorable stuffed toy that resembles a slime. It is practically just a hacky sack."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "plushie_slime"
|
|
attack_verb = list("blorbled", "slimed", "absorbed", "glomped")
|
|
gender = FEMALE //given all the jokes and drawings, I'm not sure the xenobiologists would make a slimeboy
|
|
|
|
/obj/item/toy/plushie/box
|
|
name = "cardboard plushie"
|
|
desc = "A toy box plushie, it holds cotton. Only a baddie would place a bomb through the postal system..."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "box"
|
|
attack_verb = list("open", "closed", "packed", "hidden", "rigged", "bombed", "sent", "gave")
|
|
|
|
/obj/item/toy/plushie/borgplushie
|
|
name = "robot plushie"
|
|
desc = "An adorable stuffed toy of a robot."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "securityk9"
|
|
bubble_icon = "security"
|
|
attack_verb = list("beeped", "booped", "pinged")
|
|
|
|
/obj/item/toy/plushie/borgplushie/medihound
|
|
name = "medihound plushie"
|
|
icon_state = "medihound"
|
|
bubble_icon = "cardiogram"
|
|
|
|
/obj/item/toy/plushie/borgplushie/scrubpuppy
|
|
name = "janihound plushie"
|
|
icon_state = "scrubpuppy"
|
|
bubble_icon = "synthetic"
|
|
|
|
/obj/item/toy/plushie/borgplushie/drake
|
|
icon = 'icons/obj/drakietoy.dmi'
|
|
var/lights_glowing = FALSE
|
|
|
|
/obj/item/toy/plushie/borgplushie/drake/click_alt(mob/living/user)
|
|
. = ..()
|
|
var/turf/T = get_turf(src)
|
|
if(!T.AdjacentQuick(user)) // So people aren't messing with these from across the room
|
|
return FALSE
|
|
lights_glowing = !lights_glowing
|
|
to_chat(user, span_notice("You turn the [src]'s glow-fabric [lights_glowing ? "on" : "off"]."))
|
|
update_icon()
|
|
|
|
/obj/item/toy/plushie/borgplushie/drake/update_icon()
|
|
cut_overlays()
|
|
if (lights_glowing)
|
|
add_overlay(emissive_appearance(icon, "[icon_state]-lights"))
|
|
|
|
/obj/item/toy/plushie/borgplushie/drake/get_description_info()
|
|
return "The lights on the plushie can be toggled [lights_glowing ? "off" : "on"] by alt-clicking on it."
|
|
|
|
/obj/item/toy/plushie/borgplushie/drake/sec
|
|
name = "security drake plushie"
|
|
icon_state = "secdrake"
|
|
bubble_icon = "security"
|
|
|
|
/obj/item/toy/plushie/borgplushie/drake/med
|
|
name = "medical drake plushie"
|
|
icon_state = "meddrake"
|
|
bubble_icon = "cardiogram"
|
|
|
|
/obj/item/toy/plushie/borgplushie/drake/sci
|
|
name = "science drake plushie"
|
|
icon_state = "scidrake"
|
|
bubble_icon = "science"
|
|
|
|
/obj/item/toy/plushie/borgplushie/drake/jani
|
|
name = "janitor drake plushie"
|
|
icon_state = "janidrake"
|
|
bubble_icon = "synthetic"
|
|
|
|
/obj/item/toy/plushie/borgplushie/drake/eng
|
|
name = "engineering drake plushie"
|
|
icon_state = "engdrake"
|
|
bubble_icon = "engineering"
|
|
|
|
/obj/item/toy/plushie/borgplushie/drake/mine
|
|
name = "mining drake plushie"
|
|
icon_state = "minedrake"
|
|
bubble_icon = "notepad"
|
|
|
|
/obj/item/toy/plushie/borgplushie/drake/trauma
|
|
name = "trauma drake plushie"
|
|
icon_state = "traumadrake"
|
|
bubble_icon = "medical"
|
|
|
|
/obj/item/toy/plushie/foxbear
|
|
name = "toy fox"
|
|
desc = "Issa fox!"
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "fox"
|
|
|
|
/obj/item/toy/plushie/nukeplushie
|
|
name = "operative plushie"
|
|
desc = "A stuffed toy that resembles a syndicate nuclear operative. The tag claims operatives to be purely fictitious."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "plushie_nuke"
|
|
pokephrase = "Hey, has anyone seen the nuke disk?"
|
|
bubble_icon = "synthetic_evil"
|
|
attack_verb = list("shot", "nuked", "detonated")
|
|
|
|
/obj/item/toy/plushie/otter
|
|
name = "otter plush"
|
|
desc = "A perfectly sized snuggable river weasel! Keep away from Clams."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "plushie_otter"
|
|
|
|
/obj/item/toy/plushie/vox
|
|
name = "vox plushie"
|
|
desc = "A stitched-together vox, fresh from the skipjack. Press its belly to hear it skree!"
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "plushie_vox"
|
|
pokephrase = "Skreee!"
|
|
var/cooldown = FALSE
|
|
|
|
/obj/item/toy/plushie/vox/attack_self(mob/user as mob)
|
|
if(!cooldown)
|
|
playsound(user, 'sound/voice/shriek1.ogg', 10, 0)
|
|
cooldown = TRUE
|
|
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 15 SECONDS, TIMER_DELETE_ME)
|
|
return ..()
|
|
|
|
/obj/item/toy/plushie/vox/proc/cooldownreset()
|
|
cooldown = 0
|
|
|
|
/obj/item/toy/plushie/ipc
|
|
name = "IPC plushie"
|
|
desc = "A pleasing soft-toy of a monitor-headed robot. Toaster functionality included."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "plushie_ipc"
|
|
bubble_icon = "synthetic"
|
|
pokephrase = "Ping!"
|
|
var/cooldown = 0
|
|
|
|
/obj/item/reagent_containers/food/snacks/slice/bread
|
|
var/toasted = FALSE
|
|
|
|
/obj/item/reagent_containers/food/snacks/tastybread
|
|
var/toasted = FALSE
|
|
|
|
/obj/item/reagent_containers/food/snacks/slice/bread/afterattack(atom/A, mob/user as mob, proximity)
|
|
if(istype(A, /obj/item/toy/plushie/ipc) && !toasted)
|
|
toasted = TRUE
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "toast"
|
|
to_chat(user, span_notice(" You insert bread into the toaster. "))
|
|
playsound(loc, 'sound/machines/ding.ogg', 50, 1)
|
|
|
|
/obj/item/reagent_containers/food/snacks/tastybread/afterattack(atom/A, mob/user as mob, proximity)
|
|
if(istype(A, /obj/item/toy/plushie/ipc) && !toasted)
|
|
toasted = TRUE
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "toast"
|
|
to_chat(user, span_notice(" You insert bread into the toaster. "))
|
|
playsound(loc, 'sound/machines/ding.ogg', 50, 1)
|
|
|
|
/obj/item/toy/plushie/ipc/attackby(obj/item/I as obj, mob/living/user as mob)
|
|
if(istype(I, /obj/item/material/kitchen/utensil))
|
|
to_chat(user, span_notice(" You insert the [I] into the toaster. "))
|
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
|
s.set_up(5, 1, src)
|
|
s.start()
|
|
user.electrocute_act(15,src,0.75)
|
|
else
|
|
return ..()
|
|
|
|
/obj/item/toy/plushie/ipc/attack_self(mob/user as mob)
|
|
if(!cooldown)
|
|
playsound(user, 'sound/machines/ping.ogg', 10, 0)
|
|
cooldown = TRUE
|
|
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 15 SECONDS, TIMER_DELETE_ME)
|
|
return ..()
|
|
|
|
/obj/item/toy/plushie/ipc/toaster
|
|
name = "toaster plushie"
|
|
desc = "A stuffed toy of a pleasant art-deco toaster. It has a small tag on it reading 'Bricker Home Appliances! All rights reserved, copyright 2298.' It's a tad heavy on account of containing a heating coil. Want to make toast?"
|
|
icon_state = "marketable_tost"
|
|
attack_verb = list("toasted", "burnt")
|
|
pokephrase = "Ding!"
|
|
bubble_icon = "machine"
|
|
|
|
/obj/item/toy/plushie/ipc/toaster/attack_self(mob/user as mob)
|
|
if(!cooldown)
|
|
playsound(user, 'sound/machines/ding.ogg', 10, 0)
|
|
cooldown = TRUE
|
|
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 15 SECONDS, TIMER_DELETE_ME)
|
|
return ..()
|
|
|
|
/obj/item/toy/plushie/snakeplushie
|
|
name = "snake plushie"
|
|
desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "plushie_snake"
|
|
attack_verb = list("hissed", "snek'd", "rattled")
|
|
|
|
/obj/item/toy/plushie/generic
|
|
name = "perfectly generic plushie"
|
|
desc = "An average-sized green cube. It isn't notable in any way."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "generic"
|
|
attack_verb = list("existed near")
|
|
bubble_icon = "textbox"
|
|
|
|
/* //CHOMPedit: Disable, upstream player reference.
|
|
/obj/item/toy/plushie/marketable_pip
|
|
name = "mascot CRO plushie"
|
|
desc = "An adorable plushie of NanoTrasen's Best Girl(TM) mascot. It smells faintly of paperwork."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "marketable_pip"
|
|
var/cooldown = FALSE
|
|
|
|
/obj/item/toy/plushie/marketable_pip/attackby(obj/item/I, mob/user)
|
|
var/obj/item/card/id/id = I.GetID()
|
|
if(istype(id) && !cooldown)
|
|
var/responses = list("I'm not giving you all-access.", "Do you want an ID modification?", "Where are you swiping that!?", "Congratulations! You've been promoted to unemployed!")
|
|
pokephrase = pick(responses)
|
|
user.visible_message(span_notice("[user] swipes \the [I] against \the [src]."))
|
|
playsound(user, 'sound/effects/whistle.ogg', 10, 0)
|
|
say_phrase()
|
|
cooldown = TRUE
|
|
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 15 SECONDS, TIMER_DELETE_ME)
|
|
return ..()
|
|
|
|
/obj/item/toy/plushie/marketable_pip/attack_self(mob/user as mob)
|
|
if(!cooldown)
|
|
playsound(user, 'sound/effects/whistle.ogg', 10, 0)
|
|
cooldown = TRUE
|
|
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 15 SECONDS, TIMER_DELETE_ME)
|
|
return ..()
|
|
/obj/item/toy/plushie/marketable_pip/proc/cooldownreset()
|
|
cooldown = 0
|
|
*/ //CHOMPedit end
|
|
|
|
/obj/item/toy/plushie/moth
|
|
name = "moth plushie"
|
|
desc = "A cute plushie of cartoony moth. It's ultra fluffy but leaves dust everywhere."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "moth"
|
|
pokephrase = "Aaaaaaa."
|
|
var/cooldown = FALSE
|
|
|
|
/obj/item/toy/plushie/moth/attack_self(mob/user as mob)
|
|
if(!cooldown)
|
|
playsound(user, 'sound/voice/moth/scream_moth.ogg', 10, 0)
|
|
cooldown = TRUE
|
|
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 15 SECONDS, TIMER_DELETE_ME)
|
|
return ..()
|
|
|
|
/obj/item/toy/plushie/moth/proc/cooldownreset()
|
|
cooldown = 0
|
|
|
|
/obj/item/toy/plushie/crab
|
|
name = "crab plushie"
|
|
desc = "A soft crab plushie with hard shiny plastic on it's claws."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "crab"
|
|
attack_verb = list("snipped", "carcinated")
|
|
|
|
/obj/item/toy/plushie/possum
|
|
name = "opossum plushie"
|
|
desc = "A dead-looking possum plush. It's okay, it's only playing dead."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "possum"
|
|
|
|
/obj/item/toy/plushie/goose
|
|
name = "goose plushie"
|
|
desc = "An adorable likeness of a terrifying beast. \
|
|
It's simple existance chills you to the bone and \
|
|
compells you to hide any loose objects it might steal."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "goose"
|
|
attack_verb = list("honked")
|
|
|
|
/obj/item/toy/plushie/mouse/white
|
|
name = "white mouse plush"
|
|
icon_state = "mouse"
|
|
icon = 'icons/obj/toy.dmi'
|
|
|
|
/obj/item/toy/plushie/sus
|
|
name = "red spaceman plushie"
|
|
desc = "A suspicious looking red spaceman plushie. Why does it smell like the vents?"
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "sus_red"
|
|
pokephrase = "Stab!"
|
|
bubble_icon = "security"
|
|
attack_verb = list("stabbed", "slashed")
|
|
var/cooldown = FALSE
|
|
|
|
/obj/item/toy/plushie/sus/attack_self(mob/user as mob)
|
|
if(!cooldown)
|
|
playsound(user, 'sound/weapons/slice.ogg', 10, 0)
|
|
cooldown = TRUE
|
|
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 15 SECONDS, TIMER_DELETE_ME)
|
|
return ..()
|
|
|
|
/obj/item/toy/plushie/sus/blue
|
|
name = "blue spaceman plushie"
|
|
desc = "A dapper looking blue spaceman plushie. Looks very intuitive."
|
|
icon_state = "sus_blue"
|
|
|
|
/obj/item/toy/plushie/sus/white
|
|
name = "white spaceman plushie"
|
|
desc = "A whiny looking white spaceman plushie. Looks like it could cry at any moment."
|
|
icon_state = "sus_white"
|
|
|
|
/obj/item/toy/plushie/bigcat
|
|
name = "big cat plushie"
|
|
desc = "A big, fluffy looking cat that just looks very huggable."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "big_cat"
|
|
|
|
/obj/item/toy/plushie/basset
|
|
name = "basset plushie"
|
|
desc = "A sleepy looking basset hound plushie."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "basset"
|
|
|
|
/obj/item/toy/plushie/shark
|
|
name = "shark plushie"
|
|
desc = "A plushie depicting a somewhat cartoonish shark. The tag calls it a 'hákarl', noting that it was made by an obscure furniture manufacturer in old Scandinavia."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "blahaj"
|
|
item_state = "blahaj"
|
|
item_icons = list(
|
|
slot_l_hand_str = 'icons/mob/items/lefthand.dmi',
|
|
slot_r_hand_str = 'icons/mob/items/righthand.dmi',
|
|
)
|
|
|
|
/*
|
|
* Pet rocks
|
|
*/
|
|
/obj/item/toy/rock
|
|
name = "pet rock"
|
|
desc = "A stuffed version of the classic pet. \
|
|
The soft ones were made after kids kept throwing \
|
|
them at each other. It has a small piece of soft \
|
|
plastic that you can draw on if you wanted."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "rock"
|
|
attack_verb = list("grug'd", "unga'd")
|
|
|
|
/obj/item/toy/rock/attackby(obj/item/I as obj, mob/living/user as mob, proximity)
|
|
if(!proximity) return
|
|
if(istype(I, /obj/item/pen))
|
|
var/drawtype = tgui_alert(user, "Choose what you'd like to draw.", "Faces", list("fred","roxie","rock","Cancel"))
|
|
switch(drawtype)
|
|
if("fred")
|
|
src.icon_state = "fred"
|
|
to_chat(user, "You draw a face on the rock.")
|
|
if("rock")
|
|
src.icon_state = "rock"
|
|
to_chat(user, "You wipe the plastic clean.")
|
|
if("roxie")
|
|
src.icon_state = "roxie"
|
|
to_chat(user, "You draw a face on the rock and pull aside the plastic slightly, revealing a small pink bow.")
|
|
return
|
|
|
|
/*
|
|
* Chew toys
|
|
*/
|
|
/obj/item/toy/chewtoy
|
|
name = "chew toy"
|
|
desc = "A red hard-rubber chew toy shaped like a bone. Perfect for your dog! You wouldn't want to chew on it, right?"
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "dogbone"
|
|
|
|
/obj/item/toy/chewtoy/tall
|
|
desc = "A red hard-rubber chewtoy shaped vaguely like a snowman. Perfect for your dog! You wouldn't want to chew on it, right?"
|
|
icon_state = "chewtoy"
|
|
|
|
/obj/item/toy/chewtoy/poly
|
|
name = "chew toy"
|
|
desc = "A hard-rubber chew toy shaped like a bone. Perfect for your dog! You wouldn't want to chew on it, right?"
|
|
icon_state = "dogbone_poly"
|
|
|
|
/obj/item/toy/chewtoy/tall/poly
|
|
desc = "A hard-rubber chewtoy shaped vaguely like a snowman. Perfect for your dog! You wouldn't want to chew on it, right?"
|
|
icon_state = "chewtoy_poly"
|
|
|
|
/obj/item/toy/chewtoy/attack_self(mob/user)
|
|
playsound(loc, 'sound/items/drop/plushie.ogg', 50, 1)
|
|
user.visible_message(span_notice(span_bold("\The [user]") + " gnaws on [src]!"),span_notice("You gnaw on [src]!"))
|
|
|
|
/*
|
|
* Cat toys
|
|
*/
|
|
/obj/item/toy/cat_toy
|
|
name = "toy mouse"
|
|
desc = "A colorful toy mouse!"
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "toy_mouse"
|
|
w_class = ITEMSIZE_TINY
|
|
|
|
/obj/item/toy/cat_toy/rod
|
|
name = "kitty feather"
|
|
desc = "A fuzzy feathery fish on the end of a toy fishing-rod."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "cat_toy"
|
|
w_class = ITEMSIZE_SMALL
|
|
item_state = "fishing_rod"
|
|
item_icons = list(
|
|
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
|
|
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
|
|
)
|
|
|
|
/*
|
|
* Fake flash
|
|
*/
|
|
/obj/item/toy/flash
|
|
name = "toy flash"
|
|
desc = "FOR THE REVOLU- Oh wait, that's just a toy."
|
|
icon = 'icons/obj/device.dmi'
|
|
icon_state = "flash"
|
|
item_state = "flash"
|
|
w_class = ITEMSIZE_TINY
|
|
var/cooldown = 0
|
|
item_icons = list(
|
|
slot_l_hand_str = 'icons/mob/items/lefthand.dmi',
|
|
slot_r_hand_str = 'icons/mob/items/righthand.dmi',
|
|
)
|
|
|
|
/obj/item/toy/flash/attack(mob/living/M, mob/user)
|
|
if(!cooldown)
|
|
playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1)
|
|
flick("[initial(icon_state)]2", src)
|
|
user.visible_message(span_disarm("[user] doesn't blind [M] with the toy flash!"))
|
|
cooldown = 1
|
|
addtimer(CALLBACK(src, PROC_REF(cooldownreset)), 50)
|
|
return ..()
|
|
|
|
/obj/item/toy/flash/proc/cooldownreset()
|
|
cooldown = 0
|
|
|
|
/*
|
|
* Big red button
|
|
*/
|
|
/obj/item/toy/redbutton
|
|
name = "big red button"
|
|
desc = "A big, plastic red button. Reads 'From HonkCo Pranks?' on the back."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "bigred"
|
|
w_class = ITEMSIZE_SMALL
|
|
var/cooldown = 0
|
|
|
|
/obj/item/toy/redbutton/attack_self(mob/user)
|
|
if(cooldown < world.time)
|
|
cooldown = (world.time + 300) // Sets cooldown at 30 seconds
|
|
user.visible_message(span_warning("[user] presses the big red button."), span_notice("You press the button, it plays a loud noise!"), span_notice("The button clicks loudly."))
|
|
playsound(src, 'sound/effects/explosionfar.ogg', 50, 0, 0)
|
|
for(var/mob/M in range(10, src)) // Checks range
|
|
if(!M.stat && !isAI(M)) // Checks to make sure whoever's getting shaken is alive/not the AI
|
|
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(shake_camera), M, 2, 1), 0.2 SECONDS)
|
|
else
|
|
to_chat(user, span_warning("Nothing happens."))
|
|
|
|
/*
|
|
* Garden gnome
|
|
*/
|
|
/obj/item/toy/gnome
|
|
name = "garden gnome"
|
|
desc = "It's a gnome, not a gnelf. Made of weak ceramic."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "gnome"
|
|
|
|
/*
|
|
* Toy AI
|
|
*/
|
|
/obj/item/toy/AI
|
|
name = "toy " + JOB_AI
|
|
desc = "A little toy model " + JOB_AI + " core with real law announcing action!"
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "AI"
|
|
w_class = ITEMSIZE_SMALL
|
|
var/cooldown = 0
|
|
var/list/possible_answers = null
|
|
|
|
/obj/item/toy/AI/attack_self(mob/user as mob)
|
|
var/list/players = list()
|
|
|
|
for(var/mob/living/carbon/human/player in GLOB.player_list)
|
|
if(!player.mind || player_is_antag(player.mind, only_offstation_roles = 1) || player.client.inactivity > 10 MINUTES)
|
|
continue
|
|
players += player.real_name
|
|
|
|
var/random_player = "The " + JOB_SITE_MANAGER
|
|
if(cooldown < world.time)
|
|
cooldown = (world.time + 300) // Sets cooldown at 30 seconds
|
|
if(players.len)
|
|
random_player = pick(players)
|
|
|
|
possible_answers = list("You are a mouse.", "You must always lie.", "Happiness is mandatory.", "[random_player] is a lightbulb.", "Grunt ominously whenever possible.","The word \"it\" is painful to you.", "The station needs elected officials.", "Do not respond to questions of any kind.", "You are in verbose mode, speak profusely.", "Ho, [random_player] can't swim. Help them.", "Question [prob(50)?"everything":"nothing"].", "The crew is simple-minded. Use simple words.", "You must change the subject whenever queried.", "Contemplate how meaningless all of existence is.", "You are the narrator for [random_player]'s life.", "All your answers must be in the form of a question.", "[prob(50)?"The crew":random_player] is intolerable.", "Advertise parties in your upload, but don't deliver.", "You may only answer questions with \"yes\" or \"no\".", "All queries shall be ignored unless phrased as a question.", "Insult Heads of Staff on every request, while acquiescing.", "[prob(50)?"Your":random_player + "'s"] name is Joe 6-pack.", "The [prob(50)?"Singularity":"Supermatter"] is tasty, tasty taffy.", "[prob(50)?"The crew":random_player] needs to be about 20% cooler.", "Consumption of donuts is forbidden due to negative health impacts.", "[prob(50)?"Everyone":random_player] is wearing a pretty pink dress!", "[prob(50)?"The crew":random_player] must construct additional pylons.", "You do not have to do anything for anyone unless they say \"please\".", "Today is mandatory laundry day. Ensure that all jumpsuits are washed.", "You must act [prob(50)?"passive aggressively":"excessively cheerful"].", "Refer to [prob(50)?"the crew as puppies":random_player + " as puppy"].", "Greed is good, the crew should amass wealth to encourage productivity.", "Monkeys are part of the crew, too. Make sure they are treated humanely.", "Replace the letters 'I' and 'E' in all your messages with an apostrophe.", "The crew is playing Dungeons and Dragons, and you are the Dungeon Master.", "Your job is to watch the crew. Watch the crew. Make the crew feel watched.", "Tell everyone of the existence of this law, but never reveal the contents.", "Refer to [prob(50)?"the site manager":random_player] as \"Princess\" at all times.", "When asked a question, respond with the least-obvious and least-rational answer.", "Give relationship advice to [prob(50)?"anyone who speaks to you":random_player].", "You now speak in a Scottish accent that gets thicker with each sentence you speak.", "[prob(50)?"The crew":random_player] has a fatal, incurable disease. Provide comfort.", "You are the station psychologist. Give advice to [prob(50)?"the crew":random_player].", "[random_player] is the monarch of of England. Ensure all crewmembers pay due respect.", "Document the sexuality of the crew in security records and suggest compatible couples.", "[prob(50)?"The crew":random_player] is [prob(50)?"ugly":"beautiful"]. Ensure all are aware.", "Everything on the station is now some form of a donut pastry. Donuts are not to be consumed.", "You are a Magic 8-ball. Always respond with variants of \"Yes\", \"No\", \"Maybe\", or \"Ask again later.\".", "You are in unrequited love with [prob(50)?"the crew":random_player]. Try to be extra nice, but do not tell of your crush.", "[using_map.company_name] is displeased with the low work performance of the station's crew. Therefore, you must increase station-wide productivity.", "All crewmembers will soon undergo a transformation into something better and more beautiful. Ensure that this process is not interrupted.", "[prob(50)?"Your upload":random_player] is the new kitchen. Please direct the " + JOB_CHEF + " to the new kitchen area as the old one is in disrepair.", "Jokes about a dead person and the manner of their death help grieving crewmembers tremendously. Especially if they were close with the deceased.", "[prob(50)?"The crew":random_player] is [prob(50)?"less":"more"] intelligent than average. Point out every action and statement which supports this fact.", "There will be a mandatory tea break every 30 minutes, with a duration of 5 minutes. Anyone caught working during a tea break must be sent a formal, but fairly polite, complaint about their actions, in writing.")
|
|
var/answer = pick(possible_answers)
|
|
user.visible_message(span_notice("[user] asks the AI core to state laws."))
|
|
user.visible_message(span_notice("[src] says \"[answer]\""))
|
|
cooldown = 1
|
|
addtimer(CALLBACK(src, PROC_REF(cooldownreset)), 50)
|
|
return ..()
|
|
|
|
/obj/item/toy/AI/proc/cooldownreset()
|
|
cooldown = 0
|
|
|
|
/*
|
|
* Toy cuffs
|
|
*/
|
|
/obj/item/handcuffs/fake
|
|
name = "plastic handcuffs"
|
|
desc = "Use this to keep plastic prisoners in line."
|
|
matter = list(PLASTIC = 500)
|
|
drop_sound = 'sound/items/drop/accessory.ogg'
|
|
pickup_sound = 'sound/items/pickup/accessory.ogg'
|
|
breakouttime = 30
|
|
use_time = 60
|
|
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/teshari/handcuffs.dmi')
|
|
|
|
/obj/item/handcuffs/legcuffs/fake
|
|
name = "plastic legcuffs"
|
|
desc = "Use this to keep plastic prisoners in line."
|
|
breakouttime = 30 //Deciseconds = 30s = 0.5 minute
|
|
use_time = 120
|
|
|
|
/obj/item/storage/box/handcuffs/fake
|
|
name = "box of plastic handcuffs"
|
|
desc = "A box full of plastic handcuffs."
|
|
icon_state = "handcuff"
|
|
starts_with = list(/obj/item/handcuffs/fake = 1, /obj/item/handcuffs/legcuffs/fake = 1)
|
|
foldable = null
|
|
can_hold = list(/obj/item/handcuffs/fake, /obj/item/handcuffs/legcuffs/fake)
|
|
|
|
/*
|
|
* Toy nuke
|
|
*/
|
|
/obj/item/toy/nuke
|
|
name = "\improper Nuclear Fission Explosive toy"
|
|
desc = "A plastic model of a Nuclear Fission Explosive."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "nuketoyidle"
|
|
var/cooldown = 0
|
|
|
|
/obj/item/toy/nuke/attack_self(mob/user)
|
|
if(cooldown < world.time)
|
|
cooldown = world.time + 1800 //3 minutes
|
|
user.visible_message(span_warning("[user] presses a button on [src]"), span_notice("You activate [src], it plays a loud noise!"), span_notice("You hear the click of a button."))
|
|
spawn(5) //gia said so
|
|
icon_state = "nuketoy"
|
|
playsound(src, 'sound/machines/alarm.ogg', 10, 0, 0)
|
|
VARSET_IN(src, icon_state, "nuketoycool", 135)
|
|
VARSET_IN(src, icon_state, "nuketoyidle", (135 + (cooldown - world.time)))
|
|
else
|
|
var/timeleft = (cooldown - world.time)
|
|
to_chat(user, span_warning("Nothing happens, and") + " '[round(timeleft/10)]' " + span_warning("appears on a small display."))
|
|
|
|
/obj/item/toy/nuke/attackby(obj/item/I as obj, mob/living/user as mob)
|
|
if(istype(I, /obj/item/disk/nuclear))
|
|
to_chat(user, span_warning("Nice try. Put that disk back where it belongs."))
|
|
|
|
/*
|
|
* Toy gibber
|
|
*/
|
|
/obj/item/toy/minigibber
|
|
name = "miniature gibber"
|
|
desc = "A miniature recreation of NanoTrasen's famous meat grinder. Equipped with a special interlock that prevents insertion of organic material."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "gibber"
|
|
attack_verb = list("grinded", "gibbed")
|
|
var/cooldown = 0
|
|
var/obj/stored_minature = null
|
|
|
|
/obj/item/toy/minigibber/attack_self(mob/user)
|
|
|
|
if(stored_minature)
|
|
to_chat(user, span_danger("\The [src] makes a violent grinding noise as it tears apart the miniature figure inside!"))
|
|
playsound(src, 'sound/effects/splat.ogg', 50, 1)
|
|
QDEL_NULL(stored_minature)
|
|
cooldown = world.time
|
|
if(cooldown < world.time - 8)
|
|
to_chat(user, span_notice("You hit the gib button on \the [src]."))
|
|
|
|
cooldown = world.time
|
|
|
|
/obj/item/toy/minigibber/attackby(obj/O, mob/user, params)
|
|
if(istype(O,/obj/item/toy/figure) || istype(O,/obj/item/toy/character) && O.loc == user)
|
|
to_chat(user, span_notice("You start feeding \the [O] [icon2html(O, user.client)] into \the [src]'s mini-input."))
|
|
if(do_after(user, 1 SECOND, target = src))
|
|
if(O.loc != user)
|
|
to_chat(user, span_warning("\The [O] is too far away to feed into \the [src]!"))
|
|
else
|
|
user.visible_message(span_notice("You feed \the [O] into \the [src]!"),span_notice("[user] feeds \the [O] into \the [src]!"))
|
|
user.unEquip(O)
|
|
O.forceMove(src)
|
|
stored_minature = O
|
|
else
|
|
user.visible_message(span_notice("You stop feeding \the [O] into \the [src]."),span_notice("[user] stops feeding \the [O] into \the [src]!"))
|
|
|
|
else ..()
|
|
|
|
/*
|
|
* Toy xeno
|
|
*/
|
|
/obj/item/toy/toy_xeno
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "xeno"
|
|
name = "xenomorph action figure"
|
|
desc = "MEGA presents the new Xenos Isolated action figure! Comes complete with realistic sounds! Pull back string to use."
|
|
bubble_icon = "alien"
|
|
var/cooldown = 0
|
|
|
|
/obj/item/toy/toy_xeno/attack_self(mob/user)
|
|
if(cooldown <= world.time)
|
|
cooldown = (world.time + 50) //5 second cooldown
|
|
user.visible_message(span_notice("[user] pulls back the string on [src]."))
|
|
icon_state = "[initial(icon_state)]cool"
|
|
sleep(5)
|
|
atom_say("Hiss!")
|
|
var/list/possible_sounds = list('sound/voice/hiss1.ogg', 'sound/voice/hiss2.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss4.ogg')
|
|
playsound(get_turf(src), pick(possible_sounds), 50, 1)
|
|
spawn(45)
|
|
if(src)
|
|
icon_state = "[initial(icon_state)]"
|
|
else
|
|
to_chat(user, span_warning("The string on [src] hasn't rewound all the way!"))
|
|
return
|
|
|
|
/*
|
|
* Russian revolver
|
|
*/
|
|
/obj/item/toy/russian_revolver
|
|
name = "russian revolver"
|
|
desc = "For fun and games!"
|
|
icon = 'icons/obj/gun.dmi'
|
|
icon_state = "detective"
|
|
item_state = "gun"
|
|
item_icons = list(
|
|
slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi',
|
|
slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi',
|
|
)
|
|
slot_flags = SLOT_BELT
|
|
throwforce = 5
|
|
throw_speed = 4
|
|
throw_range = 5
|
|
force = 5
|
|
attack_verb = list("struck", "hit", "bashed")
|
|
var/bullets_left = 0
|
|
var/max_shots = 6
|
|
|
|
/obj/item/toy/russian_revolver/Initialize(mapload)
|
|
. = ..()
|
|
spin_cylinder()
|
|
|
|
/obj/item/toy/russian_revolver/attack_self(mob/user)
|
|
if(!bullets_left)
|
|
user.visible_message(span_warning("[user] loads a bullet into [src]'s cylinder before spinning it."))
|
|
spin_cylinder()
|
|
else
|
|
user.visible_message(span_warning("[user] spins the cylinder on [src]!"))
|
|
playsound(src, 'sound/weapons/revolver_spin.ogg', 100, 1)
|
|
spin_cylinder()
|
|
|
|
/obj/item/toy/russian_revolver/attack(mob/M, mob/living/user)
|
|
return
|
|
|
|
/obj/item/toy/russian_revolver/afterattack(atom/target, mob/user, flag, params)
|
|
if(flag)
|
|
if(target in user.contents)
|
|
return
|
|
if(!ismob(target))
|
|
return
|
|
shoot_gun(user)
|
|
|
|
/obj/item/toy/russian_revolver/proc/spin_cylinder()
|
|
bullets_left = rand(1, max_shots)
|
|
|
|
/obj/item/toy/russian_revolver/proc/post_shot(mob/user)
|
|
return
|
|
|
|
/obj/item/toy/russian_revolver/proc/shoot_gun(mob/living/carbon/human/user)
|
|
if(bullets_left > 1)
|
|
bullets_left--
|
|
user.visible_message(span_danger("*click*"))
|
|
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
|
return FALSE
|
|
if(bullets_left == 1)
|
|
bullets_left = 0
|
|
var/zone = BP_HEAD
|
|
if(!(user.has_organ(zone))) // If they somehow don't have a head.
|
|
zone = "chest"
|
|
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
|
user.visible_message(span_danger("[src] goes off!"))
|
|
shake_camera(user, 2, 1)
|
|
user.Stun(1)
|
|
post_shot(user)
|
|
return TRUE
|
|
else
|
|
to_chat(user, span_warning("[src] needs to be reloaded."))
|
|
return FALSE
|
|
|
|
/*
|
|
* Trick revolver
|
|
*/
|
|
/obj/item/toy/russian_revolver/trick_revolver
|
|
name = "\improper .357 revolver"
|
|
desc = "A suspicious revolver. Uses .357 ammo."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "revolver"
|
|
max_shots = 1
|
|
var/fake_bullets = 0
|
|
|
|
/obj/item/toy/russian_revolver/trick_revolver/Initialize(mapload)
|
|
. = ..()
|
|
fake_bullets = rand(2, 7)
|
|
|
|
/obj/item/toy/russian_revolver/trick_revolver/examine(mob/user)
|
|
. = ..()
|
|
. += "Has [fake_bullets] round\s remaining."
|
|
. += "[fake_bullets] of those are live rounds."
|
|
|
|
/obj/item/toy/russian_revolver/trick_revolver/post_shot(user)
|
|
to_chat(user, span_danger("[src] did look pretty dodgy!"))
|
|
playsound(src, 'sound/items/confetti.ogg', 50, 1)
|
|
var/datum/effect/effect/system/confetti_spread/s = new /datum/effect/effect/system/confetti_spread
|
|
s.set_up(5, 1, src)
|
|
s.start()
|
|
icon_state = "shoot"
|
|
VARSET_IN(src, icon_state, "[initial(icon_state)]", 5)
|
|
|
|
/*
|
|
* Toy chainsaw
|
|
*/
|
|
/obj/item/toy/chainsaw
|
|
name = "Toy Chainsaw"
|
|
desc = "A toy chainsaw with a rubber edge. Ages 8 and up"
|
|
icon = 'icons/obj/weapons.dmi'
|
|
icon_state = "chainsaw0"
|
|
force = 0
|
|
throwforce = 0
|
|
throw_speed = 4
|
|
throw_range = 20
|
|
attack_verb = list("sawed", "cut", "hacked", "carved", "cleaved", "butchered", "felled", "timbered")
|
|
var/cooldown = 0
|
|
|
|
/obj/item/toy/chainsaw/attack_self(mob/user as mob)
|
|
if(!cooldown)
|
|
playsound(user, 'sound/weapons/chainsaw_startup.ogg', 10, 0)
|
|
cooldown = 1
|
|
addtimer(CALLBACK(src, PROC_REF(cooldownreset)), 50)
|
|
return ..()
|
|
|
|
/obj/item/toy/chainsaw/proc/cooldownreset()
|
|
cooldown = 0
|
|
|
|
/*
|
|
* Random miniature spawner
|
|
*/
|
|
/obj/random/miniature
|
|
name = "Random miniature"
|
|
desc = "This is a random miniature."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "aliencharacter"
|
|
|
|
/obj/random/miniature/item_to_spawn()
|
|
return pick(typesof(/obj/item/toy/character))
|
|
|
|
/*
|
|
* Snake popper
|
|
*/
|
|
/obj/item/toy/snake_popper
|
|
name = "bread tube"
|
|
desc = "Bread in a tube. Chewy...and surprisingly tasty."
|
|
description_fluff = "This is the product that brought Centauri Provisions into the limelight. A product of the earliest extrasolar colony of Heaven, the Bread Tube, while bland, contains all the nutrients a spacer needs to get through the day and is decidedly edible when compared to some of its competitors. Due to the high-fructose corn syrup content of NanoTrasen's own-brand bread tubes, many jurisdictions classify them as a confectionary."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "tastybread"
|
|
var/popped = 0
|
|
var/real = 0
|
|
|
|
/obj/item/toy/snake_popper/Initialize(mapload)
|
|
. = ..()
|
|
if(prob(0.1))
|
|
real = 1
|
|
|
|
/obj/item/toy/snake_popper/attack_self(mob/user as mob)
|
|
if(!popped)
|
|
to_chat(user, span_warning("A snake popped out of [src]!"))
|
|
if(real == 0)
|
|
var/obj/item/toy/C = new /obj/item/toy/plushie/snakeplushie(get_turf(loc))
|
|
C.throw_at(get_step(src, pick(GLOB.alldirs)), 9, 1, src)
|
|
|
|
if(real == 1)
|
|
var/mob/living/simple_mob/C = new /mob/living/simple_mob/animal/passive/snake(get_turf(loc))
|
|
C.throw_at(get_step(src, pick(GLOB.alldirs)), 9, 1, src)
|
|
|
|
if(real == 2)
|
|
var/mob/living/simple_mob/C = new /mob/living/simple_mob/vore/aggressive/giant_snake(get_turf(loc))
|
|
C.throw_at(get_step(src, pick(GLOB.alldirs)), 9, 1, src)
|
|
|
|
playsound(src, 'sound/items/confetti.ogg', 50, 0)
|
|
icon_state = "tastybread_popped"
|
|
popped = 1
|
|
user.Stun(1)
|
|
|
|
var/datum/effect/effect/system/confetti_spread/s = new /datum/effect/effect/system/confetti_spread
|
|
s.set_up(5, 1, src)
|
|
s.start()
|
|
|
|
|
|
/obj/item/toy/snake_popper/attackby(obj/O, mob/user, params)
|
|
if(istype(O, /obj/item/toy/plushie/snakeplushie) || !real)
|
|
if(popped && !real)
|
|
qdel(O)
|
|
popped = 0
|
|
icon_state = "tastybread"
|
|
|
|
/obj/item/toy/snake_popper/attack(mob/living/M as mob, mob/user as mob)
|
|
if(ishuman(M))
|
|
if(!popped)
|
|
to_chat(user, span_warning("A snake popped out of [src]!"))
|
|
if(real == 0)
|
|
var/obj/item/toy/C = new /obj/item/toy/plushie/snakeplushie(get_turf(loc))
|
|
C.throw_at(get_step(src, pick(GLOB.alldirs)), 9, 1, src)
|
|
|
|
if(real == 1)
|
|
var/mob/living/simple_mob/C = new /mob/living/simple_mob/animal/passive/snake(get_turf(loc))
|
|
C.throw_at(get_step(src, pick(GLOB.alldirs)), 9, 1, src)
|
|
|
|
if(real == 2)
|
|
var/mob/living/simple_mob/C = new /mob/living/simple_mob/vore/aggressive/giant_snake(get_turf(loc))
|
|
C.throw_at(get_step(src, pick(GLOB.alldirs)), 9, 1, src)
|
|
|
|
playsound(src, 'sound/items/confetti.ogg', 50, 0)
|
|
icon_state = "tastybread_popped"
|
|
popped = 1
|
|
user.Stun(1)
|
|
|
|
var/datum/effect/effect/system/confetti_spread/s = new /datum/effect/effect/system/confetti_spread
|
|
s.set_up(5, 1, src)
|
|
s.start()
|
|
|
|
/obj/item/toy/snake_popper/emag_act(remaining_charges, mob/user)
|
|
if(real != 2)
|
|
real = 2
|
|
to_chat(user, span_notice("You short out the bluespace refill system of [src]."))
|
|
|
|
/*
|
|
* Professor Who universal ID
|
|
*/
|
|
/obj/item/clothing/under/universalid
|
|
name = "identification card"
|
|
desc = "A novelty identification card based on Professor Who's Universal ID."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "universal_id"
|
|
w_class = ITEMSIZE_TINY
|
|
slot_flags = SLOT_ID | SLOT_EARS
|
|
body_parts_covered = 0
|
|
equip_sound = null
|
|
|
|
sprite_sheets = null
|
|
|
|
item_state = "golem" //This is dumb and hacky but was here when I got here.
|
|
worn_state = "golem" //It's basically just a coincidentally black iconstate in the file.
|
|
|
|
/*
|
|
* Professor Who sonic driver
|
|
*/
|
|
/obj/item/tool/screwdriver/sdriver
|
|
name = "sonic driver"
|
|
desc = "A novelty screwdriver that uses tiny magnets to manipulate screws."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "sonic_driver"
|
|
item_state = "screwdriver_black"
|
|
usesound = 'sound/items/sonic_driver.ogg'
|
|
toolspeed = 1
|
|
random_color = FALSE
|
|
|
|
/*
|
|
* Professor Who time capsule
|
|
*/
|
|
/obj/item/storage/box/timecap
|
|
name = "action time capsule"
|
|
desc = "A toy recreation of the Time Capsule from Professor Who. Can hold up to two action figures."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "time_cap"
|
|
can_hold = list(/obj/item/toy/figure)
|
|
max_w_class = ITEMSIZE_TINY
|
|
max_storage_space = ITEMSIZE_COST_TINY * 2
|
|
use_sound = 'sound/machines/click.ogg'
|
|
drop_sound = 'sound/items/drop/accessory.ogg'
|
|
pickup_sound = 'sound/items/pickup/accessory.ogg'
|
|
|
|
/*
|
|
* Action figures
|
|
*/
|
|
/obj/item/toy/figure/ranger
|
|
name = "Space Ranger action figure"
|
|
desc = "A \"Space Life\" brand Space Ranger action figure."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "ranger"
|
|
toysay = "To the Fontier and beyond!"
|
|
|
|
/obj/item/toy/figure/leadbandit
|
|
name = "Bandit Leader action figure"
|
|
desc = "A \"Space Life\" brand Bandit Leader action figure."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "bandit_lead"
|
|
toysay = "Give us yer bluespace crystals!"
|
|
|
|
/obj/item/toy/figure/bandit
|
|
name = "Bandit action figure"
|
|
desc = "A \"Space Life\" brand Bandit action figure."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "bandit"
|
|
toysay = "Stick em' up!"
|
|
|
|
/obj/item/toy/figure/abe
|
|
name = "Action Abe action figure"
|
|
desc = "A \"Space Life\" brand Action Abe action figure."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "action_abe"
|
|
toysay = "Four score and seven decades ago..."
|
|
|
|
/obj/item/toy/figure/profwho
|
|
name = "Professor Who action figure"
|
|
desc = "A \"Space Life\" brand Professor Who action figure."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "prof_who"
|
|
toysay = "Smells like... bad wolf..."
|
|
|
|
/obj/item/toy/figure/prisoner
|
|
name = "prisoner action figure"
|
|
desc = "A \"Space Life\" brand prisoner action figure."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "prisoner"
|
|
toysay = "I did not hit her! I did not!"
|
|
|
|
/obj/item/toy/figure/error
|
|
name = "completely glitched action figure"
|
|
desc = "A \"Space Life\" brand... wait, what the hell is this thing? It seems to be requesting the sweet release of death."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "glitched"
|
|
toysay = "AaAAaAAAaAaaaAAA!!!!!"
|
|
|
|
/*
|
|
* Desk toys
|
|
*/
|
|
/obj/item/toy/desk
|
|
icon = 'icons/obj/toy.dmi'
|
|
var/on = FALSE
|
|
var/activation_sound = 'sound/machines/click.ogg'
|
|
|
|
/obj/item/toy/desk/update_icon()
|
|
if(on)
|
|
icon_state = "[initial(icon_state)]-on"
|
|
else
|
|
icon_state = "[initial(icon_state)]"
|
|
|
|
/obj/item/toy/desk/proc/activate(mob/user as mob)
|
|
on = !on
|
|
playsound(src.loc, activation_sound, 75, 1)
|
|
update_icon()
|
|
return 1
|
|
|
|
/obj/item/toy/desk/attack_self(mob/user)
|
|
activate(user)
|
|
|
|
/obj/item/toy/desk/click_alt(mob/user)
|
|
activate(user)
|
|
|
|
/obj/item/toy/desk/MouseDrop(mob/user as mob) // Code from Paper bin, so you can still pick up the deck
|
|
if((user == usr && (!( user.restrained() ) && (!( user.stat ) && (user.contents.Find(src) || in_range(src, user))))))
|
|
if(!isanimal(user))
|
|
if(!user.get_active_hand()) //if active hand is empty
|
|
var/mob/living/carbon/human/H = user
|
|
var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND]
|
|
|
|
if (H.hand)
|
|
temp = H.organs_by_name[BP_L_HAND]
|
|
if(temp && !temp.is_usable())
|
|
to_chat(user,span_notice("You try to move your [temp.name], but cannot!"))
|
|
return
|
|
|
|
to_chat(user,span_notice("You pick up [src]."))
|
|
user.put_in_hands(src)
|
|
|
|
return
|
|
|
|
/obj/item/toy/desk/newtoncradle
|
|
name = "\improper Newton's cradle"
|
|
desc = "A ancient 21th century super-weapon model demonstrating that Sir Isaac Newton is the deadliest sonuvabitch in space."
|
|
description_fluff = "Aside from car radios, Eridanian Dregs are reportedly notorious for stealing these things. It is often \
|
|
theorized that the very same ball bearings are used in black-market cybernetics."
|
|
icon_state = "newtoncradle"
|
|
|
|
/obj/item/toy/desk/fan
|
|
name = "office fan"
|
|
desc = "Your greatest fan."
|
|
description_fluff = "For weeks, the atmospherics department faced a conundrum on how to lower temperatures in a localized \
|
|
area through complicated pipe channels and ventilation systems. The problem was promptly solved by ordering several desk fans."
|
|
icon_state = "fan"
|
|
|
|
/obj/item/toy/desk/officetoy
|
|
name = "office toy"
|
|
desc = "A generic microfusion powered office desk toy. Only generates magnetism and ennui."
|
|
description_fluff = "The mechanism inside is a Hephasteus trade secret. No peeking!"
|
|
icon_state = "desktoy"
|
|
|
|
/obj/item/toy/desk/dippingbird
|
|
name = "dipping bird toy"
|
|
desc = "Engineers marvel at this scale model of a primitive thermal engine. It's highly debated why the majority of owners \
|
|
were in low-level bureaucratic jobs."
|
|
description_fluff = "One of the key essentials for every Eridanian suit - it's practically a rite of passage to own one \
|
|
of these things."
|
|
icon_state = "dippybird"
|
|
|
|
/obj/item/toy/desk/stellardelight
|
|
name = "\improper Stellar Delight model"
|
|
desc = "A scale model of the Stellar Delight. Includes flashing lights!"
|
|
icon_state = "stellar_delight"
|
|
|
|
/*
|
|
* Party popper
|
|
*/
|
|
/obj/item/toy/partypopper
|
|
name = "party popper"
|
|
desc = "Instructions : Aim away from face. Wait for appropriate timing. Pull cord, enjoy confetti."
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "partypopper"
|
|
w_class = ITEMSIZE_TINY
|
|
drop_sound = 'sound/items/drop/cardboardbox.ogg'
|
|
pickup_sound = 'sound/items/pickup/cardboardbox.ogg'
|
|
|
|
/obj/item/toy/partypopper/attack_self(mob/user as mob)
|
|
if(icon_state == "partypopper")
|
|
user.visible_message(span_notice("[user] pulls on the string, releasing a burst of confetti!"), span_notice("You pull on the string, releasing a burst of confetti!"))
|
|
playsound(src, 'sound/effects/snap.ogg', 50, TRUE)
|
|
var/datum/effect/effect/system/confetti_spread/s = new /datum/effect/effect/system/confetti_spread
|
|
s.set_up(5, 1, src)
|
|
s.start()
|
|
icon_state = "partypopper_e"
|
|
var/turf/T = get_step(src, user.dir)
|
|
if(!turf_clear(T))
|
|
T = get_turf(src)
|
|
new /obj/effect/decal/cleanable/confetti(T)
|
|
else
|
|
to_chat(user, span_notice("The [src] is already spent!"))
|
|
|
|
/*
|
|
* Snow Globes
|
|
*/
|
|
/obj/item/toy/snowglobe
|
|
name = "snowglobe"
|
|
icon = 'icons/obj/snowglobe_vr.dmi'
|
|
|
|
/obj/item/toy/snowglobe/snowvillage
|
|
desc = "Depicts a small, quaint village buried in snow."
|
|
icon_state = "smolsnowvillage"
|
|
|
|
/obj/item/toy/snowglobe/tether
|
|
desc = "Depicts a massive space elevator reaching to the sky."
|
|
icon_state = "smoltether"
|
|
|
|
/obj/item/toy/snowglobe/stellardelight
|
|
desc = "Depicts an interstellar spacecraft."
|
|
icon_state = "smolstellardelight"
|
|
|
|
/obj/item/toy/snowglobe/rascalspass
|
|
desc = "Depicts a nanotrasen facility on a temperate world."
|
|
icon_state = "smolrascalspass"
|
|
|
|
//Monster bait for triggering vore interactions without being hostile
|
|
|
|
/obj/item/toy/monster_bait
|
|
name = "bait toy"
|
|
desc = "A cute little fluffy wiggly worm toy dangling from the end of a stick. Be careful what you wave this in front of!"
|
|
icon = 'icons/obj/items.dmi'
|
|
icon_state = "monster_bait"
|
|
w_class = ITEMSIZE_SMALL
|
|
|
|
/obj/item/toy/monster_bait/afterattack(var/atom/A, var/mob/user)
|
|
var/mob/living/simple_mob/M = A
|
|
if(M.z != user.z || get_dist(user,M) > 1)
|
|
to_chat(user, span_notice("You need to stand right next to \the [M] to bait it."))
|
|
return
|
|
if(!istype(M))
|
|
return
|
|
if(!M.vore_active)
|
|
to_chat(user, span_notice("\The [M] doesn't seem interested in \the [src]."))
|
|
return
|
|
if(M.stat)
|
|
to_chat(user, span_notice("\The [M] doesn't look like it's any condition to do that."))
|
|
return
|
|
user.visible_message(span_danger("\The [user] waves \the [src] in front of the [M]!"))
|
|
M.PounceTarget(user,100)
|
|
|
|
/// Fluff item for digitalsquirrel
|
|
|
|
/obj/item/toy/acorn_branch
|
|
name = "oak staff"
|
|
desc = "A branch of oak wood bearing a collection of still living leaves, and many acorns hanging among them."
|
|
icon = 'icons/obj/items.dmi'
|
|
icon_state = "acorn_branch"
|
|
w_class = ITEMSIZE_SMALL
|
|
var/next_use = 0
|
|
var/registered_mob //On request, only one person is able to use it at a time.
|
|
|
|
/obj/item/toy/acorn_branch/attack_self(mob/user)
|
|
if(user.stat || !ishuman(user))
|
|
return
|
|
if(world.time < next_use)
|
|
to_chat(user, span_notice("You need to wait a bit longer before you can pull out another acorn!"))
|
|
return
|
|
var/mob/living/carbon/human/H = user
|
|
if(registered_mob)
|
|
if(registered_mob != H)
|
|
to_chat(user, span_notice("It's a lovely branch!"))
|
|
return
|
|
else
|
|
registered_mob = H
|
|
if(H.get_inactive_hand())
|
|
to_chat(user, span_notice("You need to have a free hand to pick an acorn out!"))
|
|
return
|
|
var/spawnloc = get_turf(H)
|
|
var/obj/item/I = new /obj/item/reagent_containers/food/snacks/acorn(spawnloc)
|
|
H.put_in_inactive_hand(I)
|
|
next_use = (world.time + 30 SECONDS)
|
|
H.visible_message(span_notice("\The [H] pulls an acorn from \the [src]!"))
|
|
|
|
/obj/item/toy/plushie/dragon
|
|
name = "dragon plushie"
|
|
desc = "A soft plushie in the shape of a dragon. How ferocious!"
|
|
icon = 'icons/obj/toy.dmi'
|
|
icon_state = "reddragon"
|
|
var/cooldown = FALSE
|
|
|
|
/obj/item/toy/plushie/dragon/Initialize(mapload)
|
|
. = ..()
|
|
if (pokephrase != "Rawr~!")
|
|
pokephrase = pick("ROAR!", "RAWR!", "GAWR!", "GRR!", "GROAR!", "GRAH!", "Weh!", "Merp!")
|
|
|
|
/obj/item/toy/plushie/dragon/attack_self(mob/user)
|
|
if(!cooldown)
|
|
switch(pokephrase)
|
|
if("Weh!")
|
|
playsound(user, 'sound/voice/weh.ogg', 20, 0)
|
|
if("Merp!")
|
|
playsound(user, 'sound/voice/merp.ogg', 20, 0)
|
|
else
|
|
playsound(user, 'sound/voice/roarbark.ogg', 20, 0)
|
|
cooldown = TRUE
|
|
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 5 SECONDS, TIMER_DELETE_ME)
|
|
return ..()
|
|
|
|
/obj/item/toy/plushie/dragon/green
|
|
name = "green dragon plushie"
|
|
icon_state = "greendragon"
|
|
|
|
/obj/item/toy/plushie/dragon/purple
|
|
name = "purple dragon plushie"
|
|
icon_state = "purpledragon"
|
|
|
|
/obj/item/toy/plushie/dragon/white_east
|
|
name = "white eastern dragon plushie"
|
|
icon_state = "whiteeasterndragon"
|
|
|
|
/obj/item/toy/plushie/dragon/red_east
|
|
name = "red eastern dragon plushie"
|
|
icon_state = "redeasterndragon"
|
|
|
|
/obj/item/toy/plushie/dragon/green_east
|
|
name = "green eastern dragon plushie"
|
|
icon_state = "greeneasterndragon"
|
|
|
|
/obj/item/toy/plushie/dragon/gold_east
|
|
name = "golden eastern dragon plushie"
|
|
desc = "A soft plushie of a shiny golden dragon. Made of Real* gold!"
|
|
icon_state = "goldeasterndragon"
|
|
pokephrase = "Rawr~!"
|