From 873f5097a08f8e093b051da125d50716848ebf29 Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Wed, 8 Jan 2025 21:15:39 +0000 Subject: [PATCH] Fixes --- game/03-JavaScript/05-renderer/00-combat.js | 34 ++++++++++++++++++ .../05-renderer/19-npc-canvas-helper.js | 2 +- .../05-renderer/19-player-canvas-helper.js | 2 +- .../05-renderer/20-canvasmodel-combat-npc.js | 4 +-- .../05-renderer/20-canvasmodel-combat-pc.js | 6 ++-- .../05-renderer/21-npc-options.js | 5 +++ .../classes/housekeeping-events.twee | 2 +- .../penetrators/sus/rightarm-sperm.png | Bin 264 -> 1436 bytes .../missionary/penetrators/sus/rightarm.png | Bin 329 -> 1229 bytes types/clothing.d.ts | 3 +- 10 files changed, 49 insertions(+), 9 deletions(-) diff --git a/game/03-JavaScript/05-renderer/00-combat.js b/game/03-JavaScript/05-renderer/00-combat.js index 21781bc3b9..2e362f4c17 100644 --- a/game/03-JavaScript/05-renderer/00-combat.js +++ b/game/03-JavaScript/05-renderer/00-combat.js @@ -568,6 +568,40 @@ class CombatSystem { const state = wearingCondom(index); return state && ["defective", "sabotaged"].includes(state); } + + isPcGenitalsVisible() { + if (!this.isPcGenitalsExposed()) { + return false; + } + + if (V.lowerwetstage < 1) { + return false; + } + + if (V.underlowerwetstage < 1) { + return false; + } + + return true; + } + + isPcGenitalsExposed() { + const lowerExposed = V.worn.lower.exposed || 0; + if (lowerExposed < 2) { + return false; + } + + const underLowerExposed = V.worn.under_lower.exposed || 0; + if (underLowerExposed < 1) { + return false; + } + + if (V.worn.legs.state === "waist") { + return false; + } + + return true; + } } const combat = new CombatSystem(); // @ts-ignore diff --git a/game/03-JavaScript/05-renderer/19-npc-canvas-helper.js b/game/03-JavaScript/05-renderer/19-npc-canvas-helper.js index bbb0029ec6..fe4da1d305 100644 --- a/game/03-JavaScript/05-renderer/19-npc-canvas-helper.js +++ b/game/03-JavaScript/05-renderer/19-npc-canvas-helper.js @@ -336,7 +336,7 @@ class NpcCanvasHelper { if (penetrator.position === "leftarm") { return 48; // Behind the Z index of PC's "backarm" } - return 49; + return 55; }, }; return Object.assign(defaults, overrideOptions); diff --git a/game/03-JavaScript/05-renderer/19-player-canvas-helper.js b/game/03-JavaScript/05-renderer/19-player-canvas-helper.js index 68d8e9db15..1435b3175f 100644 --- a/game/03-JavaScript/05-renderer/19-player-canvas-helper.js +++ b/game/03-JavaScript/05-renderer/19-player-canvas-helper.js @@ -327,7 +327,7 @@ class PlayerCanvasHelper { srcfn(options) { const clothes = options.clothes[slot]; if (clothes?.name == null) return ""; - if (layer === "front" && PlayerCanvasHelper.isBestialHandjob(options, "front")) { + if (layer === "front" && options.position === "doggy" && PlayerCanvasHelper.isBestialHandjob(options, "front")) { return `${options.src}clothing/${slot}/${clothes.name}/sleeves/front-stroke.png`; } const position = layer === "front" ? options.armFrontPosition : options.armBackPosition; diff --git a/game/03-JavaScript/05-renderer/20-canvasmodel-combat-npc.js b/game/03-JavaScript/05-renderer/20-canvasmodel-combat-npc.js index 7455d54d96..5d968f12df 100644 --- a/game/03-JavaScript/05-renderer/20-canvasmodel-combat-npc.js +++ b/game/03-JavaScript/05-renderer/20-canvasmodel-combat-npc.js @@ -76,7 +76,7 @@ const combatMainNpc = { return options.animKey; }, zfn(options) { - return 49; + return 54; }, }, npcHoleEjaculate: { @@ -91,7 +91,7 @@ const combatMainNpc = { return options.animKey; }, zfn(options) { - return 49; + return 54; }, }, npcTongue: NpcCanvasHelper.genNpcTongue(), diff --git a/game/03-JavaScript/05-renderer/20-canvasmodel-combat-pc.js b/game/03-JavaScript/05-renderer/20-canvasmodel-combat-pc.js index 7295bf8edf..1241ba173c 100644 --- a/game/03-JavaScript/05-renderer/20-canvasmodel-combat-pc.js +++ b/game/03-JavaScript/05-renderer/20-canvasmodel-combat-pc.js @@ -723,7 +723,7 @@ const combatMainPc = { frontarm: { srcfn(options) { // Find target of hand if any, if bestial (pig) swap out sprite. - if (PlayerCanvasHelper.isBestialHandjob(options, "front")) { + if (options.position === "doggy" && PlayerCanvasHelper.isBestialHandjob(options, "front")) { return `${options.src}body/arms/front-${options.armFrontPosition}-bestial.png`; } // Generic position. @@ -1388,7 +1388,7 @@ const combatMainPc = { srcfn(options) { const clothes = options.clothes.hands; if (clothes?.name == null) return ""; - if (PlayerCanvasHelper.isBestialHandjob(options, "front")) { + if (options.position === "doggy" && PlayerCanvasHelper.isBestialHandjob(options, "front")) { return `${options.src}clothing/hands/${clothes.name}/front-handjob-bestial.png`; } return `${options.src}clothing/hands/${clothes.name}/front-${options.armFrontPosition}.png`; @@ -1416,7 +1416,7 @@ const combatMainPc = { srcfn(options) { const clothes = options.clothes.hands; if (clothes?.name == null) return ""; - if (PlayerCanvasHelper.isBestialHandjob(options, "front")) { + if (options.position === "doggy" && PlayerCanvasHelper.isBestialHandjob(options, "front")) { return `${options.src}clothing/hands/${clothes.name}/front-handjob-bestial-acc.png`; } const path = `${options.src}clothing/hands/${clothes.name}/front-${options.armFrontPosition}-acc.png`; diff --git a/game/03-JavaScript/05-renderer/21-npc-options.js b/game/03-JavaScript/05-renderer/21-npc-options.js index eb8edb2a92..bd7c6763eb 100644 --- a/game/03-JavaScript/05-renderer/21-npc-options.js +++ b/game/03-JavaScript/05-renderer/21-npc-options.js @@ -226,6 +226,11 @@ class NpcCombatMapper { "penisentrance", "penisimminent", ].includes(npc.mouth); + + if (typeof npc.mouth === "string" && ["penis", "penisentrance", "penisimminent"].includes(npc.mouth) && !combat.isPcGenitalsExposed()) { + options.tongue.show = false; + } + options.tongue.position = typeof npc.mouth === "string" ? npc.mouth : null; options.penetrators = options.penetrators = []; diff --git a/game/overworld-town/loc-school/classes/housekeeping-events.twee b/game/overworld-town/loc-school/classes/housekeeping-events.twee index d3b9f6873f..72fc5474c1 100644 --- a/game/overworld-town/loc-school/classes/housekeeping-events.twee +++ b/game/overworld-town/loc-school/classes/housekeeping-events.twee @@ -790,7 +790,7 @@ You hear traffic. The door opens a few moments later, and you shield your eyes f Your eyes adjust, and you see a <<fullGroup>> grinning down at you. Their arms reach in, and drag you into the waiting alley. <br><br> -<<link [[Next|Housekeeping Bin Rape]]>><<set $rapestart to 1>><</link>> +<<link [[Next|Housekeeping Bin Rape]]>><<set $molestationstart to 1>><</link>> <br> :: Housekeeping Bin Rape diff --git a/img/sex/missionary/penetrators/sus/rightarm-sperm.png b/img/sex/missionary/penetrators/sus/rightarm-sperm.png index 5442e57dfcc689815a8d836b4248ce9a595349d9..174dfacffb71759ee31ca865571598805e19507b 100644 GIT binary patch delta 1255 zcmV<D1Q`2>0-Otw8Gi-<004bg(F*_o1KoO5SaechcOY<bZ)Rz1Wgv8UaAhE6cxh$; z0C?K1mT7V%DGWycbBZ|v+CUr!5JdD1`uOvawRo#`gl9U5EU*%U(36DI`u%ICfAA1j zO={IkD<$L6rj0uWp5LBz?_19Mj1@24W%Qgy>BEP|h|u22^?&h|ArbU)`}4V<97Xa@ zQF-?CN>27kF3;`xgGFARJM(*aS#L%?O}W2&hi{xYo!Q#8z(3`FsK*hn5he~CPOfDI zt>QI|>(v^X=bmRG&5>swXp<T-N#3Ls)M?YY`biTeDle|+nJ3F7bE({TN){4LqN239 zN|O*5mdQ&5Qh$EhLf5|S+HR6#;~>mrf-=I2tEI=_|F)Nk_MXQ@beyR-U%@WsgMp40 z<@{pS`M4i(WS4^<?ehb$P@<T1-0V1D&*P?I7`?@oqzklQqM^S*rW$tzFbI1aj3EJm zTu6)x<;q-%;713a4$E1R@&E!d<A9Z{A_Z`q&)!&5>3^Eb#y2ri2p~*~RG?|n!AjM% zB(3U*p>ASoX2q(xHS0x+7AvLHa&oa(sama;TC3MqyNj!v7q9N#yr;%ZkgL{8tIb<$ zy<^i3%^j<|cL)X#89Ho~QHPH<`b79loi@v?(`TDK1&4%&MTr_7E&8H`P+Gcdl~tFo zw)#e>ZGYLiZI@lQ@3#As+C?>eVD^>V_tfZ44ZzaHOfl&}4dPlKD(I9GJIp|gl|Z~6 z0tje6%(9azA9Cq1%Z-s0#<0>3oS;Jt1a%SHrYE~Ma$mS5<o$o;#_!3cgYIvTO9$Nx za$mW<pcbdT&y$B4h3%x_acUN%A0{mC?3lqn>wnWv7yL+3(AaT`Uynk=eVC$x28d*~ z5)q@$+UCl_qjwyF%1WM>_$6CaItoy~G=A(`iH=~3K)oEb0SJZZ2A~nU30!8WBCt?4 zK)N^zGH`9UxFHt$G}7g<i(@e&4b>Xu+z`eyLo-6a3?{6zSfMDFD$|U<_d|;^`?4Nw z;eT@Cy^Psw0s5U=;gJU15itdvdlsiqKcV*eh_}A4S-Z{P)tcDW$`jYoKqdwwVRXl0 zWJcir@vRX~YfJ<$Qb>cpu{ZK4kxE%T`YbwRH#SFBSss#Oo<cCQW6Nc@!Zx&e?TGWa zUnorP1OpX!Tc9@Ms-w9UQ^^Pc<a$#XgMS)0p)yTI-mTtG_K^3jfPy%}?-_jVso;=H zd7?a2k?Ba=nH3rDl3^6BohPo=wc&~Bkw8K7My0X-C+A*0<KL)ixSM5{uE<;59NFp| z8+uXhfFG4W<_c*Tt?YAKt_=n8XPJ`zQmXw~5sE}h{{p6SX!ZJeeMbNQ010qNSu}G1 z01FcU01FcV0GgZ_0004HNkl<Zc-rmRK@NZ*3<N+RG5-I#gu{CF;8{p#p3rV7Xls#i z8<Btvk$?=5fDDm<43U5gk$?=5fDB^*0Kop{O6E#b0sx9$1XKa2s4KyH3EWp#699W5 zc7hin0CoZz4mb~})N2_4!;VZK8-QU)9*_aRup<+Ifk*$52lN<$0L(k!KmdS$4J7~o z0Dup^3Il*kz|s5y0PqR~09=uA8<Btvk$?=5fDDm<43U5gk$?=5fD0GkI1hGWeq!aQ R!?6GW002ovPDHLkV1iXrP9p#S delta 200 zcmbQk-N7_LGK`slfx)X&(Go~876-XIF|0c$^AgBm3-AeX1=2r%|37M>mJMVvl?3?( zGyIR9sI(QxTjc5D7*a9k?UjRq42m2qjwkJ3{+@BT!nK^Kd&5)9$$>1gUKeIZ&WX4G z$M}|Q+1`fF$6uXaE|*lzIDbdIorB%6sGrYXGm2~o&EI!!|0lyujIXBWpRae_+Ftd) z)XtDKVx6ADT>sO5r?2J?crF|aG)`LlLBHM2=?t1PnkG*H+RxzW>gTe~DWM4f!1Pb+ diff --git a/img/sex/missionary/penetrators/sus/rightarm.png b/img/sex/missionary/penetrators/sus/rightarm.png index f15673200981209f99891653dd8461dd76af0454..6eb3552b7a7a381a18105d84db953c5940a0a898 100644 GIT binary patch delta 1221 zcmV;$1Umc40?i4K7=Hu<0001wdCWKf00WD9R9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3 z004N})s|a!Bqt1p-)j|F0=goWBW~wp2U&i8%H3^y?BrxJc}dY_Xj(`@p9H?vAHVPG zH$228F0~ro+zTFU+Bh+Y^8Tzx-%8nMta#}$M=vS5KK<|<5r5i;d42xMm=W~y_Vr~? zjw1P>$X`8uH&6D%yu8fwCy&Bkmigm6_jjjWt~}noXKd{GI?|fzh>t%u_1xk;f?&ty z<X+}z6|Z4j@7B<wWEmG}nPrrYHmDJklub&Lk~XcoA2i^i^5Tk~d9d7bA(a~sDMF%` zs3>i&(qu{q%YWb{f?0m~Lbu&^n;R4`JPDFaP)1mBx9d6h)%LBTy~ha=onY!)tl$^( zi94Mr%J~ba^W%Qzk=+4)wjUpWg%X9-33FhBS^ArbZuFj8a^0W>f`<MLGS&G|0Eb}P z;0y@}6elrqDwVksA&vn)3C~$B<qia7#uHw$ia6i|AAj3eQ|Xpv<F{#)5I~r?RG?{+ zV5Ms6msSnrP@0&UnOn86X6fSU=I+%`EoPOf)vDK8qqdqMp<&@sBcerKjhmoWt$C|0 zT5Fjwn$VnBospR6+@))`?!ETtt>-}c3>`Ln)DfeNye3bXI&J!_GiIB)Xd#uBE?d6p ziq%$bq<`9$t=qQmx?{JUFKRc{>l3rD<o=!-J*WZLbu&{4J*i>3)~5<O$B7+gAjV1{ zUJn5zG#_RqNR<z{>o6;gQ5DAU(hi(ShZqRzBDPI0cJJiAaJx|V|CSqnBzGNj{{^}0 zp!<g0S8m@>o9BEVrw$7awo`^Ds6|kI5Ll5MkbmHx>#v_(@Xr)=cbnW#1Z|AEa9_0r z1U$Rq6J)WoNG#pDW~_=#)v4BJT#0htE|j-Eg$`1DO8L-d0(G&091zsQ3RvV-6~SF& z&82grM25*6VbWQ;gZtFBW<!o3v;)Un&U18(+o1im!RsD)hl2Fz8)?{bcat`eKqGdS z*?(tWi`!VjV_<(%+9+8GIRyuOxlXdneJ`X)<btO$$7q#sP19T(ew-_z)43Or7*)1q zP8>&$lP~+jnb6bW?nhZ+VA+wrlsdXs8okz>wUJ2UG8l<H*>PVDT!4tx+QYr2A?-YQ zuHl#2sjuxN5_#AV0A49Q6&cGG)1t`g6Mv;`wy+9Gczg5)Te;*tLW~}RU+w>gie#fW z@lV$ECq`C9hE5W?3jhEB5>QN3MF0Q*0001KE-s8Zn$~mY@S6WEudj3f0004WQchC< zK<3zH00009a7bBm000XU000XU0RWnu7ytkOy-7qtRCwC$)XQzdFbn`tSrY_y27eG3 zO(1y!+xyRyAQKd3(O%xWQ{YErDF6Tf0000000000006*`v}AllYyXw|Qfk!P6SW?x z3?j}sj(WERON~gButuM~#qIb<iT>)D4y^MUnK#zgJ`*Ku*NkIaEit~t^u8JF(K5ei z`}8kS!WL0lzg@txpCh@y&&b`8=RT)@i4vCY7T;gs5iNa%ej`44$4cS`0000000000 j0000000000z+ZR+>)sEvKbNA#00000NkvXXu0mjf%A7kF literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yU;;838aSANq*te+C6Hn)4sv&5Sa(k5C6L1(;1l8s zq%-yOdaPz$D}MfA*8iriz-XWlYe|q_FvEW!kh!1+G>PH5r;B4q#hkZS4f&2J@UR?^ z`0;->zmQ;Txoq?upQ%cda`!a723rSIiv>K`zqRDA>b;|trFS>CtIz-HzOFfHw|s3> z?3Ty9S0?W}A@=Rf%#-*3^qN_FxGso#pZsOotK@eHW&)?;*Ium7VSf3?*7wZgeE+W} zd_%13I(4taT9&cD|Kl3JK<fTY?mLI9>n7@6`91Z<!E^CpfB!v=`1>PKW}00!7Kfk+ aHQcwWKFs)Fa^BN$khrI-pUXO@geCwLIdxnB diff --git a/types/clothing.d.ts b/types/clothing.d.ts index 631e104c6d..183088938e 100644 --- a/types/clothing.d.ts +++ b/types/clothing.d.ts @@ -50,6 +50,8 @@ declare module "twine-sugarcube" { outfit: { [x in ClothedSlots]: string; }[]; + lowerwetstage: number; + underlowerwetstage: number; } export interface SugarCubeSetupObject { @@ -150,7 +152,6 @@ declare global { */ exposed?: 0 | 1 | 2; plural: number; - exposed: number; exposed_base?: number; vagina_exposed?: number; vagina_exposed_base?: number; -- GitLab