From aadccce155fe79f46fa8291ad501cd503e39b56a Mon Sep 17 00:00:00 2001 From: Metis <100518708+sheepishgoat@users.noreply.github.com> Date: Sat, 14 Sep 2024 00:46:32 -0400 Subject: [PATCH] no more errors --- GainStation13/code/clothing/accessory.dm | 1 - GainStation13/code/clothing/haydee_suit.dm | 5 +- .../datums/diseases/advance/symptoms/berry.dm | 6 +- .../effects/spawners/choco_slime_delivery.dm | 2 +- GainStation13/code/mechanics/fatrousal.dm | 2 + GainStation13/code/mechanics/web_weaving.dm | 2 +- .../modules/clothing/under/jobs/clothing.dm | 3 +- .../clothing/under/jobs/modcivilian.dm | 16 +-- .../code/modules/mob/living/emote.dm | 2 +- .../code/modules/mob/living/species.dm | 114 ------------------ GainStation13/sound/voice/farts/fart4.ogg | Bin 0 -> 20433 bytes code/__DEFINES/misc.dm | 5 +- .../mob/living/carbon/human/species.dm | 36 ++++++ hyperstation/code/modules/resize/resizing.dm | 77 ++++++++++++ 14 files changed, 139 insertions(+), 132 deletions(-) create mode 100644 GainStation13/sound/voice/farts/fart4.ogg 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 0000000000000000000000000000000000000000..429b9ec90a42049d31d3219465a5e6c2b04b75af GIT binary patch literal 20433 zcmaI71y~$Q&^9`YySoKh+#Q0uyIXK~mtX;cyF&=>?iL8H!QDN0AXo?x;BL3tRwV-Hr=b#tke7c_%Z;rEtlm2!3m_DU^ZvM~C3Q8~~&zw1@!; zS6MLH$HCotT_&uUq5py9A1UM@fE+2bKi_2sD4?hU0K&i8{X_p$MgOb*+Xy-SW0fcr zAUfhoBIAlP;tC!~WL2HF{BBjOF0cK*C?0^uXMcwss{vzFhJR6ARCC{j8MUJ5QC`Xa%pU{i+w3`Y2~v^eRE|} z1t+QO3d=EtBn1;>z{y2{O^krn4)Q zUf`O9E~JaL$&RFn7F2`5jMOcpy_TG%@}ne&N{WOhha!if6b(ZFPg437hSS(Z?tGAz z1XJ1-!jl(9LGFtzqz(DY6ip6=iNP%j6O2%ZkN^(|MoL0r0*6BUAAm7Hn1Yl)1tnD= z;xP&^qkv$9B!tLF0Kkj{L=PbGLk<8Yy^w*?8^)n(Gb#@mAwcgQU$TX*q)akcVLme+ zte1Wmm20V&ZsnIttCwEln|o}Vd*oX>(#$n|qd3haG>~u?82>zwC zl{5_B{$;_I(&DPfF0;)(^3A2IEVM0zFxciER}@yNYvmsL=34s|o)lD8GDH_1`{vR{ zm)de%DXQQ|&EiODaGCn$9z~U&WR*tQnq?Q3M_1ZqmqJ)ett%O{O0sE6<+YR)7rDef z+C)S2fXXaI(vp;do!8V#k%z^FU;>W@i7@FIIq5X16`TH#@cA=|xFAs+Ab7wPJn6#GJk1n&ni200aU| zAVN*x@x=c@MGycY>4ym1W7$gx%wySybJU~RhY8FT*@tn={u9FqDCx078Vkm$q=s{MitV_ zCtK)cANrQsWGDaig>5cfcB!Qv1kS>v>{1)K^b&|eqe@TpvrB9XY5hu1vmphDiwo^L zOCjJNWmVc#8cyE`LZF?;!IVE9DxE-8YZXuKO+wp=%s=vqX$t&5|ZT= zngl0tv@{_3Y>sIXTS%*!>DwIF7DQLtauj5jLc*dVTQdy+ z!ruUxh-3co6XZbuUkTy~v%ik{>ka}9h@T)n`S)t+ zU%t}6F8YrdlGhkqAX7%YnuU8vQa&WHK>@n}fH%?rR>BsFk1LfXOu^ zN2QtUqcF-@e=O?z7+wtnxIqK{l(RRIkSr!yNQWi#cbs7R79L0C%7Fd;o{k}M{}y}- z>Fjdpq6?4yCYan~OesuAI)eD4Q07*0`X*9P14m0HK_toINafO9i~iL>N-_zeOcI@+AcRv5 zj0Ncw@)^YzD*QX<=OBV1O47|mO3q>nB_XIlRE6A6+mG#=J4ywSdF7KkihcDrHAA%V zk%SmQnQ&xVD0}Ne27xfQ%vX>S()}!U6j^R0=uH2L%M9kwE5@*z#r!fywr3 z1QNATHqbw#1_2&m1O9&qA-HqG1&Gb9cMVS~Zt9=i`Nxm8AOLMh%nc0i#lrykvRFXy z|IBUw&d&eY4Iij*gyNY*EkG0n2$nOGO9z|EVaZWa zG%$@prfbN&4hj4*ND_WR%@Bc1C)(!x0Fwc~fW^ACUrmdzSudJw{rlhK>tgN7^projz zrX;1Jp(3ZOtRkY`1*?T`U>~@3j6v>@cN4N`ilMfO7i;3 z@cK&i`il4ZO88F;(d)n~&fr*OFENkmx5sHN4V~P%f+)(A+K}YOKkK@U)3it$CFfD(+Emih?JUhDAnR?wpWnS#eRSJQQWC-Iv9k#N5;VsEkSKY$I7D(?d0ry`IKv zFRWb2zt1WDHeRb-8Oqc9tnlL{;^%AP*A`wXnceB3hVhl|TI0y?)OA-lgtPiwo9Cth z#qb2MM+g2BTwUuEgYR9*Z|t=#B%uf#Uhq7M=ZMr*UVk_|lpa%g-9XD1;AkupB2lxe z9?2|goc>wPGwW5nc-O&skIY8Zz2iRn8fM!`TI7~?Mo`jDkLzhH$u$V-Tz!)t^dT%0 zF#J_%wk0Rom7^b1xv;@s(pn}H;Q!=}fU)E)&F4%d&144PT$UD`z{qY+$lMl6Sdu*x zJa9V8L;&%my#<@W1>L}aFV7p4tP8&3fph8aqXAnEamak`^;!1360E zOYvopFN!N>xFKKxg#X8(RlUTJP*-F*)bxPY!W%h(0jVvF!AP9`LUNhZsoKhW;qyKm8+Q_RairM# zJt71)?A5F4KJ~tU%^_nHZE?b*{8PILcjlTMJ|(k$<-jqeN}52w==OR<3W#qx@jzMb z!EaLNZ)+q9^nic%62jP%{`$dxmW75WT-PQ5J!N;le;L5%XQh-%W*Nhb-ll$=>?N#9 z)mtC_sJs3tI+b0`3#EXUZ7NAY2I}CzS3_pCGxaTYxP4BxDKtuHetvF@b%;J^AB@du=(iyfW{=nkmKDk3c&Eo>%}5;R=6?@fpQGLW)RX_m?)J#$cwkgDVz} z(caJWa&C1i(iNVBAvOZ82FFaPCYirM3D$?eWr*&@2` z-%#YFqt!^d*bwmaK$5Avp1T;8ra&yAzAd0jH-J{3uA^#v1Ika3#oQBcV51G-O1-gAae zZt6N-0`A5WaY-xJchCvUp0xHDfIm?k;-W!rSh&f{)B3m3UA|iS+ZsW} z^E}J2t|qw8ccC7i2wI22x`&RTjyp*FvjVxO5mlYfGQ_uwQ}=93hUt z|HkQjX7Q5ro}H)&RZH#8`uCQ@5X%RD5li$|C(zqc(KOT}h5z@)`WWpe z!eVtcJQ;#^R%uyBs2sAQ#QDaaWp~7ly6pqsWeLprXQIH>7^jZAa%7!m zvzn-kdJuh+<2M}dWlgdxj}D$cbitTWVLB|!F{s9Szjf-2V3k{6XMh&>j!Gd)}x(>;&RgP%*Nug8j}X}@ZH z;_7f4RPlsC(_PYctnuU8GwGQC#e1@2^#oYH$-&BHUG1sBjR`MEE{o7PL$FnbhQKxu zrWw~fDsCke(Hcfz5qly|!MZa}3HUn38nV~u*1`ubPqe_A${;c_ zSll2`6AT+LY8ssiHvLwqKN^>3gi}cI4-skGW|$JE_2Dt_vPnm8 zHrn4ugbiu%BTMG&rR1W2Tb8-&zfGLZLE}QOZFpW{3&szPJ~EsyD;wcvg2dVg*o*AV zc+kxzKHj%y9>S^atkyA?bh?4<>+*|$;yGkp_Q=sc%5X1HKFmPK`%4^)+w~m`IjG(g zMaEm&S*i8I3nJLN#r>z*`yc$t5>Q<oTHz{^O>pizf)8>#0b?N%O+(Euk8LLWzajei~A7=mLO2n$N*0 zjbceH%xJa~Z?%4KaP3zv3$LQ(Djunr!qk`|GXwctei9Nn$gjjAGL&V^A((C1g9c1n zb*Xn+{`GH}&P4gKiYei#S~?~6WNxUfvdkS=Pk&*K48{Cd+bYq;Lv8H3M;TRw!*-wy znu=>)Uds%!+a9^{)M9Ws*cDhkG>U&%Qlf*0lJaD_M*HF3uaLo3P3f$w?&~jBYPd~Z zKRLcf)`U7nBW3U6X{=4i%O{5gL|Urtq~M$(T6W?NZ|uro{Nxv7Q8d_r?cSj14gc8D z?75Kri4wA4J4o~8>EjVl&KI#%(IiL zCRVDB%-s4d<2!aokc3en=HjzQfj^@I`J(9%CxJ}Nrsoja;5^YL|ezcJ6Asx$hr7!~jXkd#WT(ki=QF_nY;kqD!}Q}Cv_I?7^` zd+313#!!#Qk~T91Fb}ya3tHlT$r@i?>d)TqB}CPY{o+1pK?Aym|T`aSz~bT!(594)lJ z;~-e-&PhY(XVix1)t>9nC)+j4`_?}%JJ=DK`%U`xSof$smzy~~f6yo1D)fF69~9}l z@4Art#Uktsea*MN74%!qi$nfK`dk8sT9hlR&mX_p)0-uLsfH7@AWgb$xB1-Z==;Dz z^7>HzqX2V{P%$N?hsRsWK&$l=e85sJ3VT?C||2T531(OK&rm{ zgwQVMpy6danP?vRgz7nYNqhhNi$MK=c?(;gZaW{QR@`C}2 zRBkpjc#JjD_%35eB4*U|N;SvER0$m3i6ZpZOK^T|JE_wzO`u}@zPS2;x9?5^H|#1U zd$af&=ym@E3kV~Vu{8Szjkb{>yl|EOgY}&}KgP&+;ZDx@(HZSz#jj>d{NziVqbB%& zx){?4NllGywV=$WHhsZ&r4J06^v%tj;nJntXM&Stzo#is!N4GoXQ&bV@SGDPciLX< zu&R zmmCNSRKHC@Xv(Oj;GAVG8(T%WzDBOQ`|`)`-l47SY9d^gMY9{mi4uk1KQTNMapk8p z9z$l6=e=@np8I@K$i?Nzn%9+ynes~;udxR-P|RS>@zE6jH7wVdJGE0YLN-W!q@S8d z!?N-49hRDozs}bWz1fAnsON9O_09X&y%rW-`E#_J3tDtKSH?Ri#O12}NH)|L4#q|c z2960tp{w!QiVVJ>sh4cO2i@5eHqg9Vo_^=}#F5&*StePtCFlP<@R^vd+76mU6IQKT zdT_%BK_m{{GajoOMnOlh*nYsN&6IyqDzBMLTVkyr3uxvzyH<p!KpKj+9^RA1>17nyH(GIMK zYdC=|qVE$yYX;%fBiD{&Fo_(?LhC;GnM{Zi(YZ9CXsBN1&AJRox;ZNKhgET91M!?3 z&>ncSAFDETI;?)3cBNCsxQ733>d%W=tsy1&F_I)puZ}^0kgL_4f|Xc%fV7>FgjW5W z5TM*yLw==u?}ECv2d>8?;2LSDsmO>rmTlQ@n217-Ww5k($MAM(Esl3u>WDCYTH{Y0 zxLZc$o?A7}(7Zhj3q1mD`l_NP^cQMcwuck|3GFUj17diO8bj;xu*RYQ(RSe#N z#qhELqko)5u)zmu6^~jM2Dh0~A}nf2E`0Q9n0~jxBy&9L%O6>zUptM40ep2gu972} zFpTfM4EaUp;TjK>J^*~DwAb1#p*ey^^<%DchRW8sU>zYSpo>K%_*C!8>|y8-Go<*ZYym&}^zhAlw;+@T%5t^>O-vx&c+X)q zMJm{zDYkha(FD;Twnfp5x3zU{+P)12OoLdrciO{S5yfl8>F$!b< zSt9m%o0H)C&+9e&6}RVx`+Wg^m=9i3;ZLUU)RNOYkZ+XJi-%W@JZY-sw-(VR0bU3J zeE08#?RQst#Hkwrlwumr6PM`dTF&^e)7$Zjux2&@AxaMq z{q!j0g-vsDDXIJTM<9`qR9Es0Ij9K{c#Z-ZP+XPo)vG8|95Bei%=~PZqLh9s)SwGL zdpBlTvg|X)-?WckC2XtmO4RfLJuxDeZQQZzZ9ShpHS**gL(QQD^_wN+Mx!o82e)Pn zfbiZ@<@ysa!6ITCv4l_H?&tiiFM;q%EHHgj9uxJFLIZcaXTr(lW&}yJ?+BgfCJPx*^9@!HWIC;Xfm_(qKc}wOK+B z^#UbDX4+GC^dlT{uM4*@ju|YR2wa$)JlvanyqlEH z$T}QG^teb2Ep#%`tlrIhHE+^qa>ZhixwrDY4fce5Q#oRhc@`XHJeFo$~UVMm1)h%)aarQ)O z$j(ud5gt(V2a5IeO92=5JB@NA5%ZA2StPHMCsg}WpLLd=n}o8KLQtvu;nCWdCKB_B zpxyYKcN5Q_c{X(%n=QmPsf)~5Lba%tlw@;C0@WUR>^)oJV`}F$Cm)^Qz#eyz8^ssg zH}HU`ru2ZGwPJaN!e`MZ$_V6AfkL@f27m+bhtv3Q6nC8cJ+OLH=-9<+LV({9-NVy- zd4w0Q(T4wzh*VDlG_*^2s+pOZC@l}~d1X5hjQilS?s3lqo{QX-+{Ot*iQb+<6cpw| zEKmF{6bz9jQlFevS$m}Q@9E1@wMgy}+tISJDzhY1Eh&4IKq`E(t5b_RT1153JzT~; zOCS2Q^PdnyzEq)M_ci(FZWbsf%OLHKx{z(VUVpoB3Pyx-fJ-ZROnDaXBog>vYx6jeqgu58(IN zdsMig(Q>7kPYwK4=WE5PZgQp~@ri~Kg_Kx>Bq9vsvHK3%KIk&w6RBn@4TUejb+KY0 zUZXB~$GF8$Hy_Z~`5K6PAU&v931>&4?vs+=b(e}OQ=0Y-vwR;>N5V@rUxaWwQ7eGF zC$G}Vtc&fl*F5-5j*Y+`j_AH6lQ%F_1=pLOmjFnf;>aEBiBW(qQ*D=`?G^SM%C|V8 zeb#YLMRA7gfl&+afHMj{MYaBX^J6m=O)Mv7?x#Ov;&Ftx#`0BB6!}{XT!BSOQ94eF z@!QvPn9DNCzS^E6lUgK3e$!W)$AqHRXbyhUrvRd;(b#L#?t^zGZhCy}@qa1s`bB~%$`R?du+nok#; zmF}!786#zXU*{ysIa4(E0tNnM0<}nBX?xnEmr|OEcqT47%p%mwP^g>h^J3>;5RZ`Q zv;pe*!(SC!pp2VYGEbjz>6hE}gjk-`5E&+UB9nQ&1c!>VATGwos2Cx-`}hS)@(~Qu zVz$?umKpnzt4j7xPvnzvNo9S`j*d|uBTYwlM;=W23&tl7UiTpOa&Ap;P~gi=wn(K= zSm2>7jFxZ=Of%hl(BkXyTF$te1uhuCd0d$&F#XPW#H(Sm!a!jgq(U`jyM9I#CU*15 zdN(YL%Q86Z&s&!{M2w6!7l!XyabOEEqANSjwE|=x>efY(HL86awey8k}%9ZF4R*>cnG{>^C^ETi`}-|or9X1$s*aP^`M z136jdhbnj4$nUdO+tB8t0vnm9_j2n z9uANZ5yE2djGVqN*YuZ2v6O2s<#L7`IL4=Gz=xV8?jnGILU+%dNdNvtecRY8z~hB% z_+$~?bvHE+JR)Uqy%iB}(zbQ`)gxGMfYT!F0Eawz;obnMTQSVX0{LWc5XVg<2?NRx z{2U|fKhIxh=Elb`@>XqrC~|469eJgX1tfV2PSm%1f4kt!iu?3~tUB)gjz;nY(|&Yo zO?Adtd9H8M#>D7q+1WPNtA`pPJ|MSTv(A3K=lolthck_AFu{|yzLEa4F*Em5RVV+F zm=ikJuhHbBIj_LD_o>r;L^L{=nH}4Uu}Ys?_Kfg-R;{HJ=>40-e6nWkU~_}+%|d(i ze~P60D?GI}rt!02#SQl#t6*k&?>8Teer)uOmX?GJXIRb0;pU4~wA%%WpU&1|#g&JI zTt#em#CwtK8g8MQ{UILY7MGQXEFsUffI>$kYy=mRlU(yud1KWR;vXV1Q~g}un26`u z!IWxyXwmB@ossf2`zv8Ua*qT2scn!0S86M6+FOJ9Y}|TV{H-NfTiHRw*R>#y&7e!d zU3_A-bGu+6(VtB$80IG1ycCpdjQSLAxT5g%VB=9CNtc`v_XvFFnB19GVJ1>PNtnMbPi zK15=Q9eb=GZ6!pq!23w^Tz~dy)LB-T_>N)@0&ii!7O9TcB_VqA7`W%M!kIdSCMkLT zW?rXG8+PotP3=Frdzfu1^sE*ITwvUbTv8Ac2HepVLiVt5UYY2)|b^FuN zo3mTC0;dXS%|i!Z%)PUjrEE2e@S(D=tRR~H32d(rrsmjVfpo3u@bU!_!H|Fokr5T7 zO%}R0lEQvmVf|RUZzqRQQ;dp>Q@kwy)9=>hA(-Z;kyYH+&+x$QstbH`ab!zH&E{A2 zETtV}3#E^oE>pHsR}onqqZv55Z{ACNnxj&%Ic1dKwI#D3{L1+fDta@H$2cGV+p@&& zP^Ky9rK`J}Ln{AUsg5bM!;3Z$MafX3@rQL^b6;hF5edm`s|9_dAscr@Tr$k0sCha> z^r2G2WNAv zBvLvGO{AC8be%KW_BENj{iQ=YyG7Wd2s+e05s1^er8UqLGgT z>wf<@tC#M1|M~VEbL=mwp}t!{DWQ|qrm_H){+sCn0EQC7DPCjK-GR0Fk{eA44t;Ln zU_U$GP{8Sa2PLNI3f*gLiRcGgyb}<4=q`J4ICT54@p;QxCtH0;?;%;GW^^Nk#z7bO zh|qIOh+H&r94Mg32}nZuibl3E{dn6@UF#UBkUdtz7dy&n&uQJVEBE>~CY}z4$T%i_ zAHJS94fWP_BP}bnT4MWY{0il)@J!3f2wF?0FK$^M7o*_NvCEqBGsxoNZGM~l*urbA zdwJe$$8X!^BCW5QN*sm3@Gxq=Md&QP9Aq#ZUiA5uU9D?I&4ZzKw5}_Y(op^e8kLqmcK;Ny zUw@I#Q0ZZ#K#P#GvnUVMYZHlu;oWete4CVsBr5C^MkY&^GmHiKeO}r0w9{_G)ai&e z3l1=R`3ZB-jQv{m#6P^|SZ>Ss>OVfQo+^0vwdz>bB_vtu^Pd9(f?i2QOpeJ34uz=& zbS*c*(Lj0(l5~veWv!Op_KTxOEFGE$NJM#g_i$p!SPTZZD7v9fbJ4q)E zp10e_NOxO#%ex7JLq6CEkdw=zobHxF&6W$bMWjxC^(VC@?>#B#p-7QEWawp6A@cc$F>$seR(aep>2OEasQR8Zdh{M8D?g6yH|ORJiZ|)I z;oA52ue9Pl!U~XYl8kaLuy(`Hf1BA}hy2P8?qlq{2@WjUj*#ip9z{#(nNrRF+hS-Duv}cmG zCTXgTAXx8lusN93Ej9PF?quu*Ah5ShW}58j2dt&iS@cCvhr|+tt0TnPhXEZTF6X`aF|otGXN2fX?OtCc7&oTTk$or7bpZ3X$(mL^n$aqi!Z)3+*=C9BRgomuW? zx63=@8&gMfV%!bFaq^-VTbK!fcRudiYUp;XzqQ}gM|?F9vyh;aAThd62Y<_zpA)RS zsikAw#Jk3K%3V-qm7|+Lc0<&IDJkkxV`F) zF!H$2LJ^b1oY9aOOGid6ZIX2tx+d|qN?n?|@d}CeL%I@$nkLVWNS0FM>*kV;fr~~v z*5~v7hcsX7Iz7G8me_lO`D=f|ZkmH$+3&)EZGI9_bH3g~#wdqzcVA-|f=*XhGhBI8 zuyiz*B82zH0U#5UzO{^REB0jn%RVFCaVP`|jt`EFjZtn?>Ca9mSS1qHL+r`vi*wD0 z{a0zcH$-C%agBrMlr%@%e4RJl#9qSzoRDW>alf+sBca!?R|ZJrYjPs^W1byuAWsNF z*%LJoSyg{CHoq(UXs`2ZSd@$T(FRZM2hj2b7y~+Zxi7w(G~>`u=WG*EOmuh9D{3}S1LVpazZ?fEoquymG9rVP}KJs#!cq4c27g%(s;a}zWPD1 zsJWD3bALXXpr7Y2%GnjkJGS_AxBcDu!;?Qf)#*^j<-zd8G0c;g$mzkGsdJj!Fqk(` zENsA*u7cgUX(o@1J&d3@v^@n>EM?d;iN44<=Ka*2_1u(I9f7Zt^+QV~*_H(yrnjZ# z=(t(&s@hXnK@^XyD`s$#3&{h59w|~LQ>@DV1 z*Q~y-betHr?}RCFywly1N@^Oh=3$j*jep8An)UL;)yVL2&}zwS=(_*A1t?f`fH_7Z z$wWsQTl^A_jJ%8=j+FSO8Uzn-w1Sfrvp;z}lEa++`D0#VmN!!=@*&Z$rL(Ujy2`sY zsJfLv&R{83~twSrfP^3e{3;$%cf_G&9uH*lU&PCwd!7!D`W}q_+ zp^`m5H8f^8h(r%8-@?HJ zbrPh!F>upM5!1kS`(Y)C`<_t($^3f)z9ZW(&A^Xnxo>?Gx@^{4gAP3VT^#dz*dd;R zVsP!Zzta^iGFJ0gDw5jOX2hk|sS!hPpw$dNRxnXYt<<%rD&VLw+?4_~Hoa&3O^C!**D)z~xkk5!1f?TVkO3ZKkD zhq4H^AFm1rFRE!Wb;y0DzXo$o(|sF6Z4&_4P{02qQUbTUH}A%|dxOrykIW6ouG1ee0qpEbu&z#wYJUZ#D zSpt3Hb!KP8e*5RAcx?i2L@hnuoU%`F3Rrju1hHjsIUHP`w|*$0GU9ks z#GIS7d};3Kqyg~BNGvO}*jO7p$(V0`D1Gv7jZ9k;mLn@$asK_@Negk{m)AAcbGi1h zTv_RYpKwL}#{T{<4L)>C2^ynAd3VS&h&s^*2707*AgiOJBm#}f0C>lTY*K`JfXS#m z!VLO`A10fRkQwGKi3!s`ML_5KNfJbF?xblUM%k5ovQ>Hno3%QJy=DM=T{5#gJ#~4# zhh?~d0onOw7Keb+hybb-hiAZ=RIrUV?>@i_8P-|cG#5OXzeUtl-L^)VO3 z;SxT-B5r*u(=TGg-d=PMFdB#^+sYzu3&U5~=j%^%7-=3*dcO5yxc>-4?a8qYg_ZWe zp+5Y({7QV(XTb~l(=6N!rxZ)NjM@F-tZPj6l+?`>(q?k1C)#ht@PjuLk6(k92y(V* zlz!4DV<}njLSOxQ+d5w#HsgKEnX1lY;ttah2M#MZnQh)U6?>l`%`dVm8s4pi!gqTd z)XbR(D)Ey3V;dr~BK`M&E~D_o`=Ys(2qiK-vhMGxPP3xvte$KU@Sv%_rE0Yv;Xfk!(k)f8N8U;S*JDZ=joZc< z!V53wK^S48StUCvko2iMXA(XX9K6r*329pIi>lLMt|u|^`#gD=y52-;6Wvwi0{3d) zeU3e^o;R5BLX6kshl&%E?e7C0?Y~z^Rj|>c^7nj~Q?S5a0yFFE)ymQ0J0N!#9@>x5Wv|_8c`9sJ>gqo>*ybL z6Wy#>W0M~I3wc4I5E}`p3q&AwtZ?-~g(v;jhnl#<2@$fsZtf)_z{ed_oTav}v4d z3$fi-8bbzeiwZjT`l6Dauld*RjAUS7t~V4AlsFWi1;#QWX>TAAZWo@&-H)tO~V z<2Wa^QH4E7j3`xu;_ttm$jy!|_J5M=cpMbt@Fu7eCR3O0A{)3SBCd@b{!*2)0(lLq zjhh)*O9jmqT-xX3K2l5M8DUgf((4;~Kj1WK&wFI-LC6TijGzpN<3X z2XsP*#{K7o3*&_jt$pjML#RsPMB(hcsnFSIXmDgPS?+($oM1U>P#w5!70;5ZtAd1i zCA?hW_{cpU5pDjIf;sEiCz5)x)za?EN*QNHmHeOB{OsfDoAq?^@8yOvky;E#A8RD6=i)~ZQKyvCQ|b4BzP8>fh7u3I?0gI z)EvbK+qOm(J8Zoz+{k>%Tp#mkGHk^r7Zyy6Hegz}PySdqog+!{t0m0?3su`_Kfo2Z z($E6xQP8MlKh#l>e+7rtzJ|IiV94YnN9xx~e!>`WaVq6& zG7KaN2P{6RkF)!BV|%Bi-sct?uYzVc*9f2@sn4v0AR(CfwaN8s3xBwUfOysq+ThPQ zD-&>tn zqimX?(19HQ#-<$`Z2ZpU(7g^rW^&e!V%RiE?cP?fQzEb^a!K{x^QK@_i9PVWap$n+ zWQ(Z^w~9vB_pC`gs(~V(xGjeUJE2&cu9sQqIvUwd`x7T%oj_EsULECeh!SxswdjH7 zTvDdTl`2}UwWV4(u6tx%OGTqjR1$fkMgzUtNsFLaTWPP}|Cw3kMvW5+_{xjz;euT3 z7M1}QOmO7EGZP|75}KV;E=X>xA}}r*&y9gO9C_0Lf|-l>u@p!~T~_^WFSoJPC(2Xk zdPJ%&@~ds3bW&}3Q;$^n&G~?m8odA(>DythFE)d{o&|l$@dbyc>iI&!wf;z#gYugI=cF;z2kO;e=T!ZHfK?s39>kd zvyR0%X5qDSwAhZdksfuGSe^%Wa)&HXt?hlIut>F(>m8i1?Vs>Po0mgc5Z2Fp3;m`o zlhtZHjE9%dX(%Jm(>$yR`dob8Y#YH3k?SRb$Bf0ce-V?!$_(xjhm(o`R*kHqo-dOL z(;j6|jQXZf`Ul5*jz(pSbdcUh3Rv^pM^l;fUTYrTM1jIzFDH@LO->q$GEm(QTH(Xo z8lRg>lgu{aR4v`o{QLrgR_r@ET)uwL@!^M&nJ|<|&M|!F!_Fl2;ik5+bxz6zxZ6l> zA^ILV=;*pTD$Pk`#{JDN39=)aj4M6^{O*rS#NkZ>`iqi?ySAKKMwmQ)C!x!(;;P~z+hm^$ zaLmnFK`=04=S%>+hz~aGJG1&k^n~6BWAdn<{Xt0ZOoKOF&hZ0<2-V*z;9U*^WPers z^cW4p*57(pL!qnUSggEO>edj9^ZORjRi^=g-TtKAx}`P5eW>*Z^*Xki>-$D0;;M+?&o%Tqs11f8xmPYb)YJbX@d@YiswBo!Pr@s)_gZUVj|hs?Yz z75$-zvDGUUYhghQc4UhXGwe6@N^hh#_F*kVa$>ibRrC*Q0&PQ?8>h;FA5$8F^>^P> zle45ut}{|~xUqMa$KNP|%VsLk4Sb?-cA^9`vijc#pjfpHbu{XnIZ1x|vE59XCKNed z9KD5B8d0d7JvmhnfK3UGQUppItiM_@AA)kbqa^ZKG{u*gLE z9#PbM2gY@x!@9W2fX6dL&6rwnBcrItoQ8iTVLCqNmcY<{oWywJp}?cs)&Y6#QX*I@ z=nJy~D|KeE=Sk*U<2!}2V*R!q^;SMyA-617T+K3`P<5dii|EMYd;vnVDG~m#p2Pi4 z!FfyVBQZP_4(Kg*&zyMLB3yfx8fqUlLusvB0p7Q2>H-0yH!B9tW-E^05E+++E50h* z$nBv1U5={~1tfZu-c3>a9O$}zCiJ6l{j#%+jDTWRM4Z=6Htd?Tj>h-{DH56X2`<^M z>T+zQkfcgfWnm|P>-`Tl8Ck^XOoT{P z>#u+AMxi2xD}nYaI41q4;|4GfEOK42DxQVSxjqZ&n(CPte)N_ph9a({OM%{#Mu6c~ zS>w^E(h`b0MGxYJP%=E!giqcjAO5H}FB0cA(VhLipU*t2HO$I(x zsWYV%5_uzH(Jd#Z%7z$Lu^{ktZTZ%kW5nFYhSoXL-5gLWw5%ZUZ?`nx1ZK)4$@1iPtSfxw$31-)#5Mdq`Dx^>+O zaeckgwEv_*?4PwQiU}B@jhVD{{#J~YN*;j)$5s_?>&w0Q(ac;&xVo$pvnRsP-1B8# zH&s(xA%iz0DmooYx7p>%K1?>AQVMs`S27GHCsiXJah=YDJ;kH%(+fUX9NGz}es#xb zcS!7o3MQ!HI;2TX?O^*DnSl!1+-z?p6NspjhZYRmx}qHoGS>Vy_87!_X;ar}AT2Sd zqb5|lRU!w81fZO)*#Il6PQ^M={6$DFKOei9Jo0l#2$cZ-cW(iY8S4zw0@EmrDmQya zmuRzZxlv6^t$d-MBs(wssHb#apM|yO%RdLoT@+T@S@tF+vjW1snqQK$&x-F_RwBy)~_Z-Dza zNo32x#2oa8dDW9yYr>3MiA<}NhHQYatnEl)6_358c71U|@98wEVwGY#*xkqX$f8yE z`5t>Fi9<}*y}LUs<8?K$XNZ84-PPHjyBBR+X7 z+qp)wg%bM?k|KCy(Ws1~5XY4pj{rTHaQmt9+J{Q(re~L%w_BwJ?@H(taldd|D$<9m z^OqLrGxnkXi59yYzP5;PzZ&b*b5mLlx5`BOeif?8HcknLc(jVY+GOn}}GHqzyLM@+qYpmYz<} zf7fEU`sHNtGpIf@5B*I{0-V^07zODPc7U*RNbTyyB#4Sk3hPS1dpCjk5Y5c#vf75Z z#iBL-{HqlV5!PBq>;V!%ZN4aHyiv#@HRC*yQJQ4N2U<<*$!XorPsfs)Azyzng(Y5d z1af1JAO@UDt|$s}JYs8oDigVLa_1gdxbyg z4}@|TfM516I<#t06ffB3crufjP&y4iR$>4BYaYi~s><**d;pVYtfQaNi>|-}&ymcB z_gCHkkI&CB8X{|v$CLrooKDSG#%SL^vKjurTUPSfl@2xZTSY2bqm~YtB0u$^yOnBb zs(2nbt)g1`Kz7p_B)Bi>RkaE4J5Znt3_cf6-gUnnR};u)3%sp^{Oux=hS)JNOxwBK zCNkCnZ6(eP_0v}h?u63171Os##45dOhDKRFZQVYfcW*`>Ig!k>4TJRZSLI*QNJkJ1 zktK|_jHq6V!twa?D^9_*j5y(;19LwRV-yVp-{EHmv>j*!P5G3lS$ypmLQu#j8NtnC zX86fez~`zl$5z#ohKY;+UT3VvxNxgvxC&pf^=@OyERir-9 z3Kq;J8Vd^kl(57CGwfYO^A(;O`o6Poamp)XCt;@b_8_3^Q#apL5lTmcrzy(0%7wdt z5Tmkp-kZn)KUKmoi!WkP{EE$LDL=|r*VnP*PkyBGCjEYUTLU)c3lBqOJ*n!^jK{=zaV+I469pE#^3tB%jXeqt3Ee+@od<75^9c9)TDeptzyEb09; z-ub=l8+GcXRB%XnU_9Z#<#aq7!joWZ{C@&V47Bt4Mjl%(%o3RjWMW2Y7#kV~f=6D{ z$2*{*WZ?3yF%l;CATQaE8AbKofk;CCSN>=xwqhEKVG8Vo$|E!(S-GQ2fn}n6Q#-bW z?DLmJK}_~>=YO`%NxVjML3+0~R1G!haybN)&K`fK#c3#7{~$DsvIK&I6)|oU=v%6W zt9AOxl{J{_aDfQl7~J5gsf+P4v)3tIcHuK03@&l_ZvgXa-w_x-0}H9{u>!66$zRd& zf<9kPAK2=-g6Aa%b4Om+UUwjx#>MIK*x^&iZ*)0fupNikAZx;I9+|P66%Fa=A@9xY z{|YDN3nTRZKwt>Bx!IyYxiVU!n0hBiQ|hV@*%j{`s&cMPOi4Ksq~siaXA#_^Ohw!4 zA1hBSFijR%0G>5tbw&}De(DxJfI0tiLIW58`^5d=WHyGL$OTz=i<1BK&%peQL|GNg zme7_3Z(8UB0}r`AjHJ^2u+@BwT07S_D9XI$lip`$Rv3kYpTOCyaD+e@BxtFj+cT_P zcSQ0Wd&u47a^PJaq_2o3s)qpCEd=GrVOEL&oV3AM;TZ8-J&Q14#88qx1j;y%oncLG zI#7{K(q_$7ig<1c%|Iik&CRX((Df}{pVxj;nU$5dFyhYY=^{vX6_h6c8~{*h3>j0L z6axxWhm(rEVP6GCVdM~K8Syj|>^R&(^Qc8Q{pFCFpD1anga{%hi?|hyrHjEuq8)k; z7K17Cl8GZStkIOnhwgeb)yekBKk>Oo!&Hi-GiX(W!nt=o9dLL(DXl;}cK-;jF zA_@1H^B|IO878O@v)?=-w9c-2WD~tGg^|12t3-+Z^ew(Tg0{@ZlzPM zwjwPlwy6@av)b+AmV@3g|LP=UZ|VxS6@@50-1tppH-uytW>=B29a(0hyNz|WyJvTO zMROV)ET)wYNQRpxc_j7k#9yypO(&v7r`Ktzvt~@~-Eybm0ejp&I_Le8JE9y*f!Kr# zWe!Awk5pg|v^u@ae(u4G{@jZO0KPR#{OAI#2k`~~$EINhN>myHz*=8l5#MKd8&RdO z@b3xKU$(x?+sZLF%E=BBNKdE})?nhHg)x#)DpndRp+<{sbK9;un_x-8%qa2B>)RLe zO-2fECM(%tH|MR2p{!UG3zdau(Uz*kYrV_;(q-|Ai(`x=K;ozf%rQnXs=|6d|1OG#IiL>S6Im+Tb4jB`aYWlZzNnuMlv^vO*u_R~AIBbgaLQ)`o(s9a#Zuz<4T z{YuqBORrRpbksL5qAy-hsG|A&&tQ$W3(P>p-GTHOkQZRUqh|ie4s1;C1MZt%D)S>oKs7DDCZbXc}^PzAl`rshW65 zS`(+J%~G}r8x6?yqxD*We$!(v+IP)GHGu%#Ha&9>eacws-~PV%ginj_3XRc6=bMdg zs7rs|`OCRFuc&r~_SdW*C)T$&^vl=n{r7R+-J0PvHGZdocBM56HOj^1h@@vdL$SY8PRR-~6Q)b#L3>PuR{eEG_C8@JcW2Re z{V{(+ysb*Z!W^Zb2NDX&X;yqnmDT0h-8R5Z+p%c(JXOB$JWepD^fYF738f%GQ=+eZy432i$4=62jR!eH=S65!JA0UR8H}HJ zXI^ql-w143!0 zqd8S~CtuYI`m-T5v>fQ$s-Ovhq}}OBF^32|N?CKXpifUdcZ| zw2pap8UU`Lgc}r*5)87~vklQkBue{pbfv8w$*0^X;+sL+6?7c}R*O?Y(4o z=TauSvA{al&D`{E0-?aO;LBTqc>Np zD3HOB351P|rWR89Axn?M;`}a4)5Lr9w0xQOo{D zm3^D|4+oG^7iB`&ostYBl}>8ROPdGAAix1j5Z|j=H?buMv+O|*i(O-nBBrmURkN@A zai#8BvLmY$ZK(7rdN7?XTKk`Smllb5wBidY*%uOIa!h2zmkUDJiyTEHRpcnm=sAr8 z{NnRsTd-T3Qpxs;EB{mmfewd27=&qW50DSW$Y65ld*9|7#jjMaBIlBFO?RE;Y=L|A zwxx}qi_UAZXE$+3xmHSyu}!z`OCO?;?LBnTP3!w|*a{-1z1T}pql*&z{rrKZx=1@> zj}engryL=XDXc&ZEB|J-D%-s%x3`kpXSPj`!i>Cqz64kI0ALvAij%H_ZsVj{QhuRq z!mDV6J1nKda%2Y^Gm#q9-}x#W%t~*tJ`US{?n&8Ua{h?gWbwJG_wVg|M{WGLQ+=wr z_)QoP&xqgoFAWa9bM3cva?pct^JTE*m)nuwUSkgt$k=x4X9__|DhCHhl^f=%rC%DE zf_mcb(rO5~0iH9vAixfhS&xsM0rxyS+Re_)pIvlLT<4SA*Pyld2WF=Je_%4cVfU#jQn3#vJ zTKd)&8UA};RKE4eEG&Z>OY`M#zxP%F5YjeW0t7}O3|wLqQHlV-S}TFmP1LxOjb_M7 zWo}TS7b_O(&}1to+y3f*m!3C}ddZOZGf{UKOL``reVK@2`Lqf|82$OV z00000007`5-5=XFwnb``!rPid*=_u>k;y|2ELZQBLz%w390z@v+>(<7lQ< zHk{HJ??R9a$NjW>imAE#8BA_@{QqljETI4*z$8-ka(8wh%@+Ad_5tz;<_6+X2D1J9_ot*)mgS)@@FrYwT z;yyk;LIZ$vs+Sr7inTSi9ZybdN#$zI;`+Y#*(dj~w0r;GpJU5ii-V?~NPYAB8*&8B z0{{R37)wPE0Dvp@hbCuH^_39-0Jv$?B3CD&nXIExXQcHglR^6Ih84W4BoXp95)IP~ zkO{#~lnn*|@V`|%cb+)F=RfOMKMHc+_ZaPbjQ7ehbj4r(Td3ip%)Q;L+pp9L0TU1&RuBb68*7N#hDh0LTb_oP?cUDCfQE$EHm@I~6}REq;FD J_MFV%#|5@j2T1?` literal 0 HcmV?d00001 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