mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 03:57:13 +01:00
Extra Plushies + Plushify Spell (#27384)
* Plushie PR TODO- Fix borgs becoming mind Add to smite list Add diona plush effect * Fixed Issues Added alien plush Added loadout Yeah * Apply suggestions from code review Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: Drakeven <50409888+Drakeven@users.noreply.github.com> * WIP Will finish later * Fixed the various issues Should be working now! Changed the bread smite to a 'generic item' smite and then made it a specifcally breaded smite. * Minor typo fixing And stuff * WIP Conversion Converting all the attacks into more sleek attacks, will need to finish. * Fixes galore Yippie! * Russian revolver wasn't working now you can self-shoot again! Horay! * You can no longer eat spraycans IPC clowns everywhere devistated * Apply suggestions from code review Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Signed-off-by: Drakeven <50409888+Drakeven@users.noreply.github.com> * A tinsy bit of touching up :) --------- Signed-off-by: Drakeven <50409888+Drakeven@users.noreply.github.com> Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
This commit is contained in:
co-authored by
Contrabang
Luc
Burzah
parent
33eaf8ae42
commit
a5726efe0c
@@ -33,6 +33,8 @@
|
||||
var/preset_message
|
||||
/// The index of the character in the message that will be drawn next.
|
||||
var/preset_message_index = 0
|
||||
/// Can this crayon be consumed or not
|
||||
var/consumable = TRUE
|
||||
|
||||
/obj/item/toy/crayon/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is jamming the [name] up [user.p_their()] nose and into [user.p_their()] brain. It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -42,7 +44,9 @@
|
||||
..()
|
||||
drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1, 8)]")
|
||||
|
||||
/obj/item/toy/crayon/attack_self__legacy__attackchain(mob/living/user as mob)
|
||||
/obj/item/toy/crayon/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
update_window(user)
|
||||
|
||||
/obj/item/toy/crayon/proc/update_window(mob/living/user as mob)
|
||||
@@ -105,9 +109,12 @@
|
||||
drawtype = temp
|
||||
update_window(usr)
|
||||
|
||||
/obj/item/toy/crayon/afterattack__legacy__attackchain(atom/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(busy) return
|
||||
/obj/item/toy/crayon/after_attack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(!proximity_flag)
|
||||
return
|
||||
if(busy)
|
||||
return
|
||||
if(is_type_in_list(target,validSurfaces))
|
||||
var/temp = "rune"
|
||||
if(preset_message_index > 0)
|
||||
@@ -137,8 +144,10 @@
|
||||
qdel(src)
|
||||
busy = FALSE
|
||||
|
||||
/obj/item/toy/crayon/attack__legacy__attackchain(mob/M, mob/user)
|
||||
if(M == user)
|
||||
/obj/item/toy/crayon/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
if(..() || !consumable)
|
||||
return FINISH_ATTACK
|
||||
if(target == user)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!H.check_has_mouth())
|
||||
@@ -152,8 +161,6 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There is no more of [name] left!</span>")
|
||||
qdel(src)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/toy/crayon/examine(mob/user)
|
||||
. = ..()
|
||||
@@ -255,9 +262,6 @@
|
||||
dye_color = DYE_MIME
|
||||
uses = 0
|
||||
|
||||
/obj/item/toy/crayon/mime/attack_self__legacy__attackchain(mob/living/user as mob)
|
||||
update_window(user)
|
||||
|
||||
/obj/item/toy/crayon/mime/update_window(mob/living/user as mob)
|
||||
dat += "<center><span style='border:1px solid #161616; background-color: [colour];'> </span><a href='byond://?src=[UID()];color=1'>Change color</a></center>"
|
||||
..()
|
||||
@@ -281,9 +285,6 @@
|
||||
dye_color = DYE_RAINBOW
|
||||
uses = 0
|
||||
|
||||
/obj/item/toy/crayon/rainbow/attack_self__legacy__attackchain(mob/living/user as mob)
|
||||
update_window(user)
|
||||
|
||||
/obj/item/toy/crayon/rainbow/update_window(mob/living/user as mob)
|
||||
dat += "<center><span style='border:1px solid #161616; background-color: [colour];'> </span><a href='byond://?src=[UID()];color=1'>Change color</a></center>"
|
||||
..()
|
||||
@@ -312,15 +313,15 @@
|
||||
instant = TRUE
|
||||
validSurfaces = list(/turf/simulated/floor,/turf/simulated/wall)
|
||||
dye_color = null // not technically a crayon, so we're not gonna have it dye stuff in the laundry machine
|
||||
consumable = FALSE // To stop you from eating spraycans. It's TOO SILLY!
|
||||
|
||||
/obj/item/toy/crayon/spraycan/New()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/toy/crayon/spraycan/attack__legacy__attackchain(mob/M, mob/user)
|
||||
return // To stop you from eating spraycans. It's TOO SILLY!
|
||||
|
||||
/obj/item/toy/crayon/spraycan/attack_self__legacy__attackchain(mob/living/user)
|
||||
/obj/item/toy/crayon/spraycan/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
var/choice = tgui_input_list(user, "Do you want to...", "Spraycan Options", list("Toggle Cap","Change Drawing", "Change Color"))
|
||||
switch(choice)
|
||||
if("Toggle Cap")
|
||||
@@ -335,9 +336,9 @@
|
||||
return
|
||||
update_icon()
|
||||
|
||||
/obj/item/toy/crayon/spraycan/afterattack__legacy__attackchain(atom/target, mob/user as mob, proximity)
|
||||
/obj/item/toy/crayon/spraycan/after_attack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
if(!proximity_flag)
|
||||
return
|
||||
if(capped)
|
||||
to_chat(user, "<span class='warning'>You cannot spray [target] while the cap is still on!</span>")
|
||||
|
||||
@@ -14,7 +14,9 @@
|
||||
return ..()
|
||||
|
||||
// Attack self
|
||||
/obj/item/toy/plushie/carpplushie/dehy_carp/attack_self__legacy__attackchain(mob/user as mob)
|
||||
/obj/item/toy/plushie/carpplushie/dehy_carp/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
src.add_fingerprint(user) // Anyone can add their fingerprints to it with this
|
||||
if(owned)
|
||||
to_chat(user, "<span class='notice'>[src] stares up at you with friendly eyes.</span>")
|
||||
@@ -27,14 +29,15 @@
|
||||
if(volume >= 1)
|
||||
Swell()
|
||||
|
||||
/obj/item/toy/plushie/carpplushie/dehy_carp/afterattack__legacy__attackchain(obj/O, mob/user,proximity)
|
||||
if(!proximity) return
|
||||
if(istype(O,/obj/structure/sink))
|
||||
/obj/item/toy/plushie/carpplushie/dehy_carp/after_attack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(!proximity_flag)
|
||||
return
|
||||
if(istype(target,/obj/structure/sink))
|
||||
to_chat(user, "<span class='notice'>You place [src] under a stream of water...</span>")
|
||||
user.drop_item()
|
||||
loc = get_turf(O)
|
||||
loc = get_turf(target)
|
||||
return Swell()
|
||||
..()
|
||||
|
||||
/obj/item/toy/plushie/carpplushie/dehy_carp/proc/Swell()
|
||||
desc = "It's growing!"
|
||||
|
||||
+420
-168
@@ -24,6 +24,7 @@
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
force = 0
|
||||
new_attack_chain = TRUE
|
||||
|
||||
|
||||
/*
|
||||
@@ -40,21 +41,23 @@
|
||||
..()
|
||||
create_reagents(10)
|
||||
|
||||
/obj/item/toy/balloon/attack__legacy__attackchain(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
return
|
||||
/obj/item/toy/balloon/pre_attack(atom/target, mob/living/user, params)
|
||||
..()
|
||||
return FINISH_ATTACK
|
||||
|
||||
/obj/item/toy/balloon/afterattack__legacy__attackchain(atom/A, mob/user, proximity)
|
||||
if(!proximity)
|
||||
/obj/item/toy/balloon/after_attack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(!proximity_flag)
|
||||
return
|
||||
if(istype(A, /obj/structure/reagent_dispensers))
|
||||
var/obj/structure/reagent_dispensers/RD = A
|
||||
if(istype(target, /obj/structure/reagent_dispensers))
|
||||
var/obj/structure/reagent_dispensers/RD = target
|
||||
if(RD.reagents.total_volume <= 0)
|
||||
to_chat(user, "<span class='warning'>[RD] is empty.</span>")
|
||||
else if(reagents.total_volume >= 10)
|
||||
to_chat(user, "<span class='warning'>[src] is full.</span>")
|
||||
else
|
||||
A.reagents.trans_to(src, 10)
|
||||
to_chat(user, "<span class='notice'>You fill the balloon with the contents of [A].</span>")
|
||||
target.reagents.trans_to(src, 10)
|
||||
to_chat(user, "<span class='notice'>You fill the balloon with the contents of [target].</span>")
|
||||
desc = "A translucent balloon with some form of liquid sloshing around in it."
|
||||
update_icon()
|
||||
|
||||
@@ -66,20 +69,22 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/toy/balloon/attackby__legacy__attackchain(obj/O as obj, mob/user as mob, params)
|
||||
if(istype(O, /obj/item/reagent_containers/glass) || istype(O, /obj/item/reagent_containers/drinks/drinkingglass))
|
||||
if(O.reagents)
|
||||
if(O.reagents.total_volume < 1)
|
||||
to_chat(user, "[O] is empty.")
|
||||
else if(O.reagents.total_volume >= 1)
|
||||
if(O.reagents.has_reagent("facid", 1))
|
||||
/obj/item/toy/balloon/attack_by(obj/item/attacking, mob/user, params)
|
||||
if(..())
|
||||
return FINISH_ATTACK
|
||||
if(istype(attacking, /obj/item/reagent_containers/glass) || istype(attacking, /obj/item/reagent_containers/drinks/drinkingglass))
|
||||
if(attacking.reagents)
|
||||
if(attacking.reagents.total_volume < 1)
|
||||
to_chat(user, "[attacking] is empty.")
|
||||
else if(attacking.reagents.total_volume >= 1)
|
||||
if(attacking.reagents.has_reagent("facid", 1))
|
||||
to_chat(user, "The acid chews through the balloon!")
|
||||
O.reagents.reaction(user)
|
||||
attacking.reagents.reaction(user)
|
||||
qdel(src)
|
||||
else
|
||||
desc = "A translucent balloon with some form of liquid sloshing around in it."
|
||||
to_chat(user, "<span class='notice'>You fill the balloon with the contents of [O].</span>")
|
||||
O.reagents.trans_to(src, 10)
|
||||
to_chat(user, "<span class='notice'>You fill the balloon with the contents of [attacking].</span>")
|
||||
attacking.reagents.trans_to(src, 10)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
@@ -115,8 +120,8 @@
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
var/lastused = null
|
||||
|
||||
/obj/item/toy/syndicateballoon/attack_self__legacy__attackchain(mob/user)
|
||||
if(world.time - lastused < CLICK_CD_MELEE)
|
||||
/obj/item/toy/syndicateballoon/activate_self(mob/user)
|
||||
if(..() || world.time - lastused < CLICK_CD_MELEE)
|
||||
return
|
||||
var/playverb = pick("bat [src]", "tug on [src]'s string", "play with [src]")
|
||||
user.visible_message("<span class='notice'>[user] plays with [src].</span>", "<span class='notice'>You [playverb].</span>")
|
||||
@@ -184,7 +189,9 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("attacked", "struck", "hit")
|
||||
|
||||
/obj/item/toy/sword/attack_self__legacy__attackchain(mob/user)
|
||||
/obj/item/toy/sword/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
active = !active
|
||||
if(active)
|
||||
to_chat(user, "<span class='notice'>You extend the plastic blade with a quick flick of your wrist.</span>")
|
||||
@@ -204,24 +211,24 @@
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
// Copied from /obj/item/melee/energy/sword/attackby
|
||||
/obj/item/toy/sword/attackby__legacy__attackchain(obj/item/W, mob/living/user, params)
|
||||
..()
|
||||
if(istype(W, /obj/item/toy/sword))
|
||||
if(W == src)
|
||||
/obj/item/toy/sword/attack_by(obj/item/attacking, mob/user, params)
|
||||
if(..())
|
||||
return FINISH_ATTACK
|
||||
if(istype(attacking, /obj/item/toy/sword))
|
||||
if(attacking == src)
|
||||
to_chat(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))
|
||||
to_chat(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>")
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.adjustBrainLoss(10)
|
||||
else if((attacking.flags & NODROP) || (flags & NODROP))
|
||||
to_chat(user, "<span class='notice'>\the [flags & NODROP ? src : attacking] is stuck to your hand, you can't attach it to \the [flags & NODROP ? attacking : src]!</span>")
|
||||
else
|
||||
to_chat(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/dualsaber/toy(user.loc)
|
||||
user.unEquip(W)
|
||||
user.unEquip(attacking)
|
||||
user.unEquip(src)
|
||||
qdel(W)
|
||||
qdel(attacking)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/toy/sword/chaosprank
|
||||
@@ -229,9 +236,9 @@
|
||||
/// Sets to TRUE once the character using it hits something and realises it's not a real energy sword
|
||||
var/pranked = FALSE
|
||||
|
||||
/obj/item/toy/sword/attack__legacy__attackchain(mob/target, mob/living/user)
|
||||
if(!cigarette_lighter_act(user, target))
|
||||
return ..()
|
||||
/obj/item/toy/sword/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
if(..() || cigarette_lighter_act(user, target))
|
||||
return FINISH_ATTACK
|
||||
|
||||
/obj/item/toy/sword/cigarette_lighter_act(mob/living/user, mob/living/target, obj/item/direct_attackby_item)
|
||||
var/obj/item/clothing/mask/cigarette/cig = ..()
|
||||
@@ -283,8 +290,8 @@
|
||||
target.unEquip(cig, TRUE)
|
||||
return TRUE
|
||||
|
||||
/obj/item/toy/sword/chaosprank/afterattack__legacy__attackchain(mob/living/target, mob/living/user, proximity)
|
||||
..()
|
||||
/obj/item/toy/sword/chaosprank/after_attack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(!pranked)
|
||||
to_chat(user, "<span class='chaosverybad'>Oh... It's a fake.</span>")
|
||||
name = "toy sword"
|
||||
@@ -430,7 +437,9 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/nuke/attack_self__legacy__attackchain(mob/user)
|
||||
/obj/item/toy/nuke/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
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>")
|
||||
@@ -462,11 +471,12 @@
|
||||
desc += " This one is [item_color]."
|
||||
icon_state = "therapy[item_color]"
|
||||
|
||||
/obj/item/toy/therapy/attack_self__legacy__attackchain(mob/user)
|
||||
if(cooldown < world.time - 8)
|
||||
to_chat(user, "<span class='notice'>You relieve some stress with \the [src].</span>")
|
||||
playsound(user, 'sound/items/squeaktoy.ogg', 20, 1)
|
||||
cooldown = world.time
|
||||
/obj/item/toy/therapy/activate_self(mob/user)
|
||||
if(..() || !(cooldown < world.time - 8))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You relieve some stress with \the [src].</span>")
|
||||
playsound(user, 'sound/items/squeaktoy.ogg', 20, TRUE)
|
||||
cooldown = world.time
|
||||
|
||||
/obj/random/therapy
|
||||
name = "Random Therapy Doll"
|
||||
@@ -585,20 +595,33 @@
|
||||
var/list/poof_sound = list('sound/weapons/thudswoosh.ogg' = 1)
|
||||
var/has_stuffing = TRUE //If the plushie has stuffing in it
|
||||
var/obj/item/grenade/grenade //You can remove the stuffing from a plushie and add a grenade to it for *nefarious uses*
|
||||
var/sound/rare_hug_sound
|
||||
var/rare_hug_word
|
||||
/// This is a variable that stores a mob that has been cursed into a plushie inside it.
|
||||
var/mob/living/cursed_plushie_victim
|
||||
COOLDOWN_DECLARE(rare_hug_cooldown)
|
||||
|
||||
|
||||
/obj/item/toy/plushie/attack__legacy__attackchain(mob/M as mob, mob/user as mob)
|
||||
/obj/item/toy/plushie/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
if(..())
|
||||
return FINISH_ATTACK
|
||||
playsound(loc, pickweight(poof_sound), 20, 1) // Play the whoosh sound in local area
|
||||
if(iscarbon(M))
|
||||
if(iscarbon(target))
|
||||
if(prob(10))
|
||||
M.reagents.add_reagent("hugs", 10)
|
||||
return ..()
|
||||
target.reagents.add_reagent("hugs", 10)
|
||||
|
||||
/obj/item/toy/plushie/attack_self__legacy__attackchain(mob/user as mob)
|
||||
/obj/item/toy/plushie/activate_self(mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
if(has_stuffing || grenade)
|
||||
var/cuddle_verb = pick("hugs", "cuddles", "snugs")
|
||||
user.visible_message("<span class='notice'>[user] [cuddle_verb] [src].</span>")
|
||||
playsound(get_turf(src), poof_sound, 50, TRUE, -1)
|
||||
if(rare_hug_sound && rare_hug_word && COOLDOWN_FINISHED(src, rare_hug_cooldown))
|
||||
playsound(src, rare_hug_sound , 10, FALSE)
|
||||
visible_message("<span class='danger'>[rare_hug_word]</span>")
|
||||
COOLDOWN_START(src, rare_hug_cooldown, 3 SECONDS)
|
||||
else
|
||||
var/cuddle_verb = pick("hugs", "cuddles", "snugs")
|
||||
user.visible_message("<span class='notice'>[user] [cuddle_verb] [src].</span>")
|
||||
playsound(get_turf(src), pickweight(poof_sound), 50, TRUE, -1)
|
||||
if(grenade && !grenade.active)
|
||||
add_attack_logs(user, user, "activated a hidden grenade in [src].", ATKLOG_MOST)
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 10, TRUE, -3)
|
||||
@@ -606,48 +629,67 @@
|
||||
addtimer(CALLBACK(src, PROC_REF(explosive_betrayal), grenade), rand(1, 3) SECONDS)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You try to pet [src], but it has no stuffing. Aww...</span>")
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/toy/plushie/proc/explosive_betrayal(obj/item/grenade/grenade_callback)
|
||||
var/grenade_inside = FALSE //Any grenade, even non-explosive, will destroy the plushie.
|
||||
if(grenade)
|
||||
grenade_inside = TRUE
|
||||
grenade_callback.prime()
|
||||
if(grenade_inside && !QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/toy/plushie/Destroy()
|
||||
QDEL_NULL(grenade)
|
||||
QDEL_NULL(cursed_plushie_victim)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plushie/attackby__legacy__attackchain(obj/item/I, mob/living/user, params)
|
||||
if(I.sharp)
|
||||
/obj/item/toy/plushie/attack_by(obj/item/attacking, mob/user, params)
|
||||
if(..())
|
||||
return FINISH_ATTACK
|
||||
if(attacking.sharp)
|
||||
if(!grenade)
|
||||
if(!has_stuffing)
|
||||
to_chat(user, "<span class='warning'>You already murdered it!</span>")
|
||||
return
|
||||
return FINISH_ATTACK
|
||||
user.visible_message("<span class='warning'>[user] tears out the stuffing from [src]!</span>", "<span class='notice'>You rip a bunch of the stuffing from [src]. Murderer.</span>")
|
||||
I.play_tool_sound(src)
|
||||
attacking.play_tool_sound(src)
|
||||
has_stuffing = FALSE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You remove the grenade from [src].</span>")
|
||||
grenade.forceMove(get_turf(src))
|
||||
user.put_in_hands(grenade)
|
||||
grenade = null
|
||||
return
|
||||
if(istype(I, /obj/item/grenade))
|
||||
return FINISH_ATTACK
|
||||
if(istype(attacking, /obj/item/grenade))
|
||||
if(has_stuffing)
|
||||
to_chat(user, "<span class='warning'>You need to remove some stuffing first!</span>")
|
||||
return
|
||||
return FINISH_ATTACK
|
||||
if(grenade)
|
||||
to_chat(user, "<span class='warning'>[src] already has a grenade!</span>")
|
||||
return
|
||||
return FINISH_ATTACK
|
||||
if(!user.drop_item())
|
||||
to_chat(user, "<span class='warning'>[I] is stuck to you and cannot be placed into [src].</span>")
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user] slides [I] into [src].</span>", \
|
||||
"<span class='warning'>You slide [I] into [src].</span>")
|
||||
I.forceMove(src)
|
||||
grenade = I
|
||||
to_chat(user, "<span class='warning'>[attacking] is stuck to you and cannot be placed into [src].</span>")
|
||||
return FINISH_ATTACK
|
||||
user.visible_message("<span class='warning'>[user] slides [attacking] into [src].</span>", \
|
||||
"<span class='warning'>You slide [attacking] into [src].</span>")
|
||||
attacking.forceMove(src)
|
||||
grenade = attacking
|
||||
add_attack_logs(user, user, "placed a hidden grenade in [src].", ATKLOG_ALMOSTALL)
|
||||
return FINISH_ATTACK
|
||||
|
||||
/obj/item/toy/plushie/proc/un_plushify()
|
||||
if(!cursed_plushie_victim)
|
||||
return
|
||||
return ..()
|
||||
cursed_plushie_victim.forceMove(get_turf(src))
|
||||
cursed_plushie_victim.status_flags &= ~GODMODE
|
||||
cursed_plushie_victim.notransform = FALSE
|
||||
|
||||
for(var/mob/living/simple_animal/shade/sword/generic_item/B in contents)
|
||||
cursed_plushie_victim.key = B.key
|
||||
break
|
||||
cursed_plushie_victim = null
|
||||
qdel(src)
|
||||
|
||||
/obj/random/plushie
|
||||
name = "Random Plushie"
|
||||
@@ -803,9 +845,8 @@
|
||||
/obj/item/toy/plushie/greyplushie/proc/reset_hugdown()
|
||||
hug_cooldown = FALSE //Resets the hug interaction cooldown.
|
||||
|
||||
/obj/item/toy/plushie/greyplushie/attack_self__legacy__attackchain(mob/user)//code for talking when hugged.
|
||||
. = ..()
|
||||
if(hug_cooldown)
|
||||
/obj/item/toy/plushie/greyplushie/activate_self(mob/user)//code for talking when hugged.
|
||||
if(..() || hug_cooldown)
|
||||
return
|
||||
hug_cooldown = TRUE
|
||||
addtimer(CALLBACK(src, PROC_REF(reset_hugdown)), 5 SECONDS) //Hug interactions only put the plushie on a 5 second cooldown.
|
||||
@@ -819,16 +860,8 @@
|
||||
desc = "A stitched-together vox, fresh from the skipjack. Press its belly to hear it skree!"
|
||||
icon_state = "plushie_vox"
|
||||
item_state = "plushie_vox"
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/plushie/voxplushie/attack_self__legacy__attackchain(mob/user)
|
||||
if(!cooldown)
|
||||
playsound(user, 'sound/voice/shriek1.ogg', 10, 0)
|
||||
visible_message("<span class='danger'>Skreee!</span>")
|
||||
cooldown = 1
|
||||
spawn(30) cooldown = 0
|
||||
return
|
||||
..()
|
||||
rare_hug_sound = 'sound/voice/shriek1.ogg'
|
||||
rare_hug_word = "Skreee!"
|
||||
|
||||
/obj/item/toy/plushie/ipcplushie
|
||||
name = "IPC plushie"
|
||||
@@ -836,14 +869,15 @@
|
||||
icon_state = "plushie_ipc"
|
||||
item_state = "plushie_ipc"
|
||||
|
||||
/obj/item/toy/plushie/ipcplushie/attackby__legacy__attackchain(obj/item/B, mob/user, params)
|
||||
if(istype(B, /obj/item/food/breadslice))
|
||||
/obj/item/toy/plushie/ipcplushie/attack_by(obj/item/attacking, mob/user, params)
|
||||
if(..())
|
||||
return FINISH_ATTACK
|
||||
if(istype(attacking, /obj/item/food/breadslice))
|
||||
new /obj/item/food/toast(get_turf(loc))
|
||||
to_chat(user, "<span class='notice'>You insert bread into the toaster.</span>")
|
||||
playsound(loc, 'sound/machines/ding.ogg', 50, 1)
|
||||
qdel(B)
|
||||
else
|
||||
return ..()
|
||||
qdel(attacking)
|
||||
return FINISH_ATTACK
|
||||
|
||||
//New generation TG plushies
|
||||
|
||||
@@ -876,23 +910,15 @@
|
||||
desc = "A silky nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian"
|
||||
item_state = "plushie_nian"
|
||||
var/cooldown = FALSE
|
||||
rare_hug_sound = 'sound/voice/scream_moth.ogg'
|
||||
rare_hug_word = "Buzzzz!"
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/attack_self__legacy__attackchain(mob/user)
|
||||
if(cooldown)
|
||||
return ..()
|
||||
|
||||
playsound(src, 'sound/voice/scream_moth.ogg', 10, 0)
|
||||
visible_message("<span class='danger'>Buzzzz!</span>")
|
||||
cooldown = TRUE
|
||||
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 3 SECONDS)
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/monarch
|
||||
name = "monarch nian plushie"
|
||||
desc = "A monarch nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_monarch"
|
||||
item_state = "plushie_nian_monarch"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/luna
|
||||
name = "luna nian plushie"
|
||||
desc = "A luna nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
@@ -904,31 +930,31 @@
|
||||
desc = "An atlas nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_atlas"
|
||||
item_state = "plushie_nian_atlas"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/reddish
|
||||
name = "reddish nian plushie"
|
||||
desc = "A reddish nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_reddish"
|
||||
item_state = "plushie_nian_reddish"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/royal
|
||||
name = "royal nian plushie"
|
||||
desc = "A royal nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_royal"
|
||||
item_state = "plushie_nian_royal"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/gothic
|
||||
name = "gothic nian plushie"
|
||||
desc = "A gothic nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_gothic"
|
||||
item_state = "plushie_nian_gothic"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/lovers
|
||||
name = "lovers nian plushie"
|
||||
desc = "A lovers nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_lovers"
|
||||
item_state = "plushie_nian_lovers"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/whitefly
|
||||
name = "whitefly nian plushie"
|
||||
desc = "A whitefly nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
@@ -940,7 +966,7 @@
|
||||
desc = "A punnished nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_punished"
|
||||
item_state = "plushie_nian_punished"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/firewatch
|
||||
name = "firewatch nian plushie"
|
||||
desc = "A firewtach nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
@@ -952,43 +978,43 @@
|
||||
desc = "A deathshead nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_deadhead"
|
||||
item_state = "plushie_nian_deadhead"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/poison
|
||||
name = "poison nian plushie"
|
||||
desc = "A poison nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_poison"
|
||||
item_state = "plushie_nian_poison"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/ragged
|
||||
name = "ragged nian plushie"
|
||||
desc = "A ragged nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_ragged"
|
||||
item_state = "plushie_nian_ragged"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/snow
|
||||
name = "snow nian plushie"
|
||||
desc = "A snow nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_snow"
|
||||
item_state = "plushie_nian_snow"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/clockwork
|
||||
name = "clockwork nian plushie"
|
||||
desc = "A clockwork nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_clockwork"
|
||||
item_state = "plushie_nian_clockwork"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/moonfly
|
||||
name = "moonfly nian plushie"
|
||||
desc = "A moonfly nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_moonfly"
|
||||
item_state = "plushie_nian_moonfly"
|
||||
|
||||
|
||||
/obj/item/toy/plushie/nianplushie/rainbow
|
||||
name = "rainbow nian plushie"
|
||||
desc = "A rainbow nian plushie, straight from the nebula. Pull its antenna to hear it buzz!"
|
||||
icon_state = "plushie_nian_rainbow"
|
||||
item_state = "plushie_nian_rainbow"
|
||||
|
||||
|
||||
/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."
|
||||
@@ -1013,6 +1039,215 @@
|
||||
'sound/weapons/cablecuff.ogg' = 1,
|
||||
)
|
||||
|
||||
/obj/item/toy/plushie/skrellplushie
|
||||
name = "skrell plushie"
|
||||
desc = "The latest from 'SoftSkrells.net', features its very own headpocket! Warble!"
|
||||
icon_state = "plushie_skrell"
|
||||
rare_hug_sound = 'sound/effects/warble.ogg'
|
||||
rare_hug_word = "Warble!"
|
||||
var/obj/item/headpocket_item
|
||||
|
||||
/obj/item/toy/plushie/skrellplushie/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'>Alt-click to put something small inside the headpocket, or take an item out.</span>"
|
||||
|
||||
/obj/item/toy/plushie/skrellplushie/AltClick(mob/user)
|
||||
if(!Adjacent(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
|
||||
return
|
||||
var/obj/item/I = user.get_active_hand()
|
||||
if(I == src)
|
||||
return
|
||||
if(!I)
|
||||
if(!headpocket_item)
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You remove [headpocket_item] from [src].</span>")
|
||||
headpocket_item.forceMove(get_turf(src))
|
||||
user.put_in_hands(headpocket_item)
|
||||
headpocket_item = null
|
||||
return
|
||||
if(I.w_class > WEIGHT_CLASS_SMALL)
|
||||
to_chat(user, "<span class='warning'>You cannot fit [I] in [src]!</span>")
|
||||
return
|
||||
if(!iscarbon(user))
|
||||
return
|
||||
if(headpocket_item)
|
||||
to_chat(user, "<span class='warning'>[src] already has an item in its headpocket!</span>")
|
||||
return
|
||||
if(!user.drop_item())
|
||||
to_chat(user, "<span class='warning'>You cannot slip [I] inside [src]!</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] places [I] into [src].</span>", "<span class='notice'>You place [I] into [src].</span>")
|
||||
add_fingerprint(user)
|
||||
I.forceMove(src)
|
||||
headpocket_item = I
|
||||
|
||||
/obj/item/toy/plushie/skrellplushie/Destroy()
|
||||
headpocket_item.forceMove(get_turf(src))
|
||||
headpocket_item = null
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plushie/humanplushie
|
||||
name = "human plushie"
|
||||
desc = "This plushie is slightly less popular than its counterparts. The designers obviously didn't find humans that endearing..."
|
||||
icon_state = "plushie_human"
|
||||
poof_sound = list('sound/weapons/thudswoosh.ogg' = 30,
|
||||
'sound/goonstation/voice/male_scream.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plushie/borgplushie
|
||||
name = "borg plushie"
|
||||
desc = "The synthetic backbone of the station, rendered in plush form. Inbuilt flashlight included!"
|
||||
icon_state = "plushie_borg"
|
||||
var/borg_plushie_overlay
|
||||
var/on = FALSE
|
||||
|
||||
/obj/item/toy/plushie/borgplushie/Initialize(mapload)
|
||||
. = ..()
|
||||
borg_plushie_overlay = (pick("plushie_borgjan", "plushie_borgsec", "plushie_borgmed", "plushie_borgmine", "plushie_borgserv", "plushie_borgassist", "plushie_borgengi"))
|
||||
update_icon()
|
||||
|
||||
/obj/item/toy/plushie/borgplushie/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
on = !on
|
||||
update_brightness()
|
||||
|
||||
/obj/item/toy/plushie/borgplushie/proc/update_brightness()
|
||||
if(on)
|
||||
set_light(4)
|
||||
else
|
||||
set_light(0)
|
||||
update_icon()
|
||||
|
||||
/obj/item/toy/plushie/borgplushie/update_overlays()
|
||||
. = ..()
|
||||
add_overlay(borg_plushie_overlay)
|
||||
if(on)
|
||||
add_overlay("borglights")
|
||||
else
|
||||
cut_overlay("borglights")
|
||||
|
||||
/obj/item/toy/plushie/borgplushie/extinguish_light(force = FALSE)
|
||||
if(!force)
|
||||
if(on)
|
||||
visible_message("<span class='danger'>[src]'s light grows dim...</span>")
|
||||
on = !on
|
||||
update_brightness()
|
||||
else
|
||||
atom_say("Self-destruct command received!</span>")
|
||||
visible_message("<span class='danger'>[src] explodes!</span>")
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(T, 'sound/goonstation/effects/robogib.ogg', 50, TRUE)
|
||||
robogibs(T)
|
||||
if(grenade)
|
||||
explosive_betrayal(grenade)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/toy/plushie/dionaplushie
|
||||
name = "diona plushie"
|
||||
desc = "This plushy is seemingly comprised of other, smaller, nymph plushies. They really went all out on the realism! Keep away from plantkiller."
|
||||
icon_state = "plushie_diona"
|
||||
rare_hug_sound = 'sound/voice/dionatalk1.ogg'
|
||||
rare_hug_word = "Creak..."
|
||||
|
||||
/obj/item/toy/plushie/nymphplushie
|
||||
name = "nymph plushie"
|
||||
desc = "Life-sized plushie of a diona nymph, perhaps if you find another you could make a diona!"
|
||||
icon_state = "plushie_nymph"
|
||||
rare_hug_sound = 'sound/creatures/nymphchirp.ogg'
|
||||
rare_hug_word = "Chirp!"
|
||||
|
||||
/obj/item/toy/plushie/nymphplushie/attack_by(obj/item/attacking, mob/user, params)
|
||||
if(..())
|
||||
return FINISH_ATTACK
|
||||
if(istype(attacking, /obj/item/toy/plushie/nymphplushie))
|
||||
var/obj/item/toy/plushie/nymphplushie/NP = attacking
|
||||
var/found_grenade = FALSE
|
||||
if(grenade)
|
||||
found_grenade = TRUE
|
||||
explosive_betrayal(grenade)
|
||||
if(NP.grenade)
|
||||
found_grenade = TRUE
|
||||
NP.explosive_betrayal(NP.grenade)
|
||||
if(found_grenade)
|
||||
return FINISH_ATTACK
|
||||
new /obj/item/toy/plushie/dionaplushie(get_turf(loc))
|
||||
to_chat(user, "<span class='notice'>The nymph plushies combine seamlessly into an diona plushie!</span>")
|
||||
playsound(loc, 'sound/voice/dionatalk1.ogg', 50, TRUE)
|
||||
qdel(NP)
|
||||
qdel(src)
|
||||
return FINISH_ATTACK
|
||||
|
||||
/obj/item/toy/plushie/plasmamanplushie
|
||||
name = "plasmaman plushie"
|
||||
desc = "A freindly plasma-being in plush form. WARNING: KEEP AWAY FROM OPEN FLAME!"
|
||||
icon_state = "plushie_plasma"
|
||||
rare_hug_sound = 'sound/voice/plas_rattle.ogg'
|
||||
rare_hug_word = "Rattle!"
|
||||
|
||||
/obj/item/toy/plushie/plasmamanplushie/welder_act(mob/user, obj/item/I)
|
||||
if(I.use_tool(src, user, volume = I.tool_volume))
|
||||
bakoom()
|
||||
return TRUE
|
||||
|
||||
/obj/item/toy/plushie/plasmamanplushie/attack_by(obj/item/attacking, mob/user, params)
|
||||
if(..())
|
||||
return FINISH_ATTACK
|
||||
if(attacking.get_heat())
|
||||
bakoom()
|
||||
return FINISH_ATTACK
|
||||
|
||||
/obj/item/toy/plushie/plasmamanplushie/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE)
|
||||
..()
|
||||
bakoom()
|
||||
|
||||
/obj/item/toy/plushie/plasmamanplushie/proc/bakoom()
|
||||
visible_message("<span class='danger'>[src] explodes!</span>")
|
||||
if(grenade)
|
||||
explosive_betrayal(grenade)
|
||||
explosion(get_turf(src), -1, 0, 1, 1, flame_range = 1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/toy/plushie/draskplushie
|
||||
name = "drask plushie"
|
||||
desc = "This plushie is cool as a cucumber, featuring realistic soap-munching action."
|
||||
icon_state = "plushie_drask"
|
||||
rare_hug_sound = 'sound/voice/drasktalk.ogg'
|
||||
rare_hug_word = "Ruuuumble..."
|
||||
|
||||
/obj/item/toy/plushie/draskplushie/attack_by(obj/item/attacking, mob/user, params)
|
||||
if(..())
|
||||
return FINISH_ATTACK
|
||||
if(istype(attacking, /obj/item/soap))
|
||||
if(prob(20))
|
||||
visible_message("<span class='danger'>[src] consumes the soap...</span>")
|
||||
qdel(attacking)
|
||||
return FINISH_ATTACK
|
||||
visible_message("<span class='danger'>[src] munches the soap...</span>")
|
||||
playsound(loc, 'sound/items/eatfood.ogg', 50, TRUE)
|
||||
|
||||
/obj/item/toy/plushie/kidanplushie
|
||||
name = "kidan plushie"
|
||||
desc = "F-ANT-asticly fun kidan plushie! Exoskeleton has never been so soft. The label says to keep it away from insecticides"
|
||||
icon_state = "plushie_kidan"
|
||||
var/sadbug = FALSE
|
||||
rare_hug_sound = 'sound/effects/Kidanclack.ogg'
|
||||
rare_hug_word = "Click clack!"
|
||||
|
||||
/obj/item/toy/plushie/kidanplushie/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(prob(10) && sadbug)
|
||||
visible_message("<span class='notice'>[src] begins to cheer up!</span>")
|
||||
icon_state = "plushie_kidan"
|
||||
sadbug = FALSE
|
||||
|
||||
/obj/item/toy/plushie/kidanplushie/proc/make_cry()
|
||||
visible_message("<span class='danger'>[src] starts to cry...</span>")
|
||||
icon_state = "plushie_kidansad"
|
||||
sadbug = TRUE
|
||||
|
||||
/*
|
||||
* Foam Armblade
|
||||
*/
|
||||
@@ -1054,7 +1289,9 @@
|
||||
else
|
||||
. += "single_latch"
|
||||
|
||||
/obj/item/toy/windup_toolbox/attack_self__legacy__attackchain(mob/user)
|
||||
/obj/item/toy/windup_toolbox/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(!active)
|
||||
to_chat(user, "<span class='notice'>You wind up [src], it begins to rumble.</span>")
|
||||
active = TRUE
|
||||
@@ -1083,10 +1320,12 @@
|
||||
item_state = "flashtool"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
/obj/item/toy/flash/attack__legacy__attackchain(mob/living/M, mob/user)
|
||||
/obj/item/toy/flash/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
if(..())
|
||||
return FINISH_ATTACK
|
||||
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>")
|
||||
user.visible_message("<span class='disarm'>[user] blinds [target] with the flash!</span>")
|
||||
|
||||
|
||||
/*
|
||||
@@ -1100,7 +1339,9 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/redbutton/attack_self__legacy__attackchain(mob/user)
|
||||
/obj/item/toy/redbutton/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(cooldown >= world.time)
|
||||
to_chat(user, "<span class='alert'>Nothing happens.</span>")
|
||||
return
|
||||
@@ -1125,16 +1366,15 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/ai/attack_self__legacy__attackchain(mob/user)
|
||||
if(!cooldown) //for the sanity of everyone
|
||||
var/message = generate_ion_law()
|
||||
to_chat(user, "<span class='notice'>You press the button on [src].</span>")
|
||||
playsound(user, 'sound/machines/click.ogg', 20, 1)
|
||||
visible_message("<span class='danger'>[bicon(src)] [message]</span>")
|
||||
cooldown = 1
|
||||
spawn(30) cooldown = 0
|
||||
/obj/item/toy/ai/activate_self(mob/user)
|
||||
if(..() || cooldown) //for the sanity of everyone
|
||||
return
|
||||
..()
|
||||
var/message = generate_ion_law()
|
||||
to_chat(user, "<span class='notice'>You press the button on [src].</span>")
|
||||
playsound(user, 'sound/machines/click.ogg', 20, TRUE)
|
||||
visible_message("<span class='danger'>[bicon(src)] [message]</span>")
|
||||
cooldown = 1
|
||||
spawn(30) cooldown = 0
|
||||
|
||||
/obj/item/toy/codex_gigas
|
||||
name = "Toy Codex Gigas"
|
||||
@@ -1145,18 +1385,19 @@
|
||||
var/list/messages = list("You must challenge the devil to a dance-off!", "The devils true name is Ian", "The devil hates salt!", "Would you like infinite power?", "Would you like infinite wisdom?", " Would you like infinite healing?")
|
||||
var/cooldown = FALSE
|
||||
|
||||
/obj/item/toy/codex_gigas/attack_self__legacy__attackchain(mob/user)
|
||||
if(!cooldown)
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] presses the button on \the [src].</span>",
|
||||
"<span class='notice'>You press the button on \the [src].</span>",
|
||||
"<span class='notice'>You hear a soft click.</span>")
|
||||
playsound(loc, 'sound/machines/click.ogg', 20, TRUE)
|
||||
cooldown = TRUE
|
||||
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 60)
|
||||
for(var/message in pick(messages))
|
||||
user.loc.visible_message("<span class='danger'>[bicon(src)] [message]</span>")
|
||||
sleep(10)
|
||||
/obj/item/toy/codex_gigas/activate_self(mob/user)
|
||||
if(..() || cooldown)
|
||||
return
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] presses the button on \the [src].</span>",
|
||||
"<span class='notice'>You press the button on \the [src].</span>",
|
||||
"<span class='notice'>You hear a soft click.</span>")
|
||||
playsound(loc, 'sound/machines/click.ogg', 20, TRUE)
|
||||
cooldown = TRUE
|
||||
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 60)
|
||||
for(var/message in pick(messages))
|
||||
user.loc.visible_message("<span class='danger'>[bicon(src)] [message]</span>")
|
||||
sleep(10)
|
||||
|
||||
// DND Character minis. Use the naming convention (type)character for the icon states.
|
||||
/obj/item/toy/character
|
||||
@@ -1205,7 +1446,8 @@
|
||||
attack_verb = list("attacked", "bashed", "smashed", "stoned")
|
||||
hitsound = "swing_hit"
|
||||
|
||||
/obj/item/toy/pet_rock/attack_self__legacy__attackchain(mob/user)
|
||||
/obj/item/toy/pet_rock/activate_self(mob/user)
|
||||
. = ..()
|
||||
var/cuddle_verb = pick("admires", "respects", "cherises", "appreciates")
|
||||
user.visible_message("<span class='notice'>[user] [cuddle_verb] [src].</span>")
|
||||
|
||||
@@ -1230,8 +1472,9 @@
|
||||
var/cooldown = 0
|
||||
var/obj/stored_minature = null
|
||||
|
||||
/obj/item/toy/minigibber/attack_self__legacy__attackchain(mob/user)
|
||||
|
||||
/obj/item/toy/minigibber/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(stored_minature)
|
||||
to_chat(user, "<span class='danger'>\The [src] makes a violent grinding noise as it tears apart the miniature figure inside!</span>")
|
||||
QDEL_NULL(stored_minature)
|
||||
@@ -1243,20 +1486,22 @@
|
||||
playsound(user, 'sound/goonstation/effects/gib.ogg', 20, 1)
|
||||
cooldown = world.time
|
||||
|
||||
/obj/item/toy/minigibber/attackby__legacy__attackchain(obj/O, mob/user, params)
|
||||
if(istype(O,/obj/item/toy/character) && O.loc == user)
|
||||
to_chat(user, "<span class='notice'>You start feeding \the [O] [bicon(O)] into \the [src]'s mini-input.</span>")
|
||||
/obj/item/toy/minigibber/attack_by(obj/item/attacking, mob/user, params)
|
||||
if(..())
|
||||
return FINISH_ATTACK
|
||||
if(istype(attacking,/obj/item/toy/character) && attacking.loc == user)
|
||||
to_chat(user, "<span class='notice'>You start feeding \the [attacking] [bicon(attacking)] into \the [src]'s mini-input.</span>")
|
||||
if(do_after(user, 10, target = src))
|
||||
if(O.loc != user)
|
||||
to_chat(user, "<span class='alert'>\The [O] is too far away to feed into \the [src]!</span>")
|
||||
if(attacking.loc != user)
|
||||
to_chat(user, "<span class='alert'>\The [attacking] is too far away to feed into \the [src]!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You feed \the [O] [bicon(O)] into \the [src]!</span>")
|
||||
user.unEquip(O)
|
||||
O.forceMove(src)
|
||||
stored_minature = O
|
||||
to_chat(user, "<span class='notice'>You feed \the [attacking] [bicon(attacking)] into \the [src]!</span>")
|
||||
user.unEquip(attacking)
|
||||
attacking.forceMove(src)
|
||||
stored_minature = attacking
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You stop feeding \the [O] into \the [src]'s mini-input.</span>")
|
||||
else ..()
|
||||
to_chat(user, "<span class='warning'>You stop feeding \the [attacking] into \the [src]'s mini-input.</span>")
|
||||
return FINISH_ATTACK
|
||||
|
||||
/obj/item/toy/russian_revolver
|
||||
name = "russian revolver"
|
||||
@@ -1289,7 +1534,9 @@
|
||||
..()
|
||||
spin_cylinder()
|
||||
|
||||
/obj/item/toy/russian_revolver/attack_self__legacy__attackchain(mob/user)
|
||||
/obj/item/toy/russian_revolver/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(!bullets_left)
|
||||
user.visible_message("<span class='warning'>[user] loads a bullet into [src]'s cylinder before spinning it.</span>")
|
||||
spin_cylinder()
|
||||
@@ -1297,11 +1544,12 @@
|
||||
user.visible_message("<span class='warning'>[user] spins the cylinder on [src]!</span>")
|
||||
spin_cylinder()
|
||||
|
||||
/obj/item/toy/russian_revolver/attack__legacy__attackchain(mob/M, mob/living/user)
|
||||
return
|
||||
/obj/item/toy/russian_revolver/interact_with_atom(atom/target, mob/living/user, list/modifiers)
|
||||
return ITEM_INTERACT_SKIP_TO_AFTER_ATTACK
|
||||
|
||||
/obj/item/toy/russian_revolver/afterattack__legacy__attackchain(atom/target, mob/user, flag, params)
|
||||
if(flag)
|
||||
/obj/item/toy/russian_revolver/after_attack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(proximity_flag)
|
||||
if(target in user.contents)
|
||||
return
|
||||
if(!ismob(target))
|
||||
@@ -1368,7 +1616,9 @@
|
||||
to_chat(user, "<span class='warning'>You go to spin the chamber... and it goes off in your face!</span>")
|
||||
shoot_gun(user)
|
||||
|
||||
/obj/item/toy/russian_revolver/trick_revolver/attack_self__legacy__attackchain(mob/user)
|
||||
/obj/item/toy/russian_revolver/trick_revolver/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(!bullets_left) //You can re-arm the trap...
|
||||
user.visible_message("<span class='warning'>[user] loads a bullet into [src]'s cylinder before spinning it.</span>")
|
||||
spin_cylinder()
|
||||
@@ -1376,17 +1626,18 @@
|
||||
user.visible_message("<span class='warning'>[user] tries to empty [src], but it goes off in their face!</span>")
|
||||
shoot_gun(user)
|
||||
|
||||
/obj/item/toy/russian_revolver/trick_revolver/attackby__legacy__attackchain(obj/item/I, mob/user, params)
|
||||
if(is_pen(I))
|
||||
/obj/item/toy/russian_revolver/trick_revolver/attack_by(obj/item/attacking, mob/user, params)
|
||||
if(..())
|
||||
return FINISH_ATTACK
|
||||
if(is_pen(attacking))
|
||||
to_chat(user, "<span class='warning'>You go to write on [src].. and it goes off in your face!</span>")
|
||||
shoot_gun(user)
|
||||
if(istype(I, /obj/item/ammo_casing/a357))
|
||||
if(istype(attacking, /obj/item/ammo_casing/a357))
|
||||
to_chat(user, "<span class='warning'>You go to load a bullet into [src].. and it goes off in your face!</span>")
|
||||
shoot_gun(user)
|
||||
if(istype(I, /obj/item/ammo_box/a357))
|
||||
if(istype(attacking, /obj/item/ammo_box/a357))
|
||||
to_chat(user, "<span class='warning'>You go to speedload [src].. and it goes off in your face!</span>")
|
||||
shoot_gun(user)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/russian_revolver/trick_revolver/run_pointed_on_item(mob/pointer_mob, atom/target_atom)
|
||||
if(target_atom != src)
|
||||
@@ -1456,8 +1707,9 @@
|
||||
var/cooldown = 0
|
||||
var/cooldown_time = 3 SECONDS
|
||||
|
||||
/obj/item/toy/figure/attack_self__legacy__attackchain(mob/user)
|
||||
..()
|
||||
/obj/item/toy/figure/activate_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(cooldown < world.time)
|
||||
cooldown = world.time + cooldown_time
|
||||
activate(user)
|
||||
@@ -1839,14 +2091,14 @@
|
||||
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__legacy__attackchain(mob/user as mob)
|
||||
if(!cooldown)
|
||||
var/answer = pick(possible_answers)
|
||||
user.visible_message("<span class='notice'>[user] focuses on [user.p_their()] question and [use_action]...</span>")
|
||||
user.visible_message("<span class='notice'>[bicon(src)] [src] says \"[answer]\"</span>")
|
||||
spawn(30)
|
||||
cooldown = 0
|
||||
/obj/item/toy/eight_ball/activate_self(mob/user as mob)
|
||||
if(..() || cooldown)
|
||||
return
|
||||
var/answer = pick(possible_answers)
|
||||
user.visible_message("<span class='notice'>[user] focuses on [user.p_their()] question and [use_action]...</span>")
|
||||
user.visible_message("<span class='notice'>[bicon(src)] [src] says \"[answer]\"</span>")
|
||||
spawn(30)
|
||||
cooldown = 0
|
||||
|
||||
/obj/item/toy/eight_ball/conch
|
||||
name = "\improper Magic Conch Shell"
|
||||
|
||||
Reference in New Issue
Block a user