From 7291d4d721fc5ffc4b43ab40f1c4cd45ddcfd8b1 Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Wed, 30 Mar 2022 12:34:57 -0400 Subject: [PATCH] Update weapons_vr.dm --- code/modules/xenobio/items/weapons_vr.dm | 167 ++++++++++++++++++++++- 1 file changed, 160 insertions(+), 7 deletions(-) diff --git a/code/modules/xenobio/items/weapons_vr.dm b/code/modules/xenobio/items/weapons_vr.dm index 1271d641c88..e9125ec8447 100644 --- a/code/modules/xenobio/items/weapons_vr.dm +++ b/code/modules/xenobio/items/weapons_vr.dm @@ -1,20 +1,21 @@ /obj/item/weapon/gun/energy/xenobio name = "xenobio gun" desc = "You shouldn't see this!" - icon_state = "taserblue" + icon = 'icons/obj/gun_vr.dmi' + icon_state = "harpoon-2" fire_sound = 'sound/weapons/taser2.ogg' charge_cost = 120 // Twice as many shots. projectile_type = /obj/item/projectile/beam/stun/xeno // Place holder for now accuracy = 30 // Just use the same hit rate as xenotasers var/loadable_item = null var/loaded_item = null - + var/loadable_name = null /obj/item/weapon/gun/energy/xenobio/examine(var/mob/user) . = ..() if(loaded_item) .+= "A [loaded_item] is slotted into the side." else - .+= "There appears to be an empty slot for attaching a [loadable_item]." + .+= "There appears to be an empty slot for attaching a [loadable_name]." /obj/item/weapon/gun/energy/xenobio/attackby(obj/item/I as obj, mob/user as mob) if(istype(I, loadable_item)) @@ -25,20 +26,172 @@ user.drop_item() I.loc = src loaded_item = I - to_chat(user, "You slot [B] into [src].") + to_chat(user, "You slot [I] into [src].") return 1 ..() + +/obj/item/weapon/gun/energy/xenobio/attack_self(mob/living/user as mob) + if(loaded_item) + user.put_in_hands(loaded_item) + user.visible_message("[user] removes [loaded_item] from [src].", "You remove [loaded_item] from [src].") + loaded_item = null + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + +/obj/item/weapon/gun/energy/xenobio/afterattack(atom/A, mob/user as mob) + if(!loaded_item) + to_chat(user,"\The [src] shot fizzles, it appears you need to load something!") + playsound(src, 'sound/weapons/wave.ogg', 60, 1) + return + + playsound(src, 'sound/weapons/wave.ogg', 60, 1) + + user.visible_message("[user] fires \the [src]!","You fire \the [src]!") + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(4, 1, A) + s.start() + s = new /datum/effect/effect/system/spark_spread + s.set_up(4, 1, user) + s.start() + /obj/item/weapon/gun/energy/xenobio/monkey_gun name = "Bluespace Cube Rehydrater" desc = "This advanced weapon will rehydrate and deploy a loaded cube at your target position." loadable_item = /obj/item/weapon/reagent_containers/food/snacks/monkeycube - + loadable_name = "Monkey Cube" /obj/item/weapon/gun/energy/xenobio/potion_gun name = "Ranged Potion Delivery Device" - desc = "This device is designed to deliver a potion to your target at range, it has a slot to attach a xenobio potion. + desc = "This device is designed to deliver a potion to your target at range, it has a slot to attach a xenobio potion." loadable_item = /obj/item/slimepotion + loadable_name = "Slime Potion" +///obj/item/weapon/gun/energy/xenobio/potion_gun/afterattack(atom/A, mob/user as mob) +// if(isslime(A)) + //loaded_item.attack(A, user) + + +/*/obj/item/weapon/xenobio + name = "bluespace harpoon" + desc = "For climbing on bluespace mountains!" + + icon = 'icons/obj/gun_vr.dmi' + icon_state = "harpoon-2" + + w_class = ITEMSIZE_NORMAL +*/ +/obj/item/weapon/xenobio/slime_grinder + name = "portable slime processor" + desc = "An industrial grinder used to automate the process of slime core extraction. It can also recycle biomatter. This one appears miniturized" + icon = 'icons/obj/kitchen.dmi' + icon_state = "processor1" + var/processing = FALSE // So I heard you like processing. + var/list/to_be_processed = list() + var/monkeys_recycled = 0 + description_info = "Clickdrag dead slimes or monkeys to it to insert them. It will make a new monkey cube for every four monkeys it processes." + +/obj/machinery/processor/attack_hand(mob/living/user) + if(processing) + to_chat(user, "The processor is in the process of processing!") + return + if(to_be_processed.len) + spawn(1) + begin_processing() + else + to_chat(user, "The processor is empty.") + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1) + return + +// Verb to remove everything. +/obj/item/weapon/xenobio/slime_grinder/verb/eject() + set category = "Object" + set name = "Eject Processor" + set src in oview(1) + + if(usr.stat || !usr.canmove || usr.restrained()) + return + empty() + add_fingerprint(usr) + return + +// Ejects all the things out of the machine. +/obj/item/weapon/xenobio/slime_grinder/proc/empty() + for(var/atom/movable/AM in to_be_processed) + to_be_processed.Remove(AM) + AM.forceMove(get_turf(src)) + +// Ejects all the things out of the machine. +/obj/item/weapon/xenobio/slime_grinder/proc/insert(var/atom/movable/AM, var/mob/living/user) + if(!Adjacent(AM)) + return + if(!can_insert(AM)) + to_chat(user, "\The [src] cannot process \the [AM] at this time.") + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1) + return + to_be_processed.Add(AM) + AM.forceMove(src) + visible_message("\The [user] places [AM] inside \the [src].") + +/obj/item/weapon/xenobio/slime_grinder/proc/begin_processing() + if(processing) + return // Already doing it. + processing = TRUE + playsound(src, 'sound/machines/juicer.ogg', 50, 1) + for(var/atom/movable/AM in to_be_processed) + extract(AM) + sleep(1 SECONDS) + + while(monkeys_recycled >= 4) + new /obj/item/weapon/reagent_containers/food/snacks/monkeycube(get_turf(src)) + playsound(src, 'sound/effects/splat.ogg', 50, 1) + monkeys_recycled -= 4 + sleep(1 SECOND) + + processing = FALSE + playsound(src, 'sound/machines/ding.ogg', 50, 1) + +/obj/item/weapon/xenobio/slime_grinder/proc/extract(var/atom/movable/AM) + if(istype(AM, /mob/living/simple_mob/slime)) + var/mob/living/simple_mob/slime/S = AM + while(S.cores) + new S.coretype(get_turf(src)) + playsound(src, 'sound/effects/splat.ogg', 50, 1) + S.cores-- + sleep(1 SECOND) + to_be_processed.Remove(S) + qdel(S) + + if(istype(AM, /mob/living/carbon/human)) + var/mob/living/carbon/human/M = AM + playsound(src, 'sound/effects/splat.ogg', 50, 1) + to_be_processed.Remove(M) + qdel(M) + monkeys_recycled++ + sleep(1 SECOND) + +/obj/item/weapon/xenobio/slime_grinder/proc/can_insert(var/atom/movable/AM) + if(istype(AM, /mob/living/simple_mob/slime)) + var/mob/living/simple_mob/slime/S = AM + if(S.stat != DEAD) + return FALSE + return TRUE + if(istype(AM, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = AM + if(!istype(H.species, /datum/species/monkey)) + return FALSE + if(H.stat != DEAD) + return FALSE + return TRUE + return FALSE + +/obj/item/weapon/xenobio/slime_grinder/attack(mob/M as mob, mob/living/user as mob) + if(user.stat || user.incapacitated(INCAPACITATION_DISABLED) || !istype(user)) + return + insert(M, user) + return ..() + +/* Cut for balance :) /obj/item/weapon/gun/energy/xenobio/extract_gun name = "Ranged Extract Interaction Device" desc = "This is the latest in extract interaction technology! No longer shall you stand in harms way when activating a gold slime." - loadable_item = /obj/item/slime_extract \ No newline at end of file + loadable_item = /obj/item/slime_extract +*/ \ No newline at end of file