diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm index bf2f6dd4bb..8c47c92e90 100644 --- a/code/game/objects/items/grenades/grenade.dm +++ b/code/game/objects/items/grenades/grenade.dm @@ -52,8 +52,9 @@ message_admins(message) log_game("[key_name(user)] has primed \a [src] for detonation at [A.name] [COORD(T)].") -/obj/item/grenade/proc/preprime(mob/user, delayoverride, msg = TRUE) +/obj/item/grenade/proc/preprime(mob/user, delayoverride, msg = TRUE, volume = 60) var/turf/T = get_turf(src) +<<<<<<< HEAD log_grenade(user, T) if(iscarbon(user)) var/mob/living/carbon/C = user @@ -64,6 +65,19 @@ active = TRUE icon_state = initial(icon_state) + "_active" add_fingerprint(user) +======= + log_grenade(user, T) //Inbuilt admin procs already handle null users + if(user) + add_fingerprint(user) + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.throw_mode_on() + if(msg) + to_chat(user, "You prime \the [src]! [det_time/10] seconds!") + playsound(src, 'sound/weapons/armbomb.ogg', volume, 1) + active = TRUE + icon_state = initial(icon_state) + "_active" +>>>>>>> 695fa5f... You can now hide grenades in plushies (#31986) addtimer(CALLBACK(src, .proc/prime), isnull(delayoverride)? det_time : delayoverride) /obj/item/grenade/proc/prime() diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index ec5f349ca9..d1d7f4d289 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -7,14 +7,66 @@ w_class = WEIGHT_CLASS_SMALL resistance_flags = FLAMMABLE var/list/squeak_override //Weighted list; If you want your plush to have different squeak sounds use this + var/stuffed = 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* /obj/item/toy/plush/Initialize() . = ..() AddComponent(/datum/component/squeak, squeak_override) +/obj/item/toy/plush/Destroy() + QDEL_NULL(grenade) + return ..() + +/obj/item/toy/plush/handle_atom_del(atom/A) + if(A == grenade) + grenade = null + ..() + /obj/item/toy/plush/attack_self(mob/user) . = ..() - to_chat(user, "You pet [src]. D'awww.") + if(stuffed || grenade) + to_chat(user, "You pet [src]. D'awww.") + if(grenade && !grenade.active) + if(istype(grenade, /obj/item/grenade/chem_grenade)) + var/obj/item/grenade/chem_grenade/G = grenade + if(G.nadeassembly) //We're activated through different methods + return + log_game("[key_name(user)] activated a hidden grenade in [src].") + grenade.preprime(user, msg = FALSE, volume = 10) + else + to_chat(user, "You try to pet [src], but it has no stuffing. Aww...") + +/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, params) + if(I.is_sharp()) + if(!grenade) + if(!stuffed) + to_chat(user, "You already murdered it!") + return + user.visible_message("[user] tears out the stuffing from [src]!", "You rip a bunch of the stuffing from [src]. Murderer.") + playsound(I, I.usesound, 50, TRUE) + stuffed = FALSE + else + to_chat(user, "You remove the grenade from [src].") + user.put_in_hands(grenade) + grenade = null + return + if(istype(I, /obj/item/grenade)) + if(stuffed) + to_chat(user, "You need to remove some stuffing first!") + return + if(grenade) + to_chat(user, "[src] already has a grenade!") + return + if(!user.transferItemToLoc(I, src)) + return + user.visible_message("[user] slides [grenade] into [src].", \ + "You slide [I] into [src].") + grenade = I + var/turf/T = get_turf(user) + log_game("[key_name(user)] added a grenade ([I.name]) to [src] at [COORD(T)].") + return + return ..() /obj/item/toy/plush/carpplushie name = "space carp plushie"