mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Donk Co. Toys
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
* Mech toys (previously labeled prizes, but that's unintuitive)
|
||||
* Mech toy combat
|
||||
*/
|
||||
|
||||
|
||||
// Mech battle special attack types.
|
||||
#define SPECIAL_ATTACK_HEAL 1
|
||||
#define SPECIAL_ATTACK_DAMAGE 2
|
||||
@@ -17,7 +17,7 @@
|
||||
icon_state = "ripleytoy"
|
||||
drop_sound = 'sound/mecha/mechstep.ogg'
|
||||
reach = 2 // So you can battle across the table!
|
||||
|
||||
|
||||
// Mech Battle Vars
|
||||
var/timer = 0 // Timer when it'll be off cooldown
|
||||
var/cooldown = 1.5 SECONDS // Cooldown between play sessions (and interactions)
|
||||
@@ -34,7 +34,7 @@
|
||||
var/special_attack_cooldown = 0 // Current cooldown of their special attack
|
||||
var/wins = 0 // This mech's win count in combat
|
||||
var/losses = 0 // ...And their loss count in combat
|
||||
|
||||
|
||||
/obj/item/toy/mecha/Initialize()
|
||||
. = ..()
|
||||
desc = "Mini-Mecha action figure! Collect them all! Attack your friends or another mech with one to initiate epic mech combat! [desc]."
|
||||
@@ -58,7 +58,7 @@
|
||||
return 0 //not in range and not telekinetic
|
||||
|
||||
/**
|
||||
* this proc combines "sleep" while also checking for if the battle should continue
|
||||
* this proc combines "sleep" while also checking for if the battle should continue
|
||||
*
|
||||
* this goes through some of the checks - the toys need to be next to each other to fight!
|
||||
* if it's player vs themself: They need to be able to "control" both mechs (either must be adjacent or using TK).
|
||||
@@ -112,7 +112,7 @@
|
||||
// If all that is good, then we can sleep peacefully.
|
||||
sleep(delay)
|
||||
return TRUE
|
||||
|
||||
|
||||
//all credit to skasi for toy mech fun ideas
|
||||
/obj/item/toy/mecha/attack_self(mob/user)
|
||||
if(timer < world.time)
|
||||
@@ -130,15 +130,15 @@
|
||||
attack_self(user)
|
||||
|
||||
/**
|
||||
* If you attack a mech with a mech, initiate combat between them
|
||||
* If you attack a mech with a mech, initiate combat between them
|
||||
*/
|
||||
/obj/item/toy/mecha/attackby(obj/item/user_toy, mob/living/user)
|
||||
if(istype(user_toy, /obj/item/toy/mecha))
|
||||
if(istype(user_toy, /obj/item/toy/mecha))
|
||||
var/obj/item/toy/mecha/M = user_toy
|
||||
if(check_battle_start(user, M))
|
||||
mecha_brawl(M, user)
|
||||
..()
|
||||
|
||||
|
||||
/**
|
||||
* Attack is called from the user's toy, aimed at target(another human), checking for target's toy.
|
||||
*/
|
||||
@@ -241,9 +241,9 @@
|
||||
|
||||
sleep(1 SECONDS)
|
||||
//--THE BATTLE BEGINS--
|
||||
while(combat_health > 0 && attacker.combat_health > 0 && battle_length < MAX_BATTLE_LENGTH)
|
||||
while(combat_health > 0 && attacker.combat_health > 0 && battle_length < MAX_BATTLE_LENGTH)
|
||||
if(!combat_sleep(0.5 SECONDS, attacker, attacker_controller, opponent)) //combat_sleep checks everything we need to have checked for combat to continue
|
||||
break
|
||||
break
|
||||
|
||||
//before we do anything - deal with charged attacks
|
||||
if(special_attack_charged)
|
||||
@@ -269,7 +269,7 @@
|
||||
attacker.special_attack_charged = TRUE
|
||||
attacker_controller.visible_message("<span class='danger'> [attacker] begins charging its special attack!! </span>", \
|
||||
"<span class='danger'> You begin charging [attacker]'s special attack! </span>")
|
||||
else //just attack
|
||||
else //just attack
|
||||
attacker.SpinAnimation(5, 0)
|
||||
playsound(attacker, 'sound/mecha/mechstep.ogg', 30, TRUE)
|
||||
combat_health--
|
||||
@@ -322,7 +322,7 @@
|
||||
special_attack_charged = TRUE
|
||||
src_controller.visible_message("<span class='danger'> [src] begins charging its special attack!! </span>", \
|
||||
"<span class='danger'> You begin charging [src]'s special attack! </span>")
|
||||
else //just attack
|
||||
else //just attack
|
||||
SpinAnimation(5, 0)
|
||||
playsound(src, 'sound/mecha/mechstep.ogg', 30, TRUE)
|
||||
attacker.combat_health--
|
||||
@@ -333,12 +333,12 @@
|
||||
attacker.combat_health--
|
||||
playsound(attacker, 'sound/effects/meteorimpact.ogg', 20, TRUE)
|
||||
src_controller.visible_message("<span class='boldwarning'> ...and lands a CRIPPLING BLOW! </span>", \
|
||||
"<span class='boldwarning'> ...and you land a CRIPPLING blow on [attacker]! </span>", null)
|
||||
"<span class='boldwarning'> ...and you land a CRIPPLING blow on [attacker]! </span>", null)
|
||||
else
|
||||
attacker_controller.visible_message("<span class='notice'> [src] and [attacker] stand around awkwardly.</span>", \
|
||||
"<span class='notice'> You don't know what to do next.</span>")
|
||||
"<span class='notice'> You don't know what to do next.</span>")
|
||||
|
||||
battle_length++
|
||||
battle_length++
|
||||
sleep(0.5 SECONDS)
|
||||
|
||||
/// Lines chosen for the winning mech
|
||||
@@ -347,7 +347,7 @@
|
||||
if(attacker.combat_health <= 0 && combat_health <= 0) //both lose
|
||||
playsound(src, 'sound/machines/warning-buzzer.ogg', 20, TRUE)
|
||||
attacker_controller.visible_message("<span class='boldnotice'> MUTUALLY ASSURED DESTRUCTION!! [src] and [attacker] both end up destroyed!</span>", \
|
||||
"<span class='boldnotice'> Both [src] and [attacker] are destroyed!</span>")
|
||||
"<span class='boldnotice'> Both [src] and [attacker] are destroyed!</span>")
|
||||
else if(attacker.combat_health <= 0) //src wins
|
||||
wins++
|
||||
attacker.losses++
|
||||
@@ -359,7 +359,7 @@
|
||||
"<span class='notice'> You raise up [src] victoriously over [attacker]!</span>")
|
||||
else if (combat_health <= 0) //attacker wins
|
||||
attacker.wins++
|
||||
losses++
|
||||
losses++
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 20, TRUE)
|
||||
src_controller.visible_message("<span class='notice'> [src] collapses!</span>", \
|
||||
"<span class='notice'> [src] collapses!</span>", null)
|
||||
@@ -374,7 +374,7 @@
|
||||
in_combat = FALSE
|
||||
attacker.in_combat = FALSE
|
||||
|
||||
combat_health = max_combat_health
|
||||
combat_health = max_combat_health
|
||||
attacker.combat_health = attacker.max_combat_health
|
||||
|
||||
return
|
||||
@@ -382,49 +382,49 @@
|
||||
/**
|
||||
* This proc checks if a battle can be initiated between src and attacker.
|
||||
*
|
||||
* Both SRC and attacker (if attacker is included) timers are checked if they're on cooldown, and
|
||||
* Both SRC and attacker (if attacker is included) timers are checked if they're on cooldown, and
|
||||
* both SRC and attacker (if attacker is included) are checked if they are in combat already.
|
||||
* If any of the above are true, the proc returns FALSE and sends a message to user (and target, if included) otherwise, it returns TRUE
|
||||
* Arguments:
|
||||
* * user: the user who is initiating the battle
|
||||
* * attacker: optional arg for checking two mechs at once
|
||||
* * attacker: optional arg for checking two mechs at once
|
||||
* * target: optional arg used in Mech PvP battles (if used, attacker is target's toy)
|
||||
*/
|
||||
/obj/item/toy/mecha/proc/check_battle_start(mob/living/carbon/user, obj/item/toy/mecha/attacker, mob/living/carbon/target)
|
||||
var/datum/gender/T
|
||||
/obj/item/toy/mecha/proc/check_battle_start(mob/living/carbon/user, obj/item/toy/mecha/attacker, mob/living/carbon/target)
|
||||
var/datum/gender/T
|
||||
if(target)
|
||||
T = gender_datums[target.get_visible_gender()] // Doing this because Polaris Code has shitty gender datums and it's clunkier than FUCK.
|
||||
if(attacker && attacker.in_combat)
|
||||
to_chat(user, "<span class='notice'>[target ? T.His : "Your" ] [attacker.name] is in combat.</span>")
|
||||
if(target)
|
||||
if(target)
|
||||
to_chat(target, "<span class='notice'>Your [attacker.name] is in combat.</span>")
|
||||
return FALSE
|
||||
return FALSE
|
||||
if(in_combat)
|
||||
to_chat(user, "<span class='notice'>Your [name] is in combat.</span>")
|
||||
if(target)
|
||||
if(target)
|
||||
to_chat(target, "<span class='notice'>[T.His] [name] is in combat.</span>")
|
||||
return FALSE
|
||||
return FALSE
|
||||
if(attacker && attacker.timer > world.time)
|
||||
to_chat(user, "<span class='notice'>[target?T.His : "Your" ] [attacker.name] isn't ready for battle.</span>")
|
||||
if(target)
|
||||
if(target)
|
||||
to_chat(target, "<span class='notice'>Your [attacker.name] isn't ready for battle.</span>")
|
||||
return FALSE
|
||||
return FALSE
|
||||
if(timer > world.time)
|
||||
to_chat(user, "<span class='notice'>Your [name] isn't ready for battle.</span>")
|
||||
if(target)
|
||||
if(target)
|
||||
to_chat(target, "<span class='notice'>[T.His] [name] isn't ready for battle.</span>")
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Processes any special attack moves that happen in the battle (called in the mechaBattle proc).
|
||||
* Processes any special attack moves that happen in the battle (called in the mechaBattle proc).
|
||||
*
|
||||
* Makes the toy shout their special attack cry and updates its cooldown. Then, does the special attack.
|
||||
* Arguments:
|
||||
* * victim - the toy being hit by the special move
|
||||
*/
|
||||
/obj/item/toy/mecha/proc/special_attack_move(obj/item/toy/mecha/victim)
|
||||
/obj/item/toy/mecha/proc/special_attack_move(obj/item/toy/mecha/victim)
|
||||
visible_message(special_attack_cry + "!!")
|
||||
|
||||
special_attack_charged = FALSE
|
||||
@@ -447,15 +447,15 @@
|
||||
visible_message("I FORGOT MY SPECIAL ATTACK...")
|
||||
|
||||
/**
|
||||
* Base proc for 'other' special attack moves.
|
||||
* Base proc for 'other' special attack moves.
|
||||
*
|
||||
* This one is only for inheritance, each mech with an 'other' type move has their procs below.
|
||||
* This one is only for inheritance, each mech with an 'other' type move has their procs below.
|
||||
* Arguments:
|
||||
* * victim - the toy being hit by the super special move (doesn't necessarily need to be used)
|
||||
*/
|
||||
/obj/item/toy/mecha/proc/super_special_attack(obj/item/toy/mecha/victim)
|
||||
/obj/item/toy/mecha/proc/super_special_attack(obj/item/toy/mecha/victim)
|
||||
visible_message("<span class='notice'> [src] does a cool flip.</span>")
|
||||
|
||||
|
||||
/obj/random/mech_toy
|
||||
name = "Random Mech Toy"
|
||||
desc = "This is a random mech toy."
|
||||
@@ -488,8 +488,8 @@
|
||||
special_attack_type = SPECIAL_ATTACK_OTHER
|
||||
special_attack_type_message = "instantly destroys the opposing mech if its health is less than this mech's health."
|
||||
special_attack_cry = "KILLER CLAMP"
|
||||
|
||||
/obj/item/toy/mecha/deathripley/super_special_attack(obj/item/toy/mecha/victim)
|
||||
|
||||
/obj/item/toy/mecha/deathripley/super_special_attack(obj/item/toy/mecha/victim)
|
||||
playsound(src, 'sound/weapons/sonic_jackhammer.ogg', 20, TRUE)
|
||||
if(victim.combat_health < combat_health) // Instantly kills the other mech if it's health is below our's.
|
||||
visible_message("EXECUTE!!")
|
||||
@@ -522,7 +522,7 @@
|
||||
special_attack_type_message = "puts the opposing mech's special move on cooldown and heals this mech."
|
||||
special_attack_cry = "MEGA HORN"
|
||||
|
||||
/obj/item/toy/mecha/honk/super_special_attack(obj/item/toy/mecha/victim)
|
||||
/obj/item/toy/mecha/honk/super_special_attack(obj/item/toy/mecha/victim)
|
||||
playsound(src, 'sound/machines/honkbot_evil_laugh.ogg', 20, TRUE)
|
||||
victim.special_attack_cooldown += 3 // Adds cooldown to the other mech and gives a minor self heal
|
||||
combat_health++
|
||||
@@ -577,7 +577,7 @@
|
||||
special_attack_type_message = "has a lower cooldown than normal special moves, increases the opponent's cooldown, and deals damage."
|
||||
special_attack_cry = "*wave"
|
||||
|
||||
/obj/item/toy/mecha/reticence/super_special_attack(obj/item/toy/mecha/victim)
|
||||
/obj/item/toy/mecha/reticence/super_special_attack(obj/item/toy/mecha/victim)
|
||||
special_attack_cooldown-- //Has a lower cooldown...
|
||||
victim.special_attack_cooldown++ //and increases the opponent's cooldown by 1...
|
||||
victim.combat_health-- //and some free damage.
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
* Balloons
|
||||
* Fake telebeacon
|
||||
* Fake singularity
|
||||
* Toy gun
|
||||
* Toy crossbow
|
||||
* Toy swords
|
||||
* Toy bosun's whistle
|
||||
* Snap pops
|
||||
@@ -145,127 +143,6 @@
|
||||
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_icons = list(
|
||||
icon_l_hand = 'icons/mob/items/lefthand_guns.dmi',
|
||||
icon_r_hand = 'icons/mob/items/righthand_guns.dmi',
|
||||
)
|
||||
slot_flags = SLOT_HOLSTER
|
||||
w_class = ITEMSIZE_SMALL
|
||||
attack_verb = list("attacked", "struck", "hit")
|
||||
var/bullets = 5
|
||||
drop_sound = 'sound/items/drop/gun.ogg'
|
||||
|
||||
/obj/item/toy/crossbow/examine(mob/user)
|
||||
. = ..()
|
||||
if(bullets && get_dist(user, src) <= 2)
|
||||
. += "<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)
|
||||
if(istype(I, /obj/item/toy/ammo/crossbow))
|
||||
if(bullets <= 4)
|
||||
user.drop_item()
|
||||
qdel(I)
|
||||
bullets++
|
||||
to_chat(user, "<span class='notice'>You load the foam dart into the crossbow.</span>")
|
||||
else
|
||||
to_chat(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(src, '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
|
||||
for(var/mob/O in viewers(world.view, D))
|
||||
O.show_message(text("<span class='warning'>\The [] was hit by the foam dart!</span>", M), 1)
|
||||
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)
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(text("<span class='warning'>\The [] realized they were out of ammo and starting scrounging for some!</span>", user), 1)
|
||||
|
||||
|
||||
/obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
// ******* Check
|
||||
|
||||
if (src.bullets > 0 && M.lying)
|
||||
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if(O.client)
|
||||
O.show_message(text("<span class='danger'>\The [] casually lines up a shot with []'s head and pulls the trigger!</span>", user, M), 1, "<span class='warning'>You hear the sound of foam against skull</span>", 2)
|
||||
O.show_message(text("<span class='warning'>\The [] was hit in the head by the foam dart!</span>", M), 1)
|
||||
|
||||
playsound(src, 'sound/items/syringeproj.ogg', 50, 1)
|
||||
new /obj/item/toy/ammo/crossbow(M.loc)
|
||||
src.bullets--
|
||||
else if (M.lying && src.bullets == 0)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if (O.client) O.show_message(text("<span class='danger'>\The [] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!</span>", user, M), 1, "<span class='warning'>You hear someone fall</span>", 2)
|
||||
user.Weaken(5)
|
||||
return
|
||||
|
||||
/obj/item/toy/ammo/crossbow
|
||||
name = "foam dart"
|
||||
desc = "It's nerf or nothing! Ages 8 and up."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "foamdart"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_EARS
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
|
||||
/obj/effect/foam_dart_dummy
|
||||
name = ""
|
||||
desc = ""
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "null"
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
|
||||
/*
|
||||
* Toy swords
|
||||
*/
|
||||
@@ -394,7 +271,6 @@
|
||||
/*
|
||||
* Bosun's whistle
|
||||
*/
|
||||
|
||||
/obj/item/toy/bosunwhistle
|
||||
name = "bosun's whistle"
|
||||
desc = "A genuine Admiral Krush Bosun's Whistle, for the aspiring ship's captain! Suitable for ages 8 and up, do not swallow."
|
||||
@@ -1526,7 +1402,7 @@
|
||||
name = "black king"
|
||||
desc = "A black king chess piece."
|
||||
description_info = "The King can move exactly one square horizontally, vertically, or diagonally. If your opponent captures this piece, you lose."
|
||||
icon_state = "black_king"
|
||||
icon_state = "black_king"
|
||||
|
||||
/// Balloon structures
|
||||
|
||||
|
||||
@@ -1,9 +1,42 @@
|
||||
/* 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
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Mistletoe
|
||||
*/
|
||||
/obj/item/toy/mistletoe
|
||||
name = "mistletoe"
|
||||
desc = "You are supposed to kiss someone under these"
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "mistletoe"
|
||||
|
||||
/*
|
||||
* Plushies
|
||||
*/
|
||||
/obj/item/toy/plushie/lizardplushie
|
||||
name = "lizard plushie"
|
||||
desc = "An adorable stuffed toy that resembles a lizardperson."
|
||||
@@ -103,38 +136,6 @@
|
||||
/obj/item/toy/plushie/vox/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
|
||||
/*
|
||||
* 4/9/21 *
|
||||
* IPC Plush
|
||||
* Toaster plush
|
||||
* Snake plush
|
||||
* Cube plush
|
||||
* Pip plush
|
||||
* Moth plush
|
||||
* Crab plush
|
||||
* Possum plush
|
||||
* Goose plush
|
||||
* White mouse plush
|
||||
* Pet rock
|
||||
* Pet rock (m)
|
||||
* Pet rock (f)
|
||||
* Chew toys
|
||||
* Cat toy * 2
|
||||
* Toy flash
|
||||
* Toy button
|
||||
* Gnome
|
||||
* Toy AI
|
||||
* Buzzer ring
|
||||
* Fake handcuffs
|
||||
* Nuke toy
|
||||
* Toy gibber
|
||||
* Toy xeno
|
||||
* Fake gun * 2
|
||||
* Toy chainsaw
|
||||
* Random tabletop miniature spawner
|
||||
* snake popper
|
||||
*/
|
||||
|
||||
/obj/item/toy/plushie/ipc
|
||||
name = "IPC plushie"
|
||||
desc = "A pleasing soft-toy of a monitor-headed robot. Toaster functionality included."
|
||||
@@ -174,7 +175,6 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/toy/plushie/ipc/attack_self(mob/user as mob)
|
||||
if(!cooldown)
|
||||
playsound(user, 'sound/machines/ping.ogg', 10, 0)
|
||||
@@ -278,7 +278,9 @@
|
||||
|
||||
/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."
|
||||
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_vr.dmi'
|
||||
icon_state = "goose"
|
||||
attack_verb = list("honked")
|
||||
@@ -288,9 +290,54 @@
|
||||
icon_state = "mouse"
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
|
||||
/obj/item/toy/plushie/susred
|
||||
name = "red spaceman plushie"
|
||||
desc = "A suspicious looking red spaceman plushie. Why does it smell like the vents?"
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "sus_red"
|
||||
attack_verb = list("stabbed", "slashed")
|
||||
|
||||
/obj/item/toy/plushie/ipc/toaster/attack_self(mob/user as mob)
|
||||
if(!cooldown)
|
||||
playsound(user, 'sound/weapons/slice.ogg', 10, 0)
|
||||
src.visible_message("<span class='danger'>Stab!</span>")
|
||||
cooldown = 1
|
||||
addtimer(CALLBACK(src, .proc/cooldownreset), 50)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plushie/susblue
|
||||
name = "blue spaceman plushie"
|
||||
desc = "A dapper looking blue spaceman plushie. Looks very intuitive."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "sus_blue"
|
||||
|
||||
/obj/item/toy/plushie/suswhite
|
||||
name = "white spaceman plushie"
|
||||
desc = "A whiny looking white spaceman plushie. Looks like it could cry at any moment."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
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_vr.dmi'
|
||||
icon_state = "big_cat"
|
||||
|
||||
/obj/item/toy/plushie/basset
|
||||
name = "basset plushie"
|
||||
desc = "A sleepy looking basset hound plushie."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "basset"
|
||||
|
||||
/*
|
||||
* 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."
|
||||
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_vr.dmi'
|
||||
icon_state = "rock"
|
||||
attack_verb = list("grug'd", "unga'd")
|
||||
@@ -311,6 +358,9 @@
|
||||
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?"
|
||||
@@ -334,6 +384,9 @@
|
||||
playsound(loc, 'sound/items/drop/plushie.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'><b>\The [user]</b> gnaws on [src]!</span>","<span class='notice'>You gnaw on [src]!</span>")
|
||||
|
||||
/*
|
||||
* Cat toys
|
||||
*/
|
||||
/obj/item/toy/cat_toy
|
||||
name = "toy mouse"
|
||||
desc = "A colorful toy mouse!"
|
||||
@@ -353,6 +406,9 @@
|
||||
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."
|
||||
@@ -378,6 +434,9 @@
|
||||
/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."
|
||||
@@ -398,12 +457,18 @@
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Nothing happens.</span>")
|
||||
|
||||
/*
|
||||
* 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_vr.dmi'
|
||||
icon_state = "gnome"
|
||||
|
||||
/*
|
||||
* Toy AI
|
||||
*/
|
||||
/obj/item/toy/AI
|
||||
name = "toy AI"
|
||||
desc = "A little toy model AI core with real law announcing action!"
|
||||
@@ -438,6 +503,9 @@
|
||||
/obj/item/toy/AI/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
|
||||
/*
|
||||
* Hand buzzer
|
||||
*/
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy
|
||||
name = "steel ring"
|
||||
desc = "Torus shaped finger decoration. It has a small piece of metal on the palm-side."
|
||||
@@ -464,6 +532,9 @@
|
||||
|
||||
return 0
|
||||
|
||||
/*
|
||||
* Toy cuffs
|
||||
*/
|
||||
/obj/item/weapon/handcuffs/fake
|
||||
name = "plastic handcuffs"
|
||||
desc = "Use this to keep plastic prisoners in line."
|
||||
@@ -488,6 +559,9 @@
|
||||
foldable = null
|
||||
can_hold = list(/obj/item/weapon/handcuffs/fake, /obj/item/weapon/handcuffs/legcuffs/fake)
|
||||
|
||||
/*
|
||||
* Toy nuke
|
||||
*/
|
||||
/obj/item/toy/nuke
|
||||
name = "\improper Nuclear Fission Explosive toy"
|
||||
desc = "A plastic model of a Nuclear Fission Explosive."
|
||||
@@ -514,6 +588,9 @@
|
||||
if(istype(I, /obj/item/weapon/disk/nuclear))
|
||||
to_chat(user, "<span class='alert'>Nice try. Put that disk back where it belongs.</span>")
|
||||
|
||||
/*
|
||||
* 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."
|
||||
@@ -551,6 +628,9 @@
|
||||
|
||||
else ..()
|
||||
|
||||
/*
|
||||
* Toy xeno
|
||||
*/
|
||||
/obj/item/toy/toy_xeno
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "xeno"
|
||||
@@ -575,6 +655,9 @@
|
||||
to_chat(user, "<span class='warning'>The string on [src] hasn't rewound all the way!</span>")
|
||||
return
|
||||
|
||||
/*
|
||||
* Russian revolver
|
||||
*/
|
||||
/obj/item/toy/russian_revolver
|
||||
name = "russian revolver"
|
||||
desc = "For fun and games!"
|
||||
@@ -645,6 +728,9 @@
|
||||
to_chat(user, "<span class='warning'>[src] needs to be reloaded.</span>")
|
||||
return FALSE
|
||||
|
||||
/*
|
||||
* Trick revolver
|
||||
*/
|
||||
/obj/item/toy/russian_revolver/trick_revolver
|
||||
name = "\improper .357 revolver"
|
||||
desc = "A suspicious revolver. Uses .357 ammo."
|
||||
@@ -672,6 +758,9 @@
|
||||
sleep(5)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
|
||||
/*
|
||||
* Toy chainsaw
|
||||
*/
|
||||
/obj/item/toy/chainsaw
|
||||
name = "Toy Chainsaw"
|
||||
desc = "A toy chainsaw with a rubber edge. Ages 8 and up"
|
||||
@@ -694,6 +783,9 @@
|
||||
/obj/item/toy/chainsaw/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
|
||||
/*
|
||||
* Random miniature spawner
|
||||
*/
|
||||
/obj/random/miniature
|
||||
name = "Random miniature"
|
||||
desc = "This is a random miniature."
|
||||
@@ -703,6 +795,9 @@
|
||||
/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."
|
||||
@@ -779,3 +874,93 @@
|
||||
real = 2
|
||||
to_chat(user, "<span class='notice'>You short out the bluespace refill system of [src].</span>")
|
||||
|
||||
/*
|
||||
* 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_vr.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/weapon/tool/screwdriver/sdriver
|
||||
name = "sonic driver"
|
||||
desc = "A novelty screwdriver that uses tiny magnets to manipulate screws."
|
||||
icon = 'icons/obj/toy_vr.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/weapon/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_vr.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_vr.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_vr.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_vr.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_vr.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_vr.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_vr.dmi'
|
||||
icon_state = "prisoner"
|
||||
toysay = "I did not hit her! I did not!"
|
||||
|
||||
Reference in New Issue
Block a user