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 -