From 95f270ad3a9c77d13c30f78a3a5a12139f79dbf7 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 4 Sep 2015 14:06:25 +0930 Subject: [PATCH] Xenomorph Queens can now infest victims. --- code/modules/hydroponics/seed_datums.dm | 7 +-- .../hydroponics/spreading/spreading.dm | 4 +- .../human/species/xenomorphs/alien_powers.dm | 44 ++++++++++++++++++- .../human/species/xenomorphs/alien_species.dm | 7 +-- code/modules/organs/subtypes/xenos.dm | 31 ++++++++++--- html/changelogs/zuhayr-xenomorphs.yml | 2 + 6 files changed, 80 insertions(+), 15 deletions(-) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 8d3f0ecb09a..97a4ba64e36 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1113,14 +1113,15 @@ seed_name = "alien weed" display_name = "alien weeds" force_layer = 3 + chems = list("phoron" = list(1,3)) /datum/seed/xenomorph/New() ..() set_trait(TRAIT_PLANT_ICON,"vine2") set_trait(TRAIT_IMMUTABLE,1) - set_trait(TRAIT_PRODUCT_COLOUR,"#080006") - set_trait(TRAIT_FLESH_COLOUR,"#080006") - set_trait(TRAIT_PLANT_COLOUR,"#080006") + set_trait(TRAIT_PRODUCT_COLOUR,"#3D1934") + set_trait(TRAIT_FLESH_COLOUR,"#3D1934") + set_trait(TRAIT_PLANT_COLOUR,"#3D1934") set_trait(TRAIT_PRODUCTION,1) set_trait(TRAIT_YIELD,-1) set_trait(TRAIT_SPREAD,2) diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index 7ebe22a9ab0..6ac67822318 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -132,7 +132,7 @@ update_icon() plant_controller.add_plant(src) // Some plants eat through plating. - if(!isnull(seed.chems["pacid"])) + if(islist(seed.chems) && !isnull(seed.chems["pacid"])) var/turf/T = get_turf(src) T.ex_act(prob(80) ? 3 : 2) @@ -190,7 +190,7 @@ if(growth>2 && growth == max_growth) layer = (seed && seed.force_layer) ? seed.force_layer : 5 opacity = 1 - if(!isnull(seed.chems["woodpulp"])) + if(islist(seed.chems) && !isnull(seed.chems["woodpulp"])) density = 1 else layer = (seed && seed.force_layer) ? seed.force_layer : 5 diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm index 5038116c185..c4b4db91dbd 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm @@ -219,4 +219,46 @@ new /obj/structure/alien/resin/membrane(loc) if("resin nest") new /obj/structure/bed/nest(loc) - return \ No newline at end of file + return + +mob/living/carbon/human/proc/xeno_infest(mob/living/carbon/human/M as mob in oview()) + set name = "Infest (500)" + set desc = "Link a victim to the hivemind." + set category = "Abilities" + + if(!M.Adjacent(src)) + src << "They are too far away." + return + + if(!M.mind) + src << "This mindless flesh adds nothing to the hive." + return + + if(M.species.get_bodytype() == "Xenomorph" || !isnull(M.internal_organs_by_name["hive node"])) + src << "They are already part of the hive." + return + + var/obj/item/organ/affecting = M.get_organ("chest") + if(!affecting || (affecting.status & ORGAN_ROBOT)) + src << "This form is not compatible with our physiology." + return + + src.visible_message("\The [src] crouches over \the [M], extending a hideous protuberance from its head!") + + if(!do_after(src, 150)) + return + + if(!check_alien_ability(500,1,"egg sac")) + return + + if(!M.Adjacent(src)) + src << "They are too far away." + return + + if(!M || M.species.get_bodytype() == "Xenomorph" || !isnull(M.internal_organs_by_name["hive node"]) || !affecting || (affecting.status & ORGAN_ROBOT)) + return + + src.visible_message("\The [src] regurgitates something into \the [M]'s torso!") + M << "A hideous lump of alien mass strains your ribcage as it settles within!" + var/obj/item/organ/xenos/hivenode/node = new(affecting) + node.replaced(M,affecting) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm index 9b593d273ca..3c89ed183b0 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm @@ -15,8 +15,8 @@ eyes = "blank_eyes" - brute_mod = 0.5 // Hardened carapace. - burn_mod = 2 // Weak to fire. + brute_mod = 0.25 // Hardened carapace. + burn_mod = 1.1 // Weak to fire. warning_low_pressure = 50 hazard_low_pressure = -1 @@ -270,7 +270,8 @@ /mob/living/carbon/human/proc/transfer_plasma, /mob/living/carbon/human/proc/corrosive_acid, /mob/living/carbon/human/proc/neurotoxin, - /mob/living/carbon/human/proc/resin + /mob/living/carbon/human/proc/resin, + /mob/living/carbon/human/proc/xeno_infest ) /datum/species/xenos/queen/handle_login_special(var/mob/living/carbon/human/H) diff --git a/code/modules/organs/subtypes/xenos.dm b/code/modules/organs/subtypes/xenos.dm index 0b1233085fd..d68b869974f 100644 --- a/code/modules/organs/subtypes/xenos.dm +++ b/code/modules/organs/subtypes/xenos.dm @@ -38,15 +38,34 @@ icon_state = "xgibtorso" organ_tag = "acid gland" -/obj/item/organ/xenos/hivenode - name = "hive node" - parent_organ = "chest" - icon_state = "xgibmid2" - organ_tag = "hive node" - /obj/item/organ/xenos/resinspinner name = "resin spinner" parent_organ = "head" icon_state = "xgibmid2" organ_tag = "resin spinner" +/obj/item/organ/xenos/hivenode + name = "hive node" + parent_organ = "chest" + icon_state = "xgibmid2" + organ_tag = "hive node" + +/obj/item/organ/xenos/hivenode/removed(var/mob/living/user) + if(owner && ishuman(owner)) + var/mob/living/carbon/human/H = owner + H << "You feel your connection to the hivemind fray and fade away..." + H.remove_language("Hivemind") + if(H.mind && H.species.get_bodytype() != "Xenomorph") + xenomorphs.remove_antagonist(H.mind) + ..(user) + +/obj/item/organ/xenos/hivenode/replaced(var/mob/living/carbon/human/target,var/obj/item/organ/external/affected) + ..(target, affected) + if(owner && ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.add_language("Hivemind") + if(H.mind) + H << "You feel a sense of pressure as a vast intelligence meshes with your thoughts..." + if(H.species.get_bodytype() != "Xenomorph" && xenomorphs.add_antagonist_mind(H.mind,1)) + H << "Your will is ripped away as your humanity merges with the xenomorph hive. You are now a thrall to the queen and her brood. \ + Obey their instructions without question. Serve the hive." \ No newline at end of file diff --git a/html/changelogs/zuhayr-xenomorphs.yml b/html/changelogs/zuhayr-xenomorphs.yml index a67a9630791..7e6d528ff0f 100644 --- a/html/changelogs/zuhayr-xenomorphs.yml +++ b/html/changelogs/zuhayr-xenomorphs.yml @@ -14,6 +14,8 @@ author: Zuhayr delete-after: True changes: - rscdel: "Removed facehuggers, alien embryos, and embryo removal surgery." + - rscadd: "Xenomorph Queens (or infested surgeons...) can now add a hive node to a victim in order to slave them to the hive." + - tweak: "Xenomorph brute/burn mods were tweaked to buff them significantly." - tweak: "Alien larvae now hatch from eggs when ghosts click on them." - tweak: "Alien larvae now gain progression towards adulthood from being inside a human with blood, which they drink." - tweak: "Alien weeds now use the vine system." \ No newline at end of file