Abductor Gland Rework

This commit is contained in:
Fox-McCloud
2017-03-23 02:33:00 -04:00
parent 7e6ab46753
commit 01466c02dc
7 changed files with 84 additions and 78 deletions
@@ -502,7 +502,7 @@ Congratulations! You are now trained for xenobiology research!"}
species = "<span clas=='notice'>[H.species.name]</span>"
if(L.mind && L.mind.changeling)
species = "<span class='warning'>Changeling lifeform</span>"
var/obj/item/organ/internal/gland/temp = locate() in H.internal_organs
var/obj/item/organ/internal/heart/gland/temp = locate() in H.internal_organs
if(temp)
helptext = "<span class='warning'>Experimental gland detected!</span>"
else
@@ -51,7 +51,7 @@
/datum/surgery_step/internal/gland_insert
name = "insert gland"
allowed_tools = list(/obj/item/organ/internal/gland = 100)
allowed_tools = list(/obj/item/organ/internal/heart/gland = 100)
time = 32
/datum/surgery_step/internal/gland_insert/begin_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -61,6 +61,6 @@
/datum/surgery_step/internal/gland_insert/end_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] inserts [tool] into [target].", "<span class ='notice'>You insert [tool] into [target].</span>")
user.drop_item()
var/obj/item/organ/internal/gland/gland = tool
var/obj/item/organ/internal/heart/gland/gland = tool
gland.insert(target, 2)
return 1
@@ -1,12 +1,11 @@
/obj/item/organ/internal/gland
/obj/item/organ/internal/heart/gland
name = "fleshy mass"
desc = "A nausea-inducing hunk of twisting flesh and metal."
icon = 'icons/obj/abductor.dmi'
parent_organ = "chest"
slot = "gland"
icon_state = "gland"
status = ORGAN_ROBOT
origin_tech = "materials=4;biotech=5;abductor=3"
origin_tech = "materials=4;biotech=7;abductor=3"
beating = TRUE
var/cooldown_low = 300
var/cooldown_high = 300
var/next_activation = 0
@@ -16,30 +15,33 @@
tough = 1 //not easily broken by combat damage
sterile = 1 //not very germy
/obj/item/organ/internal/gland/proc/ownerCheck()
/obj/item/organ/internal/heart/gland/proc/ownerCheck()
if(ishuman(owner))
return 1
if(!human_only && iscarbon(owner))
return 1
return 0
/obj/item/organ/internal/gland/proc/Start()
/obj/item/organ/internal/heart/gland/proc/Start()
active = 1
next_activation = world.time + rand(cooldown_low,cooldown_high)
/obj/item/organ/internal/gland/remove(var/mob/living/carbon/M, special = 0)
/obj/item/organ/internal/heart/gland/remove(var/mob/living/carbon/M, special = 0)
active = 0
if(initial(uses) == 1)
uses = initial(uses)
..()
. = ..()
/obj/item/organ/internal/gland/insert(var/mob/living/carbon/M, special = 0)
/obj/item/organ/internal/heart/gland/insert(var/mob/living/carbon/M, special = 0)
..()
if(special != 2 && uses) // Special 2 means abductor surgery
Start()
/obj/item/organ/internal/gland/on_life()
/obj/item/organ/internal/heart/gland/on_life()
if(!beating)
// alien glands are immune to stopping.
beating = TRUE
if(!active)
return
if(!ownerCheck())
@@ -52,30 +54,28 @@
if(!uses)
active = 0
/obj/item/organ/internal/gland/proc/activate()
/obj/item/organ/internal/heart/gland/proc/activate()
return
/obj/item/organ/internal/gland/heals
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/heals
cooldown_low = 200
cooldown_high = 400
uses = -1
icon_state = "health"
/obj/item/organ/internal/gland/heals/activate()
/obj/item/organ/internal/heart/gland/heals/activate()
to_chat(owner, "<span class='notice'>You feel curiously revitalized.</span>")
owner.adjustBruteLoss(-20)
owner.adjustOxyLoss(-20)
owner.adjustFireLoss(-20)
/obj/item/organ/internal/gland/slime
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/slime
cooldown_low = 600
cooldown_high = 1200
uses = -1
icon_state = "slime"
/obj/item/organ/internal/gland/slime/activate()
/obj/item/organ/internal/heart/gland/slime/activate()
to_chat(owner, "<span class='warning'>You feel nauseous!</span>")
owner.vomit(20)
@@ -83,14 +83,14 @@
Slime.Friends = list(owner)
Slime.Leader = owner
/obj/item/organ/internal/gland/mindshock
origin_tech = "materials=4;biotech=5;magnets=3;abductor=3"
/obj/item/organ/internal/heart/gland/mindshock
origin_tech = "materials=4;biotech=4;magnets=6;abductor=3"
cooldown_low = 300
cooldown_high = 300
uses = -1
icon_state = "mindshock"
/obj/item/organ/internal/gland/mindshock/activate()
/obj/item/organ/internal/heart/gland/mindshock/activate()
to_chat(owner, "<span class='notice'>You get a headache.</span>")
var/turf/T = get_turf(owner)
@@ -100,40 +100,37 @@
to_chat(H, "<span class='alien'>You hear a buzz in your head.</span>")
H.AdjustConfused(20)
/obj/item/organ/internal/gland/pop
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/pop
cooldown_low = 900
cooldown_high = 1800
uses = 6
uses = -1
human_only = 1
icon_state = "species"
/obj/item/organ/internal/gland/pop/activate()
/obj/item/organ/internal/heart/gland/pop/activate()
to_chat(owner, "<span class='notice'>You feel unlike yourself.</span>")
var/species = pick("Unathi","Skrell","Diona","Tajaran","Vulpkanin","Kidan","Grey","Diona")
owner.set_species(species)
/obj/item/organ/internal/gland/ventcrawling
/obj/item/organ/internal/heart/gland/ventcrawling
origin_tech = "materials=4;biotech=5;bluespace=3;abductor=3"
cooldown_low = 1800
cooldown_high = 2400
uses = 1
icon_state = "vent"
/obj/item/organ/internal/gland/ventcrawling/activate()
/obj/item/organ/internal/heart/gland/ventcrawling/activate()
to_chat(owner, "<span class='notice'>You feel very stretchy.</span>")
owner.ventcrawler = 2
return
/obj/item/organ/internal/gland/viral
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/viral
cooldown_low = 1800
cooldown_high = 2400
uses = 1
icon_state = "viral"
/obj/item/organ/internal/gland/viral/activate()
/obj/item/organ/internal/heart/gland/viral/activate()
to_chat(owner, "<span class='warning'>You feel sick.</span>")
var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/magnitis)
var/datum/disease/D = new virus_type()
@@ -144,51 +141,49 @@
owner.med_hud_set_status()
/obj/item/organ/internal/gland/emp //TODO : Replace with something more interesting
origin_tech = "materials=4;biotech=5;magnets=3;abductor=3"
/obj/item/organ/internal/heart/gland/emp //TODO : Replace with something more interesting
origin_tech = "materials=4;biotech=4;magnets=6;abductor=3"
cooldown_low = 900
cooldown_high = 1600
uses = 10
icon_state = "emp"
/obj/item/organ/internal/gland/emp/activate()
/obj/item/organ/internal/heart/gland/emp/activate()
to_chat(owner, "<span class='warning'>You feel a spike of pain in your head.</span>")
empulse(get_turf(owner), 2, 5, 1)
/obj/item/organ/internal/gland/spiderman
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/spiderman
cooldown_low = 450
cooldown_high = 900
uses = 10
icon_state = "spider"
/obj/item/organ/internal/gland/spiderman/activate()
/obj/item/organ/internal/heart/gland/spiderman/activate()
to_chat(owner, "<span class='warning'>You feel something crawling in your skin.</span>")
owner.faction |= "spiders"
new /obj/effect/spider/spiderling(owner.loc)
/obj/item/organ/internal/gland/egg
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/egg
cooldown_low = 300
cooldown_high = 400
uses = -1
icon_state = "egg"
/obj/item/organ/internal/gland/egg/activate()
/obj/item/organ/internal/heart/gland/egg/activate()
to_chat(owner, "<span class='boldannounce'>You lay an egg!</span>")
var/obj/item/weapon/reagent_containers/food/snacks/egg/egg = new(owner.loc)
egg.reagents.add_reagent("sacid",20)
egg.desc += " It smells bad."
/obj/item/organ/internal/gland/bloody
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/bloody
cooldown_low = 200
cooldown_high = 400
uses = -1
/obj/item/organ/internal/gland/bloody/activate()
owner.adjustBruteLoss(15)
/obj/item/organ/internal/heart/gland/bloody/activate()
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
H.drip(200)
owner.visible_message("<span class='danger'>[owner]'s skin erupts with blood!</span>",\
"<span class='userdanger'>Blood pours from your skin!</span>")
@@ -202,22 +197,22 @@
H.w_uniform.add_blood(owner)
H.update_inv_w_uniform(0)
/obj/item/organ/internal/gland/bodysnatch
origin_tech = "materials=4;biotech=7;abductor=3"
/obj/item/organ/internal/heart/gland/bodysnatch
cooldown_low = 600
cooldown_high = 600
human_only = 1
uses = 1
/obj/item/organ/internal/gland/bodysnatch/activate()
/obj/item/organ/internal/heart/gland/bodysnatch/activate()
to_chat(owner, "<span class='warning'>You feel something moving around inside you...</span>")
//spawn cocoon with clone greytide snpc inside
if(ishuman(owner))
var/obj/effect/cocoon/abductor/C = new (get_turf(owner))
C.Copy(owner)
C.Start()
owner.gib()
return
owner.adjustBruteLoss(40)
var/turf/T = get_turf(owner)
T.add_blood_floor(src)
/obj/effect/cocoon/abductor
name = "slimy cocoon"
@@ -232,11 +227,18 @@
var/mob/living/carbon/human/interactive/greytide/clone = new(src)
var/datum/dna/owner_dna = H.dna
clone.rename_character(clone.name, owner_dna.real_name)
clone.body_accessory = H.body_accessory
clone.dna = owner_dna.Clone()
clone.set_species(H.species.name)
clone.body_accessory = H.body_accessory
domutcheck(clone)
for(var/obj/item/I in clone)
if(istype(I, /obj/item/weapon/implant))
continue
if(istype(I, /obj/item/organ))
continue
qdel(I)
//There's no define for this / get all items ?
var/list/slots = list(slot_back,slot_w_uniform,slot_wear_suit,\
slot_wear_mask,slot_head,slot_shoes,slot_gloves,slot_l_ear,slot_r_ear,\
@@ -245,7 +247,7 @@
for(var/slot in slots)
var/obj/item/I = H.get_item_by_slot(slot)
if(I)
clone.equip_to_slot_if_possible(I,slot)
clone.equip_to_slot_or_del(new I.type(clone), slot)
/obj/effect/cocoon/abductor/proc/Start()
hatch_time = world.time + 600
@@ -259,22 +261,25 @@
M.forceMove(get_turf(src))
qdel(src)
/obj/item/organ/internal/gland/plasma
cooldown_low = 2400
cooldown_high = 3000
origin_tech = "materials=4;biotech=5;plasmatech=3;abductor=3"
uses = 1
/obj/item/organ/internal/gland/plasma/activate()
to_chat(owner, "<span class='warning'>You feel bloated.</span>")
sleep(150)
if(!owner) return
to_chat(owner, "<span class='userdanger'>A massive stomachache overcomes you.</span>")
sleep(50)
if(!owner) return
owner.visible_message("<span class='danger'>[owner] explodes in a cloud of plasma!</span>")
var/turf/simulated/T = get_turf(owner)
if(istype(T))
T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C,300)
owner.gib()
return
/obj/item/organ/internal/heart/gland/plasma
cooldown_low = 1200
cooldown_high = 1800
origin_tech = "materials=4;biotech=4;plasmatech=6;abductor=3"
uses = -1
/obj/item/organ/internal/heart/gland/plasma/activate()
spawn(0)
to_chat(owner, "<span class='warning'>You feel bloated.</span>")
sleep(150)
if(!owner)
return
to_chat(owner, "<span class='userdanger'>A massive stomachache overcomes you.</span>")
sleep(50)
if(!owner)
return
owner.visible_message("<span class='danger'>[owner] vomits a cloud of plasma!</span>")
var/turf/simulated/T = get_turf(owner)
if(istype(T))
T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C,50)
owner.vomit()
@@ -14,7 +14,7 @@
return rgb(rand(0,255),rand(0,255),rand(0,255))
/obj/machinery/abductor/gland_dispenser/New()
gland_types = subtypesof(/obj/item/organ/internal/gland)
gland_types = subtypesof(/obj/item/organ/internal/heart/gland)
gland_types = shuffle(gland_types)
gland_colors = new/list(gland_types.len)
amounts = new/list(gland_types.len)
@@ -59,7 +59,7 @@
return
/obj/machinery/abductor/gland_dispenser/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/organ/internal/gland))
if(istype(W, /obj/item/organ/internal/heart/gland))
if(!user.drop_item())
return
W.forceMove(src)
@@ -118,7 +118,7 @@
if(H.stat == DEAD)
atom_say("Specimen deceased - please provide fresh sample.")
return "<span class='bad'>Specimen deceased.</span>"
var/obj/item/organ/internal/gland/GlandTest = locate() in H.internal_organs
var/obj/item/organ/internal/heart/gland/GlandTest = locate() in H.internal_organs
if(!GlandTest)
atom_say("Experimental dissection not detected!")
return "<span class='bad'>No glands detected!</span>"
@@ -147,7 +147,7 @@
obj_count++
ticker.mode.update_abductor_icons_added(H.mind)
for(var/obj/item/organ/internal/gland/G in H.internal_organs)
for(var/obj/item/organ/internal/heart/gland/G in H.internal_organs)
G.Start()
point_reward++
if(point_reward > 0)
+1 -1
View File
@@ -740,7 +740,7 @@
..()
/obj/item/clothing/under/contortionist/dropped(mob/living/carbon/human/user)
if(!user.get_int_organ(/obj/item/organ/internal/gland/ventcrawling))
if(!user.get_int_organ(/obj/item/organ/internal/heart/gland/ventcrawling))
user.ventcrawler = 0
..()
+2 -1
View File
@@ -1188,7 +1188,8 @@
else
AdjustLoseBreath(2, bound_lower = 0, bound_upper = 3)
adjustOxyLoss(5)
adjustBruteLoss(1)
Paralyse(4)
adjustBruteLoss(2)