diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm
index 0c5d6121..9a066493 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 GIANTISM /datum/mutation/human/giantism
#define CLOWNMUT /datum/mutation/human/clumsy
#define TOURETTES /datum/mutation/human/tourettes
#define DEAFMUT /datum/mutation/human/deaf
@@ -151,4 +152,4 @@
//used for the can_chromosome var on mutations
#define CHROMOSOME_NEVER 0
#define CHROMOSOME_NONE 1
-#define CHROMOSOME_USED 2
\ No newline at end of file
+#define CHROMOSOME_USED 2
diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm
index a64f4afd..6a1ebea3 100644
--- a/code/datums/mutations/body.dm
+++ b/code/datums/mutations/body.dm
@@ -68,10 +68,10 @@
owner.throw_at(target, cough_range, GET_MUTATION_POWER(src))
-//Dwarfism shrinks your body and lets you pass tables.
+//Dwarfism shrinks your body.
/datum/mutation/human/dwarfism
name = "Dwarfism"
- desc = "A mutation believed to be the cause of dwarfism."
+ desc = "A mutation believed to be the cause of dwarfism. May not work on smaller things properly."
quality = POSITIVE
difficulty = 16
instability = 5
@@ -80,17 +80,43 @@
/datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
- owner.transform = owner.transform.Scale(1, 0.8)
- owner.pass_flags |= PASSTABLE
+ if(owner.size_multiplier <= RESIZE_A_TINYMICRO) //Because what's optimization?
+ return
+ owner.resize(owner.size_multiplier-0.2)
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.transform = owner.transform.Scale(1, 1.25)
- owner.pass_flags &= ~PASSTABLE
+ if(owner.size_multiplier >= RESIZE_A_MACROHUGE)
+ return
+ owner.resize(owner.size_multiplier+0.2)
owner.visible_message("[owner] suddenly grows!", "Everything around you seems to shrink..")
+//Giantism grows your body.
+/datum/mutation/human/giantism
+ name = "Giantism"
+ desc = "A mutation believed to be the cause of giantism. May not work on larger things properly."
+ quality = POSITIVE
+ difficulty = 14
+ instability = 5
+ locked = TRUE
+
+/datum/mutation/human/giantism/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ if(owner.size_multiplier >= RESIZE_A_MACROHUGE)
+ return
+ owner.resize(owner.size_multiplier+0.2)
+ owner.visible_message("", "Everything around you compresses smaller...")
+
+/datum/mutation/human/giantism/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ if(owner.size_multiplier <= RESIZE_A_TINYMICRO)
+ return
+ owner.resize(owner.size_multiplier-0.2)
+ owner.visible_message("[owner] suddenly shrinks back down!", "You shrink back down in size.")
//Clumsiness has a very large amount of small drawbacks depending on item.
/datum/mutation/human/clumsy
@@ -259,4 +285,4 @@
owner.jitteriness = min(max(0, owner.jitteriness + 5), 30)
if(prob(25))
to_chat(owner,"You feel someone creeping in on you...")
- owner.hallucination += 20
\ No newline at end of file
+ owner.hallucination += 20
diff --git a/code/game/objects/items/devices/compressionkit.dm b/code/game/objects/items/devices/compressionkit.dm
index 5ac95832..4db815dc 100644
--- a/code/game/objects/items/devices/compressionkit.dm
+++ b/code/game/objects/items/devices/compressionkit.dm
@@ -112,6 +112,18 @@
else
O.update_size()
O.update_appearance()
+ return
+ else //shrink them overall
+ playsound(get_turf(src), 'sound/weapons/flash.ogg', 50, 1)
+ victim.visible_message("[user] is preparing to shrink [victim] with their bluespace compression kit!")
+ if(do_mob(user, victim, 40) && charges > 0 && victim.size_multiplier > RESIZE_A_TINYMICRO)
+ victim.visible_message("[user] has shrunk [victim]!")
+ playsound(get_turf(src), 'sound/weapons/emitter2.ogg', 50, 1)
+ sparks()
+ flash_lighting_fx(3, 3, LIGHT_COLOR_CYAN)
+ charges -= 1
+ victim.resize(victim.size_multiplier-0.2)
+ return
@@ -124,4 +136,4 @@
if(B.amount > 1)
B.amount -= 1
else
- qdel(I)
\ No newline at end of file
+ qdel(I)
diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm
index 8849ac51..ac3efcdf 100644
--- a/code/game/objects/items/dna_injector.dm
+++ b/code/game/objects/items/dna_injector.dm
@@ -140,6 +140,16 @@
desc = "It's a small world after all."
add_mutations = list(DWARFISM)
+/obj/item/dnainjector/antigiant
+ name = "\improper DNA injector (Anti-Giantism)"
+ desc = "Makes you small and weak."
+ remove_mutations = list(GIANTISM)
+
+/obj/item/dnainjector/giant
+ name = "\improper DNA injector (Giantism)"
+ desc = "Makes you bigger."
+ add_mutations = list(GIANTISM)
+
/obj/item/dnainjector/clumsymut
name = "\improper DNA injector (Clumsy)"
desc = "Makes clown minions."
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 7dcbe50e..d1e57c66 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -1929,38 +1929,13 @@
if((ismonkey(M) || ishuman(M)) && current_cycle >= 10)
M.gorillize()
-/datum/reagent/growthserum
+/datum/reagent/growthserum //neutered to use as a chemical base for sizecode shit
name = "Growth Serum"
id = "growthserum"
description = "A commercial chemical designed to help older men in the bedroom."//not really it just makes you a giant
color = "#ff0000"//strong red. rgb 255, 0, 0
- var/current_size = 1
taste_description = "bitterness" // apparently what viagra tastes like
-/datum/reagent/growthserum/on_mob_life(mob/living/carbon/H)
- var/newsize = current_size
- switch(volume)
- if(0 to 19)
- newsize = 1.25
- if(20 to 49)
- newsize = 1.5
- if(50 to 99)
- newsize = 2
- if(100 to 199)
- newsize = 2.5
- if(200 to INFINITY)
- newsize = 3.5
-
- H.resize = newsize/current_size
- current_size = newsize
- H.update_transform()
- ..()
-
-/datum/reagent/growthserum/on_mob_end_metabolize(mob/living/M)
- M.resize = 1/current_size
- M.update_transform()
- ..()
-
/datum/reagent/plastic_polymers
name = "plastic polymers"
id = "plastic_polymers"
@@ -2232,4 +2207,4 @@
description = "A synthetic toxin." //NANOMACHINES SON.
color = "#5EFF3B" //RGB: 94, 255, 59
race = /datum/species/synthliz
- mutationtext = "The pain subsides. You feel... artificial."
\ No newline at end of file
+ mutationtext = "The pain subsides. You feel... artificial."
diff --git a/hyperstation/code/modules/resize/sizechems.dm b/hyperstation/code/modules/resize/sizechems.dm
index 40f2ed90..f5beb94a 100644
--- a/hyperstation/code/modules/resize/sizechems.dm
+++ b/hyperstation/code/modules/resize/sizechems.dm
@@ -1,5 +1,42 @@
//Size Chemicals, now with better and less cringy names.
+//TO DO: USE BETTER FERMICHEM TO MAKE ALL OF THESE CHEMICALS MORE INTERACTIVE
+//Sizechem reagent
+/datum/reagent/sizechem
+ name = "Cell-Volume Altering Base"
+ id = "sizechem"
+ description = "A stabilized compound liquid, used as a basis for increasing or decreasing the size of living matter with more recipes."
+ color = "#C900CC"
+ taste_description = "regret"
+ can_synth = FALSE
+ metabolization_rate = 0.25
+
+//Sizechem reaction
+/datum/chemical_reaction/sizechem
+ name = "Cell-Volume Altering Base"
+ id = "sizechem"
+ mix_message = "the reaction rapidly alters in size!"
+ required_reagents = list("growthserum" = 0.15, "clonexadone" = 0.15, "gold" = 0.15, "acetone" = 0.15)
+ results = list("sizechem" = 0.3)
+ required_temp = 1
+ //Fermichem vars
+ OptimalTempMin = 600 // Lower area of bell curve for determining heat based rate reactions
+ OptimalTempMax = 630 // Upper end for above
+ ExplodeTemp = 635 // Temperature at which reaction explodes
+ OptimalpHMin = 5 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
+ OptimalpHMax = 5.5 // Higest value for above
+ ReactpHLim = 2 // How far out pH wil react, giving impurity place (Exponential phase)
+ CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst)
+ CurveSharpT = 4 // How sharp the temperature exponential curve is (to the power of value)
+ CurveSharppH = 4 // How sharp the pH exponential curve is (to the power of value)
+ ThermicConstant = -10 // Temperature change per 1u produced
+ HIonRelease = 0.02 // pH change per 1u reaction (inverse for some reason)
+ RateUpLim = 1 // Optimal/max rate possible if all conditions are perfect
+ FermiChem = TRUE // If the chemical uses the Fermichem reaction mechanics
+ FermiExplode = FALSE // If the chemical explodes in a special way
+ PurityMin = 0.2
+
+//Growthchem reagent
/datum/reagent/growthchem
name = "Prospacillin"
id = "growthchem"
@@ -10,6 +47,31 @@
metabolization_rate = 0.25
can_synth = FALSE //DO NOT MAKE THIS SNYTHESIZABLE, THESE CHEMS ARE SUPPOSED TO NOT BE USED COMMONLY
+//Growthchem reaction
+/datum/chemical_reaction/growthchem
+ name = "Prospacillin"
+ id = "growthchem"
+ mix_message = "the reaction appears to grow!"
+ required_reagents = list("sizechem" = 0.15, "condensedcapsaicin" = 0.15, "aphro" = 0.30)
+ results = list("growthchem" = 0.25)
+ required_temp = 1
+ OptimalTempMin = 700 // Lower area of bell curve for determining heat based rate reactions
+ OptimalTempMax = 730 // Upper end for above
+ ExplodeTemp = 735 // Temperature at which reaction explodes
+ OptimalpHMin = 3 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
+ OptimalpHMax = 3.5 // Higest value for above
+ ReactpHLim = 2 // How far out pH wil react, giving impurity place (Exponential phase)
+ CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst)
+ CurveSharpT = 4 // How sharp the temperature exponential curve is (to the power of value)
+ CurveSharppH = 4 // How sharp the pH exponential curve is (to the power of value)
+ ThermicConstant = -10 // Temperature change per 1u produced
+ HIonRelease = 0.02 // pH change per 1u reaction (inverse for some reason)
+ RateUpLim = 1 // Optimal/max rate possible if all conditions are perfect
+ FermiChem = TRUE // If the chemical uses the Fermichem reaction mechanics
+ FermiExplode = FALSE // If the chemical explodes in a special way
+ PurityMin = 0.2
+
+//Growthchem effects
/datum/reagent/growthchem/on_mob_add(mob/living/carbon/M)
. = ..()
if(ishuman(M))
@@ -24,6 +86,7 @@
..()
. = 1
+//Shrinkchem reagent
/datum/reagent/shrinkchem
name = "Diminicillin"
id = "shrinkchem"
@@ -31,9 +94,34 @@
color = "#0C26E7"
taste_description = "a pungent, acidic and jittery flavour"
overdose_threshold = 10
- metabolization_rate = 1
+ metabolization_rate = 0.50
can_synth = FALSE //SAME STORY AS ABOVE
+//Shrinchem reaction
+/datum/chemical_reaction/shrinkchem
+ name = "Diminicillin"
+ id = "shrinkchem"
+ mix_message = "the reaction appears to shrink!"
+ required_reagents = list("sizechem" = 0.15, "frostoil" = 0.15, "aphro" = 0.30)
+ results = list("shrinkchem" = 0.25)
+ required_temp = 1
+ OptimalTempMin = 100 // Lower area of bell curve for determining heat based rate reactions
+ OptimalTempMax = 150 // Upper end for above
+ ExplodeTemp = 350 // Temperature at which reaction explodes
+ OptimalpHMin = 3 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
+ OptimalpHMax = 4.5 // Higest value for above
+ ReactpHLim = 2 // How far out pH wil react, giving impurity place (Exponential phase)
+ CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst)
+ CurveSharpT = 4 // How sharp the temperature exponential curve is (to the power of value)
+ CurveSharppH = 4 // How sharp the pH exponential curve is (to the power of value)
+ ThermicConstant = -10 // Temperature change per 1u produced
+ HIonRelease = 0.02 // pH change per 1u reaction (inverse for some reason)
+ RateUpLim = 1 // Optimal/max rate possible if all conditions are perfect
+ FermiChem = TRUE // If the chemical uses the Fermichem reaction mechanics
+ FermiExplode = FALSE // If the chemical explodes in a special way
+ PurityMin = 0.2
+
+//Shrinkchem effects
/datum/reagent/shrinkchem/on_mob_add(mob/living/carbon/M)
. = ..()
if(ishuman(M))