diff --git a/GainStation13/code/clothing/accessory.dm b/GainStation13/code/clothing/accessory.dm
index d02172d1d7..e8f482167e 100644
--- a/GainStation13/code/clothing/accessory.dm
+++ b/GainStation13/code/clothing/accessory.dm
@@ -3,7 +3,6 @@
desc = "You shouldn't see this."
icon = 'GainStation13/icons/mob/accessories.dmi'
icon_state = "gato_middleman"
- item_color = "gato" //btw I had to move the sprite for this to 'icons/mob/accessories.dmi', the shitty code made me do it!! GS13 will just have a backup but it's not referenced here
above_suit = TRUE
/obj/item/clothing/accessory/medal/gato_badge/middleman
diff --git a/GainStation13/code/clothing/haydee_suit.dm b/GainStation13/code/clothing/haydee_suit.dm
index 132098acf7..ec2a42cf25 100644
--- a/GainStation13/code/clothing/haydee_suit.dm
+++ b/GainStation13/code/clothing/haydee_suit.dm
@@ -6,7 +6,6 @@
icon_state = "haydee_helmet"
item_state = "item_haydee_helmet"
armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 25, "fire" = 25, "acid" = 25)
- item_color = "white"
slowdown = 0
mutantrace_variation = NONE
actions_types = list()
@@ -14,8 +13,8 @@
/obj/item/clothing/suit/space/hardsuit/engine/haydee
name = "Haydee Suit"
desc = "A strangely voluptous suit. Offers little to no protection. It also appears to have minor flab-compressing properties."
- icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
- alternate_worn_icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
+ mob_overlay_icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
+ anthro_mob_worn_overlay = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
icon_state = "haydee_suit1"
item_state = "item_haydee"
armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 0, "rad" = 25, "fire" = 25, "acid" = 25)
diff --git a/GainStation13/code/datums/diseases/advance/symptoms/berry.dm b/GainStation13/code/datums/diseases/advance/symptoms/berry.dm
index 21e6e9c8af..8e8a4070a9 100644
--- a/GainStation13/code/datums/diseases/advance/symptoms/berry.dm
+++ b/GainStation13/code/datums/diseases/advance/symptoms/berry.dm
@@ -52,7 +52,7 @@
playsound(M.loc, 'sound/effects/splat.ogg',rand(10,50), 1)
return
..()
-
+
/obj/effect/decal/cleanable/juice
name = "berry juice"
desc = "It's blue and smells enticingly sweet."
@@ -69,3 +69,7 @@
/obj/effect/decal/cleanable/juice/streak
random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5")
+/obj/effect/decal/cleanable/blood/update_icon()
+ color = blood_DNA_to_color()
+ if(blood_state == BLOOD_STATE_JUICE)
+ color = BLOOD_COLOR_JUICE
diff --git a/GainStation13/code/game/objects/effects/spawners/choco_slime_delivery.dm b/GainStation13/code/game/objects/effects/spawners/choco_slime_delivery.dm
index ae4162d302..4e4af9cfb4 100644
--- a/GainStation13/code/game/objects/effects/spawners/choco_slime_delivery.dm
+++ b/GainStation13/code/game/objects/effects/spawners/choco_slime_delivery.dm
@@ -15,7 +15,7 @@
message_admins("A choco slime has been delivered to [ADMIN_VERBOSEJMP(T)].")
log_game("A choco slime has been delivered to [AREACOORD(T)]")
var/message = "Attention [station_name()], we have entrusted you with a research specimen in [get_area_name(T, TRUE)]. Remember to follow all safety precautions when dealing with the specimen."
- SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(addtimer), CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(print_command_report), message), announcement_time))
+ SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(print_command_report), message), announcement_time))
return INITIALIZE_HINT_QDEL
diff --git a/GainStation13/code/mechanics/fatrousal.dm b/GainStation13/code/mechanics/fatrousal.dm
index 7c62f9e0fe..c31b6054af 100644
--- a/GainStation13/code/mechanics/fatrousal.dm
+++ b/GainStation13/code/mechanics/fatrousal.dm
@@ -16,12 +16,14 @@
var/mob/living/carbon/C = quirk_holder
C.hider_remove(src)
+/*
/datum/quirk/fatrousal/proc/fat_hide(var/mob/living/carbon/user)
if(iscarbon(quirk_holder))
var/mob/living/carbon/C = quirk_holder
return C.getArousalLoss()*35
return FALSE
+*/
///mob/living/adjust_arousal(amount, updating_arousal=1)
// if(HAS_TRAIT(src, TRAIT_FATROUSAL))
diff --git a/GainStation13/code/mechanics/web_weaving.dm b/GainStation13/code/mechanics/web_weaving.dm
index 0163ad277a..d334a04d74 100644
--- a/GainStation13/code/mechanics/web_weaving.dm
+++ b/GainStation13/code/mechanics/web_weaving.dm
@@ -79,7 +79,7 @@
name = "web bindings"
desc = "A mesh of sticky web that binds whoever is stuck inside of it"
icon = 'GainStation13/icons/obj/clothing/web.dmi'
- worn_icon = 'GainStation13/icons/mob/web.dmi'
+ mob_overlay_icon = 'GainStation13/icons/mob/web.dmi'
icon_state = "web_bindings"
item_state = "web_bindings"
breakouttime = 600 //1 minute is reasonable.
diff --git a/GainStation13/code/modules/clothing/under/jobs/clothing.dm b/GainStation13/code/modules/clothing/under/jobs/clothing.dm
index a6066151be..9f5fed672d 100644
--- a/GainStation13/code/modules/clothing/under/jobs/clothing.dm
+++ b/GainStation13/code/modules/clothing/under/jobs/clothing.dm
@@ -1,2 +1,3 @@
/obj/item/clothing
- var/alternate_worn_icon
+ /// Where do we want to grab the file from? use this for GS13 specific clothing.
+ var/icon/alternate_worn_icon
diff --git a/GainStation13/code/modules/clothing/under/jobs/modcivilian.dm b/GainStation13/code/modules/clothing/under/jobs/modcivilian.dm
index 5669b66a5c..05c1ad7ec1 100644
--- a/GainStation13/code/modules/clothing/under/jobs/modcivilian.dm
+++ b/GainStation13/code/modules/clothing/under/jobs/modcivilian.dm
@@ -36,7 +36,7 @@
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "belly_9_d", GENITALS_UNDER_LAYER)
if(istype(O, /obj/item/organ/genital/butt))
G = O
- if(suit_style == DIGITIGRADE_SUIT_STYLE)
+ if(mutantrace_variation == STYLE_DIGITIGRADE)
if(G.size <= 10)
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "butt_[G.size]_l", GENITALS_FRONT_LAYER)
. += mutable_appearance('GainStation13/icons/mob/modclothes/chefmodular.dmi', "butt_[G.size]_l_NORTH", GENITALS_FRONT_LAYER)
@@ -62,8 +62,8 @@
. += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform")
if(blood_DNA)
. += mutable_appearance('icons/effects/blood.dmi', "uniformblood", color = blood_DNA_to_color())
- if(accessory_overlay)
- . += accessory_overlay
+ if(length(accessory_overlays))
+ . += accessory_overlays
/obj/item/clothing/under/color/grey/modular
name = "grey modular jumpsuit" //change name from base clothes to distinguish them
@@ -103,9 +103,9 @@
. += mutable_appearance(icon_location, "belly_[G.size]_d", GENITALS_UNDER_LAYER)
else
. += mutable_appearance(icon_location, "belly_9_d", GENITALS_UNDER_LAYER)
- if(istype(O, /obj/item/organ/genital/anus)) //if that organ is the butt
+ if(istype(O, /obj/item/organ/genital/butt)) //if that organ is the butt
G = O
- if(suit_style == DIGITIGRADE_SUIT_STYLE) //check if the suit needs to use sprites for digitigrade characters
+ if(mutantrace_variation == STYLE_DIGITIGRADE) //check if the suit needs to use sprites for digitigrade characters
if(G.size <= 10)
. += mutable_appearance(icon_location, "butt_[G.size]_l", GENITALS_FRONT_LAYER)
. += mutable_appearance(icon_location, "butt_[G.size]_l_NORTH", GENITALS_FRONT_LAYER) //to not adjust overlays every time a character turns, north-facing breasts and bellies are drawn separately, with individual icons
@@ -143,8 +143,8 @@
. += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform")
if(blood_DNA)
. += mutable_appearance('icons/effects/blood.dmi', "uniformblood", color = blood_DNA_to_color())
- if(accessory_overlay)
- . += accessory_overlay
+ if(length(accessory_overlays))
+ . += accessory_overlays
/obj/item/clothing/under/color/grey/modular/bra
@@ -153,4 +153,4 @@
icon_location = 'GainStation13/icons/mob/modclothes/graymodular_bra.dmi'
icon_state = "grey"
item_state = "grey_bra"
- item_color = "grey_bra"
+// item_color = "grey_bra"
diff --git a/GainStation13/code/modules/mob/living/emote.dm b/GainStation13/code/modules/mob/living/emote.dm
index 8926b4a995..181ebfddeb 100644
--- a/GainStation13/code/modules/mob/living/emote.dm
+++ b/GainStation13/code/modules/mob/living/emote.dm
@@ -77,7 +77,7 @@
/datum/emote/living/burp/fart/goon // Fart but it's funny !
key = "goonfart"
key_third_person = "goonfarts"
- noise_type = 'goon/sound/voice/farts/fart4.ogg'
+ noise_type = 'GainStation13/sound/voice/farts/fart4.ogg'
//Shhh... It's a secret! Don't tell or I'll steal your legs
/datum/emote/living/burunyu
diff --git a/GainStation13/code/modules/mob/living/species.dm b/GainStation13/code/modules/mob/living/species.dm
index 19e2013197..28c8cb450b 100644
--- a/GainStation13/code/modules/mob/living/species.dm
+++ b/GainStation13/code/modules/mob/living/species.dm
@@ -338,117 +338,3 @@
FATNESS_LEVEL_FAT,
null,
"You suddenly feel blubbery!")
-
-/datum/species/proc/handle_digestion(mob/living/carbon/human/H)
- if(HAS_TRAIT(src, TRAIT_NOHUNGER))
- return //hunger is for BABIES
-
- handle_fatness(H) // GS13
-
- // nutrition decrease and satiety
- if (H.nutrition > 0 && H.stat != DEAD && !HAS_TRAIT(H, TRAIT_NOHUNGER))
- // THEY HUNGER
- var/hunger_rate = HUNGER_FACTOR
- var/datum/component/mood/mood = H.GetComponent(/datum/component/mood)
- if(mood && mood.sanity > SANITY_DISTURBED)
- hunger_rate *= max(0.5, 1 - 0.002 * mood.sanity) //0.85 to 0.75
-
- // Whether we cap off our satiety or move it towards 0
- if(H.satiety > MAX_SATIETY)
- H.satiety = MAX_SATIETY
- else if(H.satiety > 0)
- H.satiety--
- else if(H.satiety < -MAX_SATIETY)
- H.satiety = -MAX_SATIETY
- else if(H.satiety < 0)
- H.satiety++
- if(prob(round(-H.satiety/40)))
- H.Jitter(5)
- hunger_rate = 3 * HUNGER_FACTOR
- hunger_rate *= H.physiology.hunger_mod
- H.nutrition = max(0, H.nutrition - hunger_rate)
-
-
- if (H.nutrition > NUTRITION_LEVEL_FULL)
- // fatConversionRate is functionally useless. It seems under normal curcumstances, each tick only processes, at most, 1 nutrition anyway. reducing the value has no effect.
- var/fatConversionRate = 100 //GS13 what percentage of the excess nutrition should go to fat (total nutrition to transfer can't be under 1)
- var/nutritionThatBecomesFat = max((H.nutrition - NUTRITION_LEVEL_FULL)*(fatConversionRate / 100),1)
- H.nutrition -= nutritionThatBecomesFat
- H.adjust_fatness(nutritionThatBecomesFat, FATTENING_TYPE_FOOD)
- if(H.fullness > FULLNESS_LEVEL_EMPTY)//GS13 stomach-emptying routine
- var/ticksToEmptyStomach = 20 // GS13 how many ticks it takes to decrease the fullness by 1
- if(HAS_TRAIT(H, TRAIT_VORACIOUS))
- ticksToEmptyStomach = ticksToEmptyStomach * 0.5
- H.fullness -= 1/ticksToEmptyStomach
- if (H.fullness > FULLNESS_LEVEL_BLOATED) //GS13 overeating depends on fullness now
- if(H.overeatduration < 5000) //capped so people don't take forever to unfat
- H.overeatduration++
- else
- if(H.overeatduration > 1)
- H.overeatduration -= 1 //doubled the unfat rate -- GS13 Nah, put it back
-
- //metabolism change
- if(H.nutrition > NUTRITION_LEVEL_FULL +100)
- H.metabolism_efficiency = 1
- else if(H.nutrition > NUTRITION_LEVEL_FED && H.satiety > 80)
- if(H.metabolism_efficiency != 1.25 && !HAS_TRAIT(H, TRAIT_NOHUNGER))
- to_chat(H, "You feel vigorous.")
- H.metabolism_efficiency = 1.25
- else if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
- if(H.metabolism_efficiency != 0.8)
- to_chat(H, "You feel sluggish.")
- H.metabolism_efficiency = 0.8
- else
- if(H.metabolism_efficiency == 1.25)
- to_chat(H, "You no longer feel vigorous.")
- H.metabolism_efficiency = 1
-
- switch(H.nutrition)
- if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FULL)
- H.clear_alert("nutrition")
- if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY)
- H.throw_alert("nutrition", /atom/movable/screen/alert/hungry)
- if(0 to NUTRITION_LEVEL_STARVING)
- H.throw_alert("nutrition", /atom/movable/screen/alert/starving)
-
- switch(H.fullness)
- if(0 to FULLNESS_LEVEL_BLOATED)
- H.clear_alert("fullness")
- if(FULLNESS_LEVEL_BLOATED to FULLNESS_LEVEL_BEEG)
- H.throw_alert("fullness", /atom/movable/screen/alert/gs13/bloated)
- if(FULLNESS_LEVEL_BEEG to FULLNESS_LEVEL_NOMOREPLZ)
- H.throw_alert("fullness", /atom/movable/screen/alert/gs13/stuffed)
- if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY)
- H.throw_alert("fullness", /atom/movable/screen/alert/gs13/beegbelly)
-
-
- switch(H.fatness)
- if(FATNESS_LEVEL_BLOB to INFINITY)
- H.throw_alert("fatness", /atom/movable/screen/alert/gs13/blob)
-
- if(FATNESS_LEVEL_IMMOBILE to FATNESS_LEVEL_BLOB)
- H.throw_alert("fatness", /atom/movable/screen/alert/gs13/immobile)
-
- if(FATNESS_LEVEL_BARELYMOBILE to FATNESS_LEVEL_IMMOBILE)
- H.throw_alert("fatness", /atom/movable/screen/alert/gs13/barelymobile)
-
- if(FATNESS_LEVEL_EXTREMELY_OBESE to FATNESS_LEVEL_BARELYMOBILE)
- H.throw_alert("fatness", /atom/movable/screen/alert/gs13/extremelyobese)
-
- if(FATNESS_LEVEL_MORBIDLY_OBESE to FATNESS_LEVEL_EXTREMELY_OBESE)
- H.throw_alert("fatness", /atom/movable/screen/alert/gs13/morbidlyobese)
-
- if(FATNESS_LEVEL_OBESE to FATNESS_LEVEL_MORBIDLY_OBESE)
- H.throw_alert("fatness", /atom/movable/screen/alert/gs13/obese)
-
- if(FATNESS_LEVEL_VERYFAT to FATNESS_LEVEL_OBESE)
- H.throw_alert("fatness", /atom/movable/screen/alert/gs13/veryfat)
-
- if(FATNESS_LEVEL_FATTER to FATNESS_LEVEL_VERYFAT)
- H.throw_alert("fatness", /atom/movable/screen/alert/gs13/fatter)
-
- if(FATNESS_LEVEL_FAT to FATNESS_LEVEL_FATTER)
- H.throw_alert("fatness", /atom/movable/screen/alert/gs13/fat)
-
- if(0 to FATNESS_LEVEL_FAT)
- H.clear_alert("fatness")
diff --git a/GainStation13/sound/voice/farts/fart4.ogg b/GainStation13/sound/voice/farts/fart4.ogg
new file mode 100644
index 0000000000..429b9ec90a
Binary files /dev/null and b/GainStation13/sound/voice/farts/fart4.ogg differ
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index ea84f115a3..3933856d4d 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -154,6 +154,8 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache)
#define BLOOD_STATE_OIL "oil"
#define BLOOD_STATE_NOT_BLOODY "no blood whatsoever"
#define BLOOD_AMOUNT_PER_DECAL 20
+// GS13 EDIT
+#define BLOOD_STATE_JUICE "juice"
//Blood Decal Colors
#define BLOOD_COLOR_HUMAN "#dc0000"
@@ -165,7 +167,8 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache)
#define BLOOD_COLOR_UNIVERSAL "#db3300"
#define BLOOD_COLOR_BUG "#ffc933"
#define BLOOD_COLOR_PLANT "#3d610e"
-
+// GS13 EDIT
+#define BLOOD_COLOR_JUICE "#0004ff"
//suit sensors: sensor_mode defines
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 75833d5ec1..68d68f3d92 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1502,6 +1502,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(HAS_TRAIT(H, TRAIT_NOHUNGER))
return //hunger is for BABIES
+ handle_fatness(H) // GS13 EDIT
+
+ /*
//The fucking TRAIT_FAT mutation is the dumbest shit ever. It makes the code so difficult to work with
if(HAS_TRAIT(H, TRAIT_FAT))//I share your pain, past coder.
if(H.overeatduration < 100)
@@ -1517,6 +1520,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
H.add_movespeed_modifier(/datum/movespeed_modifier/obesity)
H.update_inv_w_uniform()
H.update_inv_wear_suit()
+ */
// nutrition decrease and satiety
if (H.nutrition > 0 && H.stat != DEAD && !HAS_TRAIT(H, TRAIT_NOHUNGER))
@@ -1588,6 +1592,38 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(0 to NUTRITION_LEVEL_STARVING)
H.throw_alert("nutrition", /atom/movable/screen/alert/starving)
+ //GS13 EDIT
+ switch(H.fatness)
+ if(FATNESS_LEVEL_BLOB to INFINITY)
+ H.throw_alert("fatness", /atom/movable/screen/alert/gs13/blob)
+
+ if(FATNESS_LEVEL_IMMOBILE to FATNESS_LEVEL_BLOB)
+ H.throw_alert("fatness", /atom/movable/screen/alert/gs13/immobile)
+
+ if(FATNESS_LEVEL_BARELYMOBILE to FATNESS_LEVEL_IMMOBILE)
+ H.throw_alert("fatness", /atom/movable/screen/alert/gs13/barelymobile)
+
+ if(FATNESS_LEVEL_EXTREMELY_OBESE to FATNESS_LEVEL_BARELYMOBILE)
+ H.throw_alert("fatness", /atom/movable/screen/alert/gs13/extremelyobese)
+
+ if(FATNESS_LEVEL_MORBIDLY_OBESE to FATNESS_LEVEL_EXTREMELY_OBESE)
+ H.throw_alert("fatness", /atom/movable/screen/alert/gs13/morbidlyobese)
+
+ if(FATNESS_LEVEL_OBESE to FATNESS_LEVEL_MORBIDLY_OBESE)
+ H.throw_alert("fatness", /atom/movable/screen/alert/gs13/obese)
+
+ if(FATNESS_LEVEL_VERYFAT to FATNESS_LEVEL_OBESE)
+ H.throw_alert("fatness", /atom/movable/screen/alert/gs13/veryfat)
+
+ if(FATNESS_LEVEL_FATTER to FATNESS_LEVEL_VERYFAT)
+ H.throw_alert("fatness", /atom/movable/screen/alert/gs13/fatter)
+
+ if(FATNESS_LEVEL_FAT to FATNESS_LEVEL_FATTER)
+ H.throw_alert("fatness", /atom/movable/screen/alert/gs13/fat)
+
+ if(0 to FATNESS_LEVEL_FAT)
+ H.clear_alert("fatness")
+
/datum/species/proc/update_health_hud(mob/living/carbon/human/H)
return FALSE
diff --git a/hyperstation/code/modules/resize/resizing.dm b/hyperstation/code/modules/resize/resizing.dm
index bffdad6d71..a330d32d6d 100644
--- a/hyperstation/code/modules/resize/resizing.dm
+++ b/hyperstation/code/modules/resize/resizing.dm
@@ -17,6 +17,83 @@
M.Translate(0, 16*(size_multiplier-1)) //translate by 16 * size_multiplier - 1 on Y axis
src.transform = M //the source of transform is M
+//IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can.
+/mob/living/carbon/update_transform()
+ var/matrix/ntransform = matrix(transform) //aka transform.Copy()
+ var/final_pixel_y = pixel_y
+ var/final_dir = dir
+ var/changed = 0
+
+ if(lying != lying_prev && rotate_on_lying)
+ changed++
+ ntransform.TurnTo(lying_prev,lying)
+ if(lying == 0) //Lying to standing
+ final_pixel_y = get_standard_pixel_y_offset()
+ if(size_multiplier >= 1) //if its bigger than normal
+ ntransform.Translate(0,16 * (size_multiplier-1))
+ else
+ if(lying_prev == 90)
+ ntransform.Translate(16 * (size_multiplier-1),16 * (size_multiplier-1))
+
+ if(lying_prev == 270)
+ ntransform.Translate(-16 * (size_multiplier-1),16 * (size_multiplier-1))
+
+ else //if(lying != 0)
+ if(lying_prev == 0) //Standing to lying
+ pixel_y = get_standard_pixel_y_offset()
+ final_pixel_y = get_standard_pixel_y_offset(lying)
+ if(lying == 90) //Check the angle of the sprite to offset it accordingly.
+ ntransform.Translate(-16 * (size_multiplier-1),0)
+ if(size_multiplier < 1) //if its smaller than normal
+ ntransform.Translate(0,16 * (size_multiplier-1)) //we additionally offset the sprite downwards
+
+ if(lying == 270) //check the angle of the sprite to offset it accordingly
+ ntransform.Translate(16 * (size_multiplier-1),0)
+ if(size_multiplier < 1) //if its smaller than normal
+ ntransform.Translate(0,16 * (size_multiplier-1)) //we additionally offset the sprite downwards
+
+ if(dir & (EAST|WEST)) //Facing east or west
+ final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass
+
+ if(resize != RESIZE_DEFAULT_SIZE)
+ changed++
+ ntransform.Scale(resize)
+ resize = RESIZE_DEFAULT_SIZE
+
+ //Apply size multiplier, thank NeverExisted for this
+ if(size_multiplier != previous_size)
+ changed++
+ //now we offset the sprite
+ //Scaling affects offset. There's probably a smarter and easier way to do this, but this way it works for sure (?)
+ //Just to be clear. All this bullshit is needed because someone wanted to store the old transform matrix instead of using a new one each iteration
+ //Winfre is currently doing a great job at coating my nuts in slobber while i code this
+ if(!lying) //when standing. People of all sizes are affected equally
+ ntransform.Translate(0,-16 * (previous_size-1)) //reset the sprite
+ ntransform.Scale(size_multiplier/previous_size) //scale the sprite accordingly.
+ ntransform.Translate(0,16 * (size_multiplier-1)) //apply the new offset
+ else //when lying. Macros dont get an offset, Micros do. We must also check the cases when a micro becomes a macro and viceversa
+ if(previous_size <= 1 && size_multiplier <= 1) //micro stays a micro. We modify the side-offset
+ ntransform.Translate(0,-16 * (previous_size-1)) //reset the sprite
+ ntransform.Scale(size_multiplier/previous_size) //scale the sprite accordingly
+ ntransform.Translate(0,16 * (size_multiplier-1)) //apply the new offset
+
+ if(previous_size <= 1 && size_multiplier > 1) //micro becomes a macro. We remove the side-offset
+ ntransform.Translate(0,-16 * (previous_size-1)) //reset the sprite
+ ntransform.Scale(size_multiplier/previous_size) //scale the sprite accordingly
+
+ if(previous_size > 1 && size_multiplier <= 1) //macro becomes a micro. We add an offset
+ ntransform.Scale(size_multiplier/previous_size) //scale the sprite accordingly.
+ ntransform.Translate(0,16 * (size_multiplier-1)) //apply the new offset
+
+ if(previous_size > 1 && size_multiplier > 1) //macro stays a macro. We just scale the sprite with no offset changes
+ ntransform.Scale(size_multiplier/previous_size) //scale the sprite accordingly
+
+
+ if(changed)
+ animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT)
+ setMovetype(movement_type & ~FLOATING) // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life().
+
+
/mob/proc/get_effective_size()
return 100000