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