mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-01-28 09:52:38 +00:00
Merge pull request #12698 from FartMaster69420/xenobio-upgrades-clean
Xenobio Upgrades
This commit is contained in:
@@ -1,2 +1,15 @@
|
||||
/obj/item/weapon/storage/bag/chemistry
|
||||
slot_flags = null
|
||||
|
||||
/obj/item/weapon/storage/bag/xeno
|
||||
name = "xenobiology bag"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "chembag"
|
||||
max_storage_space = ITEMSIZE_COST_SMALL * 12
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(
|
||||
/obj/item/slime_extract,
|
||||
/obj/item/slimepotion,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube
|
||||
)
|
||||
@@ -49,7 +49,8 @@
|
||||
/obj/structure/closet/l3closet/scientist/double
|
||||
starts_with = list(
|
||||
/obj/item/clothing/suit/bio_suit/scientist = 2,
|
||||
/obj/item/clothing/head/bio_hood/scientist = 2)
|
||||
/obj/item/clothing/head/bio_hood/scientist = 2,
|
||||
/obj/item/weapon/storage/bag/xeno = 2) // VOREEdit, adding the xenobag to xenobio.
|
||||
|
||||
|
||||
/obj/structure/closet/l3closet/medical
|
||||
|
||||
@@ -27,3 +27,10 @@
|
||||
else
|
||||
icon_state = "tranqgun"
|
||||
return 1
|
||||
|
||||
// This is to allow xenobio to activate slime cores via remote.
|
||||
/obj/item/projectile/bullet/chemdart/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null)
|
||||
..()
|
||||
if(blocked < 2)
|
||||
if(istype(target, /obj/item/weapon/reagent_containers/food) || istype(target, /obj/item/slime_extract))
|
||||
reagents.trans_to_obj(target, reagent_amount)
|
||||
17
code/modules/research/designs/xenobio_toys_vr.dm
Normal file
17
code/modules/research/designs/xenobio_toys_vr.dm
Normal file
@@ -0,0 +1,17 @@
|
||||
/datum/design/item/weapon/xenobio/monkey_gun
|
||||
name = "bluespace monkey deployment system"
|
||||
desc = "An Advanced monkey teleportation and rehydration system. For serious monkey business."
|
||||
id = "monkey_gun"
|
||||
req_tech = list(TECH_MATERIAL = 3, TECH_BIO = 3, TECH_POWER = 4, TECH_COMBAT = 4, TECH_BLUESPACE = 6)
|
||||
materials = list(MAT_PLASTEEL = 5000, MAT_GLASS = 5000, MAT_DIAMOND = 500, MAT_MORPHIUM = 350)
|
||||
build_path = /obj/item/weapon/xenobio/monkey_gun
|
||||
sort_string = "HBBA"
|
||||
|
||||
/datum/design/item/weapon/xenobio/grinder
|
||||
name = "portable slime processor"
|
||||
desc = "This high tech device combines the slime processor with the latest in woodcutting technology."
|
||||
id = "slime_grinder"
|
||||
req_tech = list(TECH_MAGNET = 4, TECH_BIO = 7)
|
||||
materials = list(MAT_STEEL = 500, MAT_GLASS = 500, MAT_DIAMOND = 500, MAT_MORPHIUM = 100)
|
||||
build_path = /obj/item/weapon/slime_grinder
|
||||
sort_string = "HBBB"
|
||||
159
code/modules/xenobio/items/weapons_vr.dm
Normal file
159
code/modules/xenobio/items/weapons_vr.dm
Normal file
@@ -0,0 +1,159 @@
|
||||
/obj/item/weapon/xenobio
|
||||
name = "xenobio gun"
|
||||
desc = "You shouldn't see this!"
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "harpoon-2"
|
||||
var/loadable_item = null
|
||||
var/loaded_item = null
|
||||
var/loadable_name = null
|
||||
var/firable = TRUE
|
||||
/obj/item/weapon/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_name]."
|
||||
|
||||
/obj/item/weapon/xenobio/attack_hand(mob/user as mob)
|
||||
if(user.get_inactive_hand() == src && loaded_item)
|
||||
user.put_in_hands(loaded_item)
|
||||
user.visible_message("<span class='notice'>[user] removes [loaded_item] from [src].</span>", "<span class='notice'>You remove [loaded_item] from [src].</span>")
|
||||
loaded_item = null
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/xenobio/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, loadable_item))
|
||||
if(loaded_item)
|
||||
to_chat(user, "<span class = 'warning'>[I] doesn't seem to fit into [src].</span>")
|
||||
return
|
||||
//var/obj/item/weapon/reagent_containers/glass/beaker/B = I
|
||||
user.drop_item()
|
||||
I.loc = src
|
||||
loaded_item = I
|
||||
user.visible_message("<span class='notice'>[user] inserts [I] into [src].</span>", "<span class='notice'>You slot [I] into [src].</span>")
|
||||
return 1
|
||||
..()
|
||||
|
||||
/obj/item/weapon/xenobio/attack_self(mob/living/user as mob)
|
||||
if(loaded_item)
|
||||
user.put_in_hands(loaded_item)
|
||||
user.visible_message("<span class='notice'>[user] removes [loaded_item] from [src].</span>", "<span class='notice'>You remove [loaded_item] from [src].</span>")
|
||||
loaded_item = null
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
|
||||
/obj/item/weapon/xenobio/afterattack(atom/A, mob/user as mob)
|
||||
if(!loaded_item)
|
||||
to_chat(user,"<span class = 'warning'>\The [src] shot fizzles, it appears you need to load something!</span>")
|
||||
//playsound(src, 'sound/weapons/wave.ogg', 60, 1)
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
return
|
||||
if(!firable)
|
||||
return
|
||||
|
||||
playsound(src, 'sound/weapons/wave.ogg', 60, 1)
|
||||
|
||||
user.visible_message("<span class='warning'>[user] fires \the [src]!</span>","<span class='warning'>You fire \the [src]!</span>")
|
||||
|
||||
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/xenobio/monkey_gun
|
||||
name = "Bluespace Cube Rehydrator"
|
||||
desc = "Based on the technology of the 'Bluespace Harpoon' this device can teleport a loaded cube to a given target and rehydrate it."
|
||||
loadable_item = /obj/item/weapon/reagent_containers/food/snacks/monkeycube
|
||||
loadable_name = "Monkey Cube"
|
||||
origin_tech = list(TECH_BLUESPACE = 5, TECH_BIO = 6)
|
||||
//projectile_type = /obj/item/projectile/beam/xenobio/monkey
|
||||
|
||||
/obj/item/weapon/xenobio/monkey_gun/afterattack(atom/A, mob/user as mob)
|
||||
..()
|
||||
|
||||
if(!firable)
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(A)
|
||||
if(!T || (T.check_density(ignore_mobs = TRUE)))
|
||||
to_chat(user,"<span class = 'warning'>Your rehydrator flashes an error as it attempts to process your target.</span>")
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
return
|
||||
if(istype(A, /mob/living))
|
||||
to_chat(user,"<span class = 'warning'>The rehydrator's saftey systems prevent firing into living creatures!</span>")
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
return
|
||||
if(loaded_item)
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = loaded_item
|
||||
cube.loc = A
|
||||
cube.Expand()
|
||||
loaded_item = null
|
||||
firable = FALSE
|
||||
VARSET_IN(src, firable, TRUE, 2 SECONDS)
|
||||
|
||||
// Instead of bringing the slime to the grinder, lets bring the grinder to the slime! This will process slimes and monkies one at a time.
|
||||
/obj/item/weapon/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/weapons_vr.dmi'
|
||||
icon_state = "chainsaw0"
|
||||
var/processing = FALSE // So I heard you like processing.
|
||||
var/list/to_be_processed = list()
|
||||
var/monkeys_recycled = 0
|
||||
description_info = "Click a monkey or slime to begin processing."
|
||||
|
||||
/obj/item/weapon/slime_grinder/proc/extract(var/atom/movable/AM, var/mob/living/user)
|
||||
processing = TRUE
|
||||
if(istype(AM, /mob/living/simple_mob/slime))
|
||||
var/mob/living/simple_mob/slime/S = AM
|
||||
while(S.cores)
|
||||
playsound(src, 'sound/machines/juicer.ogg', 25, 1)
|
||||
if(do_after(user, 15))
|
||||
new S.coretype(get_turf(AM))
|
||||
playsound(src, 'sound/effects/splat.ogg', 50, 1)
|
||||
S.cores--
|
||||
qdel(S)
|
||||
|
||||
if(istype(AM, /mob/living/carbon/human/monkey))
|
||||
playsound(src, 'sound/machines/juicer.ogg', 25, 1)
|
||||
if(do_after(user, 15))
|
||||
var/mob/living/carbon/human/M = AM
|
||||
playsound(src, 'sound/effects/splat.ogg', 50, 1)
|
||||
qdel(M)
|
||||
monkeys_recycled++
|
||||
sleep(1 SECOND)
|
||||
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
|
||||
|
||||
/obj/item/weapon/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/slime_grinder/attack(mob/M as mob, mob/living/user as mob)
|
||||
if(processing)
|
||||
return
|
||||
if(!can_insert(M))
|
||||
to_chat(user, "<span class='warning'>\The [src] cannot process \the [M] at this time.</span>")
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1)
|
||||
return
|
||||
|
||||
extract(M, user)
|
||||
return ..()
|
||||
@@ -3723,6 +3723,7 @@
|
||||
#include "code\modules\research\designs\weapons_vr.dm"
|
||||
#include "code\modules\research\designs\xenoarch_toys.dm"
|
||||
#include "code\modules\research\designs\xenobio_toys.dm"
|
||||
#include "code\modules\research\designs\xenobio_toys_vr.dm"
|
||||
#include "code\modules\research\designs\circuits\ai_modules.dm"
|
||||
#include "code\modules\research\designs\circuits\ai_modules_vr.dm"
|
||||
#include "code\modules\research\designs\circuits\circuits.dm"
|
||||
@@ -4063,6 +4064,7 @@
|
||||
#include "code\modules\xenobio\items\slimepotions.dm"
|
||||
#include "code\modules\xenobio\items\slimepotions_vr.dm"
|
||||
#include "code\modules\xenobio\items\weapons.dm"
|
||||
#include "code\modules\xenobio\items\weapons_vr.dm"
|
||||
#include "code\modules\xenobio\machinery\processor.dm"
|
||||
#include "code\modules\xgm\xgm_gas_data.dm"
|
||||
#include "code\modules\xgm\xgm_gas_mixture.dm"
|
||||
|
||||
Reference in New Issue
Block a user