diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm
index dd2ef1cc2b79..9e2a529b385d 100644
--- a/code/__DEFINES/DNA.dm
+++ b/code/__DEFINES/DNA.dm
@@ -12,6 +12,7 @@
#define MUTATE /datum/mutation/human/bad_dna
#define COUGH /datum/mutation/human/cough
#define DWARFISM /datum/mutation/human/dwarfism
+#define GIGANTISM /datum/mutation/human/gigantism
#define CLOWNMUT /datum/mutation/human/clumsy
#define TOURETTES /datum/mutation/human/tourettes
#define DEAFMUT /datum/mutation/human/deaf
@@ -30,6 +31,7 @@
#define ELVIS /datum/mutation/human/elvis
#define RADIOACTIVE /datum/mutation/human/radioactive
#define GLOWY /datum/mutation/human/glow
+#define ANTIGLOWY /datum/mutation/human/glow/anti
#define TELEPATHY /datum/mutation/human/telepathy
#define FIREBREATH /datum/mutation/human/firebreath
#define VOID /datum/mutation/human/void
@@ -42,10 +44,15 @@
#define INSULATED /datum/mutation/human/insulated
#define SHOCKTOUCH /datum/mutation/human/shock
#define OLFACTION /datum/mutation/human/olfaction
+#define ACIDFLESH /datum/mutation/human/acidflesh
+#define BADBLINK /datum/mutation/human/badblink
+#define SPASTIC /datum/mutation/human/spastic
+#define EXTRASTUN /datum/mutation/human/extrastun
#define GELADIKINESIS /datum/mutation/human/geladikinesis
#define CRYOKINESIS /datum/mutation/human/cryokinesis
+
#define UI_CHANGED "ui changed"
#define UE_CHANGED "ue changed"
diff --git a/code/datums/mutations/_combined.dm b/code/datums/mutations/_combined.dm
index ea3b5e4a8529..c3643ef8574f 100644
--- a/code/datums/mutations/_combined.dm
+++ b/code/datums/mutations/_combined.dm
@@ -28,3 +28,7 @@
/datum/generecipe/shock
required = "/datum/mutation/human/insulated; /datum/mutation/human/radioactive"
result = SHOCKTOUCH
+
+/datum/generecipe/antiglow
+ required = "/datum/mutatin/human/glow; /datum/mutation/human/void"
+ result = ANTIGLOWY
diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm
index bc7b00e259cd..b5225f2d9650 100644
--- a/code/datums/mutations/body.dm
+++ b/code/datums/mutations/body.dm
@@ -86,21 +86,20 @@
quality = POSITIVE
difficulty = 16
instability = 5
+ conflicts = list(GIGANTISM)
locked = TRUE // Default intert species for now, so locked from regular pool.
/datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
- owner.resize = 0.8
- owner.update_transform()
+ owner.transform = owner.transform.Scale(1, 0.8)
owner.pass_flags |= PASSTABLE
owner.visible_message("[owner] suddenly shrinks!", "Everything around you seems to grow..")
/datum/mutation/human/dwarfism/on_losing(mob/living/carbon/human/owner)
if(..())
return
- owner.resize = 1.25
- owner.update_transform()
+ owner.transform = owner.transform.Scale(1, 1.25)
owner.pass_flags &= ~PASSTABLE
owner.visible_message("[owner] suddenly grows!", "Everything around you seems to shrink..")
@@ -189,23 +188,37 @@
text_gain_indication = "Your skin begins to glow softly."
instability = 5
var/obj/effect/dummy/luminescent_glow/glowth //shamelessly copied from luminescents
- var/glow = 1.5
+ var/glow = 2.5
+ var/range = 2.5
power_coeff = 1
+ conflicts = list(/datum/mutation/human/glow/anti)
/datum/mutation/human/glow/on_acquiring(mob/living/carbon/human/owner)
- if(..())
+ . = ..()
+ if(.)
return
glowth = new(owner)
- glowth.set_light(glow, glow, dna.features["mcolor"])
+ modify()
-/datum/mutation/human/glow/modify(mob/living/carbon/human/owner)
- if(glowth)
- glowth.set_light(glow + GET_MUTATION_POWER(src) , glow + GET_MUTATION_POWER(src), dna.features["mcolor"])
+/datum/mutation/human/glow/modify()
+ if(!glowth)
+ return
+ var/power = GET_MUTATION_POWER(src)
+ glowth.set_light(range * power, glow * power, dna.features["mcolor"])
/datum/mutation/human/glow/on_losing(mob/living/carbon/human/owner)
- if(..())
+ . = ..()
+ if(.)
return
- qdel(glowth)
+ QDEL_NULL(glowth)
+
+/datum/mutation/human/glow/anti
+ name = "Anti-Glow"
+ desc = "Your skin seems to attract and absorb nearby light creating 'darkness' around you."
+ text_gain_indication = "Your light around you seems to disappear."
+ glow = -3.5 //Slightly stronger, since negating light tends to be harder than making it.
+ conflicts = list(/datum/mutation/human/glow)
+ locked = TRUE
/datum/mutation/human/strong
name = "Strength"
@@ -328,3 +341,37 @@
owner.update_transform()
owner.visible_message("[owner] suddenly shrinks!", "Everything around you seems to grow..")
+/datum/mutation/human/spastic
+ name = "Spastic"
+ desc = "Subject suffers from muscle spasms."
+ quality = NEGATIVE
+ text_gain_indication = "You flinch."
+ text_lose_indication = "Your flinching subsides."
+ difficulty = 16
+
+/datum/mutation/human/spastic/on_acquiring()
+ if(..())
+ return
+ owner.apply_status_effect(STATUS_EFFECT_SPASMS)
+
+/datum/mutation/human/spastic/on_losing()
+ if(..())
+ return
+ owner.remove_status_effect(STATUS_EFFECT_SPASMS)
+
+/datum/mutation/human/extrastun
+ name = "Two Left Feet"
+ desc = "A mutation that replaces the right foot with another left foot. It makes standing up after getting knocked down very difficult."
+ quality = NEGATIVE
+ text_gain_indication = "Your right foot feels... left."
+ text_lose_indication = "Your right foot feels alright."
+ difficulty = 16
+ var/stun_cooldown = 0
+
+/datum/mutation/human/extrastun/on_life()
+ if(world.time > stun_cooldown)
+ if(owner.AmountKnockdown() || owner.AmountStun())
+ owner.SetKnockdown(owner.AmountKnockdown()*2)
+ owner.SetStun(owner.AmountStun()*2)
+ owner.visible_message("[owner] tries to stand up, but trips!", "You trip over your own feet!")
+ stun_cooldown = world.time + 300
diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm
index 2b91216f8f73..2c5dd40b5bde 100644
--- a/code/game/objects/items/dna_injector.dm
+++ b/code/game/objects/items/dna_injector.dm
@@ -60,11 +60,12 @@
log_combat(user, target, "attempted to inject", src)
if(target != user)
- target.visible_message("[user] is trying to inject [target] with [src]!", "[user] is trying to inject [target] with [src]!")
+ target.visible_message("[user] is trying to inject [target] with [src]!", \
+ "[user] is trying to inject you with [src]!")
if(!do_mob(user, target) || used)
return
target.visible_message("[user] injects [target] with the syringe with [src]!", \
- "[user] injects [target] with the syringe with [src]!")
+ "[user] injects you with the syringe with [src]!")
else
to_chat(user, "You inject yourself with [src].")
@@ -88,6 +89,11 @@
name = "\improper DNA injector (Hulk)"
desc = "This will make you big and strong, but give you a bad skin condition."
add_mutations = list(HULK)
+
+/obj/item/dnainjector/firebreath
+ name = "\improper DNA injector (Fire Breath)"
+ desc = "Restores the dragon ancestry."
+ add_mutations = list(FIREBREATH)
/obj/item/dnainjector/xraymut
name = "\improper DNA injector (X-ray)"
@@ -98,7 +104,7 @@
name = "\improper DNA injector (Anti-X-ray)"
desc = "It will make you see harder."
remove_mutations = list(XRAY)
-
+
/////////////////////////////////////
/obj/item/dnainjector/antiglasses
name = "\improper DNA injector (Anti-Glasses)"
@@ -164,11 +170,6 @@
name = "\improper DNA injector (Stutt.)"
desc = "Makes you s-s-stuttterrr."
add_mutations = list(NERVOUS)
-
- /obj/item/dnainjector/firebreath
- name = "\improper DNA injector (Fire Breath)"
- desc = "Restores the dragon ancestry."
- add_mutations = list(FIREBREATH)
/obj/item/dnainjector/antistutt
name = "\improper DNA injector (Anti-Stutt.)"
@@ -364,10 +365,50 @@
name = "\improper DNA injector (Anti-Shock Touch)"
remove_mutations = list(SHOCKTOUCH)
+/obj/item/dnainjector/spacialinstability
+ name = "\improper DNA injector (Spacial Instability)"
+ add_mutations = list(BADBLINK)
+
+/obj/item/dnainjector/antispacialinstability
+ name = "\improper DNA injector (Anti-Spacial Instability)"
+ remove_mutations = list(BADBLINK)
+
+/obj/item/dnainjector/acidflesh
+ name = "\improper DNA injector (Acid Flesh)"
+ add_mutations = list(ACIDFLESH)
+
+/obj/item/dnainjector/antiacidflesh
+ name = "\improper DNA injector (Acid Flesh)"
+ remove_mutations = list(ACIDFLESH)
+
+/obj/item/dnainjector/gigantism
+ name = "\improper DNA injector (Gigantism)"
+ add_mutations = list(GIGANTISM)
+
+/obj/item/dnainjector/antigigantism
+ name = "\improper DNA injector (Anti-Gigantism)"
+ remove_mutations = list(GIGANTISM)
+
+/obj/item/dnainjector/spastic
+ name = "\improper DNA injector (Spastic)"
+ add_mutations = list(SPASTIC)
+
+/obj/item/dnainjector/antispastic
+ name = "\improper DNA injector (Anti-Spastic)"
+ remove_mutations = list(SPASTIC)
+
+/obj/item/dnainjector/twoleftfeet
+ name = "\improper DNA injector (Two Left Feet)"
+ add_mutations = list(EXTRASTUN)
+
+/obj/item/dnainjector/antitwoleftfeet
+ name = "\improper DNA injector (Anti-Two Left Feet)"
+ remove_mutations = list(EXTRASTUN)
+
/obj/item/dnainjector/geladikinesis
name = "\improper DNA injector (Geladikinesis)"
add_mutations = list(GELADIKINESIS)
-
+
/obj/item/dnainjector/antigeladikinesis
name = "\improper DNA injector (Anti-Geladikinesis)"
remove_mutations = list(GELADIKINESIS)
@@ -388,6 +429,22 @@
name = "\improper DNA injector (Anti-Thermal Vision)"
remove_mutations = list(THERMAL)
+/obj/item/dnainjector/glow
+ name = "\improper DNA injector (Glowy)"
+ add_mutations = list(GLOWY)
+
+/obj/item/dnainjector/removeglow
+ name = "\improper DNA injector (Anti-Glowy)"
+ remove_mutations = list(GLOWY)
+
+/obj/item/dnainjector/antiglow
+ name = "\improper DNA injector (Antiglowy)"
+ add_mutations = list(ANTIGLOWY)
+
+/obj/item/dnainjector/removeantiglow
+ name = "\improper DNA injector (Anti-Antiglowy)"
+ remove_mutations = list(ANTIGLOWY)
+
/obj/item/dnainjector/timed
var/duration = 600
@@ -480,4 +537,3 @@
log_attack("[log_msg] [loc_name(user)]")
return TRUE
return FALSE
-