mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-01-20 22:42:54 +00:00
Prize counters now spend your tickets when you purchase something - Had removed the ticket spending during my testing, forgot to re-add it before submit Toy Crossbows now properly display the name of their user when they "start scrounging for ammo" Water balloons can now be filled from sinks, ANY reagent dispenser structure (not just watertanks), and drinking glasses in addition to beakers and buckets. - Watch out for security hurling pepper-spray balloons!
1780 lines
54 KiB
Plaintext
1780 lines
54 KiB
Plaintext
/* Toys!
|
||
* Contains:
|
||
* Balloons
|
||
* Fake telebeacon
|
||
* Fake singularity
|
||
* Toy crossbow
|
||
* Toy Tommy Gun
|
||
* Toy swords
|
||
* Toy mechs
|
||
* Snap pops
|
||
* Water flower
|
||
* Toy Nuke
|
||
* Card Deck
|
||
* Therapy dolls
|
||
* Toddler doll
|
||
* Inflatable duck
|
||
* Foam armblade
|
||
* Mini Gibber
|
||
* Toy xeno
|
||
* Toy chainsaws
|
||
* Action Figures
|
||
*/
|
||
|
||
|
||
/obj/item/toy
|
||
throwforce = 0
|
||
throw_speed = 4
|
||
throw_range = 20
|
||
force = 0
|
||
|
||
|
||
/*
|
||
* Balloons
|
||
*/
|
||
/obj/item/toy/balloon
|
||
name = "water balloon"
|
||
desc = "A translucent balloon. There's nothing in it."
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "waterballoon-e"
|
||
item_state = "balloon-empty"
|
||
|
||
/obj/item/toy/balloon/New()
|
||
var/datum/reagents/R = new/datum/reagents(10)
|
||
reagents = R
|
||
R.my_atom = src
|
||
|
||
/obj/item/toy/balloon/attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||
return
|
||
|
||
/obj/item/toy/balloon/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
|
||
if(!proximity) return
|
||
if (istype(A, /obj/structure/reagent_dispensers) && get_dist(src,A) <= 1)
|
||
A.reagents.trans_to(src, 10)
|
||
user << "<span class='notice'>You fill the balloon with the contents of [A].</span>"
|
||
desc = "A translucent balloon with some form of liquid sloshing around in it."
|
||
update_icon()
|
||
return
|
||
|
||
/obj/item/toy/balloon/wash(mob/user, atom/source)
|
||
if(reagents.total_volume < 10)
|
||
reagents.add_reagent("water", min(10-reagents.total_volume, 10))
|
||
user << "<span class='notice'>You fill the balloon from the [source].</span>"
|
||
desc = "A translucent balloon with some form of liquid sloshing around in it."
|
||
update_icon()
|
||
return
|
||
|
||
/obj/item/toy/balloon/attackby(obj/O as obj, mob/user as mob, params)
|
||
if(istype(O, /obj/item/weapon/reagent_containers/glass) || istype(O, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass))
|
||
if(O.reagents)
|
||
if(O.reagents.total_volume < 1)
|
||
user << "The [O] is empty."
|
||
else if(O.reagents.total_volume >= 1)
|
||
if(O.reagents.has_reagent("facid", 1))
|
||
user << "The acid chews through the balloon!"
|
||
O.reagents.reaction(user)
|
||
qdel(src)
|
||
else
|
||
desc = "A translucent balloon with some form of liquid sloshing around in it."
|
||
user << "<span class='notice'>You fill the balloon with the contents of [O].</span>"
|
||
O.reagents.trans_to(src, 10)
|
||
update_icon()
|
||
return
|
||
|
||
/obj/item/toy/balloon/throw_impact(atom/hit_atom)
|
||
if(reagents.total_volume >= 1)
|
||
visible_message("<span class='warning'>The [src] bursts!</span>","You hear a pop and a splash.")
|
||
reagents.reaction(get_turf(hit_atom))
|
||
for(var/atom/A in get_turf(hit_atom))
|
||
reagents.reaction(A)
|
||
icon_state = "burst"
|
||
spawn(5)
|
||
if(src)
|
||
qdel(src)
|
||
return
|
||
|
||
/obj/item/toy/balloon/update_icon()
|
||
if(src.reagents.total_volume >= 1)
|
||
icon_state = "waterballoon"
|
||
item_state = "balloon"
|
||
else
|
||
icon_state = "waterballoon-e"
|
||
item_state = "balloon-empty"
|
||
|
||
/obj/item/toy/syndicateballoon
|
||
name = "syndicate balloon"
|
||
desc = "There is a tag on the back that reads \"FUK NT!11!\"."
|
||
throwforce = 0
|
||
throw_speed = 4
|
||
throw_range = 20
|
||
force = 0
|
||
icon = 'icons/obj/weapons.dmi'
|
||
icon_state = "syndballoon"
|
||
item_state = "syndballoon"
|
||
w_class = 4.0
|
||
|
||
/*
|
||
* Fake telebeacon
|
||
*/
|
||
/obj/item/toy/blink
|
||
name = "electronic blink toy game"
|
||
desc = "Blink. Blink. Blink. Ages 8 and up."
|
||
icon = 'icons/obj/radio.dmi'
|
||
icon_state = "beacon"
|
||
item_state = "signaler"
|
||
|
||
/*
|
||
* Fake singularity
|
||
*/
|
||
/obj/item/toy/spinningtoy
|
||
name = "Gravitational Singularity"
|
||
desc = "\"Singulo\" brand spinning toy."
|
||
icon = 'icons/obj/singularity.dmi'
|
||
icon_state = "singularity_s1"
|
||
|
||
|
||
/*
|
||
* Toy crossbow
|
||
*/
|
||
|
||
/obj/item/toy/crossbow
|
||
name = "foam dart crossbow"
|
||
desc = "A weapon favored by many overactive children. Ages 8 and up."
|
||
icon = 'icons/obj/gun.dmi'
|
||
icon_state = "crossbow"
|
||
item_state = "crossbow"
|
||
lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi'
|
||
righthand_file = 'icons/mob/inhands/guns_righthand.dmi'
|
||
w_class = 2.0
|
||
attack_verb = list("attacked", "struck", "hit")
|
||
var/bullets = 5
|
||
|
||
/obj/item/toy/crossbow/examine(mob/user)
|
||
..(user)
|
||
if (bullets)
|
||
user << "<span class='notice'>It is loaded with [bullets] foam darts!</span>"
|
||
|
||
/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob, params)
|
||
if(istype(I, /obj/item/toy/ammo/crossbow))
|
||
if(bullets <= 4)
|
||
user.drop_item()
|
||
qdel(I)
|
||
bullets++
|
||
user << "<span class='notice'>You load the foam dart into the crossbow.</span>"
|
||
else
|
||
usr << "<span class='warning'>It's already fully loaded.</span>"
|
||
|
||
|
||
/obj/item/toy/crossbow/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
|
||
if(!isturf(target.loc) || target == user) return
|
||
if(flag) return
|
||
|
||
if (locate (/obj/structure/table, src.loc))
|
||
return
|
||
else if (bullets)
|
||
var/turf/trg = get_turf(target)
|
||
var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src))
|
||
bullets--
|
||
D.icon_state = "foamdart"
|
||
D.name = "foam dart"
|
||
playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1)
|
||
|
||
for(var/i=0, i<6, i++)
|
||
if (D)
|
||
if(D.loc == trg) break
|
||
step_towards(D,trg)
|
||
|
||
for(var/mob/living/M in D.loc)
|
||
if(!istype(M,/mob/living)) continue
|
||
if(M == user) continue
|
||
D.visible_message("<span class='danger'>[M] was hit by the foam dart!</span>")
|
||
new /obj/item/toy/ammo/crossbow(M.loc)
|
||
qdel(D)
|
||
return
|
||
|
||
for(var/atom/A in D.loc)
|
||
if(A == user) continue
|
||
if(A.density)
|
||
new /obj/item/toy/ammo/crossbow(A.loc)
|
||
qdel(D)
|
||
|
||
sleep(1)
|
||
|
||
spawn(10)
|
||
if(D)
|
||
new /obj/item/toy/ammo/crossbow(D.loc)
|
||
qdel(D)
|
||
|
||
return
|
||
else if (bullets == 0)
|
||
user.Weaken(5)
|
||
user.visible_message("<span class='danger'>[user] realized they were out of ammo and starting scrounging for some!</span>")
|
||
|
||
|
||
|
||
/obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob)
|
||
add_fingerprint(user)
|
||
|
||
// ******* Check
|
||
|
||
if (bullets > 0 && M.lying)
|
||
visible_message("<span class='danger'>[user] casually lines up a shot with [M]'s head and pulls the trigger!</span>", "<span class='danger'>You hear the sound of foam against skull.</span>")
|
||
M.visible_message("<span class='warning'>[M] was hit in the head by the foam dart!</span>")
|
||
playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1)
|
||
new /obj/item/toy/ammo/crossbow(M.loc)
|
||
bullets--
|
||
else if (M.lying && bullets == 0)
|
||
visible_message("<span class='danger'>[user] casually lines up a shot with [M]'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!</span>", "<span class='danger'>You hear someone fall.</span>")
|
||
user.Weaken(5)
|
||
return
|
||
|
||
/obj/item/toy/ammo/crossbow
|
||
name = "foam dart"
|
||
desc = "Its nerf or nothing! Ages 8 and up."
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "foamdart"
|
||
w_class = 1.0
|
||
|
||
/obj/effect/foam_dart_dummy
|
||
name = ""
|
||
desc = ""
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "null"
|
||
anchored = 1
|
||
density = 0
|
||
|
||
|
||
/*
|
||
* Tommy gun
|
||
*/
|
||
|
||
/obj/item/toy/crossbow/tommygun
|
||
name = "tommy gun"
|
||
desc = "Looks almost like the real thing! Great for practicing Drive-bys"
|
||
icon_state = "tommy"
|
||
item_state = "tommy"
|
||
flags = CONDUCT
|
||
w_class = 1.0
|
||
attack_verb = list("struck", "hammered", "hit", "bashed")
|
||
bullets = 20.0
|
||
|
||
/obj/item/toy/crossbow/tommygun/attackby(obj/item/I as obj, mob/user as mob, params)
|
||
if(istype(I, /obj/item/toy/ammo/crossbow))
|
||
if(bullets <= 19)
|
||
user.drop_item()
|
||
qdel(I)
|
||
bullets++
|
||
user << "<span class='notice'>You load the foam dart into the tommy gun.</span>"
|
||
else
|
||
user << "<span class='danger'>It's already fully loaded.</span>"
|
||
|
||
/*
|
||
* Toy swords
|
||
*/
|
||
/obj/item/toy/sword
|
||
name = "toy sword"
|
||
desc = "A cheap, plastic replica of an energy sword. Realistic sounds! Ages 8 and up."
|
||
icon = 'icons/obj/weapons.dmi'
|
||
icon_state = "sword0"
|
||
item_state = "sword0"
|
||
var/active = 0.0
|
||
w_class = 2.0
|
||
flags = NOSHIELD
|
||
attack_verb = list("attacked", "struck", "hit")
|
||
|
||
/obj/item/toy/sword/attack_self(mob/user as mob)
|
||
active = !(active)
|
||
if (active)
|
||
user << "<span class='notice'>You extend the plastic blade with a quick flick of your wrist.</span>"
|
||
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
|
||
icon_state = "swordblue"
|
||
item_state = "swordblue"
|
||
w_class = 4
|
||
else
|
||
user << "<span class='notice'>You push the plastic blade back down into the handle.</span>"
|
||
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
|
||
icon_state = "sword0"
|
||
item_state = "sword0"
|
||
w_class = 2
|
||
|
||
if(istype(user,/mob/living/carbon/human))
|
||
var/mob/living/carbon/human/H = user
|
||
H.update_inv_l_hand()
|
||
H.update_inv_r_hand()
|
||
add_fingerprint(user)
|
||
return
|
||
|
||
// Copied from /obj/item/weapon/melee/energy/sword/attackby
|
||
/obj/item/toy/sword/attackby(obj/item/weapon/W, mob/living/user, params)
|
||
..()
|
||
if(istype(W, /obj/item/toy/sword))
|
||
if(W == src)
|
||
user << "<span class='notice'>You try to attach the end of the plastic sword to... itself. You're not very smart, are you?</span>"
|
||
if(ishuman(user))
|
||
user.adjustBrainLoss(10)
|
||
else if((W.flags & NODROP) || (flags & NODROP))
|
||
user << "<span class='notice'>\the [flags & NODROP ? src : W] is stuck to your hand, you can't attach it to \the [flags & NODROP ? W : src]!</span>"
|
||
else
|
||
user << "<span class='notice'>You attach the ends of the two plastic swords, making a single double-bladed toy! You're fake-cool.</span>"
|
||
new /obj/item/weapon/twohanded/dualsaber/toy(user.loc)
|
||
user.unEquip(W)
|
||
user.unEquip(src)
|
||
qdel(W)
|
||
qdel(src)
|
||
|
||
/*
|
||
* Subtype of Double-Bladed Energy Swords
|
||
*/
|
||
/obj/item/weapon/twohanded/dualsaber/toy
|
||
name = "double-bladed toy sword"
|
||
desc = "A cheap, plastic replica of TWO energy swords. Double the fun!"
|
||
force = 0
|
||
throwforce = 0
|
||
throw_speed = 3
|
||
throw_range = 5
|
||
force_unwielded = 0
|
||
force_wielded = 0
|
||
origin_tech = null
|
||
attack_verb = list("attacked", "struck", "hit")
|
||
|
||
/obj/item/weapon/twohanded/dualsaber/toy/IsShield()
|
||
return 0
|
||
|
||
/obj/item/weapon/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles
|
||
return 0
|
||
|
||
/obj/item/toy/katana
|
||
name = "replica katana"
|
||
desc = "Woefully underpowered in D20."
|
||
icon = 'icons/obj/weapons.dmi'
|
||
icon_state = "katana"
|
||
item_state = "katana"
|
||
flags = CONDUCT
|
||
slot_flags = SLOT_BELT | SLOT_BACK
|
||
force = 5
|
||
throwforce = 5
|
||
w_class = 3
|
||
attack_verb = list("attacked", "slashed", "stabbed", "sliced")
|
||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||
|
||
/obj/item/toy/katana/suicide_act(mob/user)
|
||
var/dmsg = pick("[user] tries to stab \the [src] into their abdomen, but it shatters! They look as if they might die from the shame.","[user] tries to stab \the [src] into their abdomen, but \the [src] bends and breaks in half! They look as if they might die from the shame.","[user] tries to slice their own throat, but the plastic blade has no sharpness, causing them to lose their balance, slip over, and break their neck with a loud snap!")
|
||
user.visible_message("<span class='suicide'>[dmsg] It looks like they are trying to commit suicide.</span>")
|
||
return (BRUTELOSS)
|
||
|
||
|
||
/*
|
||
* Snap pops viral shit
|
||
*/
|
||
/obj/item/toy/snappop/virus
|
||
name = "unstable goo"
|
||
desc = "Your palm is oozing this stuff!"
|
||
icon = 'icons/mob/slimes.dmi'
|
||
icon_state = "red slime extract"
|
||
throwforce = 5.0
|
||
throw_speed = 10
|
||
throw_range = 30
|
||
w_class = 1
|
||
|
||
|
||
/obj/item/toy/snappop/virus/throw_impact(atom/hit_atom)
|
||
..()
|
||
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
|
||
s.set_up(3, 1, src)
|
||
s.start()
|
||
new /obj/effect/decal/cleanable/ash(src.loc)
|
||
visible_message("<span class='warning'>The [name] explodes!</span>","<span class='warning'>You hear a bang!</span>")
|
||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||
qdel(src)
|
||
|
||
/*
|
||
* Snap pops
|
||
*/
|
||
/obj/item/toy/snappop
|
||
name = "snap pop"
|
||
desc = "Wow!"
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "snappop"
|
||
w_class = 1
|
||
|
||
/obj/item/toy/snappop/throw_impact(atom/hit_atom)
|
||
..()
|
||
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
|
||
s.set_up(3, 1, src)
|
||
s.start()
|
||
new /obj/effect/decal/cleanable/ash(src.loc)
|
||
visible_message("<span class='warning'>The [src.name] explodes!</span>","<span class='warning'>You hear a snap!</span>")
|
||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||
qdel(src)
|
||
|
||
/obj/item/toy/snappop/Crossed(H as mob|obj)
|
||
if((ishuman(H))) //i guess carp and shit shouldn't set them off
|
||
var/mob/living/carbon/M = H
|
||
if(M.m_intent == "run")
|
||
M << "<span class='warning'>You step on the snap pop!</span>"
|
||
|
||
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
|
||
s.set_up(2, 0, src)
|
||
s.start()
|
||
new /obj/effect/decal/cleanable/ash(src.loc)
|
||
visible_message("<span class='warning'>The [name] explodes!</span>","<span class='warning'>You hear a snap!</span>")
|
||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||
qdel(src)
|
||
|
||
|
||
|
||
/*
|
||
* Mech prizes
|
||
*/
|
||
/obj/item/toy/prize
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "ripleytoy"
|
||
var/cooldown = 0
|
||
|
||
//all credit to skasi for toy mech fun ideas
|
||
/obj/item/toy/prize/attack_self(mob/user as mob)
|
||
if(cooldown < world.time - 8)
|
||
user << "<span class='notice'>You play with [src].</span>"
|
||
playsound(user, 'sound/mecha/mechstep.ogg', 20, 1)
|
||
cooldown = world.time
|
||
|
||
/obj/item/toy/prize/attack_hand(mob/user as mob)
|
||
if(loc == user)
|
||
if(cooldown < world.time - 8)
|
||
user << "<span class='notice'>You play with [src].</span>"
|
||
playsound(user, 'sound/mecha/mechturn.ogg', 20, 1)
|
||
cooldown = world.time
|
||
return
|
||
..()
|
||
|
||
/obj/random/mech
|
||
name = "Random Mech Prize"
|
||
desc = "This is a random prize"
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "ripleytoy"
|
||
|
||
/obj/random/mech/item_to_spawn()
|
||
return pick(subtypesof(/obj/item/toy/prize)) //exclude the base type.
|
||
|
||
/obj/item/toy/prize/ripley
|
||
name = "toy ripley"
|
||
desc = "Mini-Mecha action figure! Collect them all! 1/11."
|
||
|
||
/obj/item/toy/prize/fireripley
|
||
name = "toy firefighting ripley"
|
||
desc = "Mini-Mecha action figure! Collect them all! 2/11."
|
||
icon_state = "fireripleytoy"
|
||
|
||
/obj/item/toy/prize/deathripley
|
||
name = "toy deathsquad ripley"
|
||
desc = "Mini-Mecha action figure! Collect them all! 3/11."
|
||
icon_state = "deathripleytoy"
|
||
|
||
/obj/item/toy/prize/gygax
|
||
name = "toy gygax"
|
||
desc = "Mini-Mecha action figure! Collect them all! 4/11."
|
||
icon_state = "gygaxtoy"
|
||
|
||
|
||
/obj/item/toy/prize/durand
|
||
name = "toy durand"
|
||
desc = "Mini-Mecha action figure! Collect them all! 5/11."
|
||
icon_state = "durandprize"
|
||
|
||
/obj/item/toy/prize/honk
|
||
name = "toy H.O.N.K."
|
||
desc = "Mini-Mecha action figure! Collect them all! 6/11."
|
||
icon_state = "honkprize"
|
||
|
||
/obj/item/toy/prize/marauder
|
||
name = "toy marauder"
|
||
desc = "Mini-Mecha action figure! Collect them all! 7/11."
|
||
icon_state = "marauderprize"
|
||
|
||
/obj/item/toy/prize/seraph
|
||
name = "toy seraph"
|
||
desc = "Mini-Mecha action figure! Collect them all! 8/11."
|
||
icon_state = "seraphprize"
|
||
|
||
/obj/item/toy/prize/mauler
|
||
name = "toy mauler"
|
||
desc = "Mini-Mecha action figure! Collect them all! 9/11."
|
||
icon_state = "maulerprize"
|
||
|
||
/obj/item/toy/prize/odysseus
|
||
name = "toy odysseus"
|
||
desc = "Mini-Mecha action figure! Collect them all! 10/11."
|
||
icon_state = "odysseusprize"
|
||
|
||
/obj/item/toy/prize/phazon
|
||
name = "toy phazon"
|
||
desc = "Mini-Mecha action figure! Collect them all! 11/11."
|
||
icon_state = "phazonprize"
|
||
|
||
|
||
/obj/item/toy/katana
|
||
name = "replica katana"
|
||
desc = "Woefully underpowered in D20."
|
||
icon = 'icons/obj/weapons.dmi'
|
||
icon_state = "katana"
|
||
item_state = "katana"
|
||
flags = CONDUCT
|
||
slot_flags = SLOT_BELT | SLOT_BACK
|
||
force = 5
|
||
throwforce = 5
|
||
w_class = 3
|
||
attack_verb = list("attacked", "slashed", "stabbed", "sliced")
|
||
|
||
|
||
/*
|
||
|| A Deck of Cards for playing various games of chance ||
|
||
*/
|
||
|
||
|
||
|
||
obj/item/toy/cards
|
||
var/parentdeck = null
|
||
var/deckstyle = "nanotrasen"
|
||
var/card_hitsound = null
|
||
var/card_force = 0
|
||
var/card_throwforce = 0
|
||
var/card_throw_speed = 4
|
||
var/card_throw_range = 20
|
||
var/list/card_attack_verb = list("attacked")
|
||
|
||
obj/item/toy/cards/New()
|
||
..()
|
||
|
||
obj/item/toy/cards/proc/apply_card_vars(obj/item/toy/cards/newobj, obj/item/toy/cards/sourceobj) // Applies variables for supporting multiple types of card deck
|
||
if(!istype(sourceobj))
|
||
return
|
||
|
||
obj/item/toy/cards/deck
|
||
name = "deck of cards"
|
||
desc = "A deck of space-grade playing cards."
|
||
icon = 'icons/obj/toy.dmi'
|
||
deckstyle = "nanotrasen"
|
||
icon_state = "deck_nanotrasen_full"
|
||
w_class = 2.0
|
||
var/cooldown = 0
|
||
var/list/cards = list()
|
||
|
||
obj/item/toy/cards/deck/New()
|
||
..()
|
||
icon_state = "deck_[deckstyle]_full"
|
||
for(var/i = 2; i <= 10; i++)
|
||
cards += "[i] of Hearts"
|
||
cards += "[i] of Spades"
|
||
cards += "[i] of Clubs"
|
||
cards += "[i] of Diamonds"
|
||
cards += "King of Hearts"
|
||
cards += "King of Spades"
|
||
cards += "King of Clubs"
|
||
cards += "King of Diamonds"
|
||
cards += "Queen of Hearts"
|
||
cards += "Queen of Spades"
|
||
cards += "Queen of Clubs"
|
||
cards += "Queen of Diamonds"
|
||
cards += "Jack of Hearts"
|
||
cards += "Jack of Spades"
|
||
cards += "Jack of Clubs"
|
||
cards += "Jack of Diamonds"
|
||
cards += "Ace of Hearts"
|
||
cards += "Ace of Spades"
|
||
cards += "Ace of Clubs"
|
||
cards += "Ace of Diamonds"
|
||
|
||
|
||
obj/item/toy/cards/deck/attack_hand(mob/user as mob)
|
||
var/choice = null
|
||
if(cards.len == 0)
|
||
icon_state = "deck_[deckstyle]_empty"
|
||
user << "<span class='notice'>There are no more cards to draw.</span>"
|
||
return
|
||
var/obj/item/toy/cards/singlecard/H = new/obj/item/toy/cards/singlecard(user.loc)
|
||
choice = cards[1]
|
||
H.cardname = choice
|
||
H.parentdeck = src
|
||
var/O = src
|
||
H.apply_card_vars(H,O)
|
||
cards -= choice
|
||
H.pickup(user)
|
||
user.put_in_active_hand(H)
|
||
visible_message("<span class='notice'>[user] draws a card from the deck.</span>", "<span class='notice'>You draw a card from the deck.</span>")
|
||
if(cards.len > 26)
|
||
icon_state = "deck_[deckstyle]_full"
|
||
else if(cards.len > 10)
|
||
icon_state = "deck_[deckstyle]_half"
|
||
else if(cards.len > 1)
|
||
icon_state = "deck_[deckstyle]_low"
|
||
|
||
obj/item/toy/cards/deck/attack_self(mob/user as mob)
|
||
if(cooldown < world.time - 50)
|
||
cards = shuffle(cards)
|
||
playsound(user, 'sound/items/cardshuffle.ogg', 50, 1)
|
||
user.visible_message("<span class='notice'>[user] shuffles the deck.</span>", "<span class='notice'>You shuffle the deck.</span>")
|
||
cooldown = world.time
|
||
|
||
obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params)
|
||
..()
|
||
if(istype(C))
|
||
if(C.parentdeck == src)
|
||
if(!user.unEquip(C))
|
||
user << "<span class='notice'>The card is stuck to your hand, you can't add it to the deck!</span>"
|
||
return
|
||
cards += C.cardname
|
||
user.visible_message("<span class='notice'>[user] adds a card to the bottom of the deck.</span>","<span class='notice'>You add the card to the bottom of the deck.</span>")
|
||
qdel(C)
|
||
else
|
||
user << "<span class='notice'>You can't mix cards from other decks.</span>"
|
||
if(cards.len > 26)
|
||
icon_state = "deck_[deckstyle]_full"
|
||
else if(cards.len > 10)
|
||
icon_state = "deck_[deckstyle]_half"
|
||
else if(cards.len > 1)
|
||
icon_state = "deck_[deckstyle]_low"
|
||
|
||
|
||
obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user, params)
|
||
..()
|
||
if(istype(C))
|
||
if(C.parentdeck == src)
|
||
if(!user.unEquip(C))
|
||
user << "<span class='notice'>The hand of cards is stuck to your hand, you can't add it to the deck!</span>"
|
||
return
|
||
cards += C.currenthand
|
||
user.visible_message("<span class='notice'>[user] puts their hand of cards in the deck.</span>", "<span class='notice'>You put the hand of cards in the deck.</span>")
|
||
qdel(C)
|
||
else
|
||
user << "<span class='notice'>You can't mix cards from other decks.</span>"
|
||
if(cards.len > 26)
|
||
icon_state = "deck_[deckstyle]_full"
|
||
else if(cards.len > 10)
|
||
icon_state = "deck_[deckstyle]_half"
|
||
else if(cards.len > 1)
|
||
icon_state = "deck_[deckstyle]_low"
|
||
|
||
obj/item/toy/cards/deck/MouseDrop(atom/over_object)
|
||
var/mob/M = usr
|
||
if(usr.stat || !ishuman(usr) || !usr.canmove || usr.restrained())
|
||
return
|
||
if(Adjacent(usr))
|
||
if(over_object == M && loc != M)
|
||
M.put_in_hands(src)
|
||
usr << "<span class='notice'>You pick up the deck.</span>"
|
||
|
||
else if(istype(over_object, /obj/screen))
|
||
switch(over_object.name)
|
||
if("l_hand")
|
||
if(!remove_item_from_storage(M))
|
||
M.unEquip(src)
|
||
M.put_in_l_hand(src)
|
||
else if("r_hand")
|
||
if(!remove_item_from_storage(M))
|
||
M.unEquip(src)
|
||
M.put_in_r_hand(src)
|
||
usr << "<span class='notice'>You pick up the deck.</span>"
|
||
else
|
||
usr << "<span class='notice'>You can't reach it from here.</span>"
|
||
|
||
|
||
|
||
obj/item/toy/cards/cardhand
|
||
name = "hand of cards"
|
||
desc = "A number of cards not in a deck, customarily held in ones hand."
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "nanotrasen_hand2"
|
||
w_class = 1.0
|
||
var/list/currenthand = list()
|
||
var/choice = null
|
||
|
||
|
||
obj/item/toy/cards/cardhand/attack_self(mob/user as mob)
|
||
user.set_machine(src)
|
||
interact(user)
|
||
|
||
obj/item/toy/cards/cardhand/interact(mob/user)
|
||
var/dat = "You have:<BR>"
|
||
for(var/t in currenthand)
|
||
dat += "<A href='?src=\ref[src];pick=[t]'>A [t].</A><BR>"
|
||
dat += "Which card will you remove next?"
|
||
var/datum/browser/popup = new(user, "cardhand", "Hand of Cards", 400, 240)
|
||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||
popup.set_content(dat)
|
||
popup.open()
|
||
|
||
|
||
obj/item/toy/cards/cardhand/Topic(href, href_list)
|
||
if(..())
|
||
return
|
||
if(usr.stat || !ishuman(usr) || !usr.canmove)
|
||
return
|
||
var/mob/living/carbon/human/cardUser = usr
|
||
var/O = src
|
||
if(href_list["pick"])
|
||
if (cardUser.get_item_by_slot(slot_l_hand) == src || cardUser.get_item_by_slot(slot_r_hand) == src)
|
||
var/choice = href_list["pick"]
|
||
var/obj/item/toy/cards/singlecard/C = new/obj/item/toy/cards/singlecard(cardUser.loc)
|
||
currenthand -= choice
|
||
C.parentdeck = src.parentdeck
|
||
C.cardname = choice
|
||
C.apply_card_vars(C,O)
|
||
C.pickup(cardUser)
|
||
cardUser.put_in_any_hand_if_possible(C)
|
||
cardUser.visible_message("<span class='notice'>[cardUser] draws a card from \his hand.</span>", "<span class='notice'>You take the [C.cardname] from your hand.</span>")
|
||
|
||
interact(cardUser)
|
||
if(currenthand.len < 3)
|
||
icon_state = "[deckstyle]_hand2"
|
||
else if(src.currenthand.len < 4)
|
||
icon_state = "[deckstyle]_hand3"
|
||
else if(src.currenthand.len < 5)
|
||
icon_state = "[deckstyle]_hand4"
|
||
if(currenthand.len == 1)
|
||
var/obj/item/toy/cards/singlecard/N = new/obj/item/toy/cards/singlecard(src.loc)
|
||
N.parentdeck = src.parentdeck
|
||
N.cardname = src.currenthand[1]
|
||
N.apply_card_vars(N,O)
|
||
cardUser.unEquip(src)
|
||
N.pickup(cardUser)
|
||
cardUser.put_in_any_hand_if_possible(N)
|
||
cardUser << "<span class='notice'>You also take [currenthand[1]] and hold it.</span>"
|
||
cardUser << browse(null, "window=cardhand")
|
||
qdel(src)
|
||
return
|
||
|
||
obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params)
|
||
if(istype(C))
|
||
if(C.parentdeck == parentdeck)
|
||
currenthand += C.cardname
|
||
user.unEquip(C)
|
||
user.visible_message("<span class='notice'>[user] adds a card to their hand.</span>", "<span class='notice'>You add the [C.cardname] to your hand.</span>")
|
||
interact(user)
|
||
if(currenthand.len > 4)
|
||
icon_state = "[deckstyle]_hand5"
|
||
else if(currenthand.len > 3)
|
||
icon_state = "[deckstyle]_hand4"
|
||
else if(currenthand.len > 2)
|
||
icon_state = "[deckstyle]_hand3"
|
||
qdel(C)
|
||
else
|
||
user << "<span class='notice'>You can't mix cards from other decks.</span>"
|
||
|
||
obj/item/toy/cards/cardhand/apply_card_vars(obj/item/toy/cards/newobj,obj/item/toy/cards/sourceobj)
|
||
..()
|
||
newobj.deckstyle = sourceobj.deckstyle
|
||
newobj.icon_state = "[deckstyle]_hand2" // Another dumb hack, without this the hand is invisible (or has the default deckstyle) until another card is added.
|
||
newobj.card_hitsound = sourceobj.card_hitsound
|
||
newobj.card_force = sourceobj.card_force
|
||
newobj.card_throwforce = sourceobj.card_throwforce
|
||
newobj.card_throw_speed = sourceobj.card_throw_speed
|
||
newobj.card_throw_range = sourceobj.card_throw_range
|
||
newobj.card_attack_verb = sourceobj.card_attack_verb
|
||
|
||
|
||
obj/item/toy/cards/singlecard
|
||
name = "card"
|
||
desc = "a card"
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "singlecard_nanotrasen_down"
|
||
w_class = 1.0
|
||
var/cardname = null
|
||
var/flipped = 0
|
||
pixel_x = -5
|
||
|
||
|
||
obj/item/toy/cards/singlecard/examine(mob/user)
|
||
if(..(user, 0))
|
||
if(ishuman(user))
|
||
var/mob/living/carbon/human/cardUser = user
|
||
if(cardUser.get_item_by_slot(slot_l_hand) == src || cardUser.get_item_by_slot(slot_r_hand) == src)
|
||
cardUser.visible_message("<span class='notice'>[cardUser] checks \his card.</span>", "<span class='notice'>The card reads: [src.cardname]</span>")
|
||
else
|
||
cardUser << "<span class='notice'>You need to have the card in your hand to check it.</span>"
|
||
|
||
|
||
obj/item/toy/cards/singlecard/verb/Flip()
|
||
set name = "Flip Card"
|
||
set category = "Object"
|
||
set src in range(1)
|
||
if(usr.stat || !ishuman(usr) || !usr.canmove || usr.restrained())
|
||
return
|
||
if(!flipped)
|
||
flipped = 1
|
||
if (cardname)
|
||
icon_state = "sc_[cardname]_[deckstyle]"
|
||
name = cardname
|
||
else
|
||
icon_state = "sc_Ace of Spades_[deckstyle]"
|
||
name = "What Card"
|
||
pixel_x = 5
|
||
else if(flipped)
|
||
flipped = 0
|
||
icon_state = "singlecard_down_[deckstyle]"
|
||
name = "card"
|
||
pixel_x = -5
|
||
|
||
obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user, params)
|
||
if(istype(I, /obj/item/toy/cards/singlecard/))
|
||
var/obj/item/toy/cards/singlecard/C = I
|
||
if(C.parentdeck == parentdeck)
|
||
var/obj/item/toy/cards/cardhand/H = new/obj/item/toy/cards/cardhand(user.loc)
|
||
H.currenthand += C.cardname
|
||
H.currenthand += cardname
|
||
H.parentdeck = C.parentdeck
|
||
H.apply_card_vars(H,C)
|
||
user.unEquip(C)
|
||
H.pickup(user)
|
||
user.put_in_active_hand(H)
|
||
user << "<span class='notice'>You combine the [C.cardname] and the [cardname] into a hand.</span>"
|
||
qdel(C)
|
||
qdel(src)
|
||
else
|
||
user << "<span class='notice'>You can't mix cards from other decks.</span>"
|
||
|
||
if(istype(I, /obj/item/toy/cards/cardhand/))
|
||
var/obj/item/toy/cards/cardhand/H = I
|
||
if(H.parentdeck == parentdeck)
|
||
H.currenthand += cardname
|
||
user.unEquip(src)
|
||
user.visible_message("<span class='notice'>[user] adds a card to \his hand.</span>", "<span class='notice'>You add the [cardname] to your hand.</span>")
|
||
H.interact(user)
|
||
if(H.currenthand.len > 4)
|
||
H.icon_state = "[deckstyle]_hand5"
|
||
else if(H.currenthand.len > 3)
|
||
H.icon_state = "[deckstyle]_hand4"
|
||
else if(H.currenthand.len > 2)
|
||
H.icon_state = "[deckstyle]_hand3"
|
||
qdel(src)
|
||
else
|
||
user << "<span class='notice'>You can't mix cards from other decks.</span>"
|
||
|
||
|
||
obj/item/toy/cards/singlecard/attack_self(mob/user)
|
||
if(usr.stat || !ishuman(usr) || !usr.canmove || usr.restrained())
|
||
return
|
||
Flip()
|
||
|
||
obj/item/toy/cards/singlecard/apply_card_vars(obj/item/toy/cards/singlecard/newobj,obj/item/toy/cards/sourceobj)
|
||
..()
|
||
newobj.deckstyle = sourceobj.deckstyle
|
||
newobj.icon_state = "singlecard_down_[deckstyle]" // Without this the card is invisible until flipped. It's an ugly hack, but it works.
|
||
newobj.card_hitsound = sourceobj.card_hitsound
|
||
newobj.hitsound = newobj.card_hitsound
|
||
newobj.card_force = sourceobj.card_force
|
||
newobj.force = newobj.card_force
|
||
newobj.card_throwforce = sourceobj.card_throwforce
|
||
newobj.throwforce = newobj.card_throwforce
|
||
newobj.card_throw_speed = sourceobj.card_throw_speed
|
||
newobj.throw_speed = newobj.card_throw_speed
|
||
newobj.card_throw_range = sourceobj.card_throw_range
|
||
newobj.throw_range = newobj.card_throw_range
|
||
newobj.card_attack_verb = sourceobj.card_attack_verb
|
||
newobj.attack_verb = newobj.card_attack_verb
|
||
|
||
|
||
/*
|
||
|| Syndicate playing cards, for pretending you're Gambit and playing poker for the nuke disk. ||
|
||
*/
|
||
|
||
obj/item/toy/cards/deck/syndicate
|
||
name = "suspicious looking deck of cards"
|
||
desc = "A deck of space-grade playing cards. They seem unusually rigid."
|
||
deckstyle = "syndicate"
|
||
card_hitsound = 'sound/weapons/bladeslice.ogg'
|
||
card_force = 5
|
||
card_throwforce = 10
|
||
card_throw_speed = 3
|
||
card_throw_range = 20
|
||
card_attack_verb = list("attacked", "sliced", "diced", "slashed", "cut")
|
||
|
||
/*
|
||
|| Custom card decks ||
|
||
*/
|
||
obj/item/toy/cards/deck/black
|
||
deckstyle = "black"
|
||
|
||
obj/item/toy/cards/deck/syndicate/black
|
||
deckstyle = "black"
|
||
|
||
/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"
|
||
w_class = 2.0
|
||
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 class='warning'>[user] presses a button on [src]</span>", "<span class='notice'>You activate [src], it plays a loud noise!</span>", "<span class='notice'>You hear the click of a button.</span>")
|
||
spawn(5) //gia said so
|
||
icon_state = "nuketoy"
|
||
playsound(src, 'sound/machines/Alarm.ogg', 100, 0, 0)
|
||
sleep(135)
|
||
icon_state = "nuketoycool"
|
||
sleep(cooldown - world.time)
|
||
icon_state = "nuketoyidle"
|
||
else
|
||
var/timeleft = (cooldown - world.time)
|
||
user << "<span class='alert'>Nothing happens, and '</span>[round(timeleft/10)]<span class='alert'>' appears on a small display.</span>"
|
||
|
||
/obj/item/toy/therapy
|
||
name = "therapy doll"
|
||
desc = "A toy for therapeutic and recreational purposes."
|
||
icon_state = "therapyred"
|
||
item_state = "egg4"
|
||
w_class = 1
|
||
var/cooldown = 0
|
||
|
||
/obj/item/toy/therapy/New()
|
||
if(item_color)
|
||
name = "[item_color] therapy doll"
|
||
desc += " This one is [item_color]."
|
||
icon_state = "therapy[item_color]"
|
||
|
||
/obj/item/toy/therapy/attack_self(mob/user)
|
||
if(cooldown < world.time - 8)
|
||
user << "<span class='notice'>You relieve some stress with \the [src].</span>"
|
||
playsound(user, 'sound/items/squeaktoy.ogg', 20, 1)
|
||
cooldown = world.time
|
||
|
||
/obj/random/therapy
|
||
name = "Random Therapy Doll"
|
||
desc = "This is a random therapy doll."
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "therapyred"
|
||
|
||
/obj/random/prize/item_to_spawn()
|
||
return pick(subtypesof(/obj/item/toy/therapy)) //exclude the base type.
|
||
|
||
/obj/item/toy/therapy/red
|
||
item_state = "egg4" // It's the red egg in items_left/righthand
|
||
item_color = "red"
|
||
|
||
/obj/item/toy/therapy/purple
|
||
item_state = "egg1" // It's the magenta egg in items_left/righthand
|
||
item_color = "purple"
|
||
|
||
/obj/item/toy/therapy/blue
|
||
item_state = "egg2" // It's the blue egg in items_left/righthand
|
||
item_color = "blue"
|
||
|
||
/obj/item/toy/therapy/yellow
|
||
item_state = "egg5" // It's the yellow egg in items_left/righthand
|
||
item_color = "yellow"
|
||
|
||
/obj/item/toy/therapy/orange
|
||
item_state = "egg4" // It's the red one again, lacking an orange item_state and making a new one is pointless
|
||
item_color = "orange"
|
||
|
||
/obj/item/toy/therapy/green
|
||
item_state = "egg3" // It's the green egg in items_left/righthand
|
||
item_color = "green"
|
||
|
||
/obj/item/weapon/toddler
|
||
icon_state = "toddler"
|
||
name = "toddler"
|
||
desc = "This baby looks almost real. Wait, did it just burp?"
|
||
force = 5
|
||
w_class = 4.0
|
||
slot_flags = SLOT_BACK
|
||
|
||
|
||
//This should really be somewhere else but I don't know where. w/e
|
||
|
||
/obj/item/weapon/inflatable_duck
|
||
name = "inflatable duck"
|
||
desc = "No bother to sink or swim when you can just float!"
|
||
icon_state = "inflatable"
|
||
item_state = "inflatable"
|
||
icon = 'icons/obj/clothing/belts.dmi'
|
||
slot_flags = SLOT_BELT
|
||
|
||
/*
|
||
* Fake meteor
|
||
*/
|
||
|
||
/obj/item/toy/minimeteor
|
||
name = "Mini-Meteor"
|
||
desc = "Relive the excitement of a meteor shower! SweetMeat-eor. Co is not responsible for any injuries, headaches or hearing loss caused by Mini-Meteor"
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "minimeteor"
|
||
w_class = 2.0
|
||
|
||
/obj/item/toy/minimeteor/throw_impact(atom/hit_atom)
|
||
..()
|
||
playsound(src, 'sound/effects/meteorimpact.ogg', 40, 1)
|
||
for(var/mob/M in range(10, src))
|
||
if(!M.stat && !istype(M, /mob/living/silicon/ai))\
|
||
shake_camera(M, 3, 1)
|
||
qdel(src)
|
||
|
||
/*
|
||
* Carp plushie
|
||
*/
|
||
|
||
/obj/item/toy/carpplushie
|
||
name = "space carp plushie"
|
||
desc = "An adorable stuffed toy that resembles a space carp."
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "carpplushie"
|
||
attack_verb = list("bitten", "eaten", "fin slapped")
|
||
var/bitesound = 'sound/weapons/bite.ogg'
|
||
|
||
// Attack mob
|
||
/obj/item/toy/carpplushie/attack(mob/M as mob, mob/user as mob)
|
||
playsound(loc, bitesound, 20, 1) // Play bite sound in local area
|
||
return ..()
|
||
|
||
// Attack self
|
||
/obj/item/toy/carpplushie/attack_self(mob/user as mob)
|
||
playsound(src.loc, bitesound, 20, 1)
|
||
return ..()
|
||
|
||
|
||
/obj/random/carp_plushie
|
||
name = "Random Carp Plushie"
|
||
desc = "This is a random plushie"
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "carpplushie"
|
||
|
||
/obj/random/carp_plushie/item_to_spawn()
|
||
return pick(typesof(/obj/item/toy/carpplushie)) //can pick any carp plushie, even the original.
|
||
|
||
/obj/item/toy/carpplushie/ice
|
||
icon_state = "icecarp"
|
||
|
||
/obj/item/toy/carpplushie/silent
|
||
icon_state = "silentcarp"
|
||
|
||
/obj/item/toy/carpplushie/electric
|
||
icon_state = "electriccarp"
|
||
|
||
/obj/item/toy/carpplushie/gold
|
||
icon_state = "goldcarp"
|
||
|
||
/obj/item/toy/carpplushie/toxin
|
||
icon_state = "toxincarp"
|
||
|
||
/obj/item/toy/carpplushie/dragon
|
||
icon_state = "dragoncarp"
|
||
|
||
/obj/item/toy/carpplushie/pink
|
||
icon_state = "pinkcarp"
|
||
|
||
/obj/item/toy/carpplushie/candy
|
||
icon_state = "candycarp"
|
||
|
||
/obj/item/toy/carpplushie/nebula
|
||
icon_state = "nebulacarp"
|
||
|
||
/obj/item/toy/carpplushie/void
|
||
icon_state = "voidcarp"
|
||
|
||
/*
|
||
* Plushie
|
||
*/
|
||
|
||
|
||
/obj/item/toy/plushie
|
||
name = "plushie"
|
||
desc = "An adorable, soft, and cuddly plushie."
|
||
icon = 'icons/obj/toy.dmi'
|
||
var/poof_sound = 'sound/weapons/thudswoosh.ogg'
|
||
attack_verb = list("poofed", "bopped", "whapped","cuddled","fluffed")
|
||
|
||
/obj/item/toy/plushie/attack(mob/M as mob, mob/user as mob)
|
||
playsound(loc, poof_sound, 20, 1) // Play the whoosh sound in local area
|
||
return ..()
|
||
|
||
/obj/item/toy/plushie/attack_self(mob/user as mob)
|
||
var/cuddle_verb = pick("hugs","cuddles","snugs")
|
||
user.visible_message("<span class='notice'>[user] [cuddle_verb] the [src].</span>")
|
||
playsound(get_turf(src), poof_sound, 50, 1, -1)
|
||
return ..()
|
||
|
||
/obj/random/plushie
|
||
name = "Random Plushie"
|
||
desc = "This is a random plushie"
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "redfox"
|
||
|
||
/obj/random/plushie/item_to_spawn()
|
||
return pick(subtypesof(/obj/item/toy/plushie)) //exclude the base type.
|
||
|
||
/obj/item/toy/plushie/corgi
|
||
name = "corgi plushie"
|
||
icon_state = "corgi"
|
||
|
||
/obj/item/toy/plushie/girly_corgi
|
||
name = "corgi plushie"
|
||
icon_state = "girlycorgi"
|
||
|
||
/obj/item/toy/plushie/robo_corgi
|
||
name = "borgi plushie"
|
||
icon_state = "robotcorgi"
|
||
|
||
/obj/item/toy/plushie/octopus
|
||
name = "octopus plushie"
|
||
icon_state = "loveable"
|
||
|
||
/obj/item/toy/plushie/face_hugger
|
||
name = "facehugger plushie"
|
||
icon_state = "huggable"
|
||
|
||
//foxes are basically the best
|
||
|
||
/obj/item/toy/plushie/red_fox
|
||
name = "red fox plushie"
|
||
icon_state = "redfox"
|
||
|
||
/obj/item/toy/plushie/black_fox
|
||
name = "black fox plushie"
|
||
icon_state = "blackfox"
|
||
|
||
/obj/item/toy/plushie/marble_fox
|
||
name = "marble fox plushie"
|
||
icon_state = "marblefox"
|
||
|
||
/obj/item/toy/plushie/blue_fox
|
||
name = "blue fox plushie"
|
||
icon_state = "bluefox"
|
||
|
||
/obj/item/toy/plushie/orange_fox
|
||
name = "orange fox plushie"
|
||
icon_state = "orangefox"
|
||
|
||
/obj/item/toy/plushie/coffee_fox
|
||
name = "coffee fox plushie"
|
||
icon_state = "coffeefox"
|
||
|
||
/obj/item/toy/plushie/pink_fox
|
||
name = "pink fox plushie"
|
||
icon_state = "pinkfox"
|
||
|
||
/obj/item/toy/plushie/purple_fox
|
||
name = "purple fox plushie"
|
||
icon_state = "purplefox"
|
||
|
||
/obj/item/toy/plushie/crimson_fox
|
||
name = "crimson fox plushie"
|
||
icon_state = "crimsonfox"
|
||
|
||
/obj/item/toy/plushie/deer
|
||
name = "deer plushie"
|
||
icon_state = "deer"
|
||
|
||
/obj/item/toy/plushie/black_cat
|
||
name = "black cat plushie"
|
||
icon_state = "blackcat"
|
||
|
||
/obj/item/toy/plushie/grey_cat
|
||
name = "grey cat plushie"
|
||
icon_state = "greycat"
|
||
|
||
/obj/item/toy/plushie/white_cat
|
||
name = "white cat plushie"
|
||
icon_state = "whitecat"
|
||
|
||
/obj/item/toy/plushie/orange_cat
|
||
name = "orange cat plushie"
|
||
icon_state = "orangecat"
|
||
|
||
/obj/item/toy/plushie/siamese_cat
|
||
name = "siamese cat plushie"
|
||
icon_state = "siamesecat"
|
||
|
||
/obj/item/toy/plushie/tabby_cat
|
||
name = "tabby cat plushie"
|
||
icon_state = "tabbycat"
|
||
|
||
/obj/item/toy/plushie/tuxedo_cat
|
||
name = "tuxedo cat plushie"
|
||
icon_state = "tuxedocat"
|
||
|
||
/*
|
||
* Foam Armblade
|
||
*/
|
||
|
||
/obj/item/toy/foamblade
|
||
name = "foam armblade"
|
||
desc = "it says \"Sternside Changs #1 fan\" on it. "
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "foamblade"
|
||
item_state = "arm_blade"
|
||
attack_verb = list("pricked", "absorbed", "gored")
|
||
w_class = 2
|
||
|
||
/*
|
||
* Toy/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 = "flashtool"
|
||
w_class = 1
|
||
|
||
/obj/item/toy/flash/attack(mob/living/M, mob/user)
|
||
playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1)
|
||
flick("[initial(icon_state)]2", src)
|
||
user.visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
|
||
|
||
|
||
/*
|
||
* Toy 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/assemblies.dmi'
|
||
icon_state = "bigred"
|
||
w_class = 2.0
|
||
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 class='warning'>[user] presses the big red button.</span>", "<span class='notice'>You press the button, it plays a loud noise!</span>", "<span class='notice'>The button clicks loudly.</span>")
|
||
playsound(src, 'sound/effects/explosionfar.ogg', 50, 0, 0)
|
||
for(var/mob/M in range(10, src)) // Checks range
|
||
if(!M.stat && !istype(M, /mob/living/silicon/ai)) // Checks to make sure whoever's getting shaken is alive/not the AI
|
||
sleep(8) // Short delay to match up with the explosion sound
|
||
shake_camera(M, 2, 1) // Shakes player camera 2 squares for 1 second.
|
||
|
||
else
|
||
user << "<span class='alert'>Nothing happens.</span>"
|
||
|
||
|
||
/*
|
||
* AI core prizes
|
||
*/
|
||
/obj/item/toy/AI
|
||
name = "toy AI"
|
||
desc = "A little toy model AI core with real law announcing action!"
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "AI"
|
||
w_class = 2.0
|
||
var/cooldown = 0
|
||
|
||
/obj/item/toy/AI/attack_self(mob/user)
|
||
if(!cooldown) //for the sanity of everyone
|
||
var/message = generate_ion_law()
|
||
user << "<span class='notice'>You press the button on [src].</span>"
|
||
playsound(user, 'sound/machines/click.ogg', 20, 1)
|
||
visible_message("<span class='danger'>\icon[src] [message]</span>")
|
||
cooldown = 1
|
||
spawn(30) cooldown = 0
|
||
return
|
||
..()
|
||
|
||
/obj/item/toy/owl
|
||
name = "owl action figure"
|
||
desc = "An action figure modeled after 'The Owl', defender of justice."
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "owlprize"
|
||
w_class = 2.0
|
||
var/cooldown = 0
|
||
|
||
/obj/item/toy/owl/attack_self(mob/user)
|
||
if(!cooldown) //for the sanity of everyone
|
||
var/message = pick("You won't get away this time, Griffin!", "Stop right there, criminal!", "Hoot! Hoot!", "I am the night!")
|
||
user << "<span class='notice'>You pull the string on the [src].</span>"
|
||
playsound(user, 'sound/misc/hoot.ogg', 25, 1)
|
||
visible_message("<span class='danger'>\icon[src] [message]</span>")
|
||
cooldown = 1
|
||
spawn(30) cooldown = 0
|
||
return
|
||
..()
|
||
|
||
/obj/item/toy/griffin
|
||
name = "griffin action figure"
|
||
desc = "An action figure modeled after 'The Griffin', criminal mastermind."
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "griffinprize"
|
||
w_class = 2.0
|
||
var/cooldown = 0
|
||
|
||
/obj/item/toy/griffin/attack_self(mob/user)
|
||
if(!cooldown) //for the sanity of everyone
|
||
var/message = pick("You can't stop me, Owl!", "My plan is flawless! The vault is mine!", "Caaaawwww!", "You will never catch me!")
|
||
user << "<span class='notice'>You pull the string on the [src].</span>"
|
||
playsound(user, 'sound/misc/caw.ogg', 25, 1)
|
||
visible_message("<span class='danger'>\icon[src] [message]</span>")
|
||
cooldown = 1
|
||
spawn(30) cooldown = 0
|
||
return
|
||
..()
|
||
|
||
// DND Character minis. Use the naming convention (type)character for the icon states.
|
||
/obj/item/toy/character
|
||
icon = 'icons/obj/toy.dmi'
|
||
w_class = 2
|
||
pixel_z = 5
|
||
|
||
/obj/item/toy/character/alien
|
||
name = "Xenomorph Miniature"
|
||
desc = "A miniature xenomorph. Scary!"
|
||
icon_state = "aliencharacter"
|
||
/obj/item/toy/character/cleric
|
||
name = "Cleric Miniature"
|
||
desc = "A wee little cleric, with his wee little staff."
|
||
icon_state = "clericcharacter"
|
||
/obj/item/toy/character/warrior
|
||
name = "Warrior Miniature"
|
||
desc = "That sword would make a decent toothpick."
|
||
icon_state = "warriorcharacter"
|
||
/obj/item/toy/character/thief
|
||
name = "Thief Miniature"
|
||
desc = "Hey, where did my wallet go!?"
|
||
icon_state = "thiefcharacter"
|
||
/obj/item/toy/character/wizard
|
||
name = "Wizard Miniature"
|
||
desc = "MAGIC!"
|
||
icon_state = "wizardcharacter"
|
||
/obj/item/toy/character/cthulhu
|
||
name = "Cthulhu Miniature"
|
||
desc = "The dark lord has risen!"
|
||
icon_state = "darkmastercharacter"
|
||
/obj/item/toy/character/lich
|
||
name = "Lich Miniature"
|
||
desc = "Murderboner extraordinaire."
|
||
icon_state = "lichcharacter"
|
||
/obj/item/weapon/storage/box/characters
|
||
name = "Box of Miniatures"
|
||
desc = "The nerd's best friends."
|
||
icon_state = "box"
|
||
/obj/item/weapon/storage/box/characters/New()
|
||
..()
|
||
new /obj/item/toy/character/alien(src)
|
||
new /obj/item/toy/character/cleric(src)
|
||
new /obj/item/toy/character/warrior(src)
|
||
new /obj/item/toy/character/thief(src)
|
||
new /obj/item/toy/character/wizard(src)
|
||
new /obj/item/toy/character/cthulhu(src)
|
||
new /obj/item/toy/character/lich(src)
|
||
|
||
|
||
//Pet Rocks, just like from the 70's!
|
||
|
||
/obj/item/toy/pet_rock
|
||
name = "pet rock"
|
||
desc = "The perfect pet!"
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "pet_rock"
|
||
w_class = 2
|
||
force = 5
|
||
throwforce = 5
|
||
attack_verb = list("attacked", "bashed", "smashed", "stoned")
|
||
hitsound = "swing_hit"
|
||
|
||
/obj/item/toy/pet_rock/fred
|
||
name = "fred"
|
||
desc = "Fred, the bestest boy pet in the whole wide universe!"
|
||
icon_state = "fred"
|
||
|
||
/obj/item/toy/pet_rock/roxie
|
||
name = "roxie"
|
||
desc = "Roxie, the bestest girl pet in the whole wide universe!"
|
||
icon_state = "roxie"
|
||
|
||
//minigibber, so cute
|
||
|
||
/obj/item/toy/minigibber
|
||
name = "miniature gibber"
|
||
desc = "A miniature recreation of NanoTrasen's famous meat grinder."
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "minigibber"
|
||
attack_verb = list("grinded", "gibbed")
|
||
w_class = 2.0
|
||
var/cooldown = 0
|
||
var/obj/stored_minature = null
|
||
|
||
/obj/item/toy/minigibber/attack_self(var/mob/user)
|
||
|
||
if(stored_minature)
|
||
user << "<span class='danger'>\The [src] makes a violent grinding noise as it tears apart the miniature figure inside!</span>"
|
||
qdel(stored_minature)
|
||
stored_minature = null
|
||
playsound(user, 'sound/effects/gib.ogg', 20, 1)
|
||
cooldown = world.time
|
||
|
||
if(cooldown < world.time - 8)
|
||
user << "<span class='notice'>You hit the gib button on \the [src].</span>"
|
||
playsound(user, 'sound/effects/gib.ogg', 20, 1)
|
||
cooldown = world.time
|
||
|
||
/obj/item/toy/minigibber/attackby(var/obj/O, var/mob/user, params)
|
||
if(istype(O,/obj/item/toy/character) && O.loc == user)
|
||
user << "<span class='notice'>You start feeding \the [O] \icon[O] into \the [src]'s mini-input.</span>"
|
||
if(do_after(user,10, target = src))
|
||
if(O.loc != user)
|
||
user << "<span class='alert'>\The [O] is too far away to feed into \the [src]!</span>"
|
||
else
|
||
user << "<span class='notice'>You feed \the [O] \icon[O] into \the [src]!</span>"
|
||
user.unEquip(O)
|
||
O.forceMove(src)
|
||
stored_minature = O
|
||
else
|
||
user << "<span class='warning'>You stop feeding \the [O] into \the [src]'s mini-input.</span>"
|
||
else ..()
|
||
|
||
/*
|
||
* Xenomorph action figure
|
||
*/
|
||
|
||
/obj/item/toy/toy_xeno
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "toy_xeno"
|
||
name = "xenomorph action figure"
|
||
desc = "MEGA presents the new Xenos Isolated action figure! Comes complete with realistic sounds! Pull back string to use."
|
||
w_class = 2
|
||
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 class='notice'>[user] pulls back the string on [src].</span>")
|
||
icon_state = "[initial(icon_state)]_used"
|
||
sleep(5)
|
||
audible_message("<span class='danger'>\icon[src] Hiss!</span>")
|
||
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
|
||
user << "<span class='warning'>The string on [src] hasn't rewound all the way!</span>"
|
||
return
|
||
|
||
/obj/item/toy/russian_revolver
|
||
name = "russian revolver"
|
||
desc = "for fun and games!"
|
||
icon = 'icons/obj/gun.dmi'
|
||
icon_state = "detective_gold"
|
||
item_state = "gun"
|
||
lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi'
|
||
righthand_file = 'icons/mob/inhands/guns_righthand.dmi'
|
||
flags = CONDUCT
|
||
slot_flags = SLOT_BELT
|
||
materials = list(MAT_METAL=2000)
|
||
w_class = 3.0
|
||
throwforce = 5
|
||
throw_speed = 4
|
||
throw_range = 5
|
||
force = 5.0
|
||
origin_tech = "combat=1"
|
||
attack_verb = list("struck", "hit", "bashed")
|
||
var/bullet_position = 1
|
||
var/is_empty = 0
|
||
|
||
/obj/item/toy/russian_revolver/suicide_act(mob/user)
|
||
user.visible_message("<span class='suicide'>[user] quickly loads six bullets into the [src.name]'s cylinder and points it at \his head before pulling the trigger! It looks like they are trying to commit suicide.</span>")
|
||
playsound(loc, 'sound/weapons/Gunshot.ogg', 50, 1)
|
||
return (BRUTELOSS)
|
||
|
||
/obj/item/toy/russian_revolver/New()
|
||
spin_cylinder()
|
||
..()
|
||
|
||
|
||
/obj/item/toy/russian_revolver/attack_self(mob/user)
|
||
if(is_empty)
|
||
user.visible_message("<span class='warning'>[user] loads a bullet into the [src]'s cylinder.</span>")
|
||
is_empty = 0
|
||
else
|
||
spin_cylinder()
|
||
user.visible_message("<span class='warning'>[user] spins the cylinder on the [src]!</span>")
|
||
|
||
|
||
/obj/item/toy/russian_revolver/attack(mob/living/carbon/M, mob/user)
|
||
if(M != user) //can't use this on other people
|
||
return
|
||
if(is_empty)
|
||
user << "<span class='notice'>The [src] is empty.</span>"
|
||
return
|
||
user.visible_message("<span class='danger'>[user] points the [src] at their head, ready to pull the trigger!</span>")
|
||
if(do_after(user, 30, target = M))
|
||
if(bullet_position != 1)
|
||
user.visible_message("<span class='danger'>*click*</span>")
|
||
playsound(src, 'sound/weapons/empty.ogg', 100, 1)
|
||
bullet_position -= 1
|
||
return
|
||
if(bullet_position == 1)
|
||
is_empty = 1
|
||
playsound(src, 'sound/weapons/Gunshot.ogg', 50, 1)
|
||
user.visible_message("<span class='danger'>The [src] goes off!</span>")
|
||
M.apply_damage(200, "brute", "head", used_weapon = "Self-inflicted gunshot would to the head.", sharp=1)
|
||
M.death()
|
||
else
|
||
user.visible_message("<span class='danger'>[user] lowers the [src] from their head.</span>")
|
||
|
||
|
||
/obj/item/toy/russian_revolver/proc/spin_cylinder()
|
||
bullet_position = rand(1,6)
|
||
|
||
/*
|
||
* Rubber Chainsaw
|
||
*/
|
||
/obj/item/weapon/twohanded/toy/chainsaw
|
||
name = "Toy Chainsaw"
|
||
desc = "A toy chainsaw with a rubber edge. Ages 8 and up"
|
||
icon_state = "chainsaw0"
|
||
force = 0
|
||
throwforce = 0
|
||
throw_speed = 4
|
||
throw_range = 20
|
||
wieldsound = 'sound/weapons/chainsawstart.ogg'
|
||
attack_verb = list("sawed", "cut", "hacked", "carved", "cleaved", "butchered", "felled", "timbered")
|
||
|
||
/obj/item/weapon/twohanded/toy/chainsaw/update_icon()
|
||
if(wielded)
|
||
icon_state = "chainsaw[wielded]"
|
||
else
|
||
icon_state = "chainsaw0"
|
||
|
||
/*
|
||
* Action Figures
|
||
*/
|
||
|
||
|
||
/obj/random/figure
|
||
name = "Random Action Figure"
|
||
desc = "This is a random toy action figure"
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "nuketoy"
|
||
|
||
/obj/random/figure/item_to_spawn()
|
||
return pick(subtypesof(/obj/item/toy/figure))
|
||
|
||
|
||
/obj/item/toy/figure
|
||
name = "Non-Specific Action Figure action figure"
|
||
desc = "A \"Space Life\" brand... wait, what the hell is this thing?"
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "nuketoy"
|
||
var/cooldown = 0
|
||
var/toysay = "What the fuck did you do?"
|
||
|
||
/obj/item/toy/figure/New()
|
||
..()
|
||
desc = "A \"Space Life\" brand [name]"
|
||
|
||
/obj/item/toy/figure/attack_self(mob/user as mob)
|
||
if(cooldown < world.time)
|
||
cooldown = (world.time + 30) //3 second cooldown
|
||
user.visible_message("<span class='notice'>\icon[src] The [src] says \"[toysay]\".</span>")
|
||
playsound(user, 'sound/machines/click.ogg', 20, 1)
|
||
|
||
/obj/item/toy/figure/cmo
|
||
name = "Chief Medical Officer action figure"
|
||
icon_state = "cmo"
|
||
toysay = "Suit sensors!"
|
||
|
||
/obj/item/toy/figure/assistant
|
||
name = "Assistant action figure"
|
||
icon_state = "assistant"
|
||
toysay = "Grey tide station wide!"
|
||
|
||
/obj/item/toy/figure/atmos
|
||
name = "Atmospheric Technician action figure"
|
||
icon_state = "atmos"
|
||
toysay = "Glory to Atmosia!"
|
||
|
||
/obj/item/toy/figure/bartender
|
||
name = "Bartender action figure"
|
||
icon_state = "bartender"
|
||
toysay = "Wheres my monkey?"
|
||
|
||
/obj/item/toy/figure/borg
|
||
name = "Cyborg action figure"
|
||
icon_state = "borg"
|
||
toysay = "I. LIVE. AGAIN."
|
||
|
||
/obj/item/toy/figure/botanist
|
||
name = "Botanist action figure"
|
||
icon_state = "botanist"
|
||
toysay = "Dude, I see colors..."
|
||
|
||
/obj/item/toy/figure/captain
|
||
name = "Captain action figure"
|
||
icon_state = "captain"
|
||
toysay = "Crew, the Nuke Disk is safely up my ass."
|
||
|
||
/obj/item/toy/figure/cargotech
|
||
name = "Cargo Technician action figure"
|
||
icon_state = "cargotech"
|
||
toysay = "For Cargonia!"
|
||
|
||
/obj/item/toy/figure/ce
|
||
name = "Chief Engineer action figure"
|
||
icon_state = "ce"
|
||
toysay = "Wire the solars!"
|
||
|
||
/obj/item/toy/figure/chaplain
|
||
name = "Chaplain action figure"
|
||
icon_state = "chaplain"
|
||
toysay = "Gods make me a killing machine please!"
|
||
|
||
/obj/item/toy/figure/chef
|
||
name = "Chef action figure"
|
||
icon_state = "chef"
|
||
toysay = "I swear it's not human meat."
|
||
|
||
/obj/item/toy/figure/chemist
|
||
name = "Chemist action figure"
|
||
icon_state = "chemist"
|
||
toysay = "Get your pills!"
|
||
|
||
/obj/item/toy/figure/clown
|
||
name = "Clown action figure"
|
||
icon_state = "clown"
|
||
toysay = "Honk!"
|
||
|
||
/obj/item/toy/figure/ian
|
||
name = "Ian action figure"
|
||
icon_state = "ian"
|
||
toysay = "Arf!"
|
||
|
||
/obj/item/toy/figure/detective
|
||
name = "Detective action figure"
|
||
icon_state = "detective"
|
||
toysay = "This airlock has grey jumpsuit and insulated glove fibers on it."
|
||
|
||
/obj/item/toy/figure/dsquad
|
||
name = "Death Squad Officer action figure"
|
||
icon_state = "dsquad"
|
||
toysay = "Eliminate all threats!"
|
||
|
||
/obj/item/toy/figure/engineer
|
||
name = "Engineer action figure"
|
||
icon_state = "engineer"
|
||
toysay = "Oh god, the singularity is loose!"
|
||
|
||
/obj/item/toy/figure/geneticist
|
||
name = "Geneticist action figure"
|
||
icon_state = "geneticist"
|
||
toysay = "I'm not qualified for this job."
|
||
|
||
/obj/item/toy/figure/hop
|
||
name = "Head of Personnel action figure"
|
||
icon_state = "hop"
|
||
toysay = "Giving out all access!"
|
||
|
||
/obj/item/toy/figure/hos
|
||
name = "Head of Security action figure"
|
||
icon_state = "hos"
|
||
toysay = "I'm here to win, anything else is secondary."
|
||
|
||
/obj/item/toy/figure/qm
|
||
name = "Quartermaster action figure"
|
||
icon_state = "qm"
|
||
toysay = "Hail Cargonia!"
|
||
|
||
/obj/item/toy/figure/janitor
|
||
name = "Janitor action figure"
|
||
icon_state = "janitor"
|
||
toysay = "Look at the signs, you idiot."
|
||
|
||
/obj/item/toy/figure/lawyer
|
||
name = "Internal Affairs Agent action figure"
|
||
icon_state = "lawyer"
|
||
toysay = "Standard Operating Procedure says they're guilty! Hacking is proof they're an Enemy of the Corporation!"
|
||
|
||
/obj/item/toy/figure/librarian
|
||
name = "Librarian action figure"
|
||
icon_state = "librarian"
|
||
toysay = "One day while..."
|
||
|
||
/obj/item/toy/figure/md
|
||
name = "Medical Doctor action figure"
|
||
icon_state = "md"
|
||
toysay = "The patient is already dead!"
|
||
|
||
/obj/item/toy/figure/mime
|
||
name = "Mime action figure"
|
||
desc = "A \"Space Life\" brand Mime action figure."
|
||
icon_state = "mime"
|
||
toysay = "..."
|
||
|
||
/obj/item/toy/figure/miner
|
||
name = "Shaft Miner action figure"
|
||
icon_state = "miner"
|
||
toysay = "Oh god it's eating my intestines!"
|
||
|
||
/obj/item/toy/figure/ninja
|
||
name = "Ninja action figure"
|
||
icon_state = "ninja"
|
||
toysay = "Oh god! Stop shooting, I'm friendly!"
|
||
|
||
/obj/item/toy/figure/wizard
|
||
name = "Wizard action figure"
|
||
icon_state = "wizard"
|
||
toysay = "Ei Nath!"
|
||
|
||
/obj/item/toy/figure/rd
|
||
name = "Research Director action figure"
|
||
icon_state = "rd"
|
||
toysay = "Blowing all of the borgs!"
|
||
|
||
/obj/item/toy/figure/roboticist
|
||
name = "Roboticist action figure"
|
||
icon_state = "roboticist"
|
||
toysay = "He asked to be borged!"
|
||
|
||
/obj/item/toy/figure/scientist
|
||
name = "Scientist action figure"
|
||
icon_state = "scientist"
|
||
toysay = "Someone else must have made those bombs!"
|
||
|
||
/obj/item/toy/figure/syndie
|
||
name = "Nuclear Operative action figure"
|
||
icon_state = "syndie"
|
||
toysay = "Get that fucking disk!"
|
||
|
||
/obj/item/toy/figure/secofficer
|
||
name = "Security Officer action figure"
|
||
icon_state = "secofficer"
|
||
toysay = "I am the law!"
|
||
|
||
/obj/item/toy/figure/virologist
|
||
name = "Virologist action figure"
|
||
icon_state = "virologist"
|
||
toysay = "The cure is potassium!"
|
||
|
||
/obj/item/toy/figure/warden
|
||
name = "Warden action figure"
|
||
icon_state = "warden"
|
||
toysay = "Execute him for breaking in!"
|
||
|
||
//////////////////////////////////////////////////////
|
||
// Magic 8-Ball / Conch //
|
||
//////////////////////////////////////////////////////
|
||
|
||
/obj/item/toy/eight_ball
|
||
name = "Magic 8-Ball"
|
||
desc = "Mystical! Magical! Ages 8+!"
|
||
icon = 'icons/obj/toy.dmi'
|
||
icon_state = "eight-ball"
|
||
var/use_action = "shakes the ball"
|
||
var/cooldown = 0
|
||
var/list/possible_answers = list("Definitely", "All signs point to yes.", "Most likely.", "Yes.", "Ask again later.", "Better not tell you now.", "Future Unclear.", "Maybe.", "Doubtful.", "No.", "Don't count on it.", "Never.")
|
||
|
||
/obj/item/toy/eight_ball/attack_self(mob/user as mob)
|
||
if(!cooldown)
|
||
var/answer = pick(possible_answers)
|
||
user.visible_message("<span class='notice'>[user] focuses on their question and [use_action]...</span>")
|
||
user.visible_message("<span class='notice'>\icon[src] The [src] says \"[answer]\"</span>")
|
||
spawn(30)
|
||
cooldown = 0
|
||
return
|
||
|
||
/obj/item/toy/eight_ball/conch
|
||
name = "Magic Conch Shell"
|
||
desc = "All hail the Magic Conch!"
|
||
icon_state = "conch"
|
||
use_action = "pulls the string"
|
||
possible_answers = list("Yes.", "No.", "Try asking again.", "Nothing.", "I don't think so.", "Neither.", "Maybe someday.") |