mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-29 23:17:28 +01: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
|
/obj/item/weapon/storage/bag/chemistry
|
||||||
slot_flags = null
|
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
|
/obj/structure/closet/l3closet/scientist/double
|
||||||
starts_with = list(
|
starts_with = list(
|
||||||
/obj/item/clothing/suit/bio_suit/scientist = 2,
|
/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
|
/obj/structure/closet/l3closet/medical
|
||||||
|
|||||||
@@ -27,3 +27,10 @@
|
|||||||
else
|
else
|
||||||
icon_state = "tranqgun"
|
icon_state = "tranqgun"
|
||||||
return 1
|
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)
|
||||||
@@ -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"
|
||||||
@@ -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\weapons_vr.dm"
|
||||||
#include "code\modules\research\designs\xenoarch_toys.dm"
|
#include "code\modules\research\designs\xenoarch_toys.dm"
|
||||||
#include "code\modules\research\designs\xenobio_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.dm"
|
||||||
#include "code\modules\research\designs\circuits\ai_modules_vr.dm"
|
#include "code\modules\research\designs\circuits\ai_modules_vr.dm"
|
||||||
#include "code\modules\research\designs\circuits\circuits.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.dm"
|
||||||
#include "code\modules\xenobio\items\slimepotions_vr.dm"
|
#include "code\modules\xenobio\items\slimepotions_vr.dm"
|
||||||
#include "code\modules\xenobio\items\weapons.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\xenobio\machinery\processor.dm"
|
||||||
#include "code\modules\xgm\xgm_gas_data.dm"
|
#include "code\modules\xgm\xgm_gas_data.dm"
|
||||||
#include "code\modules\xgm\xgm_gas_mixture.dm"
|
#include "code\modules\xgm\xgm_gas_mixture.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user