From b40aad939b65a699b2c651794dbddc8b1de11f6f Mon Sep 17 00:00:00 2001 From: Alphas00 <154434082+Alphas00@users.noreply.github.com> Date: Tue, 26 Dec 2023 00:20:37 +0100 Subject: [PATCH] Fatness Hiding System and Bluespace Belt Applied changes to fatness.dm to allow the creation of objects, events and such that hide a character's actual fatness level to display and treat it as another. Fixes to other files to support said change. Added bluespace belt, an item that hides a character's current weight and treats it as if were 0. (Belt has currently no way to be created/accessed besides admin spawns. Haven't tested ALL things that interact with weight yet) --- GainStation13/code/mechanics/fatness.dm | 40 ++++++++++++++++-- GainStation13/code/mechanics/spells.dm | 2 +- .../code/obj/items/bluespace_belt.dm | 18 ++++++++ .../icons/obj/clothing/bluespace_belt.dmi | Bin 0 -> 793 bytes code/modules/client/preferences.dm | 1 + .../chemistry/reagents/toxin_reagents.dm | 2 +- icons/mob/belt.dmi | Bin 21229 -> 21405 bytes .../code/modules/vore/eating/bellymodes_vr.dm | 4 +- tgstation.dme | 1 + 9 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 GainStation13/code/obj/items/bluespace_belt.dm create mode 100644 GainStation13/icons/obj/clothing/bluespace_belt.dmi diff --git a/GainStation13/code/mechanics/fatness.dm b/GainStation13/code/mechanics/fatness.dm index 411a0fe6..ed730f66 100644 --- a/GainStation13/code/mechanics/fatness.dm +++ b/GainStation13/code/mechanics/fatness.dm @@ -1,6 +1,17 @@ /mob/living/carbon - ///What level of fatness is the parent mob at? + //Due to the changes needed to create the system to hide fatness, here's some notes: + // -If you are making a mob simply gain or lose weight, use adjust_fatness. Try to not touch the variables directly unless you know 'em well + // -fatness is the value a mob is being displayed and calculated as by most things. Changes to fatness are not permanent + // -realfatness is the value a mob is actually at, even if it's being hidden. For permanent changes, use this one + // -overfatnes + //What level of fatness is the parent mob currently at? var/fatness = 0 + //Is something overriding the actual fatness value of a character? + var/fatness_hidden = FALSE + //The actual value a mob is at. Is equal to fatness if fatness_hidden is FALSE. + var/realfatness = 0 + //The value a mob's fatness is being overwritten with if fatness_hidden is TRUE. + var/overfatness = 0 ///At what rate does the parent mob gain weight? 1 = 100% var/weight_gain_rate = 1 //At what rate does the parent mob lose weight? 1 = 100% @@ -26,11 +37,19 @@ else amount_to_change = amount_to_change * weight_loss_rate - fatness += amount_to_change - fatness = max(fatness, MINIMUM_FATNESS_LEVEL) //It would be a little silly if someone got negative fat. + realfatness += amount_to_change + realfatness = max(realfatness, MINIMUM_FATNESS_LEVEL) //It would be a little silly if someone got negative fat. if(client?.prefs?.max_weight) // GS13 - fatness = min(fatness, (client?.prefs?.max_weight - 1)) + realfatness = min(realfatness, (client?.prefs?.max_weight - 1)) + + if(fatness_hidden) //If a character's real fatness is being hidden + if(client?.prefs?.max_weight) //Check their prefs + overfatness = min(overfatness, (client?.prefs?.max_weight - 1)) //And make sure it's not above their preferred max + + fatness = overfatness //Then, make that value their current fatness + else //If it's not being hidden + fatness = realfatness //Make their current fatness their real fatness return TRUE @@ -77,3 +96,16 @@ return FALSE return TRUE + +/mob/living/carbon/proc/fat_hide(hide_amount) //If something wants to hide realfatness, it'll call this method and give it an amount to cover it with + fatness_hidden = TRUE + overfatness = hide_amount + fatness = overfatness //To update a mob's fatness with the new amount to be shown immediately + + return TRUE + +/mob/living/carbon/proc/fat_show() //If something that hides fatness is removed or expires, it'll call this method + fatness_hidden = FALSE + fatness = realfatness //To update a mob's fatness with their real one immediately + + return TRUE diff --git a/GainStation13/code/mechanics/spells.dm b/GainStation13/code/mechanics/spells.dm index 62e21dbc..69e2e6d8 100644 --- a/GainStation13/code/mechanics/spells.dm +++ b/GainStation13/code/mechanics/spells.dm @@ -57,7 +57,7 @@ if(!proximity || !target || target == user) return FALSE - if(weight_to_add > user.fatness || !user.adjust_fatness(-weight_to_add, FATTENING_TYPE_MAGIC)) + if(weight_to_add > user.realfatness || !user.adjust_fatness(-weight_to_add, FATTENING_TYPE_MAGIC)) to_chat(user, "") return FALSE diff --git a/GainStation13/code/obj/items/bluespace_belt.dm b/GainStation13/code/obj/items/bluespace_belt.dm new file mode 100644 index 00000000..ca39ff80 --- /dev/null +++ b/GainStation13/code/obj/items/bluespace_belt.dm @@ -0,0 +1,18 @@ +/obj/item/bluespace_belt + name = "bluespace belt" + desc = "A belt made using bluespace technology. The power of space and time, used to hide the fact you are fat." + icon = 'GainStation13/icons/obj/clothing/bluespace_belt.dmi' + icon_state = "bluespace_belt" + item_state = "bluespace_belt" + slot_flags = ITEM_SLOT_BELT + equip_sound = 'sound/items/equip/toolbelt_equip.ogg' + drop_sound = 'sound/items/handling/toolbelt_drop.ogg' + pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg' + +/obj/item/bluespace_belt/equipped(mob/user, slot) + ..() + var/mob/living/carbon/U = user + if(slot == SLOT_BELT) + U.fat_hide(0) + else + U.fat_show() diff --git a/GainStation13/icons/obj/clothing/bluespace_belt.dmi b/GainStation13/icons/obj/clothing/bluespace_belt.dmi new file mode 100644 index 0000000000000000000000000000000000000000..19c6fa6bdb074d7d604f2a7332ba30b465d2a518 GIT binary patch literal 793 zcmeAS@N?(olHy`uVBq!ia0vp^2|(P7{tH^Qn#<96`SNK;=YBQGUd21Pf2YHS)Lkj%mzfSW zp3E+i=h$^se)|h`X5*-TOqb^>33cu=d&a=P6yWLN7*a9k?d*%bhYdtr;{}>Sl3Gfd zy?h!Z6lbpd_msbsX-Qr{f5Q>=U;(=z?PXnapIba!cG5OJVCz18OT)s$#frTG3j8ma zw(+qxEMzbcVQ6DI5Wpb8#o)}Cpuun^`PA&wy8>(Tw;f+35q|F5r|yOBf^`{@uh_Ph z#TZ7P>F3gTz3ij&-^S!Sb!l%rZ#dNjI7FJCeW&oL^qss#Tl@-X<*zC^s`gd<7JIwi zoR2MdC7O_HeoSKCd>5azebUJ*e+Duh>k66LVfgm_{ruLft0_x=3ht~6i!AB5^C#xn zx$w13cO0HsZTR*#cw@_-RU$XFKkK{yZJoY_=PUo4$D4ou-eJ8ZI5+Q3r+{E(<^S3B zRk`)&<`(YVdHu}kjn%qS-q*VYpMIdV;(gXCCiBJn9FjkUDc03#n1{LN?W@1!EV=R4 zx34EcC&atVXF1Dr!tzHz-6@_KTKoMEUEmRrwEL;V#kh{ccjI=Sue~K_e`+zN*!?iz z^W1CE zKfdjFpvqo*yDK+lF;JE_aw z_#1q)Q{h?H^k;SC?w<$k3w*oFbnLg?KKk^?E2*5o_*Ysd1Sc(+$!Mv5|NQ*Y`a_pk wJJ#&B|F6fgM(SU1-EBk^!<`3;_Zjg*4l|cu*tFvdFs(Cqy85}Sb4q9e02V`DIRF3v literal 0 HcmV?d00001 diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 4d1160cf..9ffb36c1 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2934,6 +2934,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) //GS13 character.fatness = starting_weight + character.realfatness = starting_weight character.weight_gain_rate = wg_rate character.weight_loss_rate = wl_rate diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 46241ca7..179ba7bc 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -620,7 +620,7 @@ /datum/reagent/medicine/lipolicide/on_mob_life(mob/living/carbon/M) if(M.nutrition <= NUTRITION_LEVEL_STARVING) M.adjustToxLoss(1*REM, 0) - if(M.fatness == 0) + if(M.realfatness == 0) M.nutrition = max(M.nutrition - 3, 0) // making the chef more valuable, one meme trap at a time if(HAS_TRAIT(M, TRAIT_LIPOLICIDE_TOLERANCE)) //GS13 edit M.adjust_fatness(-0.5, FATTENING_TYPE_WEIGHT_LOSS) diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index 166b04158f52a45a1672fee30042850826a69be3..4c30728be5a86f3895f16fc52594619b7c69c9b3 100644 GIT binary patch delta 1738 zcmV;*1~vKZr2(C%0gxnrd3sb>bVOxyV{&P5bZKvH004NLm6lCz+%OD<*W*(N$+jt) zNwSud4R37Vqs2#3PdazE_dg$=+}-0t^9#9z zL~iGWq`?}xjAVQQ82;%%3S;aA;7fuwsiuwqp1mAWbiBwS;bx}j5_R>UcP1KdS zjLT)e5b%NC*wL*Wy|$xQD*D+)gRljxOIyIYxCN}sTfn-&)2X&}?=-;B!_xpmCr<+m z{X7lOMQ0>~(u`z(ke87Rnlh3>NJg^EXD0z z=HL(Tg8DD5;9v!NEBFllFv2t$O#Ls1{>slsm~t?H2M{1ou__@3(c4{8jYSe+hfxf& zDVV?s``{t!T!=w{4SAxkY!Vc!o?Zvkrx*;~8&fP|;Pya&G-vRKHZjnkPta#T7r`G^ z@QnQmI#NT(V`60eD*I0A*V%WMI%3xa8uaEfLf?iAdacTcAft+16zEtVg^MDU z$}zFN@Y?~=dc*Mv2F+|$!jLV-E9r>(`SD@o7ky=rkGW`>5?GLrUC4dz$@C~ zi?F^UeVr!cu96{*Sg~aA_}_hd?(U!N+}-0t^9Q&GY?N%h5zyA7XoKY28*uyfA21#su;m!hA9-5fWwInS@g zPT47xF!=hM+9{Nf%6o6V-$#M?`CHD8Es=aod)SignlD@ew1*1zHL>}BFgvMk+-jWL zR6ecd3zup&tqf#D&%c{foAaiB`Sz=^Q#4J3ZQIZ^4V6j-(P$KvN(BIF`;rX9P>DnW z)oK;xav9}vx#75FSy*0P7Mp)v*H!cV8-}5h$s|nEL@t+;if)idB+%dA55q9j!oosB zJ$^NI%E$Am+UxG~k(J14t(!ZM}e!S*VrlRTY3ES-5*%r>cy@J>|q$^k;TQ! zAL6ZdSFyT!Su7g>_V;G7zBPnh)4#Usd$WkguZiV<`oRV^o5prcCwua%3%EJb2MmbC z18^FjD^KCg`J=|id+@J+-1)a{r`tL@IzmrRPp$c>R;xHXJQT~Vm&@hQ*VhNj5`Lli z7#L_hxv^Lbrs?y96lR(xVzF4uxL=K(GCb^Ur&8V<@$iONWZV28_~m!Irql9*o+Em( zoT&k-mX0t!Goily?3)MxjL%G{R|XY;2r5r)RBk^8rbX(k`TO>N=T+79GHt@?Dkh~z5 z4>*r;33YQ`x9aueepX4-7)sAk<=kqON#bVL75s~CJ zp2cFZ<(OZMos!LedfO{2-YP>j>or3og3tf@{C1@CvsrJ2#cxGQGT*JCalf@5=^E(e zai#`nZu(wid}c!Vjm=Hp>&g#jH^m3?BBIb? g14KkbM4|H)A3}b*6b6Lk3;+NC07*qoM6N<$g6y+%mjD0& delta 1550 zcmV+p2J!iwrvdGy0gxnra(Yx)bVOxyV{&P5bZKvH004NLm6p$L+b|5q&+$_T?R6d2 zv_0lBv>1A5U%{Yd##SR!0!1zLo_>e^bA|<^k&6TTXzAlef6}G<`S9!U+1)=qHouWe zNaS|z_WO@!a}2$VZs%^c&1S?fjPmxU2nf2JyAYgm1i_1D(+4hpZs)F>&7NVxx93lA zsPx6${+}6vdSCZ@9YlyS0zsVrAgee=^umdPS5Y6Kl;GPAB#|mAqb_Qw)LxsYt%X6ZBQkMev6e zJY&Ct&Xsdqx1G8Mj|eiZYS3{EvSx*W(QtiPC=RryoioOmjw=fM4ElC@+=tGmDT6;V zj(5$b#|X3Ax$U?2-y&BNdEhRP-YF#HVQ!7VkRy}{CZJY;4z1~H9vBIF>@Z4-`tU(1 zP}jYdPIP5y;o&KkWt013UsWG!c~z< z<(ODs`2B!rz2W!-gJ!lWVaS%?m2^b?{P+y=tG+VG$Y|*KyNzo~x+F-mX#l$<@P@Yd zDy)BzzD^TzSLy6FF5ScPy}N&UZ2kiBU~Q^%;h3GXrUDy40Uoo$LIn&8fU|txPj?Fd z(u9-IPQQPhI|gYZ3cvvTN61iJ>eWg*h)bzt6tOM^146l3j#3bGaL~nWwUd*B&~7aS zJ5(sNPFBRp4nhir(pDiuQN-wwqQWK3wefn!JDb=8FHe7V77_j5s@eg1v^XZ7556k-r2F{O zguq^ldkf&%y%$nH341wSW_g}p$6DD-=g@I|R_vv7=-1Ew`Mz%g+HOs`4;&fEr^2fh z*`E1yFA!c8a0aB!|KjwR7@R7d+kQPJ=F`2!P9NLjQqRAaQ=Id%`S$BrE8%b$j^iL4 z4#R)8Z8SAC!M1GxC_a`+(=-u@L~wF)0?V>sSyst$(=@TNvLbE%RaF(`&#!5kh(@C@ z3demCKeVJO8WS9BqH)t)jM|Kuuw5}w3COPNaHwVqo8)ytk{Je z)J`0yZ0LzJj&|}_>R2m@T^*m_t|GCkW8Z%O){P$Q8$kE%hv@73A}!aGIhZbHm;WVp zbz}~vrRG0*uvIbUWskk=!n)BTH6L&nK9|k;;jz5)?>G(|$3Z@yN1;$aKA(qe+psJP zrfI@7O=;PlWHO0NCIem9i<$MxZf|d|7*iAlhG9t0E@v196h)~R_v=VRx zUyMwSiZ@SRhX7z?a#URF5CB53e>$*dHh>8!J&XR#Y@FT;UD8LM!{2EDomgH2fOP=C z{XVIYMd=Ujt()zCylqHc{_+}d^F~axwYj@InM_P6bhK>a z$FG4pXP>%gyvF(E-@CcAlcWyry|Xz7w%tyWJ1i|N1^Uv8-=(E`?LM8CN~LNpJjTmk zM08c5cs$