diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm
index 9478891464b..77e1e2d74ab 100644
--- a/code/__defines/mobs.dm
+++ b/code/__defines/mobs.dm
@@ -341,6 +341,7 @@
#define SPECIES_REPLICANT "Replicant"
#define SPECIES_REPLICANT_ALPHA "Alpha Replicant"
#define SPECIES_REPLICANT_BETA "Beta Replicant"
+#define SPECIES_REPLICANT_CREW "Gamma Replicant"
// Used to seperate simple animals by ""intelligence"".
#define SA_PLANT 1
diff --git a/code/game/objects/structures/alien/alien.dm b/code/game/objects/structures/alien/alien.dm
index cde036bc68f..9b192408fa8 100644
--- a/code/game/objects/structures/alien/alien.dm
+++ b/code/game/objects/structures/alien/alien.dm
@@ -81,6 +81,13 @@
health = 0
healthcheck()
return
+ if(locate(/obj/item/organ/internal/xenos/resinspinner/replicant) in M.internal_organs)
+ if(!do_after(M, 3 SECONDS))
+ return
+ visible_message ("[usr] strokes the [name] and it melts away!", 1)
+ health = 0
+ healthcheck()
+ return
visible_message("[usr] claws at the [name]!")
health -= rand(5,10)
healthcheck()
diff --git a/code/modules/materials/materials/organic/resin.dm b/code/modules/materials/materials/organic/resin.dm
index 5d46999c29c..4fe1d15cb9e 100644
--- a/code/modules/materials/materials/organic/resin.dm
+++ b/code/modules/materials/materials/organic/resin.dm
@@ -19,17 +19,27 @@
var/mob/living/carbon/M = user
if(istype(M) && locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
return TRUE
+ if(istype(M) && locate(/obj/item/organ/internal/xenos/resinspinner/replicant) in M.internal_organs)
+ return TRUE
return FALSE
/datum/material/resin/wall_touch_special(var/turf/simulated/wall/W, var/mob/living/L)
var/mob/living/carbon/M = L
if(istype(M) && locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
- to_chat(M, "\The [W] shudders under your touch, starting to become porous.")
+ to_chat(M, "\The [W] shudders under your touch, starting to become porous.")
playsound(W, 'sound/effects/attackblob.ogg', 50, 1)
- if(do_after(L, 5 SECONDS))
- spawn(2)
- playsound(W, 'sound/effects/attackblob.ogg', 100, 1)
- W.dismantle_wall()
+ if(!do_after(L, 5 SECONDS))
+ return FALSE
+ playsound(W, 'sound/effects/attackblob.ogg', 100, 1)
+ W.dismantle_wall()
+ return TRUE
+ if(istype(M) && locate(/obj/item/organ/internal/xenos/resinspinner/replicant) in M.internal_organs)
+ to_chat(M, "\The [W] shudders under your touch, starting to become porous.")
+ playsound(W, 'sound/effects/attackblob.ogg', 50, 1)
+ if(!do_after(L, 5 SECONDS))
+ return FALSE
+ playsound(W, 'sound/effects/attackblob.ogg', 100, 1)
+ W.dismantle_wall()
return TRUE
return FALSE
diff --git a/code/modules/mob/living/carbon/human/species/station/replicant_crew.dm b/code/modules/mob/living/carbon/human/species/station/replicant_crew.dm
new file mode 100644
index 00000000000..d5d3ed3c040
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/station/replicant_crew.dm
@@ -0,0 +1,50 @@
+/datum/species/shapeshifter/replicant/crew
+ name = SPECIES_REPLICANT_CREW
+ blurb = "Replicants are one of the few remaining living examples of precursor technology. \
+ While their origins remain unknown, they are a facsimile of organic life held together by amalgamate, \
+ rubbery flesh and anomalous organs. Whilst their original purpose is speculated to be used through cortical \
+ mirrors as a way to 'wirelessly exist' in a different body via VR pods, this specific variant has had its \
+ forking capabilities severed in exchange for a more stable, self-sufficient (albeit weaker) form."
+
+ min_age = 18
+ max_age = 200
+ blood_color = "#C0C0C0"
+
+ radiation_mod = 1.2 //Affected more by radiation
+ siemens_coefficient = 1.5 //Don't get electrocuted
+
+ secondary_langs = list() // None by default
+
+ has_organ = list(
+ O_HEART = /obj/item/organ/internal/heart/replicant/rage/crew,
+ O_LUNGS = /obj/item/organ/internal/lungs/replicant/mending/crew,
+ O_VOICE = /obj/item/organ/internal/voicebox/replicant,
+ O_LIVER = /obj/item/organ/internal/liver/replicant,
+ O_KIDNEYS = /obj/item/organ/internal/kidneys/replicant,
+ O_BRAIN = /obj/item/organ/internal/brain/replicant/torso,
+ O_EYES = /obj/item/organ/internal/eyes/replicant,
+ O_AREJECT = /obj/item/organ/internal/immunehub/replicant,
+ O_VENTC = /obj/item/organ/internal/metamorphgland/replicant,
+ O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/replicant/crew,
+ O_RESIN = /obj/item/organ/internal/xenos/resinspinner/replicant,
+ O_STOMACH = /obj/item/organ/internal/stomach,
+ O_INTESTINE = /obj/item/organ/internal/intestine
+ )
+
+ appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | HAS_UNDERWEAR | HAS_LIPS
+ spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
+ color_mult = 1
+ valid_transform_species = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ALTEVIAN, SPECIES_TESHARI, SPECIES_MONKEY, SPECIES_LLEILL, SPECIES_VULPKANIN, SPECIES_ZORREN_HIGH, SPECIES_RAPALA, SPECIES_NEVREAN, SPECIES_VASILISSAN, SPECIES_AKULA)
+
+ inherent_verbs = list(
+ /mob/living/carbon/human/proc/shapeshifter_select_shape,
+ /mob/living/carbon/human/proc/shapeshifter_select_colour,
+ /mob/living/carbon/human/proc/shapeshifter_select_hair,
+ /mob/living/carbon/human/proc/shapeshifter_select_hair_colors,
+ /mob/living/carbon/human/proc/shapeshifter_select_gender,
+ /mob/living/carbon/human/proc/shapeshifter_select_wings,
+ /mob/living/carbon/human/proc/shapeshifter_select_tail,
+ /mob/living/carbon/human/proc/shapeshifter_select_ears,
+ /mob/living/carbon/human/proc/shapeshifter_select_eye_colour,
+ /mob/living/proc/set_size
+ )
diff --git a/code/modules/organs/subtypes/replicant.dm b/code/modules/organs/subtypes/replicant.dm
index 51605ab098d..2aaa4c6fd23 100644
--- a/code/modules/organs/subtypes/replicant.dm
+++ b/code/modules/organs/subtypes/replicant.dm
@@ -53,6 +53,20 @@
can_reject = FALSE
icon_state = "plasma_grey"
+/obj/item/organ/internal/xenos/plasmavessel/replicant/crew/handle_organ_proc_special()
+ if(!istype(owner))
+ return
+
+ var/modifier = 1 - 0.5 * is_bruised()
+
+ if(owner.bloodstr.has_reagent("phoron"))
+ adjust_plasma(round(4 * modifier))
+
+ if(owner.ingested.has_reagent("phoron"))
+ adjust_plasma(round(2 * modifier))
+
+ adjust_plasma(2) //Make it a decent amount so people can actually build stuff without stealing all of medbays phoron
+
/obj/item/organ/internal/xenos/acidgland/replicant
name = "replicant aerosol tubule"
desc = "A long, rubbery tube that ends in a hard plastic-like bulb."
@@ -152,6 +166,22 @@
owner.add_modifier(/datum/modifier/berserk, 20 SECONDS)
take_damage(5)
+/obj/item/organ/internal/heart/replicant/rage/crew/handle_organ_proc_special()
+ if(!owner)
+ return
+
+ var/damage_tally = 0
+ var/pain_tally = 0
+ damage_tally += owner.getBruteLoss()
+ damage_tally += owner.getFireLoss()
+ pain_tally += owner.getHalLoss()
+
+ if(((damage_tally >= 50 || prev_damage_tally >= 50) && prev_damage_tally - damage_tally < 0) || pain_tally >= 60)
+ if(world.time > last_activation_time + 60 MINUTES) //Can only be activated once every 60 minutes to prevent it being able to be spammed
+ last_activation_time = world.time
+ owner.add_modifier(/datum/modifier/berserk, 40 SECONDS) //Lasts a little longer so that it can actually get some use seeing as it activates so infrequently
+ take_damage(5)
+
/obj/item/organ/internal/lungs/replicant/mending
name = "replicant hive lungs"
desc = "A pair of rubbery sacs with large portions dedicated to honeycombed nanite filters."
@@ -169,3 +199,15 @@
var/obj/item/organ/O = owner.internal_organs_by_name[o_tag]
if(O)
O.take_damage(-1 * modifier)
+
+/obj/item/organ/internal/lungs/replicant/mending/crew/handle_organ_proc_special()
+ if(!owner)
+ return
+
+ var/modifier = 1 - (0.5 * is_bruised())
+
+ if(istype(owner))
+ for(var/o_tag in repair_list)
+ var/obj/item/organ/O = owner.internal_organs_by_name[o_tag]
+ if(O)
+ O.take_damage(-0.01 * modifier) //Very very slow regen, but still cool flavour
diff --git a/code/modules/ventcrawl/ventcrawl.dm b/code/modules/ventcrawl/ventcrawl.dm
index 0acc4626b18..2ae067c4433 100644
--- a/code/modules/ventcrawl/ventcrawl.dm
+++ b/code/modules/ventcrawl/ventcrawl.dm
@@ -90,6 +90,13 @@ var/list/ventcrawl_machinery = list(
/mob/living/carbon/human/is_allowed_vent_crawl_item(var/obj/item/carried_item)
if(carried_item in organs)
return 1
+ if(species.name == SPECIES_REPLICANT_CREW)
+ if(istype(carried_item, /obj/item/clothing/under))
+ return 1 //Allow them to not vent crawl naked
+ if(istype(carried_item, /obj/item))
+ var/obj/item/I = carried_item
+ if(I.w_class <= 2)
+ return 1 //Allow them to carry items that fit in pockets
return ..()
/mob/living/proc/ventcrawl_carry()
diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt
index 06a1d4e64fd..79be051a631 100644
--- a/config/alienwhitelist.txt
+++ b/config/alienwhitelist.txt
@@ -126,6 +126,7 @@ ontejbjoav - Black-Eyed Shadekin
ontejbjoav - Diona
oreganovulgaris - Xenochimera
oscarholmes - Protean
+oscarholmes - Gamma Replicant
owwy - Black-Eyed Shadekin
oxenfree - Protean
ozyton - Black-Eyed Shadekin
diff --git a/vorestation.dme b/vorestation.dme
index 9f8a730d4f0..99abec6d811 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -3006,6 +3006,7 @@
#include "code\modules\mob\living\carbon\human\species\station\prometheans.dm"
#include "code\modules\mob\living\carbon\human\species\station\prometheans_vr.dm"
#include "code\modules\mob\living\carbon\human\species\station\prommie_blob.dm"
+#include "code\modules\mob\living\carbon\human\species\station\replicant_crew.dm"
#include "code\modules\mob\living\carbon\human\species\station\station.dm"
#include "code\modules\mob\living\carbon\human\species\station\station_special_abilities_vr.dm"
#include "code\modules\mob\living\carbon\human\species\station\station_special_vr.dm"