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